@abgov/angular-components 3.0.3 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/index.mjs +3 -1
- package/esm2022/lib/angular-components.module.mjs +4 -4
- package/esm2022/lib/checked-directive.mjs +6 -6
- package/esm2022/lib/public-form-utils.mjs +34 -0
- package/esm2022/lib/validation.mjs +205 -0
- package/esm2022/lib/value-directive.mjs +18 -7
- package/fesm2022/abgov-angular-components.mjs +266 -16
- package/fesm2022/abgov-angular-components.mjs.map +1 -1
- package/index.d.ts +2 -0
- package/lib/public-form-utils.d.ts +18 -0
- package/lib/validation.d.ts +44 -0
- package/lib/value-directive.d.ts +3 -0
- package/package.json +1 -1
package/esm2022/index.mjs
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
export * from "./lib/angular-components.module";
|
|
2
|
-
|
|
2
|
+
export * from "./lib/validation";
|
|
3
|
+
export * from "./lib/public-form-utils";
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItY29tcG9uZW50cy9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMseUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9saWIvYW5ndWxhci1jb21wb25lbnRzLm1vZHVsZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL3ZhbGlkYXRpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9wdWJsaWMtZm9ybS11dGlsc1wiO1xuIl19
|
|
@@ -3,11 +3,11 @@ import { ValueDirective, ValueListDirective } from "./value-directive";
|
|
|
3
3
|
import { CheckedDirective } from "./checked-directive";
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export class AngularComponentsModule {
|
|
6
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
7
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.
|
|
8
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.
|
|
6
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: AngularComponentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
7
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.1.5", ngImport: i0, type: AngularComponentsModule, declarations: [ValueDirective, ValueListDirective, CheckedDirective], exports: [ValueDirective, ValueListDirective, CheckedDirective] }); }
|
|
8
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: AngularComponentsModule }); }
|
|
9
9
|
}
|
|
10
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: AngularComponentsModule, decorators: [{
|
|
11
11
|
type: NgModule,
|
|
12
12
|
args: [{
|
|
13
13
|
declarations: [ValueDirective, ValueListDirective, CheckedDirective],
|
|
@@ -32,23 +32,23 @@ export class CheckedDirective extends CheckboxControlValueAccessor {
|
|
|
32
32
|
listenForValueChange(checked) {
|
|
33
33
|
this.value = checked;
|
|
34
34
|
}
|
|
35
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
36
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.
|
|
35
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: CheckedDirective, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
36
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.5", type: CheckedDirective, selector: "[goaChecked]", host: { listeners: { "_change": "listenForValueChange($event.detail.checked)" } }, providers: [
|
|
37
37
|
{
|
|
38
|
-
provide: NG_VALUE_ACCESSOR,
|
|
39
38
|
useExisting: forwardRef(() => CheckedDirective),
|
|
39
|
+
provide: NG_VALUE_ACCESSOR,
|
|
40
40
|
multi: true,
|
|
41
41
|
},
|
|
42
42
|
], usesInheritance: true, ngImport: i0 }); }
|
|
43
43
|
}
|
|
44
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
44
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: CheckedDirective, decorators: [{
|
|
45
45
|
type: Directive,
|
|
46
46
|
args: [{
|
|
47
47
|
selector: "[goaChecked]",
|
|
48
48
|
providers: [
|
|
49
49
|
{
|
|
50
|
-
provide: NG_VALUE_ACCESSOR,
|
|
51
50
|
useExisting: forwardRef(() => CheckedDirective),
|
|
51
|
+
provide: NG_VALUE_ACCESSOR,
|
|
52
52
|
multi: true,
|
|
53
53
|
},
|
|
54
54
|
],
|
|
@@ -57,4 +57,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
|
|
|
57
57
|
type: HostListener,
|
|
58
58
|
args: ["_change", ["$event.detail.checked"]]
|
|
59
59
|
}] } });
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tlZC1kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItY29tcG9uZW50cy9zcmMvbGliL2NoZWNrZWQtZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxVQUFVLEVBQ1YsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCw0QkFBNEIsRUFDNUIsaUJBQWlCLEdBQ2xCLE1BQU0sZ0JBQWdCLENBQUM7O0FBYXhCLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSw0QkFBNEI7SUFPaEUsWUFBc0IsUUFBbUIsRUFBWSxVQUFzQjtRQUN6RSxLQUFLLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRFIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUFZLGVBQVUsR0FBVixVQUFVLENBQVk7UUFObkUsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUV6Qix1REFBdUQ7UUFDOUMsYUFBUSxHQUFRLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxQixjQUFTLEdBQVEsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBSXBDLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFZO1FBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUNsRCxDQUFDO0lBRVEsVUFBVSxDQUFDLE9BQVk7UUFDOUIsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUM7SUFDdkIsQ0FBQztJQUVRLGdCQUFnQixDQUFDLEVBQW9CO1FBQzVDLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFUSxpQkFBaUIsQ0FBQyxFQUFjO1FBQ3ZDLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFHRCxvQkFBb0IsQ0FBQyxPQUFZO1FBQy9CLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDO0lBQ3ZCLENBQUM7OEdBckNVLGdCQUFnQjtrR0FBaEIsZ0JBQWdCLDBIQVRoQjtZQUNUO2dCQUNFLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7Z0JBQy9DLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRjs7MkZBR1UsZ0JBQWdCO2tCQVg1QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxjQUFjO29CQUN4QixTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsaUJBQWlCLENBQUM7NEJBQy9DLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO2lCQUNGO3VHQXFDQyxvQkFBb0I7c0JBRG5CLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBmb3J3YXJkUmVmLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgUmVuZGVyZXIyLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtcbiAgQ2hlY2tib3hDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG59IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6IFwiW2dvYUNoZWNrZWRdXCIsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENoZWNrZWREaXJlY3RpdmUpLFxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxufSlcblxuZXhwb3J0IGNsYXNzIENoZWNrZWREaXJlY3RpdmUgZXh0ZW5kcyBDaGVja2JveENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgcHJpdmF0ZSBfY2hlY2tlZCA9IGZhbHNlO1xuXG4gIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbiAgb3ZlcnJpZGUgb25DaGFuZ2U6IGFueSA9ICgpID0+IHsgfTtcbiAgb3ZlcnJpZGUgb25Ub3VjaGVkOiBhbnkgPSAoKSA9PiB7IH07XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlbmRlcmVyOiBSZW5kZXJlcjIsIHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XG4gICAgc3VwZXIocmVuZGVyZXIsIGVsZW1lbnRSZWYpO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NoZWNrZWQgPyBcImNoZWNrZWRcIiA6IFwiXCI7XG4gIH1cblxuICBzZXQgdmFsdWUoY2hlY2tlZDogYW55KSB7XG4gICAgdGhpcy5fY2hlY2tlZCA9ICEhY2hlY2tlZDtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuX2NoZWNrZWQpO1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2hlY2tlZCA9IGNoZWNrZWQ7XG4gIH1cblxuICBvdmVycmlkZSB3cml0ZVZhbHVlKGNoZWNrZWQ6IGFueSkge1xuICAgIHRoaXMudmFsdWUgPSBjaGVja2VkO1xuICB9XG5cbiAgb3ZlcnJpZGUgcmVnaXN0ZXJPbkNoYW5nZShmbjogKF86IGFueSkgPT4gdm9pZCkge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIG92ZXJyaWRlIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoXCJfY2hhbmdlXCIsIFtcIiRldmVudC5kZXRhaWwuY2hlY2tlZFwiXSlcbiAgbGlzdGVuRm9yVmFsdWVDaGFuZ2UoY2hlY2tlZDogYW55KSB7XG4gICAgdGhpcy52YWx1ZSA9IGNoZWNrZWQ7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export function dispatch(el, eventName, detail, opts) {
|
|
2
|
+
if (!el) {
|
|
3
|
+
console.error("dispatch element is null");
|
|
4
|
+
return;
|
|
5
|
+
}
|
|
6
|
+
el.dispatchEvent(new CustomEvent(eventName, {
|
|
7
|
+
composed: true,
|
|
8
|
+
bubbles: opts?.bubbles,
|
|
9
|
+
detail: detail,
|
|
10
|
+
}));
|
|
11
|
+
}
|
|
12
|
+
export function relay(el, eventName, data, opts) {
|
|
13
|
+
if (!el) {
|
|
14
|
+
console.error("dispatch element is null");
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
// console.log(`RELAY(${eventName}):`, data, el);
|
|
18
|
+
el.dispatchEvent(new CustomEvent("msg", {
|
|
19
|
+
composed: true,
|
|
20
|
+
bubbles: opts?.bubbles,
|
|
21
|
+
detail: {
|
|
22
|
+
action: eventName,
|
|
23
|
+
data,
|
|
24
|
+
},
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
// TODO: Logic similar to this needs to be done on the React side as well i.e. an initial onMount
|
|
28
|
+
// event that passes a ref to the form,
|
|
29
|
+
export function continueTo(el, name) {
|
|
30
|
+
relay(el, "external::continue", {
|
|
31
|
+
next: name,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWZvcm0tdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItY29tcG9uZW50cy9zcmMvbGliL3B1YmxpYy1mb3JtLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWNBLE1BQU0sVUFBVSxRQUFRLENBQ3RCLEVBQTRDLEVBQzVDLFNBQWlCLEVBQ2pCLE1BQVUsRUFDVixJQUE0QjtJQUU1QixJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDUixPQUFPLENBQUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDMUMsT0FBTztJQUNULENBQUM7SUFDRCxFQUFFLENBQUMsYUFBYSxDQUNkLElBQUksV0FBVyxDQUFJLFNBQVMsRUFBRTtRQUM1QixRQUFRLEVBQUUsSUFBSTtRQUNkLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTztRQUN0QixNQUFNLEVBQUUsTUFBTTtLQUNmLENBQUMsQ0FDSCxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxLQUFLLENBQ25CLEVBQTRDLEVBQzVDLFNBQWlCLEVBQ2pCLElBQVEsRUFDUixJQUE0QjtJQUU1QixJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDUixPQUFPLENBQUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDMUMsT0FBTztJQUNULENBQUM7SUFDRCxpREFBaUQ7SUFDakQsRUFBRSxDQUFDLGFBQWEsQ0FDZCxJQUFJLFdBQVcsQ0FBK0IsS0FBSyxFQUFFO1FBQ25ELFFBQVEsRUFBRSxJQUFJO1FBQ2QsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPO1FBQ3RCLE1BQU0sRUFBRTtZQUNOLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLElBQUk7U0FDTDtLQUNGLENBQUMsQ0FDSCxDQUFDO0FBQ0osQ0FBQztBQUVELGlHQUFpRztBQUNqRyx1Q0FBdUM7QUFDdkMsTUFBTSxVQUFVLFVBQVUsQ0FBQyxFQUFlLEVBQUUsSUFBWTtJQUN0RCxLQUFLLENBQW1CLEVBQUUsRUFBRSxvQkFBb0IsRUFBRTtRQUNoRCxJQUFJLEVBQUUsSUFBSTtLQUNYLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBBcHBTdGF0ZSA9IHtcbiAgZm9ybTogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgRmllbGRzZXRJdGVtU3RhdGU+W10+O1xuICBoaXN0b3J5OiBzdHJpbmdbXTtcbiAgZWRpdHRpbmc6IHN0cmluZztcbiAgbGFzdE1vZGlmaWVkPzogRGF0ZTtcbn07XG5cbmV4cG9ydCB0eXBlIEZpZWxkc2V0SXRlbVN0YXRlID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIC8vIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlO1xuICB2YWx1ZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3BhdGNoPFQ+KFxuICBlbDogSFRNTEVsZW1lbnQgfCBFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgZXZlbnROYW1lOiBzdHJpbmcsXG4gIGRldGFpbD86IFQsXG4gIG9wdHM/OiB7IGJ1YmJsZXM/OiBib29sZWFuIH0sXG4pIHtcbiAgaWYgKCFlbCkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJkaXNwYXRjaCBlbGVtZW50IGlzIG51bGxcIik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGVsLmRpc3BhdGNoRXZlbnQoXG4gICAgbmV3IEN1c3RvbUV2ZW50PFQ+KGV2ZW50TmFtZSwge1xuICAgICAgY29tcG9zZWQ6IHRydWUsXG4gICAgICBidWJibGVzOiBvcHRzPy5idWJibGVzLFxuICAgICAgZGV0YWlsOiBkZXRhaWwsXG4gICAgfSksXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWxheTxUPihcbiAgZWw6IEhUTUxFbGVtZW50IHwgRWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGV2ZW50TmFtZTogc3RyaW5nLFxuICBkYXRhPzogVCxcbiAgb3B0cz86IHsgYnViYmxlcz86IGJvb2xlYW4gfSxcbikge1xuICBpZiAoIWVsKSB7XG4gICAgY29uc29sZS5lcnJvcihcImRpc3BhdGNoIGVsZW1lbnQgaXMgbnVsbFwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gY29uc29sZS5sb2coYFJFTEFZKCR7ZXZlbnROYW1lfSk6YCwgZGF0YSwgZWwpO1xuICBlbC5kaXNwYXRjaEV2ZW50KFxuICAgIG5ldyBDdXN0b21FdmVudDx7IGFjdGlvbjogc3RyaW5nOyBkYXRhPzogVCB9PihcIm1zZ1wiLCB7XG4gICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgIGJ1YmJsZXM6IG9wdHM/LmJ1YmJsZXMsXG4gICAgICBkZXRhaWw6IHtcbiAgICAgICAgYWN0aW9uOiBldmVudE5hbWUsXG4gICAgICAgIGRhdGEsXG4gICAgICB9LFxuICAgIH0pLFxuICApO1xufVxuXG4vLyBUT0RPOiBMb2dpYyBzaW1pbGFyIHRvIHRoaXMgbmVlZHMgdG8gYmUgZG9uZSBvbiB0aGUgUmVhY3Qgc2lkZSBhcyB3ZWxsIGkuZS4gYW4gaW5pdGlhbCBvbk1vdW50XG4vLyBldmVudCB0aGF0IHBhc3NlcyBhIHJlZiB0byB0aGUgZm9ybSxcbmV4cG9ydCBmdW5jdGlvbiBjb250aW51ZVRvKGVsOiBIVE1MRWxlbWVudCwgbmFtZTogc3RyaW5nKSB7XG4gIHJlbGF5PHsgbmV4dDogc3RyaW5nIH0+KGVsLCBcImV4dGVybmFsOjpjb250aW51ZVwiLCB7XG4gICAgbmV4dDogbmFtZSxcbiAgfSk7XG59XG4iXX0=
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
// TODO: move this into the form-utils file, since it is specific to the public form component
|
|
2
|
+
export function validate(field, fieldsetEl, fieldsetState, validators) {
|
|
3
|
+
const value = fieldsetState?.[field]?.value;
|
|
4
|
+
for (const validator of validators) {
|
|
5
|
+
const msg = validator(value);
|
|
6
|
+
if (msg) {
|
|
7
|
+
dispatchError(fieldsetEl, field, msg);
|
|
8
|
+
return [false, ""];
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
return [true, value];
|
|
12
|
+
}
|
|
13
|
+
// TODO: move this into the form-utils file, since it is specific to the public form component
|
|
14
|
+
function dispatchError(el, name, msg) {
|
|
15
|
+
el.dispatchEvent(new CustomEvent("msg", {
|
|
16
|
+
composed: true,
|
|
17
|
+
detail: {
|
|
18
|
+
action: "external::set:error",
|
|
19
|
+
data: {
|
|
20
|
+
name,
|
|
21
|
+
msg,
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
}));
|
|
25
|
+
}
|
|
26
|
+
export class FormValidator {
|
|
27
|
+
constructor(validators) {
|
|
28
|
+
this.validators = validators || {};
|
|
29
|
+
}
|
|
30
|
+
add(fieldName, ...validators) {
|
|
31
|
+
this.validators[fieldName] = validators;
|
|
32
|
+
}
|
|
33
|
+
validate(data) {
|
|
34
|
+
const errors = {};
|
|
35
|
+
Object.entries(this.validators).forEach(([name, validators]) => {
|
|
36
|
+
const err = validators
|
|
37
|
+
.map((validatorFn) => {
|
|
38
|
+
const errMsg = validatorFn(data[name]);
|
|
39
|
+
return errMsg;
|
|
40
|
+
})
|
|
41
|
+
.find((msg) => !!msg);
|
|
42
|
+
if (err) {
|
|
43
|
+
errors[name] = err;
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
return errors;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// **********
|
|
50
|
+
// Validators
|
|
51
|
+
// **********
|
|
52
|
+
export function birthDayValidator() {
|
|
53
|
+
return [
|
|
54
|
+
requiredValidator("Day is required"),
|
|
55
|
+
numericValidator({
|
|
56
|
+
min: 1,
|
|
57
|
+
max: 31,
|
|
58
|
+
minMsg: "Day must be between 1 and 31",
|
|
59
|
+
maxMsg: "Day must be between 1 and 31",
|
|
60
|
+
}),
|
|
61
|
+
];
|
|
62
|
+
}
|
|
63
|
+
export function birthMonthValidator() {
|
|
64
|
+
return [
|
|
65
|
+
requiredValidator("Month is required"),
|
|
66
|
+
numericValidator({
|
|
67
|
+
min: 0,
|
|
68
|
+
max: 11,
|
|
69
|
+
minMsg: "Month must be between Jan and Dec",
|
|
70
|
+
maxMsg: "Month must be between Jan and Dec",
|
|
71
|
+
}),
|
|
72
|
+
];
|
|
73
|
+
}
|
|
74
|
+
export function birthYearValidator() {
|
|
75
|
+
const maxYear = new Date().getFullYear();
|
|
76
|
+
return [
|
|
77
|
+
requiredValidator("Year is required"),
|
|
78
|
+
numericValidator({
|
|
79
|
+
min: 1900,
|
|
80
|
+
max: maxYear,
|
|
81
|
+
minMsg: "Year must be greater than 1900",
|
|
82
|
+
maxMsg: `Year must be less than ${maxYear}`,
|
|
83
|
+
}),
|
|
84
|
+
];
|
|
85
|
+
}
|
|
86
|
+
export function requiredValidator(msg) {
|
|
87
|
+
return (value) => {
|
|
88
|
+
msg = msg || "Required";
|
|
89
|
+
if (typeof value === "number" && !isNaN(value)) {
|
|
90
|
+
return "";
|
|
91
|
+
}
|
|
92
|
+
if (value) {
|
|
93
|
+
return "";
|
|
94
|
+
}
|
|
95
|
+
return msg;
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
export function phoneNumberValidator(msg) {
|
|
99
|
+
const regex = new RegExp(/^\+?[\d-() ]{10,18}$/);
|
|
100
|
+
return regexValidator(regex, msg || "Invalid phone number");
|
|
101
|
+
}
|
|
102
|
+
export function emailValidator(msg) {
|
|
103
|
+
// emailregex.com
|
|
104
|
+
const regex = new RegExp(/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/);
|
|
105
|
+
return regexValidator(regex, msg || "Invalid email address");
|
|
106
|
+
}
|
|
107
|
+
export function SINValidator() {
|
|
108
|
+
return (value) => {
|
|
109
|
+
if (!value)
|
|
110
|
+
return "";
|
|
111
|
+
const checkValue = "121121121".split("").map((c) => parseInt(c));
|
|
112
|
+
const valueStr = value.replace(/\D/g, "");
|
|
113
|
+
if (valueStr.length !== 9)
|
|
114
|
+
return "SIN must contain 9 numbers";
|
|
115
|
+
const checkSum = valueStr
|
|
116
|
+
.split("")
|
|
117
|
+
.map((c) => parseInt(c))
|
|
118
|
+
.map((num, index) => {
|
|
119
|
+
const val = num * checkValue[index];
|
|
120
|
+
if (val < 10) {
|
|
121
|
+
return val;
|
|
122
|
+
}
|
|
123
|
+
return `${val}`
|
|
124
|
+
.split("")
|
|
125
|
+
.map((c) => parseInt(c))
|
|
126
|
+
.reduce((acc, val) => acc * val, 1);
|
|
127
|
+
})
|
|
128
|
+
.reduce((acc, val) => acc + val, 0);
|
|
129
|
+
if (checkSum % 10 === 0) {
|
|
130
|
+
return "";
|
|
131
|
+
}
|
|
132
|
+
return "Invalid SIN";
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
export function postalCodeValidator() {
|
|
136
|
+
return regexValidator(/^[ABCEGHJ-NPRSTVXY]\d[ABCEGHJ-NPRSTV-Z][ -]?\d[ABCEGHJ-NPRSTV-Z]\d$/i, "Invalid postal code");
|
|
137
|
+
}
|
|
138
|
+
export function regexValidator(regex, msg) {
|
|
139
|
+
return (value) => {
|
|
140
|
+
if (!value) {
|
|
141
|
+
return "";
|
|
142
|
+
}
|
|
143
|
+
if (value.match(regex)) {
|
|
144
|
+
return "";
|
|
145
|
+
}
|
|
146
|
+
return msg;
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
export function dateValidator({ invalidMsg, startMsg, endMsg, start, end, }) {
|
|
150
|
+
return (date) => {
|
|
151
|
+
let _date = new Date(0);
|
|
152
|
+
if (typeof date === "string") {
|
|
153
|
+
_date = new Date(date);
|
|
154
|
+
}
|
|
155
|
+
if (date.toDateString) {
|
|
156
|
+
_date = date;
|
|
157
|
+
}
|
|
158
|
+
if (_date.toString() === "Invalid Date" || _date.getTime() === 0) {
|
|
159
|
+
return invalidMsg || "Invalid date";
|
|
160
|
+
}
|
|
161
|
+
if (_date && start && _date < start) {
|
|
162
|
+
return startMsg || `Must be after ${start}`;
|
|
163
|
+
}
|
|
164
|
+
if (_date && end && _date > end) {
|
|
165
|
+
return endMsg || `Must be before ${end}`;
|
|
166
|
+
}
|
|
167
|
+
return "";
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
export function numericValidator({ invalidTypeMsg, minMsg, maxMsg, min = -Number.MAX_VALUE, max = Number.MAX_VALUE, }) {
|
|
171
|
+
return (value) => {
|
|
172
|
+
let _value = Number.MAX_VALUE;
|
|
173
|
+
if (typeof value === "string") {
|
|
174
|
+
_value = parseFloat(value);
|
|
175
|
+
}
|
|
176
|
+
if (typeof value === "number") {
|
|
177
|
+
_value = value;
|
|
178
|
+
}
|
|
179
|
+
if (isNaN(_value)) {
|
|
180
|
+
return invalidTypeMsg || "Must be a numeric value";
|
|
181
|
+
}
|
|
182
|
+
if (_value > max) {
|
|
183
|
+
return maxMsg || `Must be less than or equal to ${max}`;
|
|
184
|
+
}
|
|
185
|
+
if (_value < min) {
|
|
186
|
+
return minMsg || `Must be greater than or equal to ${min}`;
|
|
187
|
+
}
|
|
188
|
+
return "";
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
export function lengthValidator({ invalidTypeMsg, minMsg, maxMsg, min = -Number.MAX_VALUE, max = Number.MAX_VALUE, }) {
|
|
192
|
+
return (value) => {
|
|
193
|
+
if (typeof value !== "string") {
|
|
194
|
+
return invalidTypeMsg || "Invalid type";
|
|
195
|
+
}
|
|
196
|
+
if (value.length > max) {
|
|
197
|
+
return maxMsg || `Must be less than ${max} characters`;
|
|
198
|
+
}
|
|
199
|
+
if (value.length < min) {
|
|
200
|
+
return minMsg || `Must be greater than ${min} characters`;
|
|
201
|
+
}
|
|
202
|
+
return "";
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1jb21wb25lbnRzL3NyYy9saWIvdmFsaWRhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSw4RkFBOEY7QUFDOUYsTUFBTSxVQUFVLFFBQVEsQ0FDdEIsS0FBYSxFQUNiLFVBQXVCLEVBQ3ZCLGFBQTRCLEVBQzVCLFVBQTRCO0lBRTVCLE1BQU0sS0FBSyxHQUFHLGFBQWEsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUU1QyxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ25DLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ1IsYUFBYSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDdEMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDdkIsQ0FBQztBQUVELDhGQUE4RjtBQUM5RixTQUFTLGFBQWEsQ0FBQyxFQUFlLEVBQUUsSUFBWSxFQUFFLEdBQVc7SUFDL0QsRUFBRSxDQUFDLGFBQWEsQ0FDZCxJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUU7UUFDckIsUUFBUSxFQUFFLElBQUk7UUFDZCxNQUFNLEVBQUU7WUFDTixNQUFNLEVBQUUscUJBQXFCO1lBQzdCLElBQUksRUFBRTtnQkFDSixJQUFJO2dCQUNKLEdBQUc7YUFDSjtTQUNGO0tBQ0YsQ0FBQyxDQUNILENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxPQUFPLGFBQWE7SUFFeEIsWUFBWSxVQUE2QztRQUN2RCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsSUFBSSxFQUFFLENBQUM7SUFDckMs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O1FBRUQsSUFBSSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDakIsT0FBTyxNQUFNLElBQUksaUNBQWlDLEdBQUcsRUFBRSxDQUFDO1FBQzFELENBQUM7UUFDRCxJQUFJLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUNqQixPQUFPLE1BQU0sSUFBSSxvQ0FBb0MsR0FBRyxFQUFFLENBQUM7UUFDN0QsQ0FBQztRQUVELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQVNELE1BQU0sVUFBVSxlQUFlLENBQUMsRUFDOUIsY0FBYyxFQUNkLE1BQU0sRUFDTixNQUFNLEVBQ04sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFDdkIsR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEdBQ0M7SUFDdkIsT0FBTyxDQUFDLEtBQWMsRUFBRSxFQUFFO1FBQ3hCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDOUIsT0FBTyxjQUFjLElBQUksY0FBYyxDQUFDO1FBQzFDLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDdkIsT0FBTyxNQUFNLElBQUkscUJBQXFCLEdBQUcsYUFBYSxDQUFDO1FBQ3pELENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDdkIsT0FBTyxNQUFNLElBQUksd0JBQXdCLEdBQUcsYUFBYSxDQUFDO1FBQzVELENBQUM7UUFFRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaWVsZHNldEl0ZW1TdGF0ZSB9IGZyb20gXCIuL3B1YmxpYy1mb3JtLXV0aWxzXCI7XG5cbmV4cG9ydCB0eXBlIEZpZWxkVmFsaWRhdG9yID0gKHZhbHVlOiB1bmtub3duKSA9PiBzdHJpbmc7XG5leHBvcnQgdHlwZSBGaWVsZHNldFN0YXRlID0gUmVjb3JkPHN0cmluZywgRmllbGRzZXRJdGVtU3RhdGU+O1xuXG4vLyBUT0RPOiBtb3ZlIHRoaXMgaW50byB0aGUgZm9ybS11dGlscyBmaWxlLCBzaW5jZSBpdCBpcyBzcGVjaWZpYyB0byB0aGUgcHVibGljIGZvcm0gY29tcG9uZW50XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGUoXG4gIGZpZWxkOiBzdHJpbmcsXG4gIGZpZWxkc2V0RWw6IEhUTUxFbGVtZW50LFxuICBmaWVsZHNldFN0YXRlOiBGaWVsZHNldFN0YXRlLFxuICB2YWxpZGF0b3JzOiBGaWVsZFZhbGlkYXRvcltdLFxuKTogW2Jvb2xlYW4sIHN0cmluZ10ge1xuICBjb25zdCB2YWx1ZSA9IGZpZWxkc2V0U3RhdGU/LltmaWVsZF0/LnZhbHVlO1xuXG4gIGZvciAoY29uc3QgdmFsaWRhdG9yIG9mIHZhbGlkYXRvcnMpIHtcbiAgICBjb25zdCBtc2cgPSB2YWxpZGF0b3IodmFsdWUpO1xuICAgIGlmIChtc2cpIHtcbiAgICAgIGRpc3BhdGNoRXJyb3IoZmllbGRzZXRFbCwgZmllbGQsIG1zZyk7XG4gICAgICByZXR1cm4gW2ZhbHNlLCBcIlwiXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFt0cnVlLCB2YWx1ZV07XG59XG5cbi8vIFRPRE86IG1vdmUgdGhpcyBpbnRvIHRoZSBmb3JtLXV0aWxzIGZpbGUsIHNpbmNlIGl0IGlzIHNwZWNpZmljIHRvIHRoZSBwdWJsaWMgZm9ybSBjb21wb25lbnRcbmZ1bmN0aW9uIGRpc3BhdGNoRXJyb3IoZWw6IEhUTUxFbGVtZW50LCBuYW1lOiBzdHJpbmcsIG1zZzogc3RyaW5nKSB7XG4gIGVsLmRpc3BhdGNoRXZlbnQoXG4gICAgbmV3IEN1c3RvbUV2ZW50KFwibXNnXCIsIHtcbiAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgZGV0YWlsOiB7XG4gICAgICAgIGFjdGlvbjogXCJleHRlcm5hbDo6c2V0OmVycm9yXCIsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIG1zZyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSksXG4gICk7XG59XG5cbmV4cG9ydCBjbGFzcyBGb3JtVmFsaWRhdG9yIHtcbiAgcHJpdmF0ZSB2YWxpZGF0b3JzOiBSZWNvcmQ8c3RyaW5nLCBGaWVsZFZhbGlkYXRvcltdPjtcbiAgY29uc3RydWN0b3IodmFsaWRhdG9ycz86IFJlY29yZDxzdHJpbmcsIEZpZWxkVmFsaWRhdG9yW10+KSB7XG4gICAgdGhpcy52YWxpZGF0b3JzID0gdmFsaWRhdG9ycyB8fCB7fTtcbiAgfVxuXG4gIGFkZChmaWVsZE5hbWU6IHN0cmluZywgLi4udmFsaWRhdG9yczogRmllbGRWYWxpZGF0b3JbXSkge1xuICAgIHRoaXMudmFsaWRhdG9yc1tmaWVsZE5hbWVdID0gdmFsaWRhdG9ycztcbiAgfVxuXG4gIHZhbGlkYXRlKGRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBlcnJvcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMudmFsaWRhdG9ycykuZm9yRWFjaCgoW25hbWUsIHZhbGlkYXRvcnNdKSA9PiB7XG4gICAgICBjb25zdCBlcnIgPSB2YWxpZGF0b3JzXG4gICAgICAgIC5tYXAoKHZhbGlkYXRvckZuKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXJyTXNnID0gdmFsaWRhdG9yRm4oZGF0YVtuYW1lXSk7XG4gICAgICAgICAgcmV0dXJuIGVyck1zZztcbiAgICAgICAgfSlcbiAgICAgICAgLmZpbmQoKG1zZykgPT4gISFtc2cpO1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBlcnJvcnNbbmFtZV0gPSBlcnI7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG59XG5cbi8vICoqKioqKioqKipcbi8vIFZhbGlkYXRvcnNcbi8vICoqKioqKioqKipcblxuZXhwb3J0IGZ1bmN0aW9uIGJpcnRoRGF5VmFsaWRhdG9yKCk6IEZpZWxkVmFsaWRhdG9yW10ge1xuICByZXR1cm4gW1xuICAgIHJlcXVpcmVkVmFsaWRhdG9yKFwiRGF5IGlzIHJlcXVpcmVkXCIpLFxuICAgIG51bWVyaWNWYWxpZGF0b3Ioe1xuICAgICAgbWluOiAxLFxuICAgICAgbWF4OiAzMSxcbiAgICAgIG1pbk1zZzogXCJEYXkgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDMxXCIsXG4gICAgICBtYXhNc2c6IFwiRGF5IG11c3QgYmUgYmV0d2VlbiAxIGFuZCAzMVwiLFxuICAgIH0pLFxuICBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmlydGhNb250aFZhbGlkYXRvcigpOiBGaWVsZFZhbGlkYXRvcltdIHtcbiAgcmV0dXJuIFtcbiAgICByZXF1aXJlZFZhbGlkYXRvcihcIk1vbnRoIGlzIHJlcXVpcmVkXCIpLFxuICAgIG51bWVyaWNWYWxpZGF0b3Ioe1xuICAgICAgbWluOiAwLFxuICAgICAgbWF4OiAxMSxcbiAgICAgIG1pbk1zZzogXCJNb250aCBtdXN0IGJlIGJldHdlZW4gSmFuIGFuZCBEZWNcIixcbiAgICAgIG1heE1zZzogXCJNb250aCBtdXN0IGJlIGJldHdlZW4gSmFuIGFuZCBEZWNcIixcbiAgICB9KSxcbiAgXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpcnRoWWVhclZhbGlkYXRvcigpOiBGaWVsZFZhbGlkYXRvcltdIHtcbiAgY29uc3QgbWF4WWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcbiAgcmV0dXJuIFtcbiAgICByZXF1aXJlZFZhbGlkYXRvcihcIlllYXIgaXMgcmVxdWlyZWRcIiksXG4gICAgbnVtZXJpY1ZhbGlkYXRvcih7XG4gICAgICBtaW46IDE5MDAsXG4gICAgICBtYXg6IG1heFllYXIsXG4gICAgICBtaW5Nc2c6IFwiWWVhciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxOTAwXCIsXG4gICAgICBtYXhNc2c6IGBZZWFyIG11c3QgYmUgbGVzcyB0aGFuICR7bWF4WWVhcn1gLFxuICAgIH0pLFxuICBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVxdWlyZWRWYWxpZGF0b3IobXNnPzogc3RyaW5nKTogRmllbGRWYWxpZGF0b3Ige1xuICByZXR1cm4gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgbXNnID0gbXNnIHx8IFwiUmVxdWlyZWRcIjtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgJiYgIWlzTmFOKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIHJldHVybiBtc2c7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwaG9uZU51bWJlclZhbGlkYXRvcihtc2c/OiBzdHJpbmcpOiBGaWVsZFZhbGlkYXRvciB7XG4gIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cCgvXlxcKz9bXFxkLSgpIF17MTAsMTh9JC8pO1xuICByZXR1cm4gcmVnZXhWYWxpZGF0b3IocmVnZXgsIG1zZyB8fCBcIkludmFsaWQgcGhvbmUgbnVtYmVyXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1haWxWYWxpZGF0b3IobXNnPzogc3RyaW5nKTogRmllbGRWYWxpZGF0b3Ige1xuICAvLyBlbWFpbHJlZ2V4LmNvbVxuICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgL14oKFtePD4oKVtcXF1cXFxcLiw7Olxcc0BcIl0rKFxcLltePD4oKVtcXF1cXFxcLiw7Olxcc0BcIl0rKSopfChcIi4rXCIpKUAoKFxcW1swLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31dKXwoKFthLXpBLVpcXC0wLTldK1xcLikrW2EtekEtWl17Mix9KSkkLyxcbiAgKTtcbiAgcmV0dXJuIHJlZ2V4VmFsaWRhdG9yKHJlZ2V4LCBtc2cgfHwgXCJJbnZhbGlkIGVtYWlsIGFkZHJlc3NcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTSU5WYWxpZGF0b3IoKTogRmllbGRWYWxpZGF0b3Ige1xuICByZXR1cm4gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgY2hlY2tWYWx1ZSA9IFwiMTIxMTIxMTIxXCIuc3BsaXQoXCJcIikubWFwKChjKSA9PiBwYXJzZUludChjKSk7XG4gICAgY29uc3QgdmFsdWVTdHIgPSAodmFsdWUgYXMgc3RyaW5nKS5yZXBsYWNlKC9cXEQvZywgXCJcIik7XG5cbiAgICBpZiAodmFsdWVTdHIubGVuZ3RoICE9PSA5KSByZXR1cm4gXCJTSU4gbXVzdCBjb250YWluIDkgbnVtYmVyc1wiO1xuXG4gICAgY29uc3QgY2hlY2tTdW0gPSB2YWx1ZVN0clxuICAgICAgLnNwbGl0KFwiXCIpXG4gICAgICAubWFwKChjKSA9PiBwYXJzZUludChjKSlcbiAgICAgIC5tYXAoKG51bSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgdmFsID0gbnVtICogY2hlY2tWYWx1ZVtpbmRleF07XG4gICAgICAgIGlmICh2YWwgPCAxMCkge1xuICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAke3ZhbH1gXG4gICAgICAgICAgLnNwbGl0KFwiXCIpXG4gICAgICAgICAgLm1hcCgoYykgPT4gcGFyc2VJbnQoYykpXG4gICAgICAgICAgLnJlZHVjZSgoYWNjLCB2YWwpID0+IGFjYyAqIHZhbCwgMSk7XG4gICAgICB9KVxuICAgICAgLnJlZHVjZSgoYWNjLCB2YWwpID0+IGFjYyArIHZhbCwgMCk7XG5cbiAgICBpZiAoY2hlY2tTdW0gJSAxMCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiSW52YWxpZCBTSU5cIjtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvc3RhbENvZGVWYWxpZGF0b3IoKTogRmllbGRWYWxpZGF0b3Ige1xuICByZXR1cm4gcmVnZXhWYWxpZGF0b3IoXG4gICAgL15bQUJDRUdISi1OUFJTVFZYWV1cXGRbQUJDRUdISi1OUFJTVFYtWl1bIC1dP1xcZFtBQkNFR0hKLU5QUlNUVi1aXVxcZCQvaSxcbiAgICBcIkludmFsaWQgcG9zdGFsIGNvZGVcIixcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2V4VmFsaWRhdG9yKHJlZ2V4OiBSZWdFeHAsIG1zZzogc3RyaW5nKTogRmllbGRWYWxpZGF0b3Ige1xuICByZXR1cm4gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGlmICgodmFsdWUgYXMgc3RyaW5nKS5tYXRjaChyZWdleCkpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiBtc2c7XG4gIH07XG59XG5cbmludGVyZmFjZSBEYXRlVmFsaWRhdG9yT3B0aW9ucyB7XG4gIGludmFsaWRNc2c/OiBzdHJpbmc7XG4gIHN0YXJ0TXNnPzogc3RyaW5nO1xuICBlbmRNc2c/OiBzdHJpbmc7XG4gIHN0YXJ0PzogRGF0ZTtcbiAgZW5kPzogRGF0ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkYXRlVmFsaWRhdG9yKHtcbiAgaW52YWxpZE1zZyxcbiAgc3RhcnRNc2csXG4gIGVuZE1zZyxcbiAgc3RhcnQsXG4gIGVuZCxcbn06IERhdGVWYWxpZGF0b3JPcHRpb25zKTogRmllbGRWYWxpZGF0b3Ige1xuICByZXR1cm4gKGRhdGU6IHVua25vd24pID0+IHtcbiAgICBsZXQgX2RhdGU6IERhdGUgPSBuZXcgRGF0ZSgwKTtcblxuICAgIGlmICh0eXBlb2YgZGF0ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgX2RhdGUgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICB9XG4gICAgaWYgKChkYXRlIGFzIERhdGUpLnRvRGF0ZVN0cmluZykge1xuICAgICAgX2RhdGUgPSBkYXRlIGFzIERhdGU7XG4gICAgfVxuXG4gICAgaWYgKF9kYXRlLnRvU3RyaW5nKCkgPT09IFwiSW52YWxpZCBEYXRlXCIgfHwgX2RhdGUuZ2V0VGltZSgpID09PSAwKSB7XG4gICAgICByZXR1cm4gaW52YWxpZE1zZyB8fCBcIkludmFsaWQgZGF0ZVwiO1xuICAgIH1cblxuICAgIGlmIChfZGF0ZSAmJiBzdGFydCAmJiBfZGF0ZSA8IHN0YXJ0KSB7XG4gICAgICByZXR1cm4gc3RhcnRNc2cgfHwgYE11c3QgYmUgYWZ0ZXIgJHtzdGFydH1gO1xuICAgIH1cbiAgICBpZiAoX2RhdGUgJiYgZW5kICYmIF9kYXRlID4gZW5kKSB7XG4gICAgICByZXR1cm4gZW5kTXNnIHx8IGBNdXN0IGJlIGJlZm9yZSAke2VuZH1gO1xuICAgIH1cblxuICAgIHJldHVybiBcIlwiO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgTnVtZXJpY1ZhbGlkYXRvck9wdGlvbnMge1xuICBpbnZhbGlkVHlwZU1zZz86IHN0cmluZztcbiAgbWluTXNnPzogc3RyaW5nO1xuICBtYXhNc2c/OiBzdHJpbmc7XG4gIG1pbj86IG51bWJlcjtcbiAgbWF4PzogbnVtYmVyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG51bWVyaWNWYWxpZGF0b3Ioe1xuICBpbnZhbGlkVHlwZU1zZyxcbiAgbWluTXNnLFxuICBtYXhNc2csXG4gIG1pbiA9IC1OdW1iZXIuTUFYX1ZBTFVFLFxuICBtYXggPSBOdW1iZXIuTUFYX1ZBTFVFLFxufTogTnVtZXJpY1ZhbGlkYXRvck9wdGlvbnMpOiBGaWVsZFZhbGlkYXRvciB7XG4gIHJldHVybiAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBsZXQgX3ZhbHVlOiBudW1iZXIgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgX3ZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIF92YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGlmIChpc05hTihfdmFsdWUpKSB7XG4gICAgICByZXR1cm4gaW52YWxpZFR5cGVNc2cgfHwgXCJNdXN0IGJlIGEgbnVtZXJpYyB2YWx1ZVwiO1xuICAgIH1cblxuICAgIGlmIChfdmFsdWUgPiBtYXgpIHtcbiAgICAgIHJldHVybiBtYXhNc2cgfHwgYE11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICR7bWF4fWA7XG4gICAgfVxuICAgIGlmIChfdmFsdWUgPCBtaW4pIHtcbiAgICAgIHJldHVybiBtaW5Nc2cgfHwgYE11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICR7bWlufWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiXCI7XG4gIH07XG59XG5cbmludGVyZmFjZSBMZW5ndGhWYWxpZGF0b3JPcHRpb25zIHtcbiAgaW52YWxpZFR5cGVNc2c/OiBzdHJpbmc7XG4gIG1pbk1zZz86IHN0cmluZztcbiAgbWF4TXNnPzogc3RyaW5nO1xuICBtYXg/OiBudW1iZXI7XG4gIG1pbj86IG51bWJlcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBsZW5ndGhWYWxpZGF0b3Ioe1xuICBpbnZhbGlkVHlwZU1zZyxcbiAgbWluTXNnLFxuICBtYXhNc2csXG4gIG1pbiA9IC1OdW1iZXIuTUFYX1ZBTFVFLFxuICBtYXggPSBOdW1iZXIuTUFYX1ZBTFVFLFxufTogTGVuZ3RoVmFsaWRhdG9yT3B0aW9ucyk6IEZpZWxkVmFsaWRhdG9yIHtcbiAgcmV0dXJuICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBpbnZhbGlkVHlwZU1zZyB8fCBcIkludmFsaWQgdHlwZVwiO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZS5sZW5ndGggPiBtYXgpIHtcbiAgICAgIHJldHVybiBtYXhNc2cgfHwgYE11c3QgYmUgbGVzcyB0aGFuICR7bWF4fSBjaGFyYWN0ZXJzYDtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUubGVuZ3RoIDwgbWluKSB7XG4gICAgICByZXR1cm4gbWluTXNnIHx8IGBNdXN0IGJlIGdyZWF0ZXIgdGhhbiAke21pbn0gY2hhcmFjdGVyc2A7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiXCI7XG4gIH07XG59XG4iXX0=
|
|
@@ -20,9 +20,14 @@ export class ValueDirective {
|
|
|
20
20
|
registerOnTouched(fn) {
|
|
21
21
|
this.onTouched = fn;
|
|
22
22
|
}
|
|
23
|
+
setDisabledState(isDisabled) {
|
|
24
|
+
this._disabled = isDisabled;
|
|
25
|
+
this.elementRef.nativeElement.disabled = isDisabled;
|
|
26
|
+
}
|
|
23
27
|
constructor(elementRef) {
|
|
24
28
|
this.elementRef = elementRef;
|
|
25
29
|
this._value = "";
|
|
30
|
+
this._disabled = false;
|
|
26
31
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
27
32
|
this.onChange = () => { };
|
|
28
33
|
this.onTouched = () => { };
|
|
@@ -30,14 +35,17 @@ export class ValueDirective {
|
|
|
30
35
|
listenForValueChange(value) {
|
|
31
36
|
this.value = value;
|
|
32
37
|
}
|
|
33
|
-
|
|
34
|
-
|
|
38
|
+
listenForDisabledChange(isDisabled) {
|
|
39
|
+
this.setDisabledState(isDisabled);
|
|
40
|
+
}
|
|
41
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: ValueDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
42
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.5", type: ValueDirective, selector: "[goaValue]", host: { listeners: { "_change": "listenForValueChange($event.detail.value)", "disabledChange": "listenForDisabledChange($event.detail.disabled)" } }, providers: [{
|
|
35
43
|
provide: NG_VALUE_ACCESSOR,
|
|
36
44
|
useExisting: forwardRef(() => ValueDirective),
|
|
37
45
|
multi: true,
|
|
38
46
|
}], ngImport: i0 }); }
|
|
39
47
|
}
|
|
40
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
48
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: ValueDirective, decorators: [{
|
|
41
49
|
type: Directive,
|
|
42
50
|
args: [{
|
|
43
51
|
selector: "[goaValue]", providers: [{
|
|
@@ -49,6 +57,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
|
|
|
49
57
|
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { listenForValueChange: [{
|
|
50
58
|
type: HostListener,
|
|
51
59
|
args: ["_change", ["$event.detail.value"]]
|
|
60
|
+
}], listenForDisabledChange: [{
|
|
61
|
+
type: HostListener,
|
|
62
|
+
args: ["disabledChange", ["$event.detail.disabled"]]
|
|
52
63
|
}] } });
|
|
53
64
|
export class ValueListDirective {
|
|
54
65
|
get value() {
|
|
@@ -96,14 +107,14 @@ export class ValueListDirective {
|
|
|
96
107
|
this.onChange(value);
|
|
97
108
|
this.onTouched();
|
|
98
109
|
}
|
|
99
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
100
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.
|
|
110
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: ValueListDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
111
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.5", type: ValueListDirective, selector: "[goaValueList]", host: { listeners: { "_change": "listenForValueChange($event.detail.value)" } }, providers: [{
|
|
101
112
|
provide: NG_VALUE_ACCESSOR,
|
|
102
113
|
useExisting: forwardRef(() => ValueListDirective),
|
|
103
114
|
multi: true,
|
|
104
115
|
}], ngImport: i0 }); }
|
|
105
116
|
}
|
|
106
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
117
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: ValueListDirective, decorators: [{
|
|
107
118
|
type: Directive,
|
|
108
119
|
args: [{
|
|
109
120
|
selector: "[goaValueList]",
|
|
@@ -117,4 +128,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
|
|
|
117
128
|
type: HostListener,
|
|
118
129
|
args: ["_change", ["$event.detail.value"]]
|
|
119
130
|
}] } });
|
|
120
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUtZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvbXBvbmVudHMvc3JjL2xpYi92YWx1ZS1kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBU3pFLE1BQU0sT0FBTyxjQUFjO0lBUXpCLElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsR0FBVztRQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztRQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztJQUM1QyxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWE7UUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQWM7UUFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQWM7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELGdCQUFnQixDQUFDLFVBQW1CO1FBQ2xDLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDO1FBQzVCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDdEQsQ0FBQztJQUVE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QUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ25FLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEIsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsS0FBZ0I7UUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkIsQ0FBQzs4R0FyRFUsa0JBQWtCO2tHQUFsQixrQkFBa0IsMEhBTmxCLENBQUM7Z0JBQ1YsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztnQkFDakQsS0FBSyxFQUFFLElBQUk7YUFDWixDQUFDOzsyRkFFUyxrQkFBa0I7a0JBUjlCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsU0FBUyxFQUFFLENBQUM7NEJBQ1YsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLENBQUM7NEJBQ2pELEtBQUssRUFBRSxJQUFJO3lCQUNaLENBQUM7aUJBQ0g7K0VBbUNDLG9CQUFvQjtzQkFEbkIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZvcndhcmRSZWYsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6IFwiW2dvYVZhbHVlXVwiLCBwcm92aWRlcnM6IFt7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVmFsdWVEaXJlY3RpdmUpLFxuICAgIG11bHRpOiB0cnVlLFxuICB9XSxcbn0pXG5leHBvcnQgY2xhc3MgVmFsdWVEaXJlY3RpdmUgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIHByaXZhdGUgX3ZhbHVlID0gXCJcIjtcbiAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4gIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7IH07XG4gIG9uVG91Y2hlZDogYW55ID0gKCkgPT4geyB9O1xuXG4gIGdldCB2YWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsO1xuICAgIHRoaXMub25DaGFuZ2UodGhpcy5fdmFsdWUpO1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2YWw7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7IH1cblxuICBASG9zdExpc3RlbmVyKFwiX2NoYW5nZVwiLCBbXCIkZXZlbnQuZGV0YWlsLnZhbHVlXCJdKVxuICBsaXN0ZW5Gb3JWYWx1ZUNoYW5nZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG4gIEBIb3N0TGlzdGVuZXIoXCJkaXNhYmxlZENoYW5nZVwiLCBbXCIkZXZlbnQuZGV0YWlsLmRpc2FibGVkXCJdKVxuICBsaXN0ZW5Gb3JEaXNhYmxlZENoYW5nZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQpO1xuICB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogXCJbZ29hVmFsdWVMaXN0XVwiLFxuICBwcm92aWRlcnM6IFt7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVmFsdWVMaXN0RGlyZWN0aXZlKSxcbiAgICBtdWx0aTogdHJ1ZSxcbiAgfV0sXG59KVxuZXhwb3J0IGNsYXNzIFZhbHVlTGlzdERpcmVjdGl2ZSBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgcHJpdmF0ZSBfdmFsdWU/OiBzdHJpbmdbXSA9IFtdO1xuXG4gIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7IH07XG4gIG9uVG91Y2hlZDogYW55ID0gKCkgPT4geyB9O1xuXG4gIGdldCB2YWx1ZSgpOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgc2V0IHZhbHVlKHZhbDogc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsICYmIHZhbCAhPT0gdGhpcy5fdmFsdWUpIHtcbiAgICAgIHRoaXMuX3NldFZhbHVlKHZhbCk7XG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbCk7XG4gICAgfVxuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZT86IHN0cmluZ1tdKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7IH1cblxuICBASG9zdExpc3RlbmVyKFwiX2NoYW5nZVwiLCBbXCIkZXZlbnQuZGV0YWlsLnZhbHVlXCJdKVxuICBsaXN0ZW5Gb3JWYWx1ZUNoYW5nZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdGhpcy5fc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy52YWx1ZSA9IEpTT04ucGFyc2UodmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIHdlIHN0aWxsIG5lZWQgdG8gdHJpZ2dlciB0aGUgZXZlbnRzIHRvIHByZXZlbnQgYW55IHByZXZpb3VzIHZhbGlkIHZhbHVlIHRvIHJlbWFpbiBzZXQuXG4gICAgICBjb25zdCB2ID0gdmFsdWUubWF0Y2goL15bXFx3XFxzLF0qJC8pID8gdmFsdWUuc3BsaXQoXCIsXCIpIDogdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fc2V0VmFsdWUodik7XG4gICAgfVxuICB9XG5cbiAgX3NldFZhbHVlKHZhbHVlPzogc3RyaW5nW10pIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -21,9 +21,14 @@ class ValueDirective {
|
|
|
21
21
|
registerOnTouched(fn) {
|
|
22
22
|
this.onTouched = fn;
|
|
23
23
|
}
|
|
24
|
+
setDisabledState(isDisabled) {
|
|
25
|
+
this._disabled = isDisabled;
|
|
26
|
+
this.elementRef.nativeElement.disabled = isDisabled;
|
|
27
|
+
}
|
|
24
28
|
constructor(elementRef) {
|
|
25
29
|
this.elementRef = elementRef;
|
|
26
30
|
this._value = "";
|
|
31
|
+
this._disabled = false;
|
|
27
32
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
28
33
|
this.onChange = () => { };
|
|
29
34
|
this.onTouched = () => { };
|
|
@@ -31,14 +36,17 @@ class ValueDirective {
|
|
|
31
36
|
listenForValueChange(value) {
|
|
32
37
|
this.value = value;
|
|
33
38
|
}
|
|
34
|
-
|
|
35
|
-
|
|
39
|
+
listenForDisabledChange(isDisabled) {
|
|
40
|
+
this.setDisabledState(isDisabled);
|
|
41
|
+
}
|
|
42
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: ValueDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
43
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.5", type: ValueDirective, selector: "[goaValue]", host: { listeners: { "_change": "listenForValueChange($event.detail.value)", "disabledChange": "listenForDisabledChange($event.detail.disabled)" } }, providers: [{
|
|
36
44
|
provide: NG_VALUE_ACCESSOR,
|
|
37
45
|
useExisting: forwardRef(() => ValueDirective),
|
|
38
46
|
multi: true,
|
|
39
47
|
}], ngImport: i0 }); }
|
|
40
48
|
}
|
|
41
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
49
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: ValueDirective, decorators: [{
|
|
42
50
|
type: Directive,
|
|
43
51
|
args: [{
|
|
44
52
|
selector: "[goaValue]", providers: [{
|
|
@@ -50,6 +58,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
|
|
|
50
58
|
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { listenForValueChange: [{
|
|
51
59
|
type: HostListener,
|
|
52
60
|
args: ["_change", ["$event.detail.value"]]
|
|
61
|
+
}], listenForDisabledChange: [{
|
|
62
|
+
type: HostListener,
|
|
63
|
+
args: ["disabledChange", ["$event.detail.disabled"]]
|
|
53
64
|
}] } });
|
|
54
65
|
class ValueListDirective {
|
|
55
66
|
get value() {
|
|
@@ -97,14 +108,14 @@ class ValueListDirective {
|
|
|
97
108
|
this.onChange(value);
|
|
98
109
|
this.onTouched();
|
|
99
110
|
}
|
|
100
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
101
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.
|
|
111
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: ValueListDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
112
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.5", type: ValueListDirective, selector: "[goaValueList]", host: { listeners: { "_change": "listenForValueChange($event.detail.value)" } }, providers: [{
|
|
102
113
|
provide: NG_VALUE_ACCESSOR,
|
|
103
114
|
useExisting: forwardRef(() => ValueListDirective),
|
|
104
115
|
multi: true,
|
|
105
116
|
}], ngImport: i0 }); }
|
|
106
117
|
}
|
|
107
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
118
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: ValueListDirective, decorators: [{
|
|
108
119
|
type: Directive,
|
|
109
120
|
args: [{
|
|
110
121
|
selector: "[goaValueList]",
|
|
@@ -150,23 +161,23 @@ class CheckedDirective extends CheckboxControlValueAccessor {
|
|
|
150
161
|
listenForValueChange(checked) {
|
|
151
162
|
this.value = checked;
|
|
152
163
|
}
|
|
153
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
154
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.
|
|
164
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: CheckedDirective, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
165
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.5", type: CheckedDirective, selector: "[goaChecked]", host: { listeners: { "_change": "listenForValueChange($event.detail.checked)" } }, providers: [
|
|
155
166
|
{
|
|
156
|
-
provide: NG_VALUE_ACCESSOR,
|
|
157
167
|
useExisting: forwardRef(() => CheckedDirective),
|
|
168
|
+
provide: NG_VALUE_ACCESSOR,
|
|
158
169
|
multi: true,
|
|
159
170
|
},
|
|
160
171
|
], usesInheritance: true, ngImport: i0 }); }
|
|
161
172
|
}
|
|
162
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
173
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: CheckedDirective, decorators: [{
|
|
163
174
|
type: Directive,
|
|
164
175
|
args: [{
|
|
165
176
|
selector: "[goaChecked]",
|
|
166
177
|
providers: [
|
|
167
178
|
{
|
|
168
|
-
provide: NG_VALUE_ACCESSOR,
|
|
169
179
|
useExisting: forwardRef(() => CheckedDirective),
|
|
180
|
+
provide: NG_VALUE_ACCESSOR,
|
|
170
181
|
multi: true,
|
|
171
182
|
},
|
|
172
183
|
],
|
|
@@ -177,11 +188,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
|
|
|
177
188
|
}] } });
|
|
178
189
|
|
|
179
190
|
class AngularComponentsModule {
|
|
180
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
181
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.
|
|
182
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.
|
|
191
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: AngularComponentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
192
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.1.5", ngImport: i0, type: AngularComponentsModule, declarations: [ValueDirective, ValueListDirective, CheckedDirective], exports: [ValueDirective, ValueListDirective, CheckedDirective] }); }
|
|
193
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: AngularComponentsModule }); }
|
|
183
194
|
}
|
|
184
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
195
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: AngularComponentsModule, decorators: [{
|
|
185
196
|
type: NgModule,
|
|
186
197
|
args: [{
|
|
187
198
|
declarations: [ValueDirective, ValueListDirective, CheckedDirective],
|
|
@@ -190,9 +201,248 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
|
|
|
190
201
|
}]
|
|
191
202
|
}] });
|
|
192
203
|
|
|
204
|
+
// TODO: move this into the form-utils file, since it is specific to the public form component
|
|
205
|
+
function validate(field, fieldsetEl, fieldsetState, validators) {
|
|
206
|
+
const value = fieldsetState?.[field]?.value;
|
|
207
|
+
for (const validator of validators) {
|
|
208
|
+
const msg = validator(value);
|
|
209
|
+
if (msg) {
|
|
210
|
+
dispatchError(fieldsetEl, field, msg);
|
|
211
|
+
return [false, ""];
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return [true, value];
|
|
215
|
+
}
|
|
216
|
+
// TODO: move this into the form-utils file, since it is specific to the public form component
|
|
217
|
+
function dispatchError(el, name, msg) {
|
|
218
|
+
el.dispatchEvent(new CustomEvent("msg", {
|
|
219
|
+
composed: true,
|
|
220
|
+
detail: {
|
|
221
|
+
action: "external::set:error",
|
|
222
|
+
data: {
|
|
223
|
+
name,
|
|
224
|
+
msg,
|
|
225
|
+
},
|
|
226
|
+
},
|
|
227
|
+
}));
|
|
228
|
+
}
|
|
229
|
+
class FormValidator {
|
|
230
|
+
constructor(validators) {
|
|
231
|
+
this.validators = validators || {};
|
|
232
|
+
}
|
|
233
|
+
add(fieldName, ...validators) {
|
|
234
|
+
this.validators[fieldName] = validators;
|
|
235
|
+
}
|
|
236
|
+
validate(data) {
|
|
237
|
+
const errors = {};
|
|
238
|
+
Object.entries(this.validators).forEach(([name, validators]) => {
|
|
239
|
+
const err = validators
|
|
240
|
+
.map((validatorFn) => {
|
|
241
|
+
const errMsg = validatorFn(data[name]);
|
|
242
|
+
return errMsg;
|
|
243
|
+
})
|
|
244
|
+
.find((msg) => !!msg);
|
|
245
|
+
if (err) {
|
|
246
|
+
errors[name] = err;
|
|
247
|
+
}
|
|
248
|
+
});
|
|
249
|
+
return errors;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
// **********
|
|
253
|
+
// Validators
|
|
254
|
+
// **********
|
|
255
|
+
function birthDayValidator() {
|
|
256
|
+
return [
|
|
257
|
+
requiredValidator("Day is required"),
|
|
258
|
+
numericValidator({
|
|
259
|
+
min: 1,
|
|
260
|
+
max: 31,
|
|
261
|
+
minMsg: "Day must be between 1 and 31",
|
|
262
|
+
maxMsg: "Day must be between 1 and 31",
|
|
263
|
+
}),
|
|
264
|
+
];
|
|
265
|
+
}
|
|
266
|
+
function birthMonthValidator() {
|
|
267
|
+
return [
|
|
268
|
+
requiredValidator("Month is required"),
|
|
269
|
+
numericValidator({
|
|
270
|
+
min: 0,
|
|
271
|
+
max: 11,
|
|
272
|
+
minMsg: "Month must be between Jan and Dec",
|
|
273
|
+
maxMsg: "Month must be between Jan and Dec",
|
|
274
|
+
}),
|
|
275
|
+
];
|
|
276
|
+
}
|
|
277
|
+
function birthYearValidator() {
|
|
278
|
+
const maxYear = new Date().getFullYear();
|
|
279
|
+
return [
|
|
280
|
+
requiredValidator("Year is required"),
|
|
281
|
+
numericValidator({
|
|
282
|
+
min: 1900,
|
|
283
|
+
max: maxYear,
|
|
284
|
+
minMsg: "Year must be greater than 1900",
|
|
285
|
+
maxMsg: `Year must be less than ${maxYear}`,
|
|
286
|
+
}),
|
|
287
|
+
];
|
|
288
|
+
}
|
|
289
|
+
function requiredValidator(msg) {
|
|
290
|
+
return (value) => {
|
|
291
|
+
msg = msg || "Required";
|
|
292
|
+
if (typeof value === "number" && !isNaN(value)) {
|
|
293
|
+
return "";
|
|
294
|
+
}
|
|
295
|
+
if (value) {
|
|
296
|
+
return "";
|
|
297
|
+
}
|
|
298
|
+
return msg;
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
function phoneNumberValidator(msg) {
|
|
302
|
+
const regex = new RegExp(/^\+?[\d-() ]{10,18}$/);
|
|
303
|
+
return regexValidator(regex, msg || "Invalid phone number");
|
|
304
|
+
}
|
|
305
|
+
function emailValidator(msg) {
|
|
306
|
+
// emailregex.com
|
|
307
|
+
const regex = new RegExp(/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/);
|
|
308
|
+
return regexValidator(regex, msg || "Invalid email address");
|
|
309
|
+
}
|
|
310
|
+
function SINValidator() {
|
|
311
|
+
return (value) => {
|
|
312
|
+
if (!value)
|
|
313
|
+
return "";
|
|
314
|
+
const checkValue = "121121121".split("").map((c) => parseInt(c));
|
|
315
|
+
const valueStr = value.replace(/\D/g, "");
|
|
316
|
+
if (valueStr.length !== 9)
|
|
317
|
+
return "SIN must contain 9 numbers";
|
|
318
|
+
const checkSum = valueStr
|
|
319
|
+
.split("")
|
|
320
|
+
.map((c) => parseInt(c))
|
|
321
|
+
.map((num, index) => {
|
|
322
|
+
const val = num * checkValue[index];
|
|
323
|
+
if (val < 10) {
|
|
324
|
+
return val;
|
|
325
|
+
}
|
|
326
|
+
return `${val}`
|
|
327
|
+
.split("")
|
|
328
|
+
.map((c) => parseInt(c))
|
|
329
|
+
.reduce((acc, val) => acc * val, 1);
|
|
330
|
+
})
|
|
331
|
+
.reduce((acc, val) => acc + val, 0);
|
|
332
|
+
if (checkSum % 10 === 0) {
|
|
333
|
+
return "";
|
|
334
|
+
}
|
|
335
|
+
return "Invalid SIN";
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
function postalCodeValidator() {
|
|
339
|
+
return regexValidator(/^[ABCEGHJ-NPRSTVXY]\d[ABCEGHJ-NPRSTV-Z][ -]?\d[ABCEGHJ-NPRSTV-Z]\d$/i, "Invalid postal code");
|
|
340
|
+
}
|
|
341
|
+
function regexValidator(regex, msg) {
|
|
342
|
+
return (value) => {
|
|
343
|
+
if (!value) {
|
|
344
|
+
return "";
|
|
345
|
+
}
|
|
346
|
+
if (value.match(regex)) {
|
|
347
|
+
return "";
|
|
348
|
+
}
|
|
349
|
+
return msg;
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
function dateValidator({ invalidMsg, startMsg, endMsg, start, end, }) {
|
|
353
|
+
return (date) => {
|
|
354
|
+
let _date = new Date(0);
|
|
355
|
+
if (typeof date === "string") {
|
|
356
|
+
_date = new Date(date);
|
|
357
|
+
}
|
|
358
|
+
if (date.toDateString) {
|
|
359
|
+
_date = date;
|
|
360
|
+
}
|
|
361
|
+
if (_date.toString() === "Invalid Date" || _date.getTime() === 0) {
|
|
362
|
+
return invalidMsg || "Invalid date";
|
|
363
|
+
}
|
|
364
|
+
if (_date && start && _date < start) {
|
|
365
|
+
return startMsg || `Must be after ${start}`;
|
|
366
|
+
}
|
|
367
|
+
if (_date && end && _date > end) {
|
|
368
|
+
return endMsg || `Must be before ${end}`;
|
|
369
|
+
}
|
|
370
|
+
return "";
|
|
371
|
+
};
|
|
372
|
+
}
|
|
373
|
+
function numericValidator({ invalidTypeMsg, minMsg, maxMsg, min = -Number.MAX_VALUE, max = Number.MAX_VALUE, }) {
|
|
374
|
+
return (value) => {
|
|
375
|
+
let _value = Number.MAX_VALUE;
|
|
376
|
+
if (typeof value === "string") {
|
|
377
|
+
_value = parseFloat(value);
|
|
378
|
+
}
|
|
379
|
+
if (typeof value === "number") {
|
|
380
|
+
_value = value;
|
|
381
|
+
}
|
|
382
|
+
if (isNaN(_value)) {
|
|
383
|
+
return invalidTypeMsg || "Must be a numeric value";
|
|
384
|
+
}
|
|
385
|
+
if (_value > max) {
|
|
386
|
+
return maxMsg || `Must be less than or equal to ${max}`;
|
|
387
|
+
}
|
|
388
|
+
if (_value < min) {
|
|
389
|
+
return minMsg || `Must be greater than or equal to ${min}`;
|
|
390
|
+
}
|
|
391
|
+
return "";
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
function lengthValidator({ invalidTypeMsg, minMsg, maxMsg, min = -Number.MAX_VALUE, max = Number.MAX_VALUE, }) {
|
|
395
|
+
return (value) => {
|
|
396
|
+
if (typeof value !== "string") {
|
|
397
|
+
return invalidTypeMsg || "Invalid type";
|
|
398
|
+
}
|
|
399
|
+
if (value.length > max) {
|
|
400
|
+
return maxMsg || `Must be less than ${max} characters`;
|
|
401
|
+
}
|
|
402
|
+
if (value.length < min) {
|
|
403
|
+
return minMsg || `Must be greater than ${min} characters`;
|
|
404
|
+
}
|
|
405
|
+
return "";
|
|
406
|
+
};
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
function dispatch(el, eventName, detail, opts) {
|
|
410
|
+
if (!el) {
|
|
411
|
+
console.error("dispatch element is null");
|
|
412
|
+
return;
|
|
413
|
+
}
|
|
414
|
+
el.dispatchEvent(new CustomEvent(eventName, {
|
|
415
|
+
composed: true,
|
|
416
|
+
bubbles: opts?.bubbles,
|
|
417
|
+
detail: detail,
|
|
418
|
+
}));
|
|
419
|
+
}
|
|
420
|
+
function relay(el, eventName, data, opts) {
|
|
421
|
+
if (!el) {
|
|
422
|
+
console.error("dispatch element is null");
|
|
423
|
+
return;
|
|
424
|
+
}
|
|
425
|
+
// console.log(`RELAY(${eventName}):`, data, el);
|
|
426
|
+
el.dispatchEvent(new CustomEvent("msg", {
|
|
427
|
+
composed: true,
|
|
428
|
+
bubbles: opts?.bubbles,
|
|
429
|
+
detail: {
|
|
430
|
+
action: eventName,
|
|
431
|
+
data,
|
|
432
|
+
},
|
|
433
|
+
}));
|
|
434
|
+
}
|
|
435
|
+
// TODO: Logic similar to this needs to be done on the React side as well i.e. an initial onMount
|
|
436
|
+
// event that passes a ref to the form,
|
|
437
|
+
function continueTo(el, name) {
|
|
438
|
+
relay(el, "external::continue", {
|
|
439
|
+
next: name,
|
|
440
|
+
});
|
|
441
|
+
}
|
|
442
|
+
|
|
193
443
|
/**
|
|
194
444
|
* Generated bundle index. Do not edit.
|
|
195
445
|
*/
|
|
196
446
|
|
|
197
|
-
export { AngularComponentsModule, CheckedDirective, ValueDirective, ValueListDirective };
|
|
447
|
+
export { AngularComponentsModule, CheckedDirective, FormValidator, SINValidator, ValueDirective, ValueListDirective, birthDayValidator, birthMonthValidator, birthYearValidator, continueTo, dateValidator, dispatch, emailValidator, lengthValidator, numericValidator, phoneNumberValidator, postalCodeValidator, regexValidator, relay, requiredValidator, validate };
|
|
198
448
|
//# sourceMappingURL=abgov-angular-components.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abgov-angular-components.mjs","sources":["../../../../libs/angular-components/src/lib/value-directive.ts","../../../../libs/angular-components/src/lib/checked-directive.ts","../../../../libs/angular-components/src/lib/angular-components.module.ts","../../../../libs/angular-components/src/abgov-angular-components.ts"],"sourcesContent":["import { forwardRef, Directive, ElementRef, HostListener } from \"@angular/core\";\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\n\n@Directive({\n selector: \"[goaValue]\", providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ValueDirective),\n multi: true,\n }],\n})\nexport class ValueDirective implements ControlValueAccessor {\n private _value = \"\";\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n onChange: any = () => { };\n onTouched: any = () => { };\n\n get value(): string {\n return this._value;\n }\n\n set value(val: string) {\n this._value = val;\n this.onChange(this._value);\n this.onTouched();\n this.elementRef.nativeElement.value = val;\n }\n\n writeValue(value: string) {\n this.value = value;\n }\n\n registerOnChange(fn: () => void) {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void) {\n this.onTouched = fn;\n }\n\n constructor(protected elementRef: ElementRef) { }\n\n @HostListener(\"_change\", [\"$event.detail.value\"])\n listenForValueChange(value: string) {\n this.value = value;\n }\n}\n\n@Directive({\n selector: \"[goaValueList]\",\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ValueListDirective),\n multi: true,\n }],\n})\nexport class ValueListDirective implements ControlValueAccessor {\n private _value?: string[] = [];\n\n onChange: any = () => { };\n onTouched: any = () => { };\n\n get value(): string[] | undefined {\n return this._value;\n }\n\n set value(val: string[] | undefined) {\n if (val && val !== this._value) {\n this._setValue(val);\n this.elementRef.nativeElement.value = JSON.stringify(val);\n }\n }\n\n writeValue(value?: string[]) {\n if (value) {\n this.value = value;\n }\n }\n\n registerOnChange(fn: () => void) {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void) {\n this.onTouched = fn;\n }\n\n constructor(protected elementRef: ElementRef) { }\n\n @HostListener(\"_change\", [\"$event.detail.value\"])\n listenForValueChange(value: string) {\n if (!value) {\n this._setValue(undefined);\n return;\n }\n\n try {\n this.value = JSON.parse(value);\n } catch (e) {\n // we still need to trigger the events to prevent any previous valid value to remain set.\n const v = value.match(/^[\\w\\s,]*$/) ? value.split(\",\") : undefined;\n this._setValue(v);\n }\n }\n\n _setValue(value?: string[]) {\n this._value = value;\n this.onChange(value);\n this.onTouched();\n }\n}\n","import {\n forwardRef,\n Directive,\n ElementRef,\n HostListener,\n Renderer2,\n} from \"@angular/core\";\nimport {\n CheckboxControlValueAccessor,\n NG_VALUE_ACCESSOR,\n} from \"@angular/forms\";\n\n@Directive({\n selector: \"[goaChecked]\",\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CheckedDirective),\n multi: true,\n },\n ],\n})\n\nexport class CheckedDirective extends CheckboxControlValueAccessor {\n private _checked = false;\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n override onChange: any = () => { };\n override onTouched: any = () => { };\n\n constructor(protected renderer: Renderer2, protected elementRef: ElementRef) {\n super(renderer, elementRef);\n }\n\n get value(): string {\n return this._checked ? \"checked\" : \"\";\n }\n\n set value(checked: any) {\n this._checked = !!checked;\n this.onChange(this._checked);\n this.onTouched();\n this.elementRef.nativeElement.checked = checked;\n }\n\n override writeValue(checked: any) {\n this.value = checked;\n }\n\n override registerOnChange(fn: (_: any) => void) {\n this.onChange = fn;\n }\n\n override registerOnTouched(fn: () => void) {\n this.onTouched = fn;\n }\n\n @HostListener(\"_change\", [\"$event.detail.checked\"])\n listenForValueChange(checked: any) {\n this.value = checked;\n }\n}\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from \"@angular/core\";\nimport { ValueDirective, ValueListDirective } from \"./value-directive\";\nimport { CheckedDirective } from \"./checked-directive\";\n\n@NgModule({\n declarations: [ValueDirective, ValueListDirective, CheckedDirective],\n exports: [ValueDirective, ValueListDirective, CheckedDirective],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class AngularComponentsModule {}\n\nexport { ValueDirective, ValueListDirective, CheckedDirective };\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"abgov-angular-components.mjs","sources":["../../../../libs/angular-components/src/lib/value-directive.ts","../../../../libs/angular-components/src/lib/checked-directive.ts","../../../../libs/angular-components/src/lib/angular-components.module.ts","../../../../libs/angular-components/src/lib/validation.ts","../../../../libs/angular-components/src/lib/public-form-utils.ts","../../../../libs/angular-components/src/abgov-angular-components.ts"],"sourcesContent":["import { forwardRef, Directive, ElementRef, HostListener } from \"@angular/core\";\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\n\n@Directive({\n selector: \"[goaValue]\", providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ValueDirective),\n multi: true,\n }],\n})\nexport class ValueDirective implements ControlValueAccessor {\n private _value = \"\";\n private _disabled = false;\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n onChange: any = () => { };\n onTouched: any = () => { };\n\n get value(): string {\n return this._value;\n }\n\n set value(val: string) {\n this._value = val;\n this.onChange(this._value);\n this.onTouched();\n this.elementRef.nativeElement.value = val;\n }\n\n writeValue(value: string) {\n this.value = value;\n }\n\n registerOnChange(fn: () => void) {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void) {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._disabled = isDisabled;\n this.elementRef.nativeElement.disabled = isDisabled;\n }\n\n constructor(protected elementRef: ElementRef) { }\n\n @HostListener(\"_change\", [\"$event.detail.value\"])\n listenForValueChange(value: string) {\n this.value = value;\n }\n @HostListener(\"disabledChange\", [\"$event.detail.disabled\"])\n listenForDisabledChange(isDisabled: boolean) {\n this.setDisabledState(isDisabled);\n }\n}\n\n@Directive({\n selector: \"[goaValueList]\",\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ValueListDirective),\n multi: true,\n }],\n})\nexport class ValueListDirective implements ControlValueAccessor {\n private _value?: string[] = [];\n\n onChange: any = () => { };\n onTouched: any = () => { };\n\n get value(): string[] | undefined {\n return this._value;\n }\n\n set value(val: string[] | undefined) {\n if (val && val !== this._value) {\n this._setValue(val);\n this.elementRef.nativeElement.value = JSON.stringify(val);\n }\n }\n\n writeValue(value?: string[]) {\n if (value) {\n this.value = value;\n }\n }\n\n registerOnChange(fn: () => void) {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void) {\n this.onTouched = fn;\n }\n\n constructor(protected elementRef: ElementRef) { }\n\n @HostListener(\"_change\", [\"$event.detail.value\"])\n listenForValueChange(value: string) {\n if (!value) {\n this._setValue(undefined);\n return;\n }\n\n try {\n this.value = JSON.parse(value);\n } catch (e) {\n // we still need to trigger the events to prevent any previous valid value to remain set.\n const v = value.match(/^[\\w\\s,]*$/) ? value.split(\",\") : undefined;\n this._setValue(v);\n }\n }\n\n _setValue(value?: string[]) {\n this._value = value;\n this.onChange(value);\n this.onTouched();\n }\n}\n","import {\n forwardRef,\n Directive,\n ElementRef,\n HostListener,\n Renderer2,\n} from \"@angular/core\";\nimport {\n CheckboxControlValueAccessor,\n NG_VALUE_ACCESSOR,\n} from \"@angular/forms\";\n\n@Directive({\n selector: \"[goaChecked]\",\n providers: [\n {\n useExisting: forwardRef(() => CheckedDirective),\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n },\n ],\n})\n\nexport class CheckedDirective extends CheckboxControlValueAccessor {\n private _checked = false;\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n override onChange: any = () => { };\n override onTouched: any = () => { };\n\n constructor(protected renderer: Renderer2, protected elementRef: ElementRef) {\n super(renderer, elementRef);\n }\n\n get value(): string {\n return this._checked ? \"checked\" : \"\";\n }\n\n set value(checked: any) {\n this._checked = !!checked;\n this.onChange(this._checked);\n this.onTouched();\n this.elementRef.nativeElement.checked = checked;\n }\n\n override writeValue(checked: any) {\n this.value = checked;\n }\n\n override registerOnChange(fn: (_: any) => void) {\n this.onChange = fn;\n }\n\n override registerOnTouched(fn: () => void) {\n this.onTouched = fn;\n }\n\n @HostListener(\"_change\", [\"$event.detail.checked\"])\n listenForValueChange(checked: any) {\n this.value = checked;\n }\n}\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from \"@angular/core\";\nimport { ValueDirective, ValueListDirective } from \"./value-directive\";\nimport { CheckedDirective } from \"./checked-directive\";\n\n@NgModule({\n declarations: [ValueDirective, ValueListDirective, CheckedDirective],\n exports: [ValueDirective, ValueListDirective, CheckedDirective],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class AngularComponentsModule {}\n\nexport { ValueDirective, ValueListDirective, CheckedDirective };\n","import { FieldsetItemState } from \"./public-form-utils\";\n\nexport type FieldValidator = (value: unknown) => string;\nexport type FieldsetState = Record<string, FieldsetItemState>;\n\n// TODO: move this into the form-utils file, since it is specific to the public form component\nexport function validate(\n field: string,\n fieldsetEl: HTMLElement,\n fieldsetState: FieldsetState,\n validators: FieldValidator[],\n): [boolean, string] {\n const value = fieldsetState?.[field]?.value;\n\n for (const validator of validators) {\n const msg = validator(value);\n if (msg) {\n dispatchError(fieldsetEl, field, msg);\n return [false, \"\"];\n }\n }\n return [true, value];\n}\n\n// TODO: move this into the form-utils file, since it is specific to the public form component\nfunction dispatchError(el: HTMLElement, name: string, msg: string) {\n el.dispatchEvent(\n new CustomEvent(\"msg\", {\n composed: true,\n detail: {\n action: \"external::set:error\",\n data: {\n name,\n msg,\n },\n },\n }),\n );\n}\n\nexport class FormValidator {\n private validators: Record<string, FieldValidator[]>;\n constructor(validators?: Record<string, FieldValidator[]>) {\n this.validators = validators || {};\n }\n\n add(fieldName: string, ...validators: FieldValidator[]) {\n this.validators[fieldName] = validators;\n }\n\n validate(data: Record<string, string>): Record<string, string> {\n const errors: Record<string, string> = {};\n\n Object.entries(this.validators).forEach(([name, validators]) => {\n const err = validators\n .map((validatorFn) => {\n const errMsg = validatorFn(data[name]);\n return errMsg;\n })\n .find((msg) => !!msg);\n if (err) {\n errors[name] = err;\n }\n });\n\n return errors;\n }\n}\n\n// **********\n// Validators\n// **********\n\nexport function birthDayValidator(): FieldValidator[] {\n return [\n requiredValidator(\"Day is required\"),\n numericValidator({\n min: 1,\n max: 31,\n minMsg: \"Day must be between 1 and 31\",\n maxMsg: \"Day must be between 1 and 31\",\n }),\n ];\n}\n\nexport function birthMonthValidator(): FieldValidator[] {\n return [\n requiredValidator(\"Month is required\"),\n numericValidator({\n min: 0,\n max: 11,\n minMsg: \"Month must be between Jan and Dec\",\n maxMsg: \"Month must be between Jan and Dec\",\n }),\n ];\n}\n\nexport function birthYearValidator(): FieldValidator[] {\n const maxYear = new Date().getFullYear();\n return [\n requiredValidator(\"Year is required\"),\n numericValidator({\n min: 1900,\n max: maxYear,\n minMsg: \"Year must be greater than 1900\",\n maxMsg: `Year must be less than ${maxYear}`,\n }),\n ];\n}\n\nexport function requiredValidator(msg?: string): FieldValidator {\n return (value: unknown) => {\n msg = msg || \"Required\";\n\n if (typeof value === \"number\" && !isNaN(value)) {\n return \"\";\n }\n if (value) {\n return \"\";\n }\n return msg;\n };\n}\n\nexport function phoneNumberValidator(msg?: string): FieldValidator {\n const regex = new RegExp(/^\\+?[\\d-() ]{10,18}$/);\n return regexValidator(regex, msg || \"Invalid phone number\");\n}\n\nexport function emailValidator(msg?: string): FieldValidator {\n // emailregex.com\n const regex = new RegExp(\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\n );\n return regexValidator(regex, msg || \"Invalid email address\");\n}\n\nexport function SINValidator(): FieldValidator {\n return (value: unknown) => {\n if (!value) return \"\";\n const checkValue = \"121121121\".split(\"\").map((c) => parseInt(c));\n const valueStr = (value as string).replace(/\\D/g, \"\");\n\n if (valueStr.length !== 9) return \"SIN must contain 9 numbers\";\n\n const checkSum = valueStr\n .split(\"\")\n .map((c) => parseInt(c))\n .map((num, index) => {\n const val = num * checkValue[index];\n if (val < 10) {\n return val;\n }\n return `${val}`\n .split(\"\")\n .map((c) => parseInt(c))\n .reduce((acc, val) => acc * val, 1);\n })\n .reduce((acc, val) => acc + val, 0);\n\n if (checkSum % 10 === 0) {\n return \"\";\n }\n\n return \"Invalid SIN\";\n };\n}\n\nexport function postalCodeValidator(): FieldValidator {\n return regexValidator(\n /^[ABCEGHJ-NPRSTVXY]\\d[ABCEGHJ-NPRSTV-Z][ -]?\\d[ABCEGHJ-NPRSTV-Z]\\d$/i,\n \"Invalid postal code\",\n );\n}\n\nexport function regexValidator(regex: RegExp, msg: string): FieldValidator {\n return (value: unknown) => {\n if (!value) {\n return \"\";\n }\n if ((value as string).match(regex)) {\n return \"\";\n }\n\n return msg;\n };\n}\n\ninterface DateValidatorOptions {\n invalidMsg?: string;\n startMsg?: string;\n endMsg?: string;\n start?: Date;\n end?: Date;\n}\nexport function dateValidator({\n invalidMsg,\n startMsg,\n endMsg,\n start,\n end,\n}: DateValidatorOptions): FieldValidator {\n return (date: unknown) => {\n let _date: Date = new Date(0);\n\n if (typeof date === \"string\") {\n _date = new Date(date);\n }\n if ((date as Date).toDateString) {\n _date = date as Date;\n }\n\n if (_date.toString() === \"Invalid Date\" || _date.getTime() === 0) {\n return invalidMsg || \"Invalid date\";\n }\n\n if (_date && start && _date < start) {\n return startMsg || `Must be after ${start}`;\n }\n if (_date && end && _date > end) {\n return endMsg || `Must be before ${end}`;\n }\n\n return \"\";\n };\n}\n\ninterface NumericValidatorOptions {\n invalidTypeMsg?: string;\n minMsg?: string;\n maxMsg?: string;\n min?: number;\n max?: number;\n}\nexport function numericValidator({\n invalidTypeMsg,\n minMsg,\n maxMsg,\n min = -Number.MAX_VALUE,\n max = Number.MAX_VALUE,\n}: NumericValidatorOptions): FieldValidator {\n return (value: unknown) => {\n let _value: number = Number.MAX_VALUE;\n\n if (typeof value === \"string\") {\n _value = parseFloat(value);\n }\n if (typeof value === \"number\") {\n _value = value;\n }\n\n if (isNaN(_value)) {\n return invalidTypeMsg || \"Must be a numeric value\";\n }\n\n if (_value > max) {\n return maxMsg || `Must be less than or equal to ${max}`;\n }\n if (_value < min) {\n return minMsg || `Must be greater than or equal to ${min}`;\n }\n\n return \"\";\n };\n}\n\ninterface LengthValidatorOptions {\n invalidTypeMsg?: string;\n minMsg?: string;\n maxMsg?: string;\n max?: number;\n min?: number;\n}\nexport function lengthValidator({\n invalidTypeMsg,\n minMsg,\n maxMsg,\n min = -Number.MAX_VALUE,\n max = Number.MAX_VALUE,\n}: LengthValidatorOptions): FieldValidator {\n return (value: unknown) => {\n if (typeof value !== \"string\") {\n return invalidTypeMsg || \"Invalid type\";\n }\n\n if (value.length > max) {\n return maxMsg || `Must be less than ${max} characters`;\n }\n\n if (value.length < min) {\n return minMsg || `Must be greater than ${min} characters`;\n }\n\n return \"\";\n };\n}\n","export type AppState = {\n form: Record<string, Record<string, FieldsetItemState>[]>;\n history: string[];\n editting: string;\n lastModified?: Date;\n};\n\nexport type FieldsetItemState = {\n name: string;\n label: string;\n // value: string | number | Date;\n value: string;\n};\n\nexport function dispatch<T>(\n el: HTMLElement | Element | null | undefined,\n eventName: string,\n detail?: T,\n opts?: { bubbles?: boolean },\n) {\n if (!el) {\n console.error(\"dispatch element is null\");\n return;\n }\n el.dispatchEvent(\n new CustomEvent<T>(eventName, {\n composed: true,\n bubbles: opts?.bubbles,\n detail: detail,\n }),\n );\n}\n\nexport function relay<T>(\n el: HTMLElement | Element | null | undefined,\n eventName: string,\n data?: T,\n opts?: { bubbles?: boolean },\n) {\n if (!el) {\n console.error(\"dispatch element is null\");\n return;\n }\n // console.log(`RELAY(${eventName}):`, data, el);\n el.dispatchEvent(\n new CustomEvent<{ action: string; data?: T }>(\"msg\", {\n composed: true,\n bubbles: opts?.bubbles,\n detail: {\n action: eventName,\n data,\n },\n }),\n );\n}\n\n// TODO: Logic similar to this needs to be done on the React side as well i.e. an initial onMount\n// event that passes a ref to the form,\nexport function continueTo(el: HTMLElement, name: string) {\n relay<{ next: string }>(el, \"external::continue\", {\n next: name,\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type AppState = {
|
|
2
|
+
form: Record<string, Record<string, FieldsetItemState>[]>;
|
|
3
|
+
history: string[];
|
|
4
|
+
editting: string;
|
|
5
|
+
lastModified?: Date;
|
|
6
|
+
};
|
|
7
|
+
export type FieldsetItemState = {
|
|
8
|
+
name: string;
|
|
9
|
+
label: string;
|
|
10
|
+
value: string;
|
|
11
|
+
};
|
|
12
|
+
export declare function dispatch<T>(el: HTMLElement | Element | null | undefined, eventName: string, detail?: T, opts?: {
|
|
13
|
+
bubbles?: boolean;
|
|
14
|
+
}): void;
|
|
15
|
+
export declare function relay<T>(el: HTMLElement | Element | null | undefined, eventName: string, data?: T, opts?: {
|
|
16
|
+
bubbles?: boolean;
|
|
17
|
+
}): void;
|
|
18
|
+
export declare function continueTo(el: HTMLElement, name: string): void;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { FieldsetItemState } from "./public-form-utils";
|
|
2
|
+
export type FieldValidator = (value: unknown) => string;
|
|
3
|
+
export type FieldsetState = Record<string, FieldsetItemState>;
|
|
4
|
+
export declare function validate(field: string, fieldsetEl: HTMLElement, fieldsetState: FieldsetState, validators: FieldValidator[]): [boolean, string];
|
|
5
|
+
export declare class FormValidator {
|
|
6
|
+
private validators;
|
|
7
|
+
constructor(validators?: Record<string, FieldValidator[]>);
|
|
8
|
+
add(fieldName: string, ...validators: FieldValidator[]): void;
|
|
9
|
+
validate(data: Record<string, string>): Record<string, string>;
|
|
10
|
+
}
|
|
11
|
+
export declare function birthDayValidator(): FieldValidator[];
|
|
12
|
+
export declare function birthMonthValidator(): FieldValidator[];
|
|
13
|
+
export declare function birthYearValidator(): FieldValidator[];
|
|
14
|
+
export declare function requiredValidator(msg?: string): FieldValidator;
|
|
15
|
+
export declare function phoneNumberValidator(msg?: string): FieldValidator;
|
|
16
|
+
export declare function emailValidator(msg?: string): FieldValidator;
|
|
17
|
+
export declare function SINValidator(): FieldValidator;
|
|
18
|
+
export declare function postalCodeValidator(): FieldValidator;
|
|
19
|
+
export declare function regexValidator(regex: RegExp, msg: string): FieldValidator;
|
|
20
|
+
interface DateValidatorOptions {
|
|
21
|
+
invalidMsg?: string;
|
|
22
|
+
startMsg?: string;
|
|
23
|
+
endMsg?: string;
|
|
24
|
+
start?: Date;
|
|
25
|
+
end?: Date;
|
|
26
|
+
}
|
|
27
|
+
export declare function dateValidator({ invalidMsg, startMsg, endMsg, start, end, }: DateValidatorOptions): FieldValidator;
|
|
28
|
+
interface NumericValidatorOptions {
|
|
29
|
+
invalidTypeMsg?: string;
|
|
30
|
+
minMsg?: string;
|
|
31
|
+
maxMsg?: string;
|
|
32
|
+
min?: number;
|
|
33
|
+
max?: number;
|
|
34
|
+
}
|
|
35
|
+
export declare function numericValidator({ invalidTypeMsg, minMsg, maxMsg, min, max, }: NumericValidatorOptions): FieldValidator;
|
|
36
|
+
interface LengthValidatorOptions {
|
|
37
|
+
invalidTypeMsg?: string;
|
|
38
|
+
minMsg?: string;
|
|
39
|
+
maxMsg?: string;
|
|
40
|
+
max?: number;
|
|
41
|
+
min?: number;
|
|
42
|
+
}
|
|
43
|
+
export declare function lengthValidator({ invalidTypeMsg, minMsg, maxMsg, min, max, }: LengthValidatorOptions): FieldValidator;
|
|
44
|
+
export {};
|
package/lib/value-directive.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import * as i0 from "@angular/core";
|
|
|
4
4
|
export declare class ValueDirective implements ControlValueAccessor {
|
|
5
5
|
protected elementRef: ElementRef;
|
|
6
6
|
private _value;
|
|
7
|
+
private _disabled;
|
|
7
8
|
onChange: any;
|
|
8
9
|
onTouched: any;
|
|
9
10
|
get value(): string;
|
|
@@ -11,8 +12,10 @@ export declare class ValueDirective implements ControlValueAccessor {
|
|
|
11
12
|
writeValue(value: string): void;
|
|
12
13
|
registerOnChange(fn: () => void): void;
|
|
13
14
|
registerOnTouched(fn: () => void): void;
|
|
15
|
+
setDisabledState(isDisabled: boolean): void;
|
|
14
16
|
constructor(elementRef: ElementRef);
|
|
15
17
|
listenForValueChange(value: string): void;
|
|
18
|
+
listenForDisabledChange(isDisabled: boolean): void;
|
|
16
19
|
static ɵfac: i0.ɵɵFactoryDeclaration<ValueDirective, never>;
|
|
17
20
|
static ɵdir: i0.ɵɵDirectiveDeclaration<ValueDirective, "[goaValue]", never, {}, {}, never, never, false, never>;
|
|
18
21
|
}
|