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<ThingtimeContextInterface | null>(
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 (
<ThingtimeContext.Provider value={value}>
{props?.children}
</ThingtimeContext.Provider>
)
}