import { createContext, useContext, useEffect, useState } from 'react' import { DirectionProvider as RdxDirProvider } from '@radix-ui/react-direction' import { getCookie, setCookie, removeCookie } from '@/lib/cookies' export type Direction = 'ltr' | 'rtl' const DEFAULT_DIRECTION = 'ltr' const DIRECTION_COOKIE_NAME = 'dir' const DIRECTION_COOKIE_MAX_AGE = 60 * 60 * 24 * 365 // 1 year type DirectionContextType = { defaultDir: Direction dir: Direction setDir: (dir: Direction) => void resetDir: () => void } const DirectionContext = createContext(null) export function DirectionProvider({ children }: { children: React.ReactNode }) { const [dir, _setDir] = useState( () => (getCookie(DIRECTION_COOKIE_NAME) as Direction) || DEFAULT_DIRECTION ) useEffect(() => { const htmlElement = document.documentElement htmlElement.setAttribute('dir', dir) }, [dir]) const setDir = (dir: Direction) => { _setDir(dir) setCookie(DIRECTION_COOKIE_NAME, dir, DIRECTION_COOKIE_MAX_AGE) } const resetDir = () => { _setDir(DEFAULT_DIRECTION) removeCookie(DIRECTION_COOKIE_NAME) } return ( {children} ) } // eslint-disable-next-line react-refresh/only-export-components export function useDirection() { const context = useContext(DirectionContext) if (!context) { throw new Error('useDirection must be used within a DirectionProvider') } return context }