import React from 'react'; import { Table, Tooltip } from 'antd'; import type { TableProps } from 'antd'; import Widget from 'App/mstore/types/widget'; import Funnel from 'App/mstore/types/funnel'; import { ItemMenu } from 'UI'; import { EllipsisVertical } from 'lucide-react'; import { exportAntCsv } from '../../../utils'; import { useTranslation } from 'react-i18next'; interface Props { metric?: Widget; data: { funnel: Funnel }; compData: { funnel: Funnel }; } function FunnelTable(props: Props) { const { t } = useTranslation(); const defaultTableProps: TableProps['columns'] = [ { title: 'Conversion %', dataIndex: 'conversion', key: 'conversion', fixed: 'left', width: 140, render: (text: string, _, index) => (
{t('Overall')} {index > 0 ? `(${t('previous')})` : ''}
{text}%
), }, ]; const defaultData = [ { conversion: props.data.funnel.totalConversionsPercentage, }, ]; const [tableProps, setTableProps] = React.useState(defaultTableProps); const [tableData, setTableData] = React.useState(defaultData); React.useEffect(() => { const { funnel } = props.data; const tablePropsCopy = defaultTableProps; const tableDataCopy = defaultData; funnel.stages.forEach((st, ind) => { const title = `${st.label} ${st.operator} ${st.value.join(' or ')}`; const wrappedTitle = title.length > 40 ? `${title.slice(0, 40)}...` : title; tablePropsCopy.push({ title: wrappedTitle, dataIndex: `st_${ind}`, key: `st_${ind}`, ellipsis: true, width: 120, }); tableDataCopy[0][`st_${ind}`] = st.count; }); if (props.compData) { tableDataCopy.push({ conversion: props.compData.funnel.totalConversionsPercentage, }); const compFunnel = props.compData.funnel; compFunnel.stages.forEach((st, ind) => { tableDataCopy[1][`st_${ind}`] = st.count; }); } setTableProps(tablePropsCopy); setTableData(tableDataCopy); }, [props.data]); return (
(index > 0 ? 'opacity-70' : '')} /> ); } export function TableExporter({ tableData, tableColumns, filename, top, right, }: { tableData: any; tableColumns: any; filename: string; top?: string; right?: string; }) { const { t } = useTranslation(); const onClick = () => exportAntCsv(tableColumns, tableData, filename); return (
} />
); } export default FunnelTable;