Page MenuHomeSealhub

pick-from-list.ts
No OneTemporary

pick-from-list.ts

import { is, predicates } from "@sealcode/ts-predicates";
import { Context } from "koa";
import { FormFieldValidationResponse } from "./field";
import { SimpleFormField } from "./simple-form-field";
export class PickFromListField extends SimpleFormField {
constructor(
public required: boolean = false,
public generateOptions: (
ctx: Context
) => Promise<Record<string, string> | { [i: string]: string }>,
public customValidation: (
ctx: Context,
value: unknown,
instance: PickFromListField
) => Promise<FormFieldValidationResponse> = (ctx, value, instance) =>
instance.valueInList(ctx, value)
) {
super(required);
}
public isValueValid(
ctx: Context,
value: string
): Promise<FormFieldValidationResponse> {
return this.customValidation(ctx, value, this);
}
async valueInList(
ctx: Context,
value: unknown
): Promise<FormFieldValidationResponse> {
const options = await this.generateOptions(ctx);
if (!is(value, predicates.string)) {
return { valid: false, message: "not a string" };
}
if (!Object.keys(options).includes(value)) {
return {
valid: false,
message: `"${value}" is not one of the options`,
};
}
return { valid: true, message: "" };
}
public getEmptyValue(): string {
return "";
}
}

File Metadata

Mime Type
text/x-java
Expires
Sun, Sep 21, 01:08 (1 d, 19 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
930341
Default Alt Text
pick-from-list.ts (1 KB)

Event Timeline