Last active: 3 years ago
Collapse with css property max height
const PostTOC = ({ headings }: Props) => {
const [show, setShow] = useState(false);
const handleClick = useCallback(() => setShow((show) => !show), []);
return (
<>
<div
className={classNames(
'rounded-lg transition-all',
'duration-500 overflow-hidden'
)}
// Max height must be seted, max-content doesn't work
style={{
maxHeight: show ? (headings?.length ?? 0) * 50 + 70 : 70,
}}
>
<h2
className={classNames(
styles.head,
'bg-white !m-[unset] p-4',
'rounded-lg border border-gray-300',
'dark:bg-rua-gray-800 dark:border-rua-gray-600',
'select-none cursor-pointer',
'flex justify-between items-center'
)}
onClick={handleClick}
>
<span>What's inside?</span>
<FiChevronDown
className={classNames(
show && 'rotate-180',
'transition-all duration-500'
)}
/>
</h2>
<ul className="pl-4 border-l-4 border-gray-300 toc">
{headings?.map((h) => (
<li key={h.link}>
<Anchor href={h.link} external={false}>
{h.text}
</Anchor>
</li>
))}
</ul>
</div>
</>
);
};