Files
web/packages/trpc/lib/routers/contentstack/schemas/blocks/table.ts
Matilda Landström 5986828580 Merged in feat/LOY-430-reward-nights (pull request #3295)
Feat/LOY-430 reward nights

* chore(LOY-430): add reward nights request and dynamic content

* chore(LOY-430): fix Reward Night component

* Refactor: use existing endpoint and add rewardNight data to that response instead


Approved-by: Linus Flood
2025-12-08 07:44:58 +00:00

59 lines
1.6 KiB
TypeScript

import { z } from "zod"
import { BlocksEnums } from "../../../../types/blocksEnum"
export const tableSchema = z.object({
typename: z
.literal(BlocksEnums.block.Table)
.optional()
.default(BlocksEnums.block.Table),
table: z
.object({
heading: z.string().optional(),
preamble: z.string().optional().default(""),
column_widths: z.array(z.number()),
table: z.object({
tableState: z.object({
columns: z.array(
z.object({
id: z.string(),
label: z.string().default(""),
accessor: z.string(),
dataType: z.string(),
})
),
data: z.array(z.object({}).catchall(z.string())),
skipReset: z.boolean(),
tableActionEnabled: z.boolean().optional().default(false),
headerRowAdded: z.boolean().optional().default(false),
}),
}),
})
.transform((data) => {
const totalWidth = data.column_widths.reduce(
(acc, width) => acc + width,
0
)
const columns = data.table.tableState.columns.map((col, idx) => ({
id: col.id,
header: col.label || "",
width: data.column_widths[idx] || 0,
}))
const rows = data.table.tableState.data.map((rowData) =>
columns.reduce<Record<string, string>>((transformedRow, column) => {
transformedRow[column.id] = rowData[column.id] || ""
return transformedRow
}, {})
)
return {
heading: data.heading,
preamble: data.preamble,
columns,
rows,
totalWidth,
}
}),
})