ngx-ode-ui 4.6.0-dev.0 → 4.6.0-dev.3
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/lib/components/datepicker/datepicker.component.mjs +148 -0
- package/esm2020/lib/components/dropdown/dropdown.component.mjs +55 -0
- package/esm2020/lib/components/ellipsis/ellipsis.component.mjs +53 -0
- package/esm2020/lib/components/form-errors/form-errors.component.mjs +35 -0
- package/esm2020/lib/components/form-field/form-field.component.mjs +24 -0
- package/esm2020/lib/components/item-tree/item-tree.component.mjs +170 -0
- package/esm2020/lib/components/lightbox/lightbox.component.mjs +70 -0
- package/esm2020/lib/components/lightbox-confirm/lightbox-confirm.component.mjs +43 -0
- package/esm2020/lib/components/list/list.component.mjs +88 -0
- package/esm2020/lib/components/list-checkable/list-checkable.component.mjs +79 -0
- package/esm2020/lib/components/message-box/message-box.component.mjs +92 -0
- package/esm2020/lib/components/message-sticker/message-sticker.component.mjs +51 -0
- package/esm2020/lib/components/mono-select/mono-select.component.mjs +83 -0
- package/esm2020/lib/components/multi-combo/multi-combo.component.mjs +166 -0
- package/esm2020/lib/components/multi-select/multi-select.component.mjs +104 -0
- package/esm2020/lib/components/panel-section/panel-section.component.mjs +23 -0
- package/esm2020/lib/components/portal/portal.component.mjs +15 -0
- package/esm2020/lib/components/push-panel/push-panel.component.mjs +43 -0
- package/esm2020/lib/components/search-input/search-input.component.mjs +87 -0
- package/esm2020/lib/components/search-toolbar/search-toolbar.component.mjs +56 -0
- package/esm2020/lib/components/side-layout/side-layout.component.mjs +23 -0
- package/esm2020/lib/components/side-panel/side-panel.component.mjs +41 -0
- package/esm2020/lib/components/spinner-cube/spinner-cube.component.mjs +31 -0
- package/esm2020/lib/components/table/pager.component.mjs +48 -0
- package/esm2020/lib/components/tooltip/tooltip.component.mjs +104 -0
- package/esm2020/lib/components/upload-files/upload-files.component.mjs +59 -0
- package/esm2020/lib/components/value-editable/simple-select.component.mjs +29 -0
- package/esm2020/lib/components/wizard/wizard.component.mjs +152 -0
- package/esm2020/lib/directives/anchor.directive.mjs +27 -0
- package/esm2020/lib/directives/drag-and-drop-files.directive.mjs +82 -0
- package/esm2020/lib/directives/dynamic-component/component-descriptor.model.mjs +15 -0
- package/esm2020/lib/directives/dynamic-component/dynamic-component.directive.mjs +58 -0
- package/esm2020/lib/directives/dynamictemplate.directive.mjs +83 -0
- package/esm2020/lib/directives/object-url.directive.mjs +28 -0
- package/esm2020/lib/ngx-ode-ui.module.mjs +282 -0
- package/esm2020/lib/pipes/bytes.pipe.mjs +20 -0
- package/esm2020/lib/pipes/filter.pipe.mjs +97 -0
- package/esm2020/lib/pipes/flattenObjArray.pipe.mjs +35 -0
- package/esm2020/lib/pipes/keys.pipe.mjs +20 -0
- package/esm2020/lib/pipes/length.pipe.mjs +17 -0
- package/esm2020/lib/pipes/limit.pipe.mjs +17 -0
- package/esm2020/lib/pipes/localizedDate.pipe.mjs +23 -0
- package/esm2020/lib/pipes/orderBy.pipe.mjs +161 -0
- package/esm2020/lib/pipes/replace.pipe.mjs +20 -0
- package/esm2020/lib/pipes/store.pipe.mjs +17 -0
- package/esm2020/lib/services/dynamicModuleImports.service.mjs +13 -0
- package/esm2020/lib/services/inputFile.service.mjs +56 -0
- package/esm2020/lib/services/labels.service.mjs +32 -0
- package/esm2020/lib/services/spinner.service.mjs +76 -0
- package/esm2020/lib/utils/math.mjs +19 -0
- package/esm2020/lib/utils/string.mjs +11 -0
- package/esm2020/lib/utils/testing.mjs +7 -0
- package/esm2020/ngx-ode-ui.mjs +5 -0
- package/esm2020/public-api.mjs +57 -0
- package/fesm2015/ngx-ode-ui.mjs +2954 -0
- package/fesm2015/ngx-ode-ui.mjs.map +1 -0
- package/fesm2020/ngx-ode-ui.mjs +2952 -0
- package/fesm2020/ngx-ode-ui.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/components/datepicker/datepicker.component.d.ts +7 -2
- package/lib/components/dropdown/dropdown.component.d.ts +3 -0
- package/lib/components/ellipsis/ellipsis.component.d.ts +4 -1
- package/lib/components/form-errors/form-errors.component.d.ts +3 -0
- package/lib/components/form-field/form-field.component.d.ts +3 -0
- package/lib/components/item-tree/item-tree.component.d.ts +5 -1
- package/lib/components/lightbox/lightbox.component.d.ts +5 -1
- package/lib/components/lightbox-confirm/lightbox-confirm.component.d.ts +3 -0
- package/lib/components/list/list.component.d.ts +5 -1
- package/lib/components/list-checkable/list-checkable.component.d.ts +5 -1
- package/lib/components/message-box/message-box.component.d.ts +8 -4
- package/lib/components/message-sticker/message-sticker.component.d.ts +3 -0
- package/lib/components/mono-select/mono-select.component.d.ts +3 -0
- package/lib/components/multi-combo/multi-combo.component.d.ts +4 -1
- package/lib/components/multi-select/multi-select.component.d.ts +3 -0
- package/lib/components/panel-section/panel-section.component.d.ts +3 -0
- package/lib/components/portal/portal.component.d.ts +3 -0
- package/lib/components/push-panel/push-panel.component.d.ts +4 -1
- package/lib/components/search-input/search-input.component.d.ts +5 -1
- package/lib/components/search-toolbar/search-toolbar.component.d.ts +3 -0
- package/lib/components/side-layout/side-layout.component.d.ts +3 -0
- package/lib/components/side-panel/side-panel.component.d.ts +4 -1
- package/lib/components/spinner-cube/spinner-cube.component.d.ts +5 -1
- package/lib/components/table/pager.component.d.ts +3 -0
- package/lib/components/tooltip/tooltip.component.d.ts +3 -0
- package/lib/components/upload-files/upload-files.component.d.ts +3 -0
- package/lib/components/value-editable/simple-select.component.d.ts +3 -0
- package/lib/components/wizard/wizard.component.d.ts +5 -0
- package/lib/directives/anchor.directive.d.ts +3 -0
- package/lib/directives/drag-and-drop-files.directive.d.ts +3 -0
- package/lib/directives/dynamic-component/dynamic-component.directive.d.ts +3 -0
- package/lib/directives/dynamictemplate.directive.d.ts +4 -1
- package/lib/directives/object-url.directive.d.ts +3 -0
- package/lib/ngx-ode-ui.module.d.ts +53 -2
- package/lib/pipes/bytes.pipe.d.ts +3 -0
- package/lib/pipes/filter.pipe.d.ts +3 -0
- package/lib/pipes/flattenObjArray.pipe.d.ts +3 -0
- package/lib/pipes/keys.pipe.d.ts +3 -0
- package/lib/pipes/length.pipe.d.ts +3 -0
- package/lib/pipes/limit.pipe.d.ts +3 -0
- package/lib/pipes/localizedDate.pipe.d.ts +3 -0
- package/lib/pipes/orderBy.pipe.d.ts +3 -0
- package/lib/pipes/replace.pipe.d.ts +8 -0
- package/lib/pipes/store.pipe.d.ts +3 -0
- package/lib/services/dynamicModuleImports.service.d.ts +3 -0
- package/lib/services/inputFile.service.d.ts +3 -0
- package/lib/services/labels.service.d.ts +3 -0
- package/lib/services/spinner.service.d.ts +4 -1
- package/package.json +29 -17
- package/public-api.d.ts +3 -0
- package/CHANGELOG.md +0 -14
- package/bundles/ngx-ode-ui.umd.js +0 -5805
- package/bundles/ngx-ode-ui.umd.js.map +0 -1
- package/bundles/ngx-ode-ui.umd.min.js +0 -17
- package/bundles/ngx-ode-ui.umd.min.js.map +0 -1
- package/esm2015/lib/components/datepicker/datepicker.component.js +0 -261
- package/esm2015/lib/components/dropdown/dropdown.component.js +0 -76
- package/esm2015/lib/components/ellipsis/ellipsis.component.js +0 -98
- package/esm2015/lib/components/form-errors/form-errors.component.js +0 -65
- package/esm2015/lib/components/form-field/form-field.component.js +0 -40
- package/esm2015/lib/components/item-tree/item-tree.component.js +0 -289
- package/esm2015/lib/components/lightbox/lightbox.component.js +0 -129
- package/esm2015/lib/components/lightbox-confirm/lightbox-confirm.component.js +0 -65
- package/esm2015/lib/components/list/list.component.js +0 -140
- package/esm2015/lib/components/list-checkable/list-checkable.component.js +0 -137
- package/esm2015/lib/components/message-box/message-box.component.js +0 -153
- package/esm2015/lib/components/message-sticker/message-sticker.component.js +0 -81
- package/esm2015/lib/components/mono-select/mono-select.component.js +0 -164
- package/esm2015/lib/components/multi-combo/multi-combo.component.js +0 -255
- package/esm2015/lib/components/multi-select/multi-select.component.js +0 -214
- package/esm2015/lib/components/panel-section/panel-section.component.js +0 -38
- package/esm2015/lib/components/portal/portal.component.js +0 -27
- package/esm2015/lib/components/push-panel/push-panel.component.js +0 -81
- package/esm2015/lib/components/search-input/search-input.component.js +0 -177
- package/esm2015/lib/components/search-toolbar/search-toolbar.component.js +0 -84
- package/esm2015/lib/components/side-layout/side-layout.component.js +0 -39
- package/esm2015/lib/components/side-panel/side-panel.component.js +0 -76
- package/esm2015/lib/components/spinner-cube/spinner-cube.component.js +0 -67
- package/esm2015/lib/components/table/pager.component.js +0 -95
- package/esm2015/lib/components/tooltip/tooltip.component.js +0 -172
- package/esm2015/lib/components/upload-files/upload-files.component.js +0 -112
- package/esm2015/lib/components/value-editable/simple-select.component.js +0 -57
- package/esm2015/lib/components/wizard/wizard.component.js +0 -225
- package/esm2015/lib/directives/anchor.directive.js +0 -34
- package/esm2015/lib/directives/drag-and-drop-files.directive.js +0 -126
- package/esm2015/lib/directives/dynamic-component/component-descriptor.model.js +0 -34
- package/esm2015/lib/directives/dynamic-component/dynamic-component.directive.js +0 -100
- package/esm2015/lib/directives/dynamictemplate.directive.js +0 -159
- package/esm2015/lib/directives/object-url.directive.js +0 -53
- package/esm2015/lib/ngx-ode-ui.module.js +0 -188
- package/esm2015/lib/pipes/bytes.pipe.js +0 -27
- package/esm2015/lib/pipes/filter.pipe.js +0 -141
- package/esm2015/lib/pipes/flattenObjArray.pipe.js +0 -52
- package/esm2015/lib/pipes/keys.pipe.js +0 -27
- package/esm2015/lib/pipes/length.pipe.js +0 -22
- package/esm2015/lib/pipes/limit.pipe.js +0 -24
- package/esm2015/lib/pipes/localizedDate.pipe.js +0 -44
- package/esm2015/lib/pipes/orderBy.pipe.js +0 -269
- package/esm2015/lib/pipes/store.pipe.js +0 -24
- package/esm2015/lib/services/dynamicModuleImports.service.js +0 -19
- package/esm2015/lib/services/inputFile.service.js +0 -80
- package/esm2015/lib/services/labels.service.js +0 -54
- package/esm2015/lib/services/spinner.service.js +0 -163
- package/esm2015/lib/utils/math.js +0 -49
- package/esm2015/lib/utils/string.js +0 -29
- package/esm2015/lib/utils/testing.js +0 -20
- package/esm2015/ngx-ode-ui.js +0 -12
- package/esm2015/public-api.js +0 -59
- package/esm5/lib/components/datepicker/datepicker.component.js +0 -292
- package/esm5/lib/components/dropdown/dropdown.component.js +0 -81
- package/esm5/lib/components/ellipsis/ellipsis.component.js +0 -106
- package/esm5/lib/components/form-errors/form-errors.component.js +0 -73
- package/esm5/lib/components/form-field/form-field.component.js +0 -41
- package/esm5/lib/components/item-tree/item-tree.component.js +0 -345
- package/esm5/lib/components/lightbox/lightbox.component.js +0 -141
- package/esm5/lib/components/lightbox-confirm/lightbox-confirm.component.js +0 -67
- package/esm5/lib/components/list/list.component.js +0 -146
- package/esm5/lib/components/list-checkable/list-checkable.component.js +0 -148
- package/esm5/lib/components/message-box/message-box.component.js +0 -190
- package/esm5/lib/components/message-sticker/message-sticker.component.js +0 -92
- package/esm5/lib/components/mono-select/mono-select.component.js +0 -192
- package/esm5/lib/components/multi-combo/multi-combo.component.js +0 -294
- package/esm5/lib/components/multi-select/multi-select.component.js +0 -258
- package/esm5/lib/components/panel-section/panel-section.component.js +0 -40
- package/esm5/lib/components/portal/portal.component.js +0 -28
- package/esm5/lib/components/push-panel/push-panel.component.js +0 -91
- package/esm5/lib/components/search-input/search-input.component.js +0 -200
- package/esm5/lib/components/search-toolbar/search-toolbar.component.js +0 -93
- package/esm5/lib/components/side-layout/side-layout.component.js +0 -41
- package/esm5/lib/components/side-panel/side-panel.component.js +0 -85
- package/esm5/lib/components/spinner-cube/spinner-cube.component.js +0 -76
- package/esm5/lib/components/table/pager.component.js +0 -113
- package/esm5/lib/components/tooltip/tooltip.component.js +0 -188
- package/esm5/lib/components/upload-files/upload-files.component.js +0 -133
- package/esm5/lib/components/value-editable/simple-select.component.js +0 -59
- package/esm5/lib/components/wizard/wizard.component.js +0 -161
- package/esm5/lib/directives/anchor.directive.js +0 -39
- package/esm5/lib/directives/drag-and-drop-files.directive.js +0 -146
- package/esm5/lib/directives/dynamic-component/component-descriptor.model.js +0 -44
- package/esm5/lib/directives/dynamic-component/dynamic-component.directive.js +0 -109
- package/esm5/lib/directives/dynamictemplate.directive.js +0 -175
- package/esm5/lib/directives/object-url.directive.js +0 -62
- package/esm5/lib/ngx-ode-ui.module.js +0 -199
- package/esm5/lib/pipes/bytes.pipe.js +0 -37
- package/esm5/lib/pipes/filter.pipe.js +0 -179
- package/esm5/lib/pipes/flattenObjArray.pipe.js +0 -62
- package/esm5/lib/pipes/keys.pipe.js +0 -36
- package/esm5/lib/pipes/length.pipe.js +0 -30
- package/esm5/lib/pipes/limit.pipe.js +0 -35
- package/esm5/lib/pipes/localizedDate.pipe.js +0 -49
- package/esm5/lib/pipes/orderBy.pipe.js +0 -280
- package/esm5/lib/pipes/store.pipe.js +0 -35
- package/esm5/lib/services/dynamicModuleImports.service.js +0 -21
- package/esm5/lib/services/inputFile.service.js +0 -98
- package/esm5/lib/services/labels.service.js +0 -68
- package/esm5/lib/services/spinner.service.js +0 -195
- package/esm5/lib/utils/math.js +0 -49
- package/esm5/lib/utils/string.js +0 -29
- package/esm5/lib/utils/testing.js +0 -20
- package/esm5/ngx-ode-ui.js +0 -12
- package/esm5/public-api.js +0 -59
- package/fesm2015/ngx-ode-ui.js +0 -5028
- package/fesm2015/ngx-ode-ui.js.map +0 -1
- package/fesm5/ngx-ode-ui.js +0 -5561
- package/fesm5/ngx-ode-ui.js.map +0 -1
- package/ngx-ode-ui.d.ts +0 -6
- package/ngx-ode-ui.metadata.json +0 -1
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { OdeComponent } from 'ngx-ode-core';
|
|
2
|
+
import { Component, EventEmitter, forwardRef, Input, Output, ViewChild } from '@angular/core';
|
|
3
|
+
import { NG_VALUE_ACCESSOR, NgModel } from '@angular/forms';
|
|
4
|
+
import Flatpickr from 'flatpickr';
|
|
5
|
+
import French from 'flatpickr/dist/l10n/fr.js';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "../../services/labels.service";
|
|
8
|
+
import * as i2 from "@angular/common";
|
|
9
|
+
import * as i3 from "@angular/forms";
|
|
10
|
+
// access ngmodel
|
|
11
|
+
const NOOP = () => {
|
|
12
|
+
};
|
|
13
|
+
export const CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR = {
|
|
14
|
+
provide: NG_VALUE_ACCESSOR,
|
|
15
|
+
useExisting: forwardRef(() => DatepickerComponent),
|
|
16
|
+
multi: true
|
|
17
|
+
};
|
|
18
|
+
export class DatepickerComponent extends OdeComponent {
|
|
19
|
+
constructor(renderer, labelsService, injector) {
|
|
20
|
+
super(injector);
|
|
21
|
+
this.renderer = renderer;
|
|
22
|
+
this.labelsService = labelsService;
|
|
23
|
+
this.innerValue = '';
|
|
24
|
+
this.disabled = false;
|
|
25
|
+
this._readonly = false;
|
|
26
|
+
this.enableTime = false;
|
|
27
|
+
this.placeholder = '';
|
|
28
|
+
this.changeDate = new EventEmitter();
|
|
29
|
+
this.onChangeCallback = NOOP;
|
|
30
|
+
this.onTouchedCallback = NOOP;
|
|
31
|
+
}
|
|
32
|
+
get value() {
|
|
33
|
+
return this.innerValue;
|
|
34
|
+
}
|
|
35
|
+
set value(v) {
|
|
36
|
+
let init = false;
|
|
37
|
+
if (this.innerValue === undefined) {
|
|
38
|
+
init = true;
|
|
39
|
+
}
|
|
40
|
+
if (v !== this.innerValue) {
|
|
41
|
+
this.innerValue = v;
|
|
42
|
+
this.onChangeCallback(v);
|
|
43
|
+
if (!init) {
|
|
44
|
+
this.changeDate.emit(v);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
set readonly(val) {
|
|
49
|
+
this._readonly = val;
|
|
50
|
+
if (this.datePickerInst && this.datePickerInst.altInput) {
|
|
51
|
+
// Apply the readonly attribute addition/removal to the visible input (wrapped)
|
|
52
|
+
if (val)
|
|
53
|
+
this.datePickerInst.altInput.setAttribute('readonly', "");
|
|
54
|
+
else
|
|
55
|
+
this.datePickerInst.altInput.removeAttribute('readonly');
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
get readonly() {
|
|
59
|
+
return this._readonly;
|
|
60
|
+
}
|
|
61
|
+
ngAfterViewInit() {
|
|
62
|
+
super.ngAfterViewInit();
|
|
63
|
+
// add attr data-input, mandatory for the picker to work in wrap mode
|
|
64
|
+
this.renderer.setAttribute(this.inputElement.nativeElement, 'data-input', '');
|
|
65
|
+
// disabled case
|
|
66
|
+
if (this.disabled === true) {
|
|
67
|
+
this.model.control.disable();
|
|
68
|
+
}
|
|
69
|
+
const navigatorLanguage = navigator.language.split('-')[0];
|
|
70
|
+
let datePickerLocale = {};
|
|
71
|
+
if (navigatorLanguage === 'fr') {
|
|
72
|
+
datePickerLocale = French.fr;
|
|
73
|
+
}
|
|
74
|
+
// options for the flatpickr instance
|
|
75
|
+
const options = {
|
|
76
|
+
altInput: !this.disabled,
|
|
77
|
+
altFormat: 'd/m/Y',
|
|
78
|
+
dateFormat: 'Y-m-d',
|
|
79
|
+
allowInput: false,
|
|
80
|
+
enableTime: this.enableTime,
|
|
81
|
+
minDate: this.minDate,
|
|
82
|
+
maxDate: this.maxDate,
|
|
83
|
+
clickOpens: false,
|
|
84
|
+
wrap: true,
|
|
85
|
+
locale: datePickerLocale
|
|
86
|
+
};
|
|
87
|
+
this.datePickerInst = new Flatpickr(this.datePickerElement.nativeElement, options);
|
|
88
|
+
if (!this.disabled) {
|
|
89
|
+
this.datePickerInst.altInput.addEventListener('click', e => {
|
|
90
|
+
if (!this.readonly) {
|
|
91
|
+
this.datePickerInst.toggle();
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
// Force updating the date input readonly attribute :
|
|
96
|
+
this.readonly = this._readonly;
|
|
97
|
+
}
|
|
98
|
+
ngOnDestroy() {
|
|
99
|
+
super.ngOnDestroy();
|
|
100
|
+
this.datePickerInst.destroy();
|
|
101
|
+
}
|
|
102
|
+
writeValue(value) {
|
|
103
|
+
if (value !== this.innerValue && this.datePickerInst) {
|
|
104
|
+
this.innerValue = value;
|
|
105
|
+
this.datePickerInst.setDate(value);
|
|
106
|
+
this.onChangeCallback(value);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
registerOnChange(fn) {
|
|
110
|
+
this.onChangeCallback = fn;
|
|
111
|
+
}
|
|
112
|
+
registerOnTouched(fn) {
|
|
113
|
+
this.onTouchedCallback = fn;
|
|
114
|
+
}
|
|
115
|
+
labels(label) {
|
|
116
|
+
return this.labelsService.getLabel(label);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
DatepickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: DatepickerComponent, deps: [{ token: i0.Renderer2 }, { token: i1.LabelsService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
|
120
|
+
DatepickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: DatepickerComponent, selector: "ode-date-picker", inputs: { disabled: "disabled", readonly: "readonly", enableTime: "enableTime", placeholder: "placeholder", minDate: "minDate", maxDate: "maxDate" }, outputs: { changeDate: "changeDate" }, providers: [CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR], viewQueries: [{ propertyName: "datePickerElement", first: true, predicate: ["datePickerElement"], descendants: true }, { propertyName: "inputElement", first: true, predicate: ["inputRef"], descendants: true }, { propertyName: "model", first: true, predicate: NgModel, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"flatpickr\" #datePickerElement>\n <input type=\"date\" [(ngModel)]=\"value\" [disabled]=\"disabled\" [ngClass]=\"{ 'cursor-default': disabled }\" placeholder=\"{{ placeholder }}\" #inputRef>\n <a *ngIf=\"!disabled\" [class.hidden]=\"readonly\" data-toggle [title]=\"labels('datepicker.open')\"><i class=\"fa fa-calendar open\" aria-hidden=\"true\"></i></a>\n <a *ngIf=\"!disabled\" [class.hidden]=\"readonly\" data-clear [title]=\"labels('datepicker.delete')\"><i class=\"fa fa-times delete\" aria-hidden=\"true\"></i></a>\n</div>\n", styles: [".hidden{visibility:hidden}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
121
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: DatepickerComponent, decorators: [{
|
|
122
|
+
type: Component,
|
|
123
|
+
args: [{ selector: 'ode-date-picker', providers: [CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR], template: "<div class=\"flatpickr\" #datePickerElement>\n <input type=\"date\" [(ngModel)]=\"value\" [disabled]=\"disabled\" [ngClass]=\"{ 'cursor-default': disabled }\" placeholder=\"{{ placeholder }}\" #inputRef>\n <a *ngIf=\"!disabled\" [class.hidden]=\"readonly\" data-toggle [title]=\"labels('datepicker.open')\"><i class=\"fa fa-calendar open\" aria-hidden=\"true\"></i></a>\n <a *ngIf=\"!disabled\" [class.hidden]=\"readonly\" data-clear [title]=\"labels('datepicker.delete')\"><i class=\"fa fa-times delete\" aria-hidden=\"true\"></i></a>\n</div>\n", styles: [".hidden{visibility:hidden}\n"] }]
|
|
124
|
+
}], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i1.LabelsService }, { type: i0.Injector }]; }, propDecorators: { datePickerElement: [{
|
|
125
|
+
type: ViewChild,
|
|
126
|
+
args: ['datePickerElement']
|
|
127
|
+
}], inputElement: [{
|
|
128
|
+
type: ViewChild,
|
|
129
|
+
args: ['inputRef']
|
|
130
|
+
}], model: [{
|
|
131
|
+
type: ViewChild,
|
|
132
|
+
args: [NgModel]
|
|
133
|
+
}], disabled: [{
|
|
134
|
+
type: Input
|
|
135
|
+
}], readonly: [{
|
|
136
|
+
type: Input
|
|
137
|
+
}], enableTime: [{
|
|
138
|
+
type: Input
|
|
139
|
+
}], placeholder: [{
|
|
140
|
+
type: Input
|
|
141
|
+
}], minDate: [{
|
|
142
|
+
type: Input
|
|
143
|
+
}], maxDate: [{
|
|
144
|
+
type: Input
|
|
145
|
+
}], changeDate: [{
|
|
146
|
+
type: Output
|
|
147
|
+
}] } });
|
|
148
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtb2RlLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRlcGlja2VyL2RhdGVwaWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW9kZS11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDNUMsT0FBTyxFQUFpQixTQUFTLEVBQWMsWUFBWSxFQUFFLFVBQVUsRUFDckUsS0FBSyxFQUFhLE1BQU0sRUFBYSxTQUFTLEVBQVksTUFBTSxlQUFlLENBQUM7QUFFbEYsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdsRixPQUFPLFNBQVMsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxNQUFNLE1BQU0sMkJBQTJCLENBQUM7Ozs7O0FBRS9DLGlCQUFpQjtBQUNqQixNQUFNLElBQUksR0FBRyxHQUFHLEVBQUU7QUFDbEIsQ0FBQyxDQUFDO0FBQ0YsTUFBTSxDQUFDLE1BQU0sbUNBQW1DLEdBQVE7SUFDcEQsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xELEtBQUssRUFBRSxJQUFJO0NBQ2QsQ0FBQztBQVFGLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxZQUFZO0lBRWpELFlBQW9CLFFBQW1CLEVBQ25CLGFBQTRCLEVBQ3BDLFFBQWtCO1FBQ2QsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBSFosYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtR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LENBQUUsbUNBQW1DLENBQUUscVFBd0N2QyxPQUFPLHVFQy9EdEIsc2lCQUtBOzJGRG9CYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0ksaUJBQWlCLGFBR2hCLENBQUUsbUNBQW1DLENBQUU7bUpBZ0NsRCxpQkFBaUI7c0JBRGhCLFNBQVM7dUJBQUMsbUJBQW1CO2dCQUk5QixZQUFZO3NCQURYLFNBQVM7dUJBQUMsVUFBVTtnQkFPckIsS0FBSztzQkFESixTQUFTO3VCQUFDLE9BQU87Z0JBSWxCLFFBQVE7c0JBRFAsS0FBSztnQkFJRixRQUFRO3NCQURYLEtBQUs7Z0JBZU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLFdBQVc7c0JBRFYsS0FBSztnQkFJTixPQUFPO3NCQUROLEtBQUs7Z0JBSU4sT0FBTztzQkFETixLQUFLO2dCQUlOLFVBQVU7c0JBRFQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9kZUNvbXBvbmVudCB9IGZyb20gJ25neC1vZGUtY29yZSc7XG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZixcbiAgSW5wdXQsIE9uRGVzdHJveSwgT3V0cHV0LCBSZW5kZXJlcjIsIFZpZXdDaGlsZCwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SLCBOZ01vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge0xhYmVsc1NlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xhYmVscy5zZXJ2aWNlJztcbmltcG9ydCBGbGF0cGlja3IgZnJvbSAnZmxhdHBpY2tyJztcbmltcG9ydCBGcmVuY2ggZnJvbSAnZmxhdHBpY2tyL2Rpc3QvbDEwbi9mci5qcyc7XG5cbi8vIGFjY2VzcyBuZ21vZGVsXG5jb25zdCBOT09QID0gKCkgPT4ge1xufTtcbmV4cG9ydCBjb25zdCBDVVNUT01fSU5QVVRfQ09OVFJPTF9WQUxVRV9BQ0NFU1NPUjogYW55ID0ge1xuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVwaWNrZXJDb21wb25lbnQpLFxuICAgIG11bHRpOiB0cnVlXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ29kZS1kYXRlLXBpY2tlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2RhdGVwaWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFsgQ1VTVE9NX0lOUFVUX0NPTlRST0xfVkFMVUVfQUNDRVNTT1IgXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRlcGlja2VyQ29tcG9uZW50IGV4dGVuZHMgT2RlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBsYWJlbHNTZXJ2aWNlOiBMYWJlbHNTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgICAgICAgICAgICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlubmVyVmFsdWU7XG4gICAgfVxuXG4gICAgc2V0IHZhbHVlKHY6IGFueSkge1xuICAgICAgICBsZXQgaW5pdCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5pbm5lclZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGluaXQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2ICE9PSB0aGlzLmlubmVyVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuaW5uZXJWYWx1ZSA9IHY7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sodik7XG4gICAgICAgICAgICBpZiAoIWluaXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURhdGUuZW1pdCh2KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbm5lclZhbHVlOiBhbnkgPSAnJztcblxuICAgIEBWaWV3Q2hpbGQoJ2RhdGVQaWNrZXJFbGVtZW50JylcbiAgICBkYXRlUGlja2VyRWxlbWVudDogRWxlbWVudFJlZjtcblxuICAgIEBWaWV3Q2hpbGQoJ2lucHV0UmVmJylcbiAgICBpbnB1dEVsZW1lbnQ6IEVsZW1lbnRSZWY7XG5cbiAgICAvLyBpbnN0YW5jZSBmbGF0cGlja3JcbiAgICBwcml2YXRlIGRhdGVQaWNrZXJJbnN0OiBGbGF0cGlja3I7XG5cbiAgICBAVmlld0NoaWxkKE5nTW9kZWwpXG4gICAgbW9kZWw6IE5nTW9kZWw7XG5cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCByZWFkb25seSggdmFsOmJvb2xlYW4gKSB7XG4gICAgICAgIHRoaXMuX3JlYWRvbmx5ID0gdmFsO1xuICAgICAgICBpZiggdGhpcy5kYXRlUGlja2VySW5zdCAmJiB0aGlzLmRhdGVQaWNrZXJJbnN0LmFsdElucHV0ICkge1xuICAgICAgICAgICAgLy8gQXBwbHkgdGhlIHJlYWRvbmx5IGF0dHJpYnV0ZSBhZGRpdGlvbi9yZW1vdmFsIHRvIHRoZSB2aXNpYmxlIGlucHV0ICh3cmFwcGVkKVxuICAgICAgICAgICAgaWYoIHZhbCApIHRoaXMuZGF0ZVBpY2tlckluc3QuYWx0SW5wdXQuc2V0QXR0cmlidXRlKCdyZWFkb25seScsIFwiXCIpO1xuICAgICAgICAgICAgZWxzZSAgICAgIHRoaXMuZGF0ZVBpY2tlckluc3QuYWx0SW5wdXQucmVtb3ZlQXR0cmlidXRlKCdyZWFkb25seScpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCByZWFkb25seSgpOmJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVhZG9ubHk7XG4gICAgfVxuICAgIF9yZWFkb25seSA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBlbmFibGVUaW1lID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHBsYWNlaG9sZGVyID0gJyc7XG5cbiAgICBASW5wdXQoKVxuICAgIG1pbkRhdGU7XG5cbiAgICBASW5wdXQoKVxuICAgIG1heERhdGU7XG5cbiAgICBAT3V0cHV0KClcbiAgICBjaGFuZ2VEYXRlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gICAgcHJpdmF0ZSBvbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gTk9PUDtcbiAgICBwcml2YXRlIG9uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gTk9PUDtcblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICAgIC8vIGFkZCBhdHRyIGRhdGEtaW5wdXQsIG1hbmRhdG9yeSBmb3IgdGhlIHBpY2tlciB0byB3b3JrIGluIHdyYXAgbW9kZVxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LCAnZGF0YS1pbnB1dCcsICcnKTtcblxuICAgICAgICAvLyBkaXNhYmxlZCBjYXNlXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLmNvbnRyb2wuZGlzYWJsZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmF2aWdhdG9yTGFuZ3VhZ2UgPSBuYXZpZ2F0b3IubGFuZ3VhZ2Uuc3BsaXQoJy0nKVswXTtcbiAgICAgICAgbGV0IGRhdGVQaWNrZXJMb2NhbGUgPSB7fTtcbiAgICAgICAgaWYgKG5hdmlnYXRvckxhbmd1YWdlID09PSAnZnInKSB7XG4gICAgICAgICAgICBkYXRlUGlja2VyTG9jYWxlID0gRnJlbmNoLmZyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gb3B0aW9ucyBmb3IgdGhlIGZsYXRwaWNrciBpbnN0YW5jZVxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgYWx0SW5wdXQ6ICF0aGlzLmRpc2FibGVkLFxuICAgICAgICAgICAgYWx0Rm9ybWF0OiAnZC9tL1knLCAvLyBkYXRlIGZvcm1hdCBkaXNwbGF5ZWQgdG8gdXNlclxuICAgICAgICAgICAgZGF0ZUZvcm1hdDogJ1ktbS1kJywgLy8gZGF0ZSBmb3JtYXQgc2VudCB0byBzZXJ2ZXJcbiAgICAgICAgICAgIGFsbG93SW5wdXQ6IGZhbHNlLFxuICAgICAgICAgICAgZW5hYmxlVGltZTogdGhpcy5lbmFibGVUaW1lLFxuICAgICAgICAgICAgbWluRGF0ZTogdGhpcy5taW5EYXRlLFxuICAgICAgICAgICAgbWF4RGF0ZTogdGhpcy5tYXhEYXRlLFxuICAgICAgICAgICAgY2xpY2tPcGVuczogZmFsc2UsXG4gICAgICAgICAgICB3cmFwOiB0cnVlLCAvLyB0byBhZGQgaW5wdXQgZGVjb3JhdGlvbiAoY2FsZW5kYXIgaWNvbiBhbmQgZGVsZXRlIGljb24pXG4gICAgICAgICAgICBsb2NhbGU6IGRhdGVQaWNrZXJMb2NhbGVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmRhdGVQaWNrZXJJbnN0ID0gbmV3IEZsYXRwaWNrcih0aGlzLmRhdGVQaWNrZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIG9wdGlvbnMpO1xuICAgICAgICBpZiggIXRoaXMuZGlzYWJsZWQgKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVQaWNrZXJJbnN0LmFsdElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYoICF0aGlzLnJlYWRvbmx5ICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVQaWNrZXJJbnN0LnRvZ2dsZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRm9yY2UgdXBkYXRpbmcgdGhlIGRhdGUgaW5wdXQgcmVhZG9ubHkgYXR0cmlidXRlIDpcbiAgICAgICAgdGhpcy5yZWFkb25seSA9IHRoaXMuX3JlYWRvbmx5O1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICB0aGlzLmRhdGVQaWNrZXJJbnN0LmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLmlubmVyVmFsdWUgJiYgdGhpcy5kYXRlUGlja2VySW5zdCkge1xuICAgICAgICAgICAgdGhpcy5pbm5lclZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRhdGVQaWNrZXJJbnN0LnNldERhdGUodmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICBsYWJlbHMobGFiZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGFiZWxzU2VydmljZS5nZXRMYWJlbChsYWJlbCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZsYXRwaWNrclwiICNkYXRlUGlja2VyRWxlbWVudD5cbiAgPGlucHV0IHR5cGU9XCJkYXRlXCIgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtuZ0NsYXNzXT1cInsgJ2N1cnNvci1kZWZhdWx0JzogZGlzYWJsZWQgfVwiIHBsYWNlaG9sZGVyPVwie3sgcGxhY2Vob2xkZXIgfX1cIiAjaW5wdXRSZWY+XG4gIDxhICpuZ0lmPVwiIWRpc2FibGVkXCIgW2NsYXNzLmhpZGRlbl09XCJyZWFkb25seVwiIGRhdGEtdG9nZ2xlIFt0aXRsZV09XCJsYWJlbHMoJ2RhdGVwaWNrZXIub3BlbicpXCI+PGkgY2xhc3M9XCJmYSBmYS1jYWxlbmRhciBvcGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYT5cbiAgPGEgKm5nSWY9XCIhZGlzYWJsZWRcIiBbY2xhc3MuaGlkZGVuXT1cInJlYWRvbmx5XCIgZGF0YS1jbGVhciBbdGl0bGVdPVwibGFiZWxzKCdkYXRlcGlja2VyLmRlbGV0ZScpXCI+PGkgY2xhc3M9XCJmYSBmYS10aW1lcyBkZWxldGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxuPC9kaXY+XG4iXX0=
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { OdeComponent } from 'ngx-ode-core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common";
|
|
5
|
+
/**
|
|
6
|
+
* DropdownComponent is an alternative to the MonoSelectComponent.
|
|
7
|
+
* Accept everything inside <ng-content> but should work with <ode-list> component
|
|
8
|
+
*
|
|
9
|
+
* Simple Dropdown Component without search:
|
|
10
|
+
* [isSearchActive] can be set to false to disable search input in <ode-list>
|
|
11
|
+
```
|
|
12
|
+
<ode-dropdown
|
|
13
|
+
[name]="option_name"
|
|
14
|
+
[isDropdownOpened]="a_boolean"
|
|
15
|
+
(onDropdown)="toggle_func"
|
|
16
|
+
>
|
|
17
|
+
<ode-list
|
|
18
|
+
[model]="model"
|
|
19
|
+
[filters]="filters"
|
|
20
|
+
(onSelect)="func_to_select_elem($event)"
|
|
21
|
+
(inputChange)="a_string_for_input_value = $event"
|
|
22
|
+
noResultsLabel="text_to_display"
|
|
23
|
+
searchPlaceholder="default_placeholder_text"
|
|
24
|
+
>
|
|
25
|
+
<ng-template let-item>
|
|
26
|
+
<div>{{ item.name }}</div>
|
|
27
|
+
</ng-template>
|
|
28
|
+
</ode-list>
|
|
29
|
+
</ode-dropdown>
|
|
30
|
+
`̀``
|
|
31
|
+
*/
|
|
32
|
+
export class DropdownComponent extends OdeComponent {
|
|
33
|
+
constructor(injector) {
|
|
34
|
+
super(injector);
|
|
35
|
+
this.name = '';
|
|
36
|
+
this.isDropdownOpened = false;
|
|
37
|
+
this.onDropdown = new EventEmitter();
|
|
38
|
+
}
|
|
39
|
+
ngOnInit() {
|
|
40
|
+
super.ngOnInit();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
DropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: DropdownComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
|
44
|
+
DropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: DropdownComponent, selector: "ode-dropdown", inputs: { name: "name", isDropdownOpened: "isDropdownOpened" }, outputs: { onDropdown: "onDropdown" }, usesInheritance: true, ngImport: i0, template: "<div class=\"dropdown\" [ngClass]=\"isDropdownOpened ? 'open' : ''\">\n <button (click)=\"onDropdown.emit()\" class=\"dropdown-trigger\">\n <span class=\"cell-ellipsis\">{{ name }}</span> <i class=\"fonticon arrow-select\"></i>\n </button>\n <div class=\"dropdown-list\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".dropdown{position:relative;width:230px;box-sizing:border-box}.dropdown *{box-sizing:border-box}.dropdown-trigger{cursor:pointer;display:inline-flex;align-items:center;justify-content:space-between;padding:12px 16px;font-size:14px;color:#4a4a4a;text-transform:uppercase;text-align:left;width:100%;border-radius:8px;border:1px solid #7a7a7a;background-color:#fff}.dropdown-trigger>span{display:inline-block;max-width:100%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.dropdown-trigger i.arrow-select{display:inline-block;float:none!important;padding-left:0;transform:rotate(180deg);transform-origin:center center}.dropdown-trigger:hover{color:#4a4a4a;border-color:#7a7a7a;background-color:#fff}.dropdown-trigger:hover i.arrow-select{color:#4a4a4a!important}.dropdown-list{display:none;position:absolute;overflow:hidden;z-index:2;top:100%;left:0;right:0;width:316px;box-shadow:0 4px 12px #00000026;border-radius:8px;background-color:#fff}.dropdown::ng-deep ode-list li{justify-content:flex-start}.dropdown::ng-deep ode-list input[type=search]{padding:12px 16px}.dropdown.open .dropdown-list{display:block}.dropdown.open i.arrow-select{transform:rotate(0)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
|
|
45
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: DropdownComponent, decorators: [{
|
|
46
|
+
type: Component,
|
|
47
|
+
args: [{ selector: 'ode-dropdown', template: "<div class=\"dropdown\" [ngClass]=\"isDropdownOpened ? 'open' : ''\">\n <button (click)=\"onDropdown.emit()\" class=\"dropdown-trigger\">\n <span class=\"cell-ellipsis\">{{ name }}</span> <i class=\"fonticon arrow-select\"></i>\n </button>\n <div class=\"dropdown-list\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".dropdown{position:relative;width:230px;box-sizing:border-box}.dropdown *{box-sizing:border-box}.dropdown-trigger{cursor:pointer;display:inline-flex;align-items:center;justify-content:space-between;padding:12px 16px;font-size:14px;color:#4a4a4a;text-transform:uppercase;text-align:left;width:100%;border-radius:8px;border:1px solid #7a7a7a;background-color:#fff}.dropdown-trigger>span{display:inline-block;max-width:100%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.dropdown-trigger i.arrow-select{display:inline-block;float:none!important;padding-left:0;transform:rotate(180deg);transform-origin:center center}.dropdown-trigger:hover{color:#4a4a4a;border-color:#7a7a7a;background-color:#fff}.dropdown-trigger:hover i.arrow-select{color:#4a4a4a!important}.dropdown-list{display:none;position:absolute;overflow:hidden;z-index:2;top:100%;left:0;right:0;width:316px;box-shadow:0 4px 12px #00000026;border-radius:8px;background-color:#fff}.dropdown::ng-deep ode-list li{justify-content:flex-start}.dropdown::ng-deep ode-list input[type=search]{padding:12px 16px}.dropdown.open .dropdown-list{display:block}.dropdown.open i.arrow-select{transform:rotate(0)}\n"] }]
|
|
48
|
+
}], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { name: [{
|
|
49
|
+
type: Input
|
|
50
|
+
}], isDropdownOpened: [{
|
|
51
|
+
type: Input
|
|
52
|
+
}], onDropdown: [{
|
|
53
|
+
type: Output
|
|
54
|
+
}] } });
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW9kZS11aS9zcmMvbGliL2NvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW9kZS11aS9zcmMvbGliL2NvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUN6RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDOzs7QUFFNUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJHO0FBT0gsTUFBTSxPQUFPLGlCQUFrQixTQUFRLFlBQVk7SUFFakQsWUFBWSxRQUFrQjtRQUM1QixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFHVCxTQUFJLEdBQVcsRUFBRSxDQUFDO1FBQ2xCLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUVqQyxlQUFVLEdBQXdCLElBQUksWUFBWSxFQUFRLENBQUM7SUFMckUsQ0FBQztJQU9ELFFBQVE7UUFDTixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbkIsQ0FBQzs7OEdBYlUsaUJBQWlCO2tHQUFqQixpQkFBaUIsa0xDcEM5QiwwVUFRQTsyRkQ0QmEsaUJBQWlCO2tCQUw3QixTQUFTOytCQUNFLGNBQWM7K0ZBVWYsSUFBSTtzQkFBWixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9kZUNvbXBvbmVudCB9IGZyb20gJ25neC1vZGUtY29yZSc7XG5cbi8qKlxuICogRHJvcGRvd25Db21wb25lbnQgaXMgYW4gYWx0ZXJuYXRpdmUgdG8gdGhlIE1vbm9TZWxlY3RDb21wb25lbnQuXG4gKiBBY2NlcHQgZXZlcnl0aGluZyBpbnNpZGUgPG5nLWNvbnRlbnQ+IGJ1dCBzaG91bGQgd29yayB3aXRoIDxvZGUtbGlzdD4gY29tcG9uZW50XG4gKiBcbiAqIFNpbXBsZSBEcm9wZG93biBDb21wb25lbnQgd2l0aG91dCBzZWFyY2g6XG4gKiBbaXNTZWFyY2hBY3RpdmVdIGNhbiBiZSBzZXQgdG8gZmFsc2UgdG8gZGlzYWJsZSBzZWFyY2ggaW5wdXQgaW4gPG9kZS1saXN0PlxuYGBgXG48b2RlLWRyb3Bkb3duXG4gICAgW25hbWVdPVwib3B0aW9uX25hbWVcIlxuICAgIFtpc0Ryb3Bkb3duT3BlbmVkXT1cImFfYm9vbGVhblwiXG4gICAgKG9uRHJvcGRvd24pPVwidG9nZ2xlX2Z1bmNcIlxuICA+XG4gIDxvZGUtbGlzdFxuICAgIFttb2RlbF09XCJtb2RlbFwiXG4gICAgW2ZpbHRlcnNdPVwiZmlsdGVyc1wiXG4gICAgKG9uU2VsZWN0KT1cImZ1bmNfdG9fc2VsZWN0X2VsZW0oJGV2ZW50KVwiXG4gICAgKGlucHV0Q2hhbmdlKT1cImFfc3RyaW5nX2Zvcl9pbnB1dF92YWx1ZSA9ICRldmVudFwiXG4gICAgbm9SZXN1bHRzTGFiZWw9XCJ0ZXh0X3RvX2Rpc3BsYXlcIlxuICAgIHNlYXJjaFBsYWNlaG9sZGVyPVwiZGVmYXVsdF9wbGFjZWhvbGRlcl90ZXh0XCJcbiAgICA+XG4gICAgICA8bmctdGVtcGxhdGUgbGV0LWl0ZW0+XG4gICAgICAgIDxkaXY+e3sgaXRlbS5uYW1lIH19PC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvb2RlLWxpc3Q+XG4gIDwvb2RlLWRyb3Bkb3duPlxuYMyAYGBcbiAqL1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvZGUtZHJvcGRvd24nLFxuICB0ZW1wbGF0ZVVybDogJy4vZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kcm9wZG93bi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIERyb3Bkb3duQ29tcG9uZW50IGV4dGVuZHMgT2RlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBjb25zdHJ1Y3RvcihpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBzdXBlcihpbmplY3Rvcik7XG4gIH1cblxuICBASW5wdXQoKSBuYW1lOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgaXNEcm9wZG93bk9wZW5lZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBvbkRyb3Bkb3duOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSAgbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cImRyb3Bkb3duXCIgW25nQ2xhc3NdPVwiaXNEcm9wZG93bk9wZW5lZCA/ICdvcGVuJyA6ICcnXCI+XG4gIDxidXR0b24gKGNsaWNrKT1cIm9uRHJvcGRvd24uZW1pdCgpXCIgY2xhc3M9XCJkcm9wZG93bi10cmlnZ2VyXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJjZWxsLWVsbGlwc2lzXCI+e3sgbmFtZSB9fTwvc3Bhbj4gPGkgY2xhc3M9XCJmb250aWNvbiBhcnJvdy1zZWxlY3RcIj48L2k+XG4gIDwvYnV0dG9uPlxuICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbGlzdFwiPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { OdeComponent } from 'ngx-ode-core';
|
|
2
|
+
import { Component, Input } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* A simple ellipsis component that switches text-overflow on click.
|
|
6
|
+
* Add an ellipsis={'hide'| 'expand'} attirubute on your element.
|
|
7
|
+
* Default behavior is 'hide', so that it's the same than the raw CSS
|
|
8
|
+
*/
|
|
9
|
+
export class EllipsisComponent extends OdeComponent {
|
|
10
|
+
constructor(eltRef, injector) {
|
|
11
|
+
super(injector);
|
|
12
|
+
this.eltRef = eltRef;
|
|
13
|
+
this._ellipsis = 'hide';
|
|
14
|
+
this.isExpanded = false;
|
|
15
|
+
this.initialStyle = Object.assign({}, this.eltRef.nativeElement.style);
|
|
16
|
+
}
|
|
17
|
+
set ellipsis(value) {
|
|
18
|
+
if (!!value) {
|
|
19
|
+
this._ellipsis = value;
|
|
20
|
+
if (this._ellipsis == 'expand') {
|
|
21
|
+
this.eltRef.nativeElement.className = 'expand';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
onClick() {
|
|
26
|
+
if (this._ellipsis == 'hide') {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
if (!this.isExpanded) {
|
|
30
|
+
this.isExpanded = true;
|
|
31
|
+
Object.assign(this.eltRef.nativeElement.style, {
|
|
32
|
+
textOverflow: 'clip',
|
|
33
|
+
overflow: 'auto',
|
|
34
|
+
whiteSpace: 'normal',
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
this.isExpanded = false;
|
|
39
|
+
this.eltRef.nativeElement.style = this.initialStyle;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
EllipsisComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: EllipsisComponent, deps: [{ token: i0.ElementRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
|
44
|
+
EllipsisComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: EllipsisComponent, selector: "[ellipsis]", inputs: { ellipsis: "ellipsis" }, host: { listeners: { "click": "onClick()" } }, usesInheritance: true, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, styles: [":host{display:block;width:8em;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}:host.expand{cursor:pointer}\n"] });
|
|
45
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: EllipsisComponent, decorators: [{
|
|
46
|
+
type: Component,
|
|
47
|
+
args: [{ selector: '[ellipsis]', template: `<ng-content></ng-content>`, host: {
|
|
48
|
+
'(click)': 'onClick()',
|
|
49
|
+
}, styles: [":host{display:block;width:8em;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}:host.expand{cursor:pointer}\n"] }]
|
|
50
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Injector }]; }, propDecorators: { ellipsis: [{
|
|
51
|
+
type: Input
|
|
52
|
+
}] } });
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxsaXBzaXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW9kZS11aS9zcmMvbGliL2NvbXBvbmVudHMvZWxsaXBzaXMvZWxsaXBzaXMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDNUMsT0FBTyxFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQVksTUFBTSxlQUFlLENBQUM7O0FBSXZFOzs7O0dBSUc7QUFTSCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsWUFBWTtJQUMvQyxZQUFvQixNQUFrQixFQUFFLFFBQWtCO1FBQ3RELEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQURBLFdBQU0sR0FBTixNQUFNLENBQVk7UUFJOUIsY0FBUyxHQUFzQixNQUFNLENBQUM7UUFXdEMsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUVuQixpQkFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBZjFFLENBQUM7SUFHRCxJQUNJLFFBQVEsQ0FBQyxLQUF1QjtRQUNoQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUU7WUFDVCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksUUFBUSxFQUFFO2dCQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO2FBQ2xEO1NBQ0o7SUFDTCxDQUFDO0lBS0QsT0FBTztRQUNILElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxNQUFNLEVBQUU7WUFDMUIsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdkIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUU7Z0JBQzNDLFlBQVksRUFBRSxNQUFNO2dCQUNwQixRQUFRLEVBQUUsTUFBTTtnQkFDaEIsVUFBVSxFQUFFLFFBQVE7YUFDdkIsQ0FBQyxDQUFDO1NBQ047YUFBTTtZQUNILElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQ3ZEO0lBRUwsQ0FBQzs7OEdBbkNRLGlCQUFpQjtrR0FBakIsaUJBQWlCLDBKQU5oQiwyQkFBMkI7MkZBTTVCLGlCQUFpQjtrQkFSN0IsU0FBUzsrQkFDSSxZQUFZLFlBQ1osMkJBQTJCLFFBRS9CO3dCQUNGLFNBQVMsRUFBRSxXQUFXO3FCQUN6Qjt3SEFTRyxRQUFRO3NCQURYLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPZGVDb21wb25lbnQgfSBmcm9tICduZ3gtb2RlLWNvcmUnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxudHlwZSBFbGxpcHNpc0JlaGF2aW9yID0gJ2V4cGFuZCcgfCAnaGlkZSc7XG5cbi8qKlxuICogQSBzaW1wbGUgZWxsaXBzaXMgY29tcG9uZW50IHRoYXQgc3dpdGNoZXMgdGV4dC1vdmVyZmxvdyBvbiBjbGljay5cbiAqIEFkZCBhbiBlbGxpcHNpcz17J2hpZGUnfCAnZXhwYW5kJ30gYXR0aXJ1YnV0ZSBvbiB5b3VyIGVsZW1lbnQuXG4gKiBEZWZhdWx0IGJlaGF2aW9yIGlzICdoaWRlJywgc28gdGhhdCBpdCdzIHRoZSBzYW1lIHRoYW4gdGhlIHJhdyBDU1NcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdbZWxsaXBzaXNdJyxcbiAgICB0ZW1wbGF0ZTogYDxuZy1jb250ZW50PjwvbmctY29udGVudD5gLFxuICAgIHN0eWxlVXJsczogWycuL2VsbGlwc2lzLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgaG9zdDoge1xuICAgICAgICAnKGNsaWNrKSc6ICdvbkNsaWNrKCknLFxuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgRWxsaXBzaXNDb21wb25lbnQgZXh0ZW5kcyBPZGVDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWx0UmVmOiBFbGVtZW50UmVmLCBpbmplY3RvcjogSW5qZWN0b3IgKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9lbGxpcHNpczogRWxsaXBzaXNCZWhhdmlvciAgPSAnaGlkZSc7XG4gICAgQElucHV0KClcbiAgICBzZXQgZWxsaXBzaXModmFsdWU6IEVsbGlwc2lzQmVoYXZpb3IpIHtcbiAgICAgICAgaWYgKCEhdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2VsbGlwc2lzID0gdmFsdWU7XG4gICAgICAgICAgICBpZiAodGhpcy5fZWxsaXBzaXMgPT0gJ2V4cGFuZCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsdFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTmFtZSA9ICdleHBhbmQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0V4cGFuZGVkID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIGluaXRpYWxTdHlsZSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZWx0UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUpO1xuICAgIG9uQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9lbGxpcHNpcyA9PSAnaGlkZScpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaXNFeHBhbmRlZCkge1xuICAgICAgICAgICAgdGhpcy5pc0V4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5lbHRSZWYubmF0aXZlRWxlbWVudC5zdHlsZSwge1xuICAgICAgICAgICAgICAgIHRleHRPdmVyZmxvdzogJ2NsaXAnLFxuICAgICAgICAgICAgICAgIG92ZXJmbG93OiAnYXV0bycsXG4gICAgICAgICAgICAgICAgd2hpdGVTcGFjZTogJ25vcm1hbCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNFeHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5lbHRSZWYubmF0aXZlRWxlbWVudC5zdHlsZSA9IHRoaXMuaW5pdGlhbFN0eWxlO1xuICAgICAgICB9XG5cbiAgICB9XG5cbn1cbiJdfQ==
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { OdeComponent } from 'ngx-ode-core';
|
|
2
|
+
import { Component, Input } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../../services/labels.service";
|
|
5
|
+
import * as i2 from "@angular/common";
|
|
6
|
+
import * as i3 from "ngx-ode-sijil";
|
|
7
|
+
export class FormErrorsComponent extends OdeComponent {
|
|
8
|
+
constructor(labelsService, injector) {
|
|
9
|
+
super(injector);
|
|
10
|
+
this.labelsService = labelsService;
|
|
11
|
+
}
|
|
12
|
+
getErrorsArray() {
|
|
13
|
+
const errorsArray = [];
|
|
14
|
+
for (const prop in this.ref.errors) {
|
|
15
|
+
errorsArray.push({ name: prop, value: this.ref.errors[prop] });
|
|
16
|
+
}
|
|
17
|
+
return errorsArray;
|
|
18
|
+
}
|
|
19
|
+
labels(label) {
|
|
20
|
+
return this.labelsService.getLabel(label);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
FormErrorsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: FormErrorsComponent, deps: [{ token: i1.LabelsService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
|
24
|
+
FormErrorsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: FormErrorsComponent, selector: "ode-form-errors", inputs: { ref: ["control", "ref"], expectedPatternMsg: "expectedPatternMsg" }, usesInheritance: true, ngImport: i0, template: "<div *ngIf=\"ref && ref.errors && (ref.dirty || ref.touched)\" class=\"form-errors\">\n <div *ngFor=\"let error of getErrorsArray()\">\n <span>{{ 'form.error.' + error.name | translate: error.value }}</span>\n <span *ngIf=\"error.name == 'pattern'\">{{expectedPatternMsg}}</span>\n </div>\n</div>\n", styles: [".form-errors{font-size:.8em;color:#dc143c;font-style:italic}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] });
|
|
25
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: FormErrorsComponent, decorators: [{
|
|
26
|
+
type: Component,
|
|
27
|
+
args: [{ selector: 'ode-form-errors', template: "<div *ngIf=\"ref && ref.errors && (ref.dirty || ref.touched)\" class=\"form-errors\">\n <div *ngFor=\"let error of getErrorsArray()\">\n <span>{{ 'form.error.' + error.name | translate: error.value }}</span>\n <span *ngIf=\"error.name == 'pattern'\">{{expectedPatternMsg}}</span>\n </div>\n</div>\n", styles: [".form-errors{font-size:.8em;color:#dc143c;font-style:italic}\n"] }]
|
|
28
|
+
}], ctorParameters: function () { return [{ type: i1.LabelsService }, { type: i0.Injector }]; }, propDecorators: { ref: [{
|
|
29
|
+
type: Input,
|
|
30
|
+
args: ['control']
|
|
31
|
+
}], expectedPatternMsg: [{
|
|
32
|
+
type: Input,
|
|
33
|
+
args: ['expectedPatternMsg']
|
|
34
|
+
}] } });
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lcnJvcnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW9kZS11aS9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS1lcnJvcnMvZm9ybS1lcnJvcnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW9kZS11aS9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS1lcnJvcnMvZm9ybS1lcnJvcnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBWSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFVM0QsTUFBTSxPQUFPLG1CQUFvQixTQUFRLFlBQVk7SUFDakQsWUFBb0IsYUFBNEIsRUFBRSxRQUFrQjtRQUNoRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFEQSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtJQUVoRCxDQUFDO0lBU0QsY0FBYztRQUNWLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN2QixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFO1lBQ2hDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLENBQUM7U0FDakU7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUN2QixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUs7UUFDUixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlDLENBQUM7O2dIQXRCUSxtQkFBbUI7b0dBQW5CLG1CQUFtQiw2SkNYaEMsb1RBTUE7MkZES2EsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNJLGlCQUFpQjsySEFVM0IsR0FBRztzQkFERixLQUFLO3VCQUFDLFNBQVM7Z0JBSWhCLGtCQUFrQjtzQkFEakIsS0FBSzt1QkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPZGVDb21wb25lbnQgfSBmcm9tICduZ3gtb2RlLWNvcmUnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWJzdHJhY3RDb250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7TGFiZWxzU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGFiZWxzLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ29kZS1mb3JtLWVycm9ycycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0tZXJyb3JzLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9mb3JtLWVycm9ycy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1FcnJvcnNDb21wb25lbnQgZXh0ZW5kcyBPZGVDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgbGFiZWxzU2VydmljZTogTGFiZWxzU2VydmljZSwgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICB9XG5cbiAgICBASW5wdXQoJ2NvbnRyb2wnKVxuICAgIHJlZjogQWJzdHJhY3RDb250cm9sO1xuXG4gICAgQElucHV0KCdleHBlY3RlZFBhdHRlcm5Nc2cnKVxuICAgIGV4cGVjdGVkUGF0dGVybk1zZzogc3RyaW5nO1xuXG5cbiAgICBnZXRFcnJvcnNBcnJheSgpIHtcbiAgICAgICAgY29uc3QgZXJyb3JzQXJyYXkgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHRoaXMucmVmLmVycm9ycykge1xuICAgICAgICAgICAgZXJyb3JzQXJyYXkucHVzaCh7IG5hbWU6IHByb3AsIHZhbHVlOiB0aGlzLnJlZi5lcnJvcnNbcHJvcF19KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXJyb3JzQXJyYXk7XG4gICAgfVxuXG4gICAgbGFiZWxzKGxhYmVsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxhYmVsc1NlcnZpY2UuZ2V0TGFiZWwobGFiZWwpO1xuICAgIH1cbn1cbiIsIjxkaXYgKm5nSWY9XCJyZWYgJiYgcmVmLmVycm9ycyAmJiAocmVmLmRpcnR5IHx8IHJlZi50b3VjaGVkKVwiIGNsYXNzPVwiZm9ybS1lcnJvcnNcIj5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgZXJyb3Igb2YgZ2V0RXJyb3JzQXJyYXkoKVwiPlxuICAgIDxzcGFuPnt7ICdmb3JtLmVycm9yLicgKyBlcnJvci5uYW1lIHwgdHJhbnNsYXRlOiBlcnJvci52YWx1ZSB9fTwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cImVycm9yLm5hbWUgPT0gJ3BhdHRlcm4nXCI+e3tleHBlY3RlZFBhdHRlcm5Nc2d9fTwvc3Bhbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { OdeComponent } from 'ngx-ode-core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common";
|
|
5
|
+
import * as i2 from "../message-sticker/message-sticker.component";
|
|
6
|
+
import * as i3 from "ngx-ode-sijil";
|
|
7
|
+
export class FormFieldComponent extends OdeComponent {
|
|
8
|
+
constructor(injector) {
|
|
9
|
+
super(injector);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
FormFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: FormFieldComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
|
13
|
+
FormFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: FormFieldComponent, selector: "ode-form-field", inputs: { label: "label", help: "help", required: "required" }, usesInheritance: true, ngImport: i0, template: "<div class=\"form-field\">\n <label>\n {{ label | translate }}\n <span *ngIf=\"required\" class=\"asterisque\">*</span>\n <ode-message-sticker *ngIf=\"help\"\n [type]=\"'info'\"\n [messages]=\"[help]\">\n </ode-message-sticker>\n </label>\n <ng-content></ng-content>\n</div>\n", styles: ["div.form-field{display:flex;align-items:center}div.form-field > > > > *{flex:1;margin-left:5px}div.form-field>*:first-child{flex:0 0 200px;margin-left:0}div.form-field message-sticker{font-size:1.3em}div.form-field .asterisque{color:#dc143c}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MessageStickerComponent, selector: "ode-message-sticker", inputs: ["type", "header", "messages", "gravity"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] });
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: FormFieldComponent, decorators: [{
|
|
15
|
+
type: Component,
|
|
16
|
+
args: [{ selector: 'ode-form-field', template: "<div class=\"form-field\">\n <label>\n {{ label | translate }}\n <span *ngIf=\"required\" class=\"asterisque\">*</span>\n <ode-message-sticker *ngIf=\"help\"\n [type]=\"'info'\"\n [messages]=\"[help]\">\n </ode-message-sticker>\n </label>\n <ng-content></ng-content>\n</div>\n", styles: ["div.form-field{display:flex;align-items:center}div.form-field > > > > *{flex:1;margin-left:5px}div.form-field>*:first-child{flex:0 0 200px;margin-left:0}div.form-field message-sticker{font-size:1.3em}div.form-field .asterisque{color:#dc143c}\n"] }]
|
|
17
|
+
}], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { label: [{
|
|
18
|
+
type: Input
|
|
19
|
+
}], help: [{
|
|
20
|
+
type: Input
|
|
21
|
+
}], required: [{
|
|
22
|
+
type: Input
|
|
23
|
+
}] } });
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtb2RlLXVpL3NyYy9saWIvY29tcG9uZW50cy9mb3JtLWZpZWxkL2Zvcm0tZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW9kZS11aS9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS1maWVsZC9mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7O0FBTzVDLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxZQUFZO0lBS2xELFlBQVksUUFBa0I7UUFDNUIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7OytHQVBVLGtCQUFrQjttR0FBbEIsa0JBQWtCLDZJQ1IvQiw2VUFXQTsyRkRIYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsZ0JBQWdCOytGQUtqQixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2RlQ29tcG9uZW50IH0gZnJvbSAnbmd4LW9kZS1jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb2RlLWZvcm0tZmllbGQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Zvcm0tZmllbGQuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBGb3JtRmllbGRDb21wb25lbnQgZXh0ZW5kcyBPZGVDb21wb25lbnQge1xuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nO1xuICBASW5wdXQoKSBoZWxwOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHJlcXVpcmVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgIHN1cGVyKGluamVjdG9yKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIj5cbiAgPGxhYmVsPlxuICAgIHt7IGxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgPHNwYW4gKm5nSWY9XCJyZXF1aXJlZFwiIGNsYXNzPVwiYXN0ZXJpc3F1ZVwiPio8L3NwYW4+XG4gICAgPG9kZS1tZXNzYWdlLXN0aWNrZXIgKm5nSWY9XCJoZWxwXCJcbiAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cIidpbmZvJ1wiXG4gICAgICAgICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiW2hlbHBdXCI+XG4gICAgPC9vZGUtbWVzc2FnZS1zdGlja2VyPlxuICA8L2xhYmVsPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { OdeComponent } from 'ngx-ode-core';
|
|
2
|
+
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common";
|
|
5
|
+
import * as i2 from "@angular/forms";
|
|
6
|
+
import * as i3 from "../../pipes/filter.pipe";
|
|
7
|
+
import * as i4 from "../../pipes/flattenObjArray.pipe";
|
|
8
|
+
import * as i5 from "../../pipes/orderBy.pipe";
|
|
9
|
+
export class ItemTreeComponent extends OdeComponent {
|
|
10
|
+
constructor(injector) {
|
|
11
|
+
super(injector);
|
|
12
|
+
/**** Inputs ****/
|
|
13
|
+
// Items
|
|
14
|
+
this.items = [];
|
|
15
|
+
// Property containing the list of child objects.
|
|
16
|
+
this.childrenProperty = 'children';
|
|
17
|
+
// Property to display in the list
|
|
18
|
+
this.displayProperty = 'label';
|
|
19
|
+
// Filter pipe argument
|
|
20
|
+
this.filter = '';
|
|
21
|
+
// OrderBy pipe argument
|
|
22
|
+
this.order = [];
|
|
23
|
+
// Reverse the order pipe
|
|
24
|
+
this.reverse = false;
|
|
25
|
+
this._flattenProps = [];
|
|
26
|
+
// Disable the opener icon
|
|
27
|
+
this.disableOpener = false;
|
|
28
|
+
// Use checkboxes instead of selecting items
|
|
29
|
+
this.checkboxMode = false;
|
|
30
|
+
/**** Outputs ****/
|
|
31
|
+
this.onSelect = new EventEmitter();
|
|
32
|
+
this.onCheck = new EventEmitter();
|
|
33
|
+
this._depth = 0;
|
|
34
|
+
this.unfolded = [];
|
|
35
|
+
}
|
|
36
|
+
// Flatten the tree on the specified properties
|
|
37
|
+
set flatten(flattenProps) {
|
|
38
|
+
if (!this.isFlattened() && flattenProps.length > 0) {
|
|
39
|
+
this._selectedItem = this._lastSelectedItem;
|
|
40
|
+
}
|
|
41
|
+
else if (this.isFlattened && flattenProps.length < 1) {
|
|
42
|
+
this.flagIfParent();
|
|
43
|
+
}
|
|
44
|
+
this._flattenProps = flattenProps;
|
|
45
|
+
}
|
|
46
|
+
get flatten() {
|
|
47
|
+
return this._flattenProps;
|
|
48
|
+
}
|
|
49
|
+
ngOnInit() {
|
|
50
|
+
super.ngOnInit();
|
|
51
|
+
this.flagIfParent();
|
|
52
|
+
}
|
|
53
|
+
selectItem(item) {
|
|
54
|
+
this._selectedItem = item;
|
|
55
|
+
if (this.childItemTree) {
|
|
56
|
+
delete this.childItemTree._selectedItem;
|
|
57
|
+
}
|
|
58
|
+
const idx = this.unfolded.indexOf(item);
|
|
59
|
+
if (!this.disableOpener && idx < 0) {
|
|
60
|
+
this.unfolded.push(item);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
this.unfolded.splice(idx, 1);
|
|
64
|
+
}
|
|
65
|
+
this.bubbleSelect(item);
|
|
66
|
+
}
|
|
67
|
+
checkItem(item) {
|
|
68
|
+
this.onCheck.emit(item);
|
|
69
|
+
}
|
|
70
|
+
bubbleSelect(item) {
|
|
71
|
+
this._lastSelectedItem = item;
|
|
72
|
+
this.onSelect.emit(item);
|
|
73
|
+
}
|
|
74
|
+
isSelected(item) {
|
|
75
|
+
return (this.disableOpener ? this._selectedItem : this._lastSelectedItem) === item;
|
|
76
|
+
}
|
|
77
|
+
toggleFold(event, item) {
|
|
78
|
+
event.stopPropagation();
|
|
79
|
+
const idx = this.unfolded.indexOf(item);
|
|
80
|
+
if (idx < 0) {
|
|
81
|
+
this.unfolded.push(item);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
this.unfolded.splice(idx, 1);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
isFolded(item) {
|
|
88
|
+
return this.disableOpener ? !this.isSelected(item) : this.unfolded.indexOf(item) < 0;
|
|
89
|
+
}
|
|
90
|
+
display(item) {
|
|
91
|
+
return this.displayProperty && item[this.displayProperty];
|
|
92
|
+
}
|
|
93
|
+
getChildren(item) {
|
|
94
|
+
return item[this.childrenProperty] || [];
|
|
95
|
+
}
|
|
96
|
+
hasChildren(item) {
|
|
97
|
+
return this.getChildren(item).length > 0;
|
|
98
|
+
}
|
|
99
|
+
isFlattened() {
|
|
100
|
+
return this._flattenProps.length;
|
|
101
|
+
}
|
|
102
|
+
flagIfParent() {
|
|
103
|
+
if (!this._lastSelectedItem) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const findSubItem = (item, target) => {
|
|
107
|
+
if (item === target) {
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
if (this.hasChildren(item)) {
|
|
111
|
+
return this.getChildren(item).find(subItem => {
|
|
112
|
+
return findSubItem(subItem, target);
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
return false;
|
|
116
|
+
};
|
|
117
|
+
for (const i in this.items) {
|
|
118
|
+
const item = this.items[i];
|
|
119
|
+
if (item === this._lastSelectedItem ||
|
|
120
|
+
findSubItem(item, this._lastSelectedItem)) {
|
|
121
|
+
this._selectedItem = item;
|
|
122
|
+
this.unfolded = [item];
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
this.changeDetector.markForCheck();
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
ItemTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: ItemTreeComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
|
130
|
+
ItemTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: ItemTreeComponent, selector: "ode-item-tree", inputs: { items: "items", childrenProperty: ["children", "childrenProperty"], displayProperty: ["display", "displayProperty"], displayTemplate: "displayTemplate", filter: "filter", order: "order", reverse: "reverse", flatten: "flatten", disableOpener: "disableOpener", checkboxMode: "checkboxMode", _lastSelectedItem: ["lastSelected", "_lastSelectedItem"], _depth: ["depth", "_depth"] }, outputs: { onSelect: "onSelect", onCheck: "onCheck" }, viewQueries: [{ propertyName: "childItemTree", first: true, predicate: ItemTreeComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ul [ngClass]=\"{ flattened: isFlattened() }\">\n <li *ngFor=\"let item of (items | flattenObjArray: flatten | filter: filter | orderBy: order:reverse)\"\n [ngClass]=\"{ selected: isSelected(item), unfolded: !isFolded(item), parent: hasChildren(item), root: _depth === 0 }\">\n <a href=\"javascript:void(0)\" (click)=\"selectItem(item)\" *ngIf=\"!checkboxMode\">\n <i class=\"opener\" (click)=\"toggleFold($event, item)\"\n *ngIf=\"!isFlattened() && hasChildren(item) && !disableOpener\"></i>\n <span *ngIf=\"displayProperty\">{{ display(item) }}</span>\n <span *ngIf=\"displayTemplate\">\n <ng-template [ngTemplateOutlet]=\"displayTemplate\" [ngTemplateOutletContext]=\"{$implicit: item}\"></ng-template>\n </span>\n </a>\n <div class=\"checkbox__item\" *ngIf=\"checkboxMode\">\n <input id=\"all\" type=\"checkbox\" [(ngModel)]=\"item.check\" ngDefaultControl>\n <label *ngIf=\"displayProperty\" for=\"all\" (click)=\"checkItem(item)\">{{display(item)}}</label>\n <span *ngIf=\"displayTemplate\">\n <ng-template [ngTemplateOutlet]=\"displayTemplate\" [ngTemplateOutletContext]=\"{$implicit: item}\"></ng-template>\n </span>\n </div>\n <ode-item-tree\n [items]=\"getChildren(item)\"\n [children]=\"childrenProperty\"\n [display]=\"displayProperty\"\n [displayTemplate]=\"displayTemplate\"\n [filter]=\"filter\"\n [order]=\"order\"\n [reverse]=\"reverse\"\n [lastSelected]=\"_lastSelectedItem\"\n [depth]=\"_depth + 1\"\n [disableOpener]=\"disableOpener\"\n [checkboxMode]=\"checkboxMode\"\n (onSelect)=\"bubbleSelect($event)\"\n (onCheck)=\"checkItem($event)\"\n *ngIf=\"(checkboxMode && hasChildren(item)) || (!isFlattened() && hasChildren(item) && !isFolded(item))\">\n </ode-item-tree>\n </li>\n</ul>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ItemTreeComponent, selector: "ode-item-tree", inputs: ["items", "children", "display", "displayTemplate", "filter", "order", "reverse", "flatten", "disableOpener", "checkboxMode", "lastSelected", "depth"], outputs: ["onSelect", "onCheck"] }, { kind: "pipe", type: i3.FilterPipe, name: "filter" }, { kind: "pipe", type: i4.FlattenObjectArrayPipe, name: "flattenObjArray" }, { kind: "pipe", type: i5.OrderPipe, name: "orderBy" }] });
|
|
131
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: ItemTreeComponent, decorators: [{
|
|
132
|
+
type: Component,
|
|
133
|
+
args: [{ selector: 'ode-item-tree', template: "<ul [ngClass]=\"{ flattened: isFlattened() }\">\n <li *ngFor=\"let item of (items | flattenObjArray: flatten | filter: filter | orderBy: order:reverse)\"\n [ngClass]=\"{ selected: isSelected(item), unfolded: !isFolded(item), parent: hasChildren(item), root: _depth === 0 }\">\n <a href=\"javascript:void(0)\" (click)=\"selectItem(item)\" *ngIf=\"!checkboxMode\">\n <i class=\"opener\" (click)=\"toggleFold($event, item)\"\n *ngIf=\"!isFlattened() && hasChildren(item) && !disableOpener\"></i>\n <span *ngIf=\"displayProperty\">{{ display(item) }}</span>\n <span *ngIf=\"displayTemplate\">\n <ng-template [ngTemplateOutlet]=\"displayTemplate\" [ngTemplateOutletContext]=\"{$implicit: item}\"></ng-template>\n </span>\n </a>\n <div class=\"checkbox__item\" *ngIf=\"checkboxMode\">\n <input id=\"all\" type=\"checkbox\" [(ngModel)]=\"item.check\" ngDefaultControl>\n <label *ngIf=\"displayProperty\" for=\"all\" (click)=\"checkItem(item)\">{{display(item)}}</label>\n <span *ngIf=\"displayTemplate\">\n <ng-template [ngTemplateOutlet]=\"displayTemplate\" [ngTemplateOutletContext]=\"{$implicit: item}\"></ng-template>\n </span>\n </div>\n <ode-item-tree\n [items]=\"getChildren(item)\"\n [children]=\"childrenProperty\"\n [display]=\"displayProperty\"\n [displayTemplate]=\"displayTemplate\"\n [filter]=\"filter\"\n [order]=\"order\"\n [reverse]=\"reverse\"\n [lastSelected]=\"_lastSelectedItem\"\n [depth]=\"_depth + 1\"\n [disableOpener]=\"disableOpener\"\n [checkboxMode]=\"checkboxMode\"\n (onSelect)=\"bubbleSelect($event)\"\n (onCheck)=\"checkItem($event)\"\n *ngIf=\"(checkboxMode && hasChildren(item)) || (!isFlattened() && hasChildren(item) && !isFolded(item))\">\n </ode-item-tree>\n </li>\n</ul>\n" }]
|
|
134
|
+
}], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { items: [{
|
|
135
|
+
type: Input
|
|
136
|
+
}], childrenProperty: [{
|
|
137
|
+
type: Input,
|
|
138
|
+
args: ['children']
|
|
139
|
+
}], displayProperty: [{
|
|
140
|
+
type: Input,
|
|
141
|
+
args: ['display']
|
|
142
|
+
}], displayTemplate: [{
|
|
143
|
+
type: Input
|
|
144
|
+
}], filter: [{
|
|
145
|
+
type: Input
|
|
146
|
+
}], order: [{
|
|
147
|
+
type: Input
|
|
148
|
+
}], reverse: [{
|
|
149
|
+
type: Input
|
|
150
|
+
}], flatten: [{
|
|
151
|
+
type: Input
|
|
152
|
+
}], disableOpener: [{
|
|
153
|
+
type: Input
|
|
154
|
+
}], checkboxMode: [{
|
|
155
|
+
type: Input
|
|
156
|
+
}], onSelect: [{
|
|
157
|
+
type: Output
|
|
158
|
+
}], onCheck: [{
|
|
159
|
+
type: Output
|
|
160
|
+
}], childItemTree: [{
|
|
161
|
+
type: ViewChild,
|
|
162
|
+
args: [ItemTreeComponent]
|
|
163
|
+
}], _lastSelectedItem: [{
|
|
164
|
+
type: Input,
|
|
165
|
+
args: ['lastSelected']
|
|
166
|
+
}], _depth: [{
|
|
167
|
+
type: Input,
|
|
168
|
+
args: ['depth']
|
|
169
|
+
}] } });
|
|
170
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1vZGUtdWkvc3JjL2xpYi9jb21wb25lbnRzL2l0ZW0tdHJlZS9pdGVtLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW9kZS11aS9zcmMvbGliL2NvbXBvbmVudHMvaXRlbS10cmVlL2l0ZW0tdHJlZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUF1QyxNQUFNLGVBQWUsQ0FBQzs7Ozs7OztBQU0vSCxNQUFNLE9BQU8saUJBQXFCLFNBQVEsWUFBWTtJQUVsRCxZQUFZLFFBQWtCO1FBQzFCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUdwQixrQkFBa0I7UUFFbEIsUUFBUTtRQUNDLFVBQUssR0FBZSxFQUFFLENBQUM7UUFFaEMsaURBQWlEO1FBQzlCLHFCQUFnQixHQUFHLFVBQVUsQ0FBQztRQUNqRCxrQ0FBa0M7UUFDaEIsb0JBQWUsR0FBRyxPQUFPLENBQUM7UUFFNUMsdUJBQXVCO1FBQ2QsV0FBTSxHQUFpQyxFQUFFLENBQUM7UUFDbkQsd0JBQXdCO1FBQ2YsVUFBSyxHQUFxQyxFQUFFLENBQUM7UUFDdEQseUJBQXlCO1FBQ2hCLFlBQU8sR0FBUSxLQUFLLENBQUM7UUFjdEIsa0JBQWEsR0FBa0IsRUFBRSxDQUFDO1FBRTFDLDBCQUEwQjtRQUNqQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUUvQiw0Q0FBNEM7UUFDbkMsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFFOUIsbUJBQW1CO1FBRVQsYUFBUSxHQUFvQixJQUFJLFlBQVksRUFBSyxDQUFDO1FBRWxE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QUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO2dCQUMvQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztnQkFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN2QixNQUFNO2FBQ1Q7U0FDSjtRQUVELElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdkMsQ0FBQzs7OEdBdkpRLGlCQUFpQjtrR0FBakIsaUJBQWlCLCtoQkFtRGYsaUJBQWlCLHVFQzFEaEMsdzBEQW9DQSxteENEN0JhLGlCQUFpQjsyRkFBakIsaUJBQWlCO2tCQUo3QixTQUFTOytCQUNJLGVBQWU7K0ZBWWhCLEtBQUs7c0JBQWIsS0FBSztnQkFHYSxnQkFBZ0I7c0JBQWxDLEtBQUs7dUJBQUMsVUFBVTtnQkFFQyxlQUFlO3NCQUFoQyxLQUFLO3VCQUFDLFNBQVM7Z0JBQ1AsZUFBZTtzQkFBdkIsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFHRixPQUFPO3NCQURWLEtBQUs7Z0JBZUcsYUFBYTtzQkFBckIsS0FBSztnQkFHRyxZQUFZO3NCQUFwQixLQUFLO2dCQUlJLFFBQVE7c0JBQWpCLE1BQU07Z0JBRUcsT0FBTztzQkFBaEIsTUFBTTtnQkFJdUIsYUFBYTtzQkFBMUMsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBSUwsaUJBQWlCO3NCQUF2QyxLQUFLO3VCQUFDLGNBQWM7Z0JBRUwsTUFBTTtzQkFBckIsS0FBSzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2RlQ29tcG9uZW50IH0gZnJvbSAnbmd4LW9kZS1jb3JlJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgQ29udGVudENoaWxkLCBUZW1wbGF0ZVJlZiwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdvZGUtaXRlbS10cmVlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vaXRlbS10cmVlLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBJdGVtVHJlZUNvbXBvbmVudDxUPiBleHRlbmRzIE9kZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBjb25zdHJ1Y3RvcihpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgIH1cblxuICAgIC8qKioqIElucHV0cyAqKioqL1xuXG4gICAgLy8gSXRlbXNcbiAgICBASW5wdXQoKSBpdGVtczogQXJyYXk8YW55PiA9IFtdO1xuXG4gICAgLy8gUHJvcGVydHkgY29udGFpbmluZyB0aGUgbGlzdCBvZiBjaGlsZCBvYmplY3RzLlxuICAgIEBJbnB1dCgnY2hpbGRyZW4nKSBjaGlsZHJlblByb3BlcnR5ID0gJ2NoaWxkcmVuJztcbiAgICAvLyBQcm9wZXJ0eSB0byBkaXNwbGF5IGluIHRoZSBsaXN0XG4gICAgQElucHV0KCdkaXNwbGF5JykgZGlzcGxheVByb3BlcnR5ID0gJ2xhYmVsJztcbiAgICBASW5wdXQoKSBkaXNwbGF5VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgLy8gRmlsdGVyIHBpcGUgYXJndW1lbnRcbiAgICBASW5wdXQoKSBmaWx0ZXI6IChPYmplY3QgfCBzdHJpbmcgfCBGdW5jdGlvbikgPSAnJztcbiAgICAvLyBPcmRlckJ5IHBpcGUgYXJndW1lbnRcbiAgICBASW5wdXQoKSBvcmRlcjogKEFycmF5PGFueT4gfCBzdHJpbmcgfCBGdW5jdGlvbikgPSBbXTtcbiAgICAvLyBSZXZlcnNlIHRoZSBvcmRlciBwaXBlXG4gICAgQElucHV0KCkgcmV2ZXJzZTogYW55ID0gZmFsc2U7XG4gICAgLy8gRmxhdHRlbiB0aGUgdHJlZSBvbiB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXNcbiAgICBASW5wdXQoKVxuICAgIHNldCBmbGF0dGVuKGZsYXR0ZW5Qcm9wczogQXJyYXk8c3RyaW5nPikge1xuICAgICAgICBpZiAoIXRoaXMuaXNGbGF0dGVuZWQoKSAmJiBmbGF0dGVuUHJvcHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtID0gdGhpcy5fbGFzdFNlbGVjdGVkSXRlbTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzRmxhdHRlbmVkICYmIGZsYXR0ZW5Qcm9wcy5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICB0aGlzLmZsYWdJZlBhcmVudCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ZsYXR0ZW5Qcm9wcyA9IGZsYXR0ZW5Qcm9wcztcbiAgICB9XG4gICAgZ2V0IGZsYXR0ZW4oKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mbGF0dGVuUHJvcHM7XG4gICAgfVxuICAgIHByaXZhdGUgX2ZsYXR0ZW5Qcm9wczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuXG4gICAgLy8gRGlzYWJsZSB0aGUgb3BlbmVyIGljb25cbiAgICBASW5wdXQoKSBkaXNhYmxlT3BlbmVyID0gZmFsc2U7XG5cbiAgICAvLyBVc2UgY2hlY2tib3hlcyBpbnN0ZWFkIG9mIHNlbGVjdGluZyBpdGVtc1xuICAgIEBJbnB1dCgpIGNoZWNrYm94TW9kZSA9IGZhbHNlO1xuXG4gICAgLyoqKiogT3V0cHV0cyAqKioqL1xuXG4gICAgQE91dHB1dCgpIG9uU2VsZWN0OiBFdmVudEVtaXR0ZXI8VD4gPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG5cbiAgICBAT3V0cHV0KCkgb25DaGVjazogRXZlbnRFbWl0dGVyPFQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuXG4gICAgLyoqKiogVmlldyAqKioqL1xuXG4gICAgQFZpZXdDaGlsZChJdGVtVHJlZUNvbXBvbmVudCkgY2hpbGRJdGVtVHJlZTogSXRlbVRyZWVDb21wb25lbnQ8VD47XG5cbiAgICAvKioqKiBJbnRlcm5hbCBMb2dpYyAqKioqL1xuXG4gICAgQElucHV0KCdsYXN0U2VsZWN0ZWQnKSBfbGFzdFNlbGVjdGVkSXRlbTogVDtcbiAgICBwcml2YXRlIF9zZWxlY3RlZEl0ZW06IFQ7XG4gICAgQElucHV0KCdkZXB0aCcpIF9kZXB0aCA9IDA7XG4gICAgcHJpdmF0ZSB1bmZvbGRlZDogVFtdID0gW107XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5mbGFnSWZQYXJlbnQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZWN0SXRlbShpdGVtOiBUKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkSXRlbSA9IGl0ZW07XG4gICAgICAgIGlmICh0aGlzLmNoaWxkSXRlbVRyZWUpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNoaWxkSXRlbVRyZWUuX3NlbGVjdGVkSXRlbTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZHggPSB0aGlzLnVuZm9sZGVkLmluZGV4T2YoaXRlbSk7XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlT3BlbmVyICYmIGlkeCA8IDApIHtcbiAgICAgICAgICAgIHRoaXMudW5mb2xkZWQucHVzaChpdGVtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnVuZm9sZGVkLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYnViYmxlU2VsZWN0KGl0ZW0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBjaGVja0l0ZW0oaXRlbTogVCkge1xuICAgICAgICB0aGlzLm9uQ2hlY2suZW1pdChpdGVtKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYnViYmxlU2VsZWN0KGl0ZW06IFQpIHtcbiAgICAgICAgdGhpcy5fbGFzdFNlbGVjdGVkSXRlbSA9IGl0ZW07XG4gICAgICAgIHRoaXMub25TZWxlY3QuZW1pdChpdGVtKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNTZWxlY3RlZChpdGVtKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5kaXNhYmxlT3BlbmVyID8gdGhpcy5fc2VsZWN0ZWRJdGVtIDogdGhpcy5fbGFzdFNlbGVjdGVkSXRlbSkgPT09IGl0ZW07XG4gICAgfVxuXG4gICAgcHVibGljIHRvZ2dsZUZvbGQoZXZlbnQ6IEV2ZW50LCBpdGVtOiBUKSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBjb25zdCBpZHggPSB0aGlzLnVuZm9sZGVkLmluZGV4T2YoaXRlbSk7XG4gICAgICAgIGlmIChpZHggPCAwKSB7XG4gICAgICAgICAgICB0aGlzLnVuZm9sZGVkLnB1c2goaXRlbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVuZm9sZGVkLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGlzRm9sZGVkKGl0ZW06IFQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZU9wZW5lciA/ICF0aGlzLmlzU2VsZWN0ZWQoaXRlbSkgOiB0aGlzLnVuZm9sZGVkLmluZGV4T2YoaXRlbSkgPCAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBkaXNwbGF5KGl0ZW06IFQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheVByb3BlcnR5ICYmIGl0ZW1bdGhpcy5kaXNwbGF5UHJvcGVydHldO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDaGlsZHJlbihpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtW3RoaXMuY2hpbGRyZW5Qcm9wZXJ0eV0gfHwgW107XG4gICAgfVxuXG4gICAgcHVibGljIGhhc0NoaWxkcmVuKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2hpbGRyZW4oaXRlbSkubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBpc0ZsYXR0ZW5lZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZsYXR0ZW5Qcm9wcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmbGFnSWZQYXJlbnQoKSB7XG4gICAgICAgIGlmICghdGhpcy5fbGFzdFNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmluZFN1Ykl0ZW0gPSAoaXRlbSwgdGFyZ2V0KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbSA9PT0gdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNDaGlsZHJlbihpdGVtKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENoaWxkcmVuKGl0ZW0pLmZpbmQoc3ViSXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaW5kU3ViSXRlbShzdWJJdGVtLCB0YXJnZXQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9O1xuXG4gICAgICAgIGZvciAoY29uc3QgaSBpbiB0aGlzLml0ZW1zKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtc1tpXTtcblxuICAgICAgICAgICAgaWYgKGl0ZW0gPT09IHRoaXMuX2xhc3RTZWxlY3RlZEl0ZW0gfHxcbiAgICAgICAgICAgICAgICAgICAgZmluZFN1Ykl0ZW0oaXRlbSwgdGhpcy5fbGFzdFNlbGVjdGVkSXRlbSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEl0ZW0gPSBpdGVtO1xuICAgICAgICAgICAgICAgIHRoaXMudW5mb2xkZWQgPSBbaXRlbV07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxufVxuIiwiPHVsIFtuZ0NsYXNzXT1cInsgZmxhdHRlbmVkOiBpc0ZsYXR0ZW5lZCgpIH1cIj5cbiAgPGxpICpuZ0Zvcj1cImxldCBpdGVtIG9mIChpdGVtcyB8IGZsYXR0ZW5PYmpBcnJheTogZmxhdHRlbiB8IGZpbHRlcjogZmlsdGVyIHwgb3JkZXJCeTogb3JkZXI6cmV2ZXJzZSlcIlxuICAgICAgW25nQ2xhc3NdPVwieyBzZWxlY3RlZDogaXNTZWxlY3RlZChpdGVtKSwgdW5mb2xkZWQ6ICFpc0ZvbGRlZChpdGVtKSwgcGFyZW50OiBoYXNDaGlsZHJlbihpdGVtKSwgcm9vdDogX2RlcHRoID09PSAwIH1cIj5cbiAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgKGNsaWNrKT1cInNlbGVjdEl0ZW0oaXRlbSlcIiAqbmdJZj1cIiFjaGVja2JveE1vZGVcIj5cbiAgICAgIDxpIGNsYXNzPVwib3BlbmVyXCIgKGNsaWNrKT1cInRvZ2dsZUZvbGQoJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgICAqbmdJZj1cIiFpc0ZsYXR0ZW5lZCgpICYmIGhhc0NoaWxkcmVuKGl0ZW0pICYmICFkaXNhYmxlT3BlbmVyXCI+PC9pPlxuICAgICAgPHNwYW4gKm5nSWY9XCJkaXNwbGF5UHJvcGVydHlcIj57eyBkaXNwbGF5KGl0ZW0pIH19PC9zcGFuPlxuICAgICAgPHNwYW4gKm5nSWY9XCJkaXNwbGF5VGVtcGxhdGVcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImRpc3BsYXlUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0OiBpdGVtfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICA8L3NwYW4+XG4gICAgPC9hPlxuICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveF9faXRlbVwiICpuZ0lmPVwiY2hlY2tib3hNb2RlXCI+XG4gICAgICA8aW5wdXQgaWQ9XCJhbGxcIiB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cIml0ZW0uY2hlY2tcIiBuZ0RlZmF1bHRDb250cm9sPlxuICAgICAgPGxhYmVsICpuZ0lmPVwiZGlzcGxheVByb3BlcnR5XCIgZm9yPVwiYWxsXCIgKGNsaWNrKT1cImNoZWNrSXRlbShpdGVtKVwiPnt7ZGlzcGxheShpdGVtKX19PC9sYWJlbD5cbiAgICAgIDxzcGFuICpuZ0lmPVwiZGlzcGxheVRlbXBsYXRlXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJkaXNwbGF5VGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDogaXRlbX1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxvZGUtaXRlbS10cmVlXG4gICAgICBbaXRlbXNdPVwiZ2V0Q2hpbGRyZW4oaXRlbSlcIlxuICAgICAgW2NoaWxkcmVuXT1cImNoaWxkcmVuUHJvcGVydHlcIlxuICAgICAgW2Rpc3BsYXldPVwiZGlzcGxheVByb3BlcnR5XCJcbiAgICAgIFtkaXNwbGF5VGVtcGxhdGVdPVwiZGlzcGxheVRlbXBsYXRlXCJcbiAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCJcbiAgICAgIFtvcmRlcl09XCJvcmRlclwiXG4gICAgICBbcmV2ZXJzZV09XCJyZXZlcnNlXCJcbiAgICAgIFtsYXN0U2VsZWN0ZWRdPVwiX2xhc3RTZWxlY3RlZEl0ZW1cIlxuICAgICAgW2RlcHRoXT1cIl9kZXB0aCArIDFcIlxuICAgICAgW2Rpc2FibGVPcGVuZXJdPVwiZGlzYWJsZU9wZW5lclwiXG4gICAgICBbY2hlY2tib3hNb2RlXT1cImNoZWNrYm94TW9kZVwiXG4gICAgICAob25TZWxlY3QpPVwiYnViYmxlU2VsZWN0KCRldmVudClcIlxuICAgICAgKG9uQ2hlY2spPVwiY2hlY2tJdGVtKCRldmVudClcIlxuICAgICAgKm5nSWY9XCIoY2hlY2tib3hNb2RlICYmIGhhc0NoaWxkcmVuKGl0ZW0pKSB8fCAoIWlzRmxhdHRlbmVkKCkgJiYgaGFzQ2hpbGRyZW4oaXRlbSkgJiYgIWlzRm9sZGVkKGl0ZW0pKVwiPlxuICAgIDwvb2RlLWl0ZW0tdHJlZT5cbiAgPC9saT5cbjwvdWw+XG4iXX0=
|