import React from 'react' import * as persisted from '#/state/persisted' type StateContext = persisted.Schema['invites'] type ApiContext = { setInviteCopied: (code: string) => void } const stateContext = React.createContext( persisted.defaults.invites, ) const apiContext = React.createContext({ setInviteCopied(_: string) {}, }) export function Provider({children}: React.PropsWithChildren<{}>) { const [state, setState] = React.useState(persisted.get('invites')) const api = React.useMemo( () => ({ setInviteCopied(code: string) { setState(state => { state = { ...state, copiedInvites: state.copiedInvites.includes(code) ? state.copiedInvites : state.copiedInvites.concat([code]), } persisted.write('invites', state) return state }) }, }), [setState], ) React.useEffect(() => { return persisted.onUpdate(() => { setState(persisted.get('invites')) }) }, [setState]) return ( {children} ) } export function useInvitesState() { return React.useContext(stateContext) } export function useInvitesAPI() { return React.useContext(apiContext) }