PromucFlow_constructor/app/client/src/utils/ValidationFactory.ts

61 lines
1.6 KiB
TypeScript
Raw Normal View History

2019-11-19 12:44:58 +00:00
import { WidgetType } from "constants/WidgetConstants";
import WidgetFactory from "./WidgetFactory";
2019-11-22 13:12:39 +00:00
import {
2020-03-16 07:59:07 +00:00
VALIDATION_TYPES,
2019-11-22 13:12:39 +00:00
ValidationResponse,
ValidationType,
Validator,
2019-11-25 05:07:27 +00:00
} from "constants/WidgetValidation";
2020-03-31 03:21:35 +00:00
import { WidgetProps } from "widgets/BaseWidget";
2020-04-20 05:42:46 +00:00
import { DataTree } from "entities/DataTree/dataTreeFactory";
2019-11-19 12:44:58 +00:00
2020-03-16 07:59:07 +00:00
export const BASE_WIDGET_VALIDATION = {
isLoading: VALIDATION_TYPES.BOOLEAN,
isVisible: VALIDATION_TYPES.BOOLEAN,
isDisabled: VALIDATION_TYPES.BOOLEAN,
};
2020-03-31 03:21:35 +00:00
export type WidgetPropertyValidationType = Record<
string,
ValidationType | Validator
>;
2019-11-19 12:44:58 +00:00
class ValidationFactory {
static validationMap: Map<ValidationType, Validator> = new Map();
static registerValidator(
validationType: ValidationType,
validator: Validator,
) {
this.validationMap.set(validationType, validator);
}
static validateWidgetProperty(
widgetType: WidgetType,
property: string,
value: any,
2020-04-20 05:42:46 +00:00
props: WidgetProps,
dataTree?: DataTree,
2019-11-22 13:12:39 +00:00
): ValidationResponse {
// TODO WIDGETFACTORY
2019-11-19 12:44:58 +00:00
const propertyValidationTypes = WidgetFactory.getWidgetPropertyValidationMap(
widgetType,
);
2020-03-31 03:21:35 +00:00
const validationTypeOrValidator = propertyValidationTypes[property];
let validator;
if (typeof validationTypeOrValidator === "function") {
validator = validationTypeOrValidator;
} else {
validator = this.validationMap.get(validationTypeOrValidator);
}
2019-11-19 12:44:58 +00:00
if (validator) {
2020-04-20 05:42:46 +00:00
return validator(value, props, dataTree);
2019-11-22 13:12:39 +00:00
} else {
return { isValid: true, parsed: value };
2019-11-19 12:44:58 +00:00
}
}
}
export default ValidationFactory;