import { FieldTypes as SealiousFieldTypes } from "sealious"; import { Context } from "koa"; import { ExtractedFieldInfo } from "../../utils/extract-fields-from-collection.js"; import { CheckboxedListField } from "./checkboxed-list.js"; import { FormControlContext } from "../controls/form-control.js"; import { FormDataValue } from "../form-types.js"; export class EnumMultipleSealious< Values extends string, > extends CheckboxedListField { public sealious_field: SealiousFieldTypes.EnumMultiple; constructor(sealious_field: SealiousFieldTypes.EnumMultiple) { super(sealious_field.required, async (ctx: Context) => (await sealious_field.getAllowedValues(ctx.$context)).map( (value: Values) => ({ value, label: value }) ) ); this.sealious_field = sealious_field; } generateFieldDeclaration( field_info: ExtractedFieldInfo, vars: { form_field_types: string; sealious_field: string } ): string { return `new ${vars.form_field_types}.${this.constructor.name}(${vars.sealious_field})`; } async getSealiousCreateValue(fctx: FormControlContext): Promise { const { parsed } = await this.getParsedValue( fctx.ctx, fctx.data.raw_values ); const result = Object.entries(parsed || {}) .filter(([, value]) => value == "on") .map(([key]) => key as Values); return result; } async sealiousValueToForm( ctx: Context, sealious_value: Values[] | null ): Promise { return Object.fromEntries( (sealious_value || []).map((key) => [key, "on"]) ); } }