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
59 lines
1.6 KiB
TypeScript
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,
|
|
}
|
|
}),
|
|
})
|