🐛 (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 { parseResultHeader } from 'utils/results'
|
||||||
import { useResults } from '../../ResultsProvider'
|
import { useResults } from '../../ResultsProvider'
|
||||||
import { convertResultsToTableData, parseAccessor } from '../../utils'
|
import { convertResultsToTableData, parseAccessor } from '../../utils'
|
||||||
|
import { parseColumnOrder } from '../../utils/parseColumnsOrder'
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
isOpen: boolean
|
isOpen: boolean
|
||||||
@ -74,14 +75,12 @@ export const ExportAllResultsModal = ({ isOpen, onClose }: Props) => {
|
|||||||
|
|
||||||
const dataToUnparse = convertResultsToTableData(results, resultHeader)
|
const dataToUnparse = convertResultsToTableData(results, resultHeader)
|
||||||
|
|
||||||
const fields =
|
const fields = parseColumnOrder(
|
||||||
typebot?.resultsTablePreferences?.columnsOrder &&
|
typebot?.resultsTablePreferences?.columnsOrder,
|
||||||
!areDeletedBlocksIncluded
|
resultHeader
|
||||||
? typebot.resultsTablePreferences.columnsOrder.reduce<string[]>(
|
).reduce<string[]>((currentHeaderLabels, columnId) => {
|
||||||
(currentHeaderLabels, columnId) => {
|
|
||||||
if (
|
if (
|
||||||
typebot.resultsTablePreferences?.columnsVisibility[columnId] ===
|
typebot?.resultsTablePreferences?.columnsVisibility[columnId] === false
|
||||||
false
|
|
||||||
)
|
)
|
||||||
return currentHeaderLabels
|
return currentHeaderLabels
|
||||||
const columnLabel = resultHeader.find(
|
const columnLabel = resultHeader.find(
|
||||||
@ -89,10 +88,7 @@ export const ExportAllResultsModal = ({ isOpen, onClose }: Props) => {
|
|||||||
)?.label
|
)?.label
|
||||||
if (!columnLabel) return currentHeaderLabels
|
if (!columnLabel) return currentHeaderLabels
|
||||||
return [...currentHeaderLabels, columnLabel]
|
return [...currentHeaderLabels, columnLabel]
|
||||||
},
|
}, [])
|
||||||
[]
|
|
||||||
)
|
|
||||||
: resultHeader.map((headerCell) => headerCell.label)
|
|
||||||
|
|
||||||
const data = dataToUnparse.map<{ [key: string]: string }>((data) => {
|
const data = dataToUnparse.map<{ [key: string]: string }>((data) => {
|
||||||
const newObject: { [key: string]: string } = {}
|
const newObject: { [key: string]: string } = {}
|
||||||
|
@ -26,6 +26,7 @@ import { CellValueType, TableData } from '../../types'
|
|||||||
import { HeaderIcon, parseAccessor } from '../../utils'
|
import { HeaderIcon, parseAccessor } from '../../utils'
|
||||||
import { IndeterminateCheckbox } from './IndeterminateCheckbox'
|
import { IndeterminateCheckbox } from './IndeterminateCheckbox'
|
||||||
import { colors } from '@/lib/theme'
|
import { colors } from '@/lib/theme'
|
||||||
|
import { parseColumnOrder } from '../../utils/parseColumnsOrder'
|
||||||
|
|
||||||
type ResultsTableProps = {
|
type ResultsTableProps = {
|
||||||
resultHeader: ResultHeaderCell[]
|
resultHeader: ResultHeaderCell[]
|
||||||
@ -265,17 +266,3 @@ export const ResultsTable = ({
|
|||||||
</Stack>
|
</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 { parseAccessor } from '../../utils'
|
||||||
import { useResults } from '../../ResultsProvider'
|
import { useResults } from '../../ResultsProvider'
|
||||||
import { trpc } from '@/lib/trpc'
|
import { trpc } from '@/lib/trpc'
|
||||||
|
import { parseColumnOrder } from '../../utils/parseColumnsOrder'
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
selectedResultsId: string[]
|
selectedResultsId: string[]
|
||||||
@ -68,11 +69,13 @@ export const SelectionToolbar = ({
|
|||||||
selectedResultsId.includes(data.id.plainText)
|
selectedResultsId.includes(data.id.plainText)
|
||||||
)
|
)
|
||||||
|
|
||||||
const fields = typebot?.resultsTablePreferences?.columnsOrder
|
const fields = parseColumnOrder(
|
||||||
? typebot.resultsTablePreferences.columnsOrder.reduce<string[]>(
|
typebot?.resultsTablePreferences?.columnsOrder,
|
||||||
(currentHeaderLabels, columnId) => {
|
resultHeader
|
||||||
|
)
|
||||||
|
.reduce<string[]>((currentHeaderLabels, columnId) => {
|
||||||
if (
|
if (
|
||||||
typebot.resultsTablePreferences?.columnsVisibility[columnId] ===
|
typebot?.resultsTablePreferences?.columnsVisibility[columnId] ===
|
||||||
false
|
false
|
||||||
)
|
)
|
||||||
return currentHeaderLabels
|
return currentHeaderLabels
|
||||||
@ -81,10 +84,17 @@ export const SelectionToolbar = ({
|
|||||||
)?.label
|
)?.label
|
||||||
if (!columnLabel) return currentHeaderLabels
|
if (!columnLabel) return currentHeaderLabels
|
||||||
return [...currentHeaderLabels, columnLabel]
|
return [...currentHeaderLabels, columnLabel]
|
||||||
},
|
}, [])
|
||||||
[]
|
.concat(
|
||||||
|
resultHeader
|
||||||
|
.filter(
|
||||||
|
(headerCell) =>
|
||||||
|
!typebot?.resultsTablePreferences?.columnsOrder.includes(
|
||||||
|
headerCell.id
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.map((headerCell) => headerCell.label)
|
||||||
)
|
)
|
||||||
: resultHeader.map((headerCell) => headerCell.label)
|
|
||||||
|
|
||||||
const data = dataToUnparse.map<{ [key: string]: string }>((data) => {
|
const data = dataToUnparse.map<{ [key: string]: string }>((data) => {
|
||||||
const newObject: { [key: string]: string } = {}
|
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