@valtimo/process-link 12.14.1 → 13.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/fesm2022/valtimo-process-link.mjs +694 -682
  2. package/fesm2022/valtimo-process-link.mjs.map +1 -1
  3. package/lib/components/choose-process-link-type/choose-process-link-type.component.d.ts.map +1 -1
  4. package/lib/components/form-display-configuration/form-display-configuration.component.d.ts +1 -4
  5. package/lib/components/form-display-configuration/form-display-configuration.component.d.ts.map +1 -1
  6. package/lib/components/form-flow/form-flow.component.d.ts +1 -1
  7. package/lib/components/form-flow/form-flow.component.d.ts.map +1 -1
  8. package/lib/components/form-flow-configuration-container/form-flow-configuration-container.component.d.ts.map +1 -1
  9. package/lib/components/form-link-process-diagram/form-link-process-diagram.component.d.ts +1 -1
  10. package/lib/components/form-link-process-diagram/form-link-process-diagram.component.d.ts.map +1 -1
  11. package/lib/components/import-plugin-configuration/import-plugin-configuration.component.d.ts.map +1 -1
  12. package/lib/components/plugin-action-configuration/plugin-action-configuration.component.d.ts.map +1 -1
  13. package/lib/components/process-link/process-link.component.d.ts.map +1 -1
  14. package/lib/components/process-link-modal/process-link-modal.component.d.ts +1 -1
  15. package/lib/components/process-link-modal/process-link-modal.component.d.ts.map +1 -1
  16. package/lib/components/select-form/select-form.component.d.ts +12 -9
  17. package/lib/components/select-form/select-form.component.d.ts.map +1 -1
  18. package/lib/components/select-form-flow/select-form-flow.component.d.ts +14 -12
  19. package/lib/components/select-form-flow/select-form-flow.component.d.ts.map +1 -1
  20. package/lib/components/select-plugin-action/select-plugin-action.component.d.ts +3 -2
  21. package/lib/components/select-plugin-action/select-plugin-action.component.d.ts.map +1 -1
  22. package/lib/components/select-plugin-configuration/select-plugin-configuration.component.d.ts.map +1 -1
  23. package/lib/components/select-ui-component/select-ui-component.component.d.ts.map +1 -1
  24. package/lib/models/form-link.model.d.ts +1 -0
  25. package/lib/models/form-link.model.d.ts.map +1 -1
  26. package/lib/models/process-link.model.d.ts +48 -4
  27. package/lib/models/process-link.model.d.ts.map +1 -1
  28. package/lib/process-link.module.d.ts +11 -12
  29. package/lib/process-link.module.d.ts.map +1 -1
  30. package/lib/services/form-flow.service.d.ts +6 -8
  31. package/lib/services/form-flow.service.d.ts.map +1 -1
  32. package/lib/services/index.d.ts +2 -0
  33. package/lib/services/index.d.ts.map +1 -1
  34. package/lib/services/process-link-button.service.d.ts.map +1 -1
  35. package/lib/services/process-link-state.service.d.ts +20 -8
  36. package/lib/services/process-link-state.service.d.ts.map +1 -1
  37. package/lib/services/process-link-step.service.d.ts.map +1 -1
  38. package/lib/services/process-link.service.d.ts +6 -4
  39. package/lib/services/process-link.service.d.ts.map +1 -1
  40. package/lib/services/url-resolver.service.d.ts.map +1 -1
  41. package/lib/services/url-validator.service.d.ts.map +1 -1
  42. package/package.json +4 -6
  43. package/public-api.d.ts +1 -5
  44. package/public-api.d.ts.map +1 -1
  45. package/esm2022/lib/components/choose-process-link-type/choose-process-link-type.component.mjs +0 -38
  46. package/esm2022/lib/components/choose-process-link-type/index.mjs +0 -17
  47. package/esm2022/lib/components/form-display-configuration/form-display-configuration.component.mjs +0 -119
  48. package/esm2022/lib/components/form-flow/form-flow.component.mjs +0 -206
  49. package/esm2022/lib/components/form-flow-configuration-container/form-flow-configuration-container.component.mjs +0 -107
  50. package/esm2022/lib/components/form-flow-configuration-container/index.mjs +0 -17
  51. package/esm2022/lib/components/form-link-process-diagram/form-link-process-diagram.component.mjs +0 -150
  52. package/esm2022/lib/components/import-plugin-configuration/import-plugin-configuration.component.mjs +0 -133
  53. package/esm2022/lib/components/plugin-action-configuration/plugin-action-configuration.component.mjs +0 -137
  54. package/esm2022/lib/components/process-link/process-link.component.mjs +0 -69
  55. package/esm2022/lib/components/process-link-modal/process-link-modal.component.mjs +0 -91
  56. package/esm2022/lib/components/select-form/index.mjs +0 -17
  57. package/esm2022/lib/components/select-form/select-form.component.mjs +0 -172
  58. package/esm2022/lib/components/select-form-flow/index.mjs +0 -17
  59. package/esm2022/lib/components/select-form-flow/select-form-flow.component.mjs +0 -160
  60. package/esm2022/lib/components/select-plugin-action/select-plugin-action.component.mjs +0 -74
  61. package/esm2022/lib/components/select-plugin-configuration/select-plugin-configuration.component.mjs +0 -75
  62. package/esm2022/lib/components/select-ui-component/select-ui-component.component.mjs +0 -128
  63. package/esm2022/lib/components/select-url/select-url.component.mjs +0 -125
  64. package/esm2022/lib/constants/index.mjs +0 -18
  65. package/esm2022/lib/constants/injection-tokens.mjs +0 -20
  66. package/esm2022/lib/constants/process.link.mjs +0 -23
  67. package/esm2022/lib/models/form-custom-component.model.mjs +0 -17
  68. package/esm2022/lib/models/form-flow.model.mjs +0 -17
  69. package/esm2022/lib/models/form-link.model.mjs +0 -17
  70. package/esm2022/lib/models/index.mjs +0 -20
  71. package/esm2022/lib/models/process-link-url.model.mjs +0 -17
  72. package/esm2022/lib/models/process-link.model.mjs +0 -17
  73. package/esm2022/lib/process-link-routing.module.mjs +0 -44
  74. package/esm2022/lib/process-link.module.mjs +0 -203
  75. package/esm2022/lib/services/form-flow-component.service.mjs +0 -44
  76. package/esm2022/lib/services/form-flow.service.mjs +0 -59
  77. package/esm2022/lib/services/index.mjs +0 -23
  78. package/esm2022/lib/services/plugin-state.service.mjs +0 -90
  79. package/esm2022/lib/services/process-link-button.service.mjs +0 -106
  80. package/esm2022/lib/services/process-link-state.service.mjs +0 -173
  81. package/esm2022/lib/services/process-link-step.service.mjs +0 -269
  82. package/esm2022/lib/services/process-link.service.mjs +0 -117
  83. package/esm2022/lib/services/url-resolver.service.mjs +0 -18
  84. package/esm2022/lib/services/url-validator.service.mjs +0 -26
  85. package/esm2022/public-api.mjs +0 -34
  86. package/esm2022/valtimo-process-link.mjs +0 -5
  87. package/lib/components/select-url/select-url.component.d.ts +0 -31
  88. package/lib/components/select-url/select-url.component.d.ts.map +0 -1
@@ -1,173 +0,0 @@
1
- /*
2
- * Copyright 2015-2024 Ritense BV, the Netherlands.
3
- *
4
- * Licensed under EUPL, Version 1.2 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" basis,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { Inject, Injectable, Optional } from '@angular/core';
17
- import { BehaviorSubject, map } from 'rxjs';
18
- import { FORM_CUSTOM_COMPONENT_TOKEN } from '../constants';
19
- import * as i0 from "@angular/core";
20
- import * as i1 from "./process-link-step.service";
21
- import * as i2 from "./process-link-button.service";
22
- import * as i3 from "./plugin-state.service";
23
- export class ProcessLinkStateService {
24
- get showModal$() {
25
- return this._showModal$.asObservable();
26
- }
27
- get elementName$() {
28
- return this._elementName$.asObservable();
29
- }
30
- get availableProcessLinkTypes$() {
31
- return this._availableProcessLinkTypes$.asObservable().pipe(map(types => {
32
- if (!this.formCustomComponentConfig) {
33
- return types.map(type => {
34
- if (type.processLinkType === 'ui-component') {
35
- type.enabled = false;
36
- }
37
- return type;
38
- });
39
- }
40
- return types;
41
- }));
42
- }
43
- get hideProgressIndicator$() {
44
- return this._availableProcessLinkTypes$
45
- .asObservable()
46
- .pipe(map(availableTypes => Array.isArray(availableTypes) &&
47
- availableTypes.length === 1 &&
48
- (availableTypes[0]?.processLinkType === 'form' ||
49
- availableTypes[0]?.processLinkType === 'form-flow')));
50
- }
51
- get selectedProcessLinkTypeId$() {
52
- return this._selectedProcessLinkTypeId$.asObservable();
53
- }
54
- get saving$() {
55
- return this._saving$.asObservable();
56
- }
57
- get modalParams$() {
58
- return this._modalParams$.asObservable();
59
- }
60
- get selectedProcessLink$() {
61
- return this._selectedProcessLink$.asObservable();
62
- }
63
- get typeOfSelectedProcessLink$() {
64
- return this.selectedProcessLink$.pipe(map(processLink => processLink?.processLinkType || ''));
65
- }
66
- constructor(processLinkStepService, buttonService, pluginStateService, formCustomComponentConfig) {
67
- this.processLinkStepService = processLinkStepService;
68
- this.buttonService = buttonService;
69
- this.pluginStateService = pluginStateService;
70
- this.formCustomComponentConfig = formCustomComponentConfig;
71
- this._showModal$ = new BehaviorSubject(false);
72
- this._availableProcessLinkTypes$ = new BehaviorSubject([]);
73
- this._elementName$ = new BehaviorSubject('');
74
- this._selectedProcessLinkTypeId$ = new BehaviorSubject('');
75
- this._viewModelEnabled$ = new BehaviorSubject(false);
76
- this._url$ = new BehaviorSubject('');
77
- this._saving$ = new BehaviorSubject(false);
78
- this._modalParams$ = new BehaviorSubject(undefined);
79
- this._selectedProcessLink$ = new BehaviorSubject(undefined);
80
- this.openAvailableProcessLinkTypesSubscription();
81
- }
82
- ngOnDestroy() {
83
- this._availableProcessLinkTypesSubscription?.unsubscribe();
84
- }
85
- setAvailableProcessLinkTypes(processLinkTypes) {
86
- const hasOneOption = processLinkTypes.length === 1;
87
- this._availableProcessLinkTypes$.next(processLinkTypes);
88
- this.processLinkStepService.setHasOneProcessLinkType(hasOneOption);
89
- if (hasOneOption) {
90
- this.selectProcessLinkType(processLinkTypes[0].processLinkType, hasOneOption);
91
- }
92
- }
93
- setElementName(name) {
94
- this._elementName$.next(name);
95
- }
96
- showModal() {
97
- this._showModal$.next(true);
98
- }
99
- closeModal() {
100
- this._showModal$.next(false);
101
- setTimeout(() => {
102
- this.reset();
103
- }, 240);
104
- }
105
- selectProcessLinkType(processLinkTypeId, hasOneOption) {
106
- this._selectedProcessLinkTypeId$.next(processLinkTypeId);
107
- this.processLinkStepService.setProcessLinkTypeSteps(processLinkTypeId, hasOneOption);
108
- }
109
- setViewModelEnabled(viewModelEnabled) {
110
- this._viewModelEnabled$.next(viewModelEnabled);
111
- }
112
- get viewModelEnabled$() {
113
- return this._viewModelEnabled$.asObservable();
114
- }
115
- get url$() {
116
- return this._url$.asObservable();
117
- }
118
- clearSelectedProcessLinkType() {
119
- this._selectedProcessLinkTypeId$.next('');
120
- }
121
- startSaving() {
122
- this._saving$.next(true);
123
- this.processLinkStepService.disableSteps();
124
- }
125
- stopSaving() {
126
- this._saving$.next(false);
127
- this.processLinkStepService.enableSteps();
128
- }
129
- setInitial() {
130
- const availableTypes = this._availableProcessLinkTypes$.getValue();
131
- this.buttonService.resetButtons();
132
- this.processLinkStepService.setInitialSteps(availableTypes);
133
- }
134
- setModalParams(params) {
135
- this._modalParams$.next(params);
136
- }
137
- selectProcessLink(processLink) {
138
- this._selectedProcessLink$.next(processLink);
139
- this.pluginStateService.selectProcessLink(processLink);
140
- this.setViewModelEnabled(processLink.viewModelEnabled);
141
- this._url$.next(processLink.url);
142
- }
143
- deselectProcessLink() {
144
- this._selectedProcessLink$.next(undefined);
145
- this.pluginStateService.deselectProcessLink();
146
- }
147
- openAvailableProcessLinkTypesSubscription() {
148
- this._availableProcessLinkTypesSubscription = this._availableProcessLinkTypes$.subscribe(availableProcessLinkTypes => {
149
- if (availableProcessLinkTypes.length > 1) {
150
- this.setInitial();
151
- }
152
- });
153
- }
154
- reset() {
155
- this.setAvailableProcessLinkTypes([]);
156
- this.processLinkStepService.reset();
157
- this.stopSaving();
158
- this.buttonService.resetButtons();
159
- this.clearSelectedProcessLinkType();
160
- this.deselectProcessLink();
161
- }
162
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ProcessLinkStateService, deps: [{ token: i1.ProcessLinkStepService }, { token: i2.ProcessLinkButtonService }, { token: i3.PluginStateService }, { token: FORM_CUSTOM_COMPONENT_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
163
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ProcessLinkStateService }); }
164
- }
165
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ProcessLinkStateService, decorators: [{
166
- type: Injectable
167
- }], ctorParameters: () => [{ type: i1.ProcessLinkStepService }, { type: i2.ProcessLinkButtonService }, { type: i3.PluginStateService }, { type: undefined, decorators: [{
168
- type: Optional
169
- }, {
170
- type: Inject,
171
- args: [FORM_CUSTOM_COMPONENT_TOKEN]
172
- }] }] });
173
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy1saW5rLXN0YXRlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL3Byb2Nlc3MtbGluay9zcmMvbGliL3NlcnZpY2VzL3Byb2Nlc3MtbGluay1zdGF0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQWEsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBQyxlQUFlLEVBQUUsR0FBRyxFQUEyQixNQUFNLE1BQU0sQ0FBQztBQUtwRSxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxjQUFjLENBQUM7Ozs7O0FBR3pELE1BQU0sT0FBTyx1QkFBdUI7SUFhbEMsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFDRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUNELElBQUksMEJBQTBCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLDJCQUEyQixDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FDekQsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO2dCQUNwQyxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3RCLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxjQUFjLEVBQUUsQ0FBQzt3QkFDNUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7b0JBQ3ZCLENBQUM7b0JBQ0QsT0FBTyxJQUFJLENBQUM7Z0JBQ2QsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBQ0QsT0FBTyxLQUFL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QUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixDQUFDO1FBQ0gsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRU8sS0FBSztRQUNYLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQzsrR0FoTFUsdUJBQXVCLGtJQXNFeEIsMkJBQTJCO21IQXRFMUIsdUJBQXVCOzs0RkFBdkIsdUJBQXVCO2tCQURuQyxVQUFVOzswQkFzRU4sUUFBUTs7MEJBQ1IsTUFBTTsyQkFBQywyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgT25EZXN0cm95LCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgbWFwLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtGb3JtQ3VzdG9tQ29tcG9uZW50Q29uZmlnLCBNb2RhbFBhcmFtcywgUHJvY2Vzc0xpbmssIFByb2Nlc3NMaW5rVHlwZX0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7UHJvY2Vzc0xpbmtTdGVwU2VydmljZX0gZnJvbSAnLi9wcm9jZXNzLWxpbmstc3RlcC5zZXJ2aWNlJztcbmltcG9ydCB7UHJvY2Vzc0xpbmtCdXR0b25TZXJ2aWNlfSBmcm9tICcuL3Byb2Nlc3MtbGluay1idXR0b24uc2VydmljZSc7XG5pbXBvcnQge1BsdWdpblN0YXRlU2VydmljZX0gZnJvbSAnLi9wbHVnaW4tc3RhdGUuc2VydmljZSc7XG5pbXBvcnQge0ZPUk1fQ1VTVE9NX0NPTVBPTkVOVF9UT0tFTn0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFByb2Nlc3NMaW5rU3RhdGVTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2hvd01vZGFsJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hdmFpbGFibGVQcm9jZXNzTGlua1R5cGVzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8UHJvY2Vzc0xpbmtUeXBlPj4oW10pO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lbGVtZW50TmFtZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZWxlY3RlZFByb2Nlc3NMaW5rVHlwZUlkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdNb2RlbEVuYWJsZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3VybCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zYXZpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21vZGFsUGFyYW1zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TW9kYWxQYXJhbXM+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlbGVjdGVkUHJvY2Vzc0xpbmskID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQcm9jZXNzTGluaz4odW5kZWZpbmVkKTtcblxuICBwcml2YXRlIF9hdmFpbGFibGVQcm9jZXNzTGlua1R5cGVzU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuXG4gIGdldCBzaG93TW9kYWwkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9zaG93TW9kYWwkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG4gIGdldCBlbGVtZW50TmFtZSQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudE5hbWUkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG4gIGdldCBhdmFpbGFibGVQcm9jZXNzTGlua1R5cGVzJCgpOiBPYnNlcnZhYmxlPEFycmF5PFByb2Nlc3NMaW5rVHlwZT4+IHtcbiAgICByZXR1cm4gdGhpcy5fYXZhaWxhYmxlUHJvY2Vzc0xpbmtUeXBlcyQuYXNPYnNlcnZhYmxlKCkucGlwZShcbiAgICAgIG1hcCh0eXBlcyA9PiB7XG4gICAgICAgIGlmICghdGhpcy5mb3JtQ3VzdG9tQ29tcG9uZW50Q29uZmlnKSB7XG4gICAgICAgICAgcmV0dXJuIHR5cGVzLm1hcCh0eXBlID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlLnByb2Nlc3NMaW5rVHlwZSA9PT0gJ3VpLWNvbXBvbmVudCcpIHtcbiAgICAgICAgICAgICAgdHlwZS5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHlwZXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbiAgZ2V0IGhpZGVQcm9ncmVzc0luZGljYXRvciQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2F2YWlsYWJsZVByb2Nlc3NMaW5rVHlwZXMkXG4gICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoXG4gICAgICAgICAgYXZhaWxhYmxlVHlwZXMgPT5cbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoYXZhaWxhYmxlVHlwZXMpICYmXG4gICAgICAgICAgICBhdmFpbGFibGVUeXBlcy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICAgIChhdmFpbGFibGVUeXBlc1swXT8ucHJvY2Vzc0xpbmtUeXBlID09PSAnZm9ybScgfHxcbiAgICAgICAgICAgICAgYXZhaWxhYmxlVHlwZXNbMF0/LnByb2Nlc3NMaW5rVHlwZSA9PT0gJ2Zvcm0tZmxvdycpXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkUHJvY2Vzc0xpbmtUeXBlSWQkKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkUHJvY2Vzc0xpbmtUeXBlSWQkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG4gIGdldCBzYXZpbmckKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9zYXZpbmckLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG4gIGdldCBtb2RhbFBhcmFtcyQoKTogT2JzZXJ2YWJsZTxNb2RhbFBhcmFtcz4ge1xuICAgIHJldHVybiB0aGlzLl9tb2RhbFBhcmFtcyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRQcm9jZXNzTGluayQoKTogT2JzZXJ2YWJsZTxQcm9jZXNzTGluaz4ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZFByb2Nlc3NMaW5rJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCB0eXBlT2ZTZWxlY3RlZFByb2Nlc3NMaW5rJCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUHJvY2Vzc0xpbmskLnBpcGUobWFwKHByb2Nlc3NMaW5rID0+IHByb2Nlc3NMaW5rPy5wcm9jZXNzTGlua1R5cGUgfHwgJycpKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvY2Vzc0xpbmtTdGVwU2VydmljZTogUHJvY2Vzc0xpbmtTdGVwU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJ1dHRvblNlcnZpY2U6IFByb2Nlc3NMaW5rQnV0dG9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpblN0YXRlU2VydmljZTogUGx1Z2luU3RhdGVTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChGT1JNX0NVU1RPTV9DT01QT05FTlRfVE9LRU4pXG4gICAgcHJpdmF0ZSByZWFkb25seSBmb3JtQ3VzdG9tQ29tcG9uZW50Q29uZmlnOiBGb3JtQ3VzdG9tQ29tcG9uZW50Q29uZmlnXG4gICkge1xuICAgIHRoaXMub3BlbkF2YWlsYWJsZVByb2Nlc3NMaW5rVHlwZXNTdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2F2YWlsYWJsZVByb2Nlc3NMaW5rVHlwZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBzZXRBdmFpbGFibGVQcm9jZXNzTGlua1R5cGVzKHByb2Nlc3NMaW5rVHlwZXM6IEFycmF5PFByb2Nlc3NMaW5rVHlwZT4pOiB2b2lkIHtcbiAgICBjb25zdCBoYXNPbmVPcHRpb24gPSBwcm9jZXNzTGlua1R5cGVzLmxlbmd0aCA9PT0gMTtcbiAgICB0aGlzLl9hdmFpbGFibGVQcm9jZXNzTGlua1R5cGVzJC5uZXh0KHByb2Nlc3NMaW5rVHlwZXMpO1xuICAgIHRoaXMucHJvY2Vzc0xpbmtTdGVwU2VydmljZS5zZXRIYXNPbmVQcm9jZXNzTGlua1R5cGUoaGFzT25lT3B0aW9uKTtcblxuICAgIGlmIChoYXNPbmVPcHRpb24pIHtcbiAgICAgIHRoaXMuc2VsZWN0UHJvY2Vzc0xpbmtUeXBlKHByb2Nlc3NMaW5rVHlwZXNbMF0ucHJvY2Vzc0xpbmtUeXBlLCBoYXNPbmVPcHRpb24pO1xuICAgIH1cbiAgfVxuXG4gIHNldEVsZW1lbnROYW1lKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX2VsZW1lbnROYW1lJC5uZXh0KG5hbWUpO1xuICB9XG5cbiAgc2hvd01vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuX3Nob3dNb2RhbCQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIGNsb3NlTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5fc2hvd01vZGFsJC5uZXh0KGZhbHNlKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH0sIDI0MCk7XG4gIH1cblxuICBzZWxlY3RQcm9jZXNzTGlua1R5cGUocHJvY2Vzc0xpbmtUeXBlSWQ6IHN0cmluZywgaGFzT25lT3B0aW9uPzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX3NlbGVjdGVkUHJvY2Vzc0xpbmtUeXBlSWQkLm5leHQocHJvY2Vzc0xpbmtUeXBlSWQpO1xuICAgIHRoaXMucHJvY2Vzc0xpbmtTdGVwU2VydmljZS5zZXRQcm9jZXNzTGlua1R5cGVTdGVwcyhwcm9jZXNzTGlua1R5cGVJZCwgaGFzT25lT3B0aW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRWaWV3TW9kZWxFbmFibGVkKHZpZXdNb2RlbEVuYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLl92aWV3TW9kZWxFbmFibGVkJC5uZXh0KHZpZXdNb2RlbEVuYWJsZWQpO1xuICB9XG5cbiAgcHVibGljIGdldCB2aWV3TW9kZWxFbmFibGVkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fdmlld01vZGVsRW5hYmxlZCQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHVybCQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fdXJsJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGNsZWFyU2VsZWN0ZWRQcm9jZXNzTGlua1R5cGUoKTogdm9pZCB7XG4gICAgdGhpcy5fc2VsZWN0ZWRQcm9jZXNzTGlua1R5cGVJZCQubmV4dCgnJyk7XG4gIH1cblxuICBzdGFydFNhdmluZygpOiB2b2lkIHtcbiAgICB0aGlzLl9zYXZpbmckLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5wcm9jZXNzTGlua1N0ZXBTZXJ2aWNlLmRpc2FibGVTdGVwcygpO1xuICB9XG5cbiAgc3RvcFNhdmluZygpOiB2b2lkIHtcbiAgICB0aGlzLl9zYXZpbmckLm5leHQoZmFsc2UpO1xuICAgIHRoaXMucHJvY2Vzc0xpbmtTdGVwU2VydmljZS5lbmFibGVTdGVwcygpO1xuICB9XG5cbiAgc2V0SW5pdGlhbCgpOiB2b2lkIHtcbiAgICBjb25zdCBhdmFpbGFibGVUeXBlcyA9IHRoaXMuX2F2YWlsYWJsZVByb2Nlc3NMaW5rVHlwZXMkLmdldFZhbHVlKCk7XG4gICAgdGhpcy5idXR0b25TZXJ2aWNlLnJlc2V0QnV0dG9ucygpO1xuICAgIHRoaXMucHJvY2Vzc0xpbmtTdGVwU2VydmljZS5zZXRJbml0aWFsU3RlcHMoYXZhaWxhYmxlVHlwZXMpO1xuICB9XG5cbiAgc2V0TW9kYWxQYXJhbXMocGFyYW1zOiBNb2RhbFBhcmFtcyk6IHZvaWQge1xuICAgIHRoaXMuX21vZGFsUGFyYW1zJC5uZXh0KHBhcmFtcyk7XG4gIH1cblxuICBzZWxlY3RQcm9jZXNzTGluayhwcm9jZXNzTGluazogUHJvY2Vzc0xpbmspOiB2b2lkIHtcbiAgICB0aGlzLl9zZWxlY3RlZFByb2Nlc3NMaW5rJC5uZXh0KHByb2Nlc3NMaW5rKTtcbiAgICB0aGlzLnBsdWdpblN0YXRlU2VydmljZS5zZWxlY3RQcm9jZXNzTGluayhwcm9jZXNzTGluayk7XG4gICAgdGhpcy5zZXRWaWV3TW9kZWxFbmFibGVkKHByb2Nlc3NMaW5rLnZpZXdNb2RlbEVuYWJsZWQpO1xuICAgIHRoaXMuX3VybCQubmV4dChwcm9jZXNzTGluay51cmwpO1xuICB9XG5cbiAgZGVzZWxlY3RQcm9jZXNzTGluaygpOiB2b2lkIHtcbiAgICB0aGlzLl9zZWxlY3RlZFByb2Nlc3NMaW5rJC5uZXh0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5wbHVnaW5TdGF0ZVNlcnZpY2UuZGVzZWxlY3RQcm9jZXNzTGluaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuQXZhaWxhYmxlUHJvY2Vzc0xpbmtUeXBlc1N1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9hdmFpbGFibGVQcm9jZXNzTGlua1R5cGVzU3Vic2NyaXB0aW9uID0gdGhpcy5fYXZhaWxhYmxlUHJvY2Vzc0xpbmtUeXBlcyQuc3Vic2NyaWJlKFxuICAgICAgYXZhaWxhYmxlUHJvY2Vzc0xpbmtUeXBlcyA9PiB7XG4gICAgICAgIGlmIChhdmFpbGFibGVQcm9jZXNzTGlua1R5cGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICB0aGlzLnNldEluaXRpYWwoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0QXZhaWxhYmxlUHJvY2Vzc0xpbmtUeXBlcyhbXSk7XG4gICAgdGhpcy5wcm9jZXNzTGlua1N0ZXBTZXJ2aWNlLnJlc2V0KCk7XG4gICAgdGhpcy5zdG9wU2F2aW5nKCk7XG4gICAgdGhpcy5idXR0b25TZXJ2aWNlLnJlc2V0QnV0dG9ucygpO1xuICAgIHRoaXMuY2xlYXJTZWxlY3RlZFByb2Nlc3NMaW5rVHlwZSgpO1xuICAgIHRoaXMuZGVzZWxlY3RQcm9jZXNzTGluaygpO1xuICB9XG59XG4iXX0=
@@ -1,269 +0,0 @@
1
- /*
2
- * Copyright 2015-2024 Ritense BV, the Netherlands.
3
- *
4
- * Licensed under EUPL, Version 1.2 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" basis,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { Injectable } from '@angular/core';
17
- import { BehaviorSubject, combineLatest, filter, map } from 'rxjs';
18
- import { take } from 'rxjs/operators';
19
- import * as i0 from "@angular/core";
20
- import * as i1 from "@ngx-translate/core";
21
- import * as i2 from "./process-link-button.service";
22
- import * as i3 from "./plugin-state.service";
23
- import * as i4 from "@valtimo/plugin";
24
- export class ProcessLinkStepService {
25
- get steps$() {
26
- return combineLatest([
27
- this._steps$,
28
- this._disableSteps$,
29
- this.translateService.stream('key'),
30
- ]).pipe(filter(([steps]) => !!steps), map(([steps, disableSteps]) => steps.map(step => ({
31
- ...step,
32
- disabled: disableSteps,
33
- label: this.translateService.instant(`processLinkSteps.${step.label}`),
34
- ...(step.secondaryLabel && {
35
- secondaryLabel: this.translateService.instant(step.secondaryLabel),
36
- }),
37
- }))));
38
- }
39
- get currentStepIndex$() {
40
- return this._currentStepIndex$.asObservable();
41
- }
42
- get currentStepId$() {
43
- return combineLatest([this._steps$, this.currentStepIndex$]).pipe(filter(([steps, currentStepIndex]) => !!steps && typeof currentStepIndex === 'number'), map(([steps, currentStepIndex]) => steps.length > 0 ? steps[currentStepIndex]?.label : ''));
44
- }
45
- get hasOneProcessLinkType$() {
46
- return this._hasOneProcessLinkType$.asObservable();
47
- }
48
- constructor(translateService, buttonService, pluginStateService, pluginTranslateService) {
49
- this.translateService = translateService;
50
- this.buttonService = buttonService;
51
- this.pluginStateService = pluginStateService;
52
- this.pluginTranslateService = pluginTranslateService;
53
- this._steps$ = new BehaviorSubject(undefined);
54
- this._currentStepIndex$ = new BehaviorSubject(0);
55
- this._disableSteps$ = new BehaviorSubject(false);
56
- this._hasOneProcessLinkType$ = new BehaviorSubject(false);
57
- }
58
- reset() {
59
- this._currentStepIndex$.next(0);
60
- this._steps$.next([]);
61
- }
62
- setInitialSteps(availableProcessLinkTypes) {
63
- if (availableProcessLinkTypes.length > 1) {
64
- this.setChoiceSteps();
65
- }
66
- }
67
- setFormSteps() {
68
- this._steps$.next([
69
- { label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.form' },
70
- { label: 'selectForm' },
71
- ]);
72
- this._currentStepIndex$.next(1);
73
- }
74
- setSingleFormStep() {
75
- this._steps$.next([{ label: 'selectForm' }]);
76
- this._currentStepIndex$.next(0);
77
- }
78
- setUIComponentStep() {
79
- this._steps$.next([
80
- { label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.ui-component' },
81
- { label: 'uiComponent' },
82
- ]);
83
- this._currentStepIndex$.next(1);
84
- }
85
- setFormFlowSteps() {
86
- this._steps$.next([
87
- { label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.form-flow' },
88
- { label: 'selectFormFlow' },
89
- ]);
90
- this._currentStepIndex$.next(1);
91
- }
92
- setSingleFormFlowStep() {
93
- this._steps$.next([{ label: 'selectFormFlow' }]);
94
- this._currentStepIndex$.next(0);
95
- }
96
- setChoosePluginConfigurationSteps() {
97
- this._steps$.next([
98
- { label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.plugin' },
99
- { label: 'choosePluginConfiguration' },
100
- { label: 'choosePluginAction', disabled: true },
101
- { label: 'configurePluginAction', disabled: true },
102
- ]);
103
- this._currentStepIndex$.next(1);
104
- }
105
- setSingleChoosePluginConfigurationSteps() {
106
- this._steps$.next([
107
- { label: 'choosePluginConfiguration' },
108
- { label: 'choosePluginAction', disabled: true },
109
- { label: 'configurePluginAction', disabled: true },
110
- ]);
111
- this._currentStepIndex$.next(0);
112
- }
113
- setChoosePluginActionSteps() {
114
- combineLatest([
115
- this._hasOneProcessLinkType$,
116
- this.pluginStateService.selectedPluginConfiguration$,
117
- ])
118
- .pipe(take(1))
119
- .subscribe(([hasOneType, selectedConfiguration]) => {
120
- if (hasOneType) {
121
- this._steps$.next([
122
- { label: 'choosePluginConfiguration', secondaryLabel: selectedConfiguration.title },
123
- { label: 'choosePluginAction' },
124
- { label: 'configurePluginAction', disabled: true },
125
- ]);
126
- this._currentStepIndex$.next(1);
127
- this.buttonService.showNextButton();
128
- this.buttonService.showBackButton();
129
- this.buttonService.hideSaveButton();
130
- this.buttonService.disableNextButton();
131
- }
132
- else {
133
- this._steps$.next([
134
- { label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.plugin' },
135
- { label: 'choosePluginConfiguration', secondaryLabel: selectedConfiguration.title },
136
- { label: 'choosePluginAction' },
137
- { label: 'configurePluginAction', disabled: true },
138
- ]);
139
- this._currentStepIndex$.next(2);
140
- this.buttonService.showNextButton();
141
- this.buttonService.showBackButton();
142
- this.buttonService.hideSaveButton();
143
- this.buttonService.disableNextButton();
144
- }
145
- });
146
- }
147
- setConfigurePluginActionSteps() {
148
- combineLatest([
149
- this._hasOneProcessLinkType$,
150
- this.pluginStateService.selectedPluginConfiguration$,
151
- this.pluginStateService.selectedPluginFunction$,
152
- ])
153
- .pipe(take(1))
154
- .subscribe(([hasOneType, selectedConfiguration, selectedFunction]) => {
155
- const selectedFunctionTranslation = this.pluginTranslateService.instant(selectedFunction.key, selectedConfiguration.pluginDefinition.key);
156
- if (hasOneType) {
157
- this._steps$.next([
158
- { label: 'choosePluginConfiguration', secondaryLabel: selectedConfiguration.title },
159
- { label: 'choosePluginAction', secondaryLabel: selectedFunctionTranslation },
160
- { label: 'configurePluginAction' },
161
- ]);
162
- this._currentStepIndex$.next(2);
163
- this.buttonService.hideNextButton();
164
- this.buttonService.showSaveButton();
165
- }
166
- else {
167
- this._steps$.next([
168
- { label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.plugin' },
169
- { label: 'choosePluginConfiguration', secondaryLabel: selectedConfiguration.title },
170
- { label: 'choosePluginAction', secondaryLabel: selectedFunctionTranslation },
171
- { label: 'configurePluginAction' },
172
- ]);
173
- this._currentStepIndex$.next(3);
174
- this.buttonService.hideNextButton();
175
- this.buttonService.showSaveButton();
176
- }
177
- });
178
- }
179
- setURLSteps() {
180
- this._steps$.next([
181
- { label: 'chooseProcessLinkType', secondaryLabel: 'processLinkType.url' },
182
- { label: 'selectURL' },
183
- ]);
184
- this._currentStepIndex$.next(1);
185
- }
186
- setSingleURLStep() {
187
- this._steps$.next([{ label: 'selectURL' }]);
188
- this._currentStepIndex$.next(0);
189
- }
190
- disableSteps() {
191
- this._disableSteps$.next(true);
192
- }
193
- enableSteps() {
194
- this._disableSteps$.next(false);
195
- }
196
- setHasOneProcessLinkType(hasOne) {
197
- this._hasOneProcessLinkType$.next(hasOne);
198
- }
199
- setProcessLinkTypeSteps(processLinkTypeId, hasOneOption) {
200
- switch (processLinkTypeId) {
201
- case 'form':
202
- if (hasOneOption) {
203
- this.setSingleFormStep();
204
- this.buttonService.hideBackButton();
205
- }
206
- else {
207
- this.setFormSteps();
208
- this.buttonService.showBackButton();
209
- }
210
- this.buttonService.showSaveButton();
211
- break;
212
- case 'form-flow':
213
- if (hasOneOption) {
214
- this.setSingleFormFlowStep();
215
- this.buttonService.hideSaveButton();
216
- this.buttonService.hideBackButton();
217
- }
218
- else {
219
- this.setFormFlowSteps();
220
- this.buttonService.showSaveButton();
221
- this.buttonService.showBackButton();
222
- }
223
- break;
224
- case 'plugin':
225
- if (hasOneOption) {
226
- this.setSingleChoosePluginConfigurationSteps();
227
- this.buttonService.hideBackButton();
228
- this.buttonService.showNextButton();
229
- }
230
- else {
231
- this.setChoosePluginConfigurationSteps();
232
- this.buttonService.showBackButton();
233
- this.buttonService.showNextButton();
234
- }
235
- break;
236
- case 'url':
237
- if (hasOneOption) {
238
- this.setSingleURLStep();
239
- this.buttonService.hideBackButton();
240
- this.buttonService.showSaveButton();
241
- }
242
- else {
243
- this.setURLSteps();
244
- this.buttonService.showBackButton();
245
- this.buttonService.showSaveButton();
246
- }
247
- break;
248
- case 'ui-component':
249
- this.setUIComponentStep();
250
- this.buttonService.showBackButton();
251
- this.buttonService.showSaveButton();
252
- break;
253
- }
254
- }
255
- setChoiceSteps() {
256
- this._steps$.next([
257
- { label: 'chooseProcessLinkType' },
258
- { label: 'empty', disabled: true },
259
- { label: 'empty', disabled: true },
260
- ]);
261
- this._currentStepIndex$.next(0);
262
- }
263
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ProcessLinkStepService, deps: [{ token: i1.TranslateService }, { token: i2.ProcessLinkButtonService }, { token: i3.PluginStateService }, { token: i4.PluginTranslationService }], target: i0.ɵɵFactoryTarget.Injectable }); }
264
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ProcessLinkStepService }); }
265
- }
266
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ProcessLinkStepService, decorators: [{
267
- type: Injectable
268
- }], ctorParameters: () => [{ type: i1.TranslateService }, { type: i2.ProcessLinkButtonService }, { type: i3.PluginStateService }, { type: i4.PluginTranslationService }] });
269
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy1saW5rLXN0ZXAuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vcHJvY2Vzcy1saW5rL3NyYy9saWIvc2VydmljZXMvcHJvY2Vzcy1saW5rLXN0ZXAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBYSxNQUFNLE1BQU0sQ0FBQztBQUk3RSxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7OztBQUtwQyxNQUFNLE9BQU8sc0JBQXNCO0lBTWpDLElBQUksTUFBTTtRQUNSLE9BQU8sYUFBYSxDQUFDO1lBQ25CLElBQUksQ0FBQyxPQUFPO1lBQ1osSUFBSSxDQUFDLGNBQWM7WUFDbkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDcEMsQ0FBQyxDQUFDLElBQUksQ0FDTCxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQzVCLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FDNUIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDakIsR0FBRyxJQUFJO1lBQ1AsUUFBUSxFQUFFLFlBQVk7WUFDdEIsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN0RSxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSTtnQkFDekIsY0FBYyxFQUFFLElBQUks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LElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3BDLE1BQU07UUFDVixDQUFDO0lBQ0gsQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDaEIsRUFBQyxLQUFLLEVBQUUsdUJBQXVCLEVBQUM7WUFDaEMsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUM7WUFDaEMsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUM7U0FDakMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxDQUFDOytHQTlRVSxzQkFBc0I7bUhBQXRCLHNCQUFzQjs7NEZBQXRCLHNCQUFzQjtrQkFEbEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1N0ZXB9IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZpbHRlciwgbWFwLCBPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7UHJvY2Vzc0xpbmtDb25maWd1cmF0aW9uU3RlcCwgUHJvY2Vzc0xpbmtUeXBlfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7UHJvY2Vzc0xpbmtCdXR0b25TZXJ2aWNlfSBmcm9tICcuL3Byb2Nlc3MtbGluay1idXR0b24uc2VydmljZSc7XG5pbXBvcnQge3Rha2V9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7UGx1Z2luU3RhdGVTZXJ2aWNlfSBmcm9tICcuL3BsdWdpbi1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7UGx1Z2luVHJhbnNsYXRpb25TZXJ2aWNlfSBmcm9tICdAdmFsdGltby9wbHVnaW4nO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUHJvY2Vzc0xpbmtTdGVwU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0ZXBzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8U3RlcD4+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2N1cnJlbnRTdGVwSW5kZXgkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNhYmxlU3RlcHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hhc09uZVByb2Nlc3NMaW5rVHlwZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBnZXQgc3RlcHMkKCk6IE9ic2VydmFibGU8QXJyYXk8U3RlcD4+IHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLl9zdGVwcyQsXG4gICAgICB0aGlzLl9kaXNhYmxlU3RlcHMkLFxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgna2V5JyksXG4gICAgXSkucGlwZShcbiAgICAgIGZpbHRlcigoW3N0ZXBzXSkgPT4gISFzdGVwcyksXG4gICAgICBtYXAoKFtzdGVwcywgZGlzYWJsZVN0ZXBzXSkgPT5cbiAgICAgICAgc3RlcHMubWFwKHN0ZXAgPT4gKHtcbiAgICAgICAgICAuLi5zdGVwLFxuICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlU3RlcHMsXG4gICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBwcm9jZXNzTGlua1N0ZXBzLiR7c3RlcC5sYWJlbH1gKSxcbiAgICAgICAgICAuLi4oc3RlcC5zZWNvbmRhcnlMYWJlbCAmJiB7XG4gICAgICAgICAgICBzZWNvbmRhcnlMYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoc3RlcC5zZWNvbmRhcnlMYWJlbCksXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBnZXQgY3VycmVudFN0ZXBJbmRleCQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFN0ZXBJbmRleCQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgY3VycmVudFN0ZXBJZCQoKTogT2JzZXJ2YWJsZTxQcm9jZXNzTGlua0NvbmZpZ3VyYXRpb25TdGVwIHwgJyc+IHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy5fc3RlcHMkLCB0aGlzLmN1cnJlbnRTdGVwSW5kZXgkXSkucGlwZShcbiAgICAgIGZpbHRlcigoW3N0ZXBzLCBjdXJyZW50U3RlcEluZGV4XSkgPT4gISFzdGVwcyAmJiB0eXBlb2YgY3VycmVudFN0ZXBJbmRleCA9PT0gJ251bWJlcicpLFxuICAgICAgbWFwKChbc3RlcHMsIGN1cnJlbnRTdGVwSW5kZXhdKSA9PlxuICAgICAgICBzdGVwcy5sZW5ndGggPiAwID8gKHN0ZXBzW2N1cnJlbnRTdGVwSW5kZXhdPy5sYWJlbCBhcyBQcm9jZXNzTGlua0NvbmZpZ3VyYXRpb25TdGVwKSA6ICcnXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGdldCBoYXNPbmVQcm9jZXNzTGlua1R5cGUkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9oYXNPbmVQcm9jZXNzTGlua1R5cGUkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYnV0dG9uU2VydmljZTogUHJvY2Vzc0xpbmtCdXR0b25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luU3RhdGVTZXJ2aWNlOiBQbHVnaW5TdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5UcmFuc2xhdGVTZXJ2aWNlOiBQbHVnaW5UcmFuc2xhdGlvblNlcnZpY2VcbiAgKSB7fVxuXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuX2N1cnJlbnRTdGVwSW5kZXgkLm5leHQoMCk7XG4gICAgdGhpcy5fc3RlcHMkLm5leHQoW10pO1xuICB9XG5cbiAgc2V0SW5pdGlhbFN0ZXBzKGF2YWlsYWJsZVByb2Nlc3NMaW5rVHlwZXM6IEFycmF5PFByb2Nlc3NMaW5rVHlwZT4pOiB2b2lkIHtcbiAgICBpZiAoYXZhaWxhYmxlUHJvY2Vzc0xpbmtUeXBlcy5sZW5ndGggPiAxKSB7XG4gICAgICB0aGlzLnNldENob2ljZVN0ZXBzKCk7XG4gICAgfVxuICB9XG5cbiAgc2V0Rm9ybVN0ZXBzKCk6IHZvaWQge1xuICAgIHRoaXMuX3N0ZXBzJC5uZXh0KFtcbiAgICAgIHtsYWJlbDogJ2Nob29zZVByb2Nlc3NMaW5rVHlwZScsIHNlY29uZGFyeUxhYmVsOiAncHJvY2Vzc0xpbmtUeXBlLmZvcm0nfSxcbiAgICAgIHtsYWJlbDogJ3NlbGVjdEZvcm0nfSxcbiAgICBdKTtcbiAgICB0aGlzLl9jdXJyZW50U3RlcEluZGV4JC5uZXh0KDEpO1xuICB9XG5cbiAgc2V0U2luZ2xlRm9ybVN0ZXAoKTogdm9pZCB7XG4gICAgdGhpcy5fc3RlcHMkLm5leHQoW3tsYWJlbDogJ3NlbGVjdEZvcm0nfV0pO1xuICAgIHRoaXMuX2N1cnJlbnRTdGVwSW5kZXgkLm5leHQoMCk7XG4gIH1cblxuICBzZXRVSUNvbXBvbmVudFN0ZXAoKTogdm9pZCB7XG4gICAgdGhpcy5fc3RlcHMkLm5leHQoW1xuICAgICAge2xhYmVsOiAnY2hvb3NlUHJvY2Vzc0xpbmtUeXBlJywgc2Vjb25kYXJ5TGFiZWw6ICdwcm9jZXNzTGlua1R5cGUudWktY29tcG9uZW50J30sXG4gICAgICB7bGFiZWw6ICd1aUNvbXBvbmVudCd9LFxuICAgIF0pO1xuICAgIHRoaXMuX2N1cnJlbnRTdGVwSW5kZXgkLm5leHQoMSk7XG4gIH1cblxuICBzZXRGb3JtRmxvd1N0ZXBzKCk6IHZvaWQge1xuICAgIHRoaXMuX3N0ZXBzJC5uZXh0KFtcbiAgICAgIHtsYWJlbDogJ2Nob29zZVByb2Nlc3NMaW5rVHlwZScsIHNlY29uZGFyeUxhYmVsOiAncHJvY2Vzc0xpbmtUeXBlLmZvcm0tZmxvdyd9LFxuICAgICAge2xhYmVsOiAnc2VsZWN0Rm9ybUZsb3cnfSxcbiAgICBdKTtcbiAgICB0aGlzLl9jdXJyZW50U3RlcEluZGV4JC5uZXh0KDEpO1xuICB9XG5cbiAgc2V0U2luZ2xlRm9ybUZsb3dTdGVwKCk6IHZvaWQge1xuICAgIHRoaXMuX3N0ZXBzJC5uZXh0KFt7bGFiZWw6ICdzZWxlY3RGb3JtRmxvdyd9XSk7XG4gICAgdGhpcy5fY3VycmVudFN0ZXBJbmRleCQubmV4dCgwKTtcbiAgfVxuXG4gIHNldENob29zZVBsdWdpbkNvbmZpZ3VyYXRpb25TdGVwcygpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGVwcyQubmV4dChbXG4gICAgICB7bGFiZWw6ICdjaG9vc2VQcm9jZXNzTGlua1R5cGUnLCBzZWNvbmRhcnlMYWJlbDogJ3Byb2Nlc3NMaW5rVHlwZS5wbHVnaW4nfSxcbiAgICAgIHtsYWJlbDogJ2Nob29zZVBsdWdpbkNvbmZpZ3VyYXRpb24nfSxcbiAgICAgIHtsYWJlbDogJ2Nob29zZVBsdWdpbkFjdGlvbicsIGRpc2FibGVkOiB0cnVlfSxcbiAgICAgIHtsYWJlbDogJ2NvbmZpZ3VyZVBsdWdpbkFjdGlvbicsIGRpc2FibGVkOiB0cnVlfSxcbiAgICBdKTtcbiAgICB0aGlzLl9jdXJyZW50U3RlcEluZGV4JC5uZXh0KDEpO1xuICB9XG5cbiAgc2V0U2luZ2xlQ2hvb3NlUGx1Z2luQ29uZmlndXJhdGlvblN0ZXBzKCk6IHZvaWQge1xuICAgIHRoaXMuX3N0ZXBzJC5uZXh0KFtcbiAgICAgIHtsYWJlbDogJ2Nob29zZVBsdWdpbkNvbmZpZ3VyYXRpb24nfSxcbiAgICAgIHtsYWJlbDogJ2Nob29zZVBsdWdpbkFjdGlvbicsIGRpc2FibGVkOiB0cnVlfSxcbiAgICAgIHtsYWJlbDogJ2NvbmZpZ3VyZVBsdWdpbkFjdGlvbicsIGRpc2FibGVkOiB0cnVlfSxcbiAgICBdKTtcbiAgICB0aGlzLl9jdXJyZW50U3RlcEluZGV4JC5uZXh0KDApO1xuICB9XG5cbiAgc2V0Q2hvb3NlUGx1Z2luQWN0aW9uU3RlcHMoKTogdm9pZCB7XG4gICAgY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLl9oYXNPbmVQcm9jZXNzTGlua1R5cGUkLFxuICAgICAgdGhpcy5wbHVnaW5TdGF0ZVNlcnZpY2Uuc2VsZWN0ZWRQbHVnaW5Db25maWd1cmF0aW9uJCxcbiAgICBdKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKFtoYXNPbmVUeXBlLCBzZWxlY3RlZENvbmZpZ3VyYXRpb25dKSA9PiB7XG4gICAgICAgIGlmIChoYXNPbmVUeXBlKSB7XG4gICAgICAgICAgdGhpcy5fc3RlcHMkLm5leHQoW1xuICAgICAgICAgICAge2xhYmVsOiAnY2hvb3NlUGx1Z2luQ29uZmlndXJhdGlvbicsIHNlY29uZGFyeUxhYmVsOiBzZWxlY3RlZENvbmZpZ3VyYXRpb24udGl0bGV9LFxuICAgICAgICAgICAge2xhYmVsOiAnY2hvb3NlUGx1Z2luQWN0aW9uJ30sXG4gICAgICAgICAgICB7bGFiZWw6ICdjb25maWd1cmVQbHVnaW5BY3Rpb24nLCBkaXNhYmxlZDogdHJ1ZX0sXG4gICAgICAgICAgXSk7XG4gICAgICAgICAgdGhpcy5fY3VycmVudFN0ZXBJbmRleCQubmV4dCgxKTtcbiAgICAgICAgICB0aGlzLmJ1dHRvblNlcnZpY2Uuc2hvd05leHRCdXR0b24oKTtcbiAgICAgICAgICB0aGlzLmJ1dHRvblNlcnZpY2Uuc2hvd0JhY2tCdXR0b24oKTtcbiAgICAgICAgICB0aGlzLmJ1dHRvblNlcnZpY2UuaGlkZVNhdmVCdXR0b24oKTtcbiAgICAgICAgICB0aGlzLmJ1dHRvblNlcnZpY2UuZGlzYWJsZU5leHRCdXR0b24oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9zdGVwcyQubmV4dChbXG4gICAgICAgICAgICB7bGFiZWw6ICdjaG9vc2VQcm9jZXNzTGlua1R5cGUnLCBzZWNvbmRhcnlMYWJlbDogJ3Byb2Nlc3NMaW5rVHlwZS5wbHVnaW4nfSxcbiAgICAgICAgICAgIHtsYWJlbDogJ2Nob29zZVBsdWdpbkNvbmZpZ3VyYXRpb24nLCBzZWNvbmRhcnlMYWJlbDogc2VsZWN0ZWRDb25maWd1cmF0aW9uLnRpdGxlfSxcbiAgICAgICAgICAgIHtsYWJlbDogJ2Nob29zZVBsdWdpbkFjdGlvbid9LFxuICAgICAgICAgICAge2xhYmVsOiAnY29uZmlndXJlUGx1Z2luQWN0aW9uJywgZGlzYWJsZWQ6IHRydWV9LFxuICAgICAgICAgIF0pO1xuICAgICAgICAgIHRoaXMuX2N1cnJlbnRTdGVwSW5kZXgkLm5leHQoMik7XG4gICAgICAgICAgdGhpcy5idXR0b25TZXJ2aWNlLnNob3dOZXh0QnV0dG9uKCk7XG4gICAgICAgICAgdGhpcy5idXR0b25TZXJ2aWNlLnNob3dCYWNrQnV0dG9uKCk7XG5cbiAgICAgICAgICB0aGlzLmJ1dHRvblNlcnZpY2UuaGlkZVNhdmVCdXR0b24oKTtcbiAgICAgICAgICB0aGlzLmJ1dHRvblNlcnZpY2UuZGlzYWJsZU5leHRCdXR0b24oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBzZXRDb25maWd1cmVQbHVnaW5BY3Rpb25TdGVwcygpOiB2b2lkIHtcbiAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuX2hhc09uZVByb2Nlc3NMaW5rVHlwZSQsXG4gICAgICB0aGlzLnBsdWdpblN0YXRlU2VydmljZS5zZWxlY3RlZFBsdWdpbkNvbmZpZ3VyYXRpb24kLFxuICAgICAgdGhpcy5wbHVnaW5TdGF0ZVNlcnZpY2Uuc2VsZWN0ZWRQbHVnaW5GdW5jdGlvbiQsXG4gICAgXSlcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKChbaGFzT25lVHlwZSwgc2VsZWN0ZWRDb25maWd1cmF0aW9uLCBzZWxlY3RlZEZ1bmN0aW9uXSkgPT4ge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEZ1bmN0aW9uVHJhbnNsYXRpb24gPSB0aGlzLnBsdWdpblRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICBzZWxlY3RlZEZ1bmN0aW9uLmtleSxcbiAgICAgICAgICBzZWxlY3RlZENvbmZpZ3VyYXRpb24ucGx1Z2luRGVmaW5pdGlvbi5rZXlcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoaGFzT25lVHlwZSkge1xuICAgICAgICAgIHRoaXMuX3N0ZXBzJC5uZXh0KFtcbiAgICAgICAgICAgIHtsYWJlbDogJ2Nob29zZVBsdWdpbkNvbmZpZ3VyYXRpb24nLCBzZWNvbmRhcnlMYWJlbDogc2VsZWN0ZWRDb25maWd1cmF0aW9uLnRpdGxlfSxcbiAgICAgICAgICAgIHtsYWJlbDogJ2Nob29zZVBsdWdpbkFjdGlvbicsIHNlY29uZGFyeUxhYmVsOiBzZWxlY3RlZEZ1bmN0aW9uVHJhbnNsYXRpb259LFxuICAgICAgICAgICAge2xhYmVsOiAnY29uZmlndXJlUGx1Z2luQWN0aW9uJ30sXG4gICAgICAgICAgXSk7XG4gICAgICAgICAgdGhpcy5fY3VycmVudFN0ZXBJbmRleCQubmV4dCgyKTtcbiAgICAgICAgICB0aGlzLmJ1dHRvblNlcnZpY2UuaGlkZU5leHRCdXR0b24oKTtcbiAgICAgICAgICB0aGlzLmJ1dHRvblNlcnZpY2Uuc2hvd1NhdmVCdXR0b24oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9zdGVwcyQubmV4dChbXG4gICAgICAgICAgICB7bGFiZWw6ICdjaG9vc2VQcm9jZXNzTGlua1R5cGUnLCBzZWNvbmRhcnlMYWJlbDogJ3Byb2Nlc3NMaW5rVHlwZS5wbHVnaW4nfSxcbiAgICAgICAgICAgIHtsYWJlbDogJ2Nob29zZVBsdWdpbkNvbmZpZ3VyYXRpb24nLCBzZWNvbmRhcnlMYWJlbDogc2VsZWN0ZWRDb25maWd1cmF0aW9uLnRpdGxlfSxcbiAgICAgICAgICAgIHtsYWJlbDogJ2Nob29zZVBsdWdpbkFjdGlvbicsIHNlY29uZGFyeUxhYmVsOiBzZWxlY3RlZEZ1bmN0aW9uVHJhbnNsYXRpb259LFxuICAgICAgICAgICAge2xhYmVsOiAnY29uZmlndXJlUGx1Z2luQWN0aW9uJ30sXG4gICAgICAgICAgXSk7XG4gICAgICAgICAgdGhpcy5fY3VycmVudFN0ZXBJbmRleCQubmV4dCgzKTtcbiAgICAgICAgICB0aGlzLmJ1dHRvblNlcnZpY2UuaGlkZU5leHRCdXR0b24oKTtcbiAgICAgICAgICB0aGlzLmJ1dHRvblNlcnZpY2Uuc2hvd1NhdmVCdXR0b24oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2V0VVJMU3RlcHMoKTogdm9pZCB7XG4gICAgdGhpcy5fc3RlcHMkLm5leHQoW1xuICAgICAge2xhYmVsOiAnY2hvb3NlUHJvY2Vzc0xpbmtUeXBlJywgc2Vjb25kYXJ5TGFiZWw6ICdwcm9jZXNzTGlua1R5cGUudXJsJ30sXG4gICAgICB7bGFiZWw6ICdzZWxlY3RVUkwnfSxcbiAgICBdKTtcbiAgICB0aGlzLl9jdXJyZW50U3RlcEluZGV4JC5uZXh0KDEpO1xuICB9XG5cbiAgcHVibGljIHNldFNpbmdsZVVSTFN0ZXAoKTogdm9pZCB7XG4gICAgdGhpcy5fc3RlcHMkLm5leHQoW3tsYWJlbDogJ3NlbGVjdFVSTCd9XSk7XG4gICAgdGhpcy5fY3VycmVudFN0ZXBJbmRleCQubmV4dCgwKTtcbiAgfVxuXG4gIGRpc2FibGVTdGVwcygpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNhYmxlU3RlcHMkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBlbmFibGVTdGVwcygpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNhYmxlU3RlcHMkLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgc2V0SGFzT25lUHJvY2Vzc0xpbmtUeXBlKGhhc09uZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX2hhc09uZVByb2Nlc3NMaW5rVHlwZSQubmV4dChoYXNPbmUpO1xuICB9XG5cbiAgc2V0UHJvY2Vzc0xpbmtUeXBlU3RlcHMocHJvY2Vzc0xpbmtUeXBlSWQ6IHN0cmluZywgaGFzT25lT3B0aW9uPzogYm9vbGVhbik6IHZvaWQge1xuICAgIHN3aXRjaCAocHJvY2Vzc0xpbmtUeXBlSWQpIHtcbiAgICAgIGNhc2UgJ2Zvcm0nOlxuICAgICAgICBpZiAoaGFzT25lT3B0aW9uKSB7XG4gICAgICAgICAgdGhpcy5zZXRTaW5nbGVGb3JtU3RlcCgpO1xuICAgICAgICAgIHRoaXMuYnV0dG9uU2VydmljZS5oaWRlQmFja0J1dHRvbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2V0Rm9ybVN0ZXBzKCk7XG4gICAgICAgICAgdGhpcy5idXR0b25TZXJ2aWNlLnNob3dCYWNrQnV0dG9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5idXR0b25TZXJ2aWNlLnNob3dTYXZlQnV0dG9uKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZm9ybS1mbG93JzpcbiAgICAgICAgaWYgKGhhc09uZU9wdGlvbikge1xuICAgICAgICAgIHRoaXMuc2V0U2luZ2xlRm9ybUZsb3dTdGVwKCk7XG4gICAgICAgICAgdGhpcy5idXR0b25TZXJ2aWNlLmhpZGVTYXZlQnV0dG9uKCk7XG4gICAgICAgICAgdGhpcy5idXR0b25TZXJ2aWNlLmhpZGVCYWNrQnV0dG9uKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXRGb3JtRmxvd1N0ZXBzKCk7XG4gICAgICAgICAgdGhpcy5idXR0b25TZXJ2aWNlLnNob3dTYXZlQnV0dG9uKCk7XG4gICAgICAgICAgdGhpcy5idXR0b25TZXJ2aWNlLnNob3dCYWNrQnV0dG9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwbHVnaW4nOlxuICAgICAgICBpZiAoaGFzT25lT3B0aW9uKSB7XG4gICAgICAgICAgdGhpcy5zZXRTaW5nbGVDaG9vc2VQbHVnaW5Db25maWd1cmF0aW9uU3RlcHMoKTtcbiAgICAgICAgICB0aGlzLmJ1dHRvblNlcnZpY2UuaGlkZUJhY2tCdXR0b24oKTtcbiAgICAgICAgICB0aGlzLmJ1dHRvblNlcnZpY2Uuc2hvd05leHRCdXR0b24oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldENob29zZVBsdWdpbkNvbmZpZ3VyYXRpb25TdGVwcygpO1xuICAgICAgICAgIHRoaXMuYnV0dG9uU2VydmljZS5zaG93QmFja0J1dHRvbigpO1xuICAgICAgICAgIHRoaXMuYnV0dG9uU2VydmljZS5zaG93TmV4dEJ1dHRvbigpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndXJsJzpcbiAgICAgICAgaWYgKGhhc09uZU9wdGlvbikge1xuICAgICAgICAgIHRoaXMuc2V0U2luZ2xlVVJMU3RlcCgpO1xuICAgICAgICAgIHRoaXMuYnV0dG9uU2VydmljZS5oaWRlQmFja0J1dHRvbigpO1xuICAgICAgICAgIHRoaXMuYnV0dG9uU2VydmljZS5zaG93U2F2ZUJ1dHRvbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2V0VVJMU3RlcHMoKTtcbiAgICAgICAgICB0aGlzLmJ1dHRvblNlcnZpY2Uuc2hvd0JhY2tCdXR0b24oKTtcbiAgICAgICAgICB0aGlzLmJ1dHRvblNlcnZpY2Uuc2hvd1NhdmVCdXR0b24oKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3VpLWNvbXBvbmVudCc6XG4gICAgICAgIHRoaXMuc2V0VUlDb21wb25lbnRTdGVwKCk7XG4gICAgICAgIHRoaXMuYnV0dG9uU2VydmljZS5zaG93QmFja0J1dHRvbigpO1xuICAgICAgICB0aGlzLmJ1dHRvblNlcnZpY2Uuc2hvd1NhdmVCdXR0b24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRDaG9pY2VTdGVwcygpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGVwcyQubmV4dChbXG4gICAgICB7bGFiZWw6ICdjaG9vc2VQcm9jZXNzTGlua1R5cGUnfSxcbiAgICAgIHtsYWJlbDogJ2VtcHR5JywgZGlzYWJsZWQ6IHRydWV9LFxuICAgICAge2xhYmVsOiAnZW1wdHknLCBkaXNhYmxlZDogdHJ1ZX0sXG4gICAgXSk7XG4gICAgdGhpcy5fY3VycmVudFN0ZXBJbmRleCQubmV4dCgwKTtcbiAgfVxufVxuIl19