import { ReactNode, useEffect, useMemo, useState } from 'react' import { Link } from 'react-router-dom' import cx from 'classnames' import { StorageOptions } from '../../types' import { IconChevronLeft, IconChevronRight } from '../icons' import { DrawerContext } from './drawer-context' type DrawerProps = { children?: ReactNode logo?: ReactNode storage?: StorageOptions } export const Drawer = ({ children, storage, logo }: DrawerProps) => { const [isCollapsed, setIsCollapsed] = useState(undefined) const [isTouched, setIsTouched] = useState(false) const localStorageCollapsedKey = useMemo( () => `${storage?.prefix || 'app'}_${ storage?.namespace || 'main' }_drawer_collapsed`, [storage], ) useEffect(() => { let collapse = false if (typeof localStorage !== 'undefined') { const value = localStorage.getItem(localStorageCollapsedKey) if (value) { collapse = JSON.parse(value) } else { localStorage.setItem(localStorageCollapsedKey, JSON.stringify(false)) } } if (collapse) { setIsCollapsed(true) } else { setIsCollapsed(false) } }, [localStorageCollapsedKey, setIsCollapsed]) if (isCollapsed === undefined) { return null } return (
{logo}
{children}
{ setIsCollapsed(!isCollapsed) setIsTouched(true) localStorage.setItem( localStorageCollapsedKey, JSON.stringify(!isCollapsed), ) }} > {isCollapsed ? : }
) }