@alfresco/adf-process-services-cloud 8.1.0-16295248176 → 8.1.0-16342534841
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/bundles/assets/adf-process-services-cloud/i18n/de.json +3 -0
- package/bundles/assets/adf-process-services-cloud/i18n/es.json +3 -0
- package/bundles/assets/adf-process-services-cloud/i18n/fr.json +3 -0
- package/bundles/assets/adf-process-services-cloud/i18n/it.json +3 -0
- package/bundles/assets/adf-process-services-cloud/i18n/pl.json +3 -0
- package/bundles/assets/adf-process-services-cloud/i18n/pt.json +3 -0
- package/esm2022/adf-process-services-cloud.mjs +5 -0
- package/esm2022/lib/app/app-list-cloud.module.mjs +20 -0
- package/esm2022/lib/app/components/app-details-cloud/app-details-cloud.component.mjs +67 -0
- package/esm2022/lib/app/components/app-list-cloud/app-list-cloud.component.mjs +125 -0
- package/esm2022/lib/app/models/application-instance.model.mjs +24 -0
- package/esm2022/lib/app/public-api.mjs +22 -0
- package/esm2022/lib/app/services/apps-process-cloud.service.mjs +97 -0
- package/esm2022/lib/common/date-range-filter/date-range-filter.component.mjs +163 -0
- package/esm2022/lib/common/date-range-filter/date-range-filter.service.mjs +97 -0
- package/esm2022/lib/common/index.mjs +18 -0
- package/esm2022/lib/common/interface/environment.interface.mjs +18 -0
- package/esm2022/lib/common/interface/index.mjs +18 -0
- package/esm2022/lib/common/interface/public-api.mjs +18 -0
- package/esm2022/lib/common/public-api.mjs +19 -0
- package/esm2022/lib/form/components/cloud-form-rendering.service.mjs +57 -0
- package/esm2022/lib/form/components/form-cloud-custom-outcomes.component.mjs +31 -0
- package/esm2022/lib/form/components/form-cloud.component.mjs +397 -0
- package/esm2022/lib/form/components/form-definition-selector-cloud.component.mjs +53 -0
- package/esm2022/lib/form/components/spinner/form-spinner.component.mjs +35 -0
- package/esm2022/lib/form/components/widgets/attach-file/attach-file-cloud-widget.component.mjs +249 -0
- package/esm2022/lib/form/components/widgets/attach-file/file-properties-table/file-properties-table-cloud.component.mjs +136 -0
- package/esm2022/lib/form/components/widgets/data-table/data-table-adapter.widget.mjs +107 -0
- package/esm2022/lib/form/components/widgets/data-table/data-table.widget.mjs +120 -0
- package/esm2022/lib/form/components/widgets/data-table/helpers/data-table-path-parser.helper.mjs +122 -0
- package/esm2022/lib/form/components/widgets/date/date-cloud.widget.mjs +189 -0
- package/esm2022/lib/form/components/widgets/display-external-property/display-external-property.widget.mjs +85 -0
- package/esm2022/lib/form/components/widgets/display-rich-text/display-rich-text.widget.mjs +80 -0
- package/esm2022/lib/form/components/widgets/dropdown/dropdown-cloud.widget.mjs +463 -0
- package/esm2022/lib/form/components/widgets/dropdown/validators.mjs +29 -0
- package/esm2022/lib/form/components/widgets/file-viewer/file-viewer.widget.mjs +46 -0
- package/esm2022/lib/form/components/widgets/group/group-cloud.widget.mjs +82 -0
- package/esm2022/lib/form/components/widgets/people/people-cloud.widget.mjs +91 -0
- package/esm2022/lib/form/components/widgets/properties-viewer/properties-viewer-wrapper/properties-viewer-wrapper.component.mjs +81 -0
- package/esm2022/lib/form/components/widgets/properties-viewer/properties-viewer.widget.mjs +53 -0
- package/esm2022/lib/form/components/widgets/radio-buttons/radio-buttons-cloud.schema.mjs +86 -0
- package/esm2022/lib/form/components/widgets/radio-buttons/radio-buttons-cloud.widget.mjs +116 -0
- package/esm2022/lib/form/components/widgets/upload/upload-cloud.widget.mjs +187 -0
- package/esm2022/lib/form/form-cloud.module.mjs +103 -0
- package/esm2022/lib/form/models/form-cloud-representation.model.mjs +48 -0
- package/esm2022/lib/form/models/task-variable-cloud.model.mjs +28 -0
- package/esm2022/lib/form/public-api.mjs +44 -0
- package/esm2022/lib/form/services/content-cloud-node-selector.service.mjs +120 -0
- package/esm2022/lib/form/services/display-mode.service.mjs +146 -0
- package/esm2022/lib/form/services/form-cloud.service.interface.mjs +18 -0
- package/esm2022/lib/form/services/form-cloud.service.mjs +201 -0
- package/esm2022/lib/form/services/form-definition-selector-cloud.service.interface.mjs +18 -0
- package/esm2022/lib/form/services/form-definition-selector-cloud.service.mjs +51 -0
- package/esm2022/lib/form/services/form-utils.service.mjs +37 -0
- package/esm2022/lib/form/services/process-cloud-content.service.mjs +71 -0
- package/esm2022/lib/form/services/spinner/form-cloud-spinner.service.mjs +52 -0
- package/esm2022/lib/group/components/group-cloud.component.mjs +423 -0
- package/esm2022/lib/group/group-cloud.module.mjs +33 -0
- package/esm2022/lib/group/models/identity-group.model.mjs +18 -0
- package/esm2022/lib/group/public-api.mjs +21 -0
- package/esm2022/lib/group/services/identity-group.service.mjs +89 -0
- package/esm2022/lib/models/application-version.model.mjs +21 -0
- package/esm2022/lib/models/constant-values.type.mjs +18 -0
- package/esm2022/lib/models/data-column-custom-data.mjs +18 -0
- package/esm2022/lib/models/date-cloud-filter.model.mjs +31 -0
- package/esm2022/lib/models/date-format-cloud.model.mjs +18 -0
- package/esm2022/lib/models/engine-event-cloud.model.mjs +18 -0
- package/esm2022/lib/models/filter-cloud-model.mjs +128 -0
- package/esm2022/lib/models/process-definition-cloud.model.mjs +32 -0
- package/esm2022/lib/models/process-instance-variable.model.mjs +18 -0
- package/esm2022/lib/models/process-variable-filter.model.mjs +18 -0
- package/esm2022/lib/models/task-cloud.model.mjs +23 -0
- package/esm2022/lib/models/task-list-sorting.model.mjs +40 -0
- package/esm2022/lib/models/variable-definition.mjs +18 -0
- package/esm2022/lib/people/components/people-cloud.component.mjs +498 -0
- package/esm2022/lib/people/models/identity-user.model.mjs +18 -0
- package/esm2022/lib/people/people-cloud.module.mjs +33 -0
- package/esm2022/lib/people/public-api.mjs +21 -0
- package/esm2022/lib/people/services/identity-user.service.mjs +119 -0
- package/esm2022/lib/process/process-cloud.module.mjs +40 -0
- package/esm2022/lib/process/process-filters/components/edit-process-filter/edit-process-filter-cloud.component.mjs +801 -0
- package/esm2022/lib/process/process-filters/components/process-filter-dialog/process-filter-dialog-cloud.component.mjs +58 -0
- package/esm2022/lib/process/process-filters/components/process-filters/process-filters-cloud.component.mjs +292 -0
- package/esm2022/lib/process/process-filters/models/process-filter-cloud.model.mjs +170 -0
- package/esm2022/lib/process/process-filters/process-filters-cloud.module.mjs +44 -0
- package/esm2022/lib/process/process-filters/public-api.mjs +23 -0
- package/esm2022/lib/process/process-filters/services/process-filter-cloud.service.mjs +408 -0
- package/esm2022/lib/process/process-header/components/process-header-cloud.component.mjs +137 -0
- package/esm2022/lib/process/process-header/process-header-cloud.module.mjs +33 -0
- package/esm2022/lib/process/process-header/public-api.mjs +19 -0
- package/esm2022/lib/process/process-list/components/process-list-cloud.component.mjs +593 -0
- package/esm2022/lib/process/process-list/datatable/process-list-datatable-adapter.mjs +31 -0
- package/esm2022/lib/process/process-list/models/perocess-instance-cloud-view.model.mjs +18 -0
- package/esm2022/lib/process/process-list/models/process-cloud-preferences.mjs +24 -0
- package/esm2022/lib/process/process-list/models/process-cloud-preset.model.mjs +37 -0
- package/esm2022/lib/process/process-list/models/process-cloud-query-request.model.mjs +107 -0
- package/esm2022/lib/process/process-list/models/process-list-sorting.model.mjs +40 -0
- package/esm2022/lib/process/process-list/process-list-cloud.module.mjs +45 -0
- package/esm2022/lib/process/process-list/public-api.mjs +25 -0
- package/esm2022/lib/process/process-list/services/process-list-cloud.service.mjs +253 -0
- package/esm2022/lib/process/process-list/services/process-task-list-cloud.service.mjs +109 -0
- package/esm2022/lib/process/public-api.mjs +23 -0
- package/esm2022/lib/process/services/process-cloud.service.mjs +105 -0
- package/esm2022/lib/process/start-process/components/start-process-cloud.component.mjs +465 -0
- package/esm2022/lib/process/start-process/models/process-instance-cloud.model.mjs +18 -0
- package/esm2022/lib/process/start-process/models/process-payload-cloud.model.mjs +26 -0
- package/esm2022/lib/process/start-process/models/process-with-form-payload-cloud.model.mjs +26 -0
- package/esm2022/lib/process/start-process/public-api.mjs +21 -0
- package/esm2022/lib/process/start-process/services/start-process-cloud.service.mjs +125 -0
- package/esm2022/lib/process-services-cloud.module.mjs +103 -0
- package/esm2022/lib/providers.mjs +45 -0
- package/esm2022/lib/rich-text-editor/editorjs-config.mjs +101 -0
- package/esm2022/lib/rich-text-editor/index.mjs +18 -0
- package/esm2022/lib/rich-text-editor/public-api.mjs +19 -0
- package/esm2022/lib/rich-text-editor/rich-text-editor.component.mjs +80 -0
- package/esm2022/lib/rich-text-editor/rich-text-editor.module.mjs +33 -0
- package/esm2022/lib/screen/components/screen-cloud/screen-cloud.component.mjs +186 -0
- package/esm2022/lib/screen/models/screen-cloud.model.mjs +18 -0
- package/esm2022/lib/screen/public-api.mjs +18 -0
- package/esm2022/lib/services/base-cloud.service.mjs +83 -0
- package/esm2022/lib/services/cloud-token.service.mjs +23 -0
- package/esm2022/lib/services/form-fields.interfaces.mjs +55 -0
- package/esm2022/lib/services/local-preference-cloud.service.mjs +122 -0
- package/esm2022/lib/services/notification-cloud.service.mjs +45 -0
- package/esm2022/lib/services/preference-cloud.interface.mjs +18 -0
- package/esm2022/lib/services/public-api.mjs +28 -0
- package/esm2022/lib/services/screen-rendering.service.mjs +30 -0
- package/esm2022/lib/services/task-list-cloud.service.interface.mjs +18 -0
- package/esm2022/lib/services/user-preference-cloud.service.mjs +105 -0
- package/esm2022/lib/services/variable-mapper.sevice.mjs +77 -0
- package/esm2022/lib/services/web-socket.service.mjs +146 -0
- package/esm2022/lib/task/models/start-task-cloud-request.model.mjs +32 -0
- package/esm2022/lib/task/models/task-details-cloud.model.mjs +26 -0
- package/esm2022/lib/task/models/task.model.mjs +23 -0
- package/esm2022/lib/task/public-api.mjs +26 -0
- package/esm2022/lib/task/services/task-cloud.service.mjs +272 -0
- package/esm2022/lib/task/task-cloud.module.mjs +45 -0
- package/esm2022/lib/task/task-filters/components/base-task-filters-cloud.component.mjs +59 -0
- package/esm2022/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.mjs +467 -0
- package/esm2022/lib/task/task-filters/components/edit-task-filters/edit-service-task-filter/edit-service-task-filter-cloud.component.mjs +205 -0
- package/esm2022/lib/task/task-filters/components/edit-task-filters/edit-task-filter/edit-task-filter-cloud.component.mjs +317 -0
- package/esm2022/lib/task/task-filters/components/service-task-filters/service-task-filters-cloud.component.mjs +146 -0
- package/esm2022/lib/task/task-filters/components/task-assignment-filter/task-assignment-filter.component.mjs +142 -0
- package/esm2022/lib/task/task-filters/components/task-filter-dialog/task-filter-dialog-cloud.component.mjs +72 -0
- package/esm2022/lib/task/task-filters/components/task-filters/task-filters-cloud.component.mjs +255 -0
- package/esm2022/lib/task/task-filters/models/filter-cloud.model.mjs +207 -0
- package/esm2022/lib/task/task-filters/public-api.mjs +27 -0
- package/esm2022/lib/task/task-filters/services/service-task-filter-cloud.service.mjs +283 -0
- package/esm2022/lib/task/task-filters/services/task-filter-cloud.service.mjs +392 -0
- package/esm2022/lib/task/task-filters/task-filters-cloud.module.mjs +56 -0
- package/esm2022/lib/task/task-form/components/task-form-cloud/task-form-cloud.component.mjs +199 -0
- package/esm2022/lib/task/task-form/components/user-task-cloud/complete-task/complete-task.directive.mjs +89 -0
- package/esm2022/lib/task/task-form/components/user-task-cloud/user-task-cloud.component.mjs +277 -0
- package/esm2022/lib/task/task-form/components/user-task-cloud-buttons/claim-task/claim-task-cloud.directive.mjs +101 -0
- package/esm2022/lib/task/task-form/components/user-task-cloud-buttons/unclaim-task/unclaim-task-cloud.directive.mjs +87 -0
- package/esm2022/lib/task/task-form/components/user-task-cloud-buttons/user-task-cloud-buttons.component.mjs +78 -0
- package/esm2022/lib/task/task-form/public-api.mjs +21 -0
- package/esm2022/lib/task/task-form/task-form.module.mjs +36 -0
- package/esm2022/lib/task/task-header/components/task-header-cloud.component.mjs +280 -0
- package/esm2022/lib/task/task-header/public-api.mjs +19 -0
- package/esm2022/lib/task/task-header/task-header-cloud.module.mjs +33 -0
- package/esm2022/lib/task/task-list/components/base-task-list-cloud.component.mjs +331 -0
- package/esm2022/lib/task/task-list/components/service-task-list/service-task-list-cloud.component.mjs +115 -0
- package/esm2022/lib/task/task-list/components/task-list/datatable/task-list-datatable-adapter.mjs +31 -0
- package/esm2022/lib/task/task-list/components/task-list/task-list-cloud.component.mjs +389 -0
- package/esm2022/lib/task/task-list/models/service-task-cloud.model.mjs +18 -0
- package/esm2022/lib/task/task-list/models/task-cloud-view.model.mjs +18 -0
- package/esm2022/lib/task/task-list/public-api.mjs +23 -0
- package/esm2022/lib/task/task-list/services/service-task-list-cloud.service.mjs +115 -0
- package/esm2022/lib/task/task-list/services/task-list-cloud.service.mjs +178 -0
- package/esm2022/lib/task/task-list/task-list-cloud.module.mjs +35 -0
- package/esm2022/lib/types.mjs +18 -0
- package/esm2022/public-api.mjs +41 -0
- package/fesm2022/adf-process-services-cloud.mjs +355 -350
- package/fesm2022/adf-process-services-cloud.mjs.map +1 -1
- package/lib/task/task-filters/components/base-task-filters-cloud.component.d.ts +1 -1
- package/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.d.ts +1 -1
- package/lib/task/task-list/components/base-task-list-cloud.component.d.ts +1 -1
- package/package.json +6 -4
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import { ChangeDetectorRef, Component, DestroyRef, EventEmitter, HostListener, Inject, inject, InjectionToken, Input, Optional, Output } from '@angular/core';
|
|
18
|
+
import { forkJoin, of } from 'rxjs';
|
|
19
|
+
import { filter, map, switchMap } from 'rxjs/operators';
|
|
20
|
+
import { ConfirmDialogComponent, FormatSpacePipe, FormBaseComponent, FormEvent, FormModel, FormOutcomeEvent, FormOutcomeModel, FormRendererComponent, FormService, ToolbarComponent, ToolbarDividerComponent, UploadWidgetContentLinkModel, WidgetVisibilityService } from '@alfresco/adf-core';
|
|
21
|
+
import { FormCloudService } from '../services/form-cloud.service';
|
|
22
|
+
import { MatDialog } from '@angular/material/dialog';
|
|
23
|
+
import { v4 as uuidGeneration } from 'uuid';
|
|
24
|
+
import { FormCloudDisplayMode } from '../../services/form-fields.interfaces';
|
|
25
|
+
import { FormCloudSpinnerService } from '../services/spinner/form-cloud-spinner.service';
|
|
26
|
+
import { DisplayModeService } from '../services/display-mode.service';
|
|
27
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
28
|
+
import { CommonModule } from '@angular/common';
|
|
29
|
+
import { TranslatePipe } from '@ngx-translate/core';
|
|
30
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
31
|
+
import { MatCardModule } from '@angular/material/card';
|
|
32
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
33
|
+
import { A11yModule } from '@angular/cdk/a11y';
|
|
34
|
+
import * as i0 from "@angular/core";
|
|
35
|
+
import * as i1 from "@angular/common";
|
|
36
|
+
import * as i2 from "@angular/material/button";
|
|
37
|
+
import * as i3 from "@angular/material/card";
|
|
38
|
+
import * as i4 from "@angular/material/icon";
|
|
39
|
+
import * as i5 from "@angular/cdk/a11y";
|
|
40
|
+
export const FORM_CLOUD_FIELD_VALIDATORS_TOKEN = new InjectionToken('FORM_CLOUD_FIELD_VALIDATORS_TOKEN');
|
|
41
|
+
export class FormCloudComponent extends FormBaseComponent {
|
|
42
|
+
constructor(injectedFieldValidators) {
|
|
43
|
+
super();
|
|
44
|
+
/** App name to fetch corresponding form and values. */
|
|
45
|
+
this.appName = '';
|
|
46
|
+
/** Toggle rendering of the `Complete` button. */
|
|
47
|
+
this.showCompleteButton = false;
|
|
48
|
+
/** Emitted when the form is submitted with the `Save` or custom outcomes. */
|
|
49
|
+
this.formSaved = new EventEmitter();
|
|
50
|
+
/** Emitted when the form is submitted with the `Complete` outcome. */
|
|
51
|
+
this.formCompleted = new EventEmitter();
|
|
52
|
+
/** Emitted when the form is loaded or reloaded. */
|
|
53
|
+
this.formLoaded = new EventEmitter();
|
|
54
|
+
/** Emitted when form values are refreshed due to a data property change. */
|
|
55
|
+
this.formDataRefreshed = new EventEmitter();
|
|
56
|
+
/** Emitted when form content is clicked. */
|
|
57
|
+
this.formContentClicked = new EventEmitter();
|
|
58
|
+
/** Emitted when a display mode configuration is turned on. */
|
|
59
|
+
this.displayModeOn = new EventEmitter();
|
|
60
|
+
/** Emitted when a display mode configuration is turned off. */
|
|
61
|
+
this.displayModeOff = new EventEmitter();
|
|
62
|
+
this.subscriptions = [];
|
|
63
|
+
this.fieldValidators = [];
|
|
64
|
+
this.displayConfiguration = DisplayModeService.DEFAULT_DISPLAY_MODE_CONFIGURATIONS[0];
|
|
65
|
+
this.style = '';
|
|
66
|
+
this.formCloudService = inject(FormCloudService);
|
|
67
|
+
this.formService = inject(FormService);
|
|
68
|
+
this.visibilityService = inject(WidgetVisibilityService);
|
|
69
|
+
this.dialog = inject(MatDialog);
|
|
70
|
+
this.spinnerService = inject(FormCloudSpinnerService);
|
|
71
|
+
this.displayModeService = inject(DisplayModeService);
|
|
72
|
+
this.changeDetector = inject(ChangeDetectorRef);
|
|
73
|
+
this.destroyRef = inject(DestroyRef);
|
|
74
|
+
this.loadInjectedFieldValidators(injectedFieldValidators);
|
|
75
|
+
this.spinnerService.initSpinnerHandling(this.destroyRef);
|
|
76
|
+
this.id = uuidGeneration();
|
|
77
|
+
this.formService.formContentClicked.pipe(takeUntilDestroyed()).subscribe((content) => {
|
|
78
|
+
if (content instanceof UploadWidgetContentLinkModel) {
|
|
79
|
+
this.form.setNodeIdValueForViewersLinkedToUploadWidget(content);
|
|
80
|
+
this.onFormDataRefreshed(this.form);
|
|
81
|
+
this.formService.formDataRefreshed.next(new FormEvent(this.form));
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
this.formContentClicked.emit(content);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
this.formService.updateFormValuesRequested.pipe(takeUntilDestroyed()).subscribe((valuesToSetIfNotPresent) => {
|
|
88
|
+
this.form.addValuesNotPresent(valuesToSetIfNotPresent);
|
|
89
|
+
this.onFormDataRefreshed(this.form);
|
|
90
|
+
});
|
|
91
|
+
this.formService.formFieldValueChanged.pipe(takeUntilDestroyed()).subscribe(() => {
|
|
92
|
+
if (this.disableSaveButton) {
|
|
93
|
+
this.disableSaveButton = false;
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
onKeyDown(event) {
|
|
98
|
+
event.stopPropagation();
|
|
99
|
+
}
|
|
100
|
+
ngOnChanges(changes) {
|
|
101
|
+
const appName = changes['appName'];
|
|
102
|
+
if (appName?.currentValue) {
|
|
103
|
+
if (this.taskId) {
|
|
104
|
+
this.getFormByTaskId(appName.currentValue, this.taskId, this.appVersion);
|
|
105
|
+
}
|
|
106
|
+
else if (this.formId) {
|
|
107
|
+
this.getFormById(appName.currentValue, this.formId, this.appVersion);
|
|
108
|
+
}
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
const formId = changes['formId'];
|
|
112
|
+
if (formId?.currentValue && this.appName) {
|
|
113
|
+
this.getFormById(this.appName, formId.currentValue, this.appVersion);
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const taskId = changes['taskId'];
|
|
117
|
+
if (taskId?.currentValue && this.appName) {
|
|
118
|
+
this.getFormByTaskId(this.appName, taskId.currentValue, this.appVersion);
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
const data = changes['data']?.currentValue;
|
|
122
|
+
if (data?.length > 0) {
|
|
123
|
+
this.refreshFormData();
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
const formRepresentation = changes['form'];
|
|
127
|
+
if (formRepresentation?.currentValue) {
|
|
128
|
+
this.form = formRepresentation.currentValue;
|
|
129
|
+
this.onFormLoaded(this.form);
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
ngOnInit() {
|
|
134
|
+
DisplayModeService.displayMode$
|
|
135
|
+
.pipe(filter((change) => change.id === this.id), takeUntilDestroyed(this.destroyRef))
|
|
136
|
+
.subscribe((displayModeChange) => {
|
|
137
|
+
const oldDisplayMode = this.displayMode;
|
|
138
|
+
this.displayMode = displayModeChange.displayMode;
|
|
139
|
+
const oldDisplayModeConfiguration = this.displayModeService.findConfiguration(oldDisplayMode, this.displayModeConfigurations);
|
|
140
|
+
const newDisplayModeConfiguration = this.displayModeService.findConfiguration(displayModeChange.displayMode, this.displayModeConfigurations);
|
|
141
|
+
if (oldDisplayModeConfiguration?.displayMode !== newDisplayModeConfiguration?.displayMode) {
|
|
142
|
+
if (oldDisplayModeConfiguration) {
|
|
143
|
+
this.displayModeOff.emit(oldDisplayModeConfiguration);
|
|
144
|
+
}
|
|
145
|
+
if (newDisplayModeConfiguration) {
|
|
146
|
+
this.displayModeOn.emit(newDisplayModeConfiguration);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
this.displayConfiguration = newDisplayModeConfiguration;
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Invoked when user clicks form refresh button.
|
|
154
|
+
*/
|
|
155
|
+
onRefreshClicked() {
|
|
156
|
+
this.loadForm();
|
|
157
|
+
}
|
|
158
|
+
loadForm() {
|
|
159
|
+
if (this.appName && this.taskId) {
|
|
160
|
+
this.getFormByTaskId(this.appName, this.taskId, this.appVersion);
|
|
161
|
+
}
|
|
162
|
+
else if (this.appName && this.formId) {
|
|
163
|
+
this.getFormById(this.appName, this.formId, this.appVersion);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
findProcessVariablesByTaskId(appName, taskId) {
|
|
167
|
+
return this.formCloudService.getTask(appName, taskId).pipe(switchMap((task) => {
|
|
168
|
+
if (this.isAProcessTask(task)) {
|
|
169
|
+
return this.formCloudService.getTaskVariables(appName, taskId);
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
return of([]);
|
|
173
|
+
}
|
|
174
|
+
}));
|
|
175
|
+
}
|
|
176
|
+
isAProcessTask(taskRepresentation) {
|
|
177
|
+
return taskRepresentation.processDefinitionId && taskRepresentation.processDefinitionDeploymentId !== 'null';
|
|
178
|
+
}
|
|
179
|
+
getFormByTaskId(appName, taskId, version) {
|
|
180
|
+
return new Promise((resolve) => {
|
|
181
|
+
forkJoin(this.formCloudService.getTaskForm(appName, taskId, version), this.formCloudService.getTaskVariables(appName, taskId))
|
|
182
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
183
|
+
.subscribe((data) => {
|
|
184
|
+
this.formCloudRepresentationJSON = data[0];
|
|
185
|
+
this.formCloudRepresentationJSON.processVariables = data[1];
|
|
186
|
+
this.data = data[1];
|
|
187
|
+
const parsedForm = this.parseForm(this.formCloudRepresentationJSON);
|
|
188
|
+
this.visibilityService.refreshVisibility(parsedForm, this.data);
|
|
189
|
+
parsedForm.validateForm();
|
|
190
|
+
this.form = parsedForm;
|
|
191
|
+
this.form.nodeId = '-my-';
|
|
192
|
+
this.onFormLoaded(this.form);
|
|
193
|
+
resolve(this.form);
|
|
194
|
+
}, (error) => {
|
|
195
|
+
this.handleError(error);
|
|
196
|
+
resolve(null);
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
getFormById(appName, formId, appVersion) {
|
|
201
|
+
this.formCloudService
|
|
202
|
+
.getForm(appName, formId, appVersion)
|
|
203
|
+
.pipe(map((form) => {
|
|
204
|
+
const flattenForm = { ...form.formRepresentation, ...form.formRepresentation.formDefinition };
|
|
205
|
+
delete flattenForm.formDefinition;
|
|
206
|
+
return flattenForm;
|
|
207
|
+
}), takeUntilDestroyed(this.destroyRef))
|
|
208
|
+
.subscribe((form) => {
|
|
209
|
+
this.formCloudRepresentationJSON = form;
|
|
210
|
+
this.formCloudRepresentationJSON.processVariables = this.data || [];
|
|
211
|
+
const parsedForm = this.parseForm(form);
|
|
212
|
+
this.visibilityService.refreshVisibility(parsedForm);
|
|
213
|
+
parsedForm?.validateForm();
|
|
214
|
+
this.form = parsedForm;
|
|
215
|
+
this.form.nodeId = '-my-';
|
|
216
|
+
this.onFormLoaded(this.form);
|
|
217
|
+
}, (error) => {
|
|
218
|
+
this.handleError(error);
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
saveTaskForm() {
|
|
222
|
+
if (this.form && this.appName && this.taskId) {
|
|
223
|
+
this.formCloudService
|
|
224
|
+
.saveTaskForm(this.appName, this.taskId, this.processInstanceId, `${this.form.id}`, this.form.values)
|
|
225
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
226
|
+
.subscribe(() => {
|
|
227
|
+
this.onTaskSaved(this.form);
|
|
228
|
+
}, (error) => this.onTaskSavedError(error));
|
|
229
|
+
this.displayModeService.onSaveTask(this.id, this.displayMode, this.displayModeConfigurations);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
completeTaskForm(outcome) {
|
|
233
|
+
if (this.form?.confirmMessage?.show === true) {
|
|
234
|
+
const dialogRef = this.dialog.open(ConfirmDialogComponent, {
|
|
235
|
+
data: {
|
|
236
|
+
message: this.form.confirmMessage.message
|
|
237
|
+
},
|
|
238
|
+
minWidth: '450px'
|
|
239
|
+
});
|
|
240
|
+
dialogRef.afterClosed().subscribe((result) => {
|
|
241
|
+
if (result === true) {
|
|
242
|
+
this.completeForm(outcome);
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
this.completeForm(outcome);
|
|
248
|
+
}
|
|
249
|
+
this.displayModeService.onCompleteTask(this.id, this.displayMode, this.displayModeConfigurations);
|
|
250
|
+
}
|
|
251
|
+
completeForm(outcome) {
|
|
252
|
+
if (this.form && this.appName && this.taskId) {
|
|
253
|
+
this.formCloudService
|
|
254
|
+
.completeTaskForm(this.appName, this.taskId, this.processInstanceId, `${this.form.id}`, this.form.values, outcome, this.appVersion)
|
|
255
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
256
|
+
.subscribe(() => {
|
|
257
|
+
this.onTaskCompleted(this.form);
|
|
258
|
+
}, (error) => this.onTaskCompletedError(error));
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
parseForm(formCloudRepresentationJSON) {
|
|
262
|
+
if (formCloudRepresentationJSON) {
|
|
263
|
+
const formValues = {};
|
|
264
|
+
(this.data || []).forEach((variable) => {
|
|
265
|
+
formValues[variable.name] = variable.value;
|
|
266
|
+
});
|
|
267
|
+
const form = new FormModel(formCloudRepresentationJSON, formValues, this.readOnly, this.formService, undefined, this.fieldValidators);
|
|
268
|
+
if (!form) {
|
|
269
|
+
form.outcomes = this.getFormDefinitionOutcomes(form);
|
|
270
|
+
}
|
|
271
|
+
return form;
|
|
272
|
+
}
|
|
273
|
+
return null;
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Get custom set of outcomes for a Form Definition.
|
|
277
|
+
*
|
|
278
|
+
* @param form Form definition model.
|
|
279
|
+
* @returns list of form outcomes
|
|
280
|
+
*/
|
|
281
|
+
getFormDefinitionOutcomes(form) {
|
|
282
|
+
return [new FormOutcomeModel(form, { id: '$save', name: FormOutcomeModel.SAVE_ACTION, isSystem: true })];
|
|
283
|
+
}
|
|
284
|
+
checkVisibility(field) {
|
|
285
|
+
if (field?.form) {
|
|
286
|
+
this.visibilityService.refreshVisibility(field.form);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
refreshFormData() {
|
|
290
|
+
this.form = this.parseForm(this.formCloudRepresentationJSON);
|
|
291
|
+
if (this.form) {
|
|
292
|
+
this.onFormLoaded(this.form);
|
|
293
|
+
this.onFormDataRefreshed(this.form);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
onFormLoaded(form) {
|
|
297
|
+
if (form) {
|
|
298
|
+
this.displayModeConfigurations = this.displayModeService.getDisplayModeConfigurations(this.displayModeConfigurations);
|
|
299
|
+
this.displayMode = this.displayModeService.switchToDisplayMode(this.id, this.form.json.displayMode, this.displayMode, this.displayModeConfigurations);
|
|
300
|
+
this.displayConfiguration = this.displayModeService.findConfiguration(this.displayMode, this.displayModeConfigurations);
|
|
301
|
+
this.displayModeOn.emit(this.displayConfiguration);
|
|
302
|
+
}
|
|
303
|
+
this.changeDetector.detectChanges();
|
|
304
|
+
this.formLoaded.emit(form);
|
|
305
|
+
}
|
|
306
|
+
onFormDataRefreshed(form) {
|
|
307
|
+
this.formDataRefreshed.emit(form);
|
|
308
|
+
}
|
|
309
|
+
onTaskSaved(form) {
|
|
310
|
+
this.formSaved.emit(form);
|
|
311
|
+
}
|
|
312
|
+
onTaskSavedError(error) {
|
|
313
|
+
this.handleError(error);
|
|
314
|
+
}
|
|
315
|
+
onTaskCompleted(form) {
|
|
316
|
+
this.formCompleted.emit(form);
|
|
317
|
+
}
|
|
318
|
+
onTaskCompletedError(error) {
|
|
319
|
+
this.handleError(error);
|
|
320
|
+
}
|
|
321
|
+
onExecuteOutcome(outcome) {
|
|
322
|
+
const args = new FormOutcomeEvent(outcome);
|
|
323
|
+
if (args.defaultPrevented) {
|
|
324
|
+
return false;
|
|
325
|
+
}
|
|
326
|
+
this.executeOutcome.emit(args);
|
|
327
|
+
return !args.defaultPrevented;
|
|
328
|
+
}
|
|
329
|
+
storeFormAsMetadata() { }
|
|
330
|
+
switchToDisplayMode(newDisplayMode) {
|
|
331
|
+
this.displayModeService.switchToDisplayMode(this.id, FormCloudDisplayMode[newDisplayMode], this.displayMode, this.displayModeConfigurations);
|
|
332
|
+
}
|
|
333
|
+
findDisplayConfiguration(displayMode) {
|
|
334
|
+
return this.displayModeService.findConfiguration(FormCloudDisplayMode[displayMode], this.displayModeConfigurations);
|
|
335
|
+
}
|
|
336
|
+
loadInjectedFieldValidators(injectedFieldValidators) {
|
|
337
|
+
if (injectedFieldValidators && injectedFieldValidators?.length) {
|
|
338
|
+
this.fieldValidators = [...this.fieldValidators, ...injectedFieldValidators];
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormCloudComponent, deps: [{ token: FORM_CLOUD_FIELD_VALIDATORS_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
342
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormCloudComponent, isStandalone: true, selector: "adf-cloud-form", inputs: { appName: "appName", appVersion: "appVersion", formId: "formId", processInstanceId: "processInstanceId", taskId: "taskId", data: "data", displayModeConfigurations: "displayModeConfigurations", showCompleteButton: "showCompleteButton" }, outputs: { formSaved: "formSaved", formCompleted: "formCompleted", formLoaded: "formLoaded", formDataRefreshed: "formDataRefreshed", formContentClicked: "formContentClicked", displayModeOn: "displayModeOn", displayModeOff: "displayModeOff" }, host: { listeners: { "keydown": "onKeyDown($event)" } }, providers: [FormCloudSpinnerService], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"!hasForm()\">\n <ng-content select=\"[empty-form]\" />\n</div>\n\n<div\n *ngIf=\"hasForm()\"\n class=\"adf-cloud-form-container adf-cloud-form-{{ displayConfiguration?.options?.fullscreen ? 'fullscreen' : 'inline' }}-container\"\n [style]=\"formStyle\"\n>\n <div class=\"adf-cloud-form-content\" [cdkTrapFocus]=\"displayConfiguration?.options?.trapFocus\" cdkTrapFocusAutoCapture>\n <adf-toolbar class=\"adf-cloud-form-toolbar\" *ngIf=\"displayConfiguration?.options?.displayToolbar\">\n <div class=\"adf-cloud-form__form-title\">\n <span class=\"adf-cloud-form__display-name\" [title]=\"form.taskName\">\n {{ form.taskName }}\n <ng-container *ngIf=\"!form.taskName\">\n {{ 'FORM.FORM_RENDERER.NAMELESS_TASK' | translate }}\n </ng-container>\n </span>\n </div>\n\n <adf-toolbar-divider *ngIf=\"displayConfiguration?.options?.displayCloseButton\" />\n <button\n *ngIf=\"displayConfiguration?.options?.displayCloseButton\"\n class=\"adf-cloud-form-close-button\"\n data-automation-id=\"adf-toolbar-right-back\"\n [attr.aria-label]=\"'ADF_VIEWER.ACTIONS.CLOSE' | translate\"\n [attr.data-automation-id]=\"'adf-cloud-form-close-button'\"\n [title]=\"'ADF_VIEWER.ACTIONS.CLOSE' | translate\"\n mat-icon-button\n title=\"{{ 'ADF_VIEWER.ACTIONS.CLOSE' | translate }}\"\n (click)=\"switchToDisplayMode()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </adf-toolbar>\n\n <mat-card\n appearance=\"outlined\"\n class=\"adf-cloud-form-content-card\"\n [class.adf-cloud-form-content-card-fullscreen]=\"displayMode === 'fullScreen'\"\n >\n <div class=\"adf-cloud-form-content-card-container\">\n <mat-card-header *ngIf=\"showTitle || showRefreshButton || showValidationIcon\">\n <mat-card-title>\n <h4>\n <div *ngIf=\"showValidationIcon\" class=\"adf-form-validation-button\">\n <i id=\"adf-valid-form-icon\" class=\"material-icons\" *ngIf=\"form.isValid; else no_valid_form\">check_circle</i>\n <ng-template #no_valid_form>\n <i id=\"adf-invalid-form-icon\" class=\"material-icons adf-invalid-color\">error</i>\n </ng-template>\n </div>\n <div\n *ngIf=\"!displayConfiguration?.options?.fullscreen && findDisplayConfiguration('fullScreen')\"\n class=\"adf-cloud-form-fullscreen-button\"\n >\n <button\n mat-icon-button\n (click)=\"switchToDisplayMode('fullScreen')\"\n [attr.data-automation-id]=\"'adf-cloud-form-fullscreen-button'\"\n >\n <mat-icon>fullscreen</mat-icon>\n </button>\n </div>\n <div *ngIf=\"showRefreshButton\" class=\"adf-cloud-form-reload-button\" [title]=\"'ADF_VIEWER.ACTIONS.FULLSCREEN' | translate\">\n <button mat-icon-button (click)=\"onRefreshClicked()\" [attr.aria-label]=\"'ADF_VIEWER.ACTIONS.FULLSCREEN' | translate\">\n <mat-icon>refresh</mat-icon>\n </button>\n </div>\n <span *ngIf=\"isTitleEnabled()\" class=\"adf-cloud-form-title\" [title]=\"form.taskName\"\n >{{ form.taskName }}\n <ng-container *ngIf=\"!form.taskName\">\n {{ 'FORM.FORM_RENDERER.NAMELESS_TASK' | translate }}\n </ng-container>\n </span>\n </h4>\n </mat-card-title>\n </mat-card-header>\n <mat-card-content class=\"adf-form-container-card-content\">\n <adf-form-renderer [formDefinition]=\"form\" [readOnly]=\"readOnly\" />\n </mat-card-content>\n <mat-card-actions *ngIf=\"form.hasOutcomes()\" class=\"adf-cloud-form-content-card-actions\" align=\"end\">\n <ng-content select=\"adf-cloud-form-custom-outcomes\" />\n <ng-container *ngFor=\"let outcome of form.outcomes\">\n <button\n *ngIf=\"outcome.isVisible\"\n [id]=\"'adf-form-' + outcome.name | formatSpace\"\n [color]=\"getColorForOutcome(outcome.name)\"\n mat-button\n [disabled]=\"!isOutcomeButtonEnabled(outcome)\"\n [class.adf-form-hide-button]=\"!isOutcomeButtonVisible(outcome, form.readOnly)\"\n class=\"adf-cloud-form-custom-outcome-button\"\n (click)=\"onOutcomeClicked(outcome)\"\n >\n {{ outcome.name | translate | uppercase }}\n </button>\n </ng-container>\n </mat-card-actions>\n </div>\n </mat-card>\n </div>\n</div>\n", styles: [".adf-full-screen,.adf-cloud-form-inline-container,.adf-cloud-form-container .adf-cloud-form-content{width:100%;height:100%;background-color:var(--adf-theme-background-card-color)}.adf-cloud-form-container .adf-cloud-form-content{flex:1;flex-direction:column;display:flex;position:relative}.adf-cloud-form-fullscreen-container .adf-cloud-form-content{position:fixed;top:0;left:0;z-index:100000}.adf-cloud-form-toolbar .mat-toolbar{background-color:var(--adf-theme-background-card-color-087)}.adf-cloud-form-fullscreen-button{position:absolute;right:70px;top:30px}.adf-cloud-form__display-name{font-size:var(--theme-subheading-2-font-size);opacity:.87;line-height:1.5;letter-spacing:-.4px;font-weight:400;font-style:normal;font-stretch:normal;max-width:400px;text-overflow:ellipsis;overflow:hidden;display:inline-block;vertical-align:middle;color:var(--adf-theme-foreground-text-color)}.adf-cloud-form__form-title{text-align:center;flex:1 1 auto}.adf-cloud-form-content-card{padding-bottom:2em;overflow-y:auto;position:static;height:70%}.adf-cloud-form-content-card-fullscreen{padding:0;height:100%;width:100%;position:relative}.adf-cloud-form-content-card-fullscreen-container{display:flex;flex-direction:column;height:100%}.adf-cloud-form-content-card-fullscreen-container .mat-mdc-card-content{height:100%;overflow:hidden auto}.adf-cloud-form-content-card-container .adf-form-container-card-content{padding-left:1%;padding-right:1%}.adf-cloud-form-sidebars{display:flex;flex:1 1 auto}.adf-cloud-form-sidebars adf-viewer-render{order:1;flex:1 1 auto;display:flex}.adf-cloud-form .adf-label{white-space:normal}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: FormatSpacePipe, name: "formatSpace" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i3.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i3.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i3.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i3.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "component", type: FormRendererComponent, selector: "adf-form-renderer", inputs: ["formDefinition", "readOnly"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: ToolbarDividerComponent, selector: "adf-toolbar-divider" }, { kind: "component", type: ToolbarComponent, selector: "adf-toolbar", inputs: ["title", "color"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i5.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }] }); }
|
|
343
|
+
}
|
|
344
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormCloudComponent, decorators: [{
|
|
345
|
+
type: Component,
|
|
346
|
+
args: [{ selector: 'adf-cloud-form', standalone: true, imports: [
|
|
347
|
+
CommonModule,
|
|
348
|
+
TranslatePipe,
|
|
349
|
+
FormatSpacePipe,
|
|
350
|
+
MatButtonModule,
|
|
351
|
+
MatCardModule,
|
|
352
|
+
FormRendererComponent,
|
|
353
|
+
MatIconModule,
|
|
354
|
+
ToolbarDividerComponent,
|
|
355
|
+
ToolbarComponent,
|
|
356
|
+
A11yModule
|
|
357
|
+
], providers: [FormCloudSpinnerService], template: "<div *ngIf=\"!hasForm()\">\n <ng-content select=\"[empty-form]\" />\n</div>\n\n<div\n *ngIf=\"hasForm()\"\n class=\"adf-cloud-form-container adf-cloud-form-{{ displayConfiguration?.options?.fullscreen ? 'fullscreen' : 'inline' }}-container\"\n [style]=\"formStyle\"\n>\n <div class=\"adf-cloud-form-content\" [cdkTrapFocus]=\"displayConfiguration?.options?.trapFocus\" cdkTrapFocusAutoCapture>\n <adf-toolbar class=\"adf-cloud-form-toolbar\" *ngIf=\"displayConfiguration?.options?.displayToolbar\">\n <div class=\"adf-cloud-form__form-title\">\n <span class=\"adf-cloud-form__display-name\" [title]=\"form.taskName\">\n {{ form.taskName }}\n <ng-container *ngIf=\"!form.taskName\">\n {{ 'FORM.FORM_RENDERER.NAMELESS_TASK' | translate }}\n </ng-container>\n </span>\n </div>\n\n <adf-toolbar-divider *ngIf=\"displayConfiguration?.options?.displayCloseButton\" />\n <button\n *ngIf=\"displayConfiguration?.options?.displayCloseButton\"\n class=\"adf-cloud-form-close-button\"\n data-automation-id=\"adf-toolbar-right-back\"\n [attr.aria-label]=\"'ADF_VIEWER.ACTIONS.CLOSE' | translate\"\n [attr.data-automation-id]=\"'adf-cloud-form-close-button'\"\n [title]=\"'ADF_VIEWER.ACTIONS.CLOSE' | translate\"\n mat-icon-button\n title=\"{{ 'ADF_VIEWER.ACTIONS.CLOSE' | translate }}\"\n (click)=\"switchToDisplayMode()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </adf-toolbar>\n\n <mat-card\n appearance=\"outlined\"\n class=\"adf-cloud-form-content-card\"\n [class.adf-cloud-form-content-card-fullscreen]=\"displayMode === 'fullScreen'\"\n >\n <div class=\"adf-cloud-form-content-card-container\">\n <mat-card-header *ngIf=\"showTitle || showRefreshButton || showValidationIcon\">\n <mat-card-title>\n <h4>\n <div *ngIf=\"showValidationIcon\" class=\"adf-form-validation-button\">\n <i id=\"adf-valid-form-icon\" class=\"material-icons\" *ngIf=\"form.isValid; else no_valid_form\">check_circle</i>\n <ng-template #no_valid_form>\n <i id=\"adf-invalid-form-icon\" class=\"material-icons adf-invalid-color\">error</i>\n </ng-template>\n </div>\n <div\n *ngIf=\"!displayConfiguration?.options?.fullscreen && findDisplayConfiguration('fullScreen')\"\n class=\"adf-cloud-form-fullscreen-button\"\n >\n <button\n mat-icon-button\n (click)=\"switchToDisplayMode('fullScreen')\"\n [attr.data-automation-id]=\"'adf-cloud-form-fullscreen-button'\"\n >\n <mat-icon>fullscreen</mat-icon>\n </button>\n </div>\n <div *ngIf=\"showRefreshButton\" class=\"adf-cloud-form-reload-button\" [title]=\"'ADF_VIEWER.ACTIONS.FULLSCREEN' | translate\">\n <button mat-icon-button (click)=\"onRefreshClicked()\" [attr.aria-label]=\"'ADF_VIEWER.ACTIONS.FULLSCREEN' | translate\">\n <mat-icon>refresh</mat-icon>\n </button>\n </div>\n <span *ngIf=\"isTitleEnabled()\" class=\"adf-cloud-form-title\" [title]=\"form.taskName\"\n >{{ form.taskName }}\n <ng-container *ngIf=\"!form.taskName\">\n {{ 'FORM.FORM_RENDERER.NAMELESS_TASK' | translate }}\n </ng-container>\n </span>\n </h4>\n </mat-card-title>\n </mat-card-header>\n <mat-card-content class=\"adf-form-container-card-content\">\n <adf-form-renderer [formDefinition]=\"form\" [readOnly]=\"readOnly\" />\n </mat-card-content>\n <mat-card-actions *ngIf=\"form.hasOutcomes()\" class=\"adf-cloud-form-content-card-actions\" align=\"end\">\n <ng-content select=\"adf-cloud-form-custom-outcomes\" />\n <ng-container *ngFor=\"let outcome of form.outcomes\">\n <button\n *ngIf=\"outcome.isVisible\"\n [id]=\"'adf-form-' + outcome.name | formatSpace\"\n [color]=\"getColorForOutcome(outcome.name)\"\n mat-button\n [disabled]=\"!isOutcomeButtonEnabled(outcome)\"\n [class.adf-form-hide-button]=\"!isOutcomeButtonVisible(outcome, form.readOnly)\"\n class=\"adf-cloud-form-custom-outcome-button\"\n (click)=\"onOutcomeClicked(outcome)\"\n >\n {{ outcome.name | translate | uppercase }}\n </button>\n </ng-container>\n </mat-card-actions>\n </div>\n </mat-card>\n </div>\n</div>\n", styles: [".adf-full-screen,.adf-cloud-form-inline-container,.adf-cloud-form-container .adf-cloud-form-content{width:100%;height:100%;background-color:var(--adf-theme-background-card-color)}.adf-cloud-form-container .adf-cloud-form-content{flex:1;flex-direction:column;display:flex;position:relative}.adf-cloud-form-fullscreen-container .adf-cloud-form-content{position:fixed;top:0;left:0;z-index:100000}.adf-cloud-form-toolbar .mat-toolbar{background-color:var(--adf-theme-background-card-color-087)}.adf-cloud-form-fullscreen-button{position:absolute;right:70px;top:30px}.adf-cloud-form__display-name{font-size:var(--theme-subheading-2-font-size);opacity:.87;line-height:1.5;letter-spacing:-.4px;font-weight:400;font-style:normal;font-stretch:normal;max-width:400px;text-overflow:ellipsis;overflow:hidden;display:inline-block;vertical-align:middle;color:var(--adf-theme-foreground-text-color)}.adf-cloud-form__form-title{text-align:center;flex:1 1 auto}.adf-cloud-form-content-card{padding-bottom:2em;overflow-y:auto;position:static;height:70%}.adf-cloud-form-content-card-fullscreen{padding:0;height:100%;width:100%;position:relative}.adf-cloud-form-content-card-fullscreen-container{display:flex;flex-direction:column;height:100%}.adf-cloud-form-content-card-fullscreen-container .mat-mdc-card-content{height:100%;overflow:hidden auto}.adf-cloud-form-content-card-container .adf-form-container-card-content{padding-left:1%;padding-right:1%}.adf-cloud-form-sidebars{display:flex;flex:1 1 auto}.adf-cloud-form-sidebars adf-viewer-render{order:1;flex:1 1 auto;display:flex}.adf-cloud-form .adf-label{white-space:normal}\n"] }]
|
|
358
|
+
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
359
|
+
type: Optional
|
|
360
|
+
}, {
|
|
361
|
+
type: Inject,
|
|
362
|
+
args: [FORM_CLOUD_FIELD_VALIDATORS_TOKEN]
|
|
363
|
+
}] }], propDecorators: { appName: [{
|
|
364
|
+
type: Input
|
|
365
|
+
}], appVersion: [{
|
|
366
|
+
type: Input
|
|
367
|
+
}], formId: [{
|
|
368
|
+
type: Input
|
|
369
|
+
}], processInstanceId: [{
|
|
370
|
+
type: Input
|
|
371
|
+
}], taskId: [{
|
|
372
|
+
type: Input
|
|
373
|
+
}], data: [{
|
|
374
|
+
type: Input
|
|
375
|
+
}], displayModeConfigurations: [{
|
|
376
|
+
type: Input
|
|
377
|
+
}], showCompleteButton: [{
|
|
378
|
+
type: Input
|
|
379
|
+
}], formSaved: [{
|
|
380
|
+
type: Output
|
|
381
|
+
}], formCompleted: [{
|
|
382
|
+
type: Output
|
|
383
|
+
}], formLoaded: [{
|
|
384
|
+
type: Output
|
|
385
|
+
}], formDataRefreshed: [{
|
|
386
|
+
type: Output
|
|
387
|
+
}], formContentClicked: [{
|
|
388
|
+
type: Output
|
|
389
|
+
}], displayModeOn: [{
|
|
390
|
+
type: Output
|
|
391
|
+
}], displayModeOff: [{
|
|
392
|
+
type: Output
|
|
393
|
+
}], onKeyDown: [{
|
|
394
|
+
type: HostListener,
|
|
395
|
+
args: ['keydown', ['$event']]
|
|
396
|
+
}] } });
|
|
397
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jbG91ZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHJvY2Vzcy1zZXJ2aWNlcy1jbG91ZC9zcmMvbGliL2Zvcm0vY29tcG9uZW50cy9mb3JtLWNsb3VkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL2Zvcm0tY2xvdWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUNILGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBRVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzlELE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFDSCxzQkFBc0IsRUFFdEIsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixTQUFTLEVBR1QsU0FBUyxFQUNULGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLFdBQVcsRUFFWCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLDRCQUE0QixFQUM1Qix1QkFBdUIsRUFDMUIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUdsRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLEVBQUUsSUFBSSxjQUFjLEVBQUUsTUFBTSxNQUFN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RGpCLEtBQUs7Z0JBS04sU0FBUztzQkFEUixNQUFNO2dCQUtQLGFBQWE7c0JBRFosTUFBTTtnQkFLUCxVQUFVO3NCQURULE1BQU07Z0JBS1AsaUJBQWlCO3NCQURoQixNQUFNO2dCQUtQLGtCQUFrQjtzQkFEakIsTUFBTTtnQkFLUCxhQUFhO3NCQURaLE1BQU07Z0JBS1AsY0FBYztzQkFEYixNQUFNO2dCQXFEUCxTQUFTO3NCQURSLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBEZXN0cm95UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0LFxuICAgIGluamVjdCxcbiAgICBJbmplY3Rpb25Ub2tlbixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZm9ya0pvaW4sIE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICAgIENvbmZpcm1EaWFsb2dDb21wb25lbnQsXG4gICAgQ29udGVudExpbmtNb2RlbCxcbiAgICBGb3JtYXRTcGFjZVBpcGUsXG4gICAgRm9ybUJhc2VDb21wb25lbnQsXG4gICAgRm9ybUV2ZW50LFxuICAgIEZvcm1GaWVsZE1vZGVsLFxuICAgIEZvcm1GaWVsZFZhbGlkYXRvcixcbiAgICBGb3JtTW9kZWwsXG4gICAgRm9ybU91dGNvbWVFdmVudCxcbiAgICBGb3JtT3V0Y29tZU1vZGVsLFxuICAgIEZvcm1SZW5kZXJlckNvbXBvbmVudCxcbiAgICBGb3JtU2VydmljZSxcbiAgICBGb3JtVmFsdWVzLFxuICAgIFRvb2xiYXJDb21wb25lbnQsXG4gICAgVG9vbGJhckRpdmlkZXJDb21wb25lbnQsXG4gICAgVXBsb2FkV2lkZ2V0Q29udGVudExpbmtNb2RlbCxcbiAgICBXaWRnZXRWaXNpYmlsaXR5U2VydmljZVxufSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgRm9ybUNsb3VkU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Zvcm0tY2xvdWQuc2VydmljZSc7XG5pbXBvcnQgeyBUYXNrVmFyaWFibGVDbG91ZCB9IGZyb20gJy4uL21vZGVscy90YXNrLXZhcmlhYmxlLWNsb3VkLm1vZGVsJztcbmltcG9ydCB7IFRhc2tEZXRhaWxzQ2xvdWRNb2RlbCB9IGZyb20gJy4uLy4uL3Rhc2svbW9kZWxzL3Rhc2stZGV0YWlscy1jbG91ZC5tb2RlbCc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZEdlbmVyYXRpb24gfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IEZvcm1DbG91ZERpc3BsYXlNb2RlLCBGb3JtQ2xvdWREaXNwbGF5TW9kZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mb3JtLWZpZWxkcy5pbnRlcmZhY2VzJztcbmltcG9ydCB7IEZvcm1DbG91ZFNwaW5uZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc3Bpbm5lci9mb3JtLWNsb3VkLXNwaW5uZXIuc2VydmljZSc7XG5pbXBvcnQgeyBEaXNwbGF5TW9kZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9kaXNwbGF5LW1vZGUuc2VydmljZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdENhcmRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jYXJkJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IEExMXlNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5cbmV4cG9ydCBjb25zdCBGT1JNX0NMT1VEX0ZJRUxEX1ZBTElEQVRPUlNfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW48Rm9ybUZpZWxkVmFsaWRhdG9yW10+KCdGT1JNX0NMT1VEX0ZJRUxEX1ZBTElEQVRPUlNfVE9LRU4nKTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhZGYtY2xvdWQtZm9ybScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgVHJhbnNsYXRlUGlwZSxcbiAgICAgICAgRm9ybWF0U3BhY2VQaXBlLFxuICAgICAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgICAgIE1hdENhcmRNb2R1bGUsXG4gICAgICAgIEZvcm1SZW5kZXJlckNvbXBvbmVudCxcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcbiAgICAgICAgVG9vbGJhckRpdmlkZXJDb21wb25lbnQsXG4gICAgICAgIFRvb2xiYXJDb21wb25lbnQsXG4gICAgICAgIEExMXlNb2R1bGVcbiAgICBdLFxuICAgIHByb3ZpZGVyczogW0Zvcm1DbG91ZFNwaW5uZXJTZXJ2aWNlXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1jbG91ZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZm9ybS1jbG91ZC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1DbG91ZENvbXBvbmVudCBleHRlbmRzIEZvcm1CYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQge1xuICAgIC8qKiBBcHAgbmFtZSB0byBmZXRjaCBjb3JyZXNwb25kaW5nIGZvcm0gYW5kIHZhbHVlcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFwcE5hbWU6IHN0cmluZyA9ICcnO1xuXG4gICAgLyoqIFRoZSBhcHBsaWNhdGlvbiB2ZXJzaW9uIHRvIHVzZSB3aGVuIGZldGNoaW5nIGRhdGEgKi9cbiAgICBASW5wdXQoKVxuICAgIGFwcFZlcnNpb24/OiBudW1iZXI7XG5cbiAgICAvKiogVGFzayBpZCB0byBmZXRjaCBjb3JyZXNwb25kaW5nIGZvcm0gYW5kIHZhbHVlcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGZvcm1JZDogc3RyaW5nO1xuXG4gICAgLyoqIFByb2Nlc3NJbnN0YW5jZUlkIGlkIHRvIGZldGNoIGNvcnJlc3BvbmRpbmcgZm9ybSBhbmQgdmFsdWVzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHJvY2Vzc0luc3RhbmNlSWQ6IHN0cmluZztcblxuICAgIC8qKiBUYXNrIGlkIHRvIGZldGNoIGNvcnJlc3BvbmRpbmcgZm9ybSBhbmQgdmFsdWVzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGFza0lkOiBzdHJpbmc7XG5cbiAgICAvKiogQ3VzdG9tIGZvcm0gdmFsdWVzIG1hcCB0byBiZSB1c2VkIHdpdGggdGhlIHJlbmRlcmVkIGZvcm0uICovXG4gICAgQElucHV0KClcbiAgICBkYXRhOiBUYXNrVmFyaWFibGVDbG91ZFtdO1xuXG4gICAgLyoqIFRoZSBhdmFpbGFibGUgZGlzcGxheSBjb25maWd1cmF0aW9ucyBmb3IgdGhlIGZvcm0gKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlNb2RlQ29uZmlndXJhdGlvbnM6IEZvcm1DbG91ZERpc3BsYXlNb2RlQ29uZmlndXJhdGlvbltdO1xuXG4gICAgLyoqIFRvZ2dsZSByZW5kZXJpbmcgb2YgdGhlIGBDb21wbGV0ZWAgYnV0dG9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0NvbXBsZXRlQnV0dG9uID0gZmFsc2U7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBmb3JtIGlzIHN1Ym1pdHRlZCB3aXRoIHRoZSBgU2F2ZWAgb3IgY3VzdG9tIG91dGNvbWVzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGZvcm1TYXZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9ybU1vZGVsPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgZm9ybSBpcyBzdWJtaXR0ZWQgd2l0aCB0aGUgYENvbXBsZXRlYCBvdXRjb21lLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGZvcm1Db21wbGV0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm1Nb2RlbD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIGZvcm0gaXMgbG9hZGVkIG9yIHJlbG9hZGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGZvcm1Mb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm1Nb2RlbD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gZm9ybSB2YWx1ZXMgYXJlIHJlZnJlc2hlZCBkdWUgdG8gYSBkYXRhIHByb3BlcnR5IGNoYW5nZS4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBmb3JtRGF0YVJlZnJlc2hlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9ybU1vZGVsPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBmb3JtIGNvbnRlbnQgaXMgY2xpY2tlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBmb3JtQ29udGVudENsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPENvbnRlbnRMaW5rTW9kZWw+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGEgZGlzcGxheSBtb2RlIGNvbmZpZ3VyYXRpb24gaXMgdHVybmVkIG9uLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGRpc3BsYXlNb2RlT24gPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm1DbG91ZERpc3BsYXlNb2RlQ29uZmlndXJhdGlvbj4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gYSBkaXNwbGF5IG1vZGUgY29uZmlndXJhdGlvbiBpcyB0dXJuZWQgb2ZmLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGRpc3BsYXlNb2RlT2ZmID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtQ2xvdWREaXNwbGF5TW9kZUNvbmZpZ3VyYXRpb24+KCk7XG5cbiAgICBwcm90ZWN0ZWQgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgICBub2RlSWQ6IHN0cmluZztcbiAgICBmb3JtQ2xvdWRSZXByZXNlbnRhdGlvbkpTT046IGFueTtcbiAgICBmaWVsZFZhbGlkYXRvcnM6IEZvcm1GaWVsZFZhbGlkYXRvcltdID0gW107XG5cbiAgICByZWFkb25seSBpZDogc3RyaW5nO1xuICAgIGRpc3BsYXlNb2RlOiBzdHJpbmc7XG4gICAgZGlzcGxheUNvbmZpZ3VyYXRpb246IEZvcm1DbG91ZERpc3BsYXlNb2RlQ29uZmlndXJhdGlvbiA9IERpc3BsYXlNb2RlU2VydmljZS5ERUZBVUxUX0RJU1BMQVlfTU9ERV9DT05GSUdVUkFUSU9OU1swXTtcbiAgICBzdHlsZTogc3RyaW5nID0gJyc7XG5cbiAgICBwcm90ZWN0ZWQgZm9ybUNsb3VkU2VydmljZSA9IGluamVjdChGb3JtQ2xvdWRTZXJ2aWNlKTtcbiAgICBwcm90ZWN0ZWQgZm9ybVNlcnZpY2UgPSBpbmplY3QoRm9ybVNlcnZpY2UpO1xuICAgIHByb3RlY3RlZCB2aXNpYmlsaXR5U2VydmljZSA9IGluamVjdChXaWRnZXRWaXNpYmlsaXR5U2VydmljZSk7XG4gICAgcHJvdGVjdGVkIGRpYWxvZyA9IGluamVjdChNYXREaWFsb2cpO1xuICAgIHByb3RlY3RlZCBzcGlubmVyU2VydmljZSA9IGluamVjdChGb3JtQ2xvdWRTcGlubmVyU2VydmljZSk7XG4gICAgcHJvdGVjdGVkIGRpc3BsYXlNb2RlU2VydmljZSA9IGluamVjdChEaXNwbGF5TW9kZVNlcnZpY2UpO1xuICAgIHByb3RlY3RlZCBjaGFuZ2VEZXRlY3RvciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KEZPUk1fQ0xPVURfRklFTERfVkFMSURBVE9SU19UT0tFTikgaW5qZWN0ZWRGaWVsZFZhbGlkYXRvcnM/OiBGb3JtRmllbGRWYWxpZGF0b3JbXSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmxvYWRJbmplY3RlZEZpZWxkVmFsaWRhdG9ycyhpbmplY3RlZEZpZWxkVmFsaWRhdG9ycyk7XG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaW5pdFNwaW5uZXJIYW5kbGluZyh0aGlzLmRlc3Ryb3lSZWYpO1xuXG4gICAgICAgIHRoaXMuaWQgPSB1dWlkR2VuZXJhdGlvbigpO1xuXG4gICAgICAgIHRoaXMuZm9ybVNlcnZpY2UuZm9ybUNvbnRlbnRDbGlja2VkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgoY29udGVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBVcGxvYWRXaWRnZXRDb250ZW50TGlua01vZGVsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLnNldE5vZGVJZFZhbHVlRm9yVmlld2Vyc0xpbmtlZFRvVXBsb2FkV2lkZ2V0KGNvbnRlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMub25Gb3JtRGF0YVJlZnJlc2hlZCh0aGlzLmZvcm0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybVNlcnZpY2UuZm9ybURhdGFSZWZyZXNoZWQubmV4dChuZXcgRm9ybUV2ZW50KHRoaXMuZm9ybSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db250ZW50Q2xpY2tlZC5lbWl0KGNvbnRlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlLnVwZGF0ZUZvcm1WYWx1ZXNSZXF1ZXN0ZWQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKCh2YWx1ZXNUb1NldElmTm90UHJlc2VudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb3JtLmFkZFZhbHVlc05vdFByZXNlbnQodmFsdWVzVG9TZXRJZk5vdFByZXNlbnQpO1xuICAgICAgICAgICAgdGhpcy5vbkZvcm1EYXRhUmVmcmVzaGVkKHRoaXMuZm9ybSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZm9ybVNlcnZpY2UuZm9ybUZpZWxkVmFsdWVDaGFuZ2VkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlU2F2ZUJ1dHRvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZVNhdmVCdXR0b24gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgY29uc3QgYXBwTmFtZSA9IGNoYW5nZXNbJ2FwcE5hbWUnXTtcblxuICAgICAgICBpZiAoYXBwTmFtZT8uY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50YXNrSWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldEZvcm1CeVRhc2tJZChhcHBOYW1lLmN1cnJlbnRWYWx1ZSwgdGhpcy50YXNrSWQsIHRoaXMuYXBwVmVyc2lvbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZm9ybUlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRGb3JtQnlJZChhcHBOYW1lLmN1cnJlbnRWYWx1ZSwgdGhpcy5mb3JtSWQsIHRoaXMuYXBwVmVyc2lvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmb3JtSWQgPSBjaGFuZ2VzWydmb3JtSWQnXTtcbiAgICAgICAgaWYgKGZvcm1JZD8uY3VycmVudFZhbHVlICYmIHRoaXMuYXBwTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5nZXRGb3JtQnlJZCh0aGlzLmFwcE5hbWUsIGZvcm1JZC5jdXJyZW50VmFsdWUsIHRoaXMuYXBwVmVyc2lvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0YXNrSWQgPSBjaGFuZ2VzWyd0YXNrSWQnXTtcbiAgICAgICAgaWYgKHRhc2tJZD8uY3VycmVudFZhbHVlICYmIHRoaXMuYXBwTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5nZXRGb3JtQnlUYXNrSWQodGhpcy5hcHBOYW1lLCB0YXNrSWQuY3VycmVudFZhbHVlLCB0aGlzLmFwcFZlcnNpb24pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YSA9IGNoYW5nZXNbJ2RhdGEnXT8uY3VycmVudFZhbHVlO1xuICAgICAgICBpZiAoZGF0YT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoRm9ybURhdGEoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZvcm1SZXByZXNlbnRhdGlvbiA9IGNoYW5nZXNbJ2Zvcm0nXTtcblxuICAgICAgICBpZiAoZm9ybVJlcHJlc2VudGF0aW9uPy5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybSA9IGZvcm1SZXByZXNlbnRhdGlvbi5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB0aGlzLm9uRm9ybUxvYWRlZCh0aGlzLmZvcm0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIERpc3BsYXlNb2RlU2VydmljZS5kaXNwbGF5TW9kZSRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoY2hhbmdlKSA9PiBjaGFuZ2UuaWQgPT09IHRoaXMuaWQpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkaXNwbGF5TW9kZUNoYW5nZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9sZERpc3BsYXlNb2RlID0gdGhpcy5kaXNwbGF5TW9kZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlNb2RlID0gZGlzcGxheU1vZGVDaGFuZ2UuZGlzcGxheU1vZGU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBvbGREaXNwbGF5TW9kZUNvbmZpZ3VyYXRpb24gPSB0aGlzLmRpc3BsYXlNb2RlU2VydmljZS5maW5kQ29uZmlndXJhdGlvbihvbGREaXNwbGF5TW9kZSwgdGhpcy5kaXNwbGF5TW9kZUNvbmZpZ3VyYXRpb25zKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdEaXNwbGF5TW9kZUNvbmZpZ3VyYXRpb24gPSB0aGlzLmRpc3BsYXlNb2RlU2VydmljZS5maW5kQ29uZmlndXJhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheU1vZGVDaGFuZ2UuZGlzcGxheU1vZGUsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheU1vZGVDb25maWd1cmF0aW9uc1xuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBpZiAob2xkRGlzcGxheU1vZGVDb25maWd1cmF0aW9uPy5kaXNwbGF5TW9kZSAhPT0gbmV3RGlzcGxheU1vZGVDb25maWd1cmF0aW9uPy5kaXNwbGF5TW9kZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAob2xkRGlzcGxheU1vZGVDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlNb2RlT2ZmLmVtaXQob2xkRGlzcGxheU1vZGVDb25maWd1cmF0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobmV3RGlzcGxheU1vZGVDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlNb2RlT24uZW1pdChuZXdEaXNwbGF5TW9kZUNvbmZpZ3VyYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5Q29uZmlndXJhdGlvbiA9IG5ld0Rpc3BsYXlNb2RlQ29uZmlndXJhdGlvbjtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEludm9rZWQgd2hlbiB1c2VyIGNsaWNrcyBmb3JtIHJlZnJlc2ggYnV0dG9uLlxuICAgICAqL1xuICAgIG9uUmVmcmVzaENsaWNrZWQoKSB7XG4gICAgICAgIHRoaXMubG9hZEZvcm0oKTtcbiAgICB9XG5cbiAgICBsb2FkRm9ybSgpIHtcbiAgICAgICAgaWYgKHRoaXMuYXBwTmFtZSAmJiB0aGlzLnRhc2tJZCkge1xuICAgICAgICAgICAgdGhpcy5nZXRGb3JtQnlUYXNrSWQodGhpcy5hcHBOYW1lLCB0aGlzLnRhc2tJZCwgdGhpcy5hcHBWZXJzaW9uKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFwcE5hbWUgJiYgdGhpcy5mb3JtSWQpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybUJ5SWQodGhpcy5hcHBOYW1lLCB0aGlzLmZvcm1JZCwgdGhpcy5hcHBWZXJzaW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZpbmRQcm9jZXNzVmFyaWFibGVzQnlUYXNrSWQoYXBwTmFtZTogc3RyaW5nLCB0YXNrSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8VGFza1ZhcmlhYmxlQ2xvdWRbXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtQ2xvdWRTZXJ2aWNlLmdldFRhc2soYXBwTmFtZSwgdGFza0lkKS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKCh0YXNrKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNBUHJvY2Vzc1Rhc2sodGFzaykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUNsb3VkU2VydmljZS5nZXRUYXNrVmFyaWFibGVzKGFwcE5hbWUsIHRhc2tJZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlzQVByb2Nlc3NUYXNrKHRhc2tSZXByZXNlbnRhdGlvbjogVGFza0RldGFpbHNDbG91ZE1vZGVsKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0YXNrUmVwcmVzZW50YXRpb24ucHJvY2Vzc0RlZmluaXRpb25JZCAmJiB0YXNrUmVwcmVzZW50YXRpb24ucHJvY2Vzc0RlZmluaXRpb25EZXBsb3ltZW50SWQgIT09ICdudWxsJztcbiAgICB9XG5cbiAgICBnZXRGb3JtQnlUYXNrSWQoYXBwTmFtZTogc3RyaW5nLCB0YXNrSWQ6IHN0cmluZywgdmVyc2lvbj86IG51bWJlcik6IFByb21pc2U8Rm9ybU1vZGVsPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxGb3JtTW9kZWw+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBmb3JrSm9pbih0aGlzLmZvcm1DbG91ZFNlcnZpY2UuZ2V0VGFza0Zvcm0oYXBwTmFtZSwgdGFza0lkLCB2ZXJzaW9uKSwgdGhpcy5mb3JtQ2xvdWRTZXJ2aWNlLmdldFRhc2tWYXJpYWJsZXMoYXBwTmFtZSwgdGFza0lkKSlcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtQ2xvdWRSZXByZXNlbnRhdGlvbkpTT04gPSBkYXRhWzBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1DbG91ZFJlcHJlc2VudGF0aW9uSlNPTi5wcm9jZXNzVmFyaWFibGVzID0gZGF0YVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGFbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZEZvcm0gPSB0aGlzLnBhcnNlRm9ybSh0aGlzLmZvcm1DbG91ZFJlcHJlc2VudGF0aW9uSlNPTik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpc2liaWxpdHlTZXJ2aWNlLnJlZnJlc2hWaXNpYmlsaXR5KHBhcnNlZEZvcm0sIHRoaXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWRGb3JtLnZhbGlkYXRlRm9ybSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtID0gcGFyc2VkRm9ybTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5ub2RlSWQgPSAnLW15LSc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRm9ybUxvYWRlZCh0aGlzLmZvcm0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmZvcm0pO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEZvcm1CeUlkKGFwcE5hbWU6IHN0cmluZywgZm9ybUlkOiBzdHJpbmcsIGFwcFZlcnNpb24/OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5mb3JtQ2xvdWRTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0Rm9ybShhcHBOYW1lLCBmb3JtSWQsIGFwcFZlcnNpb24pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGZvcm0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxhdHRlbkZvcm0gPSB7IC4uLmZvcm0uZm9ybVJlcHJlc2VudGF0aW9uLCAuLi5mb3JtLmZvcm1SZXByZXNlbnRhdGlvbi5mb3JtRGVmaW5pdGlvbiB9O1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgZmxhdHRlbkZvcm0uZm9ybURlZmluaXRpb247XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmbGF0dGVuRm9ybTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAoZm9ybSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1DbG91ZFJlcHJlc2VudGF0aW9uSlNPTiA9IGZvcm07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNsb3VkUmVwcmVzZW50YXRpb25KU09OLnByb2Nlc3NWYXJpYWJsZXMgPSB0aGlzLmRhdGEgfHwgW107XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZEZvcm0gPSB0aGlzLnBhcnNlRm9ybShmb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aXNpYmlsaXR5U2VydmljZS5yZWZyZXNoVmlzaWJpbGl0eShwYXJzZWRGb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkRm9ybT8udmFsaWRhdGVGb3JtKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybSA9IHBhcnNlZEZvcm07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5ub2RlSWQgPSAnLW15LSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25Gb3JtTG9hZGVkKHRoaXMuZm9ybSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzYXZlVGFza0Zvcm0oKSB7XG4gICAgICAgIGlmICh0aGlzLmZvcm0gJiYgdGhpcy5hcHBOYW1lICYmIHRoaXMudGFza0lkKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1DbG91ZFNlcnZpY2VcbiAgICAgICAgICAgICAgICAuc2F2ZVRhc2tGb3JtKHRoaXMuYXBwTmFtZSwgdGhpcy50YXNrSWQsIHRoaXMucHJvY2Vzc0luc3RhbmNlSWQsIGAke3RoaXMuZm9ybS5pZH1gLCB0aGlzLmZvcm0udmFsdWVzKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25UYXNrU2F2ZWQodGhpcy5mb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgKGVycm9yKSA9PiB0aGlzLm9uVGFza1NhdmVkRXJyb3IoZXJyb3IpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheU1vZGVTZXJ2aWNlLm9uU2F2ZVRhc2sodGhpcy5pZCwgdGhpcy5kaXNwbGF5TW9kZSwgdGhpcy5kaXNwbGF5TW9kZUNvbmZpZ3VyYXRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbXBsZXRlVGFza0Zvcm0ob3V0Y29tZT86IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5mb3JtPy5jb25maXJtTWVzc2FnZT8uc2hvdyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb25maXJtRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiB0aGlzLmZvcm0uY29uZmlybU1lc3NhZ2UubWVzc2FnZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWluV2lkdGg6ICc0NTBweCdcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZUZvcm0ob3V0Y29tZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbXBsZXRlRm9ybShvdXRjb21lKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRpc3BsYXlNb2RlU2VydmljZS5vbkNvbXBsZXRlVGFzayh0aGlzLmlkLCB0aGlzLmRpc3BsYXlNb2RlLCB0aGlzLmRpc3BsYXlNb2RlQ29uZmlndXJhdGlvbnMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29tcGxldGVGb3JtKG91dGNvbWU/OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybSAmJiB0aGlzLmFwcE5hbWUgJiYgdGhpcy50YXNrSWQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNsb3VkU2VydmljZVxuICAgICAgICAgICAgICAgIC5jb21wbGV0ZVRhc2tGb3JtKHRoaXMuYXBwTmFtZSwgdGhpcy50YXNrSWQsIHRoaXMucHJvY2Vzc0luc3RhbmNlSWQsIGAke3RoaXMuZm9ybS5pZH1gLCB0aGlzLmZvcm0udmFsdWVzLCBvdXRjb21lLCB0aGlzLmFwcFZlcnNpb24pXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblRhc2tDb21wbGV0ZWQodGhpcy5mb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgKGVycm9yKSA9PiB0aGlzLm9uVGFza0NvbXBsZXRlZEVycm9yKGVycm9yKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZUZvcm0oZm9ybUNsb3VkUmVwcmVzZW50YXRpb25KU09OPzogYW55KTogRm9ybU1vZGVsIHwgbnVsbCB7XG4gICAgICAgIGlmIChmb3JtQ2xvdWRSZXByZXNlbnRhdGlvbkpTT04pIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1WYWx1ZXM6IEZvcm1WYWx1ZXMgPSB7fTtcbiAgICAgICAgICAgICh0aGlzLmRhdGEgfHwgW10pLmZvckVhY2goKHZhcmlhYmxlKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybVZhbHVlc1t2YXJpYWJsZS5uYW1lXSA9IHZhcmlhYmxlLnZhbHVlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybU1vZGVsKGZvcm1DbG91ZFJlcHJlc2VudGF0aW9uSlNPTiwgZm9ybVZhbHVlcywgdGhpcy5yZWFkT25seSwgdGhpcy5mb3JtU2VydmljZSwgdW5kZWZpbmVkLCB0aGlzLmZpZWxkVmFsaWRhdG9ycyk7XG4gICAgICAgICAgICBpZiAoIWZvcm0pIHtcbiAgICAgICAgICAgICAgICBmb3JtLm91dGNvbWVzID0gdGhpcy5nZXRGb3JtRGVmaW5pdGlvbk91dGNvbWVzKGZvcm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZvcm07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgY3VzdG9tIHNldCBvZiBvdXRjb21lcyBmb3IgYSBGb3JtIERlZmluaXRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZm9ybSBGb3JtIGRlZmluaXRpb24gbW9kZWwuXG4gICAgICogQHJldHVybnMgbGlzdCBvZiBmb3JtIG91dGNvbWVzXG4gICAgICovXG4gICAgZ2V0Rm9ybURlZmluaXRpb25PdXRjb21lcyhmb3JtOiBGb3JtTW9kZWwpOiBGb3JtT3V0Y29tZU1vZGVsW10ge1xuICAgICAgICByZXR1cm4gW25ldyBGb3JtT3V0Y29tZU1vZGVsKGZvcm0sIHsgaWQ6ICckc2F2ZScsIG5hbWU6IEZvcm1PdXRjb21lTW9kZWwuU0FWRV9BQ1RJT04sIGlzU3lzdGVtOiB0cnVlIH0pXTtcbiAgICB9XG5cbiAgICBjaGVja1Zpc2liaWxpdHkoZmllbGQ6IEZvcm1GaWVsZE1vZGVsKSB7XG4gICAgICAgIGlmIChmaWVsZD8uZm9ybSkge1xuICAgICAgICAgICAgdGhpcy52aXNpYmlsaXR5U2VydmljZS5yZWZyZXNoVmlzaWJpbGl0eShmaWVsZC5mb3JtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVmcmVzaEZvcm1EYXRhKCkge1xuICAgICAgICB0aGlzLmZvcm0gPSB0aGlzLnBhcnNlRm9ybSh0aGlzLmZvcm1DbG91ZFJlcHJlc2VudGF0aW9uSlNPTik7XG4gICAgICAgIGlmICh0aGlzLmZvcm0pIHtcbiAgICAgICAgICAgIHRoaXMub25Gb3JtTG9hZGVkKHRoaXMuZm9ybSk7XG4gICAgICAgICAgICB0aGlzLm9uRm9ybURhdGFSZWZyZXNoZWQodGhpcy5mb3JtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbkZvcm1Mb2FkZWQoZm9ybTogRm9ybU1vZGVsKSB7XG4gICAgICAgIGlmIChmb3JtKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlNb2RlQ29uZmlndXJhdGlvbnMgPSB0aGlzLmRpc3BsYXlNb2RlU2VydmljZS5nZXREaXNwbGF5TW9kZUNvbmZpZ3VyYXRpb25zKHRoaXMuZGlzcGxheU1vZGVDb25maWd1cmF0aW9ucyk7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlNb2RlID0gdGhpcy5kaXNwbGF5TW9kZVNlcnZpY2Uuc3dpdGNoVG9EaXNwbGF5TW9kZShcbiAgICAgICAgICAgICAgICB0aGlzLmlkLFxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5qc29uLmRpc3BsYXlNb2RlLFxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheU1vZGUsXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5TW9kZUNvbmZpZ3VyYXRpb25zXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlDb25maWd1cmF0aW9uID0gdGhpcy5kaXNwbGF5TW9kZVNlcnZpY2UuZmluZENvbmZpZ3VyYXRpb24odGhpcy5kaXNwbGF5TW9kZSwgdGhpcy5kaXNwbGF5TW9kZUNvbmZpZ3VyYXRpb25zKTtcblxuICAgICAgICAgICAgdGhpcy5kaXNwbGF5TW9kZU9uLmVtaXQodGhpcy5kaXNwbGF5Q29uZmlndXJhdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5mb3JtTG9hZGVkLmVtaXQoZm9ybSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uRm9ybURhdGFSZWZyZXNoZWQoZm9ybTogRm9ybU1vZGVsKSB7XG4gICAgICAgIHRoaXMuZm9ybURhdGFSZWZyZXNoZWQuZW1pdChmb3JtKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25UYXNrU2F2ZWQoZm9ybTogRm9ybU1vZGVsKSB7XG4gICAgICAgIHRoaXMuZm9ybVNhdmVkLmVtaXQoZm9ybSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uVGFza1NhdmVkRXJyb3IoZXJyb3I6IGFueSkge1xuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25UYXNrQ29tcGxldGVkKGZvcm06IEZvcm1Nb2RlbCkge1xuICAgICAgICB0aGlzLmZvcm1Db21wbGV0ZWQuZW1pdChmb3JtKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25UYXNrQ29tcGxldGVkRXJyb3IoZXJyb3I6IGFueSkge1xuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25FeGVjdXRlT3V0Y29tZShvdXRjb21lOiBGb3JtT3V0Y29tZU1vZGVsKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBuZXcgRm9ybU91dGNvbWVFdmVudChvdXRjb21lKTtcblxuICAgICAgICBpZiAoYXJncy5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmV4ZWN1dGVPdXRjb21lLmVtaXQoYXJncyk7XG4gICAgICAgIHJldHVybiAhYXJncy5kZWZhdWx0UHJldmVudGVkO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBzdG9yZUZvcm1Bc01ldGFkYXRhKCkge31cblxuICAgIHN3aXRjaFRvRGlzcGxheU1vZGUobmV3RGlzcGxheU1vZGU/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5TW9kZVNlcnZpY2Uuc3dpdGNoVG9EaXNwbGF5TW9kZSh0aGlzLmlkLCBGb3JtQ2xvdWREaXNwbGF5TW9kZVtuZXdEaXNwbGF5TW9kZV0sIHRoaXMuZGlzcGxheU1vZGUsIHRoaXMuZGlzcGxheU1vZGVDb25maWd1cmF0aW9ucyk7XG4gICAgfVxuXG4gICAgZmluZERpc3BsYXlDb25maWd1cmF0aW9uKGRpc3BsYXlNb2RlPzogc3RyaW5nKTogRm9ybUNsb3VkRGlzcGxheU1vZGVDb25maWd1cmF0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheU1vZGVTZXJ2aWNlLmZpbmRDb25maWd1cmF0aW9uKEZvcm1DbG91ZERpc3BsYXlNb2RlW2Rpc3BsYXlNb2RlXSwgdGhpcy5kaXNwbGF5TW9kZUNvbmZpZ3VyYXRpb25zKTtcbiAgICB9XG5cbiAgICBsb2FkSW5qZWN0ZWRGaWVsZFZhbGlkYXRvcnMoaW5qZWN0ZWRGaWVsZFZhbGlkYXRvcnM6IEZvcm1GaWVsZFZhbGlkYXRvcltdKTogdm9pZCB7XG4gICAgICAgIGlmIChpbmplY3RlZEZpZWxkVmFsaWRhdG9ycyAmJiBpbmplY3RlZEZpZWxkVmFsaWRhdG9ycz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdG9ycyA9IFsuLi50aGlzLmZpZWxkVmFsaWRhdG9ycywgLi4uaW5qZWN0ZWRGaWVsZFZhbGlkYXRvcnNdO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGRpdiAqbmdJZj1cIiFoYXNGb3JtKClcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZW1wdHktZm9ybV1cIiAvPlxuPC9kaXY+XG5cbjxkaXZcbiAgICAqbmdJZj1cImhhc0Zvcm0oKVwiXG4gICAgY2xhc3M9XCJhZGYtY2xvdWQtZm9ybS1jb250YWluZXIgYWRmLWNsb3VkLWZvcm0te3sgZGlzcGxheUNvbmZpZ3VyYXRpb24/Lm9wdGlvbnM/LmZ1bGxzY3JlZW4gPyAnZnVsbHNjcmVlbicgOiAnaW5saW5lJyB9fS1jb250YWluZXJcIlxuICAgIFtzdHlsZV09XCJmb3JtU3R5bGVcIlxuPlxuICAgIDxkaXYgY2xhc3M9XCJhZGYtY2xvdWQtZm9ybS1jb250ZW50XCIgW2Nka1RyYXBGb2N1c109XCJkaXNwbGF5Q29uZmlndXJhdGlvbj8ub3B0aW9ucz8udHJhcEZvY3VzXCIgY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmU+XG4gICAgICAgIDxhZGYtdG9vbGJhciBjbGFzcz1cImFkZi1jbG91ZC1mb3JtLXRvb2xiYXJcIiAqbmdJZj1cImRpc3BsYXlDb25maWd1cmF0aW9uPy5vcHRpb25zPy5kaXNwbGF5VG9vbGJhclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1jbG91ZC1mb3JtX19mb3JtLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGYtY2xvdWQtZm9ybV9fZGlzcGxheS1uYW1lXCIgW3RpdGxlXT1cImZvcm0udGFza05hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgZm9ybS50YXNrTmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZvcm0udGFza05hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdGT1JNLkZPUk1fUkVOREVSRVIuTkFNRUxFU1NfVEFTSycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxhZGYtdG9vbGJhci1kaXZpZGVyICpuZ0lmPVwiZGlzcGxheUNvbmZpZ3VyYXRpb24/Lm9wdGlvbnM/LmRpc3BsYXlDbG9zZUJ1dHRvblwiIC8+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJkaXNwbGF5Q29uZmlndXJhdGlvbj8ub3B0aW9ucz8uZGlzcGxheUNsb3NlQnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1jbG91ZC1mb3JtLWNsb3NlLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwiYWRmLXRvb2xiYXItcmlnaHQtYmFja1wiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQURGX1ZJRVdFUi5BQ1RJT05TLkNMT1NFJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhZGYtY2xvdWQtZm9ybS1jbG9zZS1idXR0b24nXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0FERl9WSUVXRVIuQUNUSU9OUy5DTE9TRScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ0FERl9WSUVXRVIuQUNUSU9OUy5DTE9TRScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzd2l0Y2hUb0Rpc3BsYXlNb2RlKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9hZGYtdG9vbGJhcj5cblxuICAgICAgICA8bWF0LWNhcmRcbiAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJvdXRsaW5lZFwiXG4gICAgICAgICAgICBjbGFzcz1cImFkZi1jbG91ZC1mb3JtLWNvbnRlbnQtY2FyZFwiXG4gICAgICAgICAgICBbY2xhc3MuYWRmLWNsb3VkLWZvcm0tY29udGVudC1jYXJkLWZ1bGxzY3JlZW5dPVwiZGlzcGxheU1vZGUgPT09ICdmdWxsU2NyZWVuJ1wiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtY2xvdWQtZm9ybS1jb250ZW50LWNhcmQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1jYXJkLWhlYWRlciAqbmdJZj1cInNob3dUaXRsZSB8fCBzaG93UmVmcmVzaEJ1dHRvbiB8fCBzaG93VmFsaWRhdGlvbkljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93VmFsaWRhdGlvbkljb25cIiBjbGFzcz1cImFkZi1mb3JtLXZhbGlkYXRpb24tYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGlkPVwiYWRmLXZhbGlkLWZvcm0taWNvblwiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIiAqbmdJZj1cImZvcm0uaXNWYWxpZDsgZWxzZSBub192YWxpZF9mb3JtXCI+Y2hlY2tfY2lyY2xlPC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vX3ZhbGlkX2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBpZD1cImFkZi1pbnZhbGlkLWZvcm0taWNvblwiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgYWRmLWludmFsaWQtY29sb3JcIj5lcnJvcjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWRpc3BsYXlDb25maWd1cmF0aW9uPy5vcHRpb25zPy5mdWxsc2NyZWVuICYmIGZpbmREaXNwbGF5Q29uZmlndXJhdGlvbignZnVsbFNjcmVlbicpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtY2xvdWQtZm9ybS1mdWxsc2NyZWVuLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzd2l0Y2hUb0Rpc3BsYXlNb2RlKCdmdWxsU2NyZWVuJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhZGYtY2xvdWQtZm9ybS1mdWxsc2NyZWVuLWJ1dHRvbidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+ZnVsbHNjcmVlbjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93UmVmcmVzaEJ1dHRvblwiIGNsYXNzPVwiYWRmLWNsb3VkLWZvcm0tcmVsb2FkLWJ1dHRvblwiIFt0aXRsZV09XCInQURGX1ZJRVdFUi5BQ1RJT05TLkZVTExTQ1JFRU4nIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJvblJlZnJlc2hDbGlja2VkKClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidBREZfVklFV0VSLkFDVElPTlMuRlVMTFNDUkVFTicgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5yZWZyZXNoPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc1RpdGxlRW5hYmxlZCgpXCIgY2xhc3M9XCJhZGYtY2xvdWQtZm9ybS10aXRsZVwiIFt0aXRsZV09XCJmb3JtLnRhc2tOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IGZvcm0udGFza05hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmb3JtLnRhc2tOYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnRk9STS5GT1JNX1JFTkRFUkVSLk5BTUVMRVNTX1RBU0snIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgPC9tYXQtY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJhZGYtZm9ybS1jb250YWluZXItY2FyZC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhZGYtZm9ybS1yZW5kZXJlciBbZm9ybURlZmluaXRpb25dPVwiZm9ybVwiIFtyZWFkT25seV09XCJyZWFkT25seVwiIC8+XG4gICAgICAgICAgICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWNhcmQtYWN0aW9ucyAqbmdJZj1cImZvcm0uaGFzT3V0Y29tZXMoKVwiIGNsYXNzPVwiYWRmLWNsb3VkLWZvcm0tY29udGVudC1jYXJkLWFjdGlvbnNcIiBhbGlnbj1cImVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYWRmLWNsb3VkLWZvcm0tY3VzdG9tLW91dGNvbWVzXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG91dGNvbWUgb2YgZm9ybS5vdXRjb21lc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJvdXRjb21lLmlzVmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCInYWRmLWZvcm0tJyArIG91dGNvbWUubmFtZSB8IGZvcm1hdFNwYWNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImdldENvbG9yRm9yT3V0Y29tZShvdXRjb21lLm5hbWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzT3V0Y29tZUJ1dHRvbkVuYWJsZWQob3V0Y29tZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWRmLWZvcm0taGlkZS1idXR0b25dPVwiIWlzT3V0Y29tZUJ1dHRvblZpc2libGUob3V0Y29tZSwgZm9ybS5yZWFkT25seSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1jbG91ZC1mb3JtLWN1c3RvbS1vdXRjb21lLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk91dGNvbWVDbGlja2VkKG91dGNvbWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG91dGNvbWUubmFtZSB8IHRyYW5zbGF0ZSB8IHVwcGVyY2FzZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWNhcmQtYWN0aW9ucz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L21hdC1jYXJkPlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
18
|
+
import { FormDefinitionSelectorCloudService } from '../services/form-definition-selector-cloud.service';
|
|
19
|
+
import { MatSelectModule } from '@angular/material/select';
|
|
20
|
+
import { CommonModule } from '@angular/common';
|
|
21
|
+
import { TranslatePipe } from '@ngx-translate/core';
|
|
22
|
+
import * as i0 from "@angular/core";
|
|
23
|
+
import * as i1 from "../services/form-definition-selector-cloud.service";
|
|
24
|
+
import * as i2 from "@angular/common";
|
|
25
|
+
import * as i3 from "@angular/material/form-field";
|
|
26
|
+
import * as i4 from "@angular/material/select";
|
|
27
|
+
import * as i5 from "@angular/material/core";
|
|
28
|
+
export class FormDefinitionSelectorCloudComponent {
|
|
29
|
+
constructor(formDefinitionCloudService) {
|
|
30
|
+
this.formDefinitionCloudService = formDefinitionCloudService;
|
|
31
|
+
/** Name of the application. If specified, this shows the users who have access to the app. */
|
|
32
|
+
this.appName = '';
|
|
33
|
+
/** Emitted when a form is selected. */
|
|
34
|
+
this.selectForm = new EventEmitter();
|
|
35
|
+
}
|
|
36
|
+
ngOnInit() {
|
|
37
|
+
this.forms$ = this.formDefinitionCloudService.getStandAloneTaskForms(this.appName);
|
|
38
|
+
}
|
|
39
|
+
onSelect(event) {
|
|
40
|
+
this.selectForm.emit(event.value);
|
|
41
|
+
}
|
|
42
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormDefinitionSelectorCloudComponent, deps: [{ token: i1.FormDefinitionSelectorCloudService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
43
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormDefinitionSelectorCloudComponent, isStandalone: true, selector: "adf-cloud-form-definition-selector", inputs: { appName: "appName" }, outputs: { selectForm: "selectForm" }, ngImport: i0, template: "<mat-form-field class=\"adf-form-definition-selector\">\n <mat-label>{{'ADF_CLOUD_TASK_LIST.START_TASK.FORM.LABEL.FORM' | translate}}</mat-label>\n <mat-select class=\"adf-form-selector-dropdown\" (selectionChange)=\"onSelect($event)\">\n <mat-option [value]=\"''\">{{'ADF_CLOUD_TASK_LIST.START_TASK.FORM.LABEL.NONE' | translate}}</mat-option>\n <mat-option *ngFor=\"let form of forms$ | async\" [value]=\"form.id\">{{ form.name }}</mat-option>\n </mat-select>\n</mat-form-field>\n", styles: [".adf-form-definition-selector{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "component", type: i4.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }] }); }
|
|
44
|
+
}
|
|
45
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormDefinitionSelectorCloudComponent, decorators: [{
|
|
46
|
+
type: Component,
|
|
47
|
+
args: [{ selector: 'adf-cloud-form-definition-selector', standalone: true, imports: [CommonModule, TranslatePipe, MatSelectModule], template: "<mat-form-field class=\"adf-form-definition-selector\">\n <mat-label>{{'ADF_CLOUD_TASK_LIST.START_TASK.FORM.LABEL.FORM' | translate}}</mat-label>\n <mat-select class=\"adf-form-selector-dropdown\" (selectionChange)=\"onSelect($event)\">\n <mat-option [value]=\"''\">{{'ADF_CLOUD_TASK_LIST.START_TASK.FORM.LABEL.NONE' | translate}}</mat-option>\n <mat-option *ngFor=\"let form of forms$ | async\" [value]=\"form.id\">{{ form.name }}</mat-option>\n </mat-select>\n</mat-form-field>\n", styles: [".adf-form-definition-selector{width:100%}\n"] }]
|
|
48
|
+
}], ctorParameters: () => [{ type: i1.FormDefinitionSelectorCloudService }], propDecorators: { appName: [{
|
|
49
|
+
type: Input
|
|
50
|
+
}], selectForm: [{
|
|
51
|
+
type: Output
|
|
52
|
+
}] } });
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1kZWZpbml0aW9uLXNlbGVjdG9yLWNsb3VkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL2Zvcm0tZGVmaW5pdGlvbi1zZWxlY3Rvci1jbG91ZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHJvY2Vzcy1zZXJ2aWNlcy1jbG91ZC9zcmMvbGliL2Zvcm0vY29tcG9uZW50cy9mb3JtLWRlZmluaXRpb24tc2VsZWN0b3ItY2xvdWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvRSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUN4RyxPQUFPLEVBQW1CLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7QUFTcEQsTUFBTSxPQUFPLG9DQUFvQztJQVc3QyxZQUFvQiwwQkFBOEQ7UUFBOUQsK0JBQTBCLEdBQTFCLDBCQUEwQixDQUFvQztRQVZsRiw4RkFBOEY7UUFFOUYsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQUVyQix1Q0FBdUM7UUFFdkMsZUFBVSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO0lBSXVCLENBQUM7SUFFdEYsUUFBUTtRQUNKLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQXNCO1FBQzNCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDOytHQW5CUSxvQ0FBb0M7bUdBQXBDLG9DQUFvQyxxS0NoQ2pELDBmQU9BLG9HRHFCYyxZQUFZLDRNQUFFLGFBQWEsaURBQUUsZUFBZTs7NEZBSTdDLG9DQUFvQztrQkFQaEQsU0FBUzsrQkFDSSxvQ0FBb0MsY0FDbEMsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxlQUFlLENBQUM7dUdBT3ZELE9BQU87c0JBRE4sS0FBSztnQkFLTixVQUFVO3NCQURULE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZvcm1EZWZpbml0aW9uU2VsZWN0b3JDbG91ZFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mb3JtLWRlZmluaXRpb24tc2VsZWN0b3ItY2xvdWQuc2VydmljZSc7XG5pbXBvcnQgeyBNYXRTZWxlY3RDaGFuZ2UsIE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBGb3JtUmVwcmVzZW50YXRpb24gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mb3JtLWZpZWxkcy5pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWRmLWNsb3VkLWZvcm0tZGVmaW5pdGlvbi1zZWxlY3RvcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBUcmFuc2xhdGVQaXBlLCBNYXRTZWxlY3RNb2R1bGVdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9mb3JtLWRlZmluaXRpb24tc2VsZWN0b3ItY2xvdWQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2Zvcm0tZGVmaW5pdGlvbi1zZWxlY3Rvci1jbG91ZC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1EZWZpbml0aW9uU2VsZWN0b3JDbG91ZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgLyoqIE5hbWUgb2YgdGhlIGFwcGxpY2F0aW9uLiBJZiBzcGVjaWZpZWQsIHRoaXMgc2hvd3MgdGhlIHVzZXJzIHdobyBoYXZlIGFjY2VzcyB0byB0aGUgYXBwLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXBwTmFtZTogc3RyaW5nID0gJyc7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGEgZm9ybSBpcyBzZWxlY3RlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBzZWxlY3RGb3JtOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gICAgZm9ybXMkOiBPYnNlcnZhYmxlPEZvcm1SZXByZXNlbnRhdGlvbltdPjtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybURlZmluaXRpb25DbG91ZFNlcnZpY2U6IEZvcm1EZWZpbml0aW9uU2VsZWN0b3JDbG91ZFNlcnZpY2UpIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtcyQgPSB0aGlzLmZvcm1EZWZpbml0aW9uQ2xvdWRTZXJ2aWNlLmdldFN0YW5kQWxvbmVUYXNrRm9ybXModGhpcy5hcHBOYW1lKTtcbiAgICB9XG5cbiAgICBvblNlbGVjdChldmVudDogTWF0U2VsZWN0Q2hhbmdlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0Rm9ybS5lbWl0KGV2ZW50LnZhbHVlKTtcbiAgICB9XG59XG4iLCI8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJhZGYtZm9ybS1kZWZpbml0aW9uLXNlbGVjdG9yXCI+XG4gICAgPG1hdC1sYWJlbD57eydBREZfQ0xPVURfVEFTS19MSVNULlNUQVJUX1RBU0suRk9STS5MQUJFTC5GT1JNJyB8IHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XG4gICAgPG1hdC1zZWxlY3QgY2xhc3M9XCJhZGYtZm9ybS1zZWxlY3Rvci1kcm9wZG93blwiIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3QoJGV2ZW50KVwiPlxuICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJydcIj57eydBREZfQ0xPVURfVEFTS19MSVNULlNUQVJUX1RBU0suRk9STS5MQUJFTC5OT05FJyB8IHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgZm9ybSBvZiBmb3JtcyQgfCBhc3luY1wiIFt2YWx1ZV09XCJmb3JtLmlkXCI+e3sgZm9ybS5uYW1lIH19PC9tYXQtb3B0aW9uPlxuICAgIDwvbWF0LXNlbGVjdD5cbjwvbWF0LWZvcm0tZmllbGQ+XG4iXX0=
|