import { useContext, useEffect, useState } from 'react'; import { GridTable, GridColumn } from 'react-basics'; import { useFormat, useMessages } from 'components/hooks'; import { ReportContext } from '../[reportId]/Report'; import EmptyPlaceholder from 'components/common/EmptyPlaceholder'; import { formatShortTime } from 'lib/format'; export function InsightsTable() { const [fields, setFields] = useState([]); const { report } = useContext(ReportContext); const { formatMessage, labels } = useMessages(); const { formatValue } = useFormat(); useEffect( () => { setFields(report?.parameters?.fields); }, // eslint-disable-next-line react-hooks/exhaustive-deps [report?.data], ); if (!fields || !report?.parameters) { return ; } return ( {fields.map(({ name, label }) => { return ( {row => formatValue(row[name], name)} ); })} {row => row?.views?.toLocaleString()} {row => row?.visits?.toLocaleString()} {row => row?.visitors?.toLocaleString()} {row => { const n = (Math.min(row?.visits, row?.bounces) / row?.visits) * 100; return Math.round(+n) + '%'; }} {row => { const n = row?.totaltime / row?.visits; return `${+n < 0 ? '-' : ''}${formatShortTime(Math.abs(~~n), ['m', 's'], ' ')}`; }} ); } export default InsightsTable;