import { Pie, DatumId } from '@nivo/pie'; import { Box } from '@rocket.chat/fuselage'; import colors from '@rocket.chat/fuselage-tokens/colors'; import React, { useMemo, useCallback, ReactElement, CSSProperties, ReactNode } from 'react'; import { useLocalePercentage } from '../../../hooks/useLocalePercentage'; type GraphColorsReturn = { [key: string]: string }; const graphColors = (color: CSSProperties['color']): GraphColorsReturn => ({ used: color || colors.b500, free: colors.n300, }); type UsageGraphProps = { used: number; total: number; label: ReactNode; color?: string; size: number; }; type GraphData = Array<{ id: string; label: string; value: number; }>; const UsageGraph = ({ used = 0, total = 0, label, color, size }: UsageGraphProps): ReactElement => { const parsedData = useMemo( (): GraphData => [ { id: 'used', label: 'used', value: used, }, { id: 'free', label: 'free', value: total - used, }, ], [total, used], ); const getColor = useCallback( (datum: { id: DatumId } | undefined) => { if (!datum || typeof datum.id !== 'string') { return ''; } return graphColors(color)[datum.id]; }, [color], ); const unlimited = total === 0; const localePercentage = useLocalePercentage(total, used, 0); return ( {unlimited ? '∞' : localePercentage} {used} {' '} / {unlimited ? '∞' : total} {label} ); }; export default UsageGraph;