diff --git a/apps/builder/src/features/results/components/ResultsTable/ExportAllResultsModal.tsx b/apps/builder/src/features/results/components/ResultsTable/ExportAllResultsModal.tsx index e1259c95d..d45a10f49 100644 --- a/apps/builder/src/features/results/components/ResultsTable/ExportAllResultsModal.tsx +++ b/apps/builder/src/features/results/components/ResultsTable/ExportAllResultsModal.tsx @@ -21,6 +21,7 @@ import { useState } from 'react' import { parseResultHeader } from 'utils/results' import { useResults } from '../../ResultsProvider' import { convertResultsToTableData, parseAccessor } from '../../utils' +import { parseColumnOrder } from '../../utils/parseColumnsOrder' type Props = { isOpen: boolean @@ -74,25 +75,20 @@ export const ExportAllResultsModal = ({ isOpen, onClose }: Props) => { const dataToUnparse = convertResultsToTableData(results, resultHeader) - const fields = - typebot?.resultsTablePreferences?.columnsOrder && - !areDeletedBlocksIncluded - ? typebot.resultsTablePreferences.columnsOrder.reduce( - (currentHeaderLabels, columnId) => { - if ( - typebot.resultsTablePreferences?.columnsVisibility[columnId] === - false - ) - return currentHeaderLabels - const columnLabel = resultHeader.find( - (headerCell) => headerCell.id === columnId - )?.label - if (!columnLabel) return currentHeaderLabels - return [...currentHeaderLabels, columnLabel] - }, - [] - ) - : resultHeader.map((headerCell) => headerCell.label) + const fields = parseColumnOrder( + typebot?.resultsTablePreferences?.columnsOrder, + resultHeader + ).reduce((currentHeaderLabels, columnId) => { + if ( + typebot?.resultsTablePreferences?.columnsVisibility[columnId] === false + ) + return currentHeaderLabels + const columnLabel = resultHeader.find( + (headerCell) => headerCell.id === columnId + )?.label + if (!columnLabel) return currentHeaderLabels + return [...currentHeaderLabels, columnLabel] + }, []) const data = dataToUnparse.map<{ [key: string]: string }>((data) => { const newObject: { [key: string]: string } = {} diff --git a/apps/builder/src/features/results/components/ResultsTable/ResultsTable.tsx b/apps/builder/src/features/results/components/ResultsTable/ResultsTable.tsx index f1f108269..296a764f5 100644 --- a/apps/builder/src/features/results/components/ResultsTable/ResultsTable.tsx +++ b/apps/builder/src/features/results/components/ResultsTable/ResultsTable.tsx @@ -26,6 +26,7 @@ import { CellValueType, TableData } from '../../types' import { HeaderIcon, parseAccessor } from '../../utils' import { IndeterminateCheckbox } from './IndeterminateCheckbox' import { colors } from '@/lib/theme' +import { parseColumnOrder } from '../../utils/parseColumnsOrder' type ResultsTableProps = { resultHeader: ResultHeaderCell[] @@ -265,17 +266,3 @@ export const ResultsTable = ({ ) } - -const parseColumnOrder = ( - existingOrder: string[] | undefined, - resultHeader: ResultHeaderCell[] -) => - existingOrder - ? [ - ...existingOrder.slice(0, -1), - ...resultHeader - .filter((header) => !existingOrder.includes(header.id)) - .map((h) => h.id), - 'logs', - ] - : ['select', ...resultHeader.map((h) => h.id), 'logs'] diff --git a/apps/builder/src/features/results/components/ResultsTable/SelectionToolbar.tsx b/apps/builder/src/features/results/components/ResultsTable/SelectionToolbar.tsx index fbd0971cb..073aee24f 100644 --- a/apps/builder/src/features/results/components/ResultsTable/SelectionToolbar.tsx +++ b/apps/builder/src/features/results/components/ResultsTable/SelectionToolbar.tsx @@ -15,6 +15,7 @@ import { useToast } from '@/hooks/useToast' import { parseAccessor } from '../../utils' import { useResults } from '../../ResultsProvider' import { trpc } from '@/lib/trpc' +import { parseColumnOrder } from '../../utils/parseColumnsOrder' type Props = { selectedResultsId: string[] @@ -68,23 +69,32 @@ export const SelectionToolbar = ({ selectedResultsId.includes(data.id.plainText) ) - const fields = typebot?.resultsTablePreferences?.columnsOrder - ? typebot.resultsTablePreferences.columnsOrder.reduce( - (currentHeaderLabels, columnId) => { - if ( - typebot.resultsTablePreferences?.columnsVisibility[columnId] === - false - ) - return currentHeaderLabels - const columnLabel = resultHeader.find( - (headerCell) => headerCell.id === columnId - )?.label - if (!columnLabel) return currentHeaderLabels - return [...currentHeaderLabels, columnLabel] - }, - [] + const fields = parseColumnOrder( + typebot?.resultsTablePreferences?.columnsOrder, + resultHeader + ) + .reduce((currentHeaderLabels, columnId) => { + if ( + typebot?.resultsTablePreferences?.columnsVisibility[columnId] === + false ) - : resultHeader.map((headerCell) => headerCell.label) + return currentHeaderLabels + const columnLabel = resultHeader.find( + (headerCell) => headerCell.id === columnId + )?.label + if (!columnLabel) return currentHeaderLabels + return [...currentHeaderLabels, columnLabel] + }, []) + .concat( + resultHeader + .filter( + (headerCell) => + !typebot?.resultsTablePreferences?.columnsOrder.includes( + headerCell.id + ) + ) + .map((headerCell) => headerCell.label) + ) const data = dataToUnparse.map<{ [key: string]: string }>((data) => { const newObject: { [key: string]: string } = {} diff --git a/apps/builder/src/features/results/utils/parseColumnsOrder.ts b/apps/builder/src/features/results/utils/parseColumnsOrder.ts new file mode 100644 index 000000000..b4c3c900e --- /dev/null +++ b/apps/builder/src/features/results/utils/parseColumnsOrder.ts @@ -0,0 +1,15 @@ +import { ResultHeaderCell } from 'models' + +export const parseColumnOrder = ( + existingOrder: string[] | undefined, + resultHeader: ResultHeaderCell[] +) => + existingOrder + ? [ + ...existingOrder.slice(0, -1), + ...resultHeader + .filter((header) => !existingOrder.includes(header.id)) + .map((h) => h.id), + 'logs', + ] + : ['select', ...resultHeader.map((h) => h.id), 'logs']