| import { createContext, useContext, useState, ReactNode } from 'react'; | |
| interface ActivePanelContextType { | |
| active: string | undefined; | |
| setActive: (id: string) => void; | |
| } | |
| const ActivePanelContext = createContext<ActivePanelContextType | undefined>(undefined); | |
| export function ActivePanelProvider({ | |
| children, | |
| defaultActive, | |
| }: { | |
| children: ReactNode; | |
| defaultActive?: string; | |
| }) { | |
| const [active, _setActive] = useState<string | undefined>(defaultActive); | |
| const setActive = (id: string) => { | |
| localStorage.setItem('side:active-panel', id); | |
| _setActive(id); | |
| }; | |
| return ( | |
| <ActivePanelContext.Provider value={{ active, setActive }}> | |
| {children} | |
| </ActivePanelContext.Provider> | |
| ); | |
| } | |
| export function useActivePanel() { | |
| const context = useContext(ActivePanelContext); | |
| if (context === undefined) { | |
| throw new Error('useActivePanel must be used within an ActivePanelProvider'); | |
| } | |
| return context; | |
| } | |