Skip to content

Commit 8d8d906

Browse files
fix(#1323391): [Example App] Price slider blinking and add range value
1 parent 11e0fd3 commit 8d8d906

File tree

2 files changed

+13
-5
lines changed

2 files changed

+13
-5
lines changed

front/example-app/src/components/Facets/FacetSlider.tsx

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { IGraphqlAggregation } from '@elastic-suite/gally-admin-shared'
44
import { IFilterChange } from '../../types'
55

66
import { Container } from './Facet.styled'
7+
import { useState } from 'react'
78

89
interface IProps {
910
activeOptions: string[]
@@ -16,20 +17,24 @@ function FacetSlider(props: IProps): JSX.Element {
1617
const { activeOptions, filter, id, onChange } = props
1718
const min = Number(filter.options.at(0).value)
1819
const max = Number(filter.options.at(-1).value)
20+
const [value, setValue] = useState<number[]>([min, max])
21+
1922
const marks = [
2023
{
2124
value: min,
2225
label: min,
2326
},
2427
]
28+
2529
if (min !== max) {
2630
marks.push({
2731
value: max,
2832
label: max,
2933
})
3034
}
31-
function handleChange(_: Event, value: number | number[]): void {
32-
onChange(filter, String(value))()
35+
36+
function handleChange(_: Event, value: number[]): void {
37+
onChange(filter, value.join(' - '))()
3338
}
3439

3540
return (
@@ -39,8 +44,9 @@ function FacetSlider(props: IProps): JSX.Element {
3944
marks={marks}
4045
max={max}
4146
min={min}
42-
onChange={handleChange}
43-
value={Number(activeOptions[0] ?? max)}
47+
onChange={(_e, v: number[]): void => setValue(v)}
48+
onChangeCommitted={(e): void => handleChange(e as Event, value)}
49+
value={activeOptions[0] ? value : [min, max]}
4450
valueLabelDisplay="auto"
4551
/>
4652
</Container>

front/example-app/src/services/product.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,10 @@ export function getProductFilters(
3232
eq: true,
3333
} as IStockTypeDefaultFilterInputType
3434
} else if (activeFilter.filter.type === AggregationType.SLIDER) {
35+
const [min, max] = activeFilter.value.split(' - ')
3536
acc[activeFilter.filter.field as keyof IProductFieldFilterInput] = {
36-
lte: Number(activeFilter.value),
37+
lte: Number(max),
38+
gte: Number(min),
3739
} as IEntityIntegerTypeFilterInput
3840
} else if (
3941
activeFilter.filter.type === AggregationType.CHECKBOX ||

0 commit comments

Comments
 (0)