Skip to content

Commit 44dd934

Browse files
committed
allow to select multiple or one chip
1 parent 18ea16b commit 44dd934

2 files changed

Lines changed: 39 additions & 14 deletions

File tree

src/components/Elements/ChipsSet/ChipsSet.tsx

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,44 @@ type ChangeAction = 'ADD' | 'REMOVE'
2020
type ChipsSetProps = {
2121
options: Option[]
2222
defaultValues?: string[]
23-
onChange?: (action: ChangeAction, option: Option) => void
23+
canSelectMultiple?: boolean
24+
onChange?: (action: ChangeAction, options: Option[]) => void
2425
}
2526

26-
export const ChipsSet = ({ options, onChange, defaultValues }: ChipsSetProps) => {
27+
export const ChipsSet = ({
28+
options,
29+
canSelectMultiple = false,
30+
onChange,
31+
defaultValues,
32+
}: ChipsSetProps) => {
2733
const [selectedChips, setSelectedChips] = useState<string[] | undefined>(defaultValues || [])
2834

2935
const onSelect = (option: Option) => {
3036
if (selectedChips?.some((chipValue) => chipValue === option.value)) {
31-
setSelectedChips((prev) => prev?.filter((chipValue) => chipValue !== option.value))
32-
onChange && onChange('REMOVE', option)
37+
if (!canSelectMultiple) {
38+
return
39+
}
40+
const newVal = selectedChips?.filter((chipValue) => chipValue !== option.value)
41+
setSelectedChips(newVal)
42+
onChange &&
43+
onChange(
44+
'REMOVE',
45+
options.filter((opt) => newVal.some((selectedVal) => selectedVal === opt.value))
46+
)
3347
} else {
34-
setSelectedChips((prev) => [...(prev || []), option.value])
35-
onChange && onChange('ADD', option)
48+
let newVal: string[] = []
49+
if (canSelectMultiple) {
50+
newVal = [...(selectedChips || []), option.value]
51+
} else {
52+
newVal = [option.value]
53+
}
54+
55+
setSelectedChips(newVal)
56+
onChange &&
57+
onChange(
58+
'ADD',
59+
options.filter((opt) => newVal.some((selectedVal) => selectedVal === opt.value))
60+
)
3661
}
3762
}
3863

src/components/Elements/FloatingFilter/FloatingFilter.tsx

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import { SupportedCard, GLOBAL_TAG, MY_LANGUAGES_TAG, dateRanges } from 'src/config'
2-
import { FiFilter } from 'react-icons/fi'
31
import { useState } from 'react'
2+
import { FiFilter } from 'react-icons/fi'
43
import { BottomSheet } from 'react-spring-bottom-sheet'
54
import 'react-spring-bottom-sheet/dist/style.css'
6-
import { useUserPreferences } from 'src/stores/preferences'
7-
import { trackCardLanguageSelect, trackCardDateRangeSelect } from 'src/lib/analytics'
85
import { ChipsSet } from 'src/components/Elements'
6+
import { dateRanges, GLOBAL_TAG, MY_LANGUAGES_TAG, SupportedCard } from 'src/config'
7+
import { trackCardDateRangeSelect, trackCardLanguageSelect } from 'src/lib/analytics'
8+
import { useUserPreferences } from 'src/stores/preferences'
99

1010
type ListingFilterMobileProps = {
1111
card: SupportedCard
@@ -53,9 +53,9 @@ export const FloatingFilter = ({ card, filters = ['language'] }: ListingFilterMo
5353
onChange={(_, option) => {
5454
setCardSettings(card.value, {
5555
...cardsSettings[card.value],
56-
language: option.value,
56+
language: option[0].value,
5757
})
58-
trackCardLanguageSelect(card.analyticsTag, option.value)
58+
trackCardLanguageSelect(card.analyticsTag, option[0].value)
5959
}}
6060
/>
6161
</div>
@@ -76,9 +76,9 @@ export const FloatingFilter = ({ card, filters = ['language'] }: ListingFilterMo
7676
onChange={(_, option) => {
7777
setCardSettings(card.value, {
7878
...cardsSettings[card.value],
79-
dateRange: option.value,
79+
dateRange: option[0].value,
8080
})
81-
trackCardDateRangeSelect(card.analyticsTag, option.value)
81+
trackCardDateRangeSelect(card.analyticsTag, option[0].value)
8282
}}
8383
/>
8484
</div>

0 commit comments

Comments
 (0)