import { toPascalCase } from "js-convert-case"; import extract_fields_from_collection from "../../utils/extract-fields-from-collection.js"; import { formatWithPrettier } from "../../utils/prettier.js"; import { wrapAttribute } from "../../utils/wrap-attributes.js"; export async function sharedCrudFormFields(collection_name: string) { const collection_fields = await extract_fields_from_collection(collection_name); const uppercase_collection = toPascalCase(collection_name); const result = `import { type Controls, Fields } from "@sealcode/sealgen"; import { ${uppercase_collection} } from "src/back/collections/collections.js"; ${Array.from( new Set( collection_fields .map((field_info) => field_info.form_field.generateImportsForFieldList(field_info) ) .flat() .map( ({ what, from, as, type }) => `import ${type ? "type " : ""}{${what}${as ? ` as ${as}` : ""} } from "${from}"` ) ).values() ).join(";\n")} export const get${toPascalCase(collection_name)}FormFields = () => { ${collection_fields .map((field_info) => { return `${ field_info.name }: ${field_info.form_field.generateFieldDeclaration(field_info, { form_field_types: "Fields", sealious_field: `${uppercase_collection}.fields${wrapAttribute( field_info.name )}`, })}`; }) .join(",\n")} }; const getFields = get${toPascalCase(collection_name)}FormFields export const get${toPascalCase( collection_name )}FormControls: (fields: ReturnType) => Controls.FormControl[] = (fields) => [ ${collection_fields .map(({ name }) => `fields${wrapAttribute(name)}.getControl()`) .join(",\n")} ]; `; return formatWithPrettier(result); }