import { __ } from '@wordpress/i18n'; import Icon from '@/utils/Icon'; import { formatNumber, getChangePercentage, truncateMiddle } from '@/utils/formatting'; import type { BarColumn } from '@/components/DataTable/BarDataTable'; import type { FormRow } from './useFormsData'; /** * Returns the column definitions for the forms table. * * Columns: Form (title + provider badge), Submissions (count with bar), * Conversion rate (% with period-over-period coloring). * * @return {BarColumn[]} The column definitions. */ export function getFormsColumns(): BarColumn[] { return [ { key: 'formTitle', label: __( 'Form', 'burst-statistics' ), align: 'left', minWidth: 160, cell: ( row ) => { const titleContent = row.submissionsUrl ? ( { truncateMiddle( row.formTitle, 30 ) } ) : ( { truncateMiddle( row.formTitle, 30 ) } ); return ( { titleContent } { row.formProviderLabel && ( { row.formProviderLabel } ) } ); } }, { key: 'submissions', label: __( 'Submissions', 'burst-statistics' ), align: 'right', minWidth: 90, cell: ( row ) => ( { formatNumber( row.submissions ) } ) }, { key: 'conversionRate', label: __( 'Conv. rate', 'burst-statistics' ), align: 'right', minWidth: 88, cell: ( row ) => { if ( 0 === row.submissions ) { return ( { __( 'N/A', 'burst-statistics' ) } ); } const rate = `${ row.conversionRate }%`; // Show change indicator only when we have a previous period to compare to. if ( 0 === row.previousConversionRate ) { return ( { rate } ); } const { status } = getChangePercentage( row.conversionRate, row.previousConversionRate ); return ( { rate } ); } } ]; }