|
|
|
@ -1,11 +1,19 @@
|
|
|
|
import { ChevronDownIcon, ChevronUpIcon } from "@heroicons/react/outline";
|
|
|
|
import { ChevronDownIcon, ChevronUpIcon } from "@heroicons/react/outline";
|
|
|
|
import { styled } from "@mui/joy";
|
|
|
|
import { styled } from "@mui/joy";
|
|
|
|
import IconButton from "@mui/joy/IconButton";
|
|
|
|
import IconButton from "@mui/joy/IconButton";
|
|
|
|
import { useCallback, useState } from "react";
|
|
|
|
import { FunctionComponent, ReactElement, ReactNode } from "react";
|
|
|
|
|
|
|
|
import { useAccordionState } from "../../../hooks";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export interface IAccordionProps {
|
|
|
|
|
|
|
|
id: string;
|
|
|
|
|
|
|
|
title: string;
|
|
|
|
|
|
|
|
defaultOpen?: boolean;
|
|
|
|
|
|
|
|
children: ReactNode;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const Root = styled("div")`
|
|
|
|
const Root = styled("div")`
|
|
|
|
// display: flex;
|
|
|
|
display: flex;
|
|
|
|
// flex-direction: column;
|
|
|
|
flex-direction: column;
|
|
|
|
`;
|
|
|
|
`;
|
|
|
|
|
|
|
|
|
|
|
|
const Top = styled("div")`
|
|
|
|
const Top = styled("div")`
|
|
|
|
@ -37,17 +45,16 @@ const Bottom = styled("div")`
|
|
|
|
padding: ${({ theme }) => theme.spacing(0, 2)};
|
|
|
|
padding: ${({ theme }) => theme.spacing(0, 2)};
|
|
|
|
`;
|
|
|
|
`;
|
|
|
|
|
|
|
|
|
|
|
|
const Accordion = (props: any) => {
|
|
|
|
const Accordion: FunctionComponent<IAccordionProps> = (
|
|
|
|
const { children, title } = props;
|
|
|
|
props: IAccordionProps
|
|
|
|
const [open, setOpen] = useState(false);
|
|
|
|
): ReactElement => {
|
|
|
|
|
|
|
|
const { id, defaultOpen = false, children, title } = props;
|
|
|
|
|
|
|
|
|
|
|
|
const handleToggle = useCallback(() => {
|
|
|
|
const { open, toggle } = useAccordionState(id, defaultOpen);
|
|
|
|
setOpen((open) => !open);
|
|
|
|
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
return (
|
|
|
|
<Root>
|
|
|
|
<Root>
|
|
|
|
<Top onClick={handleToggle}>
|
|
|
|
<Top onClick={toggle}>
|
|
|
|
<Title>{title}</Title>
|
|
|
|
<Title>{title}</Title>
|
|
|
|
<ExpandButton size="sm" variant="plain">
|
|
|
|
<ExpandButton size="sm" variant="plain">
|
|
|
|
{open && <ChevronUpIcon className="h-5 w-5" />}
|
|
|
|
{open && <ChevronUpIcon className="h-5 w-5" />}
|
|
|
|
|