Page MenuHomeSealhub

enum-multiple.ts
No OneTemporary

enum-multiple.ts

import { is, predicates } from "@sealcode/ts-predicates";
import { Context } from "koa";
import { FormDataValue } from "../form";
import { FieldParseResult, FormField } from "./field";
export class EnumMultipleField<
Options extends readonly string[],
Required extends boolean
> extends FormField<Required, string[]> {
constructor(
required: Required,
public options: Options,
public error_message: (options: Options) => string = (options) =>
options.join(", ")
) {
super(required);
}
predicate = predicates.enum<Options>(this.options);
public async isValueValid(
_: Context,
values: string[]
): Promise<{ valid: boolean; message: string }> {
for (const value of values) {
if (!is(value, predicates.string)) {
return { valid: false, message: "expected a string" };
}
if (!this.options.includes(value)) {
return { valid: false, message: "invalid value" };
}
}
return { valid: true, message: "" };
}
async parse(
_: Context,
value: FormDataValue
): Promise<FieldParseResult<string[]>> {
if (is(value, predicates.string)) {
return { parsable: true, parsed_value: [value], error: null };
} else if (is(value, predicates.array(predicates.string))) {
return {
parsable: true,
parsed_value: value,
error: null,
};
} else if (value == null) {
return { parsable: true, parsed_value: [], error: null };
} else {
return {
parsable: false,
parsed_value: null,
error: "Please enter a list of strings",
};
}
}
public getEmptyValue(): string[] {
return [];
}
}

File Metadata

Mime Type
text/x-java
Expires
Tue, May 27, 23:48 (1 d, 20 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
643989
Default Alt Text
enum-multiple.ts (1 KB)

Event Timeline