diff --git a/packages/components/src/internal/shared/validators.ts b/packages/components/src/internal/shared/validators.ts new file mode 100644 index 0000000..d3d2962 --- /dev/null +++ b/packages/components/src/internal/shared/validators.ts @@ -0,0 +1,18 @@ +import BaseValidator from '../../validators/BaseValidator'; + +export interface ValidationResult { + isValid: boolean; + messages: string[]; +} + +export const validateInput = (value: T, validators: BaseValidator[]): ValidationResult => { + const errors = validators.reduce((errorsAcc: string[], validator) => { + if (!validator.validate(value)) { + return [...errorsAcc, validator.getErrorMessage()]; + } + + return errorsAcc; + }, []); + + return { isValid: !errors.length, messages: errors }; +}; diff --git a/packages/components/src/validators/BaseValidator.ts b/packages/components/src/validators/BaseValidator.ts new file mode 100644 index 0000000..db41311 --- /dev/null +++ b/packages/components/src/validators/BaseValidator.ts @@ -0,0 +1,13 @@ +import { TranslatorType } from '@ids-context/Translator'; + +export default abstract class BaseValidator { + protected _translator: TranslatorType; + + constructor(translator: TranslatorType) { + this._translator = translator; + } + + abstract getErrorMessage(): string; + + abstract validate(value: T): boolean; +} diff --git a/packages/components/src/validators/IsEmptyStringValidator.ts b/packages/components/src/validators/IsEmptyStringValidator.ts new file mode 100644 index 0000000..4ce3fc4 --- /dev/null +++ b/packages/components/src/validators/IsEmptyStringValidator.ts @@ -0,0 +1,13 @@ +import BaseValidator from './BaseValidator'; + +export default class IsEmptyStringValidator extends BaseValidator { + getErrorMessage(): string { + const Translator = this._translator; + + return Translator.trans(/*@Desc("This field cannot be empty.")*/ 'ibexa.validators.is_empty_string'); + } + + validate(value: string): boolean { + return value.trim() !== ''; + } +}