@mediusinc/mng-commons 4.0.0-rc.2 → 4.0.0-rc.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/esm2022/index.mjs +5 -1
- package/esm2022/lib/api/utils/medius-rest.util.mjs +15 -7
- package/esm2022/lib/api/utils/object-serializer.util.mjs +8 -4
- package/esm2022/lib/components/action/action.component.mjs +16 -45
- package/esm2022/lib/components/action/editor/action-editor.component.mjs +60 -434
- package/esm2022/lib/components/action/editor/injector-context/action-editor-injector-context.component.mjs +394 -0
- package/esm2022/lib/components/action/localization/data-language-dropdown.component.mjs +6 -7
- package/esm2022/lib/components/action/models/action-component.model.mjs +1 -1
- package/esm2022/lib/components/action/models/action-execution.model.mjs +3 -6
- package/esm2022/lib/components/action/models/index.mjs +1 -2
- package/esm2022/lib/components/action/route/action-route.component.mjs +14 -30
- package/esm2022/lib/components/action/table/action-table.component.mjs +9 -19
- package/esm2022/lib/components/form/editor/form-editor.component.mjs +5 -11
- package/esm2022/lib/components/form/formly/fields/formly-field-custom/formly-field-custom.component.mjs +1 -1
- package/esm2022/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +4 -4
- package/esm2022/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +5 -5
- package/esm2022/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +4 -4
- package/esm2022/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +1 -1
- package/esm2022/lib/components/layout/main-layout.component.mjs +21 -25
- package/esm2022/lib/components/layout/topbar.component.mjs +8 -8
- package/esm2022/lib/components/layoutV2/main-layout.component.mjs +13 -10
- package/esm2022/lib/components/layoutV2/menu-item.component.mjs +48 -5
- package/esm2022/lib/components/layoutV2/menu.component.mjs +13 -4
- package/esm2022/lib/components/layoutV2/services/main-layout.component.service.mjs +11 -2
- package/esm2022/lib/components/layoutV2/sidebar.component.mjs +5 -5
- package/esm2022/lib/components/layoutV2/topbar.component.mjs +7 -7
- package/esm2022/lib/components/notification/notification-wrapper.component.mjs +50 -0
- package/esm2022/lib/components/table/column-value/column-value.component.mjs +2 -2
- package/esm2022/lib/components/table/table.component.mjs +17 -23
- package/esm2022/lib/components/tableview/route/tableview-route.abstract.component.mjs +5 -5
- package/esm2022/lib/components/tableview/route/tableview-route.component.mjs +3 -9
- package/esm2022/lib/components/tableview/tableview.component.mjs +17 -76
- package/esm2022/lib/descriptors/editor/field-lookup.descriptor.mjs +1 -2
- package/esm2022/lib/descriptors/filter/filter.descriptor.mjs +20 -20
- package/esm2022/lib/directives/component.directive.mjs +8 -4
- package/esm2022/lib/helpers/coercion.mjs +8 -1
- package/esm2022/lib/models/action-editor.model.mjs +1 -1
- package/esm2022/lib/models/config.model.mjs +1 -1
- package/esm2022/lib/models/index.mjs +2 -2
- package/esm2022/lib/models/layout-config.model.mjs +2 -0
- package/esm2022/lib/models/view-container.model.mjs +1 -1
- package/esm2022/lib/provide-commons.mjs +7 -1
- package/esm2022/lib/registry/type.registry.mjs +2 -3
- package/esm2022/lib/router/route-builder.mjs +1 -1
- package/esm2022/lib/services/action/action-executor.service.mjs +725 -0
- package/esm2022/lib/services/action/component-action-executor.service.mjs +19 -0
- package/esm2022/lib/services/action/index.mjs +5 -0
- package/esm2022/lib/services/action/provide-action-executor.mjs +9 -0
- package/esm2022/lib/services/action/root-action-executor.service.mjs +18 -0
- package/esm2022/lib/services/commons.service.mjs +5 -5
- package/esm2022/lib/services/index.mjs +1 -3
- package/esm2022/lib/services/logger.service.mjs +2 -2
- package/esm2022/lib/services/view/index.mjs +3 -0
- package/esm2022/lib/services/view/provide-view-container.mjs +17 -0
- package/esm2022/lib/services/view/view-container.service.mjs +59 -0
- package/esm2022/lib/utils/date.util.mjs +33 -23
- package/esm2022/lib/utils/notification.util.mjs +9 -16
- package/esm2022/lib/utils/string.util.mjs +2 -2
- package/fesm2022/mediusinc-mng-commons.mjs +3199 -3156
- package/fesm2022/mediusinc-mng-commons.mjs.map +1 -1
- package/index.d.ts +4 -0
- package/lib/components/action/action.component.d.ts +11 -17
- package/lib/components/action/editor/action-editor.component.d.ts +20 -80
- package/lib/components/action/editor/injector-context/action-editor-injector-context.component.d.ts +80 -0
- package/lib/components/action/localization/data-language-dropdown.component.d.ts +2 -3
- package/lib/components/action/models/action-component.model.d.ts +0 -2
- package/lib/components/action/models/action-execution.model.d.ts +6 -6
- package/lib/components/action/models/index.d.ts +0 -1
- package/lib/components/action/route/action-route.component.d.ts +6 -12
- package/lib/components/action/table/action-table.component.d.ts +3 -8
- package/lib/components/form/editor/form-editor.component.d.ts +4 -7
- package/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +1 -3
- package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +0 -2
- package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +0 -2
- package/lib/components/layout/main-layout.component.d.ts +4 -7
- package/lib/components/layoutV2/main-layout.component.d.ts +4 -3
- package/lib/components/layoutV2/menu-item.component.d.ts +7 -3
- package/lib/components/layoutV2/menu.component.d.ts +2 -0
- package/lib/components/layoutV2/services/main-layout.component.service.d.ts +3 -0
- package/lib/components/layoutV2/sidebar.component.d.ts +1 -1
- package/lib/components/layoutV2/topbar.component.d.ts +2 -2
- package/lib/components/notification/notification-wrapper.component.d.ts +12 -0
- package/lib/components/table/table.component.d.ts +4 -7
- package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +2 -3
- package/lib/components/tableview/route/tableview-route.component.d.ts +0 -3
- package/lib/components/tableview/tableview.component.d.ts +3 -19
- package/lib/descriptors/filter/filter.descriptor.d.ts +7 -7
- package/lib/directives/component.directive.d.ts +3 -2
- package/lib/models/action-editor.model.d.ts +11 -0
- package/lib/models/config.model.d.ts +3 -13
- package/lib/models/index.d.ts +1 -1
- package/lib/models/layout-config.model.d.ts +33 -0
- package/lib/models/view-container.model.d.ts +0 -25
- package/lib/router/route-builder.d.ts +1 -1
- package/lib/services/{action-executor.service.d.ts → action/action-executor.service.d.ts} +32 -31
- package/lib/services/action/component-action-executor.service.d.ts +9 -0
- package/lib/services/action/index.d.ts +4 -0
- package/lib/services/action/provide-action-executor.d.ts +2 -0
- package/lib/services/action/root-action-executor.service.d.ts +9 -0
- package/lib/services/index.d.ts +0 -2
- package/lib/services/view/index.d.ts +2 -0
- package/lib/services/view/provide-view-container.d.ts +2 -0
- package/lib/services/view/view-container.service.d.ts +32 -0
- package/lib/utils/date.util.d.ts +12 -2
- package/lib/utils/notification.util.d.ts +6 -6
- package/openapi/angular/README.mustache +226 -0
- package/openapi/angular/api.module.mustache +39 -0
- package/openapi/angular/api.service.mustache +253 -0
- package/openapi/angular/apiInterface.mustache +47 -0
- package/openapi/angular/apis.mustache +12 -0
- package/openapi/angular/configuration.mustache +128 -0
- package/openapi/angular/custom/base-api.service.mustache +14 -0
- package/openapi/angular/custom/helpers.mustache +71 -0
- package/openapi/angular/custom/modelSchema.mustache +46 -0
- package/openapi/angular/custom/schema.mustache +18 -0
- package/openapi/angular/encoder.mustache +20 -0
- package/openapi/angular/git_push.sh.mustache +57 -0
- package/openapi/angular/index.mustache +0 -0
- package/openapi/angular/licenseInfo.mustache +11 -0
- package/openapi/angular/model.mustache +16 -0
- package/openapi/angular/modelAlias.mustache +1 -0
- package/openapi/angular/modelEnum.mustache +24 -0
- package/openapi/angular/modelGeneric.mustache +14 -0
- package/openapi/angular/modelGenericAdditionalProperties.mustache +5 -0
- package/openapi/angular/modelGenericEnums.mustache +30 -0
- package/openapi/angular/modelOneOf.mustache +14 -0
- package/openapi/angular/modelTaggedUnion.mustache +21 -0
- package/openapi/angular/models.mustache +5 -0
- package/openapi/angular/ng-package.mustache +6 -0
- package/openapi/angular/package.mustache +39 -0
- package/openapi/angular/param.mustache +69 -0
- package/openapi/angular/tsconfig.mustache +28 -0
- package/openapi/angular/variables.mustache +9 -0
- package/openapi/{templates → node}/model.mustache +3 -17
- package/package.json +2 -2
- package/scss/mng-commons-dark-v2.scss +1 -1
- package/scss/mng-commons-light-v2.scss +1 -1
- package/scss/v2/layout/layout.scss +2 -2
- package/scss/v2/layout/mng/_mng_layout_topbar.scss +2 -0
- package/scss/v2/layout/preloading.scss +8 -8
- package/esm2022/lib/components/action/models/action-confirmation-service.model.mjs +0 -2
- package/esm2022/lib/models/menu-config.model.mjs +0 -2
- package/esm2022/lib/services/action-executor.service.mjs +0 -747
- package/esm2022/lib/services/view-container.component.service.mjs +0 -65
- package/lib/components/action/models/action-confirmation-service.model.d.ts +0 -6
- package/lib/models/menu-config.model.d.ts +0 -15
- package/lib/services/view-container.component.service.d.ts +0 -36
- /package/openapi/{templates → node}/models.mustache +0 -0
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, EventEmitter, HostListener, Input, Output, ViewChild, effect, inject, signal } from '@angular/core';
|
|
2
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
3
|
+
import { ActivatedRoute } from '@angular/router';
|
|
4
|
+
import { TranslateService } from '@ngx-translate/core';
|
|
5
|
+
import { ConfirmationService } from 'primeng/api';
|
|
6
|
+
import { DialogService } from 'primeng/dynamicdialog';
|
|
7
|
+
import { ProgressSpinnerModule } from 'primeng/progressspinner';
|
|
8
|
+
import { ToolbarModule } from 'primeng/toolbar';
|
|
9
|
+
import { ZIndexUtils } from 'primeng/utils';
|
|
10
|
+
import { Subject, of } from 'rxjs';
|
|
11
|
+
import { take } from 'rxjs/operators';
|
|
12
|
+
import { ActionEditorSubmitDescriptorInst } from '../../../../descriptors/action';
|
|
13
|
+
import { ActionActivationTriggerEnum, ActionEditorSubmitTypeEnum, ActionPositionEnum, ActionTypeEnum } from '../../../../descriptors/types';
|
|
14
|
+
import { MngComponentDirective } from '../../../../directives';
|
|
15
|
+
import { MngInternalError } from '../../../../models';
|
|
16
|
+
import { MngCommonsService, MngLoggerService } from '../../../../services';
|
|
17
|
+
import { MngActionExecutorService, provideActionExecutor } from '../../../../services/action';
|
|
18
|
+
import { ViewContainer } from '../../../../services/view';
|
|
19
|
+
import { I18nUtils } from '../../../../utils';
|
|
20
|
+
import { MngFormEditorComponent } from '../../../form';
|
|
21
|
+
import { MngActionComponent } from '../../action.component';
|
|
22
|
+
import { ActionInstanceStateEnum, ActionParameters } from '../../models';
|
|
23
|
+
import * as i0 from "@angular/core";
|
|
24
|
+
import * as i1 from "primeng/progressspinner";
|
|
25
|
+
import * as i2 from "primeng/toolbar";
|
|
26
|
+
export class MngActionEditorInjectorContextComponent {
|
|
27
|
+
constructor() {
|
|
28
|
+
this.ActionActivationTriggerEnum = ActionActivationTriggerEnum;
|
|
29
|
+
this.actionEditorSubmitTypeSubmit = ActionEditorSubmitTypeEnum.Submit;
|
|
30
|
+
this.destroyRef = inject(DestroyRef);
|
|
31
|
+
this.route = inject(ActivatedRoute);
|
|
32
|
+
this.translate = inject(TranslateService);
|
|
33
|
+
this.confirmationService = inject(ConfirmationService);
|
|
34
|
+
this.dialogService = inject(DialogService);
|
|
35
|
+
this.logger = inject(MngLoggerService).create('MngActionEditorInjectorContextComponent');
|
|
36
|
+
this.commonsService = inject(MngCommonsService);
|
|
37
|
+
this.actionExecutor = inject(MngActionExecutorService);
|
|
38
|
+
this.viewContainer = inject(ViewContainer, { optional: true });
|
|
39
|
+
this.actionRunEventEmitter = new EventEmitter();
|
|
40
|
+
this.actionCancelEventEmitter = new EventEmitter();
|
|
41
|
+
this.title = signal(undefined);
|
|
42
|
+
this.isFormDisabled = signal(false);
|
|
43
|
+
// data
|
|
44
|
+
this.item = signal(undefined);
|
|
45
|
+
this.itemId = signal(undefined);
|
|
46
|
+
this.actionData = signal(undefined);
|
|
47
|
+
// actions
|
|
48
|
+
this.toolbarLeftActions = signal([]);
|
|
49
|
+
this.toolbarRightActions = signal([]);
|
|
50
|
+
this.footerLeftActions = signal([]);
|
|
51
|
+
this.footerRightActions = signal([]);
|
|
52
|
+
this.loading = signal(false);
|
|
53
|
+
this.submitLoading = signal(false);
|
|
54
|
+
effect(() => {
|
|
55
|
+
const title = this.title();
|
|
56
|
+
requestAnimationFrame(() => {
|
|
57
|
+
if (this.data.dialogConfig) {
|
|
58
|
+
this.data.dialogConfig.header = title;
|
|
59
|
+
}
|
|
60
|
+
if (this.data.descriptor.activationTrigger === ActionActivationTriggerEnum.OnRoute) {
|
|
61
|
+
this.commonsService.setPageTitle(title);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
ngOnInit() {
|
|
67
|
+
if (this.data.actionInstance) {
|
|
68
|
+
this.processActionInstance(this.data.actionInstance);
|
|
69
|
+
}
|
|
70
|
+
if (!this.data.dataProvider) {
|
|
71
|
+
this.data.dataProvider = this.viewContainer?.getDataProvider();
|
|
72
|
+
}
|
|
73
|
+
this.item.set(this.data.item);
|
|
74
|
+
this.itemId.set(this.data.itemId);
|
|
75
|
+
this.actionData.set(this.data.actionData);
|
|
76
|
+
// arrange the sub-actions
|
|
77
|
+
this.initializeSubActions();
|
|
78
|
+
// notify executor to for activation to end
|
|
79
|
+
this.processActionInstance(this.actionExecutor.onActionEditorInit(this.data.descriptor, this.instance, this));
|
|
80
|
+
// set title
|
|
81
|
+
this.updateTitle();
|
|
82
|
+
// subscribe to events that could be triggered from outside from any reason
|
|
83
|
+
this.viewContainer
|
|
84
|
+
?.getEditorReset$()
|
|
85
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
86
|
+
.subscribe({
|
|
87
|
+
next: e => {
|
|
88
|
+
if (e.fetch) {
|
|
89
|
+
this.fetchItem();
|
|
90
|
+
}
|
|
91
|
+
else if (e.item) {
|
|
92
|
+
this.formEditorCmp?.resetFormModel(e.item);
|
|
93
|
+
}
|
|
94
|
+
else if (e.fields) {
|
|
95
|
+
for (const key in e.fields) {
|
|
96
|
+
this.formEditorCmp?.resetFormFieldValue(key, e.fields[key]);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
this.viewContainer
|
|
102
|
+
?.getEditorClose$()
|
|
103
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
104
|
+
.subscribe({
|
|
105
|
+
next: () => {
|
|
106
|
+
this.cancel();
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
ngOnDestroy() {
|
|
111
|
+
this.fetchExecutionSubscription?.unsubscribe();
|
|
112
|
+
this.submitExecutionSubscription?.unsubscribe();
|
|
113
|
+
const instance = this.instance;
|
|
114
|
+
this.unsetInstance();
|
|
115
|
+
this.actionExecutor.onActionEditorDestroy(instance);
|
|
116
|
+
}
|
|
117
|
+
onSubmit(event) {
|
|
118
|
+
if (!this.instance) {
|
|
119
|
+
throw new MngInternalError(`Action is not instantiated in action editor for action ${this.data.descriptor.actionName}.`);
|
|
120
|
+
}
|
|
121
|
+
if (event.success) {
|
|
122
|
+
this.instanceSubmitFormItem = event.formItem;
|
|
123
|
+
// prepare parameters
|
|
124
|
+
const actionParameters = new ActionParameters(this.itemId(), event.formItem).withActionData(this.actionData());
|
|
125
|
+
if (this.data.descriptor.editorDescriptor.isLocalized) {
|
|
126
|
+
actionParameters.withLocale(this.commonsService.appDataLanguageDefault);
|
|
127
|
+
}
|
|
128
|
+
const context = this.actionExecutor.prepareContextForEditorSubmit(this.data.descriptor, actionParameters, this.data.dataProvider, this.instance, this.data.previousActionInstance);
|
|
129
|
+
this.submitExecutionSubscription?.unsubscribe();
|
|
130
|
+
this.submitExecutionSubscription = context.execution$.pipe(take(1)).subscribe({
|
|
131
|
+
next: res => {
|
|
132
|
+
if (res && typeof res === 'object' && !this.itemId() && this.data.descriptor.model?.idProperty) {
|
|
133
|
+
// to cover creation!
|
|
134
|
+
this.updateItemId(res[this.data.descriptor.model.idProperty]);
|
|
135
|
+
}
|
|
136
|
+
this.actionRunEventEmitter.next(res);
|
|
137
|
+
this.instanceSubmitResult = res;
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
this.actionExecutor.run(context);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
cancel() {
|
|
144
|
+
if (!this.instance) {
|
|
145
|
+
this.logger.warn(`Action editor cannot be canceled for ${this.data.descriptor.actionName}, because no action instance is present`);
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
this.actionCancelEventEmitter.next(undefined);
|
|
149
|
+
this.actionExecutor.finishAction(this.instance);
|
|
150
|
+
}
|
|
151
|
+
updateItemId(itemId) {
|
|
152
|
+
this.itemId.set(itemId);
|
|
153
|
+
}
|
|
154
|
+
updateItem(item) {
|
|
155
|
+
this.item.set(item);
|
|
156
|
+
}
|
|
157
|
+
triggerSubmit() {
|
|
158
|
+
this.formEditorCmp?.submit();
|
|
159
|
+
}
|
|
160
|
+
initializeSubActions() {
|
|
161
|
+
for (const action of this.data.descriptor.editorActions) {
|
|
162
|
+
if (action instanceof ActionEditorSubmitDescriptorInst) {
|
|
163
|
+
if (typeof action.button.icon === 'undefined') {
|
|
164
|
+
action.button.withIcon(action.submitType === ActionEditorSubmitTypeEnum.Submit ? 'pi pi-check' : 'pi pi-times');
|
|
165
|
+
}
|
|
166
|
+
if (typeof action.button.label === 'undefined') {
|
|
167
|
+
action.button.withLabel(action.submitType === ActionEditorSubmitTypeEnum.Submit ? 'general.save' : this.data.isDialog ? 'general.close' : 'general.cancel');
|
|
168
|
+
}
|
|
169
|
+
// assign run operations
|
|
170
|
+
action.withRunNotificationSuccess(undefined, undefined, false);
|
|
171
|
+
if (action.submitType === ActionEditorSubmitTypeEnum.Submit) {
|
|
172
|
+
action.withRunFunction(() => {
|
|
173
|
+
this.triggerSubmit();
|
|
174
|
+
return of(null);
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
action.withRunFunction(() => {
|
|
179
|
+
this.closeWithUnsavedChangesConfirmation();
|
|
180
|
+
return of(null);
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
this.placeActionsOnPositions(action);
|
|
185
|
+
}
|
|
186
|
+
for (const action of this.viewContainer?.getActions().filter(value => value.positionTableviewCategories?.includes(this.data.descriptor.tableviewCategory)) ?? []) {
|
|
187
|
+
this.placeActionsOnPositions(action);
|
|
188
|
+
}
|
|
189
|
+
this.toolbarRightActions.update(v => v.reverse());
|
|
190
|
+
this.footerRightActions.update(v => v.reverse());
|
|
191
|
+
}
|
|
192
|
+
fetchItem() {
|
|
193
|
+
if (!this.instance) {
|
|
194
|
+
throw new MngInternalError(`Action is not instantiated in action editor for action ${this.data.descriptor.actionName}.`);
|
|
195
|
+
}
|
|
196
|
+
const actionParameters = new ActionParameters(this.itemId(), this.item()).withActionData(this.actionData());
|
|
197
|
+
if (this.data.descriptor.editorDescriptor.isLocalized) {
|
|
198
|
+
if (this.data.descriptor.editorDescriptor.disabled) {
|
|
199
|
+
actionParameters.withLocale(this.commonsService.appDataLanguage);
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
actionParameters.withLocale(this.commonsService.appDataLanguageDefault);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
if (this.instance?.previousInstance?.context?.parameters.item) {
|
|
206
|
+
actionParameters.withFormItem(this.instance?.previousInstance?.context?.parameters.item);
|
|
207
|
+
}
|
|
208
|
+
if (typeof this.instance?.previousInstance?.result !== 'undefined') {
|
|
209
|
+
actionParameters.withSubmitResult(this.instance?.previousInstance?.result);
|
|
210
|
+
}
|
|
211
|
+
const context = this.actionExecutor.prepareContextForEditorFetch(this.data.descriptor, actionParameters, this.data.dataProvider, this.instance, this.data.previousActionInstance);
|
|
212
|
+
this.fetchExecutionSubscription?.unsubscribe();
|
|
213
|
+
this.fetchExecutionSubscription = context.execution$.pipe(take(1)).subscribe(res => {
|
|
214
|
+
this.updateItem(res ?? undefined);
|
|
215
|
+
this.updateTitle();
|
|
216
|
+
});
|
|
217
|
+
this.actionExecutor.run(context);
|
|
218
|
+
}
|
|
219
|
+
updateTitle() {
|
|
220
|
+
if (this.data.descriptor.editorTitle === null) {
|
|
221
|
+
this.title.set(undefined);
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
I18nUtils.Action.getEditorTitleAsync(this.translate, this.data.descriptor, this.item()).subscribe(t => {
|
|
225
|
+
this.title.set(t ?? undefined);
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
placeActionsOnPositions(action) {
|
|
229
|
+
switch (action.position) {
|
|
230
|
+
case ActionPositionEnum.ToolbarLeft:
|
|
231
|
+
this.toolbarLeftActions.update(v => [...v, action]);
|
|
232
|
+
break;
|
|
233
|
+
case ActionPositionEnum.ToolbarRight:
|
|
234
|
+
this.toolbarRightActions.update(v => [...v, action]);
|
|
235
|
+
break;
|
|
236
|
+
case ActionPositionEnum.FooterLeft:
|
|
237
|
+
this.footerLeftActions.update(v => [...v, action]);
|
|
238
|
+
break;
|
|
239
|
+
case ActionPositionEnum.FooterRight:
|
|
240
|
+
this.footerRightActions.update(v => [...v, action]);
|
|
241
|
+
break;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
setEditorEnabled(isEnabled = true) {
|
|
245
|
+
this.isFormDisabled.set(!isEnabled);
|
|
246
|
+
}
|
|
247
|
+
processActionInstance(instance) {
|
|
248
|
+
if (!this.instance || this.instance.instanceLongName !== instance.instanceLongName) {
|
|
249
|
+
this.unsetInstance();
|
|
250
|
+
this.instance = instance;
|
|
251
|
+
this.instanceStateSubscription = this.instance.state$.subscribe(s => {
|
|
252
|
+
switch (s) {
|
|
253
|
+
case ActionInstanceStateEnum.ActivationEnd:
|
|
254
|
+
this.fetchItem();
|
|
255
|
+
break;
|
|
256
|
+
case ActionInstanceStateEnum.FetchStart:
|
|
257
|
+
this.setEditorEnabled(false);
|
|
258
|
+
this.loading.set(true);
|
|
259
|
+
break;
|
|
260
|
+
case ActionInstanceStateEnum.FetchError:
|
|
261
|
+
this.loading.set(false);
|
|
262
|
+
break;
|
|
263
|
+
case ActionInstanceStateEnum.FetchEnd:
|
|
264
|
+
this.setEditorEnabled(true);
|
|
265
|
+
this.loading.set(false);
|
|
266
|
+
break;
|
|
267
|
+
case ActionInstanceStateEnum.RunStart:
|
|
268
|
+
this.setEditorEnabled(false);
|
|
269
|
+
this.submitLoading.set(true);
|
|
270
|
+
break;
|
|
271
|
+
case ActionInstanceStateEnum.RunEnd:
|
|
272
|
+
case ActionInstanceStateEnum.RunError:
|
|
273
|
+
this.setEditorEnabled(true);
|
|
274
|
+
this.submitLoading.set(false);
|
|
275
|
+
break;
|
|
276
|
+
case ActionInstanceStateEnum.NextActionStart:
|
|
277
|
+
if (this.instance?.nextActionInstance?.action.type === ActionTypeEnum.Direct) {
|
|
278
|
+
this.submitLoading.set(true);
|
|
279
|
+
}
|
|
280
|
+
break;
|
|
281
|
+
case ActionInstanceStateEnum.NextActionEnd:
|
|
282
|
+
if (this.instance?.nextActionInstance?.action.type === ActionTypeEnum.Direct) {
|
|
283
|
+
this.submitLoading.set(false);
|
|
284
|
+
}
|
|
285
|
+
break;
|
|
286
|
+
case ActionInstanceStateEnum.ErrorActionStart:
|
|
287
|
+
if (this.instance?.errorActionInstance?.action.type === ActionTypeEnum.Direct) {
|
|
288
|
+
this.submitLoading.set(true);
|
|
289
|
+
}
|
|
290
|
+
break;
|
|
291
|
+
case ActionInstanceStateEnum.ErrorActionEnd:
|
|
292
|
+
if (this.instance?.errorActionInstance?.action.type === ActionTypeEnum.Direct) {
|
|
293
|
+
this.submitLoading.set(false);
|
|
294
|
+
}
|
|
295
|
+
break;
|
|
296
|
+
case ActionInstanceStateEnum.FinishErrorFinal:
|
|
297
|
+
this.setEditorEnabled(false);
|
|
298
|
+
break;
|
|
299
|
+
case ActionInstanceStateEnum.FinishSuccessFinal:
|
|
300
|
+
case ActionInstanceStateEnum.FinishDismissedFinal:
|
|
301
|
+
this.setEditorEnabled(false);
|
|
302
|
+
this.unsetInstance();
|
|
303
|
+
break;
|
|
304
|
+
case ActionInstanceStateEnum.FinishSuccessReactivateFinal:
|
|
305
|
+
this.setEditorEnabled(false);
|
|
306
|
+
// should also unsetInstance, but let this for reactivationInstance$ listener to not interfere
|
|
307
|
+
break;
|
|
308
|
+
}
|
|
309
|
+
});
|
|
310
|
+
this.instanceReactivationSubscription = this.instance.reactivationInstance$.subscribe(newInstance => {
|
|
311
|
+
this.processActionInstance(newInstance);
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
unsetInstance() {
|
|
316
|
+
this.instance = undefined;
|
|
317
|
+
this.instanceStateSubscription?.unsubscribe();
|
|
318
|
+
this.instanceReactivationSubscription?.unsubscribe();
|
|
319
|
+
}
|
|
320
|
+
beforeWindowUnload() {
|
|
321
|
+
if (this.data.isDialog && this.formEditorCmp?.form.pristine === false) {
|
|
322
|
+
return confirm(this.translate.instant('mngEditor.unsavedChangesConfirmation.message'));
|
|
323
|
+
}
|
|
324
|
+
return true;
|
|
325
|
+
}
|
|
326
|
+
onEscapePressed() {
|
|
327
|
+
if (this.data.isDialog &&
|
|
328
|
+
this.data.descriptor.activationTrigger === ActionActivationTriggerEnum.OnRoute &&
|
|
329
|
+
this.instance?.activationDialogRef &&
|
|
330
|
+
parseInt(this.dialogService.dialogComponentRefMap.get(this.instance?.activationDialogRef)?.instance.container?.style.zIndex ?? '') === ZIndexUtils.getCurrent())
|
|
331
|
+
this.closeWithUnsavedChangesConfirmation();
|
|
332
|
+
}
|
|
333
|
+
showUnsavedChangesConfirmationDialog(callFromGuard) {
|
|
334
|
+
const subject = new Subject();
|
|
335
|
+
this.confirmationService.confirm({
|
|
336
|
+
header: this.translate.instant('mngEditor.unsavedChangesConfirmation.header'),
|
|
337
|
+
message: this.translate.instant('mngEditor.unsavedChangesConfirmation.message'),
|
|
338
|
+
acceptLabel: this.translate.instant('general.yes'),
|
|
339
|
+
rejectLabel: this.translate.instant('general.no'),
|
|
340
|
+
icon: 'pi pi-exclamation-triangle',
|
|
341
|
+
accept: () => {
|
|
342
|
+
if (!callFromGuard) {
|
|
343
|
+
this.cancel();
|
|
344
|
+
}
|
|
345
|
+
subject.next(true);
|
|
346
|
+
subject.complete();
|
|
347
|
+
},
|
|
348
|
+
reject: () => {
|
|
349
|
+
subject.next(false);
|
|
350
|
+
subject.complete();
|
|
351
|
+
}
|
|
352
|
+
});
|
|
353
|
+
return subject.asObservable();
|
|
354
|
+
}
|
|
355
|
+
closeWithUnsavedChangesConfirmation(callFromGuard = false) {
|
|
356
|
+
if (this.formEditorCmp?.form.pristine === false && this.data.descriptor.unsavedChangesConfirmation) {
|
|
357
|
+
return this.showUnsavedChangesConfirmationDialog(callFromGuard);
|
|
358
|
+
}
|
|
359
|
+
else {
|
|
360
|
+
if (!callFromGuard) {
|
|
361
|
+
this.cancel();
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
return of(true);
|
|
365
|
+
}
|
|
366
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: MngActionEditorInjectorContextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
367
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.8", type: MngActionEditorInjectorContextComponent, isStandalone: true, selector: "mng-action-editor-injector-context", inputs: { data: "data" }, outputs: { actionRunEventEmitter: "actionSubmit", actionCancelEventEmitter: "actionCancel" }, host: { listeners: { "window:beforeunload": "beforeWindowUnload()", "window:keydown.Escape": "onEscapePressed()" } }, providers: [provideActionExecutor()], viewQueries: [{ propertyName: "submitButtonElementRef", first: true, predicate: ["submitButton"], descendants: true }, { propertyName: "formEditorCmp", first: true, predicate: MngFormEditorComponent, descendants: true }], ngImport: i0, template: "@if (!data.isDialog && title()) {\n <h5>{{ title() }}</h5>\n}\n@if (data.isDialog && data.descriptor.activationTrigger === ActionActivationTriggerEnum.OnRoute) {\n <span class=\"p-dialog-header dialog-close-button-wrapper\">\n <button\n class=\"p-dialog-header-icon p-dialog-header-maximize p-link\"\n type=\"button\"\n (click)=\"closeWithUnsavedChangesConfirmation()\"\n (keydown.enter)=\"closeWithUnsavedChangesConfirmation()\">\n <span class=\"p-dialog-header-close-icon pi pi-times\"></span>\n </button>\n </span>\n}\n<div class=\"h-full flex flex-column\">\n @if (toolbarLeftActions().length > 0 || toolbarRightActions().length > 0) {\n <div class=\"flex-grow-1 mng-action-editor-toolbar-container\">\n <p-toolbar styleClass=\"mng-action-editor-toolbar\">\n <ng-template pTemplate=\"left\">\n @for (action of toolbarLeftActions(); track action) {\n <mng-action\n [action]=\"action\"\n [disabled]=\"submitLoading()\"\n [loading]=\"$any(action).submitType === actionEditorSubmitTypeSubmit ? submitLoading() : false\"\n [hostComponent]=\"this\"\n [item]=\"item()\"\n [itemId]=\"itemId()\"></mng-action>\n }\n </ng-template>\n <ng-template pTemplate=\"right\">\n @for (action of toolbarRightActions(); track action) {\n <mng-action\n [action]=\"action\"\n [disabled]=\"submitLoading()\"\n [loading]=\"$any(action).submitType === actionEditorSubmitTypeSubmit ? submitLoading() : false\"\n [hostComponent]=\"this\"\n [item]=\"item()\"\n [itemId]=\"itemId()\"></mng-action>\n }\n </ng-template>\n </p-toolbar>\n </div>\n }\n\n <div class=\"flex-grow-1 mng-action-editor-form-container\">\n @if (loading()) {\n <div class=\"text-center\">\n <p-progressSpinner [style]=\"{width: '3rem', height: '3rem'}\" strokeWidth=\"3\"></p-progressSpinner>\n </div>\n }\n @if (data.descriptor.editorDescriptor && !loading()) {\n <mng-form-editor [descriptor]=\"data.descriptor.editorDescriptor\" [item]=\"item()\" [isFormDisabled]=\"isFormDisabled()\" (formSubmit)=\"onSubmit($event)\"> </mng-form-editor>\n }\n </div>\n\n <div class=\"flex flex-row justify-content-between mng-action-editor-footer-container\">\n <div>\n @for (action of footerLeftActions(); track action) {\n <mng-action\n [action]=\"action\"\n [disabled]=\"submitLoading()\"\n [loading]=\"$any(action).submitType === actionEditorSubmitTypeSubmit ? submitLoading() : false\"\n [hostComponent]=\"this\"\n [item]=\"item()\"\n [itemId]=\"itemId()\"></mng-action>\n }\n </div>\n <div>\n @for (action of footerRightActions(); track action) {\n <mng-action\n [action]=\"action\"\n [disabled]=\"submitLoading()\"\n [loading]=\"$any(action).submitType === actionEditorSubmitTypeSubmit ? submitLoading() : false\"\n [hostComponent]=\"this\"\n [item]=\"item()\"\n [itemId]=\"itemId()\"></mng-action>\n }\n </div>\n </div>\n</div>\n", styles: [".dialog-close-button-wrapper{position:absolute;top:1.286rem;right:1.714rem;background:transparent;padding:0}\n"], dependencies: [{ kind: "component", type: MngActionComponent, selector: "mng-action", inputs: ["action", "item", "itemId", "actionData", "queryParam", "dataProvider", "hostComponent", "route", "disabled", "loading", "selectedItems"], outputs: ["finish"] }, { kind: "ngmodule", type: ProgressSpinnerModule }, { kind: "component", type: i1.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration"] }, { kind: "component", type: MngFormEditorComponent, selector: "mng-form-editor", inputs: ["descriptor", "submitLoading", "item", "isFormDisabled"], outputs: ["formSubmit"] }, { kind: "ngmodule", type: ToolbarModule }, { kind: "component", type: i2.Toolbar, selector: "p-toolbar", inputs: ["style", "styleClass", "ariaLabelledBy"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
368
|
+
}
|
|
369
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: MngActionEditorInjectorContextComponent, decorators: [{
|
|
370
|
+
type: Component,
|
|
371
|
+
args: [{ standalone: true, selector: 'mng-action-editor-injector-context', imports: [MngActionComponent, ProgressSpinnerModule, MngFormEditorComponent, MngComponentDirective, ToolbarModule], changeDetection: ChangeDetectionStrategy.OnPush, providers: [provideActionExecutor()], template: "@if (!data.isDialog && title()) {\n <h5>{{ title() }}</h5>\n}\n@if (data.isDialog && data.descriptor.activationTrigger === ActionActivationTriggerEnum.OnRoute) {\n <span class=\"p-dialog-header dialog-close-button-wrapper\">\n <button\n class=\"p-dialog-header-icon p-dialog-header-maximize p-link\"\n type=\"button\"\n (click)=\"closeWithUnsavedChangesConfirmation()\"\n (keydown.enter)=\"closeWithUnsavedChangesConfirmation()\">\n <span class=\"p-dialog-header-close-icon pi pi-times\"></span>\n </button>\n </span>\n}\n<div class=\"h-full flex flex-column\">\n @if (toolbarLeftActions().length > 0 || toolbarRightActions().length > 0) {\n <div class=\"flex-grow-1 mng-action-editor-toolbar-container\">\n <p-toolbar styleClass=\"mng-action-editor-toolbar\">\n <ng-template pTemplate=\"left\">\n @for (action of toolbarLeftActions(); track action) {\n <mng-action\n [action]=\"action\"\n [disabled]=\"submitLoading()\"\n [loading]=\"$any(action).submitType === actionEditorSubmitTypeSubmit ? submitLoading() : false\"\n [hostComponent]=\"this\"\n [item]=\"item()\"\n [itemId]=\"itemId()\"></mng-action>\n }\n </ng-template>\n <ng-template pTemplate=\"right\">\n @for (action of toolbarRightActions(); track action) {\n <mng-action\n [action]=\"action\"\n [disabled]=\"submitLoading()\"\n [loading]=\"$any(action).submitType === actionEditorSubmitTypeSubmit ? submitLoading() : false\"\n [hostComponent]=\"this\"\n [item]=\"item()\"\n [itemId]=\"itemId()\"></mng-action>\n }\n </ng-template>\n </p-toolbar>\n </div>\n }\n\n <div class=\"flex-grow-1 mng-action-editor-form-container\">\n @if (loading()) {\n <div class=\"text-center\">\n <p-progressSpinner [style]=\"{width: '3rem', height: '3rem'}\" strokeWidth=\"3\"></p-progressSpinner>\n </div>\n }\n @if (data.descriptor.editorDescriptor && !loading()) {\n <mng-form-editor [descriptor]=\"data.descriptor.editorDescriptor\" [item]=\"item()\" [isFormDisabled]=\"isFormDisabled()\" (formSubmit)=\"onSubmit($event)\"> </mng-form-editor>\n }\n </div>\n\n <div class=\"flex flex-row justify-content-between mng-action-editor-footer-container\">\n <div>\n @for (action of footerLeftActions(); track action) {\n <mng-action\n [action]=\"action\"\n [disabled]=\"submitLoading()\"\n [loading]=\"$any(action).submitType === actionEditorSubmitTypeSubmit ? submitLoading() : false\"\n [hostComponent]=\"this\"\n [item]=\"item()\"\n [itemId]=\"itemId()\"></mng-action>\n }\n </div>\n <div>\n @for (action of footerRightActions(); track action) {\n <mng-action\n [action]=\"action\"\n [disabled]=\"submitLoading()\"\n [loading]=\"$any(action).submitType === actionEditorSubmitTypeSubmit ? submitLoading() : false\"\n [hostComponent]=\"this\"\n [item]=\"item()\"\n [itemId]=\"itemId()\"></mng-action>\n }\n </div>\n </div>\n</div>\n", styles: [".dialog-close-button-wrapper{position:absolute;top:1.286rem;right:1.714rem;background:transparent;padding:0}\n"] }]
|
|
372
|
+
}], ctorParameters: () => [], propDecorators: { data: [{
|
|
373
|
+
type: Input,
|
|
374
|
+
args: [{ required: true }]
|
|
375
|
+
}], actionRunEventEmitter: [{
|
|
376
|
+
type: Output,
|
|
377
|
+
args: ['actionSubmit']
|
|
378
|
+
}], actionCancelEventEmitter: [{
|
|
379
|
+
type: Output,
|
|
380
|
+
args: ['actionCancel']
|
|
381
|
+
}], submitButtonElementRef: [{
|
|
382
|
+
type: ViewChild,
|
|
383
|
+
args: ['submitButton']
|
|
384
|
+
}], formEditorCmp: [{
|
|
385
|
+
type: ViewChild,
|
|
386
|
+
args: [MngFormEditorComponent]
|
|
387
|
+
}], beforeWindowUnload: [{
|
|
388
|
+
type: HostListener,
|
|
389
|
+
args: ['window:beforeunload']
|
|
390
|
+
}], onEscapePressed: [{
|
|
391
|
+
type: HostListener,
|
|
392
|
+
args: ['window:keydown.Escape']
|
|
393
|
+
}] } });
|
|
394
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWVkaXRvci1pbmplY3Rvci1jb250ZXh0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hY3Rpb24vZWRpdG9yL2luamVjdG9yLWNvbnRleHQvYWN0aW9uLWVkaXRvci1pbmplY3Rvci1jb250ZXh0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hY3Rpb24vZWRpdG9yL2luamVjdG9yLWNvbnRleHQvYWN0aW9uLWVkaXRvci1pbmplY3Rvci1jb250ZXh0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFFVCxNQUFNLEVBQ04sTUFBTSxFQUNOLE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ2hELE9BQU8sRUFBQyxhQUFhLEVBQXNCLE1BQU0sdUJBQXVCLENBQUM7QUFDekUsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFhLE9BQU8sRUFBZ0IsRUFBRSxFQUFDLE1BQU0sTUFB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LEVBQUUsQ0FBQyxrTEF3QnpCLHNCQUFzQixnREMzRXJDLDB1SEFnRkEsd0tEL0JjLGtCQUFrQiwrTkFBRSxxQkFBcUIsNExBQUUsc0JBQXNCLHVKQUF5QixhQUFhOzsyRkFJeEcsdUNBQXVDO2tCQVRuRCxTQUFTO2lDQUNNLElBQUksWUFDTixvQ0FBb0MsV0FHckMsQ0FBQyxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSxxQkFBcUIsRUFBRSxhQUFhLENBQUMsbUJBQ2pHLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO3dEQWlCWCxJQUFJO3NCQUE1QixLQUFLO3VCQUFDLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQztnQkFFUSxxQkFBcUI7c0JBQW5ELE1BQU07dUJBQUMsY0FBYztnQkFDUyx3QkFBd0I7c0JBQXRELE1BQU07dUJBQUMsY0FBYztnQkFHWSxzQkFBc0I7c0JBQXZELFNBQVM7dUJBQUMsY0FBYztnQkFDaUIsYUFBYTtzQkFBdEQsU0FBUzt1QkFBQyxzQkFBc0I7Z0JBZ1Z6QixrQkFBa0I7c0JBRHpCLFlBQVk7dUJBQUMscUJBQXFCO2dCQVMzQixlQUFlO3NCQUR0QixZQUFZO3VCQUFDLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBXcml0YWJsZVNpZ25hbCxcbiAgICBlZmZlY3QsXG4gICAgaW5qZWN0LFxuICAgIHNpZ25hbFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7dGFrZVVudGlsRGVzdHJveWVkfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtDb25maXJtYXRpb25TZXJ2aWNlfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge0RpYWxvZ1NlcnZpY2UsIER5bmFtaWNEaWFsb2dDb25maWd9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XG5pbXBvcnQge1Byb2dyZXNzU3Bpbm5lck1vZHVsZX0gZnJvbSAncHJpbWVuZy9wcm9ncmVzc3NwaW5uZXInO1xuaW1wb3J0IHtUb29sYmFyTW9kdWxlfSBmcm9tICdwcmltZW5nL3Rvb2xiYXInO1xuaW1wb3J0IHtaSW5kZXhVdGlsc30gZnJvbSAncHJpbWVuZy91dGlscyc7XG5pbXBvcnQge09ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgb2Z9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHt0YWtlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7SURhdGFQcm92aWRlcn0gZnJvbSAnLi4vLi4vLi4vLi4vZGF0YS1wcm92aWRlcnMnO1xuaW1wb3J0IHtBY3Rpb25EZXNjcmlwdG9ySW5zdCwgQWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3QsIEFjdGlvbkVkaXRvclN1Ym1pdERlc2NyaXB0b3JJbnN0fSBmcm9tICcuLi8uLi8uLi8uLi9kZXNjcmlwdG9ycy9hY3Rpb24nO1xuaW1wb3J0IHtBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0sIEFjdGlvbkVkaXRvclN1Ym1pdFR5cGVFbnVtLCBBY3Rpb25Qb3NpdGlvbkVudW0sIEFjdGlvblR5cGVFbnVtfSBmcm9tICcuLi8uLi8uLi8uLi9kZXNjcmlwdG9ycy90eXBlcyc7XG5pbXBvcnQge01uZ0NvbXBvbmVudERpcmVjdGl2ZX0gZnJvbSAnLi4vLi4vLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQge0lBY3Rpb25FZGl0b3JDb21wb25lbnQsIE1uZ0ludGVybmFsRXJyb3J9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscyc7XG5pbXBvcnQge01uZ0NvbW1vbnNTZXJ2aWNlLCBNbmdMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge01uZ0FjdGlvbkV4ZWN1dG9yU2VydmljZSwgcHJvdmlkZUFjdGlvbkV4ZWN1dG9yfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9hY3Rpb24nO1xuaW1wb3J0IHtWaWV3Q29udGFpbmVyfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy92aWV3JztcbmltcG9ydCB7SWRUeXBlfSBmcm9tICcuLi8uLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQge0kxOG5VdGlsc30gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHtNbmdGb3JtRWRpdG9yQ29tcG9uZW50fSBmcm9tICcuLi8uLi8uLi9mb3JtJztcbmltcG9ydCB7TW5nRm9ybUVkaXRvclN1Ym1pdEV2ZW50fSBmcm9tICcuLi8uLi8uLi9mb3JtL21vZGVscyc7XG5pbXBvcnQge01uZ0FjdGlvbkNvbXBvbmVudH0gZnJvbSAnLi4vLi4vYWN0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQge0FjdGlvbkRhdGEsIEFjdGlvbkluc3RhbmNlLCBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bSwgQWN0aW9uUGFyYW1ldGVyc30gZnJvbSAnLi4vLi4vbW9kZWxzJztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ21uZy1hY3Rpb24tZWRpdG9yLWluamVjdG9yLWNvbnRleHQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hY3Rpb24tZWRpdG9yLWluamVjdG9yLWNvbnRleHQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWydhY3Rpb24tZWRpdG9yLWluamVjdG9yLWNvbnRleHQuY29tcG9uZW50LnNjc3MnXSxcbiAgICBpbXBvcnRzOiBbTW5nQWN0aW9uQ29tcG9uZW50LCBQcm9ncmVzc1NwaW5uZXJNb2R1bGUsIE1uZ0Zvcm1FZGl0b3JDb21wb25lbnQsIE1uZ0NvbXBvbmVudERpcmVjdGl2ZSwgVG9vbGJhck1vZHVsZV0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbcHJvdmlkZUFjdGlvbkV4ZWN1dG9yKCldXG59KVxuZXhwb3J0IGNsYXNzIE1uZ0FjdGlvbkVkaXRvckluamVjdG9yQ29udGV4dENvbXBvbmVudDxUID0gYW55LCBTID0gYW55PiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBJQWN0aW9uRWRpdG9yQ29tcG9uZW50IHtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtID0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtO1xuICAgIHB1YmxpYyByZWFkb25seSBhY3Rpb25FZGl0b3JTdWJtaXRUeXBlU3VibWl0ID0gQWN0aW9uRWRpdG9yU3VibWl0VHlwZUVudW0uU3VibWl0O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlybWF0aW9uU2VydmljZSA9IGluamVjdChDb25maXJtYXRpb25TZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZ1NlcnZpY2UgPSBpbmplY3QoRGlhbG9nU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBpbmplY3QoTW5nTG9nZ2VyU2VydmljZSkuY3JlYXRlKCdNbmdBY3Rpb25FZGl0b3JJbmplY3RvckNvbnRleHRDb21wb25lbnQnKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbW1vbnNTZXJ2aWNlID0gaW5qZWN0KE1uZ0NvbW1vbnNTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFjdGlvbkV4ZWN1dG9yID0gaW5qZWN0KE1uZ0FjdGlvbkV4ZWN1dG9yU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGFpbmVyID0gaW5qZWN0KFZpZXdDb250YWluZXIsIHtvcHRpb25hbDogdHJ1ZX0pO1xuXG4gICAgLy8gbWV0YWRhdGEgYW5kIGVkaXRvciBtb2RlIGlucHV0XG4gICAgQElucHV0KHtyZXF1aXJlZDogdHJ1ZX0pIGRhdGEhOiBBY3Rpb25FZGl0b3JJbmplY3RvckNvbnRleHRJbnB1dERhdGE8VCwgUz47XG5cbiAgICBAT3V0cHV0KCdhY3Rpb25TdWJtaXQnKSBwdWJsaWMgYWN0aW9uUnVuRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxUIHwgbnVsbCB8IHVuZGVmaW5lZD4oKTtcbiAgICBAT3V0cHV0KCdhY3Rpb25DYW5jZWwnKSBwdWJsaWMgYWN0aW9uQ2FuY2VsRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxUIHwgbnVsbCB8IHVuZGVmaW5lZD4oKTtcblxuICAgIC8vIGNvbnRlbnQgYW5kIHZpZXcgcXVlcmllc1xuICAgIEBWaWV3Q2hpbGQoJ3N1Ym1pdEJ1dHRvbicpIHB1YmxpYyBzdWJtaXRCdXR0b25FbGVtZW50UmVmITogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKE1uZ0Zvcm1FZGl0b3JDb21wb25lbnQpIHB1YmxpYyBmb3JtRWRpdG9yQ21wPzogTW5nRm9ybUVkaXRvckNvbXBvbmVudDtcblxuICAgIHB1YmxpYyB0aXRsZTogV3JpdGFibGVTaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPiA9IHNpZ25hbCh1bmRlZmluZWQpO1xuICAgIHB1YmxpYyBpc0Zvcm1EaXNhYmxlZCA9IHNpZ25hbChmYWxzZSk7XG5cbiAgICAvLyBkYXRhXG4gICAgcHVibGljIGl0ZW06IFdyaXRhYmxlU2lnbmFsPFQgfCB1bmRlZmluZWQ+ID0gc2lnbmFsKHVuZGVmaW5lZCk7XG4gICAgcHVibGljIGl0ZW1JZDogV3JpdGFibGVTaWduYWw8SWRUeXBlIHwgdW5kZWZpbmVkPiA9IHNpZ25hbCh1bmRlZmluZWQpO1xuICAgIHB1YmxpYyBhY3Rpb25EYXRhOiBXcml0YWJsZVNpZ25hbDxBY3Rpb25EYXRhIHwgdW5kZWZpbmVkPiA9IHNpZ25hbCh1bmRlZmluZWQpO1xuXG4gICAgLy8gYWN0aW9uc1xuICAgIHB1YmxpYyB0b29sYmFyTGVmdEFjdGlvbnM6IFdyaXRhYmxlU2lnbmFsPEFjdGlvbkRlc2NyaXB0b3JJbnN0PFQsIFM+W10+ID0gc2lnbmFsKFtdKTtcbiAgICBwdWJsaWMgdG9vbGJhclJpZ2h0QWN0aW9uczogV3JpdGFibGVTaWduYWw8QWN0aW9uRGVzY3JpcHRvckluc3Q8VCwgUz5bXT4gPSBzaWduYWwoW10pO1xuICAgIHB1YmxpYyBmb290ZXJMZWZ0QWN0aW9uczogV3JpdGFibGVTaWduYWw8QWN0aW9uRGVzY3JpcHRvckluc3Q8VCwgUz5bXT4gPSBzaWduYWwoW10pO1xuICAgIHB1YmxpYyBmb290ZXJSaWdodEFjdGlvbnM6IFdyaXRhYmxlU2lnbmFsPEFjdGlvbkRlc2NyaXB0b3JJbnN0PFQsIFM+W10+ID0gc2lnbmFsKFtdKTtcbiAgICBwcml2YXRlIGluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8VCwgUz47XG4gICAgcHJpdmF0ZSBpbnN0YW5jZVN0YXRlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgaW5zdGFuY2VSZWFjdGl2YXRpb25TdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBpbnN0YW5jZVN1Ym1pdEZvcm1JdGVtPzogVCB8IG51bGw7XG4gICAgcHJpdmF0ZSBpbnN0YW5jZVN1Ym1pdFJlc3VsdD86IFQgfCBudWxsO1xuXG4gICAgcHVibGljIGxvYWRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICAgIHByaXZhdGUgZmV0Y2hFeGVjdXRpb25TdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHVibGljIHN1Ym1pdExvYWRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICAgIHByaXZhdGUgc3VibWl0RXhlY3V0aW9uU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMudGl0bGUoKTtcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5kaWFsb2dDb25maWcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhLmRpYWxvZ0NvbmZpZy5oZWFkZXIgPSB0aXRsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5kZXNjcmlwdG9yLmFjdGl2YXRpb25UcmlnZ2VyID09PSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0uT25Sb3V0ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbnNTZXJ2aWNlLnNldFBhZ2VUaXRsZSh0aXRsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhLmFjdGlvbkluc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NBY3Rpb25JbnN0YW5jZSh0aGlzLmRhdGEuYWN0aW9uSW5zdGFuY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmRhdGEuZGF0YVByb3ZpZGVyKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuZGF0YVByb3ZpZGVyID0gdGhpcy52aWV3Q29udGFpbmVyPy5nZXREYXRhUHJvdmlkZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXRlbS5zZXQodGhpcy5kYXRhLml0ZW0pO1xuICAgICAgICB0aGlzLml0ZW1JZC5zZXQodGhpcy5kYXRhLml0ZW1JZCk7XG4gICAgICAgIHRoaXMuYWN0aW9uRGF0YS5zZXQodGhpcy5kYXRhLmFjdGlvbkRhdGEpO1xuXG4gICAgICAgIC8vIGFycmFuZ2UgdGhlIHN1Yi1hY3Rpb25zXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVN1YkFjdGlvbnMoKTtcblxuICAgICAgICAvLyBub3RpZnkgZXhlY3V0b3IgdG8gZm9yIGFjdGl2YXRpb24gdG8gZW5kXG4gICAgICAgIHRoaXMucHJvY2Vzc0FjdGlvbkluc3RhbmNlKHRoaXMuYWN0aW9uRXhlY3V0b3Iub25BY3Rpb25FZGl0b3JJbml0KHRoaXMuZGF0YS5kZXNjcmlwdG9yLCB0aGlzLmluc3RhbmNlLCB0aGlzKSk7XG5cbiAgICAgICAgLy8gc2V0IHRpdGxlXG4gICAgICAgIHRoaXMudXBkYXRlVGl0bGUoKTtcblxuICAgICAgICAvLyBzdWJzY3JpYmUgdG8gZXZlbnRzIHRoYXQgY291bGQgYmUgdHJpZ2dlcmVkIGZyb20gb3V0c2lkZSBmcm9tIGFueSByZWFzb25cbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyXG4gICAgICAgICAgICA/LmdldEVkaXRvclJlc2V0JCgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZS5mZXRjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mZXRjaEl0ZW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlLml0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUVkaXRvckNtcD8ucmVzZXRGb3JtTW9kZWwoZS5pdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlLmZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZS5maWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1FZGl0b3JDbXA/LnJlc2V0Rm9ybUZpZWxkVmFsdWUoa2V5LCBlLmZpZWxkc1trZXldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudmlld0NvbnRhaW5lclxuICAgICAgICAgICAgPy5nZXRFZGl0b3JDbG9zZSQoKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmZldGNoRXhlY3V0aW9uU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnN1Ym1pdEV4ZWN1dGlvblN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlO1xuICAgICAgICB0aGlzLnVuc2V0SW5zdGFuY2UoKTtcbiAgICAgICAgdGhpcy5hY3Rpb25FeGVjdXRvci5vbkFjdGlvbkVkaXRvckRlc3Ryb3koaW5zdGFuY2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblN1Ym1pdChldmVudDogTW5nRm9ybUVkaXRvclN1Ym1pdEV2ZW50PFQ+KSB7XG4gICAgICAgIGlmICghdGhpcy5pbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE1uZ0ludGVybmFsRXJyb3IoYEFjdGlvbiBpcyBub3QgaW5zdGFudGlhdGVkIGluIGFjdGlvbiBlZGl0b3IgZm9yIGFjdGlvbiAke3RoaXMuZGF0YS5kZXNjcmlwdG9yLmFjdGlvbk5hbWV9LmApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5zdWNjZXNzKSB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlU3VibWl0Rm9ybUl0ZW0gPSBldmVudC5mb3JtSXRlbTtcblxuICAgICAgICAgICAgLy8gcHJlcGFyZSBwYXJhbWV0ZXJzXG4gICAgICAgICAgICBjb25zdCBhY3Rpb25QYXJhbWV0ZXJzID0gbmV3IEFjdGlvblBhcmFtZXRlcnModGhpcy5pdGVtSWQoKSwgZXZlbnQuZm9ybUl0ZW0pLndpdGhBY3Rpb25EYXRhKHRoaXMuYWN0aW9uRGF0YSgpKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGEuZGVzY3JpcHRvci5lZGl0b3JEZXNjcmlwdG9yLmlzTG9jYWxpemVkKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uUGFyYW1ldGVycy53aXRoTG9jYWxlKHRoaXMuY29tbW9uc1NlcnZpY2UuYXBwRGF0YUxhbmd1YWdlRGVmYXVsdCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmFjdGlvbkV4ZWN1dG9yLnByZXBhcmVDb250ZXh0Rm9yRWRpdG9yU3VibWl0KFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5kZXNjcmlwdG9yLFxuICAgICAgICAgICAgICAgIGFjdGlvblBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmRhdGFQcm92aWRlcixcbiAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5wcmV2aW91c0FjdGlvbkluc3RhbmNlXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLnN1Ym1pdEV4ZWN1dGlvblN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuc3VibWl0RXhlY3V0aW9uU3Vic2NyaXB0aW9uID0gY29udGV4dC5leGVjdXRpb24kLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiByZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzICYmIHR5cGVvZiByZXMgPT09ICdvYmplY3QnICYmICF0aGlzLml0ZW1JZCgpICYmIHRoaXMuZGF0YS5kZXNjcmlwdG9yLm1vZGVsPy5pZFByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBjb3ZlciBjcmVhdGlvbiFcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlSXRlbUlkKHJlc1t0aGlzLmRhdGEuZGVzY3JpcHRvci5tb2RlbC5pZFByb3BlcnR5IGFzIGtleW9mIG9iamVjdF0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uUnVuRXZlbnRFbWl0dGVyLm5leHQocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZVN1Ym1pdFJlc3VsdCA9IHJlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5hY3Rpb25FeGVjdXRvci5ydW4oY29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2FuY2VsKCkge1xuICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oYEFjdGlvbiBlZGl0b3IgY2Fubm90IGJlIGNhbmNlbGVkIGZvciAke3RoaXMuZGF0YS5kZXNjcmlwdG9yLmFjdGlvbk5hbWV9LCBiZWNhdXNlIG5vIGFjdGlvbiBpbnN0YW5jZSBpcyBwcmVzZW50YCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hY3Rpb25DYW5jZWxFdmVudEVtaXR0ZXIubmV4dCh1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLmFjdGlvbkV4ZWN1dG9yLmZpbmlzaEFjdGlvbih0aGlzLmluc3RhbmNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlSXRlbUlkKGl0ZW1JZDogSWRUeXBlIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuaXRlbUlkLnNldChpdGVtSWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVJdGVtKGl0ZW06IFQgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5pdGVtLnNldChpdGVtKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJpZ2dlclN1Ym1pdCgpIHtcbiAgICAgICAgdGhpcy5mb3JtRWRpdG9yQ21wPy5zdWJtaXQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVTdWJBY3Rpb25zKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiB0aGlzLmRhdGEuZGVzY3JpcHRvci5lZGl0b3JBY3Rpb25zKSB7XG4gICAgICAgICAgICBpZiAoYWN0aW9uIGluc3RhbmNlb2YgQWN0aW9uRWRpdG9yU3VibWl0RGVzY3JpcHRvckluc3QpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFjdGlvbi5idXR0b24uaWNvbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uLmJ1dHRvbi53aXRoSWNvbihhY3Rpb24uc3VibWl0VHlwZSA9PT0gQWN0aW9uRWRpdG9yU3VibWl0VHlwZUVudW0uU3VibWl0ID8gJ3BpIHBpLWNoZWNrJyA6ICdwaSBwaS10aW1lcycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFjdGlvbi5idXR0b24ubGFiZWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi5idXR0b24ud2l0aExhYmVsKGFjdGlvbi5zdWJtaXRUeXBlID09PSBBY3Rpb25FZGl0b3JTdWJtaXRUeXBlRW51bS5TdWJtaXQgPyAnZ2VuZXJhbC5zYXZlJyA6IHRoaXMuZGF0YS5pc0RpYWxvZyA/ICdnZW5lcmFsLmNsb3NlJyA6ICdnZW5lcmFsLmNhbmNlbCcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGFzc2lnbiBydW4gb3BlcmF0aW9uc1xuICAgICAgICAgICAgICAgIGFjdGlvbi53aXRoUnVuTm90aWZpY2F0aW9uU3VjY2Vzcyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uc3VibWl0VHlwZSA9PT0gQWN0aW9uRWRpdG9yU3VibWl0VHlwZUVudW0uU3VibWl0KSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi53aXRoUnVuRnVuY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyU3VibWl0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi53aXRoUnVuRnVuY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZVdpdGhVbnNhdmVkQ2hhbmdlc0NvbmZpcm1hdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBsYWNlQWN0aW9uc09uUG9zaXRpb25zKGFjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiB0aGlzLnZpZXdDb250YWluZXI/LmdldEFjdGlvbnMoKS5maWx0ZXIodmFsdWUgPT4gdmFsdWUucG9zaXRpb25UYWJsZXZpZXdDYXRlZ29yaWVzPy5pbmNsdWRlcyh0aGlzLmRhdGEuZGVzY3JpcHRvci50YWJsZXZpZXdDYXRlZ29yeSEpKSA/PyBbXSkge1xuICAgICAgICAgICAgdGhpcy5wbGFjZUFjdGlvbnNPblBvc2l0aW9ucyhhY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50b29sYmFyUmlnaHRBY3Rpb25zLnVwZGF0ZSh2ID0+IHYucmV2ZXJzZSgpKTtcbiAgICAgICAgdGhpcy5mb290ZXJSaWdodEFjdGlvbnMudXBkYXRlKHYgPT4gdi5yZXZlcnNlKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmV0Y2hJdGVtKCkge1xuICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBNbmdJbnRlcm5hbEVycm9yKGBBY3Rpb24gaXMgbm90IGluc3RhbnRpYXRlZCBpbiBhY3Rpb24gZWRpdG9yIGZvciBhY3Rpb24gJHt0aGlzLmRhdGEuZGVzY3JpcHRvci5hY3Rpb25OYW1lfS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFjdGlvblBhcmFtZXRlcnMgPSBuZXcgQWN0aW9uUGFyYW1ldGVycyh0aGlzLml0ZW1JZCgpLCB0aGlzLml0ZW0oKSkud2l0aEFjdGlvbkRhdGEodGhpcy5hY3Rpb25EYXRhKCkpO1xuICAgICAgICBpZiAodGhpcy5kYXRhLmRlc2NyaXB0b3IuZWRpdG9yRGVzY3JpcHRvci5pc0xvY2FsaXplZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5kZXNjcmlwdG9yLmVkaXRvckRlc2NyaXB0b3IuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25QYXJhbWV0ZXJzLndpdGhMb2NhbGUodGhpcy5jb21tb25zU2VydmljZS5hcHBEYXRhTGFuZ3VhZ2UhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uUGFyYW1ldGVycy53aXRoTG9jYWxlKHRoaXMuY29tbW9uc1NlcnZpY2UuYXBwRGF0YUxhbmd1YWdlRGVmYXVsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2U/LnByZXZpb3VzSW5zdGFuY2U/LmNvbnRleHQ/LnBhcmFtZXRlcnMuaXRlbSkge1xuICAgICAgICAgICAgYWN0aW9uUGFyYW1ldGVycy53aXRoRm9ybUl0ZW0odGhpcy5pbnN0YW5jZT8ucHJldmlvdXNJbnN0YW5jZT8uY29udGV4dD8ucGFyYW1ldGVycy5pdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW5zdGFuY2U/LnByZXZpb3VzSW5zdGFuY2U/LnJlc3VsdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGFjdGlvblBhcmFtZXRlcnMud2l0aFN1Ym1pdFJlc3VsdCh0aGlzLmluc3RhbmNlPy5wcmV2aW91c0luc3RhbmNlPy5yZXN1bHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuYWN0aW9uRXhlY3V0b3IucHJlcGFyZUNvbnRleHRGb3JFZGl0b3JGZXRjaChcbiAgICAgICAgICAgIHRoaXMuZGF0YS5kZXNjcmlwdG9yLFxuICAgICAgICAgICAgYWN0aW9uUGFyYW1ldGVycyxcbiAgICAgICAgICAgIHRoaXMuZGF0YS5kYXRhUHJvdmlkZXIsXG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlLFxuICAgICAgICAgICAgdGhpcy5kYXRhLnByZXZpb3VzQWN0aW9uSW5zdGFuY2VcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5mZXRjaEV4ZWN1dGlvblN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5mZXRjaEV4ZWN1dGlvblN1YnNjcmlwdGlvbiA9IGNvbnRleHQuZXhlY3V0aW9uJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVJdGVtKHJlcyA/PyB1bmRlZmluZWQpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVUaXRsZSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmFjdGlvbkV4ZWN1dG9yLnJ1bihjb250ZXh0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVRpdGxlKCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhLmRlc2NyaXB0b3IuZWRpdG9yVGl0bGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMudGl0bGUuc2V0KHVuZGVmaW5lZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgSTE4blV0aWxzLkFjdGlvbi5nZXRFZGl0b3JUaXRsZUFzeW5jKHRoaXMudHJhbnNsYXRlLCB0aGlzLmRhdGEuZGVzY3JpcHRvciwgdGhpcy5pdGVtKCkpLnN1YnNjcmliZSh0ID0+IHtcbiAgICAgICAgICAgIHRoaXMudGl0bGUuc2V0KHQgPz8gdW5kZWZpbmVkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwbGFjZUFjdGlvbnNPblBvc2l0aW9ucyhhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3JJbnN0PGFueT4pIHtcbiAgICAgICAgc3dpdGNoIChhY3Rpb24ucG9zaXRpb24pIHtcbiAgICAgICAgICAgIGNhc2UgQWN0aW9uUG9zaXRpb25FbnVtLlRvb2xiYXJMZWZ0OlxuICAgICAgICAgICAgICAgIHRoaXMudG9vbGJhckxlZnRBY3Rpb25zLnVwZGF0ZSh2ID0+IFsuLi52LCBhY3Rpb25dKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQWN0aW9uUG9zaXRpb25FbnVtLlRvb2xiYXJSaWdodDpcbiAgICAgICAgICAgICAgICB0aGlzLnRvb2xiYXJSaWdodEFjdGlvbnMudXBkYXRlKHYgPT4gWy4uLnYsIGFjdGlvbl0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBY3Rpb25Qb3NpdGlvbkVudW0uRm9vdGVyTGVmdDpcbiAgICAgICAgICAgICAgICB0aGlzLmZvb3RlckxlZnRBY3Rpb25zLnVwZGF0ZSh2ID0+IFsuLi52LCBhY3Rpb25dKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQWN0aW9uUG9zaXRpb25FbnVtLkZvb3RlclJpZ2h0OlxuICAgICAgICAgICAgICAgIHRoaXMuZm9vdGVyUmlnaHRBY3Rpb25zLnVwZGF0ZSh2ID0+IFsuLi52LCBhY3Rpb25dKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RWRpdG9yRW5hYmxlZChpc0VuYWJsZWQgPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuaXNGb3JtRGlzYWJsZWQuc2V0KCFpc0VuYWJsZWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc0FjdGlvbkluc3RhbmNlKGluc3RhbmNlOiBBY3Rpb25JbnN0YW5jZTxULCBTPikge1xuICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UgfHwgdGhpcy5pbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lICE9PSBpbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lKSB7XG4gICAgICAgICAgICB0aGlzLnVuc2V0SW5zdGFuY2UoKTtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UgPSBpbnN0YW5jZTtcblxuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZVN0YXRlU3Vic2NyaXB0aW9uID0gdGhpcy5pbnN0YW5jZS5zdGF0ZSQuc3Vic2NyaWJlKHMgPT4ge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAocykge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkFjdGl2YXRpb25FbmQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZldGNoSXRlbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmV0Y2hTdGFydDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RWRpdG9yRW5hYmxlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmV0Y2hFcnJvcjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmV0Y2hFbmQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEVkaXRvckVuYWJsZWQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1blN0YXJ0OlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFZGl0b3JFbmFibGVkKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0TG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5FbmQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uUnVuRXJyb3I6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEVkaXRvckVuYWJsZWQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdExvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLk5leHRBY3Rpb25TdGFydDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmluc3RhbmNlPy5uZXh0QWN0aW9uSW5zdGFuY2U/LmFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlRW51bS5EaXJlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdExvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uTmV4dEFjdGlvbkVuZDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmluc3RhbmNlPy5uZXh0QWN0aW9uSW5zdGFuY2U/LmFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlRW51bS5EaXJlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdExvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkVycm9yQWN0aW9uU3RhcnQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZT8uZXJyb3JBY3Rpb25JbnN0YW5jZT8uYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVFbnVtLkRpcmVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0TG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5FcnJvckFjdGlvbkVuZDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmluc3RhbmNlPy5lcnJvckFjdGlvbkluc3RhbmNlPy5hY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZUVudW0uRGlyZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXRMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hFcnJvckZpbmFsOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFZGl0b3JFbmFibGVkKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NGaW5hbDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hEaXNtaXNzZWRGaW5hbDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RWRpdG9yRW5hYmxlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc2V0SW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NSZWFjdGl2YXRlRmluYWw6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEVkaXRvckVuYWJsZWQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2hvdWxkIGFsc28gdW5zZXRJbnN0YW5jZSwgYnV0IGxldCB0aGlzIGZvciByZWFjdGl2YXRpb25JbnN0YW5jZSQgbGlzdGVuZXIgdG8gbm90IGludGVyZmVyZVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2VSZWFjdGl2YXRpb25TdWJzY3JpcHRpb24gPSB0aGlzLmluc3RhbmNlLnJlYWN0aXZhdGlvbkluc3RhbmNlJC5zdWJzY3JpYmUobmV3SW5zdGFuY2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0FjdGlvbkluc3RhbmNlKG5ld0luc3RhbmNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1bnNldEluc3RhbmNlKCkge1xuICAgICAgICB0aGlzLmluc3RhbmNlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmluc3RhbmNlU3RhdGVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuaW5zdGFuY2VSZWFjdGl2YXRpb25TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcpXG4gICAgcHJpdmF0ZSBiZWZvcmVXaW5kb3dVbmxvYWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGEuaXNEaWFsb2cgJiYgdGhpcy5mb3JtRWRpdG9yQ21wPy5mb3JtLnByaXN0aW5lID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpcm0odGhpcy50cmFuc2xhdGUuaW5zdGFudCgnbW5nRWRpdG9yLnVuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uLm1lc3NhZ2UnKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleWRvd24uRXNjYXBlJylcbiAgICBwcml2YXRlIG9uRXNjYXBlUHJlc3NlZCgpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5kYXRhLmlzRGlhbG9nICYmXG4gICAgICAgICAgICB0aGlzLmRhdGEuZGVzY3JpcHRvci5hY3RpdmF0aW9uVHJpZ2dlciA9PT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUgJiZcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2U/LmFjdGl2YXRpb25EaWFsb2dSZWYgJiZcbiAgICAgICAgICAgIHBhcnNlSW50KHRoaXMuZGlhbG9nU2VydmljZS5kaWFsb2dDb21wb25lbnRSZWZNYXAuZ2V0KHRoaXMuaW5zdGFuY2U/LmFjdGl2YXRpb25EaWFsb2dSZWYpPy5pbnN0YW5jZS5jb250YWluZXI/LnN0eWxlLnpJbmRleCA/PyAnJykgPT09IFpJbmRleFV0aWxzLmdldEN1cnJlbnQoKVxuICAgICAgICApXG4gICAgICAgICAgICB0aGlzLmNsb3NlV2l0aFVuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG93VW5zYXZlZENoYW5nZXNDb25maXJtYXRpb25EaWFsb2coY2FsbEZyb21HdWFyZDogYm9vbGVhbik6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICBjb25zdCBzdWJqZWN0ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xuICAgICAgICAgICAgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdtbmdFZGl0b3IudW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24uaGVhZGVyJyksXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdtbmdFZGl0b3IudW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24ubWVzc2FnZScpLFxuICAgICAgICAgICAgYWNjZXB0TGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2dlbmVyYWwueWVzJyksXG4gICAgICAgICAgICByZWplY3RMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZ2VuZXJhbC5ubycpLFxuICAgICAgICAgICAgaWNvbjogJ3BpIHBpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJyxcbiAgICAgICAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghY2FsbEZyb21HdWFyZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlamVjdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsb3NlV2l0aFVuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uKGNhbGxGcm9tR3VhcmQgPSBmYWxzZSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICBpZiAodGhpcy5mb3JtRWRpdG9yQ21wPy5mb3JtLnByaXN0aW5lID09PSBmYWxzZSAmJiB0aGlzLmRhdGEuZGVzY3JpcHRvci51bnNhdmVkQ2hhbmdlc0NvbmZpcm1hdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hvd1Vuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uRGlhbG9nKGNhbGxGcm9tR3VhcmQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFjYWxsRnJvbUd1YXJkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5jZWwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvZih0cnVlKTtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uRWRpdG9ySW5qZWN0b3JDb250ZXh0SW5wdXREYXRhPFQsIFM+IHtcbiAgICBkZXNjcmlwdG9yOiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdDxULCBTPjtcbiAgICBpc0RpYWxvZzogYm9vbGVhbjtcbiAgICBkaWFsb2dDb25maWc/OiBEeW5hbWljRGlhbG9nQ29uZmlnO1xuICAgIGl0ZW1JZD86IElkVHlwZTtcbiAgICBpdGVtPzogVDtcbiAgICBhY3Rpb25EYXRhPzogQWN0aW9uRGF0YTtcbiAgICBkYXRhUHJvdmlkZXI/OiBJRGF0YVByb3ZpZGVyPFQsIFM+O1xuICAgIGFjdGlvbkluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8VCwgUz47XG4gICAgcHJldmlvdXNBY3Rpb25JbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPGFueSwgYW55Pjtcbn1cbiIsIkBpZiAoIWRhdGEuaXNEaWFsb2cgJiYgdGl0bGUoKSkge1xuICAgIDxoNT57eyB0aXRsZSgpIH19PC9oNT5cbn1cbkBpZiAoZGF0YS5pc0RpYWxvZyAmJiBkYXRhLmRlc2NyaXB0b3IuYWN0aXZhdGlvblRyaWdnZXIgPT09IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PblJvdXRlKSB7XG4gICAgPHNwYW4gY2xhc3M9XCJwLWRpYWxvZy1oZWFkZXIgZGlhbG9nLWNsb3NlLWJ1dHRvbi13cmFwcGVyXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwicC1kaWFsb2ctaGVhZGVyLWljb24gcC1kaWFsb2ctaGVhZGVyLW1heGltaXplIHAtbGlua1wiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbG9zZVdpdGhVbnNhdmVkQ2hhbmdlc0NvbmZpcm1hdGlvbigpXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImNsb3NlV2l0aFVuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uKClcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1kaWFsb2ctaGVhZGVyLWNsb3NlLWljb24gcGkgcGktdGltZXNcIj48L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvc3Bhbj5cbn1cbjxkaXYgY2xhc3M9XCJoLWZ1bGwgZmxleCBmbGV4LWNvbHVtblwiPlxuICAgIEBpZiAodG9vbGJhckxlZnRBY3Rpb25zKCkubGVuZ3RoID4gMCB8fCB0b29sYmFyUmlnaHRBY3Rpb25zKCkubGVuZ3RoID4gMCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTEgbW5nLWFjdGlvbi1lZGl0b3ItdG9vbGJhci1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxwLXRvb2xiYXIgc3R5bGVDbGFzcz1cIm1uZy1hY3Rpb24tZWRpdG9yLXRvb2xiYXJcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwibGVmdFwiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChhY3Rpb24gb2YgdG9vbGJhckxlZnRBY3Rpb25zKCk7IHRyYWNrIGFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG1uZy1hY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWN0aW9uXT1cImFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInN1Ym1pdExvYWRpbmcoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiJGFueShhY3Rpb24pLnN1Ym1pdFR5cGUgPT09IGFjdGlvbkVkaXRvclN1Ym1pdFR5cGVTdWJtaXQgPyBzdWJtaXRMb2FkaW5nKCkgOiBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hvc3RDb21wb25lbnRdPVwidGhpc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbUlkXT1cIml0ZW1JZCgpXCI+PC9tbmctYWN0aW9uPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoYWN0aW9uIG9mIHRvb2xiYXJSaWdodEFjdGlvbnMoKTsgdHJhY2sgYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bW5nLWFjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY3Rpb25dPVwiYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic3VibWl0TG9hZGluZygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbG9hZGluZ109XCIkYW55KGFjdGlvbikuc3VibWl0VHlwZSA9PT0gYWN0aW9uRWRpdG9yU3VibWl0VHlwZVN1Ym1pdCA/IHN1Ym1pdExvYWRpbmcoKSA6IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaG9zdENvbXBvbmVudF09XCJ0aGlzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtSWRdPVwiaXRlbUlkKClcIj48L21uZy1hY3Rpb24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9wLXRvb2xiYXI+XG4gICAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBtbmctYWN0aW9uLWVkaXRvci1mb3JtLWNvbnRhaW5lclwiPlxuICAgICAgICBAaWYgKGxvYWRpbmcoKSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPHAtcHJvZ3Jlc3NTcGlubmVyIFtzdHlsZV09XCJ7d2lkdGg6ICczcmVtJywgaGVpZ2h0OiAnM3JlbSd9XCIgc3Ryb2tlV2lkdGg9XCIzXCI+PC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoZGF0YS5kZXNjcmlwdG9yLmVkaXRvckRlc2NyaXB0b3IgJiYgIWxvYWRpbmcoKSkge1xuICAgICAgICAgICAgPG1uZy1mb3JtLWVkaXRvciBbZGVzY3JpcHRvcl09XCJkYXRhLmRlc2NyaXB0b3IuZWRpdG9yRGVzY3JpcHRvclwiIFtpdGVtXT1cIml0ZW0oKVwiIFtpc0Zvcm1EaXNhYmxlZF09XCJpc0Zvcm1EaXNhYmxlZCgpXCIgKGZvcm1TdWJtaXQpPVwib25TdWJtaXQoJGV2ZW50KVwiPiA8L21uZy1mb3JtLWVkaXRvcj5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWJldHdlZW4gbW5nLWFjdGlvbi1lZGl0b3ItZm9vdGVyLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgQGZvciAoYWN0aW9uIG9mIGZvb3RlckxlZnRBY3Rpb25zKCk7IHRyYWNrIGFjdGlvbikge1xuICAgICAgICAgICAgICAgIDxtbmctYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIFthY3Rpb25dPVwiYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInN1Ym1pdExvYWRpbmcoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cIiRhbnkoYWN0aW9uKS5zdWJtaXRUeXBlID09PSBhY3Rpb25FZGl0b3JTdWJtaXRUeXBlU3VibWl0ID8gc3VibWl0TG9hZGluZygpIDogZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICBbaG9zdENvbXBvbmVudF09XCJ0aGlzXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1JZF09XCJpdGVtSWQoKVwiPjwvbW5nLWFjdGlvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICBAZm9yIChhY3Rpb24gb2YgZm9vdGVyUmlnaHRBY3Rpb25zKCk7IHRyYWNrIGFjdGlvbikge1xuICAgICAgICAgICAgICAgIDxtbmctYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIFthY3Rpb25dPVwiYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInN1Ym1pdExvYWRpbmcoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cIiRhbnkoYWN0aW9uKS5zdWJtaXRUeXBlID09PSBhY3Rpb25FZGl0b3JTdWJtaXRUeXBlU3VibWl0ID8gc3VibWl0TG9hZGluZygpIDogZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICBbaG9zdENvbXBvbmVudF09XCJ0aGlzXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1JZF09XCJpdGVtSWQoKVwiPjwvbW5nLWFjdGlvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild, inject } from '@angular/core';
|
|
2
2
|
import { FormsModule } from '@angular/forms';
|
|
3
3
|
import { of } from 'rxjs';
|
|
4
4
|
import { LookupDataProvider } from '../../../data-providers';
|
|
5
5
|
import { ActionDescriptorInst } from '../../../descriptors/action';
|
|
6
6
|
import { MngCommonsService } from '../../../services';
|
|
7
|
+
import { ViewContainer } from '../../../services/view';
|
|
7
8
|
import { MngDropdownComponent } from '../../form';
|
|
8
9
|
import * as i0 from "@angular/core";
|
|
9
10
|
import * as i1 from "../../../services";
|
|
@@ -11,15 +12,16 @@ import * as i2 from "@angular/forms";
|
|
|
11
12
|
export class MngDataLanguageDropdownComponent {
|
|
12
13
|
constructor(mngCommons) {
|
|
13
14
|
this.mngCommons = mngCommons;
|
|
15
|
+
this.viewContainer = inject(ViewContainer, { optional: true });
|
|
14
16
|
this.triggerActionEventEmitter = new EventEmitter();
|
|
15
17
|
this.selectionItemsDataProvider = LookupDataProvider.create().withLookup(() => of(mngCommons.appDataLanguages));
|
|
16
18
|
}
|
|
17
19
|
updateDataLanguage(dataLang) {
|
|
18
20
|
this.mngCommons.appDataLanguage = dataLang;
|
|
19
|
-
this.viewContainer?.reloadTable
|
|
21
|
+
this.viewContainer?.reloadTable({});
|
|
20
22
|
}
|
|
21
23
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: MngDataLanguageDropdownComponent, deps: [{ token: i1.MngCommonsService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
22
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", type: MngDataLanguageDropdownComponent, isStandalone: true, selector: "mng-data-language-dropdown", inputs: { action: "action", actionData: "actionData", item: "item", itemId: "itemId", enabled: "enabled", loading: "loading"
|
|
24
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", type: MngDataLanguageDropdownComponent, isStandalone: true, selector: "mng-data-language-dropdown", inputs: { action: "action", actionData: "actionData", item: "item", itemId: "itemId", enabled: "enabled", loading: "loading" }, outputs: { triggerActionEventEmitter: "triggerActionEventEmitter" }, viewQueries: [{ propertyName: "dropdown", first: true, predicate: MngDropdownComponent, descendants: true }], ngImport: i0, template: "<mng-dropdown [dataProvider]=\"selectionItemsDataProvider\" [ngModel]=\"mngCommons.appDataLanguage\" [showClear]=\"false\" (valueChange)=\"updateDataLanguage($event)\"></mng-dropdown>\n", dependencies: [{ kind: "component", type: MngDropdownComponent, selector: "mng-dropdown", inputs: ["dataProvider", "optionsTrackProperty", "optionsLabelProperty", "optionsLabelTranslate", "optionsValueProperty", "optionsDisabledProperty", "multiselect", "placeholder", "showClear", "selectFirstItem", "className", "dropdownClassName", "changeValueOnBlur"], outputs: ["valueChange"] }, { kind: "ngmodule", type: FormsModule }, { 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"] }] }); }
|
|
23
25
|
}
|
|
24
26
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: MngDataLanguageDropdownComponent, decorators: [{
|
|
25
27
|
type: Component,
|
|
@@ -42,13 +44,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImpor
|
|
|
42
44
|
}], loading: [{
|
|
43
45
|
type: Input,
|
|
44
46
|
args: [{ required: true }]
|
|
45
|
-
}], viewContainer: [{
|
|
46
|
-
type: Input,
|
|
47
|
-
args: [{ required: true }]
|
|
48
47
|
}], triggerActionEventEmitter: [{
|
|
49
48
|
type: Output
|
|
50
49
|
}], dropdown: [{
|
|
51
50
|
type: ViewChild,
|
|
52
51
|
args: [MngDropdownComponent]
|
|
53
52
|
}] } });
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1sYW5ndWFnZS1kcm9wZG93bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvYWN0aW9uL2xvY2FsaXphdGlvbi9kYXRhLWxhbmd1YWdlLWRyb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hY3Rpb24vbG9jYWxpemF0aW9uL2RhdGEtbGFuZ3VhZ2UtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hGLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXhCLE9BQU8sRUFBQyxrQkFBa0IsRUFBeUIsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRixPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFckQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sWUFBWSxDQUFDOzs7O0FBU2hELE1BQU0sT0FBTyxnQ0FBZ0M7SUFnQnpDLFlBQW1CLFVBQTZCO1FBQTdCLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBZi9CLGtCQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsRUFBRSxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBU3hELDhCQUF5QixHQUFzQyxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQU9wSCxJQUFJLENBQUMsMEJBQTBCLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxFQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0lBQzVILENBQUM7SUFFTSxrQkFBa0IsQ0FBQyxRQUFnQjtRQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUM7UUFDM0MsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDeEMsQ0FBQzs4R0F2QlEsZ0NBQWdDO2tHQUFoQyxnQ0FBZ0MscVVBVzlCLG9CQUFvQixnREM5Qm5DLDJMQUNBLDRDRGVjLG9CQUFvQiw2VkFBRSxXQUFXOzsyRkFHbEMsZ0NBQWdDO2tCQU41QyxTQUFTO2lDQUNNLElBQUksWUFDTiw0QkFBNEIsV0FDN0IsQ0FBQyxvQkFBb0IsRUFBRSxXQUFXLENBQUM7c0ZBTVosTUFBTTtzQkFBckMsS0FBSzt1QkFBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUM7Z0JBQ1MsVUFBVTtzQkFBekMsS0FBSzt1QkFBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUM7Z0JBQ1MsSUFBSTtzQkFBbkMsS0FBSzt1QkFBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUM7Z0JBQ1MsTUFBTTtzQkFBckMsS0FBSzt1QkFBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUM7Z0JBQ1MsT0FBTztzQkFBdEMsS0FBSzt1QkFBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUM7Z0JBQ1MsT0FBTztzQkFBdEMsS0FBSzt1QkFBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUM7Z0JBRU4seUJBQXlCO3NCQUF6QyxNQUFNO2dCQUNrQyxRQUFRO3NCQUFoRCxTQUFTO3VCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZCwgaW5qZWN0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtvZn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7TG9va3VwRGF0YVByb3ZpZGVyLCBMb29rdXBEYXRhUHJvdmlkZXJJbnN0fSBmcm9tICcuLi8uLi8uLi9kYXRhLXByb3ZpZGVycyc7XG5pbXBvcnQge0FjdGlvbkRlc2NyaXB0b3JJbnN0fSBmcm9tICcuLi8uLi8uLi9kZXNjcmlwdG9ycy9hY3Rpb24nO1xuaW1wb3J0IHtNbmdDb21tb25zU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtWaWV3Q29udGFpbmVyfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy92aWV3JztcbmltcG9ydCB7SWRUeXBlfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQge01uZ0Ryb3Bkb3duQ29tcG9uZW50fSBmcm9tICcuLi8uLi9mb3JtJztcbmltcG9ydCB7QWN0aW9uRGF0YSwgQWN0aW9uUGFyYW1ldGVycywgSUFjdGlvbkNvbXBvbmVudH0gZnJvbSAnLi4vbW9kZWxzJztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ21uZy1kYXRhLWxhbmd1YWdlLWRyb3Bkb3duJyxcbiAgICBpbXBvcnRzOiBbTW5nRHJvcGRvd25Db21wb25lbnQsIEZvcm1zTW9kdWxlXSxcbiAgICB0ZW1wbGF0ZVVybDogJ2RhdGEtbGFuZ3VhZ2UtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIE1uZ0RhdGFMYW5ndWFnZURyb3Bkb3duQ29tcG9uZW50PFQgPSBhbnk+IGltcGxlbWVudHMgSUFjdGlvbkNvbXBvbmVudDxUPiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGFpbmVyID0gaW5qZWN0KFZpZXdDb250YWluZXIsIHtvcHRpb25hbDogdHJ1ZX0pO1xuXG4gICAgQElucHV0KHtyZXF1aXJlZDogdHJ1ZX0pIHB1YmxpYyBhY3Rpb24hOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxUPjtcbiAgICBASW5wdXQoe3JlcXVpcmVkOiB0cnVlfSkgcHVibGljIGFjdGlvbkRhdGEhOiBBY3Rpb25EYXRhO1xuICAgIEBJbnB1dCh7cmVxdWlyZWQ6IHRydWV9KSBwdWJsaWMgaXRlbSE6IFQ7XG4gICAgQElucHV0KHtyZXF1aXJlZDogdHJ1ZX0pIHB1YmxpYyBpdGVtSWQhOiBJZFR5cGU7XG4gICAgQElucHV0KHtyZXF1aXJlZDogdHJ1ZX0pIHB1YmxpYyBlbmFibGVkITogYm9vbGVhbjtcbiAgICBASW5wdXQoe3JlcXVpcmVkOiB0cnVlfSkgcHVibGljIGxvYWRpbmchOiBib29sZWFuO1xuXG4gICAgQE91dHB1dCgpIHB1YmxpYyB0cmlnZ2VyQWN0aW9uRXZlbnRFbWl0dGVyOiBFdmVudEVtaXR0ZXI8QWN0aW9uUGFyYW1ldGVyczxUPj4gPSBuZXcgRXZlbnRFbWl0dGVyPEFjdGlvblBhcmFtZXRlcnM8VD4+KCk7XG4gICAgQFZpZXdDaGlsZChNbmdEcm9wZG93bkNvbXBvbmVudCkgcHJpdmF0ZSBkcm9wZG93bj86IE1uZ0Ryb3Bkb3duQ29tcG9uZW50O1xuXG4gICAgLy8gZHJvcGRvd24gcHJvcGVydGllc1xuICAgIHB1YmxpYyBzZWxlY3Rpb25JdGVtc0RhdGFQcm92aWRlcjogTG9va3VwRGF0YVByb3ZpZGVySW5zdDxzdHJpbmc+O1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIG1uZ0NvbW1vbnM6IE1uZ0NvbW1vbnNTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uSXRlbXNEYXRhUHJvdmlkZXIgPSBMb29rdXBEYXRhUHJvdmlkZXIuY3JlYXRlPHN0cmluZz4oKS53aXRoTG9va3VwKCgpID0+IG9mKG1uZ0NvbW1vbnMuYXBwRGF0YUxhbmd1YWdlcykpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVEYXRhTGFuZ3VhZ2UoZGF0YUxhbmc6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLm1uZ0NvbW1vbnMuYXBwRGF0YUxhbmd1YWdlID0gZGF0YUxhbmc7XG4gICAgICAgIHRoaXMudmlld0NvbnRhaW5lcj8ucmVsb2FkVGFibGUoe30pO1xuICAgIH1cbn1cbiIsIjxtbmctZHJvcGRvd24gW2RhdGFQcm92aWRlcl09XCJzZWxlY3Rpb25JdGVtc0RhdGFQcm92aWRlclwiIFtuZ01vZGVsXT1cIm1uZ0NvbW1vbnMuYXBwRGF0YUxhbmd1YWdlXCIgW3Nob3dDbGVhcl09XCJmYWxzZVwiICh2YWx1ZUNoYW5nZSk9XCJ1cGRhdGVEYXRhTGFuZ3VhZ2UoJGV2ZW50KVwiPjwvbW5nLWRyb3Bkb3duPlxuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWNvbXBvbmVudC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hY3Rpb24vbW9kZWxzL2FjdGlvbi1jb21wb25lbnQubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RXZlbnRFbWl0dGVyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtBY3Rpb25EZXNjcmlwdG9ySW5zdH0gZnJvbSAnLi4vLi4vLi4vZGVzY3JpcHRvcnMvYWN0aW9uJztcbmltcG9ydCB7SWRUeXBlfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQge0FjdGlvbkRhdGEsIEFjdGlvblBhcmFtZXRlcnN9IGZyb20gJy4vYWN0aW9uLWV4ZWN1dGlvbi5tb2RlbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUFjdGlvbkNvbXBvbmVudDxUID0gYW55LCBTID0gdW5kZWZpbmVkPiB7XG4gICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxULCBTPjtcbiAgICBpdGVtOiBUO1xuICAgIGl0ZW1JZDogSWRUeXBlO1xuICAgIGFjdGlvbkRhdGE6IEFjdGlvbkRhdGE7XG4gICAgZW5hYmxlZDogYm9vbGVhbjtcbiAgICBsb2FkaW5nOiBib29sZWFuO1xuICAgIHRyaWdnZXJBY3Rpb25FdmVudEVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxBY3Rpb25QYXJhbWV0ZXJzPFQ+Pjtcbn1cbiJdfQ==
|