webapp/src/context/seen.tsx

30 lines
850 B
TypeScript
Raw Normal View History

2024-05-07 08:15:20 +00:00
import { makePersisted } from '@solid-primitives/storage'
import { Accessor, JSX, createContext, createSignal, useContext } from 'solid-js'
2024-05-06 23:43:23 +00:00
type SeenContextType = {
seen: Accessor<{ [slug: string]: number }>
addSeen: (slug: string) => void
}
const SeenContext = createContext<SeenContextType>()
export function useSeen() {
return useContext(SeenContext)
}
2024-05-07 08:15:20 +00:00
export const SeenProvider = (props: { children: JSX.Element }) => {
const [seen, setSeen] = makePersisted(createSignal<{ [slug: string]: number }>({}), {
name: 'discoursio-seen',
2024-05-06 23:43:23 +00:00
})
const addSeen = async (slug: string) => {
setSeen((prev) => {
const newSeen = { ...prev, [slug]: Date.now() }
return newSeen
})
}
const value: SeenContextType = { seen, addSeen }
return <SeenContext.Provider value={value}>{props.children}</SeenContext.Provider>
}