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'; interface Props { metric?: Widget; data: { funnel: Funnel }; compData: { funnel: Funnel }; } function FunnelTable(props: Props) { const defaultTableProps: TableProps['columns'] = [ { title: 'Conversion %', dataIndex: 'conversion', key: 'conversion', fixed: 'left', width: 140, render: (text: string, _, index) => (
Overall {index > 0 ? '(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.funnel 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 onClick = () => exportAntCsv(tableColumns, tableData, filename); return (
} />
); } export default FunnelTable;