File size: 1,361 Bytes
8e40013
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import { KeyboardArrowDown, KeyboardArrowUp } from "@mui/icons-material";
import {
  Card,
  CardContent,
  CardHeader,
  Collapse,
  IconButton,
  Stack,
} from "@mui/material";
import { ReactElement, useState } from "react";

type OptionsProps = {
  children: ReactElement | ReactElement[];
  opened?: boolean;
};

/**
 *  Define options that are hidden by default
 *
 * @param props OptionsProps
 * @param props.opened boolean - Are the options visible or not (default)
 *
 * @returns Options
 */
export default function Options(props: OptionsProps) {
  const { children, opened = false } = props;

  const [showOptions, setShowOptions] = useState(opened);

  const handleShowOptions = () => setShowOptions(!showOptions);

  return (
    <>
      <Card>
        <CardHeader
          title="Options"
          onClick={handleShowOptions}
          action={
            <IconButton aria-label="expand" size="small">
              {showOptions ? <KeyboardArrowUp /> : <KeyboardArrowDown />}
            </IconButton>
          }
          sx={{
            cursor: "pointer",
          }}
          titleTypographyProps={{ variant: "h6", sx: { fontSize: "1em" } }}
        />
        <Collapse in={showOptions}>
          <CardContent>
            <Stack spacing={2}>{children}</Stack>
          </CardContent>
        </Collapse>
      </Card>
    </>
  );
}