Skip to content

Commit da6e522

Browse files
authored
Merge pull request evidence-dev#3013 from evidence-dev/slider-large-max-bug
Slider large max bug
2 parents c182181 + 29cb75f commit da6e522

3 files changed

Lines changed: 59 additions & 4 deletions

File tree

.changeset/spicy-grapes-decide.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@evidence-dev/core-components': patch
3+
---
4+
5+
fixed slider delay with large min max value difference

packages/ui/core-components/src/lib/atoms/inputs/slider/Slider.stories.svelte

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@
1919
import Slider from './Slider.svelte';
2020
import { Query } from '@evidence-dev/sdk/usql';
2121
import { query } from '@evidence-dev/universal-sql/client-duckdb';
22+
import Dropdown from '../dropdown/Dropdown.svelte';
23+
import DropdownOption from '../dropdown/helpers/DropdownOption.svelte';
24+
import { getInputContext } from '@evidence-dev/sdk/utils/svelte';
25+
// From layout.js
26+
const inputStore = getInputContext();
2227
2328
// const data = Query.create(`SELECT *, MAX(fare) as max_fare from flights limit 10`, query);
2429
const data = Query.create(
@@ -30,6 +35,9 @@
3035
LIMIT 10`,
3136
query
3237
);
38+
39+
$: dynamicMaxColumn = $inputStore?.['maxCol']?.value ? $inputStore['maxCol'].value : 1000;
40+
$: dynamicMinColumn = $inputStore?.['maxCol']?.value ? $inputStore['minCol'].value : 0;
3341
</script>
3442
3543
<Template let:args>
@@ -134,8 +142,37 @@
134142
args={{
135143
defaultValue: '18',
136144
fmt: 'usd0',
137-
steps: '2',
145+
step: '2',
138146
max: '20',
139147
min: '0'
140148
}}
141149
/>
150+
<Story name="Large Max Value, small steps">
151+
<Slider title="A" name="A" min="0" max="10" step="1" />
152+
<Slider title="B" name="B" min="0" max="100" step="1" />
153+
<Slider title="C" name="C" min="0" max="1000" step="1" />
154+
<Slider title="D" name="D" min="0" max="10000" step="1" />
155+
<Slider title="E" name="E" min="0" max="100000" step="1" />
156+
<Slider title="F" name="F" min="0" max="1000000" step="1" />
157+
<Slider title="G" name="G" min="0" max="7978" step="1" />
158+
<Slider title="H" name="H" min="0" max="79789" step="1" />
159+
<Slider title="I" name="I" min="0" max="79789" step="1000" />
160+
<Slider title="J" name="J" min="0" max="1007" step="1" />
161+
</Story>
162+
<Story name="Reactive Max Min">
163+
<Dropdown name="minCol">
164+
<DropdownOption value={0} />
165+
<DropdownOption value={1000} />
166+
</Dropdown>
167+
{#if $inputStore['minCol']}
168+
minCol Value: {$inputStore['minCol'].value}
169+
{/if}
170+
<Dropdown name="maxCol">
171+
<DropdownOption value={10000} />
172+
<DropdownOption value={100000} />
173+
</Dropdown>
174+
{#if $inputStore['maxCol']}
175+
maxCol Value: {$inputStore['maxCol'].value}
176+
{/if}
177+
<Slider step="1" name="slider" title="Slider" max={dynamicMaxColumn} min={dynamicMinColumn} />
178+
</Story>

packages/ui/core-components/src/lib/atoms/inputs/slider/_Slider.svelte

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,13 @@
7676
}
7777
}
7878
79-
if (min !== undefined) {
79+
$: if (min !== undefined) {
8080
min = validateNumber(min, 'min');
8181
}
82-
if (max !== undefined) {
82+
$: if (max !== undefined) {
8383
max = validateNumber(max, 'max');
8484
}
85-
if (max !== undefined && min !== undefined) {
85+
$: if (max !== undefined && min !== undefined) {
8686
checkMinMax(min, max);
8787
}
8888
@@ -163,6 +163,19 @@
163163
}
164164
}
165165
}
166+
167+
// handle steps, slider lags when there are greater then 1000 steps/ticks between max and min
168+
$: sliderTicks = max - min;
169+
$: minStep = sliderTicks / 1000;
170+
const handleSteps = () => {
171+
if (sliderTicks > 1000 && step < minStep) {
172+
step = minStep;
173+
}
174+
};
175+
176+
$: if (sliderTicks > 1000) {
177+
handleSteps();
178+
}
166179
</script>
167180
168181
<HiddenInPrint enabled={hideDuringPrint}>

0 commit comments

Comments
 (0)