import { formatWithPrettier } from "../utils/prettier.js"; const defaults = { postimport: ` import { Fields } from "@sealcode/sealgen"; import type {FormDataValue} from "@sealcode/sealgen";`, get_fields: `()=>({ password: new Fields.Password(true) })`, get_controls: ` (fields: ReturnType)=>[new Controls.SimpleInput(fields.password, { label: "Password:", type: "password", })]`, validate_method: `async validateValues( ctx: Context, data: Record ): Promise<{ valid: boolean; error: string }> { // just a silly example, please remove this with better logic const { parsed: email } = await this.fields.email.getParsedValue(ctx, data); const { parsed: password } = await this.fields.password.getParsedValue(ctx, data); // eslint-disable-next-line @typescript-eslint/consistent-type-assertions if ((password || "").length > ((email as string) || "").length) { return { valid: false, error: "Password cannot be longer than email" }; } else { return { valid: true, error: "" }; } }`, onsubmit: ` async onSubmit() { //noop return; }`, can_access: ` // eslint-disable-next-line @typescript-eslint/no-unused-vars async canAccess(_: Context) { return { canAccess: true, message: "" }; }`, render: `async render(ctx: Context, data: FormData, show_field_errors: boolean) { return html({ctx, title: "Form", description: "", css_clumps: ["admin-forms"], body: await super.render(ctx, data, show_field_errors)}); }`, get_initial_values: "", other_methods: "", success_message: "Success!", }; export async function formTemplate( action_name: string, _params: Partial = defaults ): Promise { const params = { ...defaults, ..._params }; const content = `import type { Context } from "koa"; import type { FormData } from "@sealcode/sealgen"; import { Form, Controls } from "@sealcode/sealgen"; import html from "src/back/html.js"; ${params.postimport} export const actionName = "${action_name}"; const getFields = ${params.get_fields}; export default new (class ${action_name}Form extends Form, void> { defaultSuccessMessage = "Formularz wypełniony poprawnie"; getFields = getFields; getControls = ${params.get_controls}; ${params.other_methods} ${params.get_initial_values} ${params.onsubmit} ${params.can_access} ${params.render} })(); `; return formatWithPrettier(content); }