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