(options?: { defaultShown?: boolean; urlKey?: string })
| 6 | const DEFAULT_URL_KEY = "filterData"; |
| 7 | |
| 8 | export const useFilters = (options?: { defaultShown?: boolean; urlKey?: string }) => { |
| 9 | const [filterData, setFilterData] = useQueryParam<{ shown: boolean; filters: FilterData[] }>( |
| 10 | options?.urlKey ?? DEFAULT_URL_KEY, |
| 11 | withDefault(JsonParam, { shown: !!options?.defaultShown, filters: [] }), |
| 12 | ); |
| 13 | |
| 14 | const setFiltersShown = (shown: boolean) => setFilterData({ ...filterData, shown }); |
| 15 | |
| 16 | const addFilter = (filter: FilterData) => { |
| 17 | setFilterData({ shown: true, filters: [...filterData.filters, filter] }); |
| 18 | }; |
| 19 | const updateFilter = (filter: FilterData) => |
| 20 | setFilterData({ |
| 21 | shown: true, |
| 22 | filters: filterData.filters.map((f) => (f.id === filter.id ? filter : f)), |
| 23 | }); |
| 24 | |
| 25 | const removeFilter = (filter: FilterData) => |
| 26 | setFilterData({ ...filterData, filters: filterData.filters.filter((f) => f.id !== filter.id) }); |
| 27 | |
| 28 | const setFilters = (filters: FilterData[]) => setFilterData({ shown: true, filters }); |
| 29 | |
| 30 | return { |
| 31 | filters: filterData.filters, |
| 32 | filtersShown: filterData.shown, |
| 33 | addFilter, |
| 34 | updateFilter, |
| 35 | removeFilter, |
| 36 | setFiltersShown, |
| 37 | setFilters, |
| 38 | }; |
| 39 | }; |
| 40 | |
| 41 | export const constructFiltersQueryParams = ({ |
| 42 | filters, |
no outgoing calls
no test coverage detected