import React, { createContext } from 'react' import { sanitise } from '~/functions/path' import { smarts } from '~/smarts' export interface ThingtimeContextInterface { thingtime: any setThingtime: any } export const ThingtimeContext = createContext( null ) try { window.smarts = smarts } catch (err) { // nothing } const initialThingtime = { nav: {}, settings: { showCommander: true, clearCommanderOnToggle: true, clearCommanderContextOnToggle: true } } export const ThingtimeProvider = (props: any): JSX.Element => { const [thingtime, set] = React.useState(initialThingtime) const setThingtime = React.useCallback( (path, value) => { const prevThingtime = thingtime const newThingtime = { ...prevThingtime } // check if first characters of path starts with thingtime or tt and strip from path path = sanitise(path) // log the path and value console.log('nik ThingtimeProvider setThingtime path', path) console.log('nik ThingtimeProvider setThingtime value', value) smarts.setsmart(newThingtime, path, value) set(newThingtime) }, [thingtime] ) const getThingtime = React.useCallback( (...args) => { const path = args[0] if (path === 'thingtime' || path === 'tt' || !path) { return thingtime } return smarts.getsmart(thingtime, path) }, [thingtime] ) React.useEffect(() => { try { window.setThingtime = setThingtime window.thingtime = thingtime } catch { // nothing } const keyListener = e => {} window.addEventListener('keydown', keyListener) return () => { window.removeEventListener('keydown', keyListener) } }, [setThingtime, thingtime]) const value = { thingtime, setThingtime, getThingtime } return ( {props?.children} ) }