@spicainternational/ngx-sds-components 2.23.0 → 2.23.1
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/esm2020/src/lib/duration-box/duration-box.component.mjs +70 -54
- package/esm2020/src/lib/duration-box/duration-input-resolver.service.mjs +6 -1
- package/fesm2015/spicainternational-ngx-sds-components-src-lib-duration-box.mjs +75 -55
- package/fesm2015/spicainternational-ngx-sds-components-src-lib-duration-box.mjs.map +1 -1
- package/fesm2020/spicainternational-ngx-sds-components-src-lib-duration-box.mjs +75 -55
- package/fesm2020/spicainternational-ngx-sds-components-src-lib-duration-box.mjs.map +1 -1
- package/package.json +1 -1
- package/src/lib/duration-box/duration-box.component.d.ts +51 -5
- package/src/lib/duration-box/duration-input-resolver.service.d.ts +1 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { SdsDurationFormatPipe } from '@spicainternational/ngx-sds-components/src/lib/duration-pipe';
|
|
2
3
|
import * as i0 from "@angular/core";
|
|
3
4
|
import * as i1 from "./duration-input-resolver.service";
|
|
4
5
|
import * as i2 from "devextreme-angular";
|
|
@@ -9,14 +10,55 @@ import * as i6 from "@spicainternational/ngx-sds-components/src/lib/duration-pip
|
|
|
9
10
|
export class SdsDurationBoxComponent {
|
|
10
11
|
constructor(_durationInputResolver) {
|
|
11
12
|
this._durationInputResolver = _durationInputResolver;
|
|
13
|
+
/**
|
|
14
|
+
* Duration length expressed in minutes; when we allow empty values this property can be null.
|
|
15
|
+
*
|
|
16
|
+
* @type {(number | null)}
|
|
17
|
+
* @memberof SdsDurationBoxComponent
|
|
18
|
+
*/
|
|
12
19
|
this.value = null;
|
|
13
20
|
this.valueChange = new EventEmitter();
|
|
21
|
+
/**
|
|
22
|
+
* Allow user to select empty value. You should provide emptyValueText in this case.
|
|
23
|
+
*
|
|
24
|
+
* @type {boolean}
|
|
25
|
+
* @memberof SdsDurationBoxComponent
|
|
26
|
+
*/
|
|
14
27
|
this.allowEmptyValue = true;
|
|
28
|
+
/**
|
|
29
|
+
* 'emptyValueText' - text to be displayed when value is cleared
|
|
30
|
+
*
|
|
31
|
+
* @type {string}
|
|
32
|
+
* @memberof SdsDurationBoxComponent
|
|
33
|
+
*/
|
|
15
34
|
this.emptyValueText = 'not set';
|
|
35
|
+
/**
|
|
36
|
+
* Width of component
|
|
37
|
+
*
|
|
38
|
+
* @type {string}
|
|
39
|
+
* @memberof SdsDurationBoxComponent
|
|
40
|
+
*/
|
|
16
41
|
this.width = '10rem';
|
|
42
|
+
/**
|
|
43
|
+
* Specifies whether the UI component responds to user interaction.
|
|
44
|
+
*
|
|
45
|
+
* @type {boolean}
|
|
46
|
+
* @memberof SdsDurationBoxComponent
|
|
47
|
+
*/
|
|
48
|
+
this.disabled = false;
|
|
49
|
+
/**
|
|
50
|
+
* Specifies whether to display the Clear button in the UI component.
|
|
51
|
+
*
|
|
52
|
+
* @type {boolean}
|
|
53
|
+
* @memberof SdsDurationBoxComponent
|
|
54
|
+
*/
|
|
55
|
+
this.showClearButton = false;
|
|
17
56
|
this.elementUUID = 'sds-db-' + crypto.randomUUID();
|
|
18
57
|
this.inputValue = '';
|
|
19
58
|
this.showOptions = false;
|
|
59
|
+
this.isValueEmpty = false;
|
|
60
|
+
this.isValueSetInternally = false;
|
|
61
|
+
this._durationPipe = new SdsDurationFormatPipe();
|
|
20
62
|
this.optionsDropdownButton = {
|
|
21
63
|
icon: 'spindown',
|
|
22
64
|
stylingMode: 'text',
|
|
@@ -27,60 +69,42 @@ export class SdsDurationBoxComponent {
|
|
|
27
69
|
this.clearValueButton = {
|
|
28
70
|
icon: 'clear',
|
|
29
71
|
stylingMode: 'text',
|
|
72
|
+
elementAttr: { class: 'sds-durationbox-clear-button' },
|
|
30
73
|
onClick: () => {
|
|
31
74
|
this.applyOption(null);
|
|
32
75
|
}
|
|
33
76
|
};
|
|
34
|
-
this.isValueEmpty = false;
|
|
35
|
-
this.isValueSetInternally = false;
|
|
36
77
|
}
|
|
37
78
|
ngOnChanges(changes) {
|
|
38
79
|
if (changes['value']) {
|
|
39
80
|
if (this.value === null) {
|
|
40
81
|
if (this.allowEmptyValue) {
|
|
41
|
-
this.
|
|
42
|
-
this.
|
|
82
|
+
this.setValue(null);
|
|
83
|
+
// this.isValueEmpty = true;
|
|
84
|
+
// this.inputValue = this.emptyValueText;
|
|
43
85
|
}
|
|
44
86
|
else {
|
|
87
|
+
this.setValue(0);
|
|
45
88
|
this.inputValue = '0:00'; // TO-DO: resolve this scenario
|
|
46
89
|
}
|
|
47
90
|
}
|
|
48
91
|
else {
|
|
49
|
-
this.inputValue = this.
|
|
92
|
+
this.inputValue = this._durationPipe.transform(this.value, this.emptyValueText);
|
|
50
93
|
}
|
|
51
94
|
}
|
|
52
95
|
}
|
|
53
96
|
ngOnInit() { }
|
|
54
97
|
blockNonNumberOrSemicolon(e) {
|
|
55
98
|
this.isValueSetInternally = false;
|
|
56
|
-
if (!(e.event.key === 'Enter' ||
|
|
57
|
-
e.event.key === 'NumpadEnter' ||
|
|
58
|
-
e.event.key === 'Delete' ||
|
|
59
|
-
e.event.key === 'Tab' ||
|
|
60
|
-
e.event.key === 'Backspace' ||
|
|
61
|
-
e.event.key === 'ArrowLeft' ||
|
|
62
|
-
e.event.key === 'ArrowRight' ||
|
|
63
|
-
e.event.key === 'ArrowTop' ||
|
|
64
|
-
e.event.key === 'ArrowBottom')) {
|
|
65
|
-
const regexNumberOfSemicolon = /\d|:/;
|
|
66
|
-
if (!regexNumberOfSemicolon.test(e.event.key)) {
|
|
67
|
-
e.event.preventDefault();
|
|
68
|
-
console.log(`${e.event.key} is not valid`);
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
this.isValueEmpty = false;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
99
|
}
|
|
75
|
-
resolveInput(
|
|
100
|
+
resolveInput() {
|
|
76
101
|
if (!this.isValueSetInternally) {
|
|
77
|
-
if (this.
|
|
78
|
-
//
|
|
79
|
-
|
|
80
|
-
this.setValue(null);
|
|
102
|
+
if (!this._durationInputResolver.isValidInput(this.inputValue)) {
|
|
103
|
+
// we have invalid input. use old value
|
|
104
|
+
this.setInputValueInternally(this.value);
|
|
81
105
|
}
|
|
82
106
|
else {
|
|
83
|
-
const resolvedValue = this._durationInputResolver.resolve(
|
|
107
|
+
const resolvedValue = this._durationInputResolver.resolve(this.inputValue);
|
|
84
108
|
if (resolvedValue === null && this.allowEmptyValue) {
|
|
85
109
|
this.setValue(null);
|
|
86
110
|
}
|
|
@@ -99,32 +123,23 @@ export class SdsDurationBoxComponent {
|
|
|
99
123
|
this.setValue(value);
|
|
100
124
|
}
|
|
101
125
|
setValue(value) {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
this.isValueEmpty = true;
|
|
107
|
-
this.isValueSetInternally = true;
|
|
108
|
-
this.inputValue = this.emptyValueText;
|
|
109
|
-
}
|
|
110
|
-
else if (typeof value === 'number') {
|
|
111
|
-
this.isValueEmpty = false;
|
|
112
|
-
this.isValueSetInternally = true;
|
|
113
|
-
this.inputValue = this.minutesToDurationString(this.value);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
126
|
+
this.isValueEmpty = (value === null);
|
|
127
|
+
this.value = value;
|
|
128
|
+
this.valueChange.emit(this.value);
|
|
129
|
+
this.setInputValueInternally(value);
|
|
116
130
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
131
|
+
setInputValueInternally(value) {
|
|
132
|
+
this.isValueSetInternally = true;
|
|
133
|
+
setTimeout(() => {
|
|
134
|
+
this.inputValue = this._durationPipe.transform(this.value, this.emptyValueText);
|
|
135
|
+
}, 0);
|
|
121
136
|
}
|
|
122
137
|
}
|
|
123
138
|
SdsDurationBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SdsDurationBoxComponent, deps: [{ token: i1.DurationInputResolverService }], target: i0.ɵɵFactoryTarget.Component });
|
|
124
|
-
SdsDurationBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: SdsDurationBoxComponent, selector: "sds-duration-box", inputs: { value: "value", allowEmptyValue: "allowEmptyValue", emptyValueText: "emptyValueText", options: "options", width: "width"
|
|
139
|
+
SdsDurationBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: SdsDurationBoxComponent, selector: "sds-duration-box", inputs: { value: "value", allowEmptyValue: "allowEmptyValue", emptyValueText: "emptyValueText", options: "options", width: "width", disabled: "disabled", showClearButton: "showClearButton" }, outputs: { valueChange: "valueChange" }, usesOnChanges: true, ngImport: i0, template: "<dx-text-box\n #textbox\n [id]=\"elementUUID\"\n class=\"sds-durationbox\"\n [(value)]=\"inputValue\"\n (onKeyDown)=\"blockNonNumberOrSemicolon($event)\"\n (onChange)=\"resolveInput()\"\n [width]=\"width\"\n [disabled]=\"disabled\"\n >\n\n <!-- (onValueChanged)=\"resolveInput($event)\" -->\n\n <dxi-button\n *ngIf=\"allowEmptyValue && showClearButton\"\n name=\"clearValue\"\n location=\"after\"\n [options]=\"clearValueButton\"\n ></dxi-button>\n <dxi-button\n *ngIf=\"options && options.length > 0\"\n name=\"optionsDropdown\"\n location=\"after\"\n [options]=\"optionsDropdownButton\"\n ></dxi-button>\n</dx-text-box>\n\n\n<dx-popover\n target=\"#{{elementUUID}}\"\n [(visible)]=\"showOptions\"\n [minWidth]=\"width\"\n [hideOnOutsideClick]=\"true\"\n [wrapperAttr]=\"{ class: 'sds-durationbox-options-popover' }\"\n >\n\n <div *dxTemplate=\"let data of 'content'\">\n <dx-scroll-view>\n <button\n class=\"dropdown-item border-0\"\n [class.selected] = \"isValueEmpty\"\n (click)=\"applyOption(null)\"\n > {{ emptyValueText}}\n </button>\n\n <div *ngFor=\"let option of options\">\n <button\n class=\"dropdown-item border-0\"\n [class.selected] = \"option === value\"\n (click)=\"applyOption(option)\"\n > {{option | sdsDurationFormat}}\n </button>\n </div>\n </dx-scroll-view>\n </div>\n</dx-popover>", styles: ["::ng-deep .sds-durationbox .sds-durationbox-clear-button .dx-icon{color:#999}::ng-deep .sds-durationbox-options-popover .dx-popup-content{padding:.25rem;font-size:1rem}::ng-deep .sds-durationbox-options-popover .dropdown-item:focus{outline:none}::ng-deep .sds-durationbox-options-popover .dropdown-item.selected{background-color:#dee2e6}\n"], components: [{ type: i2.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { type: i3.DxiButtonComponent, selector: "dxi-button", inputs: ["location", "name", "options", "cssClass", "disabled", "hint", "icon", "onClick", "template", "text", "visible"] }, { type: i2.DxPopoverComponent, selector: "dx-popover", inputs: ["animation", "closeOnOutsideClick", "container", "contentTemplate", "copyRootClassesToWrapper", "deferRendering", "disabled", "elementAttr", "height", "hideEvent", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "maxHeight", "maxWidth", "minHeight", "minWidth", "position", "rtlEnabled", "shading", "shadingColor", "showCloseButton", "showEvent", "showTitle", "target", "title", "titleTemplate", "toolbarItems", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onShowing", "onShown", "onTitleRendered", "animationChange", "closeOnOutsideClickChange", "containerChange", "contentTemplateChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "disabledChange", "elementAttrChange", "heightChange", "hideEventChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "maxHeightChange", "maxWidthChange", "minHeightChange", "minWidthChange", "positionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showCloseButtonChange", "showEventChange", "showTitleChange", "targetChange", "titleChange", "titleTemplateChange", "toolbarItemsChange", "visibleChange", "widthChange", "wrapperAttrChange"] }, { type: i2.DxScrollViewComponent, selector: "dx-scroll-view", inputs: ["bounceEnabled", "direction", "disabled", "elementAttr", "height", "pulledDownText", "pullingDownText", "reachBottomText", "refreshingText", "rtlEnabled", "scrollByContent", "scrollByThumb", "showScrollbar", "useNative", "width"], outputs: ["onDisposing", "onInitialized", "onOptionChanged", "onPullDown", "onReachBottom", "onScroll", "onUpdated", "bounceEnabledChange", "directionChange", "disabledChange", "elementAttrChange", "heightChange", "pulledDownTextChange", "pullingDownTextChange", "reachBottomTextChange", "refreshingTextChange", "rtlEnabledChange", "scrollByContentChange", "scrollByThumbChange", "showScrollbarChange", "useNativeChange", "widthChange"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "sdsDurationFormat": i6.SdsDurationFormatPipe } });
|
|
125
140
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SdsDurationBoxComponent, decorators: [{
|
|
126
141
|
type: Component,
|
|
127
|
-
args: [{ selector: 'sds-duration-box', template: "<dx-text-box\n #textbox\n [id]=\"elementUUID\"\n [value]=\"inputValue\"\n (onKeyDown)=\"blockNonNumberOrSemicolon($event)\"\n (
|
|
142
|
+
args: [{ selector: 'sds-duration-box', template: "<dx-text-box\n #textbox\n [id]=\"elementUUID\"\n class=\"sds-durationbox\"\n [(value)]=\"inputValue\"\n (onKeyDown)=\"blockNonNumberOrSemicolon($event)\"\n (onChange)=\"resolveInput()\"\n [width]=\"width\"\n [disabled]=\"disabled\"\n >\n\n <!-- (onValueChanged)=\"resolveInput($event)\" -->\n\n <dxi-button\n *ngIf=\"allowEmptyValue && showClearButton\"\n name=\"clearValue\"\n location=\"after\"\n [options]=\"clearValueButton\"\n ></dxi-button>\n <dxi-button\n *ngIf=\"options && options.length > 0\"\n name=\"optionsDropdown\"\n location=\"after\"\n [options]=\"optionsDropdownButton\"\n ></dxi-button>\n</dx-text-box>\n\n\n<dx-popover\n target=\"#{{elementUUID}}\"\n [(visible)]=\"showOptions\"\n [minWidth]=\"width\"\n [hideOnOutsideClick]=\"true\"\n [wrapperAttr]=\"{ class: 'sds-durationbox-options-popover' }\"\n >\n\n <div *dxTemplate=\"let data of 'content'\">\n <dx-scroll-view>\n <button\n class=\"dropdown-item border-0\"\n [class.selected] = \"isValueEmpty\"\n (click)=\"applyOption(null)\"\n > {{ emptyValueText}}\n </button>\n\n <div *ngFor=\"let option of options\">\n <button\n class=\"dropdown-item border-0\"\n [class.selected] = \"option === value\"\n (click)=\"applyOption(option)\"\n > {{option | sdsDurationFormat}}\n </button>\n </div>\n </dx-scroll-view>\n </div>\n</dx-popover>", styles: ["::ng-deep .sds-durationbox .sds-durationbox-clear-button .dx-icon{color:#999}::ng-deep .sds-durationbox-options-popover .dx-popup-content{padding:.25rem;font-size:1rem}::ng-deep .sds-durationbox-options-popover .dropdown-item:focus{outline:none}::ng-deep .sds-durationbox-options-popover .dropdown-item.selected{background-color:#dee2e6}\n"] }]
|
|
128
143
|
}], ctorParameters: function () { return [{ type: i1.DurationInputResolverService }]; }, propDecorators: { value: [{
|
|
129
144
|
type: Input
|
|
130
145
|
}], valueChange: [{
|
|
@@ -137,8 +152,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImpor
|
|
|
137
152
|
type: Input
|
|
138
153
|
}], width: [{
|
|
139
154
|
type: Input
|
|
140
|
-
}],
|
|
141
|
-
type:
|
|
142
|
-
|
|
155
|
+
}], disabled: [{
|
|
156
|
+
type: Input
|
|
157
|
+
}], showClearButton: [{
|
|
158
|
+
type: Input
|
|
143
159
|
}] } });
|
|
144
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVyYXRpb24tYm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zZHMtY29tcG9uZW50cy9zcmMvbGliL2R1cmF0aW9uLWJveC9kdXJhdGlvbi1ib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNkcy1jb21wb25lbnRzL3NyYy9saWIvZHVyYXRpb24tYm94L2R1cmF0aW9uLWJveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVNoSSxNQUFNLE9BQU8sdUJBQXVCO0lBdUNoQyxZQUNZLHNCQUFvRDtRQUFwRCwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQThCO1FBdEN2RCxVQUFLLEdBQWtCLElBQUksQ0FBQztRQUMzQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBRWpELG9CQUFlLEdBQVksSUFBSSxDQUFDO1FBQ2hDLG1CQUFjLEdBQVcsU0FBUyxDQUFDO1FBR25DLFVBQUssR0FBVyxPQUFPLENBQUM7UUFLMUIsZ0JBQVcsR0FBRyxTQUFTLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRTlDLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFDeEIsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFFN0IsMEJBQXFCLEdBQUk7WUFDNUIsSUFBSSxFQUFFLFVBQVU7WUFDaEIsV0FBVyxFQUFFLE1BQU07WUFDbkIsT0FBTyxFQUFFLEdBQUcsRUFBRTtnQkFDVixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUN6QyxDQUFDO1NBQ0osQ0FBQTtRQUVNLHFCQUFnQixHQUFJO1lBQ3ZCLElBQUksRUFBRSxPQUFP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QUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyQyxNQUFNLElBQUksR0FBRyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQzFCLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ3RGLENBQUM7O29IQXBJUSx1QkFBdUI7d0dBQXZCLHVCQUF1Qiw4V0NUcEMsb29EQXlEYTsyRkRoREEsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNJLGtCQUFrQjttSEFNbkIsS0FBSztzQkFBYixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBRUUsZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRWdDLE9BQU87c0JBQTVDLFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEeFRleHRCb3hDb21wb25lbnQgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXInO1xuaW1wb3J0IHsgRHVyYXRpb25JbnB1dFJlc29sdmVyU2VydmljZSB9IGZyb20gJy4vZHVyYXRpb24taW5wdXQtcmVzb2x2ZXIuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2RzLWR1cmF0aW9uLWJveCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2R1cmF0aW9uLWJveC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZHVyYXRpb24tYm94LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFNkc0R1cmF0aW9uQm94Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuXG4gICAgQElucHV0KCkgdmFsdWU6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyIHwgbnVsbD4oKTtcblxuICAgIEBJbnB1dCgpIGFsbG93RW1wdHlWYWx1ZTogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgZW1wdHlWYWx1ZVRleHQ6IHN0cmluZyA9ICdub3Qgc2V0JztcblxuICAgIEBJbnB1dCgpIG9wdGlvbnM/OiBudW1iZXJbXTtcbiAgICBASW5wdXQoKSB3aWR0aDogc3RyaW5nID0gJzEwcmVtJztcblxuICAgIEBWaWV3Q2hpbGQoJ3RleHRib3gnLCB7c3RhdGljOiB0cnVlfSkgdGV4dGJveD86IER4VGV4dEJveENvbXBvbmVudDtcblxuXG4gICAgcHVibGljIGVsZW1lbnRVVUlEID0gJ3Nkcy1kYi0nICsgY3J5cHRvLnJhbmRvbVVVSUQoKTtcblxuICAgIHB1YmxpYyBpbnB1dFZhbHVlOiBzdHJpbmcgPSAnJztcbiAgICBwdWJsaWMgc2hvd09wdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBcbiAgICBwdWJsaWMgb3B0aW9uc0Ryb3Bkb3duQnV0dG9uID0gIHtcbiAgICAgICAgaWNvbjogJ3NwaW5kb3duJyxcbiAgICAgICAgc3R5bGluZ01vZGU6ICd0ZXh0JyxcbiAgICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93T3B0aW9ucyA9ICF0aGlzLnNob3dPcHRpb25zO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyVmFsdWVCdXR0b24gPSAge1xuICAgICAgICBpY29uOiAnY2xlYXInLFxuICAgICAgICBzdHlsaW5nTW9kZTogJ3RleHQnLFxuICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5T3B0aW9uKG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGlzVmFsdWVFbXB0eSA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBpc1ZhbHVlU2V0SW50ZXJuYWxseSA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2R1cmF0aW9uSW5wdXRSZXNvbHZlcjogRHVyYXRpb25JbnB1dFJlc29sdmVyU2VydmljZVxuICAgICkge31cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ3ZhbHVlJ10pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYWxsb3dFbXB0eVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNWYWx1ZUVtcHR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gdGhpcy5lbXB0eVZhbHVlVGV4dDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSAnMDowMCc7IC8vIFRPLURPOiByZXNvbHZlIHRoaXMgc2NlbmFyaW9cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLm1pbnV0ZXNUb0R1cmF0aW9uU3RyaW5nKHRoaXMudmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHt9XG5cbiAgICBwdWJsaWMgYmxvY2tOb25OdW1iZXJPclNlbWljb2xvbihlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5pc1ZhbHVlU2V0SW50ZXJuYWxseSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghKFxuICAgICAgICAgICAgZS5ldmVudC5rZXkgPT09ICdFbnRlcicgfHwgXG4gICAgICAgICAgICBlLmV2ZW50LmtleSA9PT0gJ051bXBhZEVudGVyJyB8fCBcbiAgICAgICAgICAgIGUuZXZlbnQua2V5ID09PSAnRGVsZXRlJyB8fCBcbiAgICAgICAgICAgIGUuZXZlbnQua2V5ID09PSAnVGFiJyB8fFxuICAgICAgICAgICAgZS5ldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnIHx8XG4gICAgICAgICAgICBlLmV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcgfHxcbiAgICAgICAgICAgIGUuZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcgfHxcbiAgICAgICAgICAgIGUuZXZlbnQua2V5ID09PSAnQXJyb3dUb3AnIHx8XG4gICAgICAgICAgICBlLmV2ZW50LmtleSA9PT0gJ0Fycm93Qm90dG9tJ1xuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgY29uc3QgcmVnZXhOdW1iZXJPZlNlbWljb2xvbiA9IC9cXGR8Oi87XG4gICAgICAgICAgICBpZiAoIXJlZ2V4TnVtYmVyT2ZTZW1pY29sb24udGVzdChlLmV2ZW50LmtleSkpIHtcbiAgICAgICAgICAgICAgICBlLmV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCR7ZS5ldmVudC5rZXl9IGlzIG5vdCB2YWxpZGApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmFsdWVFbXB0eSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlc29sdmVJbnB1dChkYXRhOiBhbnkpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsdWVTZXRJbnRlcm5hbGx5KXtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eSB8fCAoZGF0YS52YWx1ZSA9PT0gJycgJiYgdGhpcy5hbGxvd0VtcHR5VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy5pbnB1dFZhbHVlID0gdGhpcy5lbXB0eVZhbHVlVGV4dHRoaXNcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmFwcGx5T3B0aW9uKG51bGwpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRWYWx1ZSA9IHRoaXMuX2R1cmF0aW9uSW5wdXRSZXNvbHZlci5yZXNvbHZlKGRhdGEudmFsdWUpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlZFZhbHVlID09PSBudWxsICYmIHRoaXMuYWxsb3dFbXB0eVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNvbHZlZFZhbHVlID09PSBudWxsICYmICF0aGlzLmFsbG93RW1wdHlWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKHJlc29sdmVkVmFsdWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUocmVzb2x2ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFwcGx5T3B0aW9uKHZhbHVlOiBudW1iZXIgfCBudWxsKXtcbiAgICAgICAgdGhpcy5zaG93T3B0aW9ucyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzVmFsdWVTZXRJbnRlcm5hbGx5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VmFsdWUodmFsdWU6IG51bWJlciB8IG51bGwpe1xuICAgICAgICBpZiAoICh0aGlzLmlzVmFsdWVFbXB0eSAmJiB2YWx1ZSAhPSBudWxsKSAgfHwgKCF0aGlzLmlzVmFsdWVFbXB0eSAmJiB0aGlzLnZhbHVlICE9IHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1ZhbHVlRW1wdHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNWYWx1ZVNldEludGVybmFsbHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IHRoaXMuZW1wdHlWYWx1ZVRleHQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmFsdWVFbXB0eSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNWYWx1ZVNldEludGVybmFsbHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IHRoaXMubWludXRlc1RvRHVyYXRpb25TdHJpbmcodGhpcy52YWx1ZSBhcyBudW1iZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBwcml2YXRlIG1pbnV0ZXNUb0R1cmF0aW9uU3RyaW5nKG1pbnV0ZXM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcihtaW51dGVzLzYwKTtcbiAgICAgICAgY29uc3QgbWlucyA9IG1pbnV0ZXMgJSA2MDtcbiAgICAgICAgcmV0dXJuIGAke2hvdXJzLnRvU3RyaW5nKCkucGFkU3RhcnQoMSwgXCIwXCIpfToke21pbnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9YDtcbiAgICB9XG59XG4iLCI8ZHgtdGV4dC1ib3hcbiAgICAjdGV4dGJveFxuICAgIFtpZF09XCJlbGVtZW50VVVJRFwiXG4gICAgW3ZhbHVlXT1cImlucHV0VmFsdWVcIlxuICAgIChvbktleURvd24pPVwiYmxvY2tOb25OdW1iZXJPclNlbWljb2xvbigkZXZlbnQpXCJcbiAgICAob25WYWx1ZUNoYW5nZWQpPVwicmVzb2x2ZUlucHV0KCRldmVudClcIlxuICAgIFt3aWR0aF09XCJ3aWR0aFwiXG4gICAgPlxuICAgIDxkeGktYnV0dG9uXG4gICAgICAgICpuZ0lmPVwiYWxsb3dFbXB0eVZhbHVlXCJcbiAgICAgICAgbmFtZT1cImNsZWFyVmFsdWVcIlxuICAgICAgICBsb2NhdGlvbj1cImFmdGVyXCJcbiAgICAgICAgW29wdGlvbnNdPVwiY2xlYXJWYWx1ZUJ1dHRvblwiXG4gICAgPjwvZHhpLWJ1dHRvbj5cbiAgICA8ZHhpLWJ1dHRvblxuICAgICAgICBcbiAgICAgICAgKm5nSWY9XCJvcHRpb25zICYmIG9wdGlvbnMubGVuZ3RoID4gMFwiXG4gICAgICAgIG5hbWU9XCJvcHRpb25zRHJvcGRvd25cIlxuICAgICAgICBsb2NhdGlvbj1cImFmdGVyXCJcbiAgICAgICAgW29wdGlvbnNdPVwib3B0aW9uc0Ryb3Bkb3duQnV0dG9uXCJcbiAgICA+PC9keGktYnV0dG9uPlxuPC9keC10ZXh0LWJveD5cblxuXG48ZHgtcG9wb3ZlclxuICAgIHRhcmdldD1cIiN7e2VsZW1lbnRVVUlEfX1cIlxuICAgIFsodmlzaWJsZSldPVwic2hvd09wdGlvbnNcIlxuICAgIFt3aWR0aF09XCJ3aWR0aFwiXG4gICAgW2Nsb3NlT25PdXRzaWRlQ2xpY2tdPVwidHJ1ZVwiXG4gICAgW3dyYXBwZXJBdHRyXT1cInsgY2xhc3M6ICdzZHMtZHVyYXRpb25ib3gtb3B0aW9ucy1wb3BvdmVyJyB9XCJcbiAgICA+XG5cbiAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGRhdGEgb2YgJ2NvbnRlbnQnXCI+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGJvcmRlci0wXCJcbiAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF0gPSBcImlzVmFsdWVFbXB0eVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlPcHRpb24obnVsbClcIlxuICAgICAgICAgICAgPiB7eyBlbXB0eVZhbHVlVGV4dH19XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGJvcmRlci0wXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdID0gXCJvcHRpb24gPT09IHZhbHVlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICAgICA+IHt7b3B0aW9uIHwgc2RzRHVyYXRpb25Gb3JtYXR9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSA8ZGl2ICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9uc1wiXG4gICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwLTEgbXktMSBteC0xIG92ZXJmbG93LWF2YXRhci1jb250YWluZXJcIiA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtbC0yIHBsLTFcIj5cbiAgICAgICAgICAgIHt7b3B0aW9uIHwgc2RzRHVyYXRpb25Gb3JtYXR9fVxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gLS0+XG48L2R4LXBvcG92ZXI+Il19
|
|
160
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVyYXRpb24tYm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zZHMtY29tcG9uZW50cy9zcmMvbGliL2R1cmF0aW9uLWJveC9kdXJhdGlvbi1ib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNkcy1jb21wb25lbnRzL3NyYy9saWIvZHVyYXRpb24tYm94L2R1cmF0aW9uLWJveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sOERBQThELENBQUM7Ozs7Ozs7O0FBUXJHLE1BQU0sT0FBTyx1QkFBdUI7SUF1RWhDLFlBQ1ksc0JBQW9EO1FBQXBELDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBOEI7UUF2RWhFOzs7OztXQUtHO1FBQ00sVUFBSyxHQUFrQixJQUFJLENBQUM7UUFDM0IsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQUUxRDs7Ozs7V0FLRztRQUNNLG9CQUFlLEdBQVksSUFBSSxDQUFDO1FBRXpDOzs7OztXQUtHO1FBQ00sbUJBQWMsR0FBVyxTQUFTLENBQUM7UUFVNUM7Ozs7O1dBS0c7UUFDTSxVQUFLLEdBQVcsT0FBTyxDQUFDO1FBRWpDOzs7OztXQUtHO1FBQ00sYUFBUSxHQUFZLEtBQUssQ0FBQztRQUVuQzs7Ozs7V0FLRztRQUNNLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBRW5DLGdCQUFXLEdBQUcsU0FBUyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUU5QyxlQUFVLEdBQVcsRUFBRSxDQUFDO1FBQ3hCLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBSzdCLGlCQUFZLEdBQUcsS0FBSyxD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QUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRU8sdUJBQXVCLENBQUMsS0FBb0I7UUFDaEQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztRQUNqQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNwRixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDVixDQUFDOztvSEE5SlEsdUJBQXVCO3dHQUF2Qix1QkFBdUIsc1RDVHBDLGduREF1RGE7MkZEOUNBLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDSSxrQkFBa0I7bUhBV25CLEtBQUs7c0JBQWIsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQVFFLGVBQWU7c0JBQXZCLEtBQUs7Z0JBUUcsY0FBYztzQkFBdEIsS0FBSztnQkFRRyxPQUFPO3NCQUFmLEtBQUs7Z0JBUUcsS0FBSztzQkFBYixLQUFLO2dCQVFHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBUUcsZUFBZTtzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2RzRHVyYXRpb25Gb3JtYXRQaXBlIH0gZnJvbSAnQHNwaWNhaW50ZXJuYXRpb25hbC9uZ3gtc2RzLWNvbXBvbmVudHMvc3JjL2xpYi9kdXJhdGlvbi1waXBlJztcbmltcG9ydCB7IER1cmF0aW9uSW5wdXRSZXNvbHZlclNlcnZpY2UgfSBmcm9tICcuL2R1cmF0aW9uLWlucHV0LXJlc29sdmVyLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3Nkcy1kdXJhdGlvbi1ib3gnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kdXJhdGlvbi1ib3guY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2R1cmF0aW9uLWJveC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBTZHNEdXJhdGlvbkJveENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgICAvKipcbiAgICAgKiBEdXJhdGlvbiBsZW5ndGggZXhwcmVzc2VkIGluIG1pbnV0ZXM7IHdoZW4gd2UgYWxsb3cgZW1wdHkgdmFsdWVzIHRoaXMgcHJvcGVydHkgY2FuIGJlIG51bGwuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7KG51bWJlciB8IG51bGwpfVxuICAgICAqIEBtZW1iZXJvZiBTZHNEdXJhdGlvbkJveENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHZhbHVlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlciB8IG51bGw+KCk7XG5cbiAgICAvKipcbiAgICAgKiBBbGxvdyB1c2VyIHRvIHNlbGVjdCBlbXB0eSB2YWx1ZS4gWW91IHNob3VsZCBwcm92aWRlIGVtcHR5VmFsdWVUZXh0IGluIHRoaXMgY2FzZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBTZHNEdXJhdGlvbkJveENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGFsbG93RW1wdHlWYWx1ZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiAnZW1wdHlWYWx1ZVRleHQnIC0gdGV4dCB0byBiZSBkaXNwbGF5ZWQgd2hlbiB2YWx1ZSBpcyBjbGVhcmVkXG4gICAgICpcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBTZHNEdXJhdGlvbkJveENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGVtcHR5VmFsdWVUZXh0OiBzdHJpbmcgPSAnbm90IHNldCc7XG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBvZiBwcmUtZGVmaW5lZCBkdXJhdGlvbnMgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCBpbiBkcm9wZG93biBmb3IgZWFzaWVyIHNlbGVjdGlvbi5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyb2YgU2RzRHVyYXRpb25Cb3hDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBvcHRpb25zPzogbnVtYmVyW107XG4gICAgXG4gICAgLyoqXG4gICAgICogV2lkdGggb2YgY29tcG9uZW50XG4gICAgICpcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJvZiBTZHNEdXJhdGlvbkJveENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHdpZHRoOiBzdHJpbmcgPSAnMTByZW0nO1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIFVJIGNvbXBvbmVudCByZXNwb25kcyB0byB1c2VyIGludGVyYWN0aW9uLlxuICAgICAqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFNkc0R1cmF0aW9uQm94Q29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB0byBkaXNwbGF5IHRoZSBDbGVhciBidXR0b24gaW4gdGhlIFVJIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJvZiBTZHNEdXJhdGlvbkJveENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHNob3dDbGVhckJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgcHVibGljIGVsZW1lbnRVVUlEID0gJ3Nkcy1kYi0nICsgY3J5cHRvLnJhbmRvbVVVSUQoKTtcblxuICAgIHB1YmxpYyBpbnB1dFZhbHVlOiBzdHJpbmcgPSAnJztcbiAgICBwdWJsaWMgc2hvd09wdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBcbiAgICBwdWJsaWMgb3B0aW9uc0Ryb3Bkb3duQnV0dG9uO1xuICAgIHB1YmxpYyBjbGVhclZhbHVlQnV0dG9uO1xuXG4gICAgcHVibGljIGlzVmFsdWVFbXB0eSA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBpc1ZhbHVlU2V0SW50ZXJuYWxseSA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2R1cmF0aW9uUGlwZTogU2RzRHVyYXRpb25Gb3JtYXRQaXBlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2R1cmF0aW9uSW5wdXRSZXNvbHZlcjogRHVyYXRpb25JbnB1dFJlc29sdmVyU2VydmljZSxcbiAgICApIHtcbiAgICAgICAgdGhpcy5fZHVyYXRpb25QaXBlID0gbmV3IFNkc0R1cmF0aW9uRm9ybWF0UGlwZSgpO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5vcHRpb25zRHJvcGRvd25CdXR0b24gPSAge1xuICAgICAgICAgICAgaWNvbjogJ3NwaW5kb3duJyxcbiAgICAgICAgICAgIHN0eWxpbmdNb2RlOiAndGV4dCcsXG4gICAgXG4gICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93T3B0aW9ucyA9ICF0aGlzLnNob3dPcHRpb25zO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbGVhclZhbHVlQnV0dG9uID0gIHtcbiAgICAgICAgICAgIGljb246ICdjbGVhcicsXG4gICAgICAgICAgICBzdHlsaW5nTW9kZTogJ3RleHQnLFxuICAgICAgICAgICAgZWxlbWVudEF0dHI6IHsgY2xhc3M6ICdzZHMtZHVyYXRpb25ib3gtY2xlYXItYnV0dG9uJyB9LFxuICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlPcHRpb24obnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gICAgICAgIFxuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ3ZhbHVlJ10pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYWxsb3dFbXB0eVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuaXNWYWx1ZUVtcHR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5pbnB1dFZhbHVlID0gdGhpcy5lbXB0eVZhbHVlVGV4dDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKDApO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gJzA6MDAnOyAvLyBUTy1ETzogcmVzb2x2ZSB0aGlzIHNjZW5hcmlvXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gdGhpcy5fZHVyYXRpb25QaXBlLnRyYW5zZm9ybSh0aGlzLnZhbHVlLCB0aGlzLmVtcHR5VmFsdWVUZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge31cblxuICAgIHB1YmxpYyBibG9ja05vbk51bWJlck9yU2VtaWNvbG9uKGU6IGFueSkge1xuICAgICAgICB0aGlzLmlzVmFsdWVTZXRJbnRlcm5hbGx5ID0gZmFsc2U7XG4gICAgfVxuXG5cbiAgICBwdWJsaWMgcmVzb2x2ZUlucHV0KCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWx1ZVNldEludGVybmFsbHkpe1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9kdXJhdGlvbklucHV0UmVzb2x2ZXIuaXNWYWxpZElucHV0KHRoaXMuaW5wdXRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAvLyB3ZSBoYXZlIGludmFsaWQgaW5wdXQuIHVzZSBvbGQgdmFsdWVcbiAgICAgICAgICAgICAgICB0aGlzLnNldElucHV0VmFsdWVJbnRlcm5hbGx5KHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlZFZhbHVlID0gdGhpcy5fZHVyYXRpb25JbnB1dFJlc29sdmVyLnJlc29sdmUodGhpcy5pbnB1dFZhbHVlKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZWRWYWx1ZSA9PT0gbnVsbCAmJiB0aGlzLmFsbG93RW1wdHlWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKG51bGwpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzb2x2ZWRWYWx1ZSA9PT0gbnVsbCAmJiAhdGhpcy5hbGxvd0VtcHR5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShyZXNvbHZlZFZhbHVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKHJlc29sdmVkVmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhcHBseU9wdGlvbih2YWx1ZTogbnVtYmVyIHwgbnVsbCl7XG4gICAgICAgIHRoaXMuc2hvd09wdGlvbnMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc1ZhbHVlU2V0SW50ZXJuYWxseSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNldFZhbHVlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFZhbHVlKHZhbHVlOiBudW1iZXIgfCBudWxsKXtcbiAgICAgICAgdGhpcy5pc1ZhbHVlRW1wdHkgPSAodmFsdWUgPT09IG51bGwpO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlSW50ZXJuYWxseSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRJbnB1dFZhbHVlSW50ZXJuYWxseSh2YWx1ZTogbnVtYmVyIHwgbnVsbCl7XG4gICAgICAgIHRoaXMuaXNWYWx1ZVNldEludGVybmFsbHkgPSB0cnVlO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IHRoaXMuX2R1cmF0aW9uUGlwZS50cmFuc2Zvcm0odGhpcy52YWx1ZSwgdGhpcy5lbXB0eVZhbHVlVGV4dCk7XG4gICAgICAgIH0sIDApO1xuICAgIH1cbn1cbiIsIjxkeC10ZXh0LWJveFxuICAgICN0ZXh0Ym94XG4gICAgW2lkXT1cImVsZW1lbnRVVUlEXCJcbiAgICBjbGFzcz1cInNkcy1kdXJhdGlvbmJveFwiXG4gICAgWyh2YWx1ZSldPVwiaW5wdXRWYWx1ZVwiXG4gICAgKG9uS2V5RG93bik9XCJibG9ja05vbk51bWJlck9yU2VtaWNvbG9uKCRldmVudClcIlxuICAgIChvbkNoYW5nZSk9XCJyZXNvbHZlSW5wdXQoKVwiXG4gICAgW3dpZHRoXT1cIndpZHRoXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgID5cblxuICAgIDwhLS0gKG9uVmFsdWVDaGFuZ2VkKT1cInJlc29sdmVJbnB1dCgkZXZlbnQpXCIgLS0+XG5cbiAgICA8ZHhpLWJ1dHRvblxuICAgICAgICAqbmdJZj1cImFsbG93RW1wdHlWYWx1ZSAmJiBzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgICBuYW1lPVwiY2xlYXJWYWx1ZVwiXG4gICAgICAgIGxvY2F0aW9uPVwiYWZ0ZXJcIlxuICAgICAgICBbb3B0aW9uc109XCJjbGVhclZhbHVlQnV0dG9uXCJcbiAgICA+PC9keGktYnV0dG9uPlxuICAgIDxkeGktYnV0dG9uXG4gICAgICAgICpuZ0lmPVwib3B0aW9ucyAmJiBvcHRpb25zLmxlbmd0aCA+IDBcIlxuICAgICAgICBuYW1lPVwib3B0aW9uc0Ryb3Bkb3duXCJcbiAgICAgICAgbG9jYXRpb249XCJhZnRlclwiXG4gICAgICAgIFtvcHRpb25zXT1cIm9wdGlvbnNEcm9wZG93bkJ1dHRvblwiXG4gICAgPjwvZHhpLWJ1dHRvbj5cbjwvZHgtdGV4dC1ib3g+XG5cblxuPGR4LXBvcG92ZXJcbiAgICB0YXJnZXQ9XCIje3tlbGVtZW50VVVJRH19XCJcbiAgICBbKHZpc2libGUpXT1cInNob3dPcHRpb25zXCJcbiAgICBbbWluV2lkdGhdPVwid2lkdGhcIlxuICAgIFtoaWRlT25PdXRzaWRlQ2xpY2tdPVwidHJ1ZVwiXG4gICAgW3dyYXBwZXJBdHRyXT1cInsgY2xhc3M6ICdzZHMtZHVyYXRpb25ib3gtb3B0aW9ucy1wb3BvdmVyJyB9XCJcbiAgICA+XG5cbiAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGRhdGEgb2YgJ2NvbnRlbnQnXCI+XG4gICAgICAgIDxkeC1zY3JvbGwtdmlldz5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gYm9yZGVyLTBcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF0gPSBcImlzVmFsdWVFbXB0eVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImFwcGx5T3B0aW9uKG51bGwpXCJcbiAgICAgICAgICAgICAgICA+IHt7IGVtcHR5VmFsdWVUZXh0fX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGJvcmRlci0wXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXSA9IFwib3B0aW9uID09PSB2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhcHBseU9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICAgICAgICA+IHt7b3B0aW9uIHwgc2RzRHVyYXRpb25Gb3JtYXR9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZHgtc2Nyb2xsLXZpZXc+XG4gICAgPC9kaXY+XG48L2R4LXBvcG92ZXI+Il19
|
|
@@ -37,6 +37,11 @@ export class DurationInputResolverService {
|
|
|
37
37
|
}
|
|
38
38
|
return 0;
|
|
39
39
|
}
|
|
40
|
+
isValidInput(input) {
|
|
41
|
+
const regexNumbersOnly = /^[+-]?\d+$/;
|
|
42
|
+
const regexColonSeparated = /^[+-]?\d+:\d+$/;
|
|
43
|
+
return regexNumbersOnly.test(input) || regexColonSeparated.test(input);
|
|
44
|
+
}
|
|
40
45
|
}
|
|
41
46
|
DurationInputResolverService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: DurationInputResolverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
42
47
|
DurationInputResolverService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: DurationInputResolverService, providedIn: 'root' });
|
|
@@ -46,4 +51,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImpor
|
|
|
46
51
|
providedIn: 'root',
|
|
47
52
|
}]
|
|
48
53
|
}], ctorParameters: function () { return []; } });
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVyYXRpb24taW5wdXQtcmVzb2x2ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zZHMtY29tcG9uZW50cy9zcmMvbGliL2R1cmF0aW9uLWJveC9kdXJhdGlvbi1pbnB1dC1yZXNvbHZlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSzNDLE1BQU0sT0FBTyw0QkFBNEI7SUFFckMsZ0JBQWUsQ0FBQztJQUVULE9BQU8sQ0FBQyxLQUFhO1FBQ3hCLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDOUIsT0FBTyxDQUFDLENBQUM7U0FDWjtRQUVELE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMxQixlQUFlO1lBQ2YsT0FBTyxDQUFDLENBQUM7U0FDWjthQUFNLElBQUksYUFBYSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUM7WUFDakMsMEJBQTBCO1lBQzFCLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEUsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqRSxNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7WUFFcEMsT0FBTyxTQUFTLENBQUM7U0FDcEI7YUFBTSxJQUFJLGFBQWEsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQ2xDLCtCQUErQjtZQUMvQixNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFdEMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ2xCLElBQUksWUFBWSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7Z0JBQzFCLFNBQVMsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUE7YUFDckM7aUJBQU07Z0JBQ0gsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQzFDLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUMvQyxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUM1QyxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzVCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDN0IsU0FBUyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQzthQUNqQztZQUNELE9BQU8sU0FBUyxDQUFDO1NBQ3BCO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRU0sWUFBWSxDQUFDLEtBQWE7UUFDN0IsTUFBTSxnQkFBZ0IsR0FBRyxZQUFZLENBQUM7UUFDdEMsTUFBTSxtQkFBbUIsR0FBSSxnQkFBZ0IsQ0FBQztRQUM5QyxPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0UsQ0FBQzs7eUhBNUNRLDRCQUE0Qjs2SEFBNUIsNEJBQTRCLGNBRnpCLE1BQU07MkZBRVQsNEJBQTRCO2tCQUh4QyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgRHVyYXRpb25JbnB1dFJlc29sdmVyU2VydmljZSB7XG4gICAgXG4gICAgY29uc3RydWN0b3IoKSB7fVxuXG4gICAgcHVibGljIHJlc29sdmUoaW5wdXQ6IHN0cmluZyk6IG51bWJlciB8IG51bGx7XG4gICAgICAgIGlmICghaW5wdXQgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlucHV0U2VnbWVudHMgPSBpbnB1dC5zcGxpdCgnOicpO1xuICAgICAgICBpZiAoaW5wdXRTZWdtZW50cy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICAvL2ludmFsaWQgaW5wdXRcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9IGVsc2UgaWYgKGlucHV0U2VnbWVudHMubGVuZ3RoID09IDIpe1xuICAgICAgICAgICAgLy8gd2UgaGF2ZSBocnMgYW5kIG1pbnV0ZXNcbiAgICAgICAgICAgIGNvbnN0IGhycyA9IHBhcnNlSW50KGlucHV0U2VnbWVudHNbMF0gPyBpbnB1dFNlZ21lbnRzWzBdIDogJzAnKTtcbiAgICAgICAgICAgIGNvbnN0IG1pbnMgPSBwYXJzZUludChpbnB1dFNlZ21lbnRzWzFdID8gaW5wdXRTZWdtZW50c1sxXSA6ICcwJyk7XG4gICAgICAgICAgICBjb25zdCB0b3RhbE1pbnMgPSAoaHJzICogNjApICsgbWlucztcblxuICAgICAgICAgICAgcmV0dXJuIHRvdGFsTWlucztcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dFNlZ21lbnRzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICAvLyB0YWtlIGxhc3QgdHdvIGRpZ2l0cyBhcyBtaW5zXG4gICAgICAgICAgICBjb25zdCBub25TZXBhcmF0ZWQgPSBpbnB1dFNlZ21lbnRzWzBdO1xuXG4gICAgICAgICAgICBsZXQgdG90YWxNaW5zID0gMDtcbiAgICAgICAgICAgIGlmIChub25TZXBhcmF0ZWQubGVuZ3RoIDw9IDIpIHtcbiAgICAgICAgICAgICAgICB0b3RhbE1pbnMgPSBwYXJzZUludChub25TZXBhcmF0ZWQpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RJbmRleCA9IG5vblNlcGFyYXRlZC5sZW5ndGggLSAyO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnQxID0gbm9uU2VwYXJhdGVkLnNsaWNlKDAsIGxhc3RJbmRleCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFydDIgPSBub25TZXBhcmF0ZWQuc2xpY2UobGFzdEluZGV4KTtcbiAgICAgICAgICAgICAgICBjb25zdCBocnMgPSBwYXJzZUludChwYXJ0MSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbWlucyA9IHBhcnNlSW50KHBhcnQyKTtcbiAgICAgICAgICAgICAgICB0b3RhbE1pbnMgPSAoaHJzICogNjApICsgbWluczsgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0b3RhbE1pbnM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7ICAgICAgICBcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNWYWxpZElucHV0KGlucHV0OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgcmVnZXhOdW1iZXJzT25seSA9IC9eWystXT9cXGQrJC87XG4gICAgICAgIGNvbnN0IHJlZ2V4Q29sb25TZXBhcmF0ZWQgPSAgL15bKy1dP1xcZCs6XFxkKyQvO1xuICAgICAgICByZXR1cm4gcmVnZXhOdW1iZXJzT25seS50ZXN0KGlucHV0KSB8fCByZWdleENvbG9uU2VwYXJhdGVkLnRlc3QoaW5wdXQpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Injectable, EventEmitter, Component, Input, Output,
|
|
2
|
+
import { Injectable, EventEmitter, Component, Input, Output, NgModule } from '@angular/core';
|
|
3
3
|
import * as i4 from '@angular/common';
|
|
4
4
|
import { CommonModule } from '@angular/common';
|
|
5
|
+
import * as i6 from '@spicainternational/ngx-sds-components/src/lib/duration-pipe';
|
|
6
|
+
import { SdsDurationFormatPipe, SdsDurationPipeModule } from '@spicainternational/ngx-sds-components/src/lib/duration-pipe';
|
|
5
7
|
import * as i2 from 'devextreme-angular';
|
|
6
8
|
import { DxTextBoxModule, DxPopoverModule, DxScrollViewModule } from 'devextreme-angular';
|
|
7
9
|
import * as i3 from 'devextreme-angular/ui/nested';
|
|
8
10
|
import * as i5 from 'devextreme-angular/core';
|
|
9
|
-
import * as i6 from '@spicainternational/ngx-sds-components/src/lib/duration-pipe';
|
|
10
|
-
import { SdsDurationPipeModule } from '@spicainternational/ngx-sds-components/src/lib/duration-pipe';
|
|
11
11
|
|
|
12
12
|
class DurationInputResolverService {
|
|
13
13
|
constructor() { }
|
|
@@ -46,6 +46,11 @@ class DurationInputResolverService {
|
|
|
46
46
|
}
|
|
47
47
|
return 0;
|
|
48
48
|
}
|
|
49
|
+
isValidInput(input) {
|
|
50
|
+
const regexNumbersOnly = /^[+-]?\d+$/;
|
|
51
|
+
const regexColonSeparated = /^[+-]?\d+:\d+$/;
|
|
52
|
+
return regexNumbersOnly.test(input) || regexColonSeparated.test(input);
|
|
53
|
+
}
|
|
49
54
|
}
|
|
50
55
|
DurationInputResolverService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: DurationInputResolverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
51
56
|
DurationInputResolverService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: DurationInputResolverService, providedIn: 'root' });
|
|
@@ -59,14 +64,55 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImpor
|
|
|
59
64
|
class SdsDurationBoxComponent {
|
|
60
65
|
constructor(_durationInputResolver) {
|
|
61
66
|
this._durationInputResolver = _durationInputResolver;
|
|
67
|
+
/**
|
|
68
|
+
* Duration length expressed in minutes; when we allow empty values this property can be null.
|
|
69
|
+
*
|
|
70
|
+
* @type {(number | null)}
|
|
71
|
+
* @memberof SdsDurationBoxComponent
|
|
72
|
+
*/
|
|
62
73
|
this.value = null;
|
|
63
74
|
this.valueChange = new EventEmitter();
|
|
75
|
+
/**
|
|
76
|
+
* Allow user to select empty value. You should provide emptyValueText in this case.
|
|
77
|
+
*
|
|
78
|
+
* @type {boolean}
|
|
79
|
+
* @memberof SdsDurationBoxComponent
|
|
80
|
+
*/
|
|
64
81
|
this.allowEmptyValue = true;
|
|
82
|
+
/**
|
|
83
|
+
* 'emptyValueText' - text to be displayed when value is cleared
|
|
84
|
+
*
|
|
85
|
+
* @type {string}
|
|
86
|
+
* @memberof SdsDurationBoxComponent
|
|
87
|
+
*/
|
|
65
88
|
this.emptyValueText = 'not set';
|
|
89
|
+
/**
|
|
90
|
+
* Width of component
|
|
91
|
+
*
|
|
92
|
+
* @type {string}
|
|
93
|
+
* @memberof SdsDurationBoxComponent
|
|
94
|
+
*/
|
|
66
95
|
this.width = '10rem';
|
|
96
|
+
/**
|
|
97
|
+
* Specifies whether the UI component responds to user interaction.
|
|
98
|
+
*
|
|
99
|
+
* @type {boolean}
|
|
100
|
+
* @memberof SdsDurationBoxComponent
|
|
101
|
+
*/
|
|
102
|
+
this.disabled = false;
|
|
103
|
+
/**
|
|
104
|
+
* Specifies whether to display the Clear button in the UI component.
|
|
105
|
+
*
|
|
106
|
+
* @type {boolean}
|
|
107
|
+
* @memberof SdsDurationBoxComponent
|
|
108
|
+
*/
|
|
109
|
+
this.showClearButton = false;
|
|
67
110
|
this.elementUUID = 'sds-db-' + crypto.randomUUID();
|
|
68
111
|
this.inputValue = '';
|
|
69
112
|
this.showOptions = false;
|
|
113
|
+
this.isValueEmpty = false;
|
|
114
|
+
this.isValueSetInternally = false;
|
|
115
|
+
this._durationPipe = new SdsDurationFormatPipe();
|
|
70
116
|
this.optionsDropdownButton = {
|
|
71
117
|
icon: 'spindown',
|
|
72
118
|
stylingMode: 'text',
|
|
@@ -77,60 +123,42 @@ class SdsDurationBoxComponent {
|
|
|
77
123
|
this.clearValueButton = {
|
|
78
124
|
icon: 'clear',
|
|
79
125
|
stylingMode: 'text',
|
|
126
|
+
elementAttr: { class: 'sds-durationbox-clear-button' },
|
|
80
127
|
onClick: () => {
|
|
81
128
|
this.applyOption(null);
|
|
82
129
|
}
|
|
83
130
|
};
|
|
84
|
-
this.isValueEmpty = false;
|
|
85
|
-
this.isValueSetInternally = false;
|
|
86
131
|
}
|
|
87
132
|
ngOnChanges(changes) {
|
|
88
133
|
if (changes['value']) {
|
|
89
134
|
if (this.value === null) {
|
|
90
135
|
if (this.allowEmptyValue) {
|
|
91
|
-
this.
|
|
92
|
-
this.
|
|
136
|
+
this.setValue(null);
|
|
137
|
+
// this.isValueEmpty = true;
|
|
138
|
+
// this.inputValue = this.emptyValueText;
|
|
93
139
|
}
|
|
94
140
|
else {
|
|
141
|
+
this.setValue(0);
|
|
95
142
|
this.inputValue = '0:00'; // TO-DO: resolve this scenario
|
|
96
143
|
}
|
|
97
144
|
}
|
|
98
145
|
else {
|
|
99
|
-
this.inputValue = this.
|
|
146
|
+
this.inputValue = this._durationPipe.transform(this.value, this.emptyValueText);
|
|
100
147
|
}
|
|
101
148
|
}
|
|
102
149
|
}
|
|
103
150
|
ngOnInit() { }
|
|
104
151
|
blockNonNumberOrSemicolon(e) {
|
|
105
152
|
this.isValueSetInternally = false;
|
|
106
|
-
if (!(e.event.key === 'Enter' ||
|
|
107
|
-
e.event.key === 'NumpadEnter' ||
|
|
108
|
-
e.event.key === 'Delete' ||
|
|
109
|
-
e.event.key === 'Tab' ||
|
|
110
|
-
e.event.key === 'Backspace' ||
|
|
111
|
-
e.event.key === 'ArrowLeft' ||
|
|
112
|
-
e.event.key === 'ArrowRight' ||
|
|
113
|
-
e.event.key === 'ArrowTop' ||
|
|
114
|
-
e.event.key === 'ArrowBottom')) {
|
|
115
|
-
const regexNumberOfSemicolon = /\d|:/;
|
|
116
|
-
if (!regexNumberOfSemicolon.test(e.event.key)) {
|
|
117
|
-
e.event.preventDefault();
|
|
118
|
-
console.log(`${e.event.key} is not valid`);
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
121
|
-
this.isValueEmpty = false;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
153
|
}
|
|
125
|
-
resolveInput(
|
|
154
|
+
resolveInput() {
|
|
126
155
|
if (!this.isValueSetInternally) {
|
|
127
|
-
if (this.
|
|
128
|
-
//
|
|
129
|
-
|
|
130
|
-
this.setValue(null);
|
|
156
|
+
if (!this._durationInputResolver.isValidInput(this.inputValue)) {
|
|
157
|
+
// we have invalid input. use old value
|
|
158
|
+
this.setInputValueInternally(this.value);
|
|
131
159
|
}
|
|
132
160
|
else {
|
|
133
|
-
const resolvedValue = this._durationInputResolver.resolve(
|
|
161
|
+
const resolvedValue = this._durationInputResolver.resolve(this.inputValue);
|
|
134
162
|
if (resolvedValue === null && this.allowEmptyValue) {
|
|
135
163
|
this.setValue(null);
|
|
136
164
|
}
|
|
@@ -149,32 +177,23 @@ class SdsDurationBoxComponent {
|
|
|
149
177
|
this.setValue(value);
|
|
150
178
|
}
|
|
151
179
|
setValue(value) {
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
this.isValueEmpty = true;
|
|
157
|
-
this.isValueSetInternally = true;
|
|
158
|
-
this.inputValue = this.emptyValueText;
|
|
159
|
-
}
|
|
160
|
-
else if (typeof value === 'number') {
|
|
161
|
-
this.isValueEmpty = false;
|
|
162
|
-
this.isValueSetInternally = true;
|
|
163
|
-
this.inputValue = this.minutesToDurationString(this.value);
|
|
164
|
-
}
|
|
165
|
-
}
|
|
180
|
+
this.isValueEmpty = (value === null);
|
|
181
|
+
this.value = value;
|
|
182
|
+
this.valueChange.emit(this.value);
|
|
183
|
+
this.setInputValueInternally(value);
|
|
166
184
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
185
|
+
setInputValueInternally(value) {
|
|
186
|
+
this.isValueSetInternally = true;
|
|
187
|
+
setTimeout(() => {
|
|
188
|
+
this.inputValue = this._durationPipe.transform(this.value, this.emptyValueText);
|
|
189
|
+
}, 0);
|
|
171
190
|
}
|
|
172
191
|
}
|
|
173
192
|
SdsDurationBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SdsDurationBoxComponent, deps: [{ token: DurationInputResolverService }], target: i0.ɵɵFactoryTarget.Component });
|
|
174
|
-
SdsDurationBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: SdsDurationBoxComponent, selector: "sds-duration-box", inputs: { value: "value", allowEmptyValue: "allowEmptyValue", emptyValueText: "emptyValueText", options: "options", width: "width"
|
|
193
|
+
SdsDurationBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: SdsDurationBoxComponent, selector: "sds-duration-box", inputs: { value: "value", allowEmptyValue: "allowEmptyValue", emptyValueText: "emptyValueText", options: "options", width: "width", disabled: "disabled", showClearButton: "showClearButton" }, outputs: { valueChange: "valueChange" }, usesOnChanges: true, ngImport: i0, template: "<dx-text-box\n #textbox\n [id]=\"elementUUID\"\n class=\"sds-durationbox\"\n [(value)]=\"inputValue\"\n (onKeyDown)=\"blockNonNumberOrSemicolon($event)\"\n (onChange)=\"resolveInput()\"\n [width]=\"width\"\n [disabled]=\"disabled\"\n >\n\n <!-- (onValueChanged)=\"resolveInput($event)\" -->\n\n <dxi-button\n *ngIf=\"allowEmptyValue && showClearButton\"\n name=\"clearValue\"\n location=\"after\"\n [options]=\"clearValueButton\"\n ></dxi-button>\n <dxi-button\n *ngIf=\"options && options.length > 0\"\n name=\"optionsDropdown\"\n location=\"after\"\n [options]=\"optionsDropdownButton\"\n ></dxi-button>\n</dx-text-box>\n\n\n<dx-popover\n target=\"#{{elementUUID}}\"\n [(visible)]=\"showOptions\"\n [minWidth]=\"width\"\n [hideOnOutsideClick]=\"true\"\n [wrapperAttr]=\"{ class: 'sds-durationbox-options-popover' }\"\n >\n\n <div *dxTemplate=\"let data of 'content'\">\n <dx-scroll-view>\n <button\n class=\"dropdown-item border-0\"\n [class.selected] = \"isValueEmpty\"\n (click)=\"applyOption(null)\"\n > {{ emptyValueText}}\n </button>\n\n <div *ngFor=\"let option of options\">\n <button\n class=\"dropdown-item border-0\"\n [class.selected] = \"option === value\"\n (click)=\"applyOption(option)\"\n > {{option | sdsDurationFormat}}\n </button>\n </div>\n </dx-scroll-view>\n </div>\n</dx-popover>", styles: ["::ng-deep .sds-durationbox .sds-durationbox-clear-button .dx-icon{color:#999}::ng-deep .sds-durationbox-options-popover .dx-popup-content{padding:.25rem;font-size:1rem}::ng-deep .sds-durationbox-options-popover .dropdown-item:focus{outline:none}::ng-deep .sds-durationbox-options-popover .dropdown-item.selected{background-color:#dee2e6}\n"], components: [{ type: i2.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { type: i3.DxiButtonComponent, selector: "dxi-button", inputs: ["location", "name", "options", "cssClass", "disabled", "hint", "icon", "onClick", "template", "text", "visible"] }, { type: i2.DxPopoverComponent, selector: "dx-popover", inputs: ["animation", "closeOnOutsideClick", "container", "contentTemplate", "copyRootClassesToWrapper", "deferRendering", "disabled", "elementAttr", "height", "hideEvent", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "maxHeight", "maxWidth", "minHeight", "minWidth", "position", "rtlEnabled", "shading", "shadingColor", "showCloseButton", "showEvent", "showTitle", "target", "title", "titleTemplate", "toolbarItems", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onShowing", "onShown", "onTitleRendered", "animationChange", "closeOnOutsideClickChange", "containerChange", "contentTemplateChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "disabledChange", "elementAttrChange", "heightChange", "hideEventChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "maxHeightChange", "maxWidthChange", "minHeightChange", "minWidthChange", "positionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showCloseButtonChange", "showEventChange", "showTitleChange", "targetChange", "titleChange", "titleTemplateChange", "toolbarItemsChange", "visibleChange", "widthChange", "wrapperAttrChange"] }, { type: i2.DxScrollViewComponent, selector: "dx-scroll-view", inputs: ["bounceEnabled", "direction", "disabled", "elementAttr", "height", "pulledDownText", "pullingDownText", "reachBottomText", "refreshingText", "rtlEnabled", "scrollByContent", "scrollByThumb", "showScrollbar", "useNative", "width"], outputs: ["onDisposing", "onInitialized", "onOptionChanged", "onPullDown", "onReachBottom", "onScroll", "onUpdated", "bounceEnabledChange", "directionChange", "disabledChange", "elementAttrChange", "heightChange", "pulledDownTextChange", "pullingDownTextChange", "reachBottomTextChange", "refreshingTextChange", "rtlEnabledChange", "scrollByContentChange", "scrollByThumbChange", "showScrollbarChange", "useNativeChange", "widthChange"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "sdsDurationFormat": i6.SdsDurationFormatPipe } });
|
|
175
194
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SdsDurationBoxComponent, decorators: [{
|
|
176
195
|
type: Component,
|
|
177
|
-
args: [{ selector: 'sds-duration-box', template: "<dx-text-box\n #textbox\n [id]=\"elementUUID\"\n [value]=\"inputValue\"\n (onKeyDown)=\"blockNonNumberOrSemicolon($event)\"\n (
|
|
196
|
+
args: [{ selector: 'sds-duration-box', template: "<dx-text-box\n #textbox\n [id]=\"elementUUID\"\n class=\"sds-durationbox\"\n [(value)]=\"inputValue\"\n (onKeyDown)=\"blockNonNumberOrSemicolon($event)\"\n (onChange)=\"resolveInput()\"\n [width]=\"width\"\n [disabled]=\"disabled\"\n >\n\n <!-- (onValueChanged)=\"resolveInput($event)\" -->\n\n <dxi-button\n *ngIf=\"allowEmptyValue && showClearButton\"\n name=\"clearValue\"\n location=\"after\"\n [options]=\"clearValueButton\"\n ></dxi-button>\n <dxi-button\n *ngIf=\"options && options.length > 0\"\n name=\"optionsDropdown\"\n location=\"after\"\n [options]=\"optionsDropdownButton\"\n ></dxi-button>\n</dx-text-box>\n\n\n<dx-popover\n target=\"#{{elementUUID}}\"\n [(visible)]=\"showOptions\"\n [minWidth]=\"width\"\n [hideOnOutsideClick]=\"true\"\n [wrapperAttr]=\"{ class: 'sds-durationbox-options-popover' }\"\n >\n\n <div *dxTemplate=\"let data of 'content'\">\n <dx-scroll-view>\n <button\n class=\"dropdown-item border-0\"\n [class.selected] = \"isValueEmpty\"\n (click)=\"applyOption(null)\"\n > {{ emptyValueText}}\n </button>\n\n <div *ngFor=\"let option of options\">\n <button\n class=\"dropdown-item border-0\"\n [class.selected] = \"option === value\"\n (click)=\"applyOption(option)\"\n > {{option | sdsDurationFormat}}\n </button>\n </div>\n </dx-scroll-view>\n </div>\n</dx-popover>", styles: ["::ng-deep .sds-durationbox .sds-durationbox-clear-button .dx-icon{color:#999}::ng-deep .sds-durationbox-options-popover .dx-popup-content{padding:.25rem;font-size:1rem}::ng-deep .sds-durationbox-options-popover .dropdown-item:focus{outline:none}::ng-deep .sds-durationbox-options-popover .dropdown-item.selected{background-color:#dee2e6}\n"] }]
|
|
178
197
|
}], ctorParameters: function () { return [{ type: DurationInputResolverService }]; }, propDecorators: { value: [{
|
|
179
198
|
type: Input
|
|
180
199
|
}], valueChange: [{
|
|
@@ -187,9 +206,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImpor
|
|
|
187
206
|
type: Input
|
|
188
207
|
}], width: [{
|
|
189
208
|
type: Input
|
|
190
|
-
}],
|
|
191
|
-
type:
|
|
192
|
-
|
|
209
|
+
}], disabled: [{
|
|
210
|
+
type: Input
|
|
211
|
+
}], showClearButton: [{
|
|
212
|
+
type: Input
|
|
193
213
|
}] } });
|
|
194
214
|
|
|
195
215
|
const components = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spicainternational-ngx-sds-components-src-lib-duration-box.mjs","sources":["../../../projects/ngx-sds-components/src/lib/duration-box/duration-input-resolver.service.ts","../../../projects/ngx-sds-components/src/lib/duration-box/duration-box.component.ts","../../../projects/ngx-sds-components/src/lib/duration-box/duration-box.component.html","../../../projects/ngx-sds-components/src/lib/duration-box/duration-box.module.ts","../../../projects/ngx-sds-components/src/lib/duration-box/spicainternational-ngx-sds-components-src-lib-duration-box.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DurationInputResolverService {\n \n constructor() {}\n\n public resolve(input: string): number | null{\n if (!input || input.length === 0) {\n return 0;\n }\n\n const inputSegments = input.split(':');\n if (inputSegments.length > 2) {\n //invalid input\n return 0;\n } else if (inputSegments.length == 2){\n // we have hrs and minutes\n const hrs = parseInt(inputSegments[0] ? inputSegments[0] : '0');\n const mins = parseInt(inputSegments[1] ? inputSegments[1] : '0');\n const totalMins = (hrs * 60) + mins;\n\n return totalMins;\n } else if (inputSegments.length == 1) {\n // take last two digits as mins\n const nonSeparated = inputSegments[0];\n\n let totalMins = 0;\n if (nonSeparated.length <= 2) {\n totalMins = parseInt(nonSeparated)\n } else {\n const lastIndex = nonSeparated.length - 2;\n const part1 = nonSeparated.slice(0, lastIndex);\n const part2 = nonSeparated.slice(lastIndex);\n const hrs = parseInt(part1);\n const mins = parseInt(part2);\n totalMins = (hrs * 60) + mins; \n }\n return totalMins;\n }\n return 0; \n }\n}\n","import { Component, ElementRef, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\nimport { DxTextBoxComponent } from 'devextreme-angular';\nimport { DurationInputResolverService } from './duration-input-resolver.service';\n\n@Component({\n selector: 'sds-duration-box',\n templateUrl: './duration-box.component.html',\n styleUrls: ['./duration-box.component.scss'],\n})\nexport class SdsDurationBoxComponent implements OnInit, OnChanges {\n\n @Input() value: number | null = null;\n @Output() valueChange = new EventEmitter<number | null>();\n\n @Input() allowEmptyValue: boolean = true;\n @Input() emptyValueText: string = 'not set';\n\n @Input() options?: number[];\n @Input() width: string = '10rem';\n\n @ViewChild('textbox', {static: true}) textbox?: DxTextBoxComponent;\n\n\n public elementUUID = 'sds-db-' + crypto.randomUUID();\n\n public inputValue: string = '';\n public showOptions: boolean = false;\n \n public optionsDropdownButton = {\n icon: 'spindown',\n stylingMode: 'text',\n onClick: () => {\n this.showOptions = !this.showOptions;\n }\n }\n\n public clearValueButton = {\n icon: 'clear',\n stylingMode: 'text',\n onClick: () => {\n this.applyOption(null);\n }\n }\n\n public isValueEmpty = false;\n\n private isValueSetInternally = false;\n\n constructor(\n private _durationInputResolver: DurationInputResolverService\n ) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['value']) {\n if (this.value === null) {\n if (this.allowEmptyValue) {\n this.isValueEmpty = true;\n this.inputValue = this.emptyValueText;\n } else {\n this.inputValue = '0:00'; // TO-DO: resolve this scenario\n }\n\n } else {\n this.inputValue = this.minutesToDurationString(this.value)\n }\n }\n }\n\n ngOnInit(): void {}\n\n public blockNonNumberOrSemicolon(e: any) {\n this.isValueSetInternally = false;\n\n if (!(\n e.event.key === 'Enter' || \n e.event.key === 'NumpadEnter' || \n e.event.key === 'Delete' || \n e.event.key === 'Tab' ||\n e.event.key === 'Backspace' ||\n e.event.key === 'ArrowLeft' ||\n e.event.key === 'ArrowRight' ||\n e.event.key === 'ArrowTop' ||\n e.event.key === 'ArrowBottom'\n )) {\n const regexNumberOfSemicolon = /\\d|:/;\n if (!regexNumberOfSemicolon.test(e.event.key)) {\n e.event.preventDefault();\n console.log(`${e.event.key} is not valid`);\n } else {\n this.isValueEmpty = false;\n }\n }\n }\n\n public resolveInput(data: any) {\n if (!this.isValueSetInternally){\n if (this.isValueEmpty || (data.value === '' && this.allowEmptyValue)) {\n // this.inputValue = this.emptyValueTextthis\n // this.applyOption(null);\n this.setValue(null);\n } else { \n const resolvedValue = this._durationInputResolver.resolve(data.value);\n \n if (resolvedValue === null && this.allowEmptyValue) {\n this.setValue(null);\n } else if (resolvedValue === null && !this.allowEmptyValue) {\n this.setValue(resolvedValue);\n } else {\n this.setValue(resolvedValue);\n }\n }\n }\n }\n\n public applyOption(value: number | null){\n this.showOptions = false;\n this.isValueSetInternally = false;\n this.setValue(value);\n }\n\n private setValue(value: number | null){\n if ( (this.isValueEmpty && value != null) || (!this.isValueEmpty && this.value != value)) {\n this.value = value;\n this.valueChange.emit(this.value);\n if (value === null) {\n this.isValueEmpty = true;\n this.isValueSetInternally = true;\n this.inputValue = this.emptyValueText;\n } else if (typeof value === 'number') {\n this.isValueEmpty = false;\n this.isValueSetInternally = true;\n this.inputValue = this.minutesToDurationString(this.value as number);\n }\n }\n\n }\n\n private minutesToDurationString(minutes: number): string {\n const hours = Math.floor(minutes/60);\n const mins = minutes % 60;\n return `${hours.toString().padStart(1, \"0\")}:${mins.toString().padStart(2, \"0\")}`;\n }\n}\n","<dx-text-box\n #textbox\n [id]=\"elementUUID\"\n [value]=\"inputValue\"\n (onKeyDown)=\"blockNonNumberOrSemicolon($event)\"\n (onValueChanged)=\"resolveInput($event)\"\n [width]=\"width\"\n >\n <dxi-button\n *ngIf=\"allowEmptyValue\"\n name=\"clearValue\"\n location=\"after\"\n [options]=\"clearValueButton\"\n ></dxi-button>\n <dxi-button\n \n *ngIf=\"options && options.length > 0\"\n name=\"optionsDropdown\"\n location=\"after\"\n [options]=\"optionsDropdownButton\"\n ></dxi-button>\n</dx-text-box>\n\n\n<dx-popover\n target=\"#{{elementUUID}}\"\n [(visible)]=\"showOptions\"\n [width]=\"width\"\n [closeOnOutsideClick]=\"true\"\n [wrapperAttr]=\"{ class: 'sds-durationbox-options-popover' }\"\n >\n\n <div *dxTemplate=\"let data of 'content'\">\n\n <button\n class=\"dropdown-item border-0\"\n [class.selected] = \"isValueEmpty\"\n (click)=\"applyOption(null)\"\n > {{ emptyValueText}}\n </button>\n\n <div *ngFor=\"let option of options\">\n <button\n class=\"dropdown-item border-0\"\n [class.selected] = \"option === value\"\n (click)=\"applyOption(option)\"\n > {{option | sdsDurationFormat}}\n </button>\n </div>\n </div>\n\n <!-- <div *ngFor=\"let option of options\"\n class=\"d-flex align-items-center p-1 my-1 mx-1 overflow-avatar-container\" >\n <div class=\"ml-2 pl-1\">\n {{option | sdsDurationFormat}}\n </div>\n </div> -->\n</dx-popover>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SdsDurationBoxComponent } from './duration-box.component';\nimport { DxPopoverModule, DxScrollViewModule, DxTextBoxModule } from 'devextreme-angular';\nimport { SdsDurationPipeModule } from '@spicainternational/ngx-sds-components/src/lib/duration-pipe';\n\n\n\nconst components = [\n SdsDurationBoxComponent\n]\n\n@NgModule({\n declarations: [\n SdsDurationBoxComponent\n ],\n imports: [\n CommonModule,\n\n SdsDurationPipeModule,\n \n DxTextBoxModule,\n DxPopoverModule,\n DxScrollViewModule,\n ],\n exports: [\n ...components\n ]\n})\nexport class SdsDurationBoxModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.DurationInputResolverService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"spicainternational-ngx-sds-components-src-lib-duration-box.mjs","sources":["../../../projects/ngx-sds-components/src/lib/duration-box/duration-input-resolver.service.ts","../../../projects/ngx-sds-components/src/lib/duration-box/duration-box.component.ts","../../../projects/ngx-sds-components/src/lib/duration-box/duration-box.component.html","../../../projects/ngx-sds-components/src/lib/duration-box/duration-box.module.ts","../../../projects/ngx-sds-components/src/lib/duration-box/spicainternational-ngx-sds-components-src-lib-duration-box.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DurationInputResolverService {\n \n constructor() {}\n\n public resolve(input: string): number | null{\n if (!input || input.length === 0) {\n return 0;\n }\n\n const inputSegments = input.split(':');\n if (inputSegments.length > 2) {\n //invalid input\n return 0;\n } else if (inputSegments.length == 2){\n // we have hrs and minutes\n const hrs = parseInt(inputSegments[0] ? inputSegments[0] : '0');\n const mins = parseInt(inputSegments[1] ? inputSegments[1] : '0');\n const totalMins = (hrs * 60) + mins;\n\n return totalMins;\n } else if (inputSegments.length == 1) {\n // take last two digits as mins\n const nonSeparated = inputSegments[0];\n\n let totalMins = 0;\n if (nonSeparated.length <= 2) {\n totalMins = parseInt(nonSeparated)\n } else {\n const lastIndex = nonSeparated.length - 2;\n const part1 = nonSeparated.slice(0, lastIndex);\n const part2 = nonSeparated.slice(lastIndex);\n const hrs = parseInt(part1);\n const mins = parseInt(part2);\n totalMins = (hrs * 60) + mins; \n }\n return totalMins;\n }\n return 0; \n }\n\n public isValidInput(input: string) {\n const regexNumbersOnly = /^[+-]?\\d+$/;\n const regexColonSeparated = /^[+-]?\\d+:\\d+$/;\n return regexNumbersOnly.test(input) || regexColonSeparated.test(input);\n }\n}\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { SdsDurationFormatPipe } from '@spicainternational/ngx-sds-components/src/lib/duration-pipe';\nimport { DurationInputResolverService } from './duration-input-resolver.service';\n\n@Component({\n selector: 'sds-duration-box',\n templateUrl: './duration-box.component.html',\n styleUrls: ['./duration-box.component.scss'],\n})\nexport class SdsDurationBoxComponent implements OnInit, OnChanges {\n /**\n * Duration length expressed in minutes; when we allow empty values this property can be null.\n *\n * @type {(number | null)}\n * @memberof SdsDurationBoxComponent\n */\n @Input() value: number | null = null;\n @Output() valueChange = new EventEmitter<number | null>();\n\n /**\n * Allow user to select empty value. You should provide emptyValueText in this case.\n *\n * @type {boolean}\n * @memberof SdsDurationBoxComponent\n */\n @Input() allowEmptyValue: boolean = true;\n\n /**\n * 'emptyValueText' - text to be displayed when value is cleared\n *\n * @type {string}\n * @memberof SdsDurationBoxComponent\n */\n @Input() emptyValueText: string = 'not set';\n\n /**\n * Array of pre-defined durations that will be displayed in dropdown for easier selection.\n *\n * @type {number[]}\n * @memberof SdsDurationBoxComponent\n */\n @Input() options?: number[];\n \n /**\n * Width of component\n *\n * @type {string}\n * @memberof SdsDurationBoxComponent\n */\n @Input() width: string = '10rem';\n\n /**\n * Specifies whether the UI component responds to user interaction.\n *\n * @type {boolean}\n * @memberof SdsDurationBoxComponent\n */\n @Input() disabled: boolean = false;\n \n /**\n * Specifies whether to display the Clear button in the UI component.\n *\n * @type {boolean}\n * @memberof SdsDurationBoxComponent\n */\n @Input() showClearButton: boolean = false;\n\n public elementUUID = 'sds-db-' + crypto.randomUUID();\n\n public inputValue: string = '';\n public showOptions: boolean = false;\n \n public optionsDropdownButton;\n public clearValueButton;\n\n public isValueEmpty = false;\n\n private isValueSetInternally = false;\n private _durationPipe: SdsDurationFormatPipe;\n\n constructor(\n private _durationInputResolver: DurationInputResolverService,\n ) {\n this._durationPipe = new SdsDurationFormatPipe();\n \n this.optionsDropdownButton = {\n icon: 'spindown',\n stylingMode: 'text',\n \n onClick: () => {\n this.showOptions = !this.showOptions;\n }\n }\n\n this.clearValueButton = {\n icon: 'clear',\n stylingMode: 'text',\n elementAttr: { class: 'sds-durationbox-clear-button' },\n onClick: () => {\n this.applyOption(null);\n }\n } \n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['value']) {\n if (this.value === null) {\n if (this.allowEmptyValue) {\n this.setValue(null);\n // this.isValueEmpty = true;\n // this.inputValue = this.emptyValueText;\n } else {\n this.setValue(0);\n \n this.inputValue = '0:00'; // TO-DO: resolve this scenario\n }\n\n } else {\n this.inputValue = this._durationPipe.transform(this.value, this.emptyValueText);\n }\n }\n }\n\n ngOnInit(): void {}\n\n public blockNonNumberOrSemicolon(e: any) {\n this.isValueSetInternally = false;\n }\n\n\n public resolveInput() {\n if (!this.isValueSetInternally){\n if (!this._durationInputResolver.isValidInput(this.inputValue)) {\n // we have invalid input. use old value\n this.setInputValueInternally(this.value);\n } else {\n const resolvedValue = this._durationInputResolver.resolve(this.inputValue);\n \n if (resolvedValue === null && this.allowEmptyValue) {\n this.setValue(null);\n } else if (resolvedValue === null && !this.allowEmptyValue) {\n this.setValue(resolvedValue);\n } else {\n this.setValue(resolvedValue);\n }\n }\n }\n }\n\n public applyOption(value: number | null){\n this.showOptions = false;\n this.isValueSetInternally = false;\n this.setValue(value);\n }\n\n private setValue(value: number | null){\n this.isValueEmpty = (value === null);\n this.value = value;\n this.valueChange.emit(this.value);\n this.setInputValueInternally(value);\n }\n\n private setInputValueInternally(value: number | null){\n this.isValueSetInternally = true;\n setTimeout(() => {\n this.inputValue = this._durationPipe.transform(this.value, this.emptyValueText);\n }, 0);\n }\n}\n","<dx-text-box\n #textbox\n [id]=\"elementUUID\"\n class=\"sds-durationbox\"\n [(value)]=\"inputValue\"\n (onKeyDown)=\"blockNonNumberOrSemicolon($event)\"\n (onChange)=\"resolveInput()\"\n [width]=\"width\"\n [disabled]=\"disabled\"\n >\n\n <!-- (onValueChanged)=\"resolveInput($event)\" -->\n\n <dxi-button\n *ngIf=\"allowEmptyValue && showClearButton\"\n name=\"clearValue\"\n location=\"after\"\n [options]=\"clearValueButton\"\n ></dxi-button>\n <dxi-button\n *ngIf=\"options && options.length > 0\"\n name=\"optionsDropdown\"\n location=\"after\"\n [options]=\"optionsDropdownButton\"\n ></dxi-button>\n</dx-text-box>\n\n\n<dx-popover\n target=\"#{{elementUUID}}\"\n [(visible)]=\"showOptions\"\n [minWidth]=\"width\"\n [hideOnOutsideClick]=\"true\"\n [wrapperAttr]=\"{ class: 'sds-durationbox-options-popover' }\"\n >\n\n <div *dxTemplate=\"let data of 'content'\">\n <dx-scroll-view>\n <button\n class=\"dropdown-item border-0\"\n [class.selected] = \"isValueEmpty\"\n (click)=\"applyOption(null)\"\n > {{ emptyValueText}}\n </button>\n\n <div *ngFor=\"let option of options\">\n <button\n class=\"dropdown-item border-0\"\n [class.selected] = \"option === value\"\n (click)=\"applyOption(option)\"\n > {{option | sdsDurationFormat}}\n </button>\n </div>\n </dx-scroll-view>\n </div>\n</dx-popover>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SdsDurationBoxComponent } from './duration-box.component';\nimport { DxPopoverModule, DxScrollViewModule, DxTextBoxModule } from 'devextreme-angular';\nimport { SdsDurationPipeModule } from '@spicainternational/ngx-sds-components/src/lib/duration-pipe';\n\n\n\nconst components = [\n SdsDurationBoxComponent\n]\n\n@NgModule({\n declarations: [\n SdsDurationBoxComponent\n ],\n imports: [\n CommonModule,\n\n SdsDurationPipeModule,\n \n DxTextBoxModule,\n DxPopoverModule,\n DxScrollViewModule,\n ],\n exports: [\n ...components\n ]\n})\nexport class SdsDurationBoxModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.DurationInputResolverService"],"mappings":"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"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Injectable, EventEmitter, Component, Input, Output,
|
|
2
|
+
import { Injectable, EventEmitter, Component, Input, Output, NgModule } from '@angular/core';
|
|
3
3
|
import * as i4 from '@angular/common';
|
|
4
4
|
import { CommonModule } from '@angular/common';
|
|
5
|
+
import * as i6 from '@spicainternational/ngx-sds-components/src/lib/duration-pipe';
|
|
6
|
+
import { SdsDurationFormatPipe, SdsDurationPipeModule } from '@spicainternational/ngx-sds-components/src/lib/duration-pipe';
|
|
5
7
|
import * as i2 from 'devextreme-angular';
|
|
6
8
|
import { DxTextBoxModule, DxPopoverModule, DxScrollViewModule } from 'devextreme-angular';
|
|
7
9
|
import * as i3 from 'devextreme-angular/ui/nested';
|
|
8
10
|
import * as i5 from 'devextreme-angular/core';
|
|
9
|
-
import * as i6 from '@spicainternational/ngx-sds-components/src/lib/duration-pipe';
|
|
10
|
-
import { SdsDurationPipeModule } from '@spicainternational/ngx-sds-components/src/lib/duration-pipe';
|
|
11
11
|
|
|
12
12
|
class DurationInputResolverService {
|
|
13
13
|
constructor() { }
|
|
@@ -46,6 +46,11 @@ class DurationInputResolverService {
|
|
|
46
46
|
}
|
|
47
47
|
return 0;
|
|
48
48
|
}
|
|
49
|
+
isValidInput(input) {
|
|
50
|
+
const regexNumbersOnly = /^[+-]?\d+$/;
|
|
51
|
+
const regexColonSeparated = /^[+-]?\d+:\d+$/;
|
|
52
|
+
return regexNumbersOnly.test(input) || regexColonSeparated.test(input);
|
|
53
|
+
}
|
|
49
54
|
}
|
|
50
55
|
DurationInputResolverService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: DurationInputResolverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
51
56
|
DurationInputResolverService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: DurationInputResolverService, providedIn: 'root' });
|
|
@@ -59,14 +64,55 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImpor
|
|
|
59
64
|
class SdsDurationBoxComponent {
|
|
60
65
|
constructor(_durationInputResolver) {
|
|
61
66
|
this._durationInputResolver = _durationInputResolver;
|
|
67
|
+
/**
|
|
68
|
+
* Duration length expressed in minutes; when we allow empty values this property can be null.
|
|
69
|
+
*
|
|
70
|
+
* @type {(number | null)}
|
|
71
|
+
* @memberof SdsDurationBoxComponent
|
|
72
|
+
*/
|
|
62
73
|
this.value = null;
|
|
63
74
|
this.valueChange = new EventEmitter();
|
|
75
|
+
/**
|
|
76
|
+
* Allow user to select empty value. You should provide emptyValueText in this case.
|
|
77
|
+
*
|
|
78
|
+
* @type {boolean}
|
|
79
|
+
* @memberof SdsDurationBoxComponent
|
|
80
|
+
*/
|
|
64
81
|
this.allowEmptyValue = true;
|
|
82
|
+
/**
|
|
83
|
+
* 'emptyValueText' - text to be displayed when value is cleared
|
|
84
|
+
*
|
|
85
|
+
* @type {string}
|
|
86
|
+
* @memberof SdsDurationBoxComponent
|
|
87
|
+
*/
|
|
65
88
|
this.emptyValueText = 'not set';
|
|
89
|
+
/**
|
|
90
|
+
* Width of component
|
|
91
|
+
*
|
|
92
|
+
* @type {string}
|
|
93
|
+
* @memberof SdsDurationBoxComponent
|
|
94
|
+
*/
|
|
66
95
|
this.width = '10rem';
|
|
96
|
+
/**
|
|
97
|
+
* Specifies whether the UI component responds to user interaction.
|
|
98
|
+
*
|
|
99
|
+
* @type {boolean}
|
|
100
|
+
* @memberof SdsDurationBoxComponent
|
|
101
|
+
*/
|
|
102
|
+
this.disabled = false;
|
|
103
|
+
/**
|
|
104
|
+
* Specifies whether to display the Clear button in the UI component.
|
|
105
|
+
*
|
|
106
|
+
* @type {boolean}
|
|
107
|
+
* @memberof SdsDurationBoxComponent
|
|
108
|
+
*/
|
|
109
|
+
this.showClearButton = false;
|
|
67
110
|
this.elementUUID = 'sds-db-' + crypto.randomUUID();
|
|
68
111
|
this.inputValue = '';
|
|
69
112
|
this.showOptions = false;
|
|
113
|
+
this.isValueEmpty = false;
|
|
114
|
+
this.isValueSetInternally = false;
|
|
115
|
+
this._durationPipe = new SdsDurationFormatPipe();
|
|
70
116
|
this.optionsDropdownButton = {
|
|
71
117
|
icon: 'spindown',
|
|
72
118
|
stylingMode: 'text',
|
|
@@ -77,60 +123,42 @@ class SdsDurationBoxComponent {
|
|
|
77
123
|
this.clearValueButton = {
|
|
78
124
|
icon: 'clear',
|
|
79
125
|
stylingMode: 'text',
|
|
126
|
+
elementAttr: { class: 'sds-durationbox-clear-button' },
|
|
80
127
|
onClick: () => {
|
|
81
128
|
this.applyOption(null);
|
|
82
129
|
}
|
|
83
130
|
};
|
|
84
|
-
this.isValueEmpty = false;
|
|
85
|
-
this.isValueSetInternally = false;
|
|
86
131
|
}
|
|
87
132
|
ngOnChanges(changes) {
|
|
88
133
|
if (changes['value']) {
|
|
89
134
|
if (this.value === null) {
|
|
90
135
|
if (this.allowEmptyValue) {
|
|
91
|
-
this.
|
|
92
|
-
this.
|
|
136
|
+
this.setValue(null);
|
|
137
|
+
// this.isValueEmpty = true;
|
|
138
|
+
// this.inputValue = this.emptyValueText;
|
|
93
139
|
}
|
|
94
140
|
else {
|
|
141
|
+
this.setValue(0);
|
|
95
142
|
this.inputValue = '0:00'; // TO-DO: resolve this scenario
|
|
96
143
|
}
|
|
97
144
|
}
|
|
98
145
|
else {
|
|
99
|
-
this.inputValue = this.
|
|
146
|
+
this.inputValue = this._durationPipe.transform(this.value, this.emptyValueText);
|
|
100
147
|
}
|
|
101
148
|
}
|
|
102
149
|
}
|
|
103
150
|
ngOnInit() { }
|
|
104
151
|
blockNonNumberOrSemicolon(e) {
|
|
105
152
|
this.isValueSetInternally = false;
|
|
106
|
-
if (!(e.event.key === 'Enter' ||
|
|
107
|
-
e.event.key === 'NumpadEnter' ||
|
|
108
|
-
e.event.key === 'Delete' ||
|
|
109
|
-
e.event.key === 'Tab' ||
|
|
110
|
-
e.event.key === 'Backspace' ||
|
|
111
|
-
e.event.key === 'ArrowLeft' ||
|
|
112
|
-
e.event.key === 'ArrowRight' ||
|
|
113
|
-
e.event.key === 'ArrowTop' ||
|
|
114
|
-
e.event.key === 'ArrowBottom')) {
|
|
115
|
-
const regexNumberOfSemicolon = /\d|:/;
|
|
116
|
-
if (!regexNumberOfSemicolon.test(e.event.key)) {
|
|
117
|
-
e.event.preventDefault();
|
|
118
|
-
console.log(`${e.event.key} is not valid`);
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
121
|
-
this.isValueEmpty = false;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
153
|
}
|
|
125
|
-
resolveInput(
|
|
154
|
+
resolveInput() {
|
|
126
155
|
if (!this.isValueSetInternally) {
|
|
127
|
-
if (this.
|
|
128
|
-
//
|
|
129
|
-
|
|
130
|
-
this.setValue(null);
|
|
156
|
+
if (!this._durationInputResolver.isValidInput(this.inputValue)) {
|
|
157
|
+
// we have invalid input. use old value
|
|
158
|
+
this.setInputValueInternally(this.value);
|
|
131
159
|
}
|
|
132
160
|
else {
|
|
133
|
-
const resolvedValue = this._durationInputResolver.resolve(
|
|
161
|
+
const resolvedValue = this._durationInputResolver.resolve(this.inputValue);
|
|
134
162
|
if (resolvedValue === null && this.allowEmptyValue) {
|
|
135
163
|
this.setValue(null);
|
|
136
164
|
}
|
|
@@ -149,32 +177,23 @@ class SdsDurationBoxComponent {
|
|
|
149
177
|
this.setValue(value);
|
|
150
178
|
}
|
|
151
179
|
setValue(value) {
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
this.isValueEmpty = true;
|
|
157
|
-
this.isValueSetInternally = true;
|
|
158
|
-
this.inputValue = this.emptyValueText;
|
|
159
|
-
}
|
|
160
|
-
else if (typeof value === 'number') {
|
|
161
|
-
this.isValueEmpty = false;
|
|
162
|
-
this.isValueSetInternally = true;
|
|
163
|
-
this.inputValue = this.minutesToDurationString(this.value);
|
|
164
|
-
}
|
|
165
|
-
}
|
|
180
|
+
this.isValueEmpty = (value === null);
|
|
181
|
+
this.value = value;
|
|
182
|
+
this.valueChange.emit(this.value);
|
|
183
|
+
this.setInputValueInternally(value);
|
|
166
184
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
185
|
+
setInputValueInternally(value) {
|
|
186
|
+
this.isValueSetInternally = true;
|
|
187
|
+
setTimeout(() => {
|
|
188
|
+
this.inputValue = this._durationPipe.transform(this.value, this.emptyValueText);
|
|
189
|
+
}, 0);
|
|
171
190
|
}
|
|
172
191
|
}
|
|
173
192
|
SdsDurationBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SdsDurationBoxComponent, deps: [{ token: DurationInputResolverService }], target: i0.ɵɵFactoryTarget.Component });
|
|
174
|
-
SdsDurationBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: SdsDurationBoxComponent, selector: "sds-duration-box", inputs: { value: "value", allowEmptyValue: "allowEmptyValue", emptyValueText: "emptyValueText", options: "options", width: "width"
|
|
193
|
+
SdsDurationBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: SdsDurationBoxComponent, selector: "sds-duration-box", inputs: { value: "value", allowEmptyValue: "allowEmptyValue", emptyValueText: "emptyValueText", options: "options", width: "width", disabled: "disabled", showClearButton: "showClearButton" }, outputs: { valueChange: "valueChange" }, usesOnChanges: true, ngImport: i0, template: "<dx-text-box\n #textbox\n [id]=\"elementUUID\"\n class=\"sds-durationbox\"\n [(value)]=\"inputValue\"\n (onKeyDown)=\"blockNonNumberOrSemicolon($event)\"\n (onChange)=\"resolveInput()\"\n [width]=\"width\"\n [disabled]=\"disabled\"\n >\n\n <!-- (onValueChanged)=\"resolveInput($event)\" -->\n\n <dxi-button\n *ngIf=\"allowEmptyValue && showClearButton\"\n name=\"clearValue\"\n location=\"after\"\n [options]=\"clearValueButton\"\n ></dxi-button>\n <dxi-button\n *ngIf=\"options && options.length > 0\"\n name=\"optionsDropdown\"\n location=\"after\"\n [options]=\"optionsDropdownButton\"\n ></dxi-button>\n</dx-text-box>\n\n\n<dx-popover\n target=\"#{{elementUUID}}\"\n [(visible)]=\"showOptions\"\n [minWidth]=\"width\"\n [hideOnOutsideClick]=\"true\"\n [wrapperAttr]=\"{ class: 'sds-durationbox-options-popover' }\"\n >\n\n <div *dxTemplate=\"let data of 'content'\">\n <dx-scroll-view>\n <button\n class=\"dropdown-item border-0\"\n [class.selected] = \"isValueEmpty\"\n (click)=\"applyOption(null)\"\n > {{ emptyValueText}}\n </button>\n\n <div *ngFor=\"let option of options\">\n <button\n class=\"dropdown-item border-0\"\n [class.selected] = \"option === value\"\n (click)=\"applyOption(option)\"\n > {{option | sdsDurationFormat}}\n </button>\n </div>\n </dx-scroll-view>\n </div>\n</dx-popover>", styles: ["::ng-deep .sds-durationbox .sds-durationbox-clear-button .dx-icon{color:#999}::ng-deep .sds-durationbox-options-popover .dx-popup-content{padding:.25rem;font-size:1rem}::ng-deep .sds-durationbox-options-popover .dropdown-item:focus{outline:none}::ng-deep .sds-durationbox-options-popover .dropdown-item.selected{background-color:#dee2e6}\n"], components: [{ type: i2.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { type: i3.DxiButtonComponent, selector: "dxi-button", inputs: ["location", "name", "options", "cssClass", "disabled", "hint", "icon", "onClick", "template", "text", "visible"] }, { type: i2.DxPopoverComponent, selector: "dx-popover", inputs: ["animation", "closeOnOutsideClick", "container", "contentTemplate", "copyRootClassesToWrapper", "deferRendering", "disabled", "elementAttr", "height", "hideEvent", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "maxHeight", "maxWidth", "minHeight", "minWidth", "position", "rtlEnabled", "shading", "shadingColor", "showCloseButton", "showEvent", "showTitle", "target", "title", "titleTemplate", "toolbarItems", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onShowing", "onShown", "onTitleRendered", "animationChange", "closeOnOutsideClickChange", "containerChange", "contentTemplateChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "disabledChange", "elementAttrChange", "heightChange", "hideEventChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "maxHeightChange", "maxWidthChange", "minHeightChange", "minWidthChange", "positionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showCloseButtonChange", "showEventChange", "showTitleChange", "targetChange", "titleChange", "titleTemplateChange", "toolbarItemsChange", "visibleChange", "widthChange", "wrapperAttrChange"] }, { type: i2.DxScrollViewComponent, selector: "dx-scroll-view", inputs: ["bounceEnabled", "direction", "disabled", "elementAttr", "height", "pulledDownText", "pullingDownText", "reachBottomText", "refreshingText", "rtlEnabled", "scrollByContent", "scrollByThumb", "showScrollbar", "useNative", "width"], outputs: ["onDisposing", "onInitialized", "onOptionChanged", "onPullDown", "onReachBottom", "onScroll", "onUpdated", "bounceEnabledChange", "directionChange", "disabledChange", "elementAttrChange", "heightChange", "pulledDownTextChange", "pullingDownTextChange", "reachBottomTextChange", "refreshingTextChange", "rtlEnabledChange", "scrollByContentChange", "scrollByThumbChange", "showScrollbarChange", "useNativeChange", "widthChange"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "sdsDurationFormat": i6.SdsDurationFormatPipe } });
|
|
175
194
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SdsDurationBoxComponent, decorators: [{
|
|
176
195
|
type: Component,
|
|
177
|
-
args: [{ selector: 'sds-duration-box', template: "<dx-text-box\n #textbox\n [id]=\"elementUUID\"\n [value]=\"inputValue\"\n (onKeyDown)=\"blockNonNumberOrSemicolon($event)\"\n (
|
|
196
|
+
args: [{ selector: 'sds-duration-box', template: "<dx-text-box\n #textbox\n [id]=\"elementUUID\"\n class=\"sds-durationbox\"\n [(value)]=\"inputValue\"\n (onKeyDown)=\"blockNonNumberOrSemicolon($event)\"\n (onChange)=\"resolveInput()\"\n [width]=\"width\"\n [disabled]=\"disabled\"\n >\n\n <!-- (onValueChanged)=\"resolveInput($event)\" -->\n\n <dxi-button\n *ngIf=\"allowEmptyValue && showClearButton\"\n name=\"clearValue\"\n location=\"after\"\n [options]=\"clearValueButton\"\n ></dxi-button>\n <dxi-button\n *ngIf=\"options && options.length > 0\"\n name=\"optionsDropdown\"\n location=\"after\"\n [options]=\"optionsDropdownButton\"\n ></dxi-button>\n</dx-text-box>\n\n\n<dx-popover\n target=\"#{{elementUUID}}\"\n [(visible)]=\"showOptions\"\n [minWidth]=\"width\"\n [hideOnOutsideClick]=\"true\"\n [wrapperAttr]=\"{ class: 'sds-durationbox-options-popover' }\"\n >\n\n <div *dxTemplate=\"let data of 'content'\">\n <dx-scroll-view>\n <button\n class=\"dropdown-item border-0\"\n [class.selected] = \"isValueEmpty\"\n (click)=\"applyOption(null)\"\n > {{ emptyValueText}}\n </button>\n\n <div *ngFor=\"let option of options\">\n <button\n class=\"dropdown-item border-0\"\n [class.selected] = \"option === value\"\n (click)=\"applyOption(option)\"\n > {{option | sdsDurationFormat}}\n </button>\n </div>\n </dx-scroll-view>\n </div>\n</dx-popover>", styles: ["::ng-deep .sds-durationbox .sds-durationbox-clear-button .dx-icon{color:#999}::ng-deep .sds-durationbox-options-popover .dx-popup-content{padding:.25rem;font-size:1rem}::ng-deep .sds-durationbox-options-popover .dropdown-item:focus{outline:none}::ng-deep .sds-durationbox-options-popover .dropdown-item.selected{background-color:#dee2e6}\n"] }]
|
|
178
197
|
}], ctorParameters: function () { return [{ type: DurationInputResolverService }]; }, propDecorators: { value: [{
|
|
179
198
|
type: Input
|
|
180
199
|
}], valueChange: [{
|
|
@@ -187,9 +206,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImpor
|
|
|
187
206
|
type: Input
|
|
188
207
|
}], width: [{
|
|
189
208
|
type: Input
|
|
190
|
-
}],
|
|
191
|
-
type:
|
|
192
|
-
|
|
209
|
+
}], disabled: [{
|
|
210
|
+
type: Input
|
|
211
|
+
}], showClearButton: [{
|
|
212
|
+
type: Input
|
|
193
213
|
}] } });
|
|
194
214
|
|
|
195
215
|
const components = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spicainternational-ngx-sds-components-src-lib-duration-box.mjs","sources":["../../../projects/ngx-sds-components/src/lib/duration-box/duration-input-resolver.service.ts","../../../projects/ngx-sds-components/src/lib/duration-box/duration-box.component.ts","../../../projects/ngx-sds-components/src/lib/duration-box/duration-box.component.html","../../../projects/ngx-sds-components/src/lib/duration-box/duration-box.module.ts","../../../projects/ngx-sds-components/src/lib/duration-box/spicainternational-ngx-sds-components-src-lib-duration-box.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DurationInputResolverService {\n \n constructor() {}\n\n public resolve(input: string): number | null{\n if (!input || input.length === 0) {\n return 0;\n }\n\n const inputSegments = input.split(':');\n if (inputSegments.length > 2) {\n //invalid input\n return 0;\n } else if (inputSegments.length == 2){\n // we have hrs and minutes\n const hrs = parseInt(inputSegments[0] ? inputSegments[0] : '0');\n const mins = parseInt(inputSegments[1] ? inputSegments[1] : '0');\n const totalMins = (hrs * 60) + mins;\n\n return totalMins;\n } else if (inputSegments.length == 1) {\n // take last two digits as mins\n const nonSeparated = inputSegments[0];\n\n let totalMins = 0;\n if (nonSeparated.length <= 2) {\n totalMins = parseInt(nonSeparated)\n } else {\n const lastIndex = nonSeparated.length - 2;\n const part1 = nonSeparated.slice(0, lastIndex);\n const part2 = nonSeparated.slice(lastIndex);\n const hrs = parseInt(part1);\n const mins = parseInt(part2);\n totalMins = (hrs * 60) + mins; \n }\n return totalMins;\n }\n return 0; \n }\n}\n","import { Component, ElementRef, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\nimport { DxTextBoxComponent } from 'devextreme-angular';\nimport { DurationInputResolverService } from './duration-input-resolver.service';\n\n@Component({\n selector: 'sds-duration-box',\n templateUrl: './duration-box.component.html',\n styleUrls: ['./duration-box.component.scss'],\n})\nexport class SdsDurationBoxComponent implements OnInit, OnChanges {\n\n @Input() value: number | null = null;\n @Output() valueChange = new EventEmitter<number | null>();\n\n @Input() allowEmptyValue: boolean = true;\n @Input() emptyValueText: string = 'not set';\n\n @Input() options?: number[];\n @Input() width: string = '10rem';\n\n @ViewChild('textbox', {static: true}) textbox?: DxTextBoxComponent;\n\n\n public elementUUID = 'sds-db-' + crypto.randomUUID();\n\n public inputValue: string = '';\n public showOptions: boolean = false;\n \n public optionsDropdownButton = {\n icon: 'spindown',\n stylingMode: 'text',\n onClick: () => {\n this.showOptions = !this.showOptions;\n }\n }\n\n public clearValueButton = {\n icon: 'clear',\n stylingMode: 'text',\n onClick: () => {\n this.applyOption(null);\n }\n }\n\n public isValueEmpty = false;\n\n private isValueSetInternally = false;\n\n constructor(\n private _durationInputResolver: DurationInputResolverService\n ) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['value']) {\n if (this.value === null) {\n if (this.allowEmptyValue) {\n this.isValueEmpty = true;\n this.inputValue = this.emptyValueText;\n } else {\n this.inputValue = '0:00'; // TO-DO: resolve this scenario\n }\n\n } else {\n this.inputValue = this.minutesToDurationString(this.value)\n }\n }\n }\n\n ngOnInit(): void {}\n\n public blockNonNumberOrSemicolon(e: any) {\n this.isValueSetInternally = false;\n\n if (!(\n e.event.key === 'Enter' || \n e.event.key === 'NumpadEnter' || \n e.event.key === 'Delete' || \n e.event.key === 'Tab' ||\n e.event.key === 'Backspace' ||\n e.event.key === 'ArrowLeft' ||\n e.event.key === 'ArrowRight' ||\n e.event.key === 'ArrowTop' ||\n e.event.key === 'ArrowBottom'\n )) {\n const regexNumberOfSemicolon = /\\d|:/;\n if (!regexNumberOfSemicolon.test(e.event.key)) {\n e.event.preventDefault();\n console.log(`${e.event.key} is not valid`);\n } else {\n this.isValueEmpty = false;\n }\n }\n }\n\n public resolveInput(data: any) {\n if (!this.isValueSetInternally){\n if (this.isValueEmpty || (data.value === '' && this.allowEmptyValue)) {\n // this.inputValue = this.emptyValueTextthis\n // this.applyOption(null);\n this.setValue(null);\n } else { \n const resolvedValue = this._durationInputResolver.resolve(data.value);\n \n if (resolvedValue === null && this.allowEmptyValue) {\n this.setValue(null);\n } else if (resolvedValue === null && !this.allowEmptyValue) {\n this.setValue(resolvedValue);\n } else {\n this.setValue(resolvedValue);\n }\n }\n }\n }\n\n public applyOption(value: number | null){\n this.showOptions = false;\n this.isValueSetInternally = false;\n this.setValue(value);\n }\n\n private setValue(value: number | null){\n if ( (this.isValueEmpty && value != null) || (!this.isValueEmpty && this.value != value)) {\n this.value = value;\n this.valueChange.emit(this.value);\n if (value === null) {\n this.isValueEmpty = true;\n this.isValueSetInternally = true;\n this.inputValue = this.emptyValueText;\n } else if (typeof value === 'number') {\n this.isValueEmpty = false;\n this.isValueSetInternally = true;\n this.inputValue = this.minutesToDurationString(this.value as number);\n }\n }\n\n }\n\n private minutesToDurationString(minutes: number): string {\n const hours = Math.floor(minutes/60);\n const mins = minutes % 60;\n return `${hours.toString().padStart(1, \"0\")}:${mins.toString().padStart(2, \"0\")}`;\n }\n}\n","<dx-text-box\n #textbox\n [id]=\"elementUUID\"\n [value]=\"inputValue\"\n (onKeyDown)=\"blockNonNumberOrSemicolon($event)\"\n (onValueChanged)=\"resolveInput($event)\"\n [width]=\"width\"\n >\n <dxi-button\n *ngIf=\"allowEmptyValue\"\n name=\"clearValue\"\n location=\"after\"\n [options]=\"clearValueButton\"\n ></dxi-button>\n <dxi-button\n \n *ngIf=\"options && options.length > 0\"\n name=\"optionsDropdown\"\n location=\"after\"\n [options]=\"optionsDropdownButton\"\n ></dxi-button>\n</dx-text-box>\n\n\n<dx-popover\n target=\"#{{elementUUID}}\"\n [(visible)]=\"showOptions\"\n [width]=\"width\"\n [closeOnOutsideClick]=\"true\"\n [wrapperAttr]=\"{ class: 'sds-durationbox-options-popover' }\"\n >\n\n <div *dxTemplate=\"let data of 'content'\">\n\n <button\n class=\"dropdown-item border-0\"\n [class.selected] = \"isValueEmpty\"\n (click)=\"applyOption(null)\"\n > {{ emptyValueText}}\n </button>\n\n <div *ngFor=\"let option of options\">\n <button\n class=\"dropdown-item border-0\"\n [class.selected] = \"option === value\"\n (click)=\"applyOption(option)\"\n > {{option | sdsDurationFormat}}\n </button>\n </div>\n </div>\n\n <!-- <div *ngFor=\"let option of options\"\n class=\"d-flex align-items-center p-1 my-1 mx-1 overflow-avatar-container\" >\n <div class=\"ml-2 pl-1\">\n {{option | sdsDurationFormat}}\n </div>\n </div> -->\n</dx-popover>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SdsDurationBoxComponent } from './duration-box.component';\nimport { DxPopoverModule, DxScrollViewModule, DxTextBoxModule } from 'devextreme-angular';\nimport { SdsDurationPipeModule } from '@spicainternational/ngx-sds-components/src/lib/duration-pipe';\n\n\n\nconst components = [\n SdsDurationBoxComponent\n]\n\n@NgModule({\n declarations: [\n SdsDurationBoxComponent\n ],\n imports: [\n CommonModule,\n\n SdsDurationPipeModule,\n \n DxTextBoxModule,\n DxPopoverModule,\n DxScrollViewModule,\n ],\n exports: [\n ...components\n ]\n})\nexport class SdsDurationBoxModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.DurationInputResolverService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"spicainternational-ngx-sds-components-src-lib-duration-box.mjs","sources":["../../../projects/ngx-sds-components/src/lib/duration-box/duration-input-resolver.service.ts","../../../projects/ngx-sds-components/src/lib/duration-box/duration-box.component.ts","../../../projects/ngx-sds-components/src/lib/duration-box/duration-box.component.html","../../../projects/ngx-sds-components/src/lib/duration-box/duration-box.module.ts","../../../projects/ngx-sds-components/src/lib/duration-box/spicainternational-ngx-sds-components-src-lib-duration-box.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DurationInputResolverService {\n \n constructor() {}\n\n public resolve(input: string): number | null{\n if (!input || input.length === 0) {\n return 0;\n }\n\n const inputSegments = input.split(':');\n if (inputSegments.length > 2) {\n //invalid input\n return 0;\n } else if (inputSegments.length == 2){\n // we have hrs and minutes\n const hrs = parseInt(inputSegments[0] ? inputSegments[0] : '0');\n const mins = parseInt(inputSegments[1] ? inputSegments[1] : '0');\n const totalMins = (hrs * 60) + mins;\n\n return totalMins;\n } else if (inputSegments.length == 1) {\n // take last two digits as mins\n const nonSeparated = inputSegments[0];\n\n let totalMins = 0;\n if (nonSeparated.length <= 2) {\n totalMins = parseInt(nonSeparated)\n } else {\n const lastIndex = nonSeparated.length - 2;\n const part1 = nonSeparated.slice(0, lastIndex);\n const part2 = nonSeparated.slice(lastIndex);\n const hrs = parseInt(part1);\n const mins = parseInt(part2);\n totalMins = (hrs * 60) + mins; \n }\n return totalMins;\n }\n return 0; \n }\n\n public isValidInput(input: string) {\n const regexNumbersOnly = /^[+-]?\\d+$/;\n const regexColonSeparated = /^[+-]?\\d+:\\d+$/;\n return regexNumbersOnly.test(input) || regexColonSeparated.test(input);\n }\n}\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { SdsDurationFormatPipe } from '@spicainternational/ngx-sds-components/src/lib/duration-pipe';\nimport { DurationInputResolverService } from './duration-input-resolver.service';\n\n@Component({\n selector: 'sds-duration-box',\n templateUrl: './duration-box.component.html',\n styleUrls: ['./duration-box.component.scss'],\n})\nexport class SdsDurationBoxComponent implements OnInit, OnChanges {\n /**\n * Duration length expressed in minutes; when we allow empty values this property can be null.\n *\n * @type {(number | null)}\n * @memberof SdsDurationBoxComponent\n */\n @Input() value: number | null = null;\n @Output() valueChange = new EventEmitter<number | null>();\n\n /**\n * Allow user to select empty value. You should provide emptyValueText in this case.\n *\n * @type {boolean}\n * @memberof SdsDurationBoxComponent\n */\n @Input() allowEmptyValue: boolean = true;\n\n /**\n * 'emptyValueText' - text to be displayed when value is cleared\n *\n * @type {string}\n * @memberof SdsDurationBoxComponent\n */\n @Input() emptyValueText: string = 'not set';\n\n /**\n * Array of pre-defined durations that will be displayed in dropdown for easier selection.\n *\n * @type {number[]}\n * @memberof SdsDurationBoxComponent\n */\n @Input() options?: number[];\n \n /**\n * Width of component\n *\n * @type {string}\n * @memberof SdsDurationBoxComponent\n */\n @Input() width: string = '10rem';\n\n /**\n * Specifies whether the UI component responds to user interaction.\n *\n * @type {boolean}\n * @memberof SdsDurationBoxComponent\n */\n @Input() disabled: boolean = false;\n \n /**\n * Specifies whether to display the Clear button in the UI component.\n *\n * @type {boolean}\n * @memberof SdsDurationBoxComponent\n */\n @Input() showClearButton: boolean = false;\n\n public elementUUID = 'sds-db-' + crypto.randomUUID();\n\n public inputValue: string = '';\n public showOptions: boolean = false;\n \n public optionsDropdownButton;\n public clearValueButton;\n\n public isValueEmpty = false;\n\n private isValueSetInternally = false;\n private _durationPipe: SdsDurationFormatPipe;\n\n constructor(\n private _durationInputResolver: DurationInputResolverService,\n ) {\n this._durationPipe = new SdsDurationFormatPipe();\n \n this.optionsDropdownButton = {\n icon: 'spindown',\n stylingMode: 'text',\n \n onClick: () => {\n this.showOptions = !this.showOptions;\n }\n }\n\n this.clearValueButton = {\n icon: 'clear',\n stylingMode: 'text',\n elementAttr: { class: 'sds-durationbox-clear-button' },\n onClick: () => {\n this.applyOption(null);\n }\n } \n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['value']) {\n if (this.value === null) {\n if (this.allowEmptyValue) {\n this.setValue(null);\n // this.isValueEmpty = true;\n // this.inputValue = this.emptyValueText;\n } else {\n this.setValue(0);\n \n this.inputValue = '0:00'; // TO-DO: resolve this scenario\n }\n\n } else {\n this.inputValue = this._durationPipe.transform(this.value, this.emptyValueText);\n }\n }\n }\n\n ngOnInit(): void {}\n\n public blockNonNumberOrSemicolon(e: any) {\n this.isValueSetInternally = false;\n }\n\n\n public resolveInput() {\n if (!this.isValueSetInternally){\n if (!this._durationInputResolver.isValidInput(this.inputValue)) {\n // we have invalid input. use old value\n this.setInputValueInternally(this.value);\n } else {\n const resolvedValue = this._durationInputResolver.resolve(this.inputValue);\n \n if (resolvedValue === null && this.allowEmptyValue) {\n this.setValue(null);\n } else if (resolvedValue === null && !this.allowEmptyValue) {\n this.setValue(resolvedValue);\n } else {\n this.setValue(resolvedValue);\n }\n }\n }\n }\n\n public applyOption(value: number | null){\n this.showOptions = false;\n this.isValueSetInternally = false;\n this.setValue(value);\n }\n\n private setValue(value: number | null){\n this.isValueEmpty = (value === null);\n this.value = value;\n this.valueChange.emit(this.value);\n this.setInputValueInternally(value);\n }\n\n private setInputValueInternally(value: number | null){\n this.isValueSetInternally = true;\n setTimeout(() => {\n this.inputValue = this._durationPipe.transform(this.value, this.emptyValueText);\n }, 0);\n }\n}\n","<dx-text-box\n #textbox\n [id]=\"elementUUID\"\n class=\"sds-durationbox\"\n [(value)]=\"inputValue\"\n (onKeyDown)=\"blockNonNumberOrSemicolon($event)\"\n (onChange)=\"resolveInput()\"\n [width]=\"width\"\n [disabled]=\"disabled\"\n >\n\n <!-- (onValueChanged)=\"resolveInput($event)\" -->\n\n <dxi-button\n *ngIf=\"allowEmptyValue && showClearButton\"\n name=\"clearValue\"\n location=\"after\"\n [options]=\"clearValueButton\"\n ></dxi-button>\n <dxi-button\n *ngIf=\"options && options.length > 0\"\n name=\"optionsDropdown\"\n location=\"after\"\n [options]=\"optionsDropdownButton\"\n ></dxi-button>\n</dx-text-box>\n\n\n<dx-popover\n target=\"#{{elementUUID}}\"\n [(visible)]=\"showOptions\"\n [minWidth]=\"width\"\n [hideOnOutsideClick]=\"true\"\n [wrapperAttr]=\"{ class: 'sds-durationbox-options-popover' }\"\n >\n\n <div *dxTemplate=\"let data of 'content'\">\n <dx-scroll-view>\n <button\n class=\"dropdown-item border-0\"\n [class.selected] = \"isValueEmpty\"\n (click)=\"applyOption(null)\"\n > {{ emptyValueText}}\n </button>\n\n <div *ngFor=\"let option of options\">\n <button\n class=\"dropdown-item border-0\"\n [class.selected] = \"option === value\"\n (click)=\"applyOption(option)\"\n > {{option | sdsDurationFormat}}\n </button>\n </div>\n </dx-scroll-view>\n </div>\n</dx-popover>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SdsDurationBoxComponent } from './duration-box.component';\nimport { DxPopoverModule, DxScrollViewModule, DxTextBoxModule } from 'devextreme-angular';\nimport { SdsDurationPipeModule } from '@spicainternational/ngx-sds-components/src/lib/duration-pipe';\n\n\n\nconst components = [\n SdsDurationBoxComponent\n]\n\n@NgModule({\n declarations: [\n SdsDurationBoxComponent\n ],\n imports: [\n CommonModule,\n\n SdsDurationPipeModule,\n \n DxTextBoxModule,\n DxPopoverModule,\n DxScrollViewModule,\n ],\n exports: [\n ...components\n ]\n})\nexport class SdsDurationBoxModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.DurationInputResolverService"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,16 +1,58 @@
|
|
|
1
1
|
import { EventEmitter, OnChanges, OnInit, SimpleChanges } from '@angular/core';
|
|
2
|
-
import { DxTextBoxComponent } from 'devextreme-angular';
|
|
3
2
|
import { DurationInputResolverService } from './duration-input-resolver.service';
|
|
4
3
|
import * as i0 from "@angular/core";
|
|
5
4
|
export declare class SdsDurationBoxComponent implements OnInit, OnChanges {
|
|
6
5
|
private _durationInputResolver;
|
|
6
|
+
/**
|
|
7
|
+
* Duration length expressed in minutes; when we allow empty values this property can be null.
|
|
8
|
+
*
|
|
9
|
+
* @type {(number | null)}
|
|
10
|
+
* @memberof SdsDurationBoxComponent
|
|
11
|
+
*/
|
|
7
12
|
value: number | null;
|
|
8
13
|
valueChange: EventEmitter<number | null>;
|
|
14
|
+
/**
|
|
15
|
+
* Allow user to select empty value. You should provide emptyValueText in this case.
|
|
16
|
+
*
|
|
17
|
+
* @type {boolean}
|
|
18
|
+
* @memberof SdsDurationBoxComponent
|
|
19
|
+
*/
|
|
9
20
|
allowEmptyValue: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* 'emptyValueText' - text to be displayed when value is cleared
|
|
23
|
+
*
|
|
24
|
+
* @type {string}
|
|
25
|
+
* @memberof SdsDurationBoxComponent
|
|
26
|
+
*/
|
|
10
27
|
emptyValueText: string;
|
|
28
|
+
/**
|
|
29
|
+
* Array of pre-defined durations that will be displayed in dropdown for easier selection.
|
|
30
|
+
*
|
|
31
|
+
* @type {number[]}
|
|
32
|
+
* @memberof SdsDurationBoxComponent
|
|
33
|
+
*/
|
|
11
34
|
options?: number[];
|
|
35
|
+
/**
|
|
36
|
+
* Width of component
|
|
37
|
+
*
|
|
38
|
+
* @type {string}
|
|
39
|
+
* @memberof SdsDurationBoxComponent
|
|
40
|
+
*/
|
|
12
41
|
width: string;
|
|
13
|
-
|
|
42
|
+
/**
|
|
43
|
+
* Specifies whether the UI component responds to user interaction.
|
|
44
|
+
*
|
|
45
|
+
* @type {boolean}
|
|
46
|
+
* @memberof SdsDurationBoxComponent
|
|
47
|
+
*/
|
|
48
|
+
disabled: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Specifies whether to display the Clear button in the UI component.
|
|
51
|
+
*
|
|
52
|
+
* @type {boolean}
|
|
53
|
+
* @memberof SdsDurationBoxComponent
|
|
54
|
+
*/
|
|
55
|
+
showClearButton: boolean;
|
|
14
56
|
elementUUID: string;
|
|
15
57
|
inputValue: string;
|
|
16
58
|
showOptions: boolean;
|
|
@@ -22,18 +64,22 @@ export declare class SdsDurationBoxComponent implements OnInit, OnChanges {
|
|
|
22
64
|
clearValueButton: {
|
|
23
65
|
icon: string;
|
|
24
66
|
stylingMode: string;
|
|
67
|
+
elementAttr: {
|
|
68
|
+
class: string;
|
|
69
|
+
};
|
|
25
70
|
onClick: () => void;
|
|
26
71
|
};
|
|
27
72
|
isValueEmpty: boolean;
|
|
28
73
|
private isValueSetInternally;
|
|
74
|
+
private _durationPipe;
|
|
29
75
|
constructor(_durationInputResolver: DurationInputResolverService);
|
|
30
76
|
ngOnChanges(changes: SimpleChanges): void;
|
|
31
77
|
ngOnInit(): void;
|
|
32
78
|
blockNonNumberOrSemicolon(e: any): void;
|
|
33
|
-
resolveInput(
|
|
79
|
+
resolveInput(): void;
|
|
34
80
|
applyOption(value: number | null): void;
|
|
35
81
|
private setValue;
|
|
36
|
-
private
|
|
82
|
+
private setInputValueInternally;
|
|
37
83
|
static ɵfac: i0.ɵɵFactoryDeclaration<SdsDurationBoxComponent, never>;
|
|
38
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SdsDurationBoxComponent, "sds-duration-box", never, { "value": "value"; "allowEmptyValue": "allowEmptyValue"; "emptyValueText": "emptyValueText"; "options": "options"; "width": "width"; }, { "valueChange": "valueChange"; }, never, never>;
|
|
84
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SdsDurationBoxComponent, "sds-duration-box", never, { "value": "value"; "allowEmptyValue": "allowEmptyValue"; "emptyValueText": "emptyValueText"; "options": "options"; "width": "width"; "disabled": "disabled"; "showClearButton": "showClearButton"; }, { "valueChange": "valueChange"; }, never, never>;
|
|
39
85
|
}
|
|
@@ -2,6 +2,7 @@ import * as i0 from "@angular/core";
|
|
|
2
2
|
export declare class DurationInputResolverService {
|
|
3
3
|
constructor();
|
|
4
4
|
resolve(input: string): number | null;
|
|
5
|
+
isValidInput(input: string): boolean;
|
|
5
6
|
static ɵfac: i0.ɵɵFactoryDeclaration<DurationInputResolverService, never>;
|
|
6
7
|
static ɵprov: i0.ɵɵInjectableDeclaration<DurationInputResolverService>;
|
|
7
8
|
}
|