UNPKG

@prismicio/mock

Version:

Generate mock Prismic documents, fields, Slices, and models for development and testing environments

86 lines (76 loc) 1.96 kB
import * as prismic from "@prismicio/client"; import { createFaker, Faker } from "../lib/createFaker"; import { MockValueStateConfig, MockValueConfig } from "../types"; import { richText } from "./richText"; export type MockTableValueConfig< Model extends prismic.CustomTypeModelTableField = prismic.CustomTypeModelTableField, State extends prismic.FieldState = prismic.FieldState, > = MockValueConfig<Model> & MockValueStateConfig<State>; export type MockTableValue< State extends prismic.FieldState = prismic.FieldState, > = prismic.TableField<State>; export const table = < Model extends prismic.CustomTypeModelTableField = prismic.CustomTypeModelTableField, State extends prismic.FieldState = "filled", >( config: MockTableValueConfig<Model, State>, ): MockTableValue<State> => { const faker = config.faker || createFaker(config.seed); const cells = faker.range(1, 10); const bodyRows = faker.range(1, 10); return ( config.state === "empty" ? null : { head: { rows: [ { cells: Array.from({ length: cells }, () => mockTableCell({ type: "header", faker, }), ), }, ], }, body: { rows: Array.from({ length: bodyRows }, () => ({ cells: Array.from({ length: cells }, () => mockTableCell({ type: "data", faker, }), ), })), }, } ) as MockTableValue<State>; }; // Only exported for testing purposes, to ensure the model used is in sync with the internal one. export const TableCell = { type: "StructuredText", config: { multi: [ prismic.RichTextNodeType.paragraph, prismic.RichTextNodeType.strong, prismic.RichTextNodeType.em, prismic.RichTextNodeType.hyperlink, ].join(","), }, } as const; const mockTableCell = ({ type, faker, }: { type: "header" | "data"; faker: Faker; }) => ({ type, content: richText({ faker, model: TableCell, }), });