UNPKG

@baseplate-dev/react-generators

Version:

React Generators for Baseplate

52 lines 2.14 kB
import { tsCodeFragment } from '@baseplate-dev/core-generators'; import { createGenerator, createGeneratorTask } from '@baseplate-dev/sync'; import { z } from 'zod'; import { reactComponentsImportsProvider } from '#src/generators/core/react-components/index.js'; import { adminCrudInputContainerProvider } from '../_providers/admin-crud-input-container.js'; const descriptorSchema = z.object({ label: z.string().min(1), order: z.number(), modelField: z.string().min(1), validation: z.string().min(1), type: z.enum(['text', 'checked', 'date', 'dateTime']).default('text'), }); const INPUT_TYPE_MAP = { checked: 'CheckboxFieldController', date: 'DatePickerFieldController', dateTime: 'DateTimePickerFieldController', text: 'InputFieldController', }; export const adminCrudTextInputGenerator = createGenerator({ name: 'admin/admin-crud-text-input', generatorFileUrl: import.meta.url, descriptorSchema, getInstanceName: (descriptor) => descriptor.modelField, buildTasks: ({ label, modelField, validation, type, order }) => ({ main: createGeneratorTask({ dependencies: { adminCrudInputContainer: adminCrudInputContainerProvider, reactComponentsImports: reactComponentsImportsProvider, }, run({ adminCrudInputContainer, reactComponentsImports }) { const inputType = INPUT_TYPE_MAP[type]; adminCrudInputContainer.addInput({ order, content: tsCodeFragment(`<${inputType} label="${label}" control={control} name="${modelField}" />`, reactComponentsImports[inputType].declaration()), graphQLFields: [{ name: modelField }], validation: [ { key: modelField, expression: tsCodeFragment(validation), }, ], }); return {}; }, }), }), }); //# sourceMappingURL=admin-crud-text-input.generator.js.map