🐛 (results) Make sure all columns are parsed in the export
This commit is contained in:
@ -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<string[]>(
|
||||
(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<string[]>((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 } = {}
|
||||
|
@ -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 = ({
|
||||
</Stack>
|
||||
)
|
||||
}
|
||||
|
||||
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']
|
||||
|
@ -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<string[]>(
|
||||
(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<string[]>((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 } = {}
|
||||
|
15
apps/builder/src/features/results/utils/parseColumnsOrder.ts
Normal file
15
apps/builder/src/features/results/utils/parseColumnsOrder.ts
Normal file
@ -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']
|
Reference in New Issue
Block a user