import { ResponsivePie } from '@nivo/pie'; import { Box, FlexContainer, FlexItem, Icon, Margins, Skeleton, Table, Tile, Palette, Tooltip, TableHead, TableRow, TableBody, TableCell, } from '@rocket.chat/fuselage'; import { useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import { useMessageOrigins } from './useMessageOrigins'; import { useTopFivePopularChannels } from './useTopFivePopularChannels'; import DownloadDataButton from '../../../../components/dashboards/DownloadDataButton'; import PeriodSelector from '../../../../components/dashboards/PeriodSelector'; import { usePeriodSelectorState } from '../../../../components/dashboards/usePeriodSelectorState'; import EngagementDashboardCardFilter from '../EngagementDashboardCardFilter'; import LegendSymbol from '../dataView/LegendSymbol'; const colors = { warning: Palette.statusColor['status-font-on-warning'].toString(), success: Palette.statusColor['status-font-on-success'].toString(), info: Palette.statusColor['status-font-on-info'].toString(), }; const MessagesPerChannelSection = () => { const [period, periodSelectorProps] = usePeriodSelectorState('last 7 days', 'last 30 days', 'last 90 days'); const { t } = useTranslation(); const { data: messageOriginsData } = useMessageOrigins({ period }); const { data: topFivePopularChannelsData } = useTopFivePopularChannels({ period }); const pie = useMemo( () => messageOriginsData?.origins?.reduce<{ [roomType: string]: number }>((obj, { messages, t }) => ({ ...obj, [t]: messages }), {}), [messageOriginsData], ); const table = useMemo( () => topFivePopularChannelsData?.channels?.reduce< { i: number; t: string; name?: string; messages: number; }[] >((entries, { t, messages, name, usernames }, i) => [...entries, { i, t, name: name || usernames?.join(' × '), messages }], []), [topFivePopularChannelsData], ); return ( <> messageOriginsData?.origins.map(({ t, messages }) => [t, messages])} /> {pie ? ( {t('Value_messages', { value: datum.value })}} /> {t('Private_Chats')} {t('Private_Channels')} {t('Public_Channels')} ) : ( )} {table ? {t('Most_popular_channels_top_5')} : } {table && !table.length && ( {t('Not_enough_data')} )} {(!table || !!table.length) && ( # {t('Channel')} {t('Number_of_messages')} {table?.map(({ i, t, name, messages }) => ( {i + 1}. {(t === 'd' && ) || (t === 'p' && ) || (t === 'c' && )} {name} {messages} ))} {!table && Array.from({ length: 5 }, (_, i) => ( ))}
)}
); }; export default MessagesPerChannelSection;