@circe/core
Version:
Circe Components for Angular :: Core Services and Tools
98 lines • 16 kB
JavaScript
import { Injectable } from '@angular/core';
import { ToolService } from '../tool/tool.service';
import dayjs from 'dayjs';
dayjs().format();
// @dynamic
export class CustomValidationService {
constructor() { }
static arrayRepeatedValues(control) {
var _a;
let _output = null;
const previousLength = (_a = control.value) === null || _a === void 0 ? void 0 : _a.length;
const _repeatedValues = ToolService.repeatedValuesInArray(control.value);
if (_repeatedValues && Array.isArray(_repeatedValues) && _repeatedValues.length !== previousLength) {
_output = {
repeated: CustomValidationService.customMessages.repeated
};
}
return _output;
}
static arrayMinValues(minItems) {
return (c) => {
return c.value.length < minItems ? { arrayMinValues: `There must be at least ${minItems} items.` } : null;
};
}
static arrayMaxValues(maxItems) {
return (c) => {
return c.value.lenth > maxItems ? { arrayMaxValues: `There must be ${maxItems} items as maximum.` } : null;
};
}
static arrayOnlyNumberValues(control) {
return control.value.every(v => /^[+-]?(\d+)?(\.\d+)?$/.test(v)) ?
null : { arrayOnlyNumber: CustomValidationService.customMessages.arrayOnlyNumber };
}
static arrayOnlyIntegerValues(control) {
return control.value.every(v => /^[+-]?\d+$/.test(v)) ?
null : { arrayOnlyInteger: CustomValidationService.customMessages.arrayOnlyInteger };
}
static arrayRequired(control) {
return control.dirty && !control.value.length ?
{ arrayRequired: CustomValidationService.customMessages.arrayRequired } : null;
}
static arrayPattern(pattern) {
return (control) => {
const regexp = new RegExp(pattern);
return control.value.every(v => regexp.test(v)) ?
null : { arrayPattern: CustomValidationService.customMessages.arrayPattern };
};
}
static dateValidator(c) {
if (c.value === 'MM/DD/YYYY') {
return null;
}
return c.pristine || dayjs(c.value).isValid() ? null : { invalidDate: 'Invalid date.' };
}
static dateRequiredValidator(c) {
return c.touched && c.value === 'MM/DD/YYYY' ? { dateRequired: 'Required value.' } : null;
}
static dateDisableBeforeCurrentDayValidator(c) {
if (!dayjs(c.value).isValid()) {
return null;
}
return dayjs().isAfter(c.value, 'day') ? { disableBeforeCurrentDay: 'The date must be greater than current day.' } : null;
}
static dateDisableAfterCurrentDayValidator(c) {
if (!dayjs(c.value).isValid()) {
return null;
}
return dayjs().isBefore(c.value, 'day') ? { disableAfterCurrentDay: 'The date must be lower than current day.' } : null;
}
static dateMinDateValidator(minDate) {
return (c) => {
if (!dayjs(c.value).isValid()) {
return null;
}
return dayjs(minDate).isAfter(c.value, 'day') ? { minDate: `The date must be greater than ${dayjs(minDate).format('L')}.` } : null;
};
}
static dateMaxDateValidator(maxDate) {
return (c) => {
if (!dayjs(c.value).isValid()) {
return null;
}
return dayjs(maxDate).isBefore(c.value, 'day') ? { maxDate: `The date must be lower than ${dayjs(maxDate).format('L')}.` } : null;
};
}
}
CustomValidationService.customMessages = {
repeated: 'There can not be repeated values',
arrayOnlyNumber: 'There can be only number values',
arrayOnlyInteger: 'There can be only integer number values',
arrayRequired: 'There must be at least 1 item',
arrayPattern: 'All items must satisfied specified pattern'
};
CustomValidationService.decorators = [
{ type: Injectable }
];
CustomValidationService.ctorParameters = () => [];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXZhbGlkYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi9jdXN0b20tdmFsaWRhdGlvbi9jdXN0b20tdmFsaWRhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixLQUFLLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQWdCakIsV0FBVztBQUNHLE1BQU0sT0FBTyx1QkFBdUI7SUFTaEQsZ0JBQWUsQ0FBQztJQUVULE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxPQUFnQzs7UUFDaEUsSUFBSSxPQUFPLEdBQWdCLElBQUksQ0FBQztRQUNoQyxNQUFNLGNBQWMsR0FBVyxNQUFBLE9BQU8sQ0FBQyxLQUFLLDBDQUFFLE1BQU0sQ0FBQztRQUNyRCxNQUFNLGVBQWUsR0FBeUIsV0FBVyxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvRixJQUFJLGVBQWUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxNQUFNLEtBQUssY0FBYyxFQUFFO1lBQ2xHLE9BQU8sR0FBRztnQkFDUixRQUFRLEVBQUUsdUJBQXVCLENBQUMsY0FBYyxDQUFDLFFBQVE7YUFDMUQsQ0FBQztTQUNIO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBZ0I7UUFDM0MsT0FBTyxDQUFDLENBQWMsRUFBRSxFQUFFO1lBQ3hCLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFF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QyxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDN0IsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUVELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSwrQkFBK0IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNwSSxDQUFDLENBQUM7SUFDSixDQUFDOztBQXZHc0Isc0NBQWMsR0FBd0I7SUFDM0QsUUFBUSxFQUFFLGtDQUFrQztJQUM1QyxlQUFlLEVBQUUsaUNBQWlDO0lBQ2xELGdCQUFnQixFQUFFLHlDQUF5QztJQUMzRCxhQUFhLEVBQUUsK0JBQStCO0lBQzlDLFlBQVksRUFBRSw0Q0FBNEM7Q0FDM0QsQ0FBQzs7WUFQSCxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUb29sU2VydmljZSB9IGZyb20gJy4uL3Rvb2wvdG9vbC5zZXJ2aWNlJztcbmltcG9ydCB7IE5wYVNpbmdsZURhdGEgfSBmcm9tICcuLi9fdHlwZXMvZGF0YS50eXBlcyc7XG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xuZGF5anMoKS5mb3JtYXQoKTtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tRXJyb3JLZXlzID0gJ3JlcGVhdGVkJyB8ICdhcnJheU9ubHlOdW1iZXInIHwgJ2FycmF5T25seUludGVnZXInIHwgJ2FycmF5T25seUZsb2F0JyB8ICdhcnJheVJlcXVpcmVkJyB8ICdhcnJheVBhdHRlcm4nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbUVycm9yTWVzc2FnZXMge1xuICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIEN1c3RvbUVycm9yID0ge1xuICBba2V5IGluIEN1c3RvbUVycm9yS2V5c10/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbUVycm9yUmVwZWF0ZWRWYWx1ZXMge1xuICByZXBlYXRlZFZhbHVlczogc3RyaW5nO1xufVxuXG4vLyBAZHluYW1pY1xuQEluamVjdGFibGUoKSBleHBvcnQgY2xhc3MgQ3VzdG9tVmFsaWRhdGlvblNlcnZpY2Uge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGN1c3RvbU1lc3NhZ2VzOiBDdXN0b21FcnJvck1lc3NhZ2VzID0ge1xuICAgIHJlcGVhdGVkOiAnVGhlcmUgY2FuIG5vdCBiZSByZXBlYXRlZCB2YWx1ZXMnLFxuICAgIGFycmF5T25seU51bWJlcjogJ1RoZXJlIGNhbiBiZSBvbmx5IG51bWJlciB2YWx1ZXMnLFxuICAgIGFycmF5T25seUludGVnZXI6ICdUaGVyZSBjYW4gYmUgb25seSBpbnRlZ2VyIG51bWJlciB2YWx1ZXMnLFxuICAgIGFycmF5UmVxdWlyZWQ6ICdUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IDEgaXRlbScsXG4gICAgYXJyYXlQYXR0ZXJuOiAnQWxsIGl0ZW1zIG11c3Qgc2F0aXNmaWVkIHNwZWNpZmllZCBwYXR0ZXJuJ1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBwdWJsaWMgc3RhdGljIGFycmF5UmVwZWF0ZWRWYWx1ZXMoY29udHJvbDogRm9ybUFycmF5IHwgRm9ybUNvbnRyb2wpOiBDdXN0b21FcnJvciB8IG51bGwge1xuICAgIGxldCBfb3V0cHV0OiBDdXN0b21FcnJvciA9IG51bGw7XG4gICAgY29uc3QgcHJldmlvdXNMZW5ndGg6IG51bWJlciA9IGNvbnRyb2wudmFsdWU/Lmxlbmd0aDtcbiAgICBjb25zdCBfcmVwZWF0ZWRWYWx1ZXM6IEFycmF5PE5wYVNpbmdsZURhdGE+ID0gVG9vbFNlcnZpY2UucmVwZWF0ZWRWYWx1ZXNJbkFycmF5KGNvbnRyb2wudmFsdWUpO1xuICAgIGlmIChfcmVwZWF0ZWRWYWx1ZXMgJiYgQXJyYXkuaXNBcnJheShfcmVwZWF0ZWRWYWx1ZXMpICYmIF9yZXBlYXRlZFZhbHVlcy5sZW5ndGggIT09IHByZXZpb3VzTGVuZ3RoKSB7XG4gICAgICBfb3V0cHV0ID0ge1xuICAgICAgICByZXBlYXRlZDogQ3VzdG9tVmFsaWRhdGlvblNlcnZpY2UuY3VzdG9tTWVzc2FnZXMucmVwZWF0ZWRcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBfb3V0cHV0O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBhcnJheU1pblZhbHVlcyhtaW5JdGVtczogbnVtYmVyKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoYzogRm9ybUNvbnRyb2wpID0+IHtcbiAgICAgIHJldHVybiBjLnZhbHVlLmxlbmd0aCA8IG1pbkl0ZW1zID8geyBhcnJheU1pblZhbHVlczogYFRoZXJlIG11c3QgYmUgYXQgbGVhc3QgJHttaW5JdGVtc30gaXRlbXMuYH0gOiBudWxsO1xuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGFycmF5TWF4VmFsdWVzKG1heEl0ZW1zOiBudW1iZXIpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjOiBGb3JtQ29udHJvbCkgPT4ge1xuICAgICAgcmV0dXJuIGMudmFsdWUubGVudGggPiBtYXhJdGVtcyA/IHsgYXJyYXlNYXhWYWx1ZXM6IGBUaGVyZSBtdXN0IGJlICR7bWF4SXRlbXN9IGl0ZW1zIGFzIG1heGltdW0uYH0gOiBudWxsO1xuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGFycmF5T25seU51bWJlclZhbHVlcyhjb250cm9sOiBGb3JtQXJyYXkgfCBGb3JtQ29udHJvbCk6IEN1c3RvbUVycm9yIHwgbnVsbCB7XG4gICAgcmV0dXJuIGNvbnRyb2wudmFsdWUuZXZlcnkodiA9PiAvXlsrLV0/KFxcZCspPyhcXC5cXGQrKT8kLy50ZXN0KHYpKSA/XG4gICAgICBudWxsIDogeyBhcnJheU9ubHlOdW1iZXI6IEN1c3RvbVZhbGlkYXRpb25TZXJ2aWNlLmN1c3RvbU1lc3NhZ2VzLmFycmF5T25seU51bWJlciB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBhcnJheU9ubHlJbnRlZ2VyVmFsdWVzKGNvbnRyb2w6IEZvcm1BcnJheSB8IEZvcm1Db250cm9sKTogQ3VzdG9tRXJyb3IgfCBudWxsIHtcbiAgICByZXR1cm4gY29udHJvbC52YWx1ZS5ldmVyeSh2ID0+IC9eWystXT9cXGQrJC8udGVzdCh2KSkgP1xuICAgICAgbnVsbCA6IHsgYXJyYXlPbmx5SW50ZWdlcjogQ3VzdG9tVmFsaWRhdGlvblNlcnZpY2UuY3VzdG9tTWVzc2FnZXMuYXJyYXlPbmx5SW50ZWdlciB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBhcnJheVJlcXVpcmVkKGNvbnRyb2w6IEZvcm1BcnJheSB8IEZvcm1Db250cm9sKTogQ3VzdG9tRXJyb3IgfCBudWxsIHtcbiAgICByZXR1cm4gY29udHJvbC5kaXJ0eSAmJiAhY29udHJvbC52YWx1ZS5sZW5ndGggP1xuICAgICAgeyBhcnJheVJlcXVpcmVkOiBDdXN0b21WYWxpZGF0aW9uU2VydmljZS5jdXN0b21NZXNzYWdlcy5hcnJheVJlcXVpcmVkIH0gOiBudWxsO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBhcnJheVBhdHRlcm4ocGF0dGVybjogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogRm9ybUFycmF5IHwgRm9ybUNvbnRyb2wpOiBDdXN0b21FcnJvciB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgcmVnZXhwID0gbmV3IFJlZ0V4cChwYXR0ZXJuKTtcbiAgICAgIHJldHVybiBjb250cm9sLnZhbHVlLmV2ZXJ5KHYgPT4gcmVnZXhwLnRlc3QodikpID9cbiAgICAgICAgbnVsbCA6IHsgYXJyYXlQYXR0ZXJuOiBDdXN0b21WYWxpZGF0aW9uU2VydmljZS5jdXN0b21NZXNzYWdlcy5hcnJheVBhdHRlcm4gfTtcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBkYXRlVmFsaWRhdG9yKGM6IEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB7XG4gICAgaWYgKGMudmFsdWUgPT09ICdNTS9ERC9ZWVlZJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGMucHJpc3RpbmUgfHwgZGF5anMoYy52YWx1ZSkuaXNWYWxpZCgpID8gbnVsbCA6IHsgaW52YWxpZERhdGU6ICdJbnZhbGlkIGRhdGUuJyB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBkYXRlUmVxdWlyZWRWYWxpZGF0b3IoYzogRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHtcbiAgICByZXR1cm4gYy50b3VjaGVkICYmIGMudmFsdWUgPT09ICdNTS9ERC9ZWVlZJyA/IHsgZGF0ZVJlcXVpcmVkOiAnUmVxdWlyZWQgdmFsdWUuJyB9IDogbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZGF0ZURpc2FibGVCZWZvcmVDdXJyZW50RGF5VmFsaWRhdG9yKGM6IEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB7XG4gICAgaWYgKCFkYXlqcyhjLnZhbHVlKS5pc1ZhbGlkKCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBkYXlqcygpLmlzQWZ0ZXIoYy52YWx1ZSwgJ2RheScpID8geyBkaXNhYmxlQmVmb3JlQ3VycmVudERheTogJ1RoZSBkYXRlIG11c3QgYmUgZ3JlYXRlciB0aGFuIGN1cnJlbnQgZGF5LicgfSA6IG51bGw7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGRhdGVEaXNhYmxlQWZ0ZXJDdXJyZW50RGF5VmFsaWRhdG9yKGM6IEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB7XG4gICAgaWYgKCFkYXlqcyhjLnZhbHVlKS5pc1ZhbGlkKCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBkYXlqcygpLmlzQmVmb3JlKGMudmFsdWUsICdkYXknKSA/IHsgZGlzYWJsZUFmdGVyQ3VycmVudERheTogJ1RoZSBkYXRlIG11c3QgYmUgbG93ZXIgdGhhbiBjdXJyZW50IGRheS4nIH0gOiBudWxsO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBkYXRlTWluRGF0ZVZhbGlkYXRvcihtaW5EYXRlOiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlIHwgZGF5anMuRGF5anMpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjOiBGb3JtQ29udHJvbCkgPT4ge1xuICAgICAgaWYgKCFkYXlqcyhjLnZhbHVlKS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkYXlqcyhtaW5EYXRlKS5pc0FmdGVyKGMudmFsdWUsICdkYXknKSA/IHsgbWluRGF0ZTogYFRoZSBkYXRlIG11c3QgYmUgZ3JlYXRlciB0aGFuICR7ZGF5anMobWluRGF0ZSkuZm9ybWF0KCdMJyl9LmAgfSA6IG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZGF0ZU1heERhdGVWYWxpZGF0b3IobWF4RGF0ZTogc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSB8IGRheWpzLkRheWpzKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoYzogRm9ybUNvbnRyb2wpID0+IHtcbiAgICAgIGlmICghZGF5anMoYy52YWx1ZSkuaXNWYWxpZCgpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF5anMobWF4RGF0ZSkuaXNCZWZvcmUoYy52YWx1ZSwgJ2RheScpID8geyBtYXhEYXRlOiBgVGhlIGRhdGUgbXVzdCBiZSBsb3dlciB0aGFuICR7ZGF5anMobWF4RGF0ZSkuZm9ybWF0KCdMJyl9LmAgfSA6IG51bGw7XG4gICAgfTtcbiAgfVxufVxuIl19