import React from 'react' import * as persisted from '#/state/persisted' type StateContext = persisted.Schema['constellationInstance'] type SetContext = (v: persisted.Schema['constellationInstance']) => void const stateContext = React.createContext( persisted.defaults.constellationInstance, ) const setContext = React.createContext( (_: persisted.Schema['constellationInstance']) => {}, ) export function Provider({children}: React.PropsWithChildren<{}>) { const [state, setState] = React.useState( persisted.get('constellationInstance'), ) const setStateWrapped = React.useCallback( (constellationInstance: persisted.Schema['constellationInstance']) => { setState(constellationInstance) persisted.write('constellationInstance', constellationInstance) }, [setState], ) React.useEffect(() => { return persisted.onUpdate( 'constellationInstance', nextConstellationInstance => { setState(nextConstellationInstance) }, ) }, [setStateWrapped]) return ( {children} ) } export function useConstellationInstance() { return ( React.useContext(stateContext) ?? persisted.defaults.constellationInstance! ) } export function useSetConstellationInstance() { return React.useContext(setContext) }