forked from
jollywhoppers.com/witchsky.app
Bluesky app fork with some witchin' additions 馃挮
1import {createContext, useCallback, useContext, useState} from 'react'
2
3type DateDividerToggleContextType = {
4 isDividerToggled: (id: string) => boolean
5 toggleDivider: (id: string) => void
6}
7
8const DateDividerToggleContext = createContext<DateDividerToggleContextType>({
9 isDividerToggled: () => false,
10 toggleDivider: () => {},
11})
12
13export function DateDividerToggleProvider({
14 children,
15}: {
16 children: React.ReactNode
17}) {
18 const [toggledIds, setToggledIds] = useState(new Set<string>())
19
20 const toggleDivider = useCallback((id: string) => {
21 setToggledIds(prev => {
22 const next = new Set(prev)
23 if (next.has(id)) next.delete(id)
24 else next.add(id)
25 return next
26 })
27 }, [])
28
29 const isDividerToggled = useCallback(
30 (id: string) => toggledIds.has(id),
31 [toggledIds],
32 )
33
34 return (
35 <DateDividerToggleContext.Provider
36 value={{isDividerToggled, toggleDivider}}>
37 {children}
38 </DateDividerToggleContext.Provider>
39 )
40}
41
42export function useDateDividerToggle() {
43 return useContext(DateDividerToggleContext)
44}