You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.4 KiB
48 lines
1.4 KiB
import storage from '@/services/local-storage.service' |
|
import { createContext, useContext, useState } from 'react' |
|
|
|
type TContentPolicyContext = { |
|
autoplay: boolean |
|
setAutoplay: (autoplay: boolean) => void |
|
|
|
defaultShowNsfw: boolean |
|
setDefaultShowNsfw: (showNsfw: boolean) => void |
|
} |
|
|
|
const ContentPolicyContext = createContext<TContentPolicyContext | undefined>(undefined) |
|
|
|
export const useContentPolicy = () => { |
|
const context = useContext(ContentPolicyContext) |
|
if (!context) { |
|
throw new Error('useContentPolicy must be used within an ContentPolicyProvider') |
|
} |
|
return context |
|
} |
|
|
|
export function ContentPolicyProvider({ children }: { children: React.ReactNode }) { |
|
const [autoplay, setAutoplay] = useState<boolean>(storage.getAutoplay()) |
|
const [defaultShowNsfw, setDefaultShowNsfw] = useState<boolean>(storage.getDefaultShowNsfw()) |
|
|
|
const updateAutoplay = (autoplay: boolean) => { |
|
storage.setAutoplay(autoplay) |
|
setAutoplay(autoplay) |
|
} |
|
|
|
const updateDefaultShowNsfw = (defaultShowNsfw: boolean) => { |
|
storage.setDefaultShowNsfw(defaultShowNsfw) |
|
setDefaultShowNsfw(defaultShowNsfw) |
|
} |
|
|
|
return ( |
|
<ContentPolicyContext.Provider |
|
value={{ |
|
autoplay, |
|
setAutoplay: updateAutoplay, |
|
defaultShowNsfw, |
|
setDefaultShowNsfw: updateDefaultShowNsfw |
|
}} |
|
> |
|
{children} |
|
</ContentPolicyContext.Provider> |
|
) |
|
}
|
|
|