@bi8/am-dyn-form
Version:
ng update @angular/cli yarn add @angular/cli
107 lines • 11.3 kB
JavaScript
import * as moment_ from 'moment';
const moment = moment_;
export function DynMatchValidator(otherControlName) {
let thisControl;
let otherControl;
return function matchOtherValidate(control) {
if (!control.parent) {
return null;
}
// Initializing the validator.
if (!thisControl) {
thisControl = control;
otherControl = control.parent.get(otherControlName);
if (!otherControl) {
throw new Error('matchOtherValidator(): other control is not found in parent group');
}
otherControl.valueChanges.subscribe(() => {
thisControl.updateValueAndValidity();
});
}
if (!otherControl) {
return null;
}
if (otherControl.value !== thisControl.value) {
return {
match: true
};
}
return null;
};
}
export function BusinessLogicValidator() {
return function matchOtherValidate(control) {
if (!control.parent) {
return null;
}
return null;
};
}
export class TimeUtils {
static parseTime(value) {
if (!value) {
return null;
}
let formats = ['HH:mm', 'H:mm'];
for (let format of formats) {
let dt = moment(value, format, true);
if (dt.isValid()) {
return {
hours: dt.hours(),
minutes: dt.minutes(),
is24Hour: true
};
}
}
formats = ['hh:mm a', 'hh:mma', 'h:mm a', 'h:mma', 'h:m a', 'h:ma'];
for (let format of formats) {
let dt = moment(value, format, true);
if (dt.isValid()) {
return {
hours: dt.hours(),
minutes: dt.minutes(),
is24Hour: false
};
}
}
return null;
}
static formatTime(date) {
if (date) {
return date.format('hh:mm a');
}
else if (date) {
return moment(date).format('hh:mm a');
}
}
static applyTime(date, time) {
if (date) {
let md = date;
md.hours(time.hours);
md.minutes(time.minutes);
}
else if (date) {
let md = moment(date);
md.hours(time.hours);
md.minutes(time.minutes);
}
}
}
export function TimeValidator() {
return (control) => {
let value = control.value;
if (value) {
let td = TimeUtils.parseTime(value);
if (td != null) {
return null;
}
else {
return { time: true };
}
}
else {
return null;
}
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluLXZhbGlkYXRvcnMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYmk4L2FtLWR5bi1mb3JtLyIsInNvdXJjZXMiOlsiYXBwL21vZHVsZXMvYW0tZHluLWZvcm0vZHluLXZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxLQUFLLE9BQU8sTUFBTSxRQUFRLENBQUM7QUFDbEMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBS3ZCLE1BQU0sVUFBVSxpQkFBaUIsQ0FBRSxnQkFBd0I7SUFFekQsSUFBSSxXQUF3QixDQUFDO0lBQzdCLElBQUksWUFBeUIsQ0FBQztJQUU5QixPQUFPLFNBQVMsa0JBQWtCLENBQUUsT0FBb0I7UUFFdEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDbkIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELDhCQUE4QjtRQUM5QixJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLFdBQVcsR0FBRyxPQUFPLENBQUM7WUFDdEIsWUFBWSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFnQixDQUFDO1lBQ25FLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUVBQW1FLENBQUMsQ0FBQzthQUN0RjtZQUNELFlBQVksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDdkMsV0FBVyxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDdkMsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDakIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELElBQUksWUFBWSxDQUFDLEtBQUssS0FBSyxXQUFXLENBQUMsS0FBSyxFQUFFO1lBQzVDLE9BQU87Z0JBQ0wsS0FBSyxFQUFFLElBQUk7YUFDWixDQUFDO1NBQ0g7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQTtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCO0lBQ3BDLE9BQU8sU0FBUyxrQkFBa0IsQ0FBRSxPQUFvQjtRQUN0RCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUNuQixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUE7QUFDSCxDQUFDO0FBUUQsTUFBTSxPQUFPLFNBQVM7SUFFcEIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFhO1FBQzVCLElBQUksQ0FBQyxLQUFLLEVBQUM7WUFDVCxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsSUFBSSxPQUFPLEdBQUcsQ0FBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDakMsS0FBSyxJQUFJLE1BQU0sSUFBSSxPQUFPLEVBQUU7WUFDMUIsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDckMsSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUM7Z0JBQ2YsT0FBTztvQkFDTCxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRTtvQkFDakIsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUU7b0JBQ3JCLFFBQVEsRUFBRSxJQUFJO2lCQUNmLENBQUM7YUFDSDtTQUNGO1FBRUQsT0FBTyxHQUFHLENBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUUsQ0FBQztRQUN0RSxLQUFLLElBQUksTUFBTSxJQUFJLE9BQU8sRUFBRTtZQUMxQixJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNyQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBQztnQkFDZixPQUFPO29CQUNMLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFO29CQUNqQixPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRTtvQkFDckIsUUFBUSxFQUFFLEtBQUs7aUJBQ2hCLENBQUM7YUFDSDtTQUNGO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBR0QsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFvQjtRQUNwQyxJQUFhLElBQUksRUFBQztZQUNoQixPQUFnQixJQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBRXpDO2FBQU0sSUFBVyxJQUFJLEVBQUM7WUFDckIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3ZDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBbUIsRUFBRSxJQUFjO1FBQ2xELElBQVcsSUFBSSxFQUFDO1lBQ2QsSUFBSSxFQUFFLEdBQXFCLElBQUksQ0FBQztZQUNoQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQixFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUUxQjthQUFNLElBQVcsSUFBSSxFQUFDO1lBQ3JCLElBQUksRUFBRSxHQUFZLE1BQU0sQ0FBUSxJQUFJLENBQUMsQ0FBQztZQUN0QyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQixFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMxQjtJQUNILENBQUM7Q0FFRjtBQUVELE1BQU0sVUFBVSxhQUFhO0lBQzNCLE9BQU8sQ0FBQyxPQUFvQixFQUFFLEVBQUU7UUFDOUIsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUUxQixJQUFJLEtBQUssRUFBQztZQUNSLElBQUksRUFBRSxHQUFjLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0MsSUFBSSxFQUFFLElBQUksSUFBSSxFQUFDO2dCQUNiLE9BQU8sSUFBSSxDQUFDO2FBQ2I7aUJBQU07Z0JBQ0wsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUN2QjtTQUVGO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQztTQUNiO0lBQ0gsQ0FBQyxDQUFBO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Rm9ybUNvbnRyb2wsIFZhbGlkYXRvckZufSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHtEeW5Gb3JtQ29udHJvbH0gZnJvbSBcIi4vZHluLWZvcm0tY29udHJvbFwiO1xyXG5cclxuaW1wb3J0ICogYXMgbW9tZW50XyBmcm9tICdtb21lbnQnO1xyXG5jb25zdCBtb21lbnQgPSBtb21lbnRfO1xyXG5cclxuaW1wb3J0IGluZGV4IGZyb20gXCJAYW5ndWxhci9jbGkvbGliL2NsaVwiO1xyXG5pbXBvcnQge01vbWVudH0gZnJvbSBcIm1vbWVudFwiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIER5bk1hdGNoVmFsaWRhdG9yIChvdGhlckNvbnRyb2xOYW1lOiBzdHJpbmcpIHtcclxuXHJcbiAgbGV0IHRoaXNDb250cm9sOiBGb3JtQ29udHJvbDtcclxuICBsZXQgb3RoZXJDb250cm9sOiBGb3JtQ29udHJvbDtcclxuXHJcbiAgcmV0dXJuIGZ1bmN0aW9uIG1hdGNoT3RoZXJWYWxpZGF0ZSAoY29udHJvbDogRm9ybUNvbnRyb2wpIHtcclxuXHJcbiAgICBpZiAoIWNvbnRyb2wucGFyZW50KSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEluaXRpYWxpemluZyB0aGUgdmFsaWRhdG9yLlxyXG4gICAgaWYgKCF0aGlzQ29udHJvbCkge1xyXG4gICAgICB0aGlzQ29udHJvbCA9IGNvbnRyb2w7XHJcbiAgICAgIG90aGVyQ29udHJvbCA9IGNvbnRyb2wucGFyZW50LmdldChvdGhlckNvbnRyb2xOYW1lKSBhcyBGb3JtQ29udHJvbDtcclxuICAgICAgaWYgKCFvdGhlckNvbnRyb2wpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21hdGNoT3RoZXJWYWxpZGF0b3IoKTogb3RoZXIgY29udHJvbCBpcyBub3QgZm91bmQgaW4gcGFyZW50IGdyb3VwJyk7XHJcbiAgICAgIH1cclxuICAgICAgb3RoZXJDb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXNDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFvdGhlckNvbnRyb2wpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG90aGVyQ29udHJvbC52YWx1ZSAhPT0gdGhpc0NvbnRyb2wudmFsdWUpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBtYXRjaDogdHJ1ZVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gQnVzaW5lc3NMb2dpY1ZhbGlkYXRvciAoKSB7XHJcbiAgcmV0dXJuIGZ1bmN0aW9uIG1hdGNoT3RoZXJWYWxpZGF0ZSAoY29udHJvbDogRm9ybUNvbnRyb2wpIHtcclxuICAgIGlmICghY29udHJvbC5wYXJlbnQpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVGltZURhdGEge1xyXG4gIGhvdXJzOiBudW1iZXIsXHJcbiAgbWludXRlczogbnVtYmVyLFxyXG4gIGlzMjRIb3VyOiBib29sZWFuXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBUaW1lVXRpbHMge1xyXG5cclxuICBzdGF0aWMgcGFyc2VUaW1lKHZhbHVlOiBzdHJpbmcpIDogVGltZURhdGEgIHtcclxuICAgIGlmICghdmFsdWUpe1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZm9ybWF0cyA9IFsgJ0hIOm1tJywgJ0g6bW0nXTtcclxuICAgIGZvciAobGV0IGZvcm1hdCBvZiBmb3JtYXRzKSB7XHJcbiAgICAgIGxldCBkdCA9IG1vbWVudCh2YWx1ZSwgZm9ybWF0LCB0cnVlKTtcclxuICAgICAgaWYgKGR0LmlzVmFsaWQoKSl7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGhvdXJzOiBkdC5ob3VycygpLFxyXG4gICAgICAgICAgbWludXRlczogZHQubWludXRlcygpLFxyXG4gICAgICAgICAgaXMyNEhvdXI6IHRydWVcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9ybWF0cyA9IFsgJ2hoOm1tIGEnLCAnaGg6bW1hJywgJ2g6bW0gYScsICdoOm1tYScsICdoOm0gYScsICdoOm1hJyBdO1xyXG4gICAgZm9yIChsZXQgZm9ybWF0IG9mIGZvcm1hdHMpIHtcclxuICAgICAgbGV0IGR0ID0gbW9tZW50KHZhbHVlLCBmb3JtYXQsIHRydWUpO1xyXG4gICAgICBpZiAoZHQuaXNWYWxpZCgpKXtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgaG91cnM6IGR0LmhvdXJzKCksXHJcbiAgICAgICAgICBtaW51dGVzOiBkdC5taW51dGVzKCksXHJcbiAgICAgICAgICBpczI0SG91cjogZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuXHJcbiAgc3RhdGljIGZvcm1hdFRpbWUoZGF0ZSA6IERhdGUgfCBNb21lbnQpIDogc3RyaW5nIHtcclxuICAgIGlmICg8TW9tZW50PiBkYXRlKXtcclxuICAgICAgcmV0dXJuICg8TW9tZW50PmRhdGUpLmZvcm1hdCgnaGg6bW0gYScpO1xyXG5cclxuICAgIH0gZWxzZSBpZiAoPERhdGU+IGRhdGUpe1xyXG4gICAgICByZXR1cm4gbW9tZW50KGRhdGUpLmZvcm1hdCgnaGg6bW0gYScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGFwcGx5VGltZShkYXRlOiBEYXRlIHwgTW9tZW50LCB0aW1lOiBUaW1lRGF0YSkge1xyXG4gICAgaWYgKDxEYXRlPiBkYXRlKXtcclxuICAgICAgbGV0IG1kIDogTW9tZW50ID0gPE1vbWVudD4gZGF0ZTtcclxuICAgICAgbWQuaG91cnModGltZS5ob3Vycyk7XHJcbiAgICAgIG1kLm1pbnV0ZXModGltZS5taW51dGVzKTtcclxuXHJcbiAgICB9IGVsc2UgaWYgKDxEYXRlPiBkYXRlKXtcclxuICAgICAgbGV0IG1kIDogTW9tZW50ID0gbW9tZW50KDxEYXRlPiBkYXRlKTtcclxuICAgICAgbWQuaG91cnModGltZS5ob3Vycyk7XHJcbiAgICAgIG1kLm1pbnV0ZXModGltZS5taW51dGVzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVGltZVZhbGlkYXRvciAoKSA6IFZhbGlkYXRvckZuIHtcclxuICByZXR1cm4gKGNvbnRyb2w6IEZvcm1Db250cm9sKSA9PntcclxuICAgIGxldCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XHJcblxyXG4gICAgaWYgKHZhbHVlKXtcclxuICAgICAgbGV0IHRkIDogVGltZURhdGEgPSBUaW1lVXRpbHMucGFyc2VUaW1lKHZhbHVlKTtcclxuICAgICAgaWYgKHRkICE9IG51bGwpe1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB7IHRpbWU6IHRydWUgfTtcclxuICAgICAgfVxyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=