import type * as prismic from "@prismicio/client" import { createFaker } from "../lib/createFaker" import { valueForModelMap, type ValueForModelMapConfigs } from "../lib/valueForModelMap" import * as modelGen from "../model" import type { MockValueConfig, MockValueStateConfig, ModelValue } from "../types" export type MockGroupValueConfig< Model extends prismic.CustomTypeModelGroupField = prismic.CustomTypeModelGroupField, State extends prismic.FieldState = prismic.FieldState, > = { itemsCount?: State extends "empty" ? 0 : number configs?: ValueForModelMapConfigs } & MockValueConfig & MockValueStateConfig export type MockGroupValue = prismic.DateField export const group = < Model extends prismic.CustomTypeModelGroupField = prismic.CustomTypeModelGroupField, State extends prismic.FieldState = "filled", >( config: MockGroupValueConfig, ): ModelValue => { if (config.state === "empty") { return [] as ModelValue } else { const faker = config.faker || createFaker(config.seed) const model = config.model || modelGen.group({ faker }) const itemsCount = config.itemsCount ?? faker.range(1, 6) return Array(itemsCount) .fill(undefined) .map(() => { return valueForModelMap({ faker, map: model.config?.fields || {}, configs: config.configs, }) }) as ModelValue } }