Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | 66x 66x 12x 12x 66x 30x 30x 12x 12x 30x | import { DynamicFilterResponseProps } from "@props/RecordProps"; import { getDynamicFilters } from "@utils/FetchUtils"; import { useEffect, useReducer } from "react"; export type FiltersStateType = { dynamicFilters: Array<DynamicFilterResponseProps>; defaultFilter?: DynamicFilterResponseProps; }; export const filtersInitialState: FiltersStateType = { dynamicFilters: [], defaultFilter: undefined, }; export const filtersReducer = (state: unknown, action: { type: 'set'; payload: FiltersStateType; }): FiltersStateType => { switch (action.type) { case 'set': return { dynamicFilters: action.payload.dynamicFilters, defaultFilter: action.payload.defaultFilter }; default: throw new Error("Not support action ", action.type); } }; export const useFilter = (domainName: string, displayDefault?: boolean, refresh?: number): [Array<DynamicFilterResponseProps>, DynamicFilterResponseProps | undefined] => { const [state, dispatch] = useReducer(filtersReducer, filtersInitialState); useEffect(() => { getDynamicFilters(domainName, (displayDefault ?? true)) .then((filters: Array<DynamicFilterResponseProps>) => { dispatch({ type: 'set', payload: { dynamicFilters: filters, defaultFilter: filters?.find(f => f.isDefault === true) } }); }).catch(e => console.error(`Failed to get filter of domain ${domainName}: ${e}`)); }, [domainName, displayDefault, refresh]); return [state.dynamicFilters, state.defaultFilter]; }; |