import classNames from 'classnames'; import { atom, useAtom } from 'jotai'; import type { HTMLAttributes, ReactNode } from 'react'; import { useMemo } from 'react'; import { atomWithKVStorage } from '../../lib/atoms/atomWithKVStorage'; import type { BannerProps } from './Banner'; import { Banner } from './Banner'; interface Props extends HTMLAttributes { summary: ReactNode; color?: BannerProps['color']; defaultOpen?: boolean; storageKey?: string; } export function DetailsBanner({ className, color, summary, children, defaultOpen, storageKey, ...extraProps }: Props) { // biome-ignore lint/correctness/useExhaustiveDependencies: We only want to recompute the atom when storageKey changes const openAtom = useMemo( () => storageKey ? atomWithKVStorage(['details_banner', storageKey], defaultOpen ?? false) : atom(defaultOpen ?? false), [storageKey], ); const [isOpen, setIsOpen] = useAtom(openAtom); const handleToggle = (e: React.SyntheticEvent) => { if (storageKey) { setIsOpen(e.currentTarget.open); } }; return (
{summary}
{children}
); }