metaforecast/src/web/common/Collapsible.tsx
2022-06-01 23:31:41 +03:00

45 lines
943 B
TypeScript

import { useState } from "react";
import { FaCaretDown, FaCaretRight } from "react-icons/fa";
export const Collapsible: React.FC<{
title: string;
children: () => React.ReactElement | null;
}> = ({ title, children }) => {
const [open, setOpen] = useState(false);
const expand = (e: React.SyntheticEvent) => {
e.preventDefault();
setOpen(true);
};
const collapse = (e: React.SyntheticEvent) => {
e.preventDefault();
setOpen(false);
};
if (open) {
return (
<div>
<a
href="#"
className="decoration-dashed inline-flex items-center"
onClick={collapse}
>
{title} <FaCaretDown />
</a>
<div>{children()}</div>
</div>
);
} else {
return (
<a
href="#"
className="decoration-dashed inline-flex items-center"
onClick={expand}
>
{title} <FaCaretRight />
</a>
);
}
};