import type * as prismic from "@prismicio/client" import { createFaker } from "../lib/createFaker" import * as modelGen from "../model" import type { MockValueStateConfig, MockValueConfig } from "../types" export type MockSelectValueConfig< Model extends prismic.CustomTypeModelSelectField = prismic.CustomTypeModelSelectField, State extends prismic.FieldState = prismic.FieldState, > = MockValueConfig & MockValueStateConfig export type MockSelectValue< Model extends prismic.CustomTypeModelSelectField = prismic.CustomTypeModelSelectField, State extends prismic.FieldState = prismic.FieldState, > = prismic.SelectField["options"]>[number], State> export const select = < Model extends prismic.CustomTypeModelSelectField = prismic.CustomTypeModelSelectField, State extends prismic.FieldState = "filled", >( config: MockSelectValueConfig, ): MockSelectValue => { const faker = config.faker || createFaker(config.seed) const model = config.model || modelGen.select({ faker }) const defaultValue = model.config?.default_value const options = model.config?.options || [] if (config.state === "empty") { return null as MockSelectValue } else { return ( typeof defaultValue === "string" && faker.boolean() ? defaultValue : faker.randomElement(options) ) as MockSelectValue } }