@wemake4u/form-player-se 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -0
- package/esm2022/lib/controls/accordion.mjs +7 -0
- package/esm2022/lib/controls/button.mjs +7 -0
- package/esm2022/lib/controls/checkbox.mjs +7 -0
- package/esm2022/lib/controls/checklist.mjs +7 -0
- package/esm2022/lib/controls/chipchecklist.mjs +7 -0
- package/esm2022/lib/controls/chipradio.mjs +7 -0
- package/esm2022/lib/controls/control.mjs +65 -0
- package/esm2022/lib/controls/date.mjs +7 -0
- package/esm2022/lib/controls/dynamiclist.mjs +4 -0
- package/esm2022/lib/controls/factory.mjs +106 -0
- package/esm2022/lib/controls/filepicker.mjs +7 -0
- package/esm2022/lib/controls/form.mjs +4 -0
- package/esm2022/lib/controls/group.mjs +4 -0
- package/esm2022/lib/controls/html.mjs +4 -0
- package/esm2022/lib/controls/iframe.mjs +4 -0
- package/esm2022/lib/controls/image.mjs +4 -0
- package/esm2022/lib/controls/number.mjs +7 -0
- package/esm2022/lib/controls/radio.mjs +7 -0
- package/esm2022/lib/controls/select.mjs +7 -0
- package/esm2022/lib/controls/separator.mjs +4 -0
- package/esm2022/lib/controls/spacer.mjs +4 -0
- package/esm2022/lib/controls/tab.mjs +7 -0
- package/esm2022/lib/controls/table.mjs +13 -0
- package/esm2022/lib/controls/taglist.mjs +7 -0
- package/esm2022/lib/controls/text.mjs +4 -0
- package/esm2022/lib/controls/textarea.mjs +7 -0
- package/esm2022/lib/controls/textfield.mjs +18 -0
- package/esm2022/lib/controls/time.mjs +7 -0
- package/esm2022/lib/controls/toggle.mjs +7 -0
- package/esm2022/lib/dataSources/interfaces.mjs +2 -0
- package/esm2022/lib/dataSources/odata.mjs +131 -0
- package/esm2022/lib/dataSources/rest.mjs +48 -0
- package/esm2022/lib/directives/accordion.directive.mjs +52 -0
- package/esm2022/lib/directives/adorner.directive.mjs +130 -0
- package/esm2022/lib/directives/disable.directive.mjs +38 -0
- package/esm2022/lib/directives/display.directive.mjs +46 -0
- package/esm2022/lib/directives/dropdown.directive.mjs +233 -0
- package/esm2022/lib/directives/frame-security.directive.mjs +66 -0
- package/esm2022/lib/directives/grid.directive.mjs +68 -0
- package/esm2022/lib/directives/register.directive.mjs +86 -0
- package/esm2022/lib/directives/repeat.directive.mjs +38 -0
- package/esm2022/lib/directives/tab.directive.mjs +49 -0
- package/esm2022/lib/directives/updateblur.directive.mjs +32 -0
- package/esm2022/lib/dynamic-fields/dynamic-fields.component.mjs +493 -0
- package/esm2022/lib/dynamic-form/dynamic-form.component.mjs +395 -0
- package/esm2022/lib/locale/locale-it.mjs +13 -0
- package/esm2022/lib/services/data.service.mjs +29 -0
- package/esm2022/lib/services/event.service.mjs +19 -0
- package/esm2022/lib/services/feel.service.mjs +73 -0
- package/esm2022/lib/services/formatter.service.mjs +60 -0
- package/esm2022/lib/services/markdown.service.mjs +24 -0
- package/esm2022/lib/services/mime.service.mjs +32 -0
- package/esm2022/lib/services/programmability.service.mjs +221 -0
- package/esm2022/lib/services/proxy.service.mjs +131 -0
- package/esm2022/lib/services/register.service.mjs +60 -0
- package/esm2022/lib/services/sanitize.service.mjs +38 -0
- package/esm2022/lib/services/scope.service.mjs +46 -0
- package/esm2022/lib/services/toast.service.mjs +37 -0
- package/esm2022/lib/services/weak.service.mjs +60 -0
- package/esm2022/lib/utils/extractFiles.mjs +30 -0
- package/esm2022/lib/utils/gridCells.mjs +49 -0
- package/esm2022/lib/utils/groupByRow.mjs +30 -0
- package/esm2022/lib/utils/patchForm.mjs +55 -0
- package/esm2022/lib/utils/toFormData.mjs +11 -0
- package/esm2022/public-api.mjs +8 -0
- package/esm2022/wemake4u-form-player-se.mjs +5 -0
- package/fesm2022/wemake4u-form-player-se.mjs +3101 -0
- package/fesm2022/wemake4u-form-player-se.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/controls/accordion.d.ts +4 -0
- package/lib/controls/button.d.ts +4 -0
- package/lib/controls/checkbox.d.ts +4 -0
- package/lib/controls/checklist.d.ts +4 -0
- package/lib/controls/chipchecklist.d.ts +4 -0
- package/lib/controls/chipradio.d.ts +4 -0
- package/lib/controls/control.d.ts +24 -0
- package/lib/controls/date.d.ts +4 -0
- package/lib/controls/dynamiclist.d.ts +3 -0
- package/lib/controls/factory.d.ts +4 -0
- package/lib/controls/filepicker.d.ts +4 -0
- package/lib/controls/form.d.ts +3 -0
- package/lib/controls/group.d.ts +3 -0
- package/lib/controls/html.d.ts +3 -0
- package/lib/controls/iframe.d.ts +3 -0
- package/lib/controls/image.d.ts +3 -0
- package/lib/controls/number.d.ts +4 -0
- package/lib/controls/radio.d.ts +4 -0
- package/lib/controls/select.d.ts +4 -0
- package/lib/controls/separator.d.ts +3 -0
- package/lib/controls/spacer.d.ts +3 -0
- package/lib/controls/tab.d.ts +4 -0
- package/lib/controls/table.d.ts +6 -0
- package/lib/controls/taglist.d.ts +4 -0
- package/lib/controls/text.d.ts +3 -0
- package/lib/controls/textarea.d.ts +4 -0
- package/lib/controls/textfield.d.ts +6 -0
- package/lib/controls/time.d.ts +4 -0
- package/lib/controls/toggle.d.ts +4 -0
- package/lib/dataSources/interfaces.d.ts +8 -0
- package/lib/dataSources/odata.d.ts +16 -0
- package/lib/dataSources/rest.d.ts +16 -0
- package/lib/directives/accordion.directive.d.ts +11 -0
- package/lib/directives/adorner.directive.d.ts +22 -0
- package/lib/directives/disable.directive.d.ts +12 -0
- package/lib/directives/display.directive.d.ts +12 -0
- package/lib/directives/dropdown.directive.d.ts +26 -0
- package/lib/directives/frame-security.directive.d.ts +14 -0
- package/lib/directives/grid.directive.d.ts +17 -0
- package/lib/directives/register.directive.d.ts +24 -0
- package/lib/directives/repeat.directive.d.ts +12 -0
- package/lib/directives/tab.directive.d.ts +11 -0
- package/lib/directives/updateblur.directive.d.ts +10 -0
- package/lib/dynamic-fields/dynamic-fields.component.d.ts +84 -0
- package/lib/dynamic-form/dynamic-form.component.d.ts +76 -0
- package/lib/locale/locale-it.d.ts +12 -0
- package/lib/services/data.service.d.ts +15 -0
- package/lib/services/event.service.d.ts +15 -0
- package/lib/services/feel.service.d.ts +10 -0
- package/lib/services/formatter.service.d.ts +10 -0
- package/lib/services/markdown.service.d.ts +7 -0
- package/lib/services/mime.service.d.ts +8 -0
- package/lib/services/programmability.service.d.ts +39 -0
- package/lib/services/proxy.service.d.ts +31 -0
- package/lib/services/register.service.d.ts +18 -0
- package/lib/services/sanitize.service.d.ts +12 -0
- package/lib/services/scope.service.d.ts +13 -0
- package/lib/services/toast.service.d.ts +13 -0
- package/lib/services/weak.service.d.ts +10 -0
- package/lib/utils/extractFiles.d.ts +4 -0
- package/lib/utils/gridCells.d.ts +19 -0
- package/lib/utils/groupByRow.d.ts +38 -0
- package/lib/utils/patchForm.d.ts +8 -0
- package/lib/utils/toFormData.d.ts +1 -0
- package/package.json +42 -0
- package/public-api.d.ts +4 -0
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import { Directive, Host } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "ngx-sirio-lib";
|
|
4
|
+
export class DropdownDirective {
|
|
5
|
+
el;
|
|
6
|
+
renderer;
|
|
7
|
+
sirioSelect;
|
|
8
|
+
constructor(el, renderer, sirioSelect) {
|
|
9
|
+
this.el = el;
|
|
10
|
+
this.renderer = renderer;
|
|
11
|
+
this.sirioSelect = sirioSelect;
|
|
12
|
+
}
|
|
13
|
+
ngAfterViewInit() {
|
|
14
|
+
this.handleNullValue();
|
|
15
|
+
this.handleSearchable();
|
|
16
|
+
}
|
|
17
|
+
handleNullValue() {
|
|
18
|
+
if (this.sirioSelect
|
|
19
|
+
&& this.sirioSelect.value === null
|
|
20
|
+
&& Array.isArray(this.sirioSelect.options)) {
|
|
21
|
+
const nullOption = this.sirioSelect.options.find(option => option.value === null);
|
|
22
|
+
if (nullOption) {
|
|
23
|
+
nullOption.isSelected = true;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
handleSearchable() {
|
|
28
|
+
const searchable = this.el.nativeElement.querySelector('.searchable');
|
|
29
|
+
if (searchable) {
|
|
30
|
+
const dropDown = this.el.nativeElement.querySelector('.sirio-dropdown');
|
|
31
|
+
const dropMenu = dropDown.querySelector('.sirio-dropdown-menu');
|
|
32
|
+
const input = searchable.querySelector('input');
|
|
33
|
+
this.renderer.insertBefore(dropDown, searchable, dropMenu);
|
|
34
|
+
this.renderer.listen(input, 'blur', (event) => {
|
|
35
|
+
this.sirioSelect.panel.close();
|
|
36
|
+
});
|
|
37
|
+
this.renderer.listen(input, 'keyup', (event) => {
|
|
38
|
+
this.onKeyUp(event, input);
|
|
39
|
+
});
|
|
40
|
+
this.renderer.listen(input, 'keydown', (event) => {
|
|
41
|
+
this.onKeyDown(event);
|
|
42
|
+
});
|
|
43
|
+
this.sirioSelect.panel.panelOpened.subscribe(() => {
|
|
44
|
+
this.activate(searchable);
|
|
45
|
+
});
|
|
46
|
+
this.sirioSelect.panel.panelClosed.subscribe(() => {
|
|
47
|
+
this.deactivate(searchable);
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
deactivate(element) {
|
|
52
|
+
this.renderer.setStyle(element, 'display', 'none');
|
|
53
|
+
}
|
|
54
|
+
activate(element) {
|
|
55
|
+
let currentValue = "";
|
|
56
|
+
if (this.sirioSelect.optionsSelected.length > 0) {
|
|
57
|
+
currentValue = this.sirioSelect.optionsSelected[0].text;
|
|
58
|
+
}
|
|
59
|
+
const input = element.querySelector("input");
|
|
60
|
+
if (!input)
|
|
61
|
+
return;
|
|
62
|
+
input.value = currentValue;
|
|
63
|
+
const dropMenu = this.el.nativeElement.querySelector('.sirio-dropdown-menu');
|
|
64
|
+
this.sirioSelect.options.forEach((option) => {
|
|
65
|
+
this.show(option, true);
|
|
66
|
+
if (currentValue == option.text) {
|
|
67
|
+
dropMenu.scrollTop = this.native(option).offsetTop;
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
this.renderer.setStyle(element, 'display', 'inline-block');
|
|
71
|
+
setTimeout(() => {
|
|
72
|
+
input.setSelectionRange(input.value.length, input.value.length);
|
|
73
|
+
input.focus();
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
onKeyUp(event, input) {
|
|
77
|
+
const { code } = event;
|
|
78
|
+
switch (code) {
|
|
79
|
+
case 'Enter':
|
|
80
|
+
case 'Space':
|
|
81
|
+
case 'ArrowDown':
|
|
82
|
+
case 'ArrowUp':
|
|
83
|
+
case 'Escape':
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const value = this.comparable(input.value);
|
|
87
|
+
let firstMatch = true;
|
|
88
|
+
this.sirioSelect.options.forEach((option, index) => {
|
|
89
|
+
const match = this.comparable(option.text).includes(value);
|
|
90
|
+
this.show(option, match);
|
|
91
|
+
if (match && firstMatch) {
|
|
92
|
+
option.setFocus();
|
|
93
|
+
firstMatch = false;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
option.removeFocus();
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
onKeyDown(event) {
|
|
101
|
+
const panel = this.sirioSelect.panel;
|
|
102
|
+
if (!panel) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
const panelIsOpen = panel.panelIsOpen;
|
|
106
|
+
const { code } = event;
|
|
107
|
+
if (panelIsOpen) {
|
|
108
|
+
switch (code) {
|
|
109
|
+
case 'Enter':
|
|
110
|
+
case 'Space':
|
|
111
|
+
if (panel.optionFocused) {
|
|
112
|
+
panel.optionFocused?.onOptionSelected(event);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
panel.close(event);
|
|
116
|
+
event?.preventDefault();
|
|
117
|
+
}
|
|
118
|
+
break;
|
|
119
|
+
case 'ArrowDown':
|
|
120
|
+
this.scrollDown();
|
|
121
|
+
event?.preventDefault();
|
|
122
|
+
break;
|
|
123
|
+
case 'ArrowUp':
|
|
124
|
+
this.scrollUp();
|
|
125
|
+
event?.preventDefault();
|
|
126
|
+
break;
|
|
127
|
+
case 'Escape':
|
|
128
|
+
panel.close(event);
|
|
129
|
+
break;
|
|
130
|
+
default:
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
if (!panelIsOpen) {
|
|
135
|
+
switch (code) {
|
|
136
|
+
case 'Enter':
|
|
137
|
+
case 'Space':
|
|
138
|
+
panel.open(event);
|
|
139
|
+
event?.preventDefault();
|
|
140
|
+
break;
|
|
141
|
+
default:
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
native(option) {
|
|
147
|
+
return option.viewContainerRef.element.nativeElement;
|
|
148
|
+
}
|
|
149
|
+
isHidden(option) {
|
|
150
|
+
return this.native(option).style.display === 'none';
|
|
151
|
+
}
|
|
152
|
+
show(option, value) {
|
|
153
|
+
this.native(option).style.display = value ? '' : 'none';
|
|
154
|
+
}
|
|
155
|
+
comparable(text) {
|
|
156
|
+
return text.toLowerCase().trim();
|
|
157
|
+
}
|
|
158
|
+
scrollDown() {
|
|
159
|
+
const panel = this.sirioSelect.panel;
|
|
160
|
+
if (!panel.optionFocused) {
|
|
161
|
+
panel.scrollBarTop();
|
|
162
|
+
panel.options.first.setFocus();
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
const nextOptionFocused = this.findNextVisibleOption(panel.optionFocusedIndex + 1, panel.options);
|
|
166
|
+
panel.scrollBarDown();
|
|
167
|
+
panel.optionFocused?.removeFocus();
|
|
168
|
+
if (nextOptionFocused) {
|
|
169
|
+
nextOptionFocused?.setFocus();
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
panel.scrollBarTop();
|
|
173
|
+
const firstVisible = this.findNextVisibleOption(0, panel.options);
|
|
174
|
+
if (firstVisible) {
|
|
175
|
+
firstVisible.setFocus();
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
scrollUp() {
|
|
179
|
+
const panel = this.sirioSelect.panel;
|
|
180
|
+
if (!panel.optionFocused) {
|
|
181
|
+
panel.scrollBarTop();
|
|
182
|
+
panel.options.last.setFocus();
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
const nextOptionFocused = this.findPreviousVisibleOption(panel.optionFocusedIndex - 1, panel.options);
|
|
186
|
+
if (nextOptionFocused) {
|
|
187
|
+
panel.scrollBarUp();
|
|
188
|
+
panel.optionFocused?.removeFocus();
|
|
189
|
+
nextOptionFocused?.setFocus();
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
panel.optionFocused?.removeFocus();
|
|
193
|
+
panel.scrollBarBottom();
|
|
194
|
+
const lastVisible = this.findPreviousVisibleOption(panel.options.length - 1, panel.options);
|
|
195
|
+
if (lastVisible) {
|
|
196
|
+
lastVisible.setFocus();
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
findPreviousVisibleOption(startIndex, options) {
|
|
200
|
+
let i = startIndex;
|
|
201
|
+
while (i >= 0) {
|
|
202
|
+
const option = options.get(i);
|
|
203
|
+
if (!this.isHidden(option)) {
|
|
204
|
+
return option;
|
|
205
|
+
}
|
|
206
|
+
i--;
|
|
207
|
+
}
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
findNextVisibleOption(startIndex, options) {
|
|
211
|
+
let i = startIndex;
|
|
212
|
+
while (i < options.length) {
|
|
213
|
+
const option = options.get(i);
|
|
214
|
+
if (!this.isHidden(option)) {
|
|
215
|
+
return option;
|
|
216
|
+
}
|
|
217
|
+
i++;
|
|
218
|
+
}
|
|
219
|
+
return null;
|
|
220
|
+
}
|
|
221
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DropdownDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.SirioSelectComponent, host: true }], target: i0.ɵɵFactoryTarget.Directive });
|
|
222
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: DropdownDirective, isStandalone: true, selector: "[dropdown]", ngImport: i0 });
|
|
223
|
+
}
|
|
224
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DropdownDirective, decorators: [{
|
|
225
|
+
type: Directive,
|
|
226
|
+
args: [{
|
|
227
|
+
selector: '[dropdown]',
|
|
228
|
+
standalone: true
|
|
229
|
+
}]
|
|
230
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.SirioSelectComponent, decorators: [{
|
|
231
|
+
type: Host
|
|
232
|
+
}] }] });
|
|
233
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvZGlyZWN0aXZlcy9kcm9wZG93bi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBNkIsSUFBSSxFQUFhLE1BQU0sZUFBZSxDQUFDOzs7QUFPdEYsTUFBTSxPQUFPLGlCQUFpQjtJQUdsQjtJQUNBO0lBRVE7SUFKbEIsWUFDVSxFQUFjLEVBQ2QsUUFBbUIsRUFFWCxXQUFpQztRQUh6QyxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUVYLGdCQUFXLEdBQVgsV0FBVyxDQUFzQjtJQUMvQyxDQUFDO0lBRUwsZUFBZTtRQUNiLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLElBQUksQ0FBQyxXQUFXO2VBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEtBQUssSUFBSTtlQUMvQixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQzFDLENBQUM7WUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDO1lBRWxGLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsVUFBVSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDL0IsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sZ0JBQWdCO1FBRXRCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxh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dXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgQWZ0ZXJWaWV3SW5pdCwgRWxlbWVudFJlZiwgSG9zdCwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNpcmlvU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnbmd4LXNpcmlvLWxpYic7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tkcm9wZG93bl0nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWVcclxufSlcclxuZXhwb3J0IGNsYXNzIERyb3Bkb3duRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIFxyXG4gICAgQEhvc3QoKSBwcml2YXRlIHNpcmlvU2VsZWN0OiBTaXJpb1NlbGVjdENvbXBvbmVudFxyXG4gICkgeyB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaGFuZGxlTnVsbFZhbHVlKCk7XHJcbiAgICB0aGlzLmhhbmRsZVNlYXJjaGFibGUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlTnVsbFZhbHVlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2lyaW9TZWxlY3RcclxuICAgICAgJiYgdGhpcy5zaXJpb1NlbGVjdC52YWx1ZSA9PT0gbnVsbFxyXG4gICAgICAmJiBBcnJheS5pc0FycmF5KHRoaXMuc2lyaW9TZWxlY3Qub3B0aW9ucylcclxuICAgICkge1xyXG4gICAgICBjb25zdCBudWxsT3B0aW9uID0gdGhpcy5zaXJpb1NlbGVjdC5vcHRpb25zLmZpbmQob3B0aW9uID0+IG9wdGlvbi52YWx1ZSA9PT0gbnVsbCk7XHJcblxyXG4gICAgICBpZiAobnVsbE9wdGlvbikge1xyXG4gICAgICAgIG51bGxPcHRpb24uaXNTZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlU2VhcmNoYWJsZSgpOiB2b2lkIHtcclxuXHJcbiAgICBjb25zdCBzZWFyY2hhYmxlID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zZWFyY2hhYmxlJyk7XHJcbiAgICBpZiAoc2VhcmNoYWJsZSkge1xyXG4gICAgICBjb25zdCBkcm9wRG93biA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuc2lyaW8tZHJvcGRvd24nKTtcclxuICAgICAgY29uc3QgZHJvcE1lbnUgPSBkcm9wRG93bi5xdWVyeVNlbGVjdG9yKCcuc2lyaW8tZHJvcGRvd24tbWVudScpO1xyXG4gICAgICBjb25zdCBpbnB1dCA9IHNlYXJjaGFibGUucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcclxuICAgICAgdGhpcy5yZW5kZXJlci5pbnNlcnRCZWZvcmUoZHJvcERvd24sIHNlYXJjaGFibGUsIGRyb3BNZW51KTtcclxuXHJcbiAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKGlucHV0LCAnYmx1cicsIChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2lyaW9TZWxlY3QucGFuZWwuY2xvc2UoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnJlbmRlcmVyLmxpc3RlbihpbnB1dCwgJ2tleXVwJywgKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XHJcbiAgICAgICAgdGhpcy5vbktleVVwKGV2ZW50LCBpbnB1dCk7ICAgICAgICBcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnJlbmRlcmVyLmxpc3RlbihpbnB1dCwgJ2tleWRvd24nLCAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcclxuICAgICAgICB0aGlzLm9uS2V5RG93bihldmVudCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5zaXJpb1NlbGVjdC5wYW5lbC5wYW5lbE9wZW5lZC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYWN0aXZhdGUoc2VhcmNoYWJsZSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5zaXJpb1NlbGVjdC5wYW5lbC5wYW5lbENsb3NlZC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZGVhY3RpdmF0ZShzZWFyY2hhYmxlKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgfSAgICBcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGVhY3RpdmF0ZShlbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShlbGVtZW50LCAnZGlzcGxheScsICdub25lJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFjdGl2YXRlKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XHJcbiAgICBsZXQgY3VycmVudFZhbHVlID0gXCJcIjtcclxuXHJcbiAgICBpZiAodGhpcy5zaXJpb1NlbGVjdC5vcHRpb25zU2VsZWN0ZWQubGVuZ3RoID4gMCkge1xyXG4gICAgICBjdXJyZW50VmFsdWUgPSB0aGlzLnNpcmlvU2VsZWN0Lm9wdGlvbnNTZWxlY3RlZFswXS50ZXh0XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaW5wdXQgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFwiKTtcclxuXHJcbiAgICBpZiAoIWlucHV0KVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgaW5wdXQudmFsdWUgPSBjdXJyZW50VmFsdWU7XHJcblxyXG4gICAgY29uc3QgZHJvcE1lbnUgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnNpcmlvLWRyb3Bkb3duLW1lbnUnKTtcclxuXHJcbiAgICB0aGlzLnNpcmlvU2VsZWN0Lm9wdGlvbnMuZm9yRWFjaCgob3B0aW9uKSA9PiB7XHJcbiAgICAgIHRoaXMuc2hvdyhvcHRpb24sIHRydWUpO1xyXG4gICAgICBpZiAoY3VycmVudFZhbHVlID09IG9wdGlvbi50ZXh0KSB7XHJcbiAgICAgICAgZHJvcE1lbnUuc2Nyb2xsVG9wID0gdGhpcy5uYXRpdmUob3B0aW9uKS5vZmZzZXRUb3A7XHJcbiAgICAgIH0gICAgICBcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZWxlbWVudCwgJ2Rpc3BsYXknLCAnaW5saW5lLWJsb2NrJyk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKGlucHV0LnZhbHVlLmxlbmd0aCwgaW5wdXQudmFsdWUubGVuZ3RoKTtcclxuICAgICAgaW5wdXQuZm9jdXMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpbnB1dDogYW55KSB7XHJcbiAgICBjb25zdCB7IGNvZGUgfSA9IGV2ZW50O1xyXG5cclxuICAgIHN3aXRjaCAoY29kZSkge1xyXG4gICAgICBjYXNlICdFbnRlcic6XHJcbiAgICAgIGNhc2UgJ1NwYWNlJzpcclxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcclxuICAgICAgY2FzZSAnQXJyb3dVcCc6XHJcbiAgICAgIGNhc2UgJ0VzY2FwZSc6XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jb21wYXJhYmxlKGlucHV0LnZhbHVlKTtcclxuICAgIGxldCBmaXJzdE1hdGNoID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnNpcmlvU2VsZWN0Lm9wdGlvbnMuZm9yRWFjaCgob3B0aW9uLCBpbmRleCkgPT4ge1xyXG4gICAgICBjb25zdCBtYXRjaCA9IHRoaXMuY29tcGFyYWJsZShvcHRpb24udGV4dCkuaW5jbHVkZXModmFsdWUpO1xyXG4gICAgICB0aGlzLnNob3cob3B0aW9uLCBtYXRjaCk7XHJcbiAgICAgIGlmIChtYXRjaCAmJiBmaXJzdE1hdGNoKSB7XHJcbiAgICAgICAgb3B0aW9uLnNldEZvY3VzKCk7XHJcbiAgICAgICAgZmlyc3RNYXRjaCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIG9wdGlvbi5yZW1vdmVGb2N1cygpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBjb25zdCBwYW5lbCA9IHRoaXMuc2lyaW9TZWxlY3QucGFuZWw7XHJcbiAgICBpZiAoIXBhbmVsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHBhbmVsSXNPcGVuID0gcGFuZWwucGFuZWxJc09wZW47XHJcbiAgICBjb25zdCB7IGNvZGUgfSA9IGV2ZW50O1xyXG4gICAgaWYgKHBhbmVsSXNPcGVuKSB7XHJcbiAgICAgIHN3aXRjaCAoY29kZSkge1xyXG4gICAgICAgIGNhc2UgJ0VudGVyJzpcclxuICAgICAgICBjYXNlICdTcGFjZSc6XHJcbiAgICAgICAgICBpZiAocGFuZWwub3B0aW9uRm9jdXNlZCkge1xyXG4gICAgICAgICAgICBwYW5lbC5vcHRpb25Gb2N1c2VkPy5vbk9wdGlvblNlbGVjdGVkKGV2ZW50KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBwYW5lbC5jbG9zZShldmVudCk7XHJcbiAgICAgICAgICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnQXJyb3dEb3duJzpcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsRG93bigpO1xyXG4gICAgICAgICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdBcnJvd1VwJzpcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsVXAoKTtcclxuICAgICAgICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnRXNjYXBlJzpcclxuICAgICAgICAgIHBhbmVsLmNsb3NlKGV2ZW50KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCFwYW5lbElzT3Blbikge1xyXG4gICAgICBzd2l0Y2ggKGNvZGUpIHtcclxuICAgICAgICBjYXNlICdFbnRlcic6XHJcbiAgICAgICAgY2FzZSAnU3BhY2UnOlxyXG4gICAgICAgICAgcGFuZWwub3BlbihldmVudCk7XHJcbiAgICAgICAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBuYXRpdmUob3B0aW9uOiBhbnkpIHtcclxuICAgIHJldHVybiBvcHRpb24udmlld0NvbnRhaW5lclJlZi5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzSGlkZGVuKG9wdGlvbjogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5uYXRpdmUob3B0aW9uKS5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZSc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNob3cob3B0aW9uOiBhbnksIHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLm5hdGl2ZShvcHRpb24pLnN0eWxlLmRpc3BsYXkgPSB2YWx1ZSA/ICcnIDogJ25vbmUnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb21wYXJhYmxlKHRleHQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRleHQudG9Mb3dlckNhc2UoKS50cmltKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNjcm9sbERvd24oKSB7XHJcbiAgICBjb25zdCBwYW5lbCA9IHRoaXMuc2lyaW9TZWxlY3QucGFuZWw7XHJcbiAgICBpZiAoIXBhbmVsLm9wdGlvbkZvY3VzZWQpIHtcclxuICAgICAgcGFuZWwuc2Nyb2xsQmFyVG9wKCk7XHJcbiAgICAgIHBhbmVsLm9wdGlvbnMuZmlyc3Quc2V0Rm9jdXMoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbmV4dE9wdGlvbkZvY3VzZWQgPSB0aGlzLmZpbmROZXh0VmlzaWJsZU9wdGlvbihwYW5lbC5vcHRpb25Gb2N1c2VkSW5kZXggKyAxLCBwYW5lbC5vcHRpb25zKTtcclxuICAgIHBhbmVsLnNjcm9sbEJhckRvd24oKTtcclxuICAgIHBhbmVsLm9wdGlvbkZvY3VzZWQ/LnJlbW92ZUZvY3VzKCk7XHJcbiAgICBpZiAobmV4dE9wdGlvbkZvY3VzZWQpIHtcclxuICAgICAgbmV4dE9wdGlvbkZvY3VzZWQ/LnNldEZvY3VzKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHBhbmVsLnNjcm9sbEJhclRvcCgpO1xyXG4gICAgY29uc3QgZmlyc3RWaXNpYmxlID0gdGhpcy5maW5kTmV4dFZpc2libGVPcHRpb24oMCwgcGFuZWwub3B0aW9ucyk7XHJcbiAgICBpZiAoZmlyc3RWaXNpYmxlKSB7XHJcbiAgICAgIGZpcnN0VmlzaWJsZS5zZXRGb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzY3JvbGxVcCgpIHtcclxuICAgIGNvbnN0IHBhbmVsID0gdGhpcy5zaXJpb1NlbGVjdC5wYW5lbDtcclxuICAgIGlmICghcGFuZWwub3B0aW9uRm9jdXNlZCkge1xyXG4gICAgICBwYW5lbC5zY3JvbGxCYXJUb3AoKTtcclxuICAgICAgcGFuZWwub3B0aW9ucy5sYXN0LnNldEZvY3VzKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gICAgXHJcbiAgICBjb25zdCBuZXh0T3B0aW9uRm9jdXNlZCA9IHRoaXMuZmluZFByZXZpb3VzVmlzaWJsZU9wdGlvbihwYW5lbC5vcHRpb25Gb2N1c2VkSW5kZXggLSAxLCBwYW5lbC5vcHRpb25zKTtcclxuICAgIGlmIChuZXh0T3B0aW9uRm9jdXNlZCkge1xyXG4gICAgICBwYW5lbC5zY3JvbGxCYXJVcCgpO1xyXG4gICAgICBwYW5lbC5vcHRpb25Gb2N1c2VkPy5yZW1vdmVGb2N1cygpO1xyXG4gICAgICBuZXh0T3B0aW9uRm9jdXNlZD8uc2V0Rm9jdXMoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcGFuZWwub3B0aW9uRm9jdXNlZD8ucmVtb3ZlRm9jdXMoKTtcclxuICAgIHBhbmVsLnNjcm9sbEJhckJvdHRvbSgpO1xyXG4gICAgY29uc3QgbGFzdFZpc2libGUgPSB0aGlzLmZpbmRQcmV2aW91c1Zpc2libGVPcHRpb24ocGFuZWwub3B0aW9ucy5sZW5ndGggLSAxLCBwYW5lbC5vcHRpb25zKTtcclxuICAgIGlmIChsYXN0VmlzaWJsZSkge1xyXG4gICAgICBsYXN0VmlzaWJsZS5zZXRGb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaW5kUHJldmlvdXNWaXNpYmxlT3B0aW9uKHN0YXJ0SW5kZXg6IG51bWJlciwgb3B0aW9uczogYW55KTogYW55IHwgbnVsbCB7XHJcbiAgICBsZXQgaSA9IHN0YXJ0SW5kZXg7XHJcbiAgICB3aGlsZSAoaSA+PSAwKSB7XHJcbiAgICAgIGNvbnN0IG9wdGlvbiA9IG9wdGlvbnMuZ2V0KGkpO1xyXG4gICAgICBpZiAoIXRoaXMuaXNIaWRkZW4ob3B0aW9uKSkge1xyXG4gICAgICAgIHJldHVybiBvcHRpb247XHJcbiAgICAgIH1cclxuICAgICAgaS0tO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmROZXh0VmlzaWJsZU9wdGlvbihzdGFydEluZGV4OiBudW1iZXIsIG9wdGlvbnM6IGFueSk6IGFueSB8IG51bGwge1xyXG4gICAgbGV0IGkgPSBzdGFydEluZGV4O1xyXG4gICAgd2hpbGUgKGkgPCBvcHRpb25zLmxlbmd0aCkge1xyXG4gICAgICBjb25zdCBvcHRpb24gPSBvcHRpb25zLmdldChpKTtcclxuICAgICAgaWYgKCF0aGlzLmlzSGlkZGVuKG9wdGlvbikpIHtcclxuICAgICAgICByZXR1cm4gb3B0aW9uO1xyXG4gICAgICB9XHJcbiAgICAgIGkrKztcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { Directive, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class FrameSecurityDirective {
|
|
4
|
+
el;
|
|
5
|
+
renderer;
|
|
6
|
+
frameSecurity = null;
|
|
7
|
+
constructor(el, renderer) {
|
|
8
|
+
this.el = el;
|
|
9
|
+
this.renderer = renderer;
|
|
10
|
+
}
|
|
11
|
+
ngAfterViewInit() {
|
|
12
|
+
const frame = this.el.nativeElement;
|
|
13
|
+
const sandbox = this.getSandBox(this.frameSecurity);
|
|
14
|
+
if (sandbox)
|
|
15
|
+
this.renderer.setAttribute(frame, 'sandbox', sandbox);
|
|
16
|
+
const allow = this.getAllow(this.frameSecurity);
|
|
17
|
+
if (allow)
|
|
18
|
+
this.renderer.setAttribute(frame, 'allow', allow);
|
|
19
|
+
}
|
|
20
|
+
getSandBox(security) {
|
|
21
|
+
let allowedProperties = [
|
|
22
|
+
"allowScripts",
|
|
23
|
+
"allowSameOrigin",
|
|
24
|
+
"allowForms",
|
|
25
|
+
"allowModals",
|
|
26
|
+
"allowPopups",
|
|
27
|
+
"allowTopNavigation",
|
|
28
|
+
"allowStorageAccessByUserActivation"
|
|
29
|
+
];
|
|
30
|
+
let sandBox = Object.entries(security)
|
|
31
|
+
.filter(([key, value]) => value === true && allowedProperties.includes(key))
|
|
32
|
+
.map(([key]) => this.camelToKebabCase(key))
|
|
33
|
+
.join(' ');
|
|
34
|
+
return sandBox;
|
|
35
|
+
}
|
|
36
|
+
;
|
|
37
|
+
getAllow(security) {
|
|
38
|
+
let allowedProperties = [
|
|
39
|
+
"fullscreen",
|
|
40
|
+
"geolocation",
|
|
41
|
+
"camera",
|
|
42
|
+
"microphone"
|
|
43
|
+
];
|
|
44
|
+
let allow = Object.entries(security)
|
|
45
|
+
.filter(([key, value]) => value === true && allowedProperties.includes(key))
|
|
46
|
+
.map(([key]) => key)
|
|
47
|
+
.join(' ');
|
|
48
|
+
return allow;
|
|
49
|
+
}
|
|
50
|
+
;
|
|
51
|
+
camelToKebabCase(str) {
|
|
52
|
+
return str.replace(/[A-Z]/g, (match) => '-' + match.toLowerCase());
|
|
53
|
+
}
|
|
54
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FrameSecurityDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
|
|
55
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: FrameSecurityDirective, isStandalone: true, selector: "[frameSecurity]", inputs: { frameSecurity: "frameSecurity" }, ngImport: i0 });
|
|
56
|
+
}
|
|
57
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FrameSecurityDirective, decorators: [{
|
|
58
|
+
type: Directive,
|
|
59
|
+
args: [{
|
|
60
|
+
selector: '[frameSecurity]',
|
|
61
|
+
standalone: true
|
|
62
|
+
}]
|
|
63
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { frameSecurity: [{
|
|
64
|
+
type: Input
|
|
65
|
+
}] } });
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWUtc2VjdXJpdHkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvZGlyZWN0aXZlcy9mcmFtZS1zZWN1cml0eS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXdDLE1BQU0sZUFBZSxDQUFDOztBQU12RixNQUFNLE9BQU8sc0JBQXNCO0lBR2I7SUFBd0I7SUFGbkMsYUFBYSxHQUFRLElBQUksQ0FBQztJQUVuQyxZQUFvQixFQUFjLEVBQVUsUUFBbUI7UUFBM0MsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUFVLGFBQVEsR0FBUixRQUFRLENBQVc7SUFBSSxDQUFDO0lBRXBFLGVBQWU7UUFDYixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQztRQUVwQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVwRCxJQUFJLE9BQU87WUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRXhELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRWhELElBQUksS0FBSztZQUNQLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVPLFVBQVUsQ0FBQyxRQUFhO1FBQzlCLElBQUksaUJBQWlCLEdBQWE7WUFDaEMsY0FBYztZQUNkLGlCQUFpQjtZQUNqQixZQUFZO1lBQ1osYUFBYTtZQUNiLGFBQWE7WUFDYixvQkFBb0I7WUFDcEIsb0NBQW9DO1NBQ3JDLENBQUM7UUFDRixJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQzthQUNuQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDM0UsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUViLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFBQSxDQUFDO0lBRU0sUUFBUSxDQUFDLFFBQWE7UUFDNUIsSUFBSSxpQkFBaUIsR0FBYTtZQUNoQyxZQUFZO1lBQ1osYUFBYTtZQUNiLFFBQVE7WUFDUixZQUFZO1NBQ2IsQ0FBQztRQUNGLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO2FBQ2pDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUMzRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUM7YUFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQUEsQ0FBQztJQUVNLGdCQUFnQixDQUFDLEdBQVc7UUFDbEMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7d0dBdERVLHNCQUFzQjs0RkFBdEIsc0JBQXNCOzs0RkFBdEIsc0JBQXNCO2tCQUpsQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjt1R0FFVSxhQUFhO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgQWZ0ZXJWaWV3SW5pdCwgRWxlbWVudFJlZiwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tmcmFtZVNlY3VyaXR5XScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRnJhbWVTZWN1cml0eURpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG4gIEBJbnB1dCgpIGZyYW1lU2VjdXJpdHk6IGFueSA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMikgeyB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZyYW1lID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgIGNvbnN0IHNhbmRib3ggPSB0aGlzLmdldFNhbmRCb3godGhpcy5mcmFtZVNlY3VyaXR5KTtcclxuXHJcbiAgICBpZiAoc2FuZGJveClcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoZnJhbWUsICdzYW5kYm94Jywgc2FuZGJveCk7XHJcblxyXG4gICAgY29uc3QgYWxsb3cgPSB0aGlzLmdldEFsbG93KHRoaXMuZnJhbWVTZWN1cml0eSk7XHJcblxyXG4gICAgaWYgKGFsbG93KVxyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShmcmFtZSwgJ2FsbG93JywgYWxsb3cpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTYW5kQm94KHNlY3VyaXR5OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgbGV0IGFsbG93ZWRQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgXCJhbGxvd1NjcmlwdHNcIixcclxuICAgICAgXCJhbGxvd1NhbWVPcmlnaW5cIixcclxuICAgICAgXCJhbGxvd0Zvcm1zXCIsXHJcbiAgICAgIFwiYWxsb3dNb2RhbHNcIixcclxuICAgICAgXCJhbGxvd1BvcHVwc1wiLFxyXG4gICAgICBcImFsbG93VG9wTmF2aWdhdGlvblwiLFxyXG4gICAgICBcImFsbG93U3RvcmFnZUFjY2Vzc0J5VXNlckFjdGl2YXRpb25cIlxyXG4gICAgXTtcclxuICAgIGxldCBzYW5kQm94ID0gT2JqZWN0LmVudHJpZXMoc2VjdXJpdHkpXHJcbiAgICAgIC5maWx0ZXIoKFtrZXksIHZhbHVlXSkgPT4gdmFsdWUgPT09IHRydWUgJiYgYWxsb3dlZFByb3BlcnRpZXMuaW5jbHVkZXMoa2V5KSlcclxuICAgICAgLm1hcCgoW2tleV0pID0+IHRoaXMuY2FtZWxUb0tlYmFiQ2FzZShrZXkpKVxyXG4gICAgICAuam9pbignICcpO1xyXG5cclxuICAgIHJldHVybiBzYW5kQm94O1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgZ2V0QWxsb3coc2VjdXJpdHk6IGFueSk6IHN0cmluZyB7XHJcbiAgICBsZXQgYWxsb3dlZFByb3BlcnRpZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICBcImZ1bGxzY3JlZW5cIixcclxuICAgICAgXCJnZW9sb2NhdGlvblwiLFxyXG4gICAgICBcImNhbWVyYVwiLFxyXG4gICAgICBcIm1pY3JvcGhvbmVcIlxyXG4gICAgXTtcclxuICAgIGxldCBhbGxvdyA9IE9iamVjdC5lbnRyaWVzKHNlY3VyaXR5KVxyXG4gICAgICAuZmlsdGVyKChba2V5LCB2YWx1ZV0pID0+IHZhbHVlID09PSB0cnVlICYmIGFsbG93ZWRQcm9wZXJ0aWVzLmluY2x1ZGVzKGtleSkpXHJcbiAgICAgIC5tYXAoKFtrZXldKSA9PiBrZXkpXHJcbiAgICAgIC5qb2luKCcgJyk7XHJcblxyXG4gICAgcmV0dXJuIGFsbG93O1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgY2FtZWxUb0tlYmFiQ2FzZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1tBLVpdL2csIChtYXRjaCkgPT4gJy0nICsgbWF0Y2gudG9Mb3dlckNhc2UoKSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { Directive, Input, Host } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "ag-grid-angular";
|
|
4
|
+
export class GridDirective {
|
|
5
|
+
grid;
|
|
6
|
+
rowSource = null;
|
|
7
|
+
constructor(grid) {
|
|
8
|
+
this.grid = grid;
|
|
9
|
+
grid.gridReady.subscribe(() => {
|
|
10
|
+
this.isGridReady = true;
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
ngOnChanges(changes) {
|
|
14
|
+
if (changes["rowSource"]) {
|
|
15
|
+
this.onRowChanges();
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
isGridReady = false;
|
|
19
|
+
onRowChanges() {
|
|
20
|
+
if (this.isArray(this.rowSource)) {
|
|
21
|
+
this.setRowData(this.rowSource);
|
|
22
|
+
}
|
|
23
|
+
else if (this.isDataSource(this.rowSource)) {
|
|
24
|
+
this.setDataSource(this.rowSource);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
this.setRowData([]);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
setRowData(rowSource) {
|
|
31
|
+
this.grid.rowModelType = 'clientSide';
|
|
32
|
+
if (this.isGridReady) {
|
|
33
|
+
this.grid.api.setGridOption('rowData', rowSource);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
this.grid.rowData = rowSource;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
setDataSource(rowSource) {
|
|
40
|
+
this.grid.rowModelType = 'infinite';
|
|
41
|
+
if (this.isGridReady) {
|
|
42
|
+
this.grid.api.setGridOption('datasource', rowSource);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
this.grid.datasource = rowSource;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
isArray(rowSource) {
|
|
49
|
+
return Array.isArray(rowSource);
|
|
50
|
+
}
|
|
51
|
+
isDataSource(obj) {
|
|
52
|
+
return typeof obj.getRows === "function";
|
|
53
|
+
}
|
|
54
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GridDirective, deps: [{ token: i1.AgGridAngular, host: true }], target: i0.ɵɵFactoryTarget.Directive });
|
|
55
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: GridDirective, isStandalone: true, selector: "[rowSource]", inputs: { rowSource: "rowSource" }, usesOnChanges: true, ngImport: i0 });
|
|
56
|
+
}
|
|
57
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GridDirective, decorators: [{
|
|
58
|
+
type: Directive,
|
|
59
|
+
args: [{
|
|
60
|
+
selector: '[rowSource]',
|
|
61
|
+
standalone: true
|
|
62
|
+
}]
|
|
63
|
+
}], ctorParameters: () => [{ type: i1.AgGridAngular, decorators: [{
|
|
64
|
+
type: Host
|
|
65
|
+
}] }], propDecorators: { rowSource: [{
|
|
66
|
+
type: Input
|
|
67
|
+
}] } });
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2lyaW8vc3JjL2xpYi9kaXJlY3RpdmVzL2dyaWQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUE0QixJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQVFqRixNQUFNLE9BQU8sYUFBYTtJQUlOO0lBSFQsU0FBUyxHQUFRLElBQUksQ0FBQztJQUUvQixZQUNrQixJQUFtQjtRQUFuQixTQUFJLEdBQUosSUFBSSxDQUFlO1FBR25DLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFFTyxXQUFXLEdBQVksS0FBSyxDQUFDO0lBRTdCLFlBQVk7UUFDbEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7YUFDSSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckMsQ0FBQzthQUNJLENBQUM7WUFDSixJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRU8sVUFBVSxDQUFDLFNBQWM7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ3RDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDcEQsQ0FBQzthQUNJLENBQUM7WUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7SUFFTyxhQUFhLENBQUMsU0FBYztRQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUM7UUFDcEMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN2RCxDQUFDO2FBQ0ksQ0FBQztZQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUNuQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLE9BQU8sQ0FBQyxTQUFjO1FBQzVCLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRU8sWUFBWSxDQUFDLEdBQVE7UUFDM0IsT0FBTyxPQUFPLEdBQUcsQ0FBQyxPQUFPLEtBQUssVUFBVSxDQUFDO0lBQzNDLENBQUM7d0dBMURVLGFBQWE7NEZBQWIsYUFBYTs7NEZBQWIsYUFBYTtrQkFKekIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOzswQkFLSSxJQUFJO3lDQUhFLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIElucHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIEhvc3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWdHcmlkQW5ndWxhciB9IGZyb20gJ2FnLWdyaWQtYW5ndWxhcic7XHJcbmltcG9ydCB7IElSb3dzU291cmNlIH0gZnJvbSAnLi4vZGF0YVNvdXJjZXMvaW50ZXJmYWNlcyc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tyb3dTb3VyY2VdJyxcclxuICBzdGFuZGFsb25lOiB0cnVlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHcmlkRGlyZWN0aXZlIGltcGxlbWVudHMgT25DaGFuZ2VzIHtcclxuICBASW5wdXQoKSByb3dTb3VyY2U6IGFueSA9IG51bGw7XHJcbiAgXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASG9zdCgpIHByaXZhdGUgZ3JpZDogQWdHcmlkQW5ndWxhclxyXG4gICkge1xyXG5cclxuICAgIGdyaWQuZ3JpZFJlYWR5LnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuaXNHcmlkUmVhZHkgPSB0cnVlOyAgICAgIFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1tcInJvd1NvdXJjZVwiXSkge1xyXG4gICAgICB0aGlzLm9uUm93Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0dyaWRSZWFkeTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIG9uUm93Q2hhbmdlcygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzQXJyYXkodGhpcy5yb3dTb3VyY2UpKSB7XHJcbiAgICAgIHRoaXMuc2V0Um93RGF0YSh0aGlzLnJvd1NvdXJjZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmlzRGF0YVNvdXJjZSh0aGlzLnJvd1NvdXJjZSkpIHtcclxuICAgICAgdGhpcy5zZXREYXRhU291cmNlKHRoaXMucm93U291cmNlKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNldFJvd0RhdGEoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRSb3dEYXRhKHJvd1NvdXJjZTogYW55KSB7XHJcbiAgICB0aGlzLmdyaWQucm93TW9kZWxUeXBlID0gJ2NsaWVudFNpZGUnO1xyXG4gICAgaWYgKHRoaXMuaXNHcmlkUmVhZHkpIHtcclxuICAgICAgdGhpcy5ncmlkLmFwaS5zZXRHcmlkT3B0aW9uKCdyb3dEYXRhJywgcm93U291cmNlKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmdyaWQucm93RGF0YSA9IHJvd1NvdXJjZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RGF0YVNvdXJjZShyb3dTb3VyY2U6IGFueSkge1xyXG4gICAgdGhpcy5ncmlkLnJvd01vZGVsVHlwZSA9ICdpbmZpbml0ZSc7XHJcbiAgICBpZiAodGhpcy5pc0dyaWRSZWFkeSkge1xyXG4gICAgICB0aGlzLmdyaWQuYXBpLnNldEdyaWRPcHRpb24oJ2RhdGFzb3VyY2UnLCByb3dTb3VyY2UpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZ3JpZC5kYXRhc291cmNlID0gcm93U291cmNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0FycmF5KHJvd1NvdXJjZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShyb3dTb3VyY2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0RhdGFTb3VyY2Uob2JqOiBhbnkpOiBvYmogaXMgSVJvd3NTb3VyY2Uge1xyXG4gICAgcmV0dXJuIHR5cGVvZiBvYmouZ2V0Um93cyA9PT0gXCJmdW5jdGlvblwiO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { Directive, Input, ContentChild, ContentChildren } from '@angular/core';
|
|
2
|
+
import { RegisterService } from '../services/register.service';
|
|
3
|
+
import { createControl } from '../controls/factory';
|
|
4
|
+
import { DynamicFieldsComponent } from '../dynamic-fields/dynamic-fields.component';
|
|
5
|
+
import { ItemControl } from '../controls/control';
|
|
6
|
+
import { Subject } from 'rxjs';
|
|
7
|
+
import { takeUntil } from 'rxjs/operators';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "../services/register.service";
|
|
10
|
+
import * as i2 from "../services/proxy.service";
|
|
11
|
+
export class RegisterDirective {
|
|
12
|
+
el;
|
|
13
|
+
registerService;
|
|
14
|
+
proxyService;
|
|
15
|
+
register = null;
|
|
16
|
+
componentRef;
|
|
17
|
+
dynamicField;
|
|
18
|
+
itemFields;
|
|
19
|
+
constructor(el, registerService, proxyService) {
|
|
20
|
+
this.el = el;
|
|
21
|
+
this.registerService = registerService;
|
|
22
|
+
this.proxyService = proxyService;
|
|
23
|
+
}
|
|
24
|
+
ngAfterContentInit() {
|
|
25
|
+
this.registerControl();
|
|
26
|
+
}
|
|
27
|
+
ngOnDestroy() {
|
|
28
|
+
this.unregisterControl();
|
|
29
|
+
this.destroy$.next();
|
|
30
|
+
this.destroy$.complete();
|
|
31
|
+
}
|
|
32
|
+
destroy$ = new Subject();
|
|
33
|
+
registerControl() {
|
|
34
|
+
const name = this.getName();
|
|
35
|
+
const register = (this.register.type === 'dynamiclist')
|
|
36
|
+
? this.createDynamicRegister(name, this.register, this.componentRef, this.el, this.itemFields)
|
|
37
|
+
: this.dynamicField?.getRegister();
|
|
38
|
+
const control = createControl(name, this.register, this.componentRef, this.el, register);
|
|
39
|
+
this.registerService.register(name, control);
|
|
40
|
+
}
|
|
41
|
+
unregisterControl() {
|
|
42
|
+
this.registerService.unregister(this.getName());
|
|
43
|
+
}
|
|
44
|
+
getName() {
|
|
45
|
+
return this.register.name ?? this.register.id;
|
|
46
|
+
}
|
|
47
|
+
createDynamicRegister(name, metadata, componentRef, el, itemFields) {
|
|
48
|
+
const newRegister = new RegisterService(this.proxyService, null);
|
|
49
|
+
const registerAll = (itemFields) => {
|
|
50
|
+
newRegister.unregisterAll();
|
|
51
|
+
itemFields.forEach((itemField, index) => {
|
|
52
|
+
const register = itemField.getRegister();
|
|
53
|
+
const newName = `${name}-${index}`;
|
|
54
|
+
const control = new ItemControl(newName, index, metadata, componentRef, el, register);
|
|
55
|
+
newRegister.register(newName, control);
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
registerAll(itemFields);
|
|
59
|
+
itemFields.changes
|
|
60
|
+
.pipe(takeUntil(this.destroy$))
|
|
61
|
+
.subscribe((itemFields) => {
|
|
62
|
+
registerAll(itemFields);
|
|
63
|
+
});
|
|
64
|
+
return newRegister;
|
|
65
|
+
}
|
|
66
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RegisterDirective, deps: [{ token: i0.ElementRef }, { token: i1.RegisterService }, { token: i2.ProxyService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
67
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: RegisterDirective, isStandalone: true, selector: "[register]", inputs: { register: "register", componentRef: "componentRef" }, queries: [{ propertyName: "dynamicField", first: true, predicate: DynamicFieldsComponent, descendants: true }, { propertyName: "itemFields", predicate: DynamicFieldsComponent, descendants: true }], ngImport: i0 });
|
|
68
|
+
}
|
|
69
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RegisterDirective, decorators: [{
|
|
70
|
+
type: Directive,
|
|
71
|
+
args: [{
|
|
72
|
+
selector: '[register]',
|
|
73
|
+
standalone: true
|
|
74
|
+
}]
|
|
75
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.RegisterService }, { type: i2.ProxyService }], propDecorators: { register: [{
|
|
76
|
+
type: Input
|
|
77
|
+
}], componentRef: [{
|
|
78
|
+
type: Input
|
|
79
|
+
}], dynamicField: [{
|
|
80
|
+
type: ContentChild,
|
|
81
|
+
args: [DynamicFieldsComponent]
|
|
82
|
+
}], itemFields: [{
|
|
83
|
+
type: ContentChildren,
|
|
84
|
+
args: [DynamicFieldsComponent, { descendants: true }]
|
|
85
|
+
}] } });
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvZGlyZWN0aXZlcy9yZWdpc3Rlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFBRSxLQUFLLEVBQ2QsWUFBWSxFQUFFLGVBQWUsRUFDaEMsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRS9ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNwRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFNM0MsTUFBTSxPQUFPLGlCQUFpQjtJQU9sQjtJQUNBO0lBQ0E7SUFSRCxRQUFRLEdBQVEsSUFBSSxDQUFDO0lBQ3JCLFlBQVksQ0FBTTtJQUNXLFlBQVksQ0FBMEI7SUFDWixVQUFVLENBQXFDO0lBRS9HLFlBQ1UsRUFBYyxFQUNkLGVBQWdDLEVBQ2hDLFlBQTBCO1FBRjFCLE9BQUUsR0FBRixFQUFFLENBQVk7UUFDZCxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsaUJBQVksR0FBWixZQUFZLENBQWM7SUFDaEMsQ0FBQztJQUVMLGtCQUFrQjtRQUNoQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUV6QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxR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QUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIERpcmVjdGl2ZSwgSW5wdXQsIEVsZW1lbnRSZWYsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveVxyXG4gICwgQ29udGVudENoaWxkLCBDb250ZW50Q2hpbGRyZW4sIFF1ZXJ5TGlzdFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSZWdpc3RlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9yZWdpc3Rlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUHJveHlTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcHJveHkuc2VydmljZSc7XHJcbmltcG9ydCB7IGNyZWF0ZUNvbnRyb2wgfSBmcm9tICcuLi9jb250cm9scy9mYWN0b3J5JztcclxuaW1wb3J0IHsgRHluYW1pY0ZpZWxkc0NvbXBvbmVudCB9IGZyb20gJy4uL2R5bmFtaWMtZmllbGRzL2R5bmFtaWMtZmllbGRzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEl0ZW1Db250cm9sIH0gZnJvbSAnLi4vY29udHJvbHMvY29udHJvbCc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbcmVnaXN0ZXJdJyxcclxuICBzdGFuZGFsb25lOiB0cnVlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZWdpc3RlckRpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCkgcmVnaXN0ZXI6IGFueSA9IG51bGw7XHJcbiAgQElucHV0KCkgY29tcG9uZW50UmVmOiBhbnk7XHJcbiAgQENvbnRlbnRDaGlsZChEeW5hbWljRmllbGRzQ29tcG9uZW50KSBkeW5hbWljRmllbGQ/OiBEeW5hbWljRmllbGRzQ29tcG9uZW50O1xyXG4gIEBDb250ZW50Q2hpbGRyZW4oRHluYW1pY0ZpZWxkc0NvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBpdGVtRmllbGRzITogUXVlcnlMaXN0PER5bmFtaWNGaWVsZHNDb21wb25lbnQ+O1xyXG4gIFxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgcmVnaXN0ZXJTZXJ2aWNlOiBSZWdpc3RlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHByb3h5U2VydmljZTogUHJveHlTZXJ2aWNlXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZWdpc3RlckNvbnRyb2woKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy51bnJlZ2lzdGVyQ29udHJvbCgpO1xyXG5cclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIHByaXZhdGUgcmVnaXN0ZXJDb250cm9sKCk6IHZvaWQge1xyXG4gICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0TmFtZSgpO1xyXG5cclxuICAgIGNvbnN0IHJlZ2lzdGVyID0gKHRoaXMucmVnaXN0ZXIudHlwZSA9PT0gJ2R5bmFtaWNsaXN0JylcclxuICAgICAgPyB0aGlzLmNyZWF0ZUR5bmFtaWNSZWdpc3RlcihuYW1lLCB0aGlzLnJlZ2lzdGVyLCB0aGlzLmNvbXBvbmVudFJlZiwgdGhpcy5lbCwgdGhpcy5pdGVtRmllbGRzKVxyXG4gICAgICA6IHRoaXMuZHluYW1pY0ZpZWxkPy5nZXRSZWdpc3RlcigpO1xyXG5cclxuICAgIGNvbnN0IGNvbnRyb2wgPSBjcmVhdGVDb250cm9sKG5hbWUsIHRoaXMucmVnaXN0ZXIsIHRoaXMuY29tcG9uZW50UmVmLCB0aGlzLmVsLCByZWdpc3Rlcik7XHJcbiAgICB0aGlzLnJlZ2lzdGVyU2VydmljZS5yZWdpc3RlcihuYW1lLCBjb250cm9sKTtcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVucmVnaXN0ZXJDb250cm9sKCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZWdpc3RlclNlcnZpY2UudW5yZWdpc3Rlcih0aGlzLmdldE5hbWUoKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE5hbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnJlZ2lzdGVyLm5hbWUgPz8gdGhpcy5yZWdpc3Rlci5pZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRHluYW1pY1JlZ2lzdGVyKG5hbWU6IHN0cmluZywgbWV0YWRhdGE6IGFueSwgY29tcG9uZW50UmVmOiBhbnksIGVsOiBFbGVtZW50UmVmXHJcbiAgICAsIGl0ZW1GaWVsZHM6IFF1ZXJ5TGlzdDxEeW5hbWljRmllbGRzQ29tcG9uZW50Pik6IFJlZ2lzdGVyU2VydmljZSB7XHJcblxyXG4gICAgY29uc3QgbmV3UmVnaXN0ZXIgPSBuZXcgUmVnaXN0ZXJTZXJ2aWNlKHRoaXMucHJveHlTZXJ2aWNlLCBudWxsKTtcclxuXHJcbiAgICBjb25zdCByZWdpc3RlckFsbCA9IChpdGVtRmllbGRzOiBRdWVyeUxpc3Q8RHluYW1pY0ZpZWxkc0NvbXBvbmVudD4pID0+IHtcclxuICAgICAgbmV3UmVnaXN0ZXIudW5yZWdpc3RlckFsbCgpO1xyXG4gICAgICBpdGVtRmllbGRzLmZvckVhY2goKGl0ZW1GaWVsZCwgaW5kZXgpID0+IHtcclxuICAgICAgICBjb25zdCByZWdpc3RlciA9IGl0ZW1GaWVsZC5nZXRSZWdpc3RlcigpO1xyXG4gICAgICAgIGNvbnN0IG5ld05hbWUgPSBgJHtuYW1lfS0ke2luZGV4fWA7XHJcbiAgICAgICAgY29uc3QgY29udHJvbCA9IG5ldyBJdGVtQ29udHJvbChuZXdOYW1lLCBpbmRleCwgbWV0YWRhdGEsIGNvbXBvbmVudFJlZiwgZWwsIHJlZ2lzdGVyKTtcclxuICAgICAgICBuZXdSZWdpc3Rlci5yZWdpc3RlcihuZXdOYW1lLCBjb250cm9sKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJBbGwoaXRlbUZpZWxkcyk7XHJcblxyXG4gICAgaXRlbUZpZWxkcy5jaGFuZ2VzXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoaXRlbUZpZWxkczogUXVlcnlMaXN0PER5bmFtaWNGaWVsZHNDb21wb25lbnQ+KSA9PiB7XHJcbiAgICAgICAgcmVnaXN0ZXJBbGwoaXRlbUZpZWxkcyk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBuZXdSZWdpc3RlcjtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Directive, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/forms";
|
|
4
|
+
export class RepeatDirective {
|
|
5
|
+
controlContainer;
|
|
6
|
+
repeat = null;
|
|
7
|
+
constructor(controlContainer) {
|
|
8
|
+
this.controlContainer = controlContainer;
|
|
9
|
+
}
|
|
10
|
+
ngOnChanges(changes) {
|
|
11
|
+
if (changes["repeat"]) {
|
|
12
|
+
const formArray = this.controlContainer.control;
|
|
13
|
+
const value = changes["repeat"].currentValue;
|
|
14
|
+
if (Number.isInteger(value) && value >= 0)
|
|
15
|
+
this.resizeArray(formArray, value);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
resizeArray(formArray, size) {
|
|
19
|
+
while (formArray.length < size) {
|
|
20
|
+
formArray.addNewItem();
|
|
21
|
+
}
|
|
22
|
+
while (formArray.length > size) {
|
|
23
|
+
formArray.removeAt(formArray.length - 1);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RepeatDirective, deps: [{ token: i1.ControlContainer }], target: i0.ɵɵFactoryTarget.Directive });
|
|
27
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: RepeatDirective, isStandalone: true, selector: "[repeat]", inputs: { repeat: "repeat" }, usesOnChanges: true, ngImport: i0 });
|
|
28
|
+
}
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RepeatDirective, decorators: [{
|
|
30
|
+
type: Directive,
|
|
31
|
+
args: [{
|
|
32
|
+
selector: '[repeat]',
|
|
33
|
+
standalone: true
|
|
34
|
+
}]
|
|
35
|
+
}], ctorParameters: () => [{ type: i1.ControlContainer }], propDecorators: { repeat: [{
|
|
36
|
+
type: Input
|
|
37
|
+
}] } });
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zaXJpby9zcmMvbGliL2RpcmVjdGl2ZXMvcmVwZWF0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBNEIsTUFBTSxlQUFlLENBQUM7OztBQU8zRSxNQUFNLE9BQU8sZUFBZTtJQUdOO0lBRlgsTUFBTSxHQUFRLElBQUksQ0FBQztJQUU1QixZQUFvQixnQkFBa0M7UUFBbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtJQUFJLENBQUM7SUFFM0QsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDdEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQW9CLENBQUM7WUFDN0QsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQVksQ0FBQztZQUM3QyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDSCxDQUFDO0lBRU8sV0FBVyxDQUFDLFNBQW9CLEVBQUUsSUFBWTtRQUNwRCxPQUFPLFNBQVMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLENBQUM7WUFDOUIsU0FBaUIsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxDQUFDO1lBQy9CLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQzt3R0FyQlUsZUFBZTs0RkFBZixlQUFlOzs0RkFBZixlQUFlO2tCQUozQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxVQUFVO29CQUNwQixVQUFVLEVBQUUsSUFBSTtpQkFDakI7cUZBRVUsTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1BcnJheSwgQ29udHJvbENvbnRhaW5lciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW3JlcGVhdF0nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWVcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlcGVhdERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XHJcbiAgQElucHV0KCkgcmVwZWF0OiBhbnkgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIpIHsgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1tcInJlcGVhdFwiXSkge1xyXG4gICAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmNvbnRyb2xDb250YWluZXIuY29udHJvbCBhcyBGb3JtQXJyYXk7ICAgICAgXHJcbiAgICAgIGNvbnN0IHZhbHVlID0gY2hhbmdlc1tcInJlcGVhdFwiXS5jdXJyZW50VmFsdWU7XHJcbiAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSAmJiB2YWx1ZSA+PSAwKVxyXG4gICAgICAgIHRoaXMucmVzaXplQXJyYXkoZm9ybUFycmF5LCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2l6ZUFycmF5KGZvcm1BcnJheTogRm9ybUFycmF5LCBzaXplOiBudW1iZXIpIHtcclxuICAgIHdoaWxlIChmb3JtQXJyYXkubGVuZ3RoIDwgc2l6ZSkge1xyXG4gICAgICAoZm9ybUFycmF5IGFzIGFueSkuYWRkTmV3SXRlbSgpO1xyXG4gICAgfVxyXG4gICAgd2hpbGUgKGZvcm1BcnJheS5sZW5ndGggPiBzaXplKSB7XHJcbiAgICAgIGZvcm1BcnJheS5yZW1vdmVBdChmb3JtQXJyYXkubGVuZ3RoIC0gMSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Directive, Host, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "ngx-sirio-lib";
|
|
4
|
+
export class TabDirective {
|
|
5
|
+
sirioTab;
|
|
6
|
+
tabCount = 0;
|
|
7
|
+
constructor(sirioTab) {
|
|
8
|
+
this.sirioTab = sirioTab;
|
|
9
|
+
}
|
|
10
|
+
ngOnChanges(changes) {
|
|
11
|
+
if (changes["tabCount"]) {
|
|
12
|
+
const previous = changes["tabCount"].previousValue;
|
|
13
|
+
if (previous === undefined)
|
|
14
|
+
return;
|
|
15
|
+
const current = changes["tabCount"].currentValue;
|
|
16
|
+
setTimeout(() => {
|
|
17
|
+
this.sirioTab.setContentItemIndex();
|
|
18
|
+
this.sirioTab.showArrowIfNeeded();
|
|
19
|
+
if (previous < current) {
|
|
20
|
+
this.sirioTab.setActiveIndex(current - 1);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
if (this.sirioTab.oldIndex == current) {
|
|
24
|
+
// remove last
|
|
25
|
+
this.sirioTab.setActiveIndex(current - 1);
|
|
26
|
+
}
|
|
27
|
+
else if (this.sirioTab.oldIndex < current) {
|
|
28
|
+
// remove middle
|
|
29
|
+
this.sirioTab.setActiveIndex(this.sirioTab.oldIndex);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TabDirective, deps: [{ token: i1.SirioTabComponent, host: true }], target: i0.ɵɵFactoryTarget.Directive });
|
|
36
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: TabDirective, isStandalone: true, selector: "[tabCount]", inputs: { tabCount: "tabCount" }, usesOnChanges: true, ngImport: i0 });
|
|
37
|
+
}
|
|
38
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TabDirective, decorators: [{
|
|
39
|
+
type: Directive,
|
|
40
|
+
args: [{
|
|
41
|
+
selector: '[tabCount]',
|
|
42
|
+
standalone: true
|
|
43
|
+
}]
|
|
44
|
+
}], ctorParameters: () => [{ type: i1.SirioTabComponent, decorators: [{
|
|
45
|
+
type: Host
|
|
46
|
+
}] }], propDecorators: { tabCount: [{
|
|
47
|
+
type: Input
|
|
48
|
+
}] } });
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zaXJpby9zcmMvbGliL2RpcmVjdGl2ZXMvdGFiLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQTRCLE1BQU0sZUFBZSxDQUFDOzs7QUFPakYsTUFBTSxPQUFPLFlBQVk7SUFJTDtJQUhULFFBQVEsR0FBVyxDQUFDLENBQUM7SUFFOUIsWUFDa0IsUUFBMkI7UUFBM0IsYUFBUSxHQUFSLFFBQVEsQ0FBbUI7SUFDekMsQ0FBQztJQUVMLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxhQUFhLENBQUM7WUFFbkQsSUFBSSxRQUFRLEtBQUssU0FBUztnQkFDeEIsT0FBTztZQUVULE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxZQUFZLENBQUM7WUFFakQsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFFbEMsSUFBSSxRQUFRLEdBQUcsT0FBTyxFQUFFLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDNUMsQ0FBQztxQkFDSSxDQUFDO29CQUNKLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLElBQUksT0FBTyxFQUFFLENBQUM7d0JBQ3RDLGNBQWM7d0JBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUM1QyxDQUFDO3lCQUNJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsT0FBTyxFQUFFLENBQUM7d0JBQzFDLGdCQUFnQjt3QkFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDdkQsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzt3R0FuQ1UsWUFBWTs0RkFBWixZQUFZOzs0RkFBWixZQUFZO2tCQUp4QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxZQUFZO29CQUN0QixVQUFVLEVBQUUsSUFBSTtpQkFDakI7OzBCQUtJLElBQUk7eUNBSEUsUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSG9zdCwgSW5wdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTaXJpb1RhYkNvbXBvbmVudCB9IGZyb20gJ25neC1zaXJpby1saWInO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbdGFiQ291bnRdJyxcclxuICBzdGFuZGFsb25lOiB0cnVlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpIHRhYkNvdW50OiBudW1iZXIgPSAwO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBIb3N0KCkgcHJpdmF0ZSBzaXJpb1RhYjogU2lyaW9UYWJDb21wb25lbnRcclxuICApIHsgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1tcInRhYkNvdW50XCJdKSB7XHJcbiAgICAgIGNvbnN0IHByZXZpb3VzID0gY2hhbmdlc1tcInRhYkNvdW50XCJdLnByZXZpb3VzVmFsdWU7XHJcblxyXG4gICAgICBpZiAocHJldmlvdXMgPT09IHVuZGVmaW5lZClcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBjdXJyZW50ID0gY2hhbmdlc1tcInRhYkNvdW50XCJdLmN1cnJlbnRWYWx1ZTtcclxuXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2lyaW9UYWIuc2V0Q29udGVudEl0ZW1JbmRleCgpO1xyXG4gICAgICAgIHRoaXMuc2lyaW9UYWIuc2hvd0Fycm93SWZOZWVkZWQoKTtcclxuXHJcbiAgICAgICAgaWYgKHByZXZpb3VzIDwgY3VycmVudCkge1xyXG4gICAgICAgICAgdGhpcy5zaXJpb1RhYi5zZXRBY3RpdmVJbmRleChjdXJyZW50IC0gMSk7XHJcbiAgICAgICAgfSAgICAgICAgXHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5zaXJpb1RhYi5vbGRJbmRleCA9PSBjdXJyZW50KSB7XHJcbiAgICAgICAgICAgIC8vIHJlbW92ZSBsYXN0XHJcbiAgICAgICAgICAgIHRoaXMuc2lyaW9UYWIuc2V0QWN0aXZlSW5kZXgoY3VycmVudCAtIDEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAodGhpcy5zaXJpb1RhYi5vbGRJbmRleCA8IGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgLy8gcmVtb3ZlIG1pZGRsZVxyXG4gICAgICAgICAgICB0aGlzLnNpcmlvVGFiLnNldEFjdGl2ZUluZGV4KHRoaXMuc2lyaW9UYWIub2xkSW5kZXgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gICAgICAgIFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|