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, FileDown } from 'lucide-react'; import { exportAntCsv } from '../../../utils'; interface Props { metric?: Widget; data: { funnel: Funnel }; compData: { funnel: Funnel }; } function FunnelTable(props: Props) { const tableData = [ { conversion: props.data.funnel.totalConversionsPercentage, }, ]; const tableProps: TableProps['columns'] = [ { title: 'Conversion %', dataIndex: 'conversion', key: 'conversion', fixed: 'left', width: 140, render: (text: string, _, index) => (
Overall {index > 0 ? '(previous)' : ''}
{text}%
), }, ]; React.useEffect(() => { const funnel = props.data.funnel; 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; tableProps.push({ title: wrappedTitle, dataIndex: 'st_' + ind, key: 'st_' + ind, ellipsis: true, width: 120, }); tableData[0]['st_' + ind] = st.count; }); if (props.compData) { tableData.push({ conversion: props.compData.funnel.totalConversionsPercentage, }) const compFunnel = props.compData.funnel; compFunnel.stages.forEach((st, ind) => { tableData[1]['st_' + ind] = st.count; }); } }, [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 onClick = () => exportAntCsv(tableColumns, tableData, filename); return (
} />
); } export default FunnelTable;