KindFilterProvider.tsx raw
1 import { createContext, useContext, useState } from 'react'
2 import storage, { dispatchSettingsChanged } from '@/services/local-storage.service'
3
4 type TKindFilterContext = {
5 showKinds: number[]
6 updateShowKinds: (kinds: number[]) => void
7 }
8
9 const KindFilterContext = createContext<TKindFilterContext | undefined>(undefined)
10
11 export const useKindFilter = () => {
12 const context = useContext(KindFilterContext)
13 if (!context) {
14 throw new Error('useKindFilter must be used within a KindFilterProvider')
15 }
16 return context
17 }
18
19 export function KindFilterProvider({ children }: { children: React.ReactNode }) {
20 const [showKinds, setShowKinds] = useState<number[]>(storage.getShowKinds())
21
22 const updateShowKinds = (kinds: number[]) => {
23 storage.setShowKinds(kinds)
24 setShowKinds(kinds)
25 dispatchSettingsChanged()
26 }
27
28 return (
29 <KindFilterContext.Provider value={{ showKinds, updateShowKinds }}>
30 {children}
31 </KindFilterContext.Provider>
32 )
33 }
34