2
0

🐛 (results) Make sure all columns are parsed in the export

This commit is contained in:
Baptiste Arnaud
2023-03-06 08:29:07 +01:00
parent eb3ae8fc35
commit 5c3104848e
4 changed files with 57 additions and 49 deletions

View File

@ -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 } = {}

View File

@ -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']

View File

@ -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 } = {}

View 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']