feat(frontend): added `collapsible` prop to `Records` component

pull/85/head
Samuel Rowe 3 years ago
parent 927757db29
commit 85cdc846e2

@ -1,11 +1,5 @@
import { styled } from "@mui/joy"; import { styled } from "@mui/joy";
import { import { Fragment, FunctionComponent, ReactElement, useCallback } from "react";
Fragment,
FunctionComponent,
ReactElement,
useCallback,
useState
} from "react";
import { import {
ChevronDownIcon, ChevronDownIcon,
ChevronUpIcon, ChevronUpIcon,
@ -19,6 +13,7 @@ import { useAccordionState } from "../hooks";
import { useParams } from "react-router-dom"; import { useParams } from "react-router-dom";
export interface IRecordsProps { export interface IRecordsProps {
collapsible?: boolean;
defaultOpen?: boolean; defaultOpen?: boolean;
title: string; title: string;
name: string; name: string;
@ -96,6 +91,7 @@ const Records: FunctionComponent<IRecordsProps> = (
props: IRecordsProps props: IRecordsProps
): ReactElement => { ): ReactElement => {
const { const {
collapsible = true,
defaultOpen = false, defaultOpen = false,
title, title,
name, name,
@ -138,13 +134,15 @@ const Records: FunctionComponent<IRecordsProps> = (
return ( return (
<Group empty={empty}> <Group empty={empty}>
<Top onClick={toggle}> <Top onClick={toggle}>
<GroupTitle>{title}</GroupTitle> {title && <GroupTitle>{title}</GroupTitle>}
<ExpandButton size="sm" variant="plain"> {collapsible && (
{open && <ChevronUpIcon className="h-5 w-5" />} <ExpandButton size="sm" variant="plain">
{!open && <ChevronDownIcon className="h-5 w-5" />} {open && <ChevronUpIcon className="h-5 w-5" />}
</ExpandButton> {!open && <ChevronDownIcon className="h-5 w-5" />}
</ExpandButton>
)}
</Top> </Top>
{open && !empty && ( {(!collapsible || open) && !empty && (
<RecordList> <RecordList>
{items.map((_: unknown, index: number) => ( {items.map((_: unknown, index: number) => (
<Fragment key={index}> <Fragment key={index}>
@ -162,9 +160,11 @@ const Records: FunctionComponent<IRecordsProps> = (
</RecordList> </RecordList>
)} )}
{open && empty && <Description>No items available</Description>} {(!collapsible || open) && empty && (
<Description>No items available</Description>
)}
{open && ( {(!collapsible || open) && (
<AddButton size="sm" variant="soft" onClick={handleNew}> <AddButton size="sm" variant="soft" onClick={handleNew}>
<PlusIcon className="h-4 w-4" /> <PlusIcon className="h-4 w-4" />
</AddButton> </AddButton>

Loading…
Cancel
Save