diff --git a/src/bundle/Resources/public/ts/validators/BaseValidator.ts b/src/bundle/Resources/public/ts/validators/BaseValidator.ts new file mode 100644 index 0000000..8701339 --- /dev/null +++ b/src/bundle/Resources/public/ts/validators/BaseValidator.ts @@ -0,0 +1,5 @@ +export default abstract class BaseValidator { + abstract getErrorMessage(): string; + + abstract validate(value: T): boolean; +} diff --git a/src/bundle/Resources/public/ts/validators/IsEmptyStringValidator.ts b/src/bundle/Resources/public/ts/validators/IsEmptyStringValidator.ts new file mode 100644 index 0000000..11c5156 --- /dev/null +++ b/src/bundle/Resources/public/ts/validators/IsEmptyStringValidator.ts @@ -0,0 +1,11 @@ +import BaseValidator from './BaseValidator'; + +export default class IsEmptyStringValidator extends BaseValidator { + getErrorMessage(): string { + return /*@Desc("This field cannot be empty.")*/ 'ibexa.validators.is_empty_string'; // TODO: Use translation service when available + } + + validate(value: string): boolean { + return value.trim() !== ''; + } +} diff --git a/src/bundle/Resources/public/ts/validators/ValidatorManager.ts b/src/bundle/Resources/public/ts/validators/ValidatorManager.ts new file mode 100644 index 0000000..757491c --- /dev/null +++ b/src/bundle/Resources/public/ts/validators/ValidatorManager.ts @@ -0,0 +1,34 @@ +import BaseValidator from './BaseValidator'; + +export interface ValidationResult { + isValid: boolean; + messages: string[]; +} + +export default class ValidatorManager { + private _validators: BaseValidator[]; + + constructor(validators: BaseValidator[] = []) { + this._validators = validators; + } + + addValidator(validator: BaseValidator): void { + this._validators.push(validator); + } + + removeValidator(validator: BaseValidator): void { + this._validators = this._validators.filter((savedValidator) => savedValidator !== validator); + } + + validate(value: T): ValidationResult { + const errors = this._validators.reduce((errorsAcc: string[], validator) => { + if (!validator.validate(value)) { + return [...errorsAcc, validator.getErrorMessage()]; + } + + return errorsAcc; + }, []); + + return { isValid: !errors.length, messages: errors }; + } +}