import * as React from 'react'; export interface PanelProps { open?: boolean; index: number; title: React.ReactNode; duration: number; multiple: boolean; children?: React.ReactNode; activeTab: number; activatePanel(index: number): void; } export const Panel: React.FunctionComponent> = ({ open, index, title, duration, multiple, children, activeTab, activatePanel }: PanelProps) => { const ref: React.MutableRefObject = React.useRef(null); const [height, setHeight] = React.useState(0); const [active, setActive] = React.useState(!!open); const isActive = multiple ? active : activeTab === index; const style: React.CSSProperties = { height: `${isActive ? height : 0}px` }; React.useEffect(() => { const timeout = setTimeout(() => { const el = ref.current; const newHeight = el?.querySelector('.panel__body')?.scrollHeight; setHeight(newHeight || height); }, duration || 300); return () => { clearTimeout(timeout); }; }); return (
{children}
); };