import { ResponsiveBar } from '@nivo/bar'; import { Box, FlexContainer, FlexItem, Skeleton, Palette, Tooltip } from '@rocket.chat/fuselage'; import colors from '@rocket.chat/fuselage-tokens/dist/colors.json'; import { differenceInDays, addDays, format } from 'date-fns'; import { useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import DownloadDataButton from '../../../../components/dashboards/DownloadDataButton'; import PeriodSelector from '../../../../components/dashboards/PeriodSelector'; import { usePeriodLabel } from '../../../../components/dashboards/usePeriodLabel'; import { usePeriodSelectorState } from '../../../../components/dashboards/usePeriodSelectorState'; import CounterSet from '../../../../components/dataView/CounterSet'; import EngagementDashboardCardFilter from '../EngagementDashboardCardFilter'; import { useMessagesSent } from './useMessagesSent'; import { useFormatDate } from '../../../../hooks/useFormatDate'; export type MessagesSentSectionProps = { timezone: 'utc' | 'local'; }; const MessagesSentSection = ({ timezone }: MessagesSentSectionProps) => { const [period, periodSelectorProps] = usePeriodSelectorState('last 7 days', 'last 30 days', 'last 90 days'); const periodLabel = usePeriodLabel(period); const { t } = useTranslation(); const utc = timezone === 'utc'; const { data } = useMessagesSent({ period, utc }); const formatDate = useFormatDate(); const [countFromPeriod, variatonFromPeriod, countFromYesterday, variationFromYesterday, values] = useMemo(() => { if (!data) { return []; } const startDate = new Date(data.start); const endDate = new Date(data.end); const daysCount = differenceInDays(endDate, startDate) + 1; const values = Array.from({ length: daysCount }, (_, i) => ({ date: addDays(startDate, i).toISOString(), newMessages: 0, })); for (const { day, messages } of data.days ?? []) { const i = differenceInDays(new Date(day), startDate); if (i >= 0) { values[i].newMessages += messages; } } return [data.period?.count, data.period?.variation, data.yesterday?.count, data.yesterday?.variation, values]; }, [data]); return ( <> values?.map(({ date, newMessages }) => [date, newMessages])} /> , variation: variatonFromPeriod ?? 0, description: periodLabel, }, { count: countFromYesterday ?? , variation: variationFromYesterday ?? 0, description: t('Yesterday'), }, ]} /> {values ? ( 31 ? 4 : 0, // TODO: Get it from theme tickPadding: 8, tickRotation: values.length > 31 ? 90 : 0, truncateTickAt: 0, format: (date): string => format(new Date(date), 'dd/MM'), }} axisLeft={{ tickSize: 0, // TODO: Get it from theme tickPadding: 4, tickRotation: 0, }} animate={true} motionConfig='stiff' theme={{ // TODO: Get it from theme axis: { ticks: { text: { fill: colors.n600, fontFamily: 'Inter, -apple-system, system-ui, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Helvetica Neue", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Meiryo UI", Arial, sans-serif', fontSize: '10px', fontStyle: 'normal', fontWeight: 600, letterSpacing: '0.2px', lineHeight: '12px', }, }, }, }} tooltip={({ value, indexValue }) => ( {t('Value_messages', { value })}, {formatDate(indexValue)} )} /> ) : ( )} ); }; export default MessagesSentSection;