diff --git a/src/app/StatsList.tsx b/src/app/StatsList.tsx new file mode 100644 index 0000000..f806f03 --- /dev/null +++ b/src/app/StatsList.tsx @@ -0,0 +1,62 @@ +import { Fragment, JSX } from "react"; +import { Heading, Flex } from "@chakra-ui/react"; +import { CombinedError } from "urql"; +import SingleStatComponent from "@/components/stats/SingleStat"; + +interface StatsListProps { + title: string; + loading: boolean; + error: CombinedError | undefined; + groups?: number; + links: number; + commands: number; + triggers: number; +} + +const StatsList = ({ + title, + loading, + error, + groups, + commands, + links, + triggers +}: StatsListProps): JSX.Element => { + return ( + + + {title} + + + {groups ? ( + + ) : null} + + + + + + ); +}; + +export default StatsList; diff --git a/src/components/stats/SingleStat.tsx b/src/components/stats/SingleStat.tsx new file mode 100644 index 0000000..2655e7b --- /dev/null +++ b/src/components/stats/SingleStat.tsx @@ -0,0 +1,44 @@ +import { JSX } from "react"; +import { Skeleton, Stat, FormatNumber } from "@chakra-ui/react"; +import { Icon } from "@iconify/react"; +import { CombinedError } from "urql"; + +interface SingleStatComponentProps { + stat: number; + title: string; + loading: boolean; + error: CombinedError | undefined; +} + +const SingleStatComponent = ({ + stat, + title, + loading, + error +}: SingleStatComponentProps): JSX.Element => { + return ( + + {title} + + + {(error || stat === undefined) && !loading ? ( + + ) : ( + + )} + + + + ); +}; + +export default SingleStatComponent;