in src/CollapsingDetails.tsx [11:44]
export default function CollapsingDetails({ header, value, expanded, cb, children }: React.PropsWithChildren<Props>) {
const [body, setBody] = useState<React.ReactNode | undefined>(undefined);
const [open, setOpen] = useState<boolean>(expanded ?? false);
useEffect(() => {
if (cb && open) {
setBody(cb());
}
}, [cb, open]);
const onEnter = () => {
setOpen(true);
if (cb) {
setBody(cb());
}
};
const onExit = () => {
setOpen(false);
};
return (
<Accordion flush defaultActiveKey={expanded ? "0" : ""} className="CollapsingDetails">
<Accordion.Item eventKey="0">
<Accordion.Header>
{header && <b>{ header }</b>}
{header && value && <>: </>}
{value && <><span>{ value }</span></>}
</Accordion.Header>
<Accordion.Body onEnter={cb ? onEnter : undefined} onExit={onExit}>{ children ?? body }</Accordion.Body>
</Accordion.Item>
</Accordion>
);
}