2023-03-29 17:56:42 +02:00
|
|
|
import { Validator } from "./Validator"
|
2023-03-29 17:21:20 +02:00
|
|
|
import StringValidator from "./Validators/StringValidator"
|
|
|
|
import TextValidator from "./Validators/TextValidator"
|
|
|
|
import DateValidator from "./Validators/DateValidator"
|
2023-03-29 17:56:42 +02:00
|
|
|
import NatValidator from "./Validators/NatValidator"
|
2023-03-29 17:21:20 +02:00
|
|
|
import IntValidator from "./Validators/IntValidator"
|
2023-03-29 17:56:42 +02:00
|
|
|
import LengthValidator from "./Validators/LengthValidator"
|
2023-03-29 17:21:20 +02:00
|
|
|
import DirectionValidator from "./Validators/DirectionValidator"
|
2023-03-29 17:56:42 +02:00
|
|
|
import WikidataValidator from "./Validators/WikidataValidator"
|
|
|
|
import PNatValidator from "./Validators/PNatValidator"
|
|
|
|
import FloatValidator from "./Validators/FloatValidator"
|
2023-03-29 17:21:20 +02:00
|
|
|
import PFloatValidator from "./Validators/PFloatValidator"
|
2023-03-29 17:56:42 +02:00
|
|
|
import EmailValidator from "./Validators/EmailValidator"
|
2023-03-29 17:21:20 +02:00
|
|
|
import UrlValidator from "./Validators/UrlValidator"
|
2023-03-29 17:56:42 +02:00
|
|
|
import PhoneValidator from "./Validators/PhoneValidator"
|
|
|
|
import OpeningHoursValidator from "./Validators/OpeningHoursValidator"
|
|
|
|
import ColorValidator from "./Validators/ColorValidator"
|
|
|
|
import BaseUIElement from "../BaseUIElement"
|
|
|
|
import Combine from "../Base/Combine"
|
|
|
|
import Title from "../Base/Title"
|
2023-03-29 17:21:20 +02:00
|
|
|
|
2023-03-30 04:51:56 +02:00
|
|
|
export type ValidatorType = typeof Validators.availableTypes[number]
|
|
|
|
|
2023-03-29 17:21:20 +02:00
|
|
|
export default class Validators {
|
2023-03-30 04:51:56 +02:00
|
|
|
public static readonly availableTypes = [
|
|
|
|
"string",
|
|
|
|
"text",
|
|
|
|
"date",
|
|
|
|
"nat",
|
|
|
|
"int",
|
|
|
|
"distance",
|
|
|
|
"direction",
|
|
|
|
"wikidata",
|
|
|
|
"pnat",
|
|
|
|
"float",
|
|
|
|
"pfloat",
|
|
|
|
"email",
|
|
|
|
"url",
|
|
|
|
"phone",
|
|
|
|
"opening_hours",
|
|
|
|
"color",
|
|
|
|
] as const
|
|
|
|
|
|
|
|
public static readonly AllValidators: ReadonlyArray<Validator> = [
|
2023-03-29 17:21:20 +02:00
|
|
|
new StringValidator(),
|
|
|
|
new TextValidator(),
|
|
|
|
new DateValidator(),
|
|
|
|
new NatValidator(),
|
|
|
|
new IntValidator(),
|
|
|
|
new LengthValidator(),
|
|
|
|
new DirectionValidator(),
|
|
|
|
new WikidataValidator(),
|
|
|
|
new PNatValidator(),
|
|
|
|
new FloatValidator(),
|
|
|
|
new PFloatValidator(),
|
|
|
|
new EmailValidator(),
|
|
|
|
new UrlValidator(),
|
|
|
|
new PhoneValidator(),
|
|
|
|
new OpeningHoursValidator(),
|
|
|
|
new ColorValidator(),
|
|
|
|
]
|
|
|
|
|
2023-03-30 04:51:56 +02:00
|
|
|
private static _byType = Validators._byTypeConstructor()
|
|
|
|
|
|
|
|
private static _byTypeConstructor(): Map<ValidatorType, Validator> {
|
|
|
|
const map = new Map<ValidatorType, Validator>()
|
|
|
|
for (const validator of Validators.AllValidators) {
|
|
|
|
map.set(<ValidatorType>validator.name, validator)
|
|
|
|
}
|
|
|
|
return map
|
|
|
|
}
|
2023-03-29 17:21:20 +02:00
|
|
|
public static HelpText(): BaseUIElement {
|
|
|
|
const explanations: BaseUIElement[] = Validators.AllValidators.map((type) =>
|
|
|
|
new Combine([new Title(type.name, 3), type.explanation]).SetClass("flex flex-col")
|
|
|
|
)
|
|
|
|
return new Combine([
|
|
|
|
new Title("Available types for text fields", 1),
|
|
|
|
"The listed types here trigger a special input element. Use them in `tagrendering.freeform.type` of your tagrendering to activate them",
|
|
|
|
...explanations,
|
|
|
|
]).SetClass("flex flex-col")
|
|
|
|
}
|
|
|
|
|
2023-03-30 04:51:56 +02:00
|
|
|
static get(type: ValidatorType): Validator {
|
|
|
|
return Validators._byType.get(type)
|
2023-03-29 17:21:20 +02:00
|
|
|
}
|
|
|
|
}
|