import { ResponsiveBar } from '@nivo/bar'; import { Box, Flex, Select, Skeleton } from '@rocket.chat/fuselage'; import moment from 'moment'; import React, { useMemo, useState } from 'react'; import { useTranslation } from '../../../../../../client/contexts/TranslationContext'; import { useEndpointData } from '../../../../../../client/hooks/useEndpointData'; import CounterSet from '../../../../../../client/components/data/CounterSet'; import { Section } from '../Section'; import { ActionButton } from '../../../../../../client/components/basic/Buttons/ActionButton'; import { downloadCsvAs } from '../../../../../../client/lib/download'; export function MessagesSentSection() { const t = useTranslation(); const periodOptions = useMemo(() => [ ['last 7 days', t('Last_7_days')], ['last 30 days', t('Last_30_days')], ['last 90 days', t('Last_90_days')], ], [t]); const [periodId, setPeriodId] = useState('last 7 days'); const period = useMemo(() => { switch (periodId) { case 'last 7 days': return { start: moment().set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).subtract(7, 'days'), end: moment().set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).subtract(1), }; case 'last 30 days': return { start: moment().set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).subtract(30, 'days'), end: moment().set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).subtract(1), }; case 'last 90 days': return { start: moment().set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).subtract(90, 'days'), end: moment().set({ hour: 0, minute: 0, second: 0, millisecond: 0 }).subtract(1), }; } }, [periodId]); const handlePeriodChange = (periodId) => setPeriodId(periodId); const params = useMemo(() => ({ start: period.start.toISOString(), end: period.end.toISOString(), }), [period]); const data = useEndpointData('engagement-dashboard/messages/messages-sent', params); const [ countFromPeriod, variatonFromPeriod, countFromYesterday, variationFromYesterday, values, ] = useMemo(() => { if (!data) { return []; } const values = Array.from({ length: moment(period.end).diff(period.start, 'days') + 1 }, (_, i) => ({ date: moment(period.start).add(i, 'days').toISOString(), newMessages: 0, })); for (const { day, messages } of data.days) { const i = moment(day).diff(period.start, 'days'); if (i >= 0) { values[i].newMessages += messages; } } return [ data.period.count, data.period.variation, data.yesterday.count, data.yesterday.variation, values, ]; }, [data, period]); const downloadData = () => { const data = values.map(({ date, newMessages }) => [date, newMessages]); downloadCsvAs(data, `MessagesSentSection_start_${ params.start }_end_${ params.end }`); }; return