@valtimo/plugin-management 5.2.0 → 5.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/esm2020/lib/components/plugin-add-modal/plugin-add-modal.component.mjs +38 -11
  2. package/esm2020/lib/components/plugin-add-select/plugin-add-select.component.mjs +5 -5
  3. package/esm2020/lib/components/plugin-configure/plugin-configure.component.mjs +23 -23
  4. package/esm2020/lib/components/plugin-management/plugin-management.component.mjs +12 -11
  5. package/esm2020/lib/models/index.mjs +6 -2
  6. package/esm2020/lib/models/plugin-modal.model.mjs +6 -2
  7. package/esm2020/lib/models/plugin.model.mjs +6 -2
  8. package/esm2020/lib/plugin-management-routing.mjs +10 -6
  9. package/esm2020/lib/plugin-management.module.mjs +15 -8
  10. package/esm2020/lib/services/index.mjs +6 -2
  11. package/esm2020/lib/services/plugin-management-state.service.mjs +20 -31
  12. package/esm2020/lib/services/plugin-management.service.mjs +22 -60
  13. package/esm2020/public-api.mjs +6 -2
  14. package/fesm2015/valtimo-plugin-management.mjs +145 -145
  15. package/fesm2015/valtimo-plugin-management.mjs.map +1 -1
  16. package/fesm2020/valtimo-plugin-management.mjs +158 -147
  17. package/fesm2020/valtimo-plugin-management.mjs.map +1 -1
  18. package/lib/components/plugin-add-modal/plugin-add-modal.component.d.ts +10 -3
  19. package/lib/components/plugin-add-modal/plugin-add-modal.component.d.ts.map +1 -1
  20. package/lib/components/plugin-configure/plugin-configure.component.d.ts +10 -6
  21. package/lib/components/plugin-configure/plugin-configure.component.d.ts.map +1 -1
  22. package/lib/components/plugin-management/plugin-management.component.d.ts +5 -3
  23. package/lib/components/plugin-management/plugin-management.component.d.ts.map +1 -1
  24. package/lib/models/index.d.ts.map +1 -1
  25. package/lib/models/plugin-modal.model.d.ts.map +1 -1
  26. package/lib/models/plugin.model.d.ts +8 -2
  27. package/lib/models/plugin.model.d.ts.map +1 -1
  28. package/lib/plugin-management-routing.d.ts.map +1 -1
  29. package/lib/plugin-management.module.d.ts +1 -1
  30. package/lib/plugin-management.module.d.ts.map +1 -1
  31. package/lib/services/index.d.ts.map +1 -1
  32. package/lib/services/plugin-management-state.service.d.ts +1 -7
  33. package/lib/services/plugin-management-state.service.d.ts.map +1 -1
  34. package/lib/services/plugin-management.service.d.ts +7 -4
  35. package/lib/services/plugin-management.service.d.ts.map +1 -1
  36. package/package.json +1 -1
  37. package/public-api.d.ts.map +1 -1
@@ -1,20 +1,23 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, Component, ViewContainerRef, ViewChild, NgModule } from '@angular/core';
3
- import { of, combineLatest, Subject, BehaviorSubject } from 'rxjs';
4
- import { delay, map, take, tap } from 'rxjs/operators';
5
- import * as i1 from '@valtimo/plugin';
6
- import { PluginTranslatePipeModule } from '@valtimo/plugin';
7
- import * as i2 from '@angular/platform-browser';
2
+ import { Injectable, Component, EventEmitter, Output, ViewChild, NgModule } from '@angular/core';
3
+ import { combineLatest, Subject, BehaviorSubject } from 'rxjs';
4
+ import { map, take, switchMap, tap } from 'rxjs/operators';
5
+ import * as i1 from '@valtimo/config';
6
+ import { ROLE_ADMIN } from '@valtimo/config';
7
+ import * as i2 from '@valtimo/plugin';
8
+ import { PluginTranslatePipeModule, PluginConfigurationContainerModule } from '@valtimo/plugin';
9
+ import * as i3 from '@angular/platform-browser';
10
+ import * as i4 from '@angular/common/http';
8
11
  import * as i1$1 from '@angular/router';
9
12
  import { RouterModule } from '@angular/router';
10
- import * as i4 from '@angular/common';
13
+ import * as i4$1 from '@angular/common';
11
14
  import { CommonModule } from '@angular/common';
12
15
  import { AuthGuardService } from '@valtimo/security';
13
- import { ROLE_ADMIN } from '@valtimo/config';
14
16
  import * as i2$1 from '@ngx-translate/core';
15
17
  import { TranslateModule } from '@ngx-translate/core';
16
18
  import * as i2$2 from '@valtimo/user-interface';
17
19
  import { PageModule, ParagraphModule, TitleModule, TableModule, StepperModule, ModalModule, ButtonModule, CardModule } from '@valtimo/user-interface';
20
+ import * as i3$1 from 'ngx-logger';
18
21
  import * as i5 from '@angular/flex-layout/flex';
19
22
  import { FlexLayoutModule } from '@angular/flex-layout';
20
23
 
@@ -27,7 +30,11 @@ import { FlexLayoutModule } from '@angular/flex-layout';
27
30
  *
28
31
  * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
29
32
  *
30
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions and limitations under the License.
33
+ * Unless required by applicable law or agreed to in writing, software
34
+ * distributed under the License is distributed on an "AS IS" basis,
35
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
36
+ * See the License for the specific language governing permissions and
37
+ * limitations under the License.
31
38
  */
32
39
 
33
40
  /*
@@ -39,7 +46,11 @@ import { FlexLayoutModule } from '@angular/flex-layout';
39
46
  *
40
47
  * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
41
48
  *
42
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions and limitations under the License.
49
+ * Unless required by applicable law or agreed to in writing, software
50
+ * distributed under the License is distributed on an "AS IS" basis,
51
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
52
+ * See the License for the specific language governing permissions and
53
+ * limitations under the License.
43
54
  */
44
55
 
45
56
  /*
@@ -51,7 +62,11 @@ import { FlexLayoutModule } from '@angular/flex-layout';
51
62
  *
52
63
  * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
53
64
  *
54
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions and limitations under the License.
65
+ * Unless required by applicable law or agreed to in writing, software
66
+ * distributed under the License is distributed on an "AS IS" basis,
67
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
68
+ * See the License for the specific language governing permissions and
69
+ * limitations under the License.
55
70
  */
56
71
 
57
72
  /*
@@ -70,71 +85,31 @@ import { FlexLayoutModule } from '@angular/flex-layout';
70
85
  * limitations under the License.
71
86
  */
72
87
  class PluginManagementService {
73
- constructor(pluginService, sanitizer) {
88
+ constructor(configService, pluginService, sanitizer, http) {
89
+ this.configService = configService;
74
90
  this.pluginService = pluginService;
75
91
  this.sanitizer = sanitizer;
76
- this.OPEN_ZAAK_CONFIGURATIONS = [
77
- {
78
- definitionKey: 'openzaak',
79
- key: '1ebdad87-3899-4ab7-b4ad-403237b17dbd',
80
- title: 'Den Haag Open Zaak 1',
81
- },
82
- {
83
- definitionKey: 'openzaak',
84
- key: '1ebdad87-3899-4ab7-b4ad-403237b17dbe',
85
- title: 'Den Haag Open Zaak 2',
86
- },
87
- {
88
- definitionKey: 'openzaak',
89
- key: '1ebdad87-3899-4ab7-b4ad-403237b17dbf',
90
- title: 'Den Haag Open Zaak 3',
91
- },
92
- {
93
- definitionKey: 'openzaak',
94
- key: '1ebdad87-3899-4ab7-b4ad-403237b17dbg',
95
- title: 'Den Haag Open Zaak 4',
96
- },
97
- {
98
- definitionKey: 'openzaak',
99
- key: '1ebdad87-3899-4ab7-b4ad-403237b17dbh',
100
- title: 'Den Haag Open Zaak 5',
101
- },
102
- ];
92
+ this.http = http;
93
+ this.VALTIMO_API_ENDPOINT_URI = this.configService.config.valtimoApi.endpointUri;
103
94
  }
104
95
  getPluginDefinitions() {
105
- return of([{ key: 'openzaak' }]).pipe(delay(1500));
106
- }
107
- getPluginConfigurations(pluginDefinitionId) {
108
- return of(this.OPEN_ZAAK_CONFIGURATIONS).pipe(delay(1500));
109
- }
110
- getPluginConfigurationsWithLogos(pluginDefinitionId) {
111
- return this.returnPluginConfigurationsWithLogos(this.getPluginConfigurations(pluginDefinitionId));
96
+ return this.http.get(`${this.VALTIMO_API_ENDPOINT_URI}plugin/definition`);
112
97
  }
113
98
  getPluginFunctions(pluginDefinitionId) {
114
- return of([
115
- {
116
- key: 'create-zaak',
117
- },
118
- {
119
- key: 'set-status',
120
- },
121
- {
122
- key: 'set-resultaat',
123
- },
124
- {
125
- key: 'set-besluit',
126
- },
127
- ]).pipe(delay(1500));
99
+ return this.http.get(`${this.VALTIMO_API_ENDPOINT_URI}plugin/definition/${pluginDefinitionId}/action`);
128
100
  }
129
101
  getAllPluginConfigurations() {
130
- return of(this.OPEN_ZAAK_CONFIGURATIONS).pipe(delay(1500));
102
+ return this.http.get(`${this.VALTIMO_API_ENDPOINT_URI}plugin/configuration`);
131
103
  }
132
104
  getAllPluginConfigurationsWithLogos() {
133
105
  return this.returnPluginConfigurationsWithLogos(this.getAllPluginConfigurations());
134
106
  }
107
+ savePluginConfiguration(pluginConfiguration) {
108
+ return this.http.post(`${this.VALTIMO_API_ENDPOINT_URI}plugin/configuration`, pluginConfiguration);
109
+ }
135
110
  returnPluginConfigurationsWithLogos(pluginConfigurations$) {
136
111
  return combineLatest([pluginConfigurations$, this.pluginService.pluginSpecifications$]).pipe(map(([pluginConfigurations, pluginSpecifications]) => pluginConfigurations?.map(pluginConfiguration => {
137
- const pluginSpecification = pluginSpecifications.find(specification => specification.pluginId === pluginConfiguration.definitionKey);
112
+ const pluginSpecification = pluginSpecifications.find(specification => specification.pluginId === pluginConfiguration?.pluginDefinition?.key);
138
113
  return {
139
114
  ...pluginConfiguration,
140
115
  ...(pluginSpecification?.pluginLogoBase64 && {
@@ -144,14 +119,14 @@ class PluginManagementService {
144
119
  })));
145
120
  }
146
121
  }
147
- PluginManagementService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PluginManagementService, deps: [{ token: i1.PluginService }, { token: i2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Injectable });
148
- PluginManagementService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PluginManagementService, providedIn: 'root' });
149
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PluginManagementService, decorators: [{
122
+ PluginManagementService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PluginManagementService, deps: [{ token: i1.ConfigService }, { token: i2.PluginService }, { token: i3.DomSanitizer }, { token: i4.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
123
+ PluginManagementService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PluginManagementService, providedIn: 'root' });
124
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PluginManagementService, decorators: [{
150
125
  type: Injectable,
151
126
  args: [{
152
127
  providedIn: 'root',
153
128
  }]
154
- }], ctorParameters: function () { return [{ type: i1.PluginService }, { type: i2.DomSanitizer }]; } });
129
+ }], ctorParameters: function () { return [{ type: i1.ConfigService }, { type: i2.PluginService }, { type: i3.DomSanitizer }, { type: i4.HttpClient }]; } });
155
130
 
156
131
  /*
157
132
  * Copyright 2015-2020 Ritense BV, the Netherlands.
@@ -162,7 +137,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImpor
162
137
  *
163
138
  * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
164
139
  *
165
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions and limitations under the License.
140
+ * Unless required by applicable law or agreed to in writing, software
141
+ * distributed under the License is distributed on an "AS IS" basis,
142
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
143
+ * See the License for the specific language governing permissions and
144
+ * limitations under the License.
166
145
  */
167
146
  class PluginManagementStateService {
168
147
  constructor(pluginService, sanitizer) {
@@ -171,13 +150,18 @@ class PluginManagementStateService {
171
150
  this._showModal$ = new Subject();
172
151
  this._hideModal$ = new Subject();
173
152
  this._inputDisabled$ = new BehaviorSubject(false);
174
- this._saveButtonDisabled$ = new BehaviorSubject(true);
175
153
  this._refresh$ = new BehaviorSubject(null);
176
154
  this._save$ = new Subject();
177
155
  this._delete$ = new Subject();
178
156
  this._hideModalSaveButton$ = new BehaviorSubject(false);
179
157
  this._pluginDefinitions$ = new BehaviorSubject(undefined);
180
- this._pluginDefinitionsWithLogos$ = combineLatest([this._pluginDefinitions$, this.pluginService.pluginSpecifications$]).pipe(map(([pluginDefinitions, pluginSpecifications]) => pluginDefinitions?.map(pluginDefinition => {
158
+ this._pluginDefinitionsWithLogos$ = combineLatest([
159
+ this._pluginDefinitions$,
160
+ this.pluginService.pluginSpecifications$,
161
+ this.pluginService.availablePluginIds$,
162
+ ]).pipe(map(([pluginDefinitions, pluginSpecifications, availablePluginIds]) => pluginDefinitions
163
+ ?.filter(pluginDefinition => availablePluginIds.includes(pluginDefinition.key))
164
+ .map(pluginDefinition => {
181
165
  const pluginSpecification = pluginSpecifications.find(specification => specification.pluginId === pluginDefinition.key);
182
166
  return {
183
167
  ...pluginDefinition,
@@ -187,10 +171,6 @@ class PluginManagementStateService {
187
171
  };
188
172
  })));
189
173
  this._selectedPluginDefinition$ = new BehaviorSubject(undefined);
190
- this._selectedPluginSpecification$ = combineLatest([this.pluginService.pluginSpecifications$, this.selectedPluginDefinition$]).pipe(map(([pluginSpecifications, selectedPluginDefinition]) => {
191
- const selectedPluginSpecification = pluginSpecifications?.find(specification => specification.pluginId === selectedPluginDefinition?.key);
192
- return selectedPluginSpecification || null;
193
- }));
194
174
  }
195
175
  get showModal$() {
196
176
  return this._showModal$.asObservable();
@@ -213,9 +193,6 @@ class PluginManagementStateService {
213
193
  get selectedPluginDefinition$() {
214
194
  return this._selectedPluginDefinition$.asObservable();
215
195
  }
216
- get saveButtonDisabled$() {
217
- return this._saveButtonDisabled$.asObservable();
218
- }
219
196
  get save$() {
220
197
  return this._save$.asObservable();
221
198
  }
@@ -225,14 +202,11 @@ class PluginManagementStateService {
225
202
  get hideModalSaveButton$() {
226
203
  return this._hideModalSaveButton$.asObservable();
227
204
  }
228
- get selectedPluginSpecification$() {
229
- return this._selectedPluginSpecification$;
230
- }
231
205
  showModal(modalType) {
232
206
  this._showModal$.next(modalType);
233
207
  }
234
208
  hideModal() {
235
- this._hideModal$.next();
209
+ this._hideModal$.next(null);
236
210
  }
237
211
  disableInput() {
238
212
  this._inputDisabled$.next(true);
@@ -252,21 +226,11 @@ class PluginManagementStateService {
252
226
  clearSelectedPluginDefinition() {
253
227
  this._selectedPluginDefinition$.next(undefined);
254
228
  }
255
- enableSaveButton() {
256
- this._saveButtonDisabled$.next(false);
257
- }
258
- disableSaveButton() {
259
- this._saveButtonDisabled$.next(true);
260
- }
261
229
  save() {
262
- this._saveButtonDisabled$.pipe(take(1)).subscribe(saveButtonDisabled => {
263
- if (!saveButtonDisabled) {
264
- this._save$.next();
265
- }
266
- });
230
+ this._save$.next(null);
267
231
  }
268
232
  delete() {
269
- this._delete$.next();
233
+ this._delete$.next(null);
270
234
  }
271
235
  hideModalSaveButton() {
272
236
  this._hideModalSaveButton$.next(true);
@@ -278,14 +242,14 @@ class PluginManagementStateService {
278
242
  this._selectedPluginDefinition$.next(undefined);
279
243
  }
280
244
  }
281
- PluginManagementStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PluginManagementStateService, deps: [{ token: i1.PluginService }, { token: i2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Injectable });
282
- PluginManagementStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PluginManagementStateService, providedIn: 'root' });
283
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PluginManagementStateService, decorators: [{
245
+ PluginManagementStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PluginManagementStateService, deps: [{ token: i2.PluginService }, { token: i3.DomSanitizer }], target: i0.ɵɵFactoryTarget.Injectable });
246
+ PluginManagementStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PluginManagementStateService, providedIn: 'root' });
247
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PluginManagementStateService, decorators: [{
284
248
  type: Injectable,
285
249
  args: [{
286
250
  providedIn: 'root',
287
251
  }]
288
- }], ctorParameters: function () { return [{ type: i1.PluginService }, { type: i2.DomSanitizer }]; } });
252
+ }], ctorParameters: function () { return [{ type: i2.PluginService }, { type: i3.DomSanitizer }]; } });
289
253
 
290
254
  /*
291
255
  * Copyright 2015-2020 Ritense BV, the Netherlands.
@@ -296,7 +260,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImpor
296
260
  *
297
261
  * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
298
262
  *
299
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions and limitations under the License.
263
+ * Unless required by applicable law or agreed to in writing, software
264
+ * distributed under the License is distributed on an "AS IS" basis,
265
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
266
+ * See the License for the specific language governing permissions and
267
+ * limitations under the License.
300
268
  */
301
269
 
302
270
  /*
@@ -350,11 +318,11 @@ class PluginAddSelectComponent {
350
318
  });
351
319
  }
352
320
  }
353
- PluginAddSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PluginAddSelectComponent, deps: [{ token: PluginManagementService }, { token: PluginManagementStateService }, { token: i2$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
354
- PluginAddSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: PluginAddSelectComponent, selector: "valtimo-plugin-add-select", ngImport: i0, template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container *ngIf=\"pluginDefinitionsWithLogos$ | async as pluginDefinitions; else loading\">\n <div fxLayout=\"row wrap\" fxLayoutGap=\"22px grid\">\n <div fxFlex=\"33.3%\" *ngFor=\"let pluginDefinition of pluginDefinitions\">\n <v-card\n [title]=\"'title' | pluginTranslate: pluginDefinition.key | async\"\n [description]=\"'description' | pluginTranslate: pluginDefinition.key | async\"\n [selectable]=\"true\"\n [selected]=\"(selectedPluginDefinition$ | async)?.key === pluginDefinition.key\"\n [fullHeight]=\"true\"\n (selectEvent)=\"selectPluginDefinition(pluginDefinition)\"\n (deselectEvent)=\"deselectPluginDefinition()\"\n >\n <div *ngIf=\"pluginDefinition.pluginLogoBase64\" role=\"header\">\n <img\n class=\"plugin-definition-logo\"\n [title]=\"'title' | pluginTranslate: pluginDefinition.key | async\"\n [src]=\"pluginDefinition.pluginLogoBase64\"\n />\n </div>\n </v-card>\n </div>\n </div>\n</ng-container>\n\n<ng-template #loading>\n <div fxLayout=\"row wrap\" fxLayoutGap=\"22px grid\">\n <ng-container *ngTemplateOutlet=\"loadingCard\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingCard\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingCard\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #loadingCard>\n <div fxFlex=\"33.3%\">\n <v-card [loading]=\"true\" [loadingDescription]=\"true\" [loadingTitle]=\"true\"></v-card>\n </div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2020 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.btn-back{position:absolute}.cards-container{display:flex;flex-flow:row wrap;width:100%}.card{width:calc(33.3% - 20px);margin-right:30px}.card:nth-child(3n+3){margin-right:0}.card-header{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.plugin-definition-logo{height:60px}\n"], components: [{ type: i2$2.CardComponent, selector: "v-card", inputs: ["titleTranslationKey", "title", "descriptionTranslationKey", "description", "selectable", "selected", "fullHeight", "loading", "loadingTitle", "loadingDescription"], outputs: ["selectEvent", "deselectEvent"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i5.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "async": i4.AsyncPipe, "pluginTranslate": i1.PluginTranslatePipe } });
355
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PluginAddSelectComponent, decorators: [{
321
+ PluginAddSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PluginAddSelectComponent, deps: [{ token: PluginManagementService }, { token: PluginManagementStateService }, { token: i2$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
322
+ PluginAddSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: PluginAddSelectComponent, selector: "valtimo-plugin-add-select", ngImport: i0, template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container *ngIf=\"pluginDefinitionsWithLogos$ | async as pluginDefinitions; else loading\">\n <div fxLayout=\"row wrap\" fxLayoutGap=\"22px grid\">\n <ng-container\n *ngTemplateOutlet=\"pluginDefinitionsTemplate; context: {pluginDefinitions: pluginDefinitions}\"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n noPluginDefinitionsTemplate;\n context: {pluginDefinitions: pluginDefinitions}\n \"\n ></ng-container>\n </div>\n</ng-container>\n\n<ng-template #noPluginDefinitionsTemplate let-pluginDefinitions=\"pluginDefinitions\">\n <div fxFlex=\"100%\" *ngIf=\"pluginDefinitions?.length === 0\">\n <v-paragraph [center]=\"true\" [fullWidth]=\"true\">{{\n 'pluginManagement.noDefinitions' | translate\n }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #pluginDefinitionsTemplate let-pluginDefinitions=\"pluginDefinitions\">\n <div fxFlex=\"33.3%\" *ngFor=\"let pluginDefinition of pluginDefinitions\">\n <v-card\n [title]=\"'title' | pluginTranslate: pluginDefinition.key | async\"\n [description]=\"'description' | pluginTranslate: pluginDefinition.key | async\"\n [selectable]=\"true\"\n [selected]=\"(selectedPluginDefinition$ | async)?.key === pluginDefinition.key\"\n [fullHeight]=\"true\"\n (selectEvent)=\"selectPluginDefinition(pluginDefinition)\"\n (deselectEvent)=\"deselectPluginDefinition()\"\n >\n <div *ngIf=\"pluginDefinition.pluginLogoBase64\" role=\"header\">\n <img\n class=\"plugin-definition-logo\"\n [title]=\"'title' | pluginTranslate: pluginDefinition.key | async\"\n [src]=\"pluginDefinition.pluginLogoBase64\"\n />\n </div>\n </v-card>\n </div>\n</ng-template>\n\n<ng-template #loading>\n <div fxLayout=\"row wrap\" fxLayoutGap=\"22px grid\">\n <ng-container *ngTemplateOutlet=\"loadingCard\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingCard\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingCard\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #loadingCard>\n <div fxFlex=\"33.3%\">\n <v-card [loading]=\"true\" [loadingDescription]=\"true\" [loadingTitle]=\"true\"></v-card>\n </div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2020 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.btn-back{position:absolute}.cards-container{display:flex;flex-flow:row wrap;width:100%}.card{width:calc(33.3% - 20px);margin-right:30px}.card:nth-child(3n+3){margin-right:0}.card-header{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.plugin-definition-logo{object-fit:contain;height:60px;width:100%}\n"], components: [{ type: i2$2.ParagraphComponent, selector: "v-paragraph", inputs: ["center", "fullWidth", "margin", "italic"] }, { type: i2$2.CardComponent, selector: "v-card", inputs: ["titleTranslationKey", "title", "descriptionTranslationKey", "description", "selectable", "selected", "fullHeight", "loading", "loadingTitle", "loadingDescription"], outputs: ["selectEvent", "deselectEvent"] }], directives: [{ type: i4$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i5.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { type: i4$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i5.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i4$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i4$1.AsyncPipe, "translate": i2$1.TranslatePipe, "pluginTranslate": i2.PluginTranslatePipe } });
323
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PluginAddSelectComponent, decorators: [{
356
324
  type: Component,
357
- args: [{ selector: 'valtimo-plugin-add-select', template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container *ngIf=\"pluginDefinitionsWithLogos$ | async as pluginDefinitions; else loading\">\n <div fxLayout=\"row wrap\" fxLayoutGap=\"22px grid\">\n <div fxFlex=\"33.3%\" *ngFor=\"let pluginDefinition of pluginDefinitions\">\n <v-card\n [title]=\"'title' | pluginTranslate: pluginDefinition.key | async\"\n [description]=\"'description' | pluginTranslate: pluginDefinition.key | async\"\n [selectable]=\"true\"\n [selected]=\"(selectedPluginDefinition$ | async)?.key === pluginDefinition.key\"\n [fullHeight]=\"true\"\n (selectEvent)=\"selectPluginDefinition(pluginDefinition)\"\n (deselectEvent)=\"deselectPluginDefinition()\"\n >\n <div *ngIf=\"pluginDefinition.pluginLogoBase64\" role=\"header\">\n <img\n class=\"plugin-definition-logo\"\n [title]=\"'title' | pluginTranslate: pluginDefinition.key | async\"\n [src]=\"pluginDefinition.pluginLogoBase64\"\n />\n </div>\n </v-card>\n </div>\n </div>\n</ng-container>\n\n<ng-template #loading>\n <div fxLayout=\"row wrap\" fxLayoutGap=\"22px grid\">\n <ng-container *ngTemplateOutlet=\"loadingCard\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingCard\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingCard\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #loadingCard>\n <div fxFlex=\"33.3%\">\n <v-card [loading]=\"true\" [loadingDescription]=\"true\" [loadingTitle]=\"true\"></v-card>\n </div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2020 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.btn-back{position:absolute}.cards-container{display:flex;flex-flow:row wrap;width:100%}.card{width:calc(33.3% - 20px);margin-right:30px}.card:nth-child(3n+3){margin-right:0}.card-header{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.plugin-definition-logo{height:60px}\n"] }]
325
+ args: [{ selector: 'valtimo-plugin-add-select', template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container *ngIf=\"pluginDefinitionsWithLogos$ | async as pluginDefinitions; else loading\">\n <div fxLayout=\"row wrap\" fxLayoutGap=\"22px grid\">\n <ng-container\n *ngTemplateOutlet=\"pluginDefinitionsTemplate; context: {pluginDefinitions: pluginDefinitions}\"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n noPluginDefinitionsTemplate;\n context: {pluginDefinitions: pluginDefinitions}\n \"\n ></ng-container>\n </div>\n</ng-container>\n\n<ng-template #noPluginDefinitionsTemplate let-pluginDefinitions=\"pluginDefinitions\">\n <div fxFlex=\"100%\" *ngIf=\"pluginDefinitions?.length === 0\">\n <v-paragraph [center]=\"true\" [fullWidth]=\"true\">{{\n 'pluginManagement.noDefinitions' | translate\n }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #pluginDefinitionsTemplate let-pluginDefinitions=\"pluginDefinitions\">\n <div fxFlex=\"33.3%\" *ngFor=\"let pluginDefinition of pluginDefinitions\">\n <v-card\n [title]=\"'title' | pluginTranslate: pluginDefinition.key | async\"\n [description]=\"'description' | pluginTranslate: pluginDefinition.key | async\"\n [selectable]=\"true\"\n [selected]=\"(selectedPluginDefinition$ | async)?.key === pluginDefinition.key\"\n [fullHeight]=\"true\"\n (selectEvent)=\"selectPluginDefinition(pluginDefinition)\"\n (deselectEvent)=\"deselectPluginDefinition()\"\n >\n <div *ngIf=\"pluginDefinition.pluginLogoBase64\" role=\"header\">\n <img\n class=\"plugin-definition-logo\"\n [title]=\"'title' | pluginTranslate: pluginDefinition.key | async\"\n [src]=\"pluginDefinition.pluginLogoBase64\"\n />\n </div>\n </v-card>\n </div>\n</ng-template>\n\n<ng-template #loading>\n <div fxLayout=\"row wrap\" fxLayoutGap=\"22px grid\">\n <ng-container *ngTemplateOutlet=\"loadingCard\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingCard\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingCard\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #loadingCard>\n <div fxFlex=\"33.3%\">\n <v-card [loading]=\"true\" [loadingDescription]=\"true\" [loadingTitle]=\"true\"></v-card>\n </div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2020 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.btn-back{position:absolute}.cards-container{display:flex;flex-flow:row wrap;width:100%}.card{width:calc(33.3% - 20px);margin-right:30px}.card:nth-child(3n+3){margin-right:0}.card-header{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.plugin-definition-logo{object-fit:contain;height:60px;width:100%}\n"] }]
358
326
  }], ctorParameters: function () { return [{ type: PluginManagementService }, { type: PluginManagementStateService }, { type: i2$1.TranslateService }]; } });
359
327
 
360
328
  /*
@@ -375,27 +343,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImpor
375
343
  class PluginConfigureComponent {
376
344
  constructor(stateService) {
377
345
  this.stateService = stateService;
378
- this.noConfigurationComponentAvailable$ = new BehaviorSubject(false);
379
- this.selectedPluginSpecification$ = this.stateService.selectedPluginSpecification$.pipe(tap(selectedPluginSpecification => {
380
- this.dynamicContainer.clear();
381
- if (selectedPluginSpecification) {
382
- const componentInstance = this.dynamicContainer.createComponent(selectedPluginSpecification.pluginConfigurationComponent);
383
- this.noConfigurationComponentAvailable$.next(false);
384
- }
385
- else {
386
- this.noConfigurationComponentAvailable$.next(true);
387
- }
388
- }));
346
+ this.valid = new EventEmitter();
347
+ this.configuration = new EventEmitter();
348
+ this.save$ = this.stateService.save$;
349
+ this.pluginDefinitionKey$ = this.stateService.selectedPluginDefinition$.pipe(map(definition => definition?.key));
350
+ this.disabled$ = this.stateService.inputDisabled$;
351
+ }
352
+ onValid(valid) {
353
+ this.valid.emit(valid);
354
+ }
355
+ onFunctionConfiguration(configuration) {
356
+ this.configuration.emit(configuration);
389
357
  }
390
358
  }
391
- PluginConfigureComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PluginConfigureComponent, deps: [{ token: PluginManagementStateService }], target: i0.ɵɵFactoryTarget.Component });
392
- PluginConfigureComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: PluginConfigureComponent, selector: "valtimo-plugin-configure", viewQueries: [{ propertyName: "dynamicContainer", first: true, predicate: ["pluginConfigurationComponent"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container *ngIf=\"selectedPluginSpecification$ | async\"></ng-container>\n<ng-template #pluginConfigurationComponent></ng-template>\n<ng-container *ngIf=\"noConfigurationComponentAvailable$ | async\">\n <v-paragraph>{{ 'plugin.noConfigurationComponent' }}</v-paragraph>\n</ng-container>\n", styles: ["/*!\n * Copyright 2015-2020 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], components: [{ type: i2$2.ParagraphComponent, selector: "v-paragraph" }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i4.AsyncPipe } });
393
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PluginConfigureComponent, decorators: [{
359
+ PluginConfigureComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PluginConfigureComponent, deps: [{ token: PluginManagementStateService }], target: i0.ɵɵFactoryTarget.Component });
360
+ PluginConfigureComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: PluginConfigureComponent, selector: "valtimo-plugin-configure", outputs: { valid: "valid", configuration: "configuration" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<valtimo-plugin-configuration-container\n [pluginDefinitionKey]=\"pluginDefinitionKey$ | async\"\n [save$]=\"save$\"\n [disabled$]=\"disabled$\"\n (valid)=\"onValid($event)\"\n (configuration)=\"onFunctionConfiguration($event)\"\n type=\"configuration\"\n></valtimo-plugin-configuration-container>\n", styles: ["/*!\n * Copyright 2015-2020 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], components: [{ type: i2.PluginConfigurationContainerComponent, selector: "valtimo-plugin-configuration-container", inputs: ["type", "pluginDefinitionKey", "functionKey", "save$", "disabled$", "prefillConfiguration$"], outputs: ["valid", "configuration"] }], pipes: { "async": i4$1.AsyncPipe } });
361
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PluginConfigureComponent, decorators: [{
394
362
  type: Component,
395
- args: [{ selector: 'valtimo-plugin-configure', template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container *ngIf=\"selectedPluginSpecification$ | async\"></ng-container>\n<ng-template #pluginConfigurationComponent></ng-template>\n<ng-container *ngIf=\"noConfigurationComponentAvailable$ | async\">\n <v-paragraph>{{ 'plugin.noConfigurationComponent' }}</v-paragraph>\n</ng-container>\n", styles: ["/*!\n * Copyright 2015-2020 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
396
- }], ctorParameters: function () { return [{ type: PluginManagementStateService }]; }, propDecorators: { dynamicContainer: [{
397
- type: ViewChild,
398
- args: ['pluginConfigurationComponent', { static: true, read: ViewContainerRef }]
363
+ args: [{ selector: 'valtimo-plugin-configure', template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<valtimo-plugin-configuration-container\n [pluginDefinitionKey]=\"pluginDefinitionKey$ | async\"\n [save$]=\"save$\"\n [disabled$]=\"disabled$\"\n (valid)=\"onValid($event)\"\n (configuration)=\"onFunctionConfiguration($event)\"\n type=\"configuration\"\n></valtimo-plugin-configuration-container>\n", styles: ["/*!\n * Copyright 2015-2020 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
364
+ }], ctorParameters: function () { return [{ type: PluginManagementStateService }]; }, propDecorators: { valid: [{
365
+ type: Output
366
+ }], configuration: [{
367
+ type: Output
399
368
  }] } });
400
369
 
401
370
  /*
@@ -414,11 +383,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImpor
414
383
  * limitations under the License.
415
384
  */
416
385
  class PluginAddModalComponent {
417
- constructor(stateService, modalService) {
386
+ constructor(stateService, modalService, pluginManagementService, logger) {
418
387
  this.stateService = stateService;
419
388
  this.modalService = modalService;
389
+ this.pluginManagementService = pluginManagementService;
390
+ this.logger = logger;
420
391
  this.inputDisabled$ = this.stateService.inputDisabled$;
421
392
  this.selectedPluginDefinition$ = this.stateService.selectedPluginDefinition$;
393
+ this.configurationValid$ = new BehaviorSubject(false);
422
394
  this.returnToFirstStepSubject$ = new Subject();
423
395
  }
424
396
  ngOnInit() {
@@ -442,6 +414,29 @@ class PluginAddModalComponent {
442
414
  }, appearingDelay);
443
415
  });
444
416
  }
417
+ onValid(valid) {
418
+ this.configurationValid$.next(valid);
419
+ }
420
+ onConfiguration(configuration) {
421
+ const pluginConfiguration = { ...configuration };
422
+ delete pluginConfiguration['configurationTitle'];
423
+ this.stateService.disableInput();
424
+ this.stateService.selectedPluginDefinition$.pipe(take(1)).subscribe(selectedDefinition => {
425
+ this.pluginManagementService
426
+ .savePluginConfiguration({
427
+ definitionKey: selectedDefinition.key,
428
+ title: configuration.configurationTitle,
429
+ properties: pluginConfiguration,
430
+ })
431
+ .subscribe(response => {
432
+ this.stateService.refresh();
433
+ this.hide();
434
+ }, () => {
435
+ this.logger.error('Something went wrong with saving the plugin configuration.');
436
+ this.hide();
437
+ });
438
+ });
439
+ }
445
440
  openShowSubscription() {
446
441
  this.showSubscription = this.stateService.showModal$.subscribe(modalType => {
447
442
  if (modalType === 'add') {
@@ -461,12 +456,12 @@ class PluginAddModalComponent {
461
456
  this.modalService.openModal(this.pluginAddModal);
462
457
  }
463
458
  }
464
- PluginAddModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PluginAddModalComponent, deps: [{ token: PluginManagementStateService }, { token: i2$2.ModalService }], target: i0.ɵɵFactoryTarget.Component });
465
- PluginAddModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: PluginAddModalComponent, selector: "valtimo-plugin-add-modal", viewQueries: [{ propertyName: "pluginAddModal", first: true, predicate: ["pluginAddModal"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<v-stepper-container\n (completeEvent)=\"complete()\"\n (cancelClickEvent)=\"hide()\"\n [disabled]=\"inputDisabled$ | async\"\n [returnToFirstStepSubject$]=\"returnToFirstStepSubject$\"\n>\n <v-modal #pluginAddModal (closeEvent)=\"hide()\">\n <div role=\"header\">\n <v-stepper-header></v-stepper-header>\n </div>\n <div role=\"content\">\n <v-stepper-content>\n <v-stepper-step titleTranslationKey=\"pluginManagement.addSteps.step0\">\n <valtimo-plugin-add-select></valtimo-plugin-add-select>\n </v-stepper-step>\n <v-stepper-step titleTranslationKey=\"pluginManagement.addSteps.step1\">\n <valtimo-plugin-configure></valtimo-plugin-configure>\n </v-stepper-step>\n </v-stepper-content>\n </div>\n <div role=\"footer\">\n <v-stepper-footer>\n <v-stepper-footer-step\n nextButtonTranslationKey=\"pluginManagement.addSteps.step1\"\n [nextButtonEnabled]=\"selectedPluginDefinition$ | async\"\n ></v-stepper-footer-step>\n <v-stepper-footer-step\n nextButtonTranslationKey=\"pluginManagement.addSteps.step2\"\n [nextButtonEnabled]=\"false\"\n ></v-stepper-footer-step>\n </v-stepper-footer>\n </div>\n </v-modal>\n</v-stepper-container>\n", styles: ["/*!\n * Copyright 2015-2020 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], components: [{ type: i2$2.StepperContainerComponent, selector: "v-stepper-container", inputs: ["returnToFirstStepSubject$", "disabled"], outputs: ["cancelClickEvent", "completeEvent", "nextStepEvent"] }, { type: i2$2.ModalComponent, selector: "v-modal", inputs: ["appearingDelayMs", "maxWidthPx"], outputs: ["closeEvent"] }, { type: i2$2.StepperHeaderComponent, selector: "v-stepper-header" }, { type: i2$2.StepperContentComponent, selector: "v-stepper-content" }, { type: i2$2.StepperStepComponent, selector: "v-stepper-step", inputs: ["titleTranslationKey"] }, { type: PluginAddSelectComponent, selector: "valtimo-plugin-add-select" }, { type: PluginConfigureComponent, selector: "valtimo-plugin-configure" }, { type: i2$2.StepperFooterComponent, selector: "v-stepper-footer" }, { type: i2$2.StepperFooterStepComponent, selector: "v-stepper-footer-step", inputs: ["nextButtonEnabled", "completeButtonEnabled", "nextButtonTranslationKey", "cancelButtonTranslationKey", "completeButtonTranslationKey", "completeButtonMdiIcon", "showCompleteButton"] }], pipes: { "async": i4.AsyncPipe } });
466
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PluginAddModalComponent, decorators: [{
459
+ PluginAddModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PluginAddModalComponent, deps: [{ token: PluginManagementStateService }, { token: i2$2.ModalService }, { token: PluginManagementService }, { token: i3$1.NGXLogger }], target: i0.ɵɵFactoryTarget.Component });
460
+ PluginAddModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: PluginAddModalComponent, selector: "valtimo-plugin-add-modal", viewQueries: [{ propertyName: "pluginAddModal", first: true, predicate: ["pluginAddModal"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<v-stepper-container\n (completeEvent)=\"complete()\"\n (cancelClickEvent)=\"hide()\"\n [disabled]=\"inputDisabled$ | async\"\n [returnToFirstStepSubject$]=\"returnToFirstStepSubject$\"\n>\n <v-modal #pluginAddModal (closeEvent)=\"hide()\">\n <div role=\"header\">\n <v-stepper-header></v-stepper-header>\n </div>\n <div role=\"content\">\n <v-stepper-content>\n <v-stepper-step titleTranslationKey=\"pluginManagement.addSteps.step0\">\n <valtimo-plugin-add-select></valtimo-plugin-add-select>\n </v-stepper-step>\n <v-stepper-step titleTranslationKey=\"pluginManagement.addSteps.step1\">\n <valtimo-plugin-configure\n (valid)=\"onValid($event)\"\n (configuration)=\"onConfiguration($event)\"\n ></valtimo-plugin-configure>\n </v-stepper-step>\n </v-stepper-content>\n </div>\n <div role=\"footer\">\n <v-stepper-footer>\n <v-stepper-footer-step\n nextButtonTranslationKey=\"pluginManagement.addSteps.step1\"\n [nextButtonEnabled]=\"selectedPluginDefinition$ | async\"\n ></v-stepper-footer-step>\n <v-stepper-footer-step\n completeButtonTranslationKey=\"pluginManagement.addSteps.complete\"\n [completeButtonEnabled]=\"configurationValid$ | async\"\n ></v-stepper-footer-step>\n </v-stepper-footer>\n </div>\n </v-modal>\n</v-stepper-container>\n", styles: ["/*!\n * Copyright 2015-2020 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], components: [{ type: i2$2.StepperContainerComponent, selector: "v-stepper-container", inputs: ["returnToFirstStepSubject$", "disabled"], outputs: ["cancelClickEvent", "completeEvent", "nextStepEvent"] }, { type: i2$2.ModalComponent, selector: "v-modal", inputs: ["appearingDelayMs", "maxWidthPx"], outputs: ["closeEvent"] }, { type: i2$2.StepperHeaderComponent, selector: "v-stepper-header" }, { type: i2$2.StepperContentComponent, selector: "v-stepper-content" }, { type: i2$2.StepperStepComponent, selector: "v-stepper-step", inputs: ["titleTranslationKey"] }, { type: PluginAddSelectComponent, selector: "valtimo-plugin-add-select" }, { type: PluginConfigureComponent, selector: "valtimo-plugin-configure", outputs: ["valid", "configuration"] }, { type: i2$2.StepperFooterComponent, selector: "v-stepper-footer" }, { type: i2$2.StepperFooterStepComponent, selector: "v-stepper-footer-step", inputs: ["nextButtonEnabled", "completeButtonEnabled", "nextButtonTranslationKey", "cancelButtonTranslationKey", "completeButtonTranslationKey", "completeButtonMdiIcon", "showCompleteButton"] }], pipes: { "async": i4$1.AsyncPipe } });
461
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PluginAddModalComponent, decorators: [{
467
462
  type: Component,
468
- args: [{ selector: 'valtimo-plugin-add-modal', template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<v-stepper-container\n (completeEvent)=\"complete()\"\n (cancelClickEvent)=\"hide()\"\n [disabled]=\"inputDisabled$ | async\"\n [returnToFirstStepSubject$]=\"returnToFirstStepSubject$\"\n>\n <v-modal #pluginAddModal (closeEvent)=\"hide()\">\n <div role=\"header\">\n <v-stepper-header></v-stepper-header>\n </div>\n <div role=\"content\">\n <v-stepper-content>\n <v-stepper-step titleTranslationKey=\"pluginManagement.addSteps.step0\">\n <valtimo-plugin-add-select></valtimo-plugin-add-select>\n </v-stepper-step>\n <v-stepper-step titleTranslationKey=\"pluginManagement.addSteps.step1\">\n <valtimo-plugin-configure></valtimo-plugin-configure>\n </v-stepper-step>\n </v-stepper-content>\n </div>\n <div role=\"footer\">\n <v-stepper-footer>\n <v-stepper-footer-step\n nextButtonTranslationKey=\"pluginManagement.addSteps.step1\"\n [nextButtonEnabled]=\"selectedPluginDefinition$ | async\"\n ></v-stepper-footer-step>\n <v-stepper-footer-step\n nextButtonTranslationKey=\"pluginManagement.addSteps.step2\"\n [nextButtonEnabled]=\"false\"\n ></v-stepper-footer-step>\n </v-stepper-footer>\n </div>\n </v-modal>\n</v-stepper-container>\n", styles: ["/*!\n * Copyright 2015-2020 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
469
- }], ctorParameters: function () { return [{ type: PluginManagementStateService }, { type: i2$2.ModalService }]; }, propDecorators: { pluginAddModal: [{
463
+ args: [{ selector: 'valtimo-plugin-add-modal', template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<v-stepper-container\n (completeEvent)=\"complete()\"\n (cancelClickEvent)=\"hide()\"\n [disabled]=\"inputDisabled$ | async\"\n [returnToFirstStepSubject$]=\"returnToFirstStepSubject$\"\n>\n <v-modal #pluginAddModal (closeEvent)=\"hide()\">\n <div role=\"header\">\n <v-stepper-header></v-stepper-header>\n </div>\n <div role=\"content\">\n <v-stepper-content>\n <v-stepper-step titleTranslationKey=\"pluginManagement.addSteps.step0\">\n <valtimo-plugin-add-select></valtimo-plugin-add-select>\n </v-stepper-step>\n <v-stepper-step titleTranslationKey=\"pluginManagement.addSteps.step1\">\n <valtimo-plugin-configure\n (valid)=\"onValid($event)\"\n (configuration)=\"onConfiguration($event)\"\n ></valtimo-plugin-configure>\n </v-stepper-step>\n </v-stepper-content>\n </div>\n <div role=\"footer\">\n <v-stepper-footer>\n <v-stepper-footer-step\n nextButtonTranslationKey=\"pluginManagement.addSteps.step1\"\n [nextButtonEnabled]=\"selectedPluginDefinition$ | async\"\n ></v-stepper-footer-step>\n <v-stepper-footer-step\n completeButtonTranslationKey=\"pluginManagement.addSteps.complete\"\n [completeButtonEnabled]=\"configurationValid$ | async\"\n ></v-stepper-footer-step>\n </v-stepper-footer>\n </div>\n </v-modal>\n</v-stepper-container>\n", styles: ["/*!\n * Copyright 2015-2020 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
464
+ }], ctorParameters: function () { return [{ type: PluginManagementStateService }, { type: i2$2.ModalService }, { type: PluginManagementService }, { type: i3$1.NGXLogger }]; }, propDecorators: { pluginAddModal: [{
470
465
  type: ViewChild,
471
466
  args: ['pluginAddModal']
472
467
  }] } });
@@ -487,8 +482,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImpor
487
482
  * limitations under the License.
488
483
  */
489
484
  class PluginManagementComponent {
490
- constructor(pluginService, translateService, stateService, pluginTranslationService) {
491
- this.pluginService = pluginService;
485
+ constructor(pluginManagementService, translateService, stateService, pluginTranslationService) {
486
+ this.pluginManagementService = pluginManagementService;
492
487
  this.translateService = translateService;
493
488
  this.stateService = stateService;
494
489
  this.pluginTranslationService = pluginTranslationService;
@@ -507,26 +502,27 @@ class PluginManagementComponent {
507
502
  dataKey: 'title',
508
503
  },
509
504
  ]);
510
- this.pluginConfigurations$ = combineLatest([
511
- this.pluginService.getAllPluginConfigurations(),
505
+ this.pluginConfigurations$ = this.stateService.refresh$.pipe(switchMap(() => combineLatest([
506
+ this.pluginManagementService.getAllPluginConfigurations(),
512
507
  this.translateService.stream('key'),
513
508
  ]).pipe(map(([pluginConfigurations]) => pluginConfigurations.map(configuration => ({
514
509
  ...configuration,
515
- pluginName: this.pluginTranslationService.instant('title', configuration.definitionKey),
510
+ pluginName: this.pluginTranslationService.instant('title', configuration.pluginDefinition.key),
511
+ definitionKey: configuration.pluginDefinition.key,
516
512
  }))), tap(() => {
517
513
  this.loading$.next(false);
518
- }));
514
+ }))));
519
515
  }
520
516
  showAddModal() {
521
517
  this.stateService.showModal('add');
522
518
  }
523
519
  }
524
- PluginManagementComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PluginManagementComponent, deps: [{ token: PluginManagementService }, { token: i2$1.TranslateService }, { token: PluginManagementStateService }, { token: i1.PluginTranslationService }], target: i0.ɵɵFactoryTarget.Component });
525
- PluginManagementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: PluginManagementComponent, selector: "valtimo-plugin-management", ngImport: i0, template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<v-page-container\n *ngIf=\"{\n pluginConfigurations: pluginConfigurations$ | async,\n columns: columns$ | async,\n loading: loading$ | async\n } as obs\"\n>\n <v-page-header>\n <v-page-header-introduction>\n <v-title>{{ 'pages.plugins.title' | translate }}</v-title>\n <v-paragraph>{{ 'pages.plugins.description' | translate }}</v-paragraph>\n </v-page-header-introduction>\n <v-page-header-actions>\n <v-button\n (clickEvent)=\"showAddModal()\"\n type=\"primary\"\n mdiIcon=\"plus\"\n [disabled]=\"obs.loading\"\n >\n {{ 'pluginManagement.add' | translate }}\n </v-button>\n </v-page-header-actions>\n </v-page-header>\n <v-page-content>\n <v-table\n [loading]=\"obs.loading\"\n [items]=\"obs.pluginConfigurations\"\n [columns]=\"obs.columns\"\n [showEditButtons]=\"false\"\n [amountOfLoadingRows]=\"2\"\n [itemsTranslationKey]=\"'pluginManagement.tableItemsText'\"\n [showPagination]=\"false\"\n ></v-table>\n </v-page-content>\n</v-page-container>\n\n<valtimo-plugin-add-modal></valtimo-plugin-add-modal>\n", styles: ["/*!\n * Copyright 2015-2020 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], components: [{ type: i2$2.PageContainerComponent, selector: "v-page-container" }, { type: i2$2.PageHeaderComponent, selector: "v-page-header" }, { type: i2$2.PageHeaderIntroductionComponent, selector: "v-page-header-introduction" }, { type: i2$2.TitleComponent, selector: "v-title", inputs: ["type", "margin"] }, { type: i2$2.ParagraphComponent, selector: "v-paragraph" }, { type: i2$2.PageHeaderActionsComponent, selector: "v-page-header-actions" }, { type: i2$2.ButtonComponent, selector: "v-button", inputs: ["type", "mdiIcon", "disabled"], outputs: ["clickEvent"] }, { type: i2$2.PageContentComponent, selector: "v-page-content" }, { type: i2$2.TableComponent, selector: "v-table", inputs: ["items", "columns", "loading", "showEditButtons", "showPagination", "editButtonTranslationKey", "itemsTranslationKey", "noResultsTranslationKey", "mobileBreakpointPx", "amountOfLoadingRows", "collectionSize", "maxPaginationItemSize", "page", "size"], outputs: ["editButtonClicked", "paginationSizeSet", "paginationPageSet"] }, { type: PluginAddModalComponent, selector: "valtimo-plugin-add-modal" }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i4.AsyncPipe, "translate": i2$1.TranslatePipe } });
526
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PluginManagementComponent, decorators: [{
520
+ PluginManagementComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PluginManagementComponent, deps: [{ token: PluginManagementService }, { token: i2$1.TranslateService }, { token: PluginManagementStateService }, { token: i2.PluginTranslationService }], target: i0.ɵɵFactoryTarget.Component });
521
+ PluginManagementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: PluginManagementComponent, selector: "valtimo-plugin-management", ngImport: i0, template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<v-page-container\n *ngIf=\"{\n pluginConfigurations: pluginConfigurations$ | async,\n columns: columns$ | async,\n loading: loading$ | async\n } as obs\"\n>\n <v-page-header>\n <v-page-header-introduction>\n <v-title>{{ 'pages.plugins.title' | translate }}</v-title>\n <v-paragraph>{{ 'pages.plugins.description' | translate }}</v-paragraph>\n </v-page-header-introduction>\n <v-page-header-actions>\n <v-button\n (clickEvent)=\"showAddModal()\"\n type=\"primary\"\n mdiIcon=\"plus\"\n [disabled]=\"obs.loading\"\n >\n {{ 'pluginManagement.add' | translate }}\n </v-button>\n </v-page-header-actions>\n </v-page-header>\n <v-page-content>\n <v-table\n [loading]=\"obs.loading\"\n [items]=\"obs.pluginConfigurations\"\n [columns]=\"obs.columns\"\n [showEditButtons]=\"false\"\n [amountOfLoadingRows]=\"2\"\n [itemsTranslationKey]=\"'pluginManagement.tableItemsText'\"\n [showPagination]=\"false\"\n ></v-table>\n </v-page-content>\n</v-page-container>\n\n<valtimo-plugin-add-modal></valtimo-plugin-add-modal>\n", styles: ["/*!\n * Copyright 2015-2020 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], components: [{ type: i2$2.PageContainerComponent, selector: "v-page-container" }, { type: i2$2.PageHeaderComponent, selector: "v-page-header" }, { type: i2$2.PageHeaderIntroductionComponent, selector: "v-page-header-introduction" }, { type: i2$2.TitleComponent, selector: "v-title", inputs: ["type", "margin"] }, { type: i2$2.ParagraphComponent, selector: "v-paragraph", inputs: ["center", "fullWidth", "margin", "italic"] }, { type: i2$2.PageHeaderActionsComponent, selector: "v-page-header-actions" }, { type: i2$2.ButtonComponent, selector: "v-button", inputs: ["type", "mdiIcon", "disabled", "title", "titleTranslationKey"], outputs: ["clickEvent"] }, { type: i2$2.PageContentComponent, selector: "v-page-content" }, { type: i2$2.TableComponent, selector: "v-table", inputs: ["items", "columns", "loading", "showEditButtons", "showPagination", "editButtonTranslationKey", "itemsTranslationKey", "noResultsTranslationKey", "mobileBreakpointPx", "amountOfLoadingRows", "collectionSize", "maxPaginationItemSize", "page", "size"], outputs: ["editButtonClicked", "paginationSizeSet", "paginationPageSet"] }, { type: PluginAddModalComponent, selector: "valtimo-plugin-add-modal" }], directives: [{ type: i4$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i4$1.AsyncPipe, "translate": i2$1.TranslatePipe } });
522
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PluginManagementComponent, decorators: [{
527
523
  type: Component,
528
524
  args: [{ selector: 'valtimo-plugin-management', template: "<!--\n ~ Copyright 2015-2020 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<v-page-container\n *ngIf=\"{\n pluginConfigurations: pluginConfigurations$ | async,\n columns: columns$ | async,\n loading: loading$ | async\n } as obs\"\n>\n <v-page-header>\n <v-page-header-introduction>\n <v-title>{{ 'pages.plugins.title' | translate }}</v-title>\n <v-paragraph>{{ 'pages.plugins.description' | translate }}</v-paragraph>\n </v-page-header-introduction>\n <v-page-header-actions>\n <v-button\n (clickEvent)=\"showAddModal()\"\n type=\"primary\"\n mdiIcon=\"plus\"\n [disabled]=\"obs.loading\"\n >\n {{ 'pluginManagement.add' | translate }}\n </v-button>\n </v-page-header-actions>\n </v-page-header>\n <v-page-content>\n <v-table\n [loading]=\"obs.loading\"\n [items]=\"obs.pluginConfigurations\"\n [columns]=\"obs.columns\"\n [showEditButtons]=\"false\"\n [amountOfLoadingRows]=\"2\"\n [itemsTranslationKey]=\"'pluginManagement.tableItemsText'\"\n [showPagination]=\"false\"\n ></v-table>\n </v-page-content>\n</v-page-container>\n\n<valtimo-plugin-add-modal></valtimo-plugin-add-modal>\n", styles: ["/*!\n * Copyright 2015-2020 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
529
- }], ctorParameters: function () { return [{ type: PluginManagementService }, { type: i2$1.TranslateService }, { type: PluginManagementStateService }, { type: i1.PluginTranslationService }]; } });
525
+ }], ctorParameters: function () { return [{ type: PluginManagementService }, { type: i2$1.TranslateService }, { type: PluginManagementStateService }, { type: i2.PluginTranslationService }]; } });
530
526
 
531
527
  /*
532
528
  * Copyright 2015-2020 Ritense BV, the Netherlands.
@@ -537,7 +533,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImpor
537
533
  *
538
534
  * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
539
535
  *
540
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions and limitations under the License.
536
+ * Unless required by applicable law or agreed to in writing, software
537
+ * distributed under the License is distributed on an "AS IS" basis,
538
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
539
+ * See the License for the specific language governing permissions and
540
+ * limitations under the License.
541
541
  */
542
542
  const routes = [
543
543
  {
@@ -549,10 +549,10 @@ const routes = [
549
549
  ];
550
550
  class PluginManagementRoutingModule {
551
551
  }
552
- PluginManagementRoutingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PluginManagementRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
553
- PluginManagementRoutingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PluginManagementRoutingModule, imports: [CommonModule, i1$1.RouterModule], exports: [RouterModule] });
554
- PluginManagementRoutingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PluginManagementRoutingModule, imports: [[CommonModule, RouterModule.forChild(routes)], RouterModule] });
555
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PluginManagementRoutingModule, decorators: [{
552
+ PluginManagementRoutingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PluginManagementRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
553
+ PluginManagementRoutingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PluginManagementRoutingModule, imports: [CommonModule, i1$1.RouterModule], exports: [RouterModule] });
554
+ PluginManagementRoutingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PluginManagementRoutingModule, imports: [[CommonModule, RouterModule.forChild(routes)], RouterModule] });
555
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PluginManagementRoutingModule, decorators: [{
556
556
  type: NgModule,
557
557
  args: [{
558
558
  declarations: [],
@@ -570,12 +570,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImpor
570
570
  *
571
571
  * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
572
572
  *
573
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions and limitations under the License.
573
+ * Unless required by applicable law or agreed to in writing, software
574
+ * distributed under the License is distributed on an "AS IS" basis,
575
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
576
+ * See the License for the specific language governing permissions and
577
+ * limitations under the License.
574
578
  */
575
579
  class PluginManagementModule {
576
580
  }
577
- PluginManagementModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PluginManagementModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
578
- PluginManagementModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PluginManagementModule, declarations: [PluginManagementComponent,
581
+ PluginManagementModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PluginManagementModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
582
+ PluginManagementModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PluginManagementModule, declarations: [PluginManagementComponent,
579
583
  PluginAddModalComponent,
580
584
  PluginAddSelectComponent,
581
585
  PluginConfigureComponent], imports: [CommonModule,
@@ -590,11 +594,12 @@ PluginManagementModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0",
590
594
  ModalModule,
591
595
  ButtonModule,
592
596
  CardModule,
593
- PluginTranslatePipeModule], exports: [PluginManagementComponent,
597
+ PluginTranslatePipeModule,
598
+ PluginConfigurationContainerModule], exports: [PluginManagementComponent,
594
599
  PluginAddModalComponent,
595
600
  PluginAddSelectComponent,
596
601
  PluginConfigureComponent] });
597
- PluginManagementModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PluginManagementModule, providers: [PluginManagementStateService], imports: [[
602
+ PluginManagementModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PluginManagementModule, providers: [PluginManagementStateService], imports: [[
598
603
  CommonModule,
599
604
  PluginManagementRoutingModule,
600
605
  TranslateModule,
@@ -608,8 +613,9 @@ PluginManagementModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0",
608
613
  ButtonModule,
609
614
  CardModule,
610
615
  PluginTranslatePipeModule,
616
+ PluginConfigurationContainerModule,
611
617
  ]] });
612
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PluginManagementModule, decorators: [{
618
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PluginManagementModule, decorators: [{
613
619
  type: NgModule,
614
620
  args: [{
615
621
  providers: [PluginManagementStateService],
@@ -633,6 +639,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImpor
633
639
  ButtonModule,
634
640
  CardModule,
635
641
  PluginTranslatePipeModule,
642
+ PluginConfigurationContainerModule,
636
643
  ],
637
644
  exports: [
638
645
  PluginManagementComponent,
@@ -652,7 +659,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImpor
652
659
  *
653
660
  * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
654
661
  *
655
- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions and limitations under the License.
662
+ * Unless required by applicable law or agreed to in writing, software
663
+ * distributed under the License is distributed on an "AS IS" basis,
664
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
665
+ * See the License for the specific language governing permissions and
666
+ * limitations under the License.
656
667
  */
657
668
 
658
669
  /**