feat(frontend): updated `Accordion` to use `useAccordionState`

* Added `id` and `defaultOpen` props.
pull/85/head
Samuel Rowe 3 years ago
parent 0f4c60e791
commit 2530034b3d

@ -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" />}

Loading…
Cancel
Save