import { Predicate, predicates } from "@sealcode/ts-predicates"; import { Context } from "koa"; import { Collection, CollectionItem } from "sealious"; import { FormControl, FormControlContext } from "../controls/form-control.js"; import { FormDataValue, FormData } from "../form-types.js"; import { ExtractedFieldInfo } from "../../utils/extract-fields-from-collection.js"; export type FormFieldValidationResponse = { valid: boolean; message: string; }; export type FormDisplayInfo = { field: keyof C["fields"]; label: string; format?: (value: unknown, item: CollectionItem) => JSX.Element; }; export type FormFieldValidationFn = (ctx: Context, value: ValueType, field: FormField) => Promise; export type FieldParsedValue = T extends FormField ? R : never; export type GetPredicate = F extends FormField ? F["predicate"] : F["predicate"] | typeof predicates.undefined; export type FieldsToShape> = { [property in keyof T]: GetPredicate; }; export declare function fieldsToShape>(obj: Fields): FieldsToShape; export type FieldParseResult = { parsable: true; error: null; parsed_value: T; } | { parsable: false; error: string; parsed_value: null; }; export declare abstract class FormField { readonly required: Required; name: string; label: string; constructor(required: Required); predicate: Predicate; mapToFilter: (parsed: ParsedValue) => unknown; disabled: boolean; init(): Promise; setName(name: string): this; setDisabled(status: boolean): this; setLabel(label: string): this; _validate(ctx: Context, value: ParsedValue): Promise; abstract getEmptyValue(): ParsedValue; isValueValid(_ctx: Context, _value: ParsedValue): Promise; abstract parse(ctx: Context, raw_value: FormDataValue): Promise>; getParsedValue(ctx: Context, all_form_values: Record, validate: true): Promise<{ valid: boolean; message: string; parsed: ParsedValue | null; raw: FormDataValue; }>; getParsedValue(ctx: Context, all_form_values: Record, validate?: false): Promise<{ message: string; parsed: ParsedValue | null; raw: FormDataValue; }>; setMapToFilter(fn: (parsed: ParsedValue) => unknown): this; getDatabaseValue(ctx: Context, data: Record): Promise; abstract getControl(): DefaultFormControl; getSealiousCreateValue(fctx: FormControlContext): Promise; sealiousValueToForm(ctx: Context, sealiousValue: SealiousValue | null, item: CollectionItem): Promise; postSealiousCreate(ctx: Context, created_item: CollectionItem, form_data: FormData): Promise; postSealiousEdit(ctx: Context, edited_item: CollectionItem, form_data: FormData): Promise; generateFieldDeclaration(field_info: ExtractedFieldInfo, vars: { form_field_types: string; sealious_field: string; }): string; generateCreateValueGetter(field_info: ExtractedFieldInfo, vars: { form_field_types: string; sealious_field: string; form_fields: string; }): string; generateInitialValue(field_info: ExtractedFieldInfo, vars: { form_field_types: string; form_fields: string; }): string; generateImportsForFieldList(field_info: ExtractedFieldInfo): { what: string; from: string; as?: string; type?: boolean; }[]; }