Spaces:
Running
Running
File size: 1,242 Bytes
3a12290 | 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 46 47 48 49 | "use client"
import { createContext, useContext, useEffect, useMemo, useState } from "react"
type AudienceMode = "research" | "policy"
interface AudienceModeContextValue {
mode: AudienceMode
setMode: (mode: AudienceMode) => void
}
const AudienceModeContext = createContext<AudienceModeContextValue | null>(null)
const STORAGE_KEY = "eval-cards-audience-mode"
export function AudienceModeProvider({ children }: { children: React.ReactNode }) {
const [mode, setModeState] = useState<AudienceMode>("research")
useEffect(() => {
const storedMode = window.localStorage.getItem(STORAGE_KEY)
if (storedMode === "research" || storedMode === "policy") {
setModeState(storedMode)
}
}, [])
const setMode = (nextMode: AudienceMode) => {
setModeState(nextMode)
window.localStorage.setItem(STORAGE_KEY, nextMode)
}
const value = useMemo(() => ({ mode, setMode }), [mode])
return (
<AudienceModeContext.Provider value={value}>
{children}
</AudienceModeContext.Provider>
)
}
export function useAudienceMode() {
const context = useContext(AudienceModeContext)
if (!context) {
throw new Error("useAudienceMode must be used within an AudienceModeProvider")
}
return context
}
|