@wemake4u/form-player-se 1.0.36 → 1.0.37
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/README.md +17 -0
- package/THIRD_PARTY_LICENSES.txt +73 -0
- package/esm2022/lib/directives/date.directive.mjs +3 -3
- package/esm2022/lib/directives/datetime.directive.mjs +199 -0
- package/esm2022/lib/dynamic-fields/dynamic-fields.component.mjs +5 -3
- package/esm2022/lib/dynamic-host/dynamic-host.component.mjs +14 -3
- package/esm2022/lib/utils/date.mjs +59 -0
- package/fesm2022/wemake4u-form-player-se.mjs +267 -6
- package/fesm2022/wemake4u-form-player-se.mjs.map +1 -1
- package/lib/directives/date.directive.d.ts +2 -0
- package/lib/directives/datetime.directive.d.ts +42 -0
- package/lib/dynamic-host/dynamic-host.component.d.ts +1 -0
- package/lib/utils/date.d.ts +6 -0
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -15,3 +15,20 @@ This library provides a robust implementation of forms using the Sirio Angular L
|
|
|
15
15
|
## Installation
|
|
16
16
|
|
|
17
17
|
Run `npm install @wemake4u/form-player-se` to install package.
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
## Third-Party Licenses
|
|
21
|
+
|
|
22
|
+
This project includes the following third-party components:
|
|
23
|
+
|
|
24
|
+
Runtime dependencies (MIT License)
|
|
25
|
+
|
|
26
|
+
tslib — MIT
|
|
27
|
+
feelers — MIT
|
|
28
|
+
feelin — MIT
|
|
29
|
+
marked — MIT
|
|
30
|
+
mime-db — MIT
|
|
31
|
+
sanitize-html — MIT
|
|
32
|
+
vanillajs-datepicker — MIT
|
|
33
|
+
|
|
34
|
+
All listed packages are licensed under MIT License and impose no additional restrictions.
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
Third-Party Licenses for @wemake4u/form-player-se
|
|
2
|
+
=================================================
|
|
3
|
+
|
|
4
|
+
This project includes third-party software components licensed under the
|
|
5
|
+
terms described below.
|
|
6
|
+
|
|
7
|
+
All dependencies listed here are used at runtime and are required by the
|
|
8
|
+
functionality of this package. Unless otherwise stated, each component is
|
|
9
|
+
licensed under the MIT License, which permits use, modification,
|
|
10
|
+
distribution and private/commercial usage.
|
|
11
|
+
|
|
12
|
+
-------------------------------------------------------
|
|
13
|
+
tslib — MIT License
|
|
14
|
+
© Microsoft
|
|
15
|
+
https://github.com/Microsoft/tslib/blob/master/LICENSE.txt
|
|
16
|
+
-------------------------------------------------------
|
|
17
|
+
|
|
18
|
+
-------------------------------------------------------
|
|
19
|
+
@types/mime-db — MIT License
|
|
20
|
+
© DefinitelyTyped contributors
|
|
21
|
+
https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/LICENSE
|
|
22
|
+
-------------------------------------------------------
|
|
23
|
+
|
|
24
|
+
-------------------------------------------------------
|
|
25
|
+
@types/sanitize-html — MIT License
|
|
26
|
+
© DefinitelyTyped contributors
|
|
27
|
+
https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/LICENSE
|
|
28
|
+
-------------------------------------------------------
|
|
29
|
+
|
|
30
|
+
-------------------------------------------------------
|
|
31
|
+
@types/vanillajs-datepicker — MIT License
|
|
32
|
+
© DefinitelyTyped contributors
|
|
33
|
+
https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/LICENSE
|
|
34
|
+
-------------------------------------------------------
|
|
35
|
+
|
|
36
|
+
-------------------------------------------------------
|
|
37
|
+
feelers — MIT License
|
|
38
|
+
© Contributors
|
|
39
|
+
https://github.com/bpmn-io/feelers/blob/master/LICENSE
|
|
40
|
+
-------------------------------------------------------
|
|
41
|
+
|
|
42
|
+
-------------------------------------------------------
|
|
43
|
+
feelin — MIT License
|
|
44
|
+
© Camunda Services GmbH
|
|
45
|
+
https://github.com/camunda/feelin/blob/master/LICENSE
|
|
46
|
+
-------------------------------------------------------
|
|
47
|
+
|
|
48
|
+
-------------------------------------------------------
|
|
49
|
+
marked — MIT License
|
|
50
|
+
© MarkedJS and contributors
|
|
51
|
+
https://github.com/markedjs/marked/blob/master/LICENSE.md
|
|
52
|
+
-------------------------------------------------------
|
|
53
|
+
|
|
54
|
+
-------------------------------------------------------
|
|
55
|
+
mime-db — MIT License
|
|
56
|
+
© Jonathan Ong and Contributors
|
|
57
|
+
https://github.com/jshttp/mime-db/blob/master/LICENSE
|
|
58
|
+
-------------------------------------------------------
|
|
59
|
+
|
|
60
|
+
-------------------------------------------------------
|
|
61
|
+
sanitize-html — MIT License
|
|
62
|
+
© Apostrophe Technologies, Inc.
|
|
63
|
+
https://github.com/apostrophecms/sanitize-html/blob/main/LICENSE
|
|
64
|
+
-------------------------------------------------------
|
|
65
|
+
|
|
66
|
+
-------------------------------------------------------
|
|
67
|
+
vanillajs-datepicker — MIT License
|
|
68
|
+
© mdb
|
|
69
|
+
https://github.com/mymth/vanillajs-datepicker/blob/master/LICENSE
|
|
70
|
+
-------------------------------------------------------
|
|
71
|
+
|
|
72
|
+
End of Third-Party License Report
|
|
73
|
+
=================================================
|
|
@@ -31,7 +31,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
31
31
|
}] }] });
|
|
32
32
|
const dislayFormat = 'dd/mm/yyyy';
|
|
33
33
|
const storeFormat = 'yyyy-mm-dd';
|
|
34
|
-
function dateToDisplay(value) {
|
|
34
|
+
export function dateToDisplay(value) {
|
|
35
35
|
if (typeof value === "string") {
|
|
36
36
|
const date = parseStore(value) ?? parseDisplay(value);
|
|
37
37
|
return (date == null)
|
|
@@ -42,7 +42,7 @@ function dateToDisplay(value) {
|
|
|
42
42
|
return null;
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
|
-
function dateToStore(value) {
|
|
45
|
+
export function dateToStore(value) {
|
|
46
46
|
if (typeof value === "string") {
|
|
47
47
|
const date = parseStore(value) ?? parseDisplay(value);
|
|
48
48
|
return (date == null)
|
|
@@ -90,4 +90,4 @@ function parseStore(value) {
|
|
|
90
90
|
return null;
|
|
91
91
|
}
|
|
92
92
|
}
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2lyaW8vc3JjL2xpYi9kaXJlY3RpdmVzL2RhdGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBTWxELE1BQU0sT0FBTyxhQUFhO0lBRUk7SUFBNUIsWUFBNEIsZUFBeUM7UUFBekMsb0JBQWUsR0FBZixlQUFlLENBQTBCO1FBRW5FLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRTFGLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEdBQUcsVUFBVSxFQUFvQjtZQUNwRSxnQkFBZ0IsQ0FBQyxVQUFVLEtBQVU7Z0JBQ25DLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN6QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUVGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFOUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEdBQUcsVUFBVSxLQUFVLEVBQUUsS0FBZSxFQUFFLGNBQXdCO1lBQy9GLFVBQVUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQzFELENBQUMsQ0FBQztJQUVKLENBQUM7d0dBbEJVLGFBQWE7NEZBQWIsYUFBYTs7NEZBQWIsYUFBYTtrQkFKekIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsV0FBVztv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RUFBRSxDQUFDLENBQUM7SUFFbkMsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFFNUMsSUFDRSxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSTtRQUMzQixJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssS0FBSyxHQUFHLENBQUM7UUFDN0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEdBQUcsRUFDdEIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztTQUNJLENBQUM7UUFDSixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBIb3N0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNpcmlvRGF0ZXBpY2tlckNvbXBvbmVudCB9IGZyb20gJ25neC1zaXJpby1saWInO1xyXG5pbXBvcnQgeyBEYXRlcGlja2VyIH0gZnJvbSAndmFuaWxsYWpzLWRhdGVwaWNrZXInO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbaXNvRGF0ZV0nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWVcclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGVEaXJlY3RpdmUge1xyXG5cclxuICBjb25zdHJ1Y3RvcihASG9zdCgpIHByaXZhdGUgc2lyaW9EYXRlcGlja2VyOiBTaXJpb0RhdGVwaWNrZXJDb21wb25lbnQpIHtcclxuXHJcbiAgICBjb25zdCByZWdpc3Rlck9uQ2hhbmdlID0gdGhpcy5zaXJpb0RhdGVwaWNrZXIucmVnaXN0ZXJPbkNoYW5nZS5iaW5kKHRoaXMuc2lyaW9EYXRlcGlja2VyKTtcclxuXHJcbiAgICB0aGlzLnNpcmlvRGF0ZXBpY2tlci5yZWdpc3Rlck9uQ2hhbmdlID0gZnVuY3Rpb24gKGZuOiAoXzogYW55KSA9PiB2b2lkKSB7XHJcbiAgICAgIHJlZ2lzdGVyT25DaGFuZ2UoZnVuY3Rpb24gKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBmbihkYXRlVG9TdG9yZSh2YWx1ZSkpO1xyXG4gICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgd3JpdGVWYWx1ZSA9IHRoaXMuc2lyaW9EYXRlcGlja2VyLndyaXRlVmFsdWUuYmluZCh0aGlzLnNpcmlvRGF0ZXBpY2tlcik7XHJcblxyXG4gICAgdGhpcy5zaXJpb0RhdGVwaWNrZXIud3JpdGVWYWx1ZSA9IGZ1bmN0aW9uICh2YWx1ZTogYW55LCBldmVudD86IGJvb2xlYW4sIHVwZGF0ZUNhbGVuZGFyPzogYm9vbGVhbikge1xyXG4gICAgICB3cml0ZVZhbHVlKGRhdGVUb0Rpc3BsYXkodmFsdWUpLCBldmVudCwgdXBkYXRlQ2FsZW5kYXIpO1xyXG4gICAgfTtcclxuXHJcbiAgfSAgXHJcbn1cclxuXHJcbmNvbnN0IGRpc2xheUZvcm1hdCA9ICdkZC9tbS95eXl5JztcclxuY29uc3Qgc3RvcmVGb3JtYXQgPSAneXl5eS1tbS1kZCc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGF0ZVRvRGlzcGxheSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgY29uc3QgZGF0ZSA9IHBhcnNlU3RvcmUodmFsdWUpID8/IHBhcnNlRGlzcGxheSh2YWx1ZSk7XHJcbiAgICByZXR1cm4gKGRhdGUgPT0gbnVsbClcclxuICAgICAgPyB2YWx1ZVxyXG4gICAgICA6IERhdGVwaWNrZXIuZm9ybWF0RGF0ZShkYXRlLCBkaXNsYXlGb3JtYXQsICdpdCcpO1xyXG4gIH1cclxuICBlbHNlIHtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH0gIFxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGF0ZVRvU3RvcmUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xyXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgIGNvbnN0IGRhdGUgPSBwYXJzZVN0b3JlKHZhbHVlKSA/PyBwYXJzZURpc3BsYXkodmFsdWUpO1xyXG4gICAgcmV0dXJuIChkYXRlID09IG51bGwpXHJcbiAgICAgID8gbnVsbFxyXG4gICAgICA6IERhdGVwaWNrZXIuZm9ybWF0RGF0ZShkYXRlLCBzdG9yZUZvcm1hdCwgJ2l0Jyk7XHJcbiAgfVxyXG4gIGVsc2Uge1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfSBcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VEaXNwbGF5KHZhbHVlOiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XHJcbiAgY29uc3QgcmVnZXggPSAvXihcXGR7Mn0pXFwvKFxcZHsyfSlcXC8oXFxkezR9KSQvO1xyXG4gIGNvbnN0IG1hdGNoID0gdmFsdWUubWF0Y2gocmVnZXgpO1xyXG4gIGlmICghbWF0Y2gpIHJldHVybiBudWxsO1xyXG5cclxuICBjb25zdCBkYXkgPSBwYXJzZUludChtYXRjaFsxXSwgMTApO1xyXG4gIGNvbnN0IG1vbnRoID0gcGFyc2VJbnQobWF0Y2hbMl0sIDEwKTtcclxuICBjb25zdCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbM10sIDEwKTtcclxuXHJcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF5KTtcclxuXHJcbiAgaWYgKFxyXG4gICAgZGF0ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyICYmXHJcbiAgICBkYXRlLmdldE1vbnRoKCkgPT09IG1vbnRoIC0gMSAmJlxyXG4gICAgZGF0ZS5nZXREYXRlKCkgPT09IGRheVxyXG4gICkge1xyXG4gICAgcmV0dXJuIGRhdGU7XHJcbiAgfVxyXG4gIGVsc2Uge1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZVN0b3JlKHZhbHVlOiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XHJcbiAgY29uc3QgcmVnZXggPSAvXihcXGR7NH0pLShcXGR7Mn0pLShcXGR7Mn0pKFRcXGR7Mn06XFxkezJ9OlxcZHsyfShcXC5cXGQrKT8oWnxbKy1dXFxkezJ9OlxcZHsyfSk/KT8kLztcclxuICBjb25zdCBtYXRjaCA9IHZhbHVlLm1hdGNoKHJlZ2V4KTtcclxuICBpZiAoIW1hdGNoKSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGNvbnN0IHllYXIgPSBwYXJzZUludChtYXRjaFsxXSwgMTApO1xyXG4gIGNvbnN0IG1vbnRoID0gcGFyc2VJbnQobWF0Y2hbMl0sIDEwKTtcclxuICBjb25zdCBkYXkgPSBwYXJzZUludChtYXRjaFszXSwgMTApO1xyXG5cclxuICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXkpO1xyXG5cclxuICBpZiAoXHJcbiAgICBkYXRlLmdldEZ1bGxZZWFyKCkgPT09IHllYXIgJiZcclxuICAgIGRhdGUuZ2V0TW9udGgoKSA9PT0gbW9udGggLSAxICYmXHJcbiAgICBkYXRlLmdldERhdGUoKSA9PT0gZGF5XHJcbiAgKSB7XHJcbiAgICByZXR1cm4gZGF0ZTtcclxuICB9XHJcbiAgZWxzZSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcbn1cclxuXHJcblxyXG4iXX0=
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { Directive, Input, forwardRef } from '@angular/core';
|
|
2
|
+
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
+
import { toLocalString, toLocalDateString, isValidTime, isValidDate } from '../utils/date';
|
|
4
|
+
import { dateToStore } from '../directives/date.directive';
|
|
5
|
+
import { Subject } from 'rxjs';
|
|
6
|
+
import { takeUntil } from 'rxjs/operators';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@angular/forms";
|
|
9
|
+
export class DateTimeCoordinatorDirective {
|
|
10
|
+
datePicker;
|
|
11
|
+
timePicker;
|
|
12
|
+
onChange = (_) => { };
|
|
13
|
+
onTouched = () => { };
|
|
14
|
+
dateValue = null;
|
|
15
|
+
timeValue = null;
|
|
16
|
+
destroy$ = new Subject();
|
|
17
|
+
ngOnDestroy() {
|
|
18
|
+
this.destroy$.next();
|
|
19
|
+
this.destroy$.complete();
|
|
20
|
+
}
|
|
21
|
+
ngAfterViewInit() {
|
|
22
|
+
this.datePicker?.blurEvent
|
|
23
|
+
.pipe(takeUntil(this.destroy$))
|
|
24
|
+
.subscribe((event) => {
|
|
25
|
+
const value = dateToStore(event.component.value);
|
|
26
|
+
this.dateValue = isValidDate(value ?? "") ? value : null;
|
|
27
|
+
this.recalculate("date");
|
|
28
|
+
});
|
|
29
|
+
this.timePicker?.blurEvent
|
|
30
|
+
.pipe(takeUntil(this.destroy$))
|
|
31
|
+
.subscribe((event) => {
|
|
32
|
+
this.timeValue = isValidTime(event.component.value)
|
|
33
|
+
? event.component.value : null;
|
|
34
|
+
this.recalculate("time");
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
writeValue(value) {
|
|
38
|
+
if (!value) {
|
|
39
|
+
this.dateValue = null;
|
|
40
|
+
this.timeValue = null;
|
|
41
|
+
this.datePicker?.writeValue(null);
|
|
42
|
+
this.timePicker?.writeValue(null);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const date = value instanceof Date ? value : new Date(value);
|
|
46
|
+
const local = toLocalString(date);
|
|
47
|
+
this.dateValue = local ? local.substring(0, 10) : null;
|
|
48
|
+
this.timeValue = local ? local.substring(11, 16) : null;
|
|
49
|
+
this.datePicker?.writeValue(this.dateValue);
|
|
50
|
+
this.timePicker?.writeValue(this.timeValue);
|
|
51
|
+
}
|
|
52
|
+
setDisabledState(isDisabled) {
|
|
53
|
+
this.datePicker?.setDisabledState(isDisabled);
|
|
54
|
+
this.timePicker?.setDisabledState(isDisabled);
|
|
55
|
+
}
|
|
56
|
+
registerOnChange(fn) { this.onChange = fn; }
|
|
57
|
+
registerOnTouched(fn) { this.onTouched = fn; }
|
|
58
|
+
recalculate(part) {
|
|
59
|
+
// Case: both fields cleared
|
|
60
|
+
if (!this.dateValue && !this.timeValue) {
|
|
61
|
+
this.onChange(null);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
// Case: date is set but time is empty → apply default time
|
|
65
|
+
if (this.dateValue && !this.timeValue) {
|
|
66
|
+
this.timeValue = '00:00';
|
|
67
|
+
this.timePicker?.writeValue(this.timeValue);
|
|
68
|
+
}
|
|
69
|
+
// Case: time is set but date is empty → apply default date
|
|
70
|
+
if (part === "time" && !this.dateValue && this.timeValue) {
|
|
71
|
+
const today = new Date();
|
|
72
|
+
this.dateValue = toLocalDateString(today);
|
|
73
|
+
this.datePicker?.writeValue(this.dateValue);
|
|
74
|
+
}
|
|
75
|
+
// If after applying the rules one of the values is still missing → null
|
|
76
|
+
if (!this.dateValue || !this.timeValue) {
|
|
77
|
+
this.onChange(null);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
let combined = `${this.dateValue}T${this.timeValue}:00`;
|
|
81
|
+
this.onChange(combined);
|
|
82
|
+
}
|
|
83
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DateTimeCoordinatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
84
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: DateTimeCoordinatorDirective, isStandalone: true, selector: "[dateTimeCoordinator]", inputs: { datePicker: "datePicker", timePicker: "timePicker" }, providers: [
|
|
85
|
+
{
|
|
86
|
+
provide: NG_VALUE_ACCESSOR,
|
|
87
|
+
useExisting: forwardRef(() => DateTimeCoordinatorDirective),
|
|
88
|
+
multi: true
|
|
89
|
+
}
|
|
90
|
+
], ngImport: i0 });
|
|
91
|
+
}
|
|
92
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DateTimeCoordinatorDirective, decorators: [{
|
|
93
|
+
type: Directive,
|
|
94
|
+
args: [{
|
|
95
|
+
selector: '[dateTimeCoordinator]',
|
|
96
|
+
standalone: true,
|
|
97
|
+
providers: [
|
|
98
|
+
{
|
|
99
|
+
provide: NG_VALUE_ACCESSOR,
|
|
100
|
+
useExisting: forwardRef(() => DateTimeCoordinatorDirective),
|
|
101
|
+
multi: true
|
|
102
|
+
}
|
|
103
|
+
]
|
|
104
|
+
}]
|
|
105
|
+
}], propDecorators: { datePicker: [{
|
|
106
|
+
type: Input
|
|
107
|
+
}], timePicker: [{
|
|
108
|
+
type: Input
|
|
109
|
+
}] } });
|
|
110
|
+
const classNames = ['sirio-is-invalid', 'sirio-is-valid', 'sirio-is-warning', 'sirio-is-pending'];
|
|
111
|
+
export class DateTimeValidationDirective {
|
|
112
|
+
ngControl;
|
|
113
|
+
renderer;
|
|
114
|
+
isWarning = false;
|
|
115
|
+
showWhenValid = false;
|
|
116
|
+
sub;
|
|
117
|
+
constructor(ngControl, renderer) {
|
|
118
|
+
this.ngControl = ngControl;
|
|
119
|
+
this.renderer = renderer;
|
|
120
|
+
}
|
|
121
|
+
ngOnDestroy() {
|
|
122
|
+
this.sub?.unsubscribe();
|
|
123
|
+
}
|
|
124
|
+
ngAfterViewInit() {
|
|
125
|
+
if (!this.ngControl?.statusChanges) {
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
this.sub = this.ngControl.statusChanges.subscribe(status => {
|
|
129
|
+
const coordinator = this.getCoordinator();
|
|
130
|
+
if (coordinator) {
|
|
131
|
+
this.checkValidation(coordinator.datePicker.validationTarget);
|
|
132
|
+
this.checkValidation(coordinator.timePicker.validationTarget);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
getCoordinator() {
|
|
137
|
+
return this.ngControl?.valueAccessor ?? null;
|
|
138
|
+
}
|
|
139
|
+
checkValidation(validationTarget) {
|
|
140
|
+
if (this.ngControl?.status === "PENDING") {
|
|
141
|
+
this.setPending(validationTarget);
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
const isDisabled = this.ngControl?.disabled;
|
|
145
|
+
if (isDisabled) {
|
|
146
|
+
this.cleanupValidation(validationTarget);
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
const isValid = this.ngControl?.valid;
|
|
150
|
+
if (isValid) {
|
|
151
|
+
if (this.showWhenValid) {
|
|
152
|
+
this.setValid(validationTarget);
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
this.cleanupValidation(validationTarget);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
if (!isValid && this.isWarning) {
|
|
159
|
+
this.setWarning(validationTarget);
|
|
160
|
+
}
|
|
161
|
+
if (!isValid && !this.isWarning) {
|
|
162
|
+
this.setInvalid(validationTarget);
|
|
163
|
+
}
|
|
164
|
+
//this.cd.detectChanges();
|
|
165
|
+
}
|
|
166
|
+
cleanupValidation(validationTarget) {
|
|
167
|
+
classNames.forEach(c => this.renderer.removeClass(validationTarget, c));
|
|
168
|
+
}
|
|
169
|
+
setValid(validationTarget) {
|
|
170
|
+
this.applyClass(validationTarget, 'sirio-is-valid');
|
|
171
|
+
}
|
|
172
|
+
setInvalid(validationTarget) {
|
|
173
|
+
this.applyClass(validationTarget, 'sirio-is-invalid');
|
|
174
|
+
}
|
|
175
|
+
setWarning(validationTarget) {
|
|
176
|
+
this.applyClass(validationTarget, 'sirio-is-warning');
|
|
177
|
+
}
|
|
178
|
+
setPending(validationTarget) {
|
|
179
|
+
this.applyClass(validationTarget, 'sirio-is-pending');
|
|
180
|
+
}
|
|
181
|
+
applyClass(validationTarget, className) {
|
|
182
|
+
this.cleanupValidation(validationTarget);
|
|
183
|
+
this.renderer.addClass(validationTarget, className);
|
|
184
|
+
}
|
|
185
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DateTimeValidationDirective, deps: [{ token: i1.NgControl }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
|
|
186
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: DateTimeValidationDirective, isStandalone: true, selector: "[dateTimeValidator]", inputs: { isWarning: "isWarning", showWhenValid: "showWhenValid" }, ngImport: i0 });
|
|
187
|
+
}
|
|
188
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DateTimeValidationDirective, decorators: [{
|
|
189
|
+
type: Directive,
|
|
190
|
+
args: [{
|
|
191
|
+
selector: '[dateTimeValidator]',
|
|
192
|
+
standalone: true
|
|
193
|
+
}]
|
|
194
|
+
}], ctorParameters: () => [{ type: i1.NgControl }, { type: i0.Renderer2 }], propDecorators: { isWarning: [{
|
|
195
|
+
type: Input
|
|
196
|
+
}], showWhenValid: [{
|
|
197
|
+
type: Input
|
|
198
|
+
}] } });
|
|
199
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvZGlyZWN0aXZlcy9kYXRldGltZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBaUIsS0FBSyxFQUFFLFVBQVUsRUFBd0IsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUF3QixpQkFBaUIsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBRXBGLE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDOUcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBYTNDLE1BQU0sT0FBTyw0QkFBNEI7SUFFOUIsVUFBVSxDQUE0QjtJQUN0QyxVQUFVLENBQTRCO0lBRXZDLFFBQVEsR0FBRyxDQUFDLENBQU0sRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLFNBQVMsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFFdEIsU0FBUyxHQUFrQixJQUFJLENBQUM7SUFDaEMsU0FBUyxHQUFrQixJQUFJLENBQUM7SUFFaEMsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFFdkMsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsZUFBZTtRQUViLElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBUzthQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM5QixTQUFTLENBQUMsQ0FBQyxLQUE4QyxFQUFFLEVBQUU7WUFDNUQsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUN6RCxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTO2FBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzlCLFNBQVMsQ0FBQyxDQUFDLEtBQThDLEVBQUUsRUFBRTtZQUM1RCxJQUFJLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztnQkFDakQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBVTtRQUNuQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN0QixJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLEtBQUssWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0QsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3hELElBQUksQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELGdCQUFnQixDQUFDLFVBQW1CO1FBQ2xDLElBQUksQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBTyxJQUFVLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RCxpQkFBaUIsQ0FBQyxFQUFPLElBQVUsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRWpELFdBQVcsQ0FBQyxJQUFxQjtRQUN2Qyw0QkFBNEI7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwQixPQUFPO1FBQ1QsQ0FBQztRQUVELDJEQUEyRDtRQUMzRCxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7WUFDekIsSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFFRCwyREFBMkQ7UUFDM0QsSUFBSSxJQUFJLEtBQUssTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDekQsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBRUQsd0VBQXdFO1FBQ3hFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLFFBQVEsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxDQUFDO1FBRXhELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUIsQ0FBQzt3R0EzRlUsNEJBQTRCOzRGQUE1Qiw0QkFBNEIsb0lBUjVCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQztnQkFDM0QsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGOzs0RkFFVSw0QkFBNEI7a0JBWHhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtvQkFDakMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSw2QkFBNkIsQ0FBQzs0QkFDM0QsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7aUJBQ0Y7OEJBR1UsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLOztBQTRGUixNQUFNLFVBQVUsR0FBRyxDQUFDLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFNbEcsTUFBTSxPQUFPLDJCQUEyQjtJQU1sQjtJQUNWO0lBTkQsU0FBUyxHQUFZLEtBQUssQ0FBQztJQUMzQixhQUFhLEdBQVksS0FBSyxDQUFDO0lBRWhDLEdBQUcsQ0FBZ0I7SUFFM0IsWUFBb0IsU0FBb0IsRUFDOUIsUUFBbUI7UUFEVCxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQzlCLGFBQVEsR0FBUixRQUFRLENBQVc7SUFFN0IsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLENBQUM7WUFDbkMsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN6RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDMUMsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQzlELElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2hFLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxjQUFjO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxhQUE2QyxJQUFJLElBQUksQ0FBQztJQUMvRSxDQUFDO0lBRU8sZUFBZSxDQUFDLGdCQUFxQjtRQUMzQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUNsQyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDO1FBQzVDLElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN6QyxPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDO1FBQ3RDLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2xDLENBQUM7aUJBQ0ksQ0FBQztnQkFDSixJQUFJLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUMzQyxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUNELDBCQUEwQjtJQUM1QixDQUFDO0lBRU8saUJBQWlCLENBQUMsZ0JBQXFCO1FBQzdDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFTyxRQUFRLENBQUMsZ0JBQXFCO1FBQ3BDLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU8sVUFBVSxDQUFDLGdCQUFxQjtRQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVPLFVBQVUsQ0FBQyxnQkFBcUI7UUFDdEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFTyxVQUFVLENBQUMsZ0JBQXFCO1FBQ3RDLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU8sVUFBVSxDQUFDLGdCQUFxQixFQUFFLFNBQWlCO1FBQ3pELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7d0dBckZVLDJCQUEyQjs0RkFBM0IsMkJBQTJCOzs0RkFBM0IsMkJBQTJCO2tCQUp2QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjtzR0FFVSxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEFmdGVyVmlld0luaXQsIElucHV0LCBmb3J3YXJkUmVmLCBPbkRlc3Ryb3ksIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTmd4U2lyaW9FdmVudCwgU2lyaW9EYXRlcGlja2VyQ29tcG9uZW50LCBTaXJpb1RpbWVwaWNrZXJDb21wb25lbnQsIH0gZnJvbSAnbmd4LXNpcmlvLWxpYic7XHJcbmltcG9ydCB7IHRvTG9jYWxTdHJpbmcsIHRvTG9jYWxEYXRlU3RyaW5nLCBpc1ZhbGlkVGltZSwgaXNWYWxpZERhdGUsIGlzVmFsaWREYXRlT2JqZWN0IH0gZnJvbSAnLi4vdXRpbHMvZGF0ZSc7XHJcbmltcG9ydCB7IGRhdGVUb1N0b3JlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9kYXRlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tkYXRlVGltZUNvb3JkaW5hdG9yXScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVUaW1lQ29vcmRpbmF0b3JEaXJlY3RpdmUpLFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGVUaW1lQ29vcmRpbmF0b3JEaXJlY3RpdmUgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgQElucHV0KCkgZGF0ZVBpY2tlciE6IFNpcmlvRGF0ZXBpY2tlckNvbXBvbmVudDtcclxuICBASW5wdXQoKSB0aW1lUGlja2VyITogU2lyaW9UaW1lcGlja2VyQ29tcG9uZW50O1xyXG4gIFxyXG4gIHByaXZhdGUgb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7IH07XHJcbiAgcHJpdmF0ZSBvblRvdWNoZWQgPSAoKSA9PiB7IH07XHJcblxyXG4gIHByaXZhdGUgZGF0ZVZhbHVlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIHRpbWVWYWx1ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuZGF0ZVBpY2tlcj8uYmx1ckV2ZW50XHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE5neFNpcmlvRXZlbnQ8U2lyaW9EYXRlcGlja2VyQ29tcG9uZW50PikgPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gZGF0ZVRvU3RvcmUoZXZlbnQuY29tcG9uZW50LnZhbHVlKTtcclxuICAgICAgICB0aGlzLmRhdGVWYWx1ZSA9IGlzVmFsaWREYXRlKHZhbHVlID8/IFwiXCIpID8gdmFsdWUgOiBudWxsO1xyXG4gICAgICAgIHRoaXMucmVjYWxjdWxhdGUoXCJkYXRlXCIpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnRpbWVQaWNrZXI/LmJsdXJFdmVudFxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBOZ3hTaXJpb0V2ZW50PFNpcmlvVGltZXBpY2tlckNvbXBvbmVudD4pID0+IHtcclxuICAgICAgICB0aGlzLnRpbWVWYWx1ZSA9IGlzVmFsaWRUaW1lKGV2ZW50LmNvbXBvbmVudC52YWx1ZSlcclxuICAgICAgICAgID8gZXZlbnQuY29tcG9uZW50LnZhbHVlIDogbnVsbDtcclxuICAgICAgICB0aGlzLnJlY2FsY3VsYXRlKFwidGltZVwiKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgdGhpcy5kYXRlVmFsdWUgPSBudWxsO1xyXG4gICAgICB0aGlzLnRpbWVWYWx1ZSA9IG51bGw7XHJcbiAgICAgIHRoaXMuZGF0ZVBpY2tlcj8ud3JpdGVWYWx1ZShudWxsKTtcclxuICAgICAgdGhpcy50aW1lUGlja2VyPy53cml0ZVZhbHVlKG51bGwpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZGF0ZSA9IHZhbHVlIGluc3RhbmNlb2YgRGF0ZSA/IHZhbHVlIDogbmV3IERhdGUodmFsdWUpO1xyXG4gICAgY29uc3QgbG9jYWwgPSB0b0xvY2FsU3RyaW5nKGRhdGUpO1xyXG4gICAgdGhpcy5kYXRlVmFsdWUgPSBsb2NhbCA/IGxvY2FsLnN1YnN0cmluZygwLCAxMCkgOiBudWxsO1xyXG4gICAgdGhpcy50aW1lVmFsdWUgPSBsb2NhbCA/IGxvY2FsLnN1YnN0cmluZygxMSwgMTYpIDogbnVsbDtcclxuICAgIHRoaXMuZGF0ZVBpY2tlcj8ud3JpdGVWYWx1ZSh0aGlzLmRhdGVWYWx1ZSk7XHJcbiAgICB0aGlzLnRpbWVQaWNrZXI/LndyaXRlVmFsdWUodGhpcy50aW1lVmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmRhdGVQaWNrZXI/LnNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZCk7XHJcbiAgICB0aGlzLnRpbWVQaWNrZXI/LnNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZCk7XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHsgdGhpcy5vbkNoYW5nZSA9IGZuOyB9XHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQgeyB0aGlzLm9uVG91Y2hlZCA9IGZuOyB9XHJcblxyXG4gIHByaXZhdGUgcmVjYWxjdWxhdGUocGFydDogXCJkYXRlXCIgfCBcInRpbWVcIikge1xyXG4gICAgLy8gQ2FzZTogYm90aCBmaWVsZHMgY2xlYXJlZFxyXG4gICAgaWYgKCF0aGlzLmRhdGVWYWx1ZSAmJiAhdGhpcy50aW1lVmFsdWUpIHtcclxuICAgICAgdGhpcy5vbkNoYW5nZShudWxsKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENhc2U6IGRhdGUgaXMgc2V0IGJ1dCB0aW1lIGlzIGVtcHR5IOKGkiBhcHBseSBkZWZhdWx0IHRpbWVcclxuICAgIGlmICh0aGlzLmRhdGVWYWx1ZSAmJiAhdGhpcy50aW1lVmFsdWUpIHtcclxuICAgICAgdGhpcy50aW1lVmFsdWUgPSAnMDA6MDAnO1xyXG4gICAgICB0aGlzLnRpbWVQaWNrZXI/LndyaXRlVmFsdWUodGhpcy50aW1lVmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENhc2U6IHRpbWUgaXMgc2V0IGJ1dCBkYXRlIGlzIGVtcHR5IOKGkiBhcHBseSBkZWZhdWx0IGRhdGVcclxuICAgIGlmIChwYXJ0ID09PSBcInRpbWVcIiAmJiAhdGhpcy5kYXRlVmFsdWUgJiYgdGhpcy50aW1lVmFsdWUpIHtcclxuICAgICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICB0aGlzLmRhdGVWYWx1ZSA9IHRvTG9jYWxEYXRlU3RyaW5nKHRvZGF5KTtcclxuICAgICAgdGhpcy5kYXRlUGlja2VyPy53cml0ZVZhbHVlKHRoaXMuZGF0ZVZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiBhZnRlciBhcHBseWluZyB0aGUgcnVsZXMgb25lIG9mIHRoZSB2YWx1ZXMgaXMgc3RpbGwgbWlzc2luZyDihpIgbnVsbFxyXG4gICAgaWYgKCF0aGlzLmRhdGVWYWx1ZSB8fCAhdGhpcy50aW1lVmFsdWUpIHtcclxuICAgICAgdGhpcy5vbkNoYW5nZShudWxsKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBjb21iaW5lZCA9IGAke3RoaXMuZGF0ZVZhbHVlfVQke3RoaXMudGltZVZhbHVlfTowMGA7XHJcblxyXG4gICAgdGhpcy5vbkNoYW5nZShjb21iaW5lZCk7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuY29uc3QgY2xhc3NOYW1lcyA9IFsnc2lyaW8taXMtaW52YWxpZCcsICdzaXJpby1pcy12YWxpZCcsICdzaXJpby1pcy13YXJuaW5nJywgJ3NpcmlvLWlzLXBlbmRpbmcnXTtcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2RhdGVUaW1lVmFsaWRhdG9yXScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSAgXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRlVGltZVZhbGlkYXRpb25EaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIGlzV2FybmluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNob3dXaGVuVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBzdWI/OiBTdWJzY3JpcHRpb247XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbmdDb250cm9sOiBOZ0NvbnRyb2wsXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIpXHJcbiAgeyAgICBcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWI/LnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMubmdDb250cm9sPy5zdGF0dXNDaGFuZ2VzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN1YiA9IHRoaXMubmdDb250cm9sLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKHN0YXR1cyA9PiB7XHJcbiAgICAgIGNvbnN0IGNvb3JkaW5hdG9yID0gdGhpcy5nZXRDb29yZGluYXRvcigpO1xyXG4gICAgICBpZiAoY29vcmRpbmF0b3IpIHtcclxuICAgICAgICB0aGlzLmNoZWNrVmFsaWRhdGlvbihjb29yZGluYXRvci5kYXRlUGlja2VyLnZhbGlkYXRpb25UYXJnZXQpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tWYWxpZGF0aW9uKGNvb3JkaW5hdG9yLnRpbWVQaWNrZXIudmFsaWRhdGlvblRhcmdldCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDb29yZGluYXRvcigpOiBEYXRlVGltZUNvb3JkaW5hdG9yRGlyZWN0aXZlIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5uZ0NvbnRyb2w/LnZhbHVlQWNjZXNzb3IgYXMgRGF0ZVRpbWVDb29yZGluYXRvckRpcmVjdGl2ZSA/PyBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja1ZhbGlkYXRpb24odmFsaWRhdGlvblRhcmdldDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2w/LnN0YXR1cyA9PT0gXCJQRU5ESU5HXCIpIHtcclxuICAgICAgdGhpcy5zZXRQZW5kaW5nKHZhbGlkYXRpb25UYXJnZXQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaXNEaXNhYmxlZCA9IHRoaXMubmdDb250cm9sPy5kaXNhYmxlZDtcclxuICAgIGlmIChpc0Rpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMuY2xlYW51cFZhbGlkYXRpb24odmFsaWRhdGlvblRhcmdldCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGlzVmFsaWQgPSB0aGlzLm5nQ29udHJvbD8udmFsaWQ7XHJcbiAgICBpZiAoaXNWYWxpZCkge1xyXG4gICAgICBpZiAodGhpcy5zaG93V2hlblZhbGlkKSB7XHJcbiAgICAgICAgdGhpcy5zZXRWYWxpZCh2YWxpZGF0aW9uVGFyZ2V0KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmNsZWFudXBWYWxpZGF0aW9uKHZhbGlkYXRpb25UYXJnZXQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzVmFsaWQgJiYgdGhpcy5pc1dhcm5pbmcpIHtcclxuICAgICAgdGhpcy5zZXRXYXJuaW5nKHZhbGlkYXRpb25UYXJnZXQpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFpc1ZhbGlkICYmICF0aGlzLmlzV2FybmluZykge1xyXG4gICAgICB0aGlzLnNldEludmFsaWQodmFsaWRhdGlvblRhcmdldCk7XHJcbiAgICB9XHJcbiAgICAvL3RoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhbnVwVmFsaWRhdGlvbih2YWxpZGF0aW9uVGFyZ2V0OiBhbnkpIHtcclxuICAgIGNsYXNzTmFtZXMuZm9yRWFjaChjID0+IHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModmFsaWRhdGlvblRhcmdldCwgYykpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRWYWxpZCh2YWxpZGF0aW9uVGFyZ2V0OiBhbnkpIHtcclxuICAgIHRoaXMuYXBwbHlDbGFzcyh2YWxpZGF0aW9uVGFyZ2V0LCAnc2lyaW8taXMtdmFsaWQnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0SW52YWxpZCh2YWxpZGF0aW9uVGFyZ2V0OiBhbnkpIHtcclxuICAgIHRoaXMuYXBwbHlDbGFzcyh2YWxpZGF0aW9uVGFyZ2V0LCAnc2lyaW8taXMtaW52YWxpZCcpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRXYXJuaW5nKHZhbGlkYXRpb25UYXJnZXQ6IGFueSkge1xyXG4gICAgdGhpcy5hcHBseUNsYXNzKHZhbGlkYXRpb25UYXJnZXQsICdzaXJpby1pcy13YXJuaW5nJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFBlbmRpbmcodmFsaWRhdGlvblRhcmdldDogYW55KSB7XHJcbiAgICB0aGlzLmFwcGx5Q2xhc3ModmFsaWRhdGlvblRhcmdldCwgJ3NpcmlvLWlzLXBlbmRpbmcnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlDbGFzcyh2YWxpZGF0aW9uVGFyZ2V0OiBhbnksIGNsYXNzTmFtZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmNsZWFudXBWYWxpZGF0aW9uKHZhbGlkYXRpb25UYXJnZXQpO1xyXG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh2YWxpZGF0aW9uVGFyZ2V0LCBjbGFzc05hbWUpO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
|