@valtimo/object 10.5.1 → 10.7.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.
@@ -5,17 +5,17 @@ import * as i2 from '@valtimo/config';
5
5
  import { ROLE_USER } from '@valtimo/config';
6
6
  import * as i3 from '@angular/router';
7
7
  import { RouterModule } from '@angular/router';
8
- import * as i6$1 from '@angular/common';
8
+ import * as i8 from '@angular/common';
9
9
  import { CommonModule, AsyncPipe } from '@angular/common';
10
10
  import { AuthGuardService } from '@valtimo/security';
11
- import { map, BehaviorSubject, combineLatest, distinctUntilChanged, of, startWith, throwError, Subject } from 'rxjs';
12
- import { switchMap, tap, take, catchError, finalize } from 'rxjs/operators';
11
+ import { map, BehaviorSubject, combineLatest, distinctUntilChanged, of, startWith, filter, throwError, Subject } from 'rxjs';
12
+ import { tap, switchMap, catchError, take, finalize } from 'rxjs/operators';
13
13
  import * as i2$1 from '@valtimo/object-management';
14
14
  import * as i4 from '@ngx-translate/core';
15
15
  import { TranslateModule } from '@ngx-translate/core';
16
16
  import * as i6 from 'ngx-toastr';
17
- import * as i8 from '@valtimo/components';
18
- import { WidgetModule, ListModule, SpinnerModule, FormIoModule, ConfirmationModalModule, SearchFieldsModule } from '@valtimo/components';
17
+ import * as i7 from '@valtimo/components';
18
+ import { WidgetModule, ListModule, SpinnerModule, FormIoModule, ConfirmationModalModule, SearchFieldsModule, ValtimoCdsModalDirectiveModule } from '@valtimo/components';
19
19
  import * as i9 from 'carbon-components-angular';
20
20
  import { ButtonModule, IconModule, LoadingModule, ModalModule, InputModule } from 'carbon-components-angular';
21
21
  import { ReactiveFormsModule } from '@angular/forms';
@@ -63,9 +63,9 @@ class ObjectService {
63
63
  return Object.fromEntries(Object.entries(submission).filter(([_, value]) => value !== ''));
64
64
  }
65
65
  }
66
- ObjectService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ObjectService, deps: [{ token: i1.HttpClient }, { token: i2.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
67
- ObjectService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ObjectService, providedIn: 'root' });
68
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ObjectService, decorators: [{
66
+ ObjectService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ObjectService, deps: [{ token: i1.HttpClient }, { token: i2.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
67
+ ObjectService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ObjectService, providedIn: 'root' });
68
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ObjectService, decorators: [{
69
69
  type: Injectable,
70
70
  args: [{
71
71
  providedIn: 'root',
@@ -134,9 +134,9 @@ class ObjectColumnService {
134
134
  }
135
135
  }
136
136
  }
137
- ObjectColumnService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ObjectColumnService, deps: [{ token: i2.ConfigService }, { token: i2$1.ObjectManagementService }], target: i0.ɵɵFactoryTarget.Injectable });
138
- ObjectColumnService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ObjectColumnService, providedIn: 'root' });
139
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ObjectColumnService, decorators: [{
137
+ ObjectColumnService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ObjectColumnService, deps: [{ token: i2.ConfigService }, { token: i2$1.ObjectManagementService }], target: i0.ɵɵFactoryTarget.Injectable });
138
+ ObjectColumnService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ObjectColumnService, providedIn: 'root' });
139
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ObjectColumnService, decorators: [{
140
140
  type: Injectable,
141
141
  args: [{
142
142
  providedIn: 'root',
@@ -159,7 +159,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
159
159
  * limitations under the License.
160
160
  */
161
161
  class ObjectListComponent {
162
- constructor(objectService, objectColumnService, objectManagementService, translateService, router, route, toastr, translate) {
162
+ constructor(objectService, objectColumnService, objectManagementService, translateService, router, route, toastr, translate, pageTitleService) {
163
163
  this.objectService = objectService;
164
164
  this.objectColumnService = objectColumnService;
165
165
  this.objectManagementService = objectManagementService;
@@ -168,6 +168,7 @@ class ObjectListComponent {
168
168
  this.route = route;
169
169
  this.toastr = toastr;
170
170
  this.translate = translate;
171
+ this.pageTitleService = pageTitleService;
171
172
  this.loading$ = new BehaviorSubject(true);
172
173
  this.submission$ = new BehaviorSubject({});
173
174
  this.formValid$ = new BehaviorSubject(false);
@@ -175,7 +176,16 @@ class ObjectListComponent {
175
176
  this.disableInput$ = new BehaviorSubject(false);
176
177
  this.clearForm$ = new BehaviorSubject(false);
177
178
  this.columnType$ = new BehaviorSubject(ColumnType.DEFAULT);
178
- this.objectManagementId$ = this.route.params.pipe(map(params => params.objectManagementId));
179
+ this.objectManagementId$ = this.route.params.pipe(map(params => params.objectManagementId), tap(objectManagementId => {
180
+ if (!this._settingPageTitle && objectManagementId) {
181
+ this._settingPageTitle = true;
182
+ this.objectManagementService.getObjectById(objectManagementId).subscribe(objectType => {
183
+ if (objectType.title) {
184
+ this.pageTitleService.setCustomPageTitle(objectType.title);
185
+ }
186
+ });
187
+ }
188
+ }));
179
189
  this.refreshObjectList$ = new BehaviorSubject(null);
180
190
  this.currentPageAndSize$ = new BehaviorSubject({
181
191
  page: 0,
@@ -205,26 +215,34 @@ class ObjectListComponent {
205
215
  this.translateService.stream('key'),
206
216
  this.refreshObjectList$,
207
217
  ]).pipe(switchMap(([objectManagementId, currentPage, columnType, searchFieldValues]) => {
218
+ const handleError = () => {
219
+ this.disableInput();
220
+ return of(null);
221
+ };
208
222
  if (columnType === ColumnType.CUSTOM) {
209
- return this.objectService.postObjectsByObjectManagementId(objectManagementId, {
223
+ return this.objectService
224
+ .postObjectsByObjectManagementId(objectManagementId, {
210
225
  page: currentPage.page,
211
226
  size: currentPage.size,
212
227
  }, Object.keys(searchFieldValues).length > 0
213
228
  ? { otherFilters: this.mapSearchValuesToFilters(searchFieldValues) }
214
- : {});
229
+ : {})
230
+ .pipe(catchError(() => handleError()));
215
231
  }
216
- else {
217
- return this.objectService.getObjectsByObjectManagementId(objectManagementId, {
218
- page: currentPage.page,
219
- size: currentPage.size,
232
+ return this.objectService
233
+ .getObjectsByObjectManagementId(objectManagementId, {
234
+ page: currentPage.page,
235
+ size: currentPage.size,
236
+ })
237
+ .pipe(catchError(() => handleError()));
238
+ }), tap(instanceRes => {
239
+ if (instanceRes != null) {
240
+ this.pageSizes$.pipe(take(1)).subscribe(sizes => {
241
+ // @ts-ignore
242
+ this.pageSizes$.next({ ...sizes, collectionSize: instanceRes.totalElements });
220
243
  });
221
244
  }
222
- }), tap(instanceRes => {
223
- this.pageSizes$.pipe(take(1)).subscribe(sizes => {
224
- // @ts-ignore
225
- this.pageSizes$.next({ ...sizes, collectionSize: instanceRes.totalElements });
226
- });
227
- }), map(res => res.content.map(record => record?.items?.reduce((obj, item) => Object.assign(obj, { objectId: record.id }, { [item.key]: item.value }), {}))), tap(() => this.loading$.next(false)));
245
+ }), map(res => res?.content?.map(record => record?.items?.reduce((obj, item) => Object.assign(obj, { objectId: record.id }, { [item.key]: item.value }), {}))), tap(() => this.loading$.next(false)));
228
246
  this.formDefinition$ = combineLatest([
229
247
  this.objectManagementId$,
230
248
  this.clearForm$,
@@ -258,15 +276,15 @@ class ObjectListComponent {
258
276
  sortable: column.sortable,
259
277
  ...(column.viewType && { viewType: column.viewType }),
260
278
  ...(column.enum && { enum: column.enum }),
279
+ ...(column.format && { format: column.format }),
261
280
  };
262
281
  }),
263
282
  ];
264
283
  }
265
- else {
266
- this.columnType$.next(ColumnType.DEFAULT);
267
- return this.setDefaultFields();
268
- }
284
+ this.columnType$.next(ColumnType.DEFAULT);
285
+ return this.setDefaultFields();
269
286
  }));
287
+ this._settingPageTitle = false;
270
288
  }
271
289
  paginationClicked(newPageNumber) {
272
290
  this.currentPageAndSize$.pipe(take(1)).subscribe(currentPage => {
@@ -296,22 +314,21 @@ class ObjectListComponent {
296
314
  addObject() {
297
315
  this.disableInput();
298
316
  combineLatest([this.objectManagementId$, this.submission$, this.formValid$])
299
- .pipe(take(1))
300
- .subscribe(([objectManagementId, submission, formValid]) => {
301
- if (formValid) {
302
- submission = this.objectService.removeEmptyStringValuesFromSubmission(submission);
303
- this.objectService
304
- .createObject({ objectManagementId }, { ...submission })
305
- .pipe(take(1), catchError((error) => this.handleCreateObjectError(error)), finalize(() => {
306
- this.enableInput();
307
- }))
308
- .subscribe(() => {
309
- this.closeModal();
310
- this.refreshObjectList();
311
- this.clearForm$.next(true);
312
- this.toastr.success(this.translate.instant('object.messages.objectCreated'));
313
- });
314
- }
317
+ .pipe(take(1), filter(([objectManagementId, submission, formValid]) => formValid), switchMap(([objectManagementId, submission]) => this.objectService
318
+ .createObject({ objectManagementId }, { ...this.objectService.removeEmptyStringValuesFromSubmission(submission) })
319
+ .pipe(take(1), catchError((error) => {
320
+ this.handleCreateObjectError(error);
321
+ return throwError(error);
322
+ }))), finalize(() => {
323
+ this.enableInput();
324
+ }))
325
+ .subscribe({
326
+ next: () => {
327
+ this.closeModal();
328
+ this.refreshObjectList();
329
+ this.clearForm$.next(true);
330
+ this.toastr.success(this.translate.instant('object.messages.objectCreated'));
331
+ },
315
332
  });
316
333
  }
317
334
  redirectToDetails(record) {
@@ -346,7 +363,6 @@ class ObjectListComponent {
346
363
  return throwError(error);
347
364
  }
348
365
  handleCreateObjectError(error) {
349
- this.closeModal();
350
366
  this.toastr.error(this.translate.instant('object.messages.objectCreationError'));
351
367
  return throwError(error);
352
368
  }
@@ -362,18 +378,18 @@ class ObjectListComponent {
362
378
  }
363
379
  else {
364
380
  // @ts-ignore
365
- filters.push({ key: valueKey, values: [{ value: searchValue }] });
381
+ filters.push({ key: valueKey, values: [searchValue] });
366
382
  }
367
383
  });
368
384
  return filters;
369
385
  }
370
386
  }
371
- ObjectListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ObjectListComponent, deps: [{ token: ObjectService }, { token: ObjectColumnService }, { token: i2$1.ObjectManagementService }, { token: i4.TranslateService }, { token: i3.Router }, { token: i3.ActivatedRoute }, { token: i6.ToastrService }, { token: i4.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
372
- ObjectListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ObjectListComponent, selector: "valtimo-object-list", 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<ng-container\n *ngIf=\"{\n loading: loading$ | async,\n pagination: pagination$ | async,\n disableInput: disableInput$ | async,\n fields: fields$ | async,\n objectConfiguration: objectConfiguration$ | async\n } as obs\"\n>\n <div class=\"main-content pt-0\">\n <div class=\"container-fluid pr-0 pl-0\">\n <div class=\"text-right\">\n <div class=\"btn-group mt-m3px mb-3 mr-0\">\n <ng-container *ngTemplateOutlet=\"buttons; context: {obs: obs}\"></ng-container>\n </div>\n </div>\n <ng-container *ngIf=\"obs.loading === false; else loading\">\n <ng-container *ngTemplateOutlet=\"searchFields; context: {obs: obs}\"></ng-container>\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n </ng-container>\n </div>\n </div>\n <ng-container *ngTemplateOutlet=\"createNewModal\"></ng-container>\n</ng-container>\n\n<ng-template #buttons let-obs=\"obs\">\n <button\n (click)=\"openModal()\"\n ibmButton=\"primary\"\n size=\"md\"\n class=\"ml-3\"\n [disabled]=\"obs.disableInput || obs.loading\"\n >\n {{ 'object.createObject' | translate }}\n <svg class=\"cds--btn__icon\" ibmIcon=\"add\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #searchFields let-obs=\"obs\">\n <div class=\"mb-3\">\n <valtimo-search-fields\n [loading]=\"obs.loading\"\n [searchFields]=\"objectSearchFields$ | async\"\n (doSearch)=\"search($event)\"\n [documentDefinitionName]=\"objectManagementId$ | async\"\n [setValuesSubject$]=\"null\"\n ></valtimo-search-fields>\n </div>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <valtimo-widget>\n <valtimo-list\n [items]=\"obs.objectConfiguration\"\n [fields]=\"obs.fields\"\n [viewMode]=\"true\"\n [header]=\"true\"\n [pagination]=\"obs.pagination\"\n paginationIdentifier=\"objectConfigurationList\"\n (paginationClicked)=\"paginationClicked($event)\"\n (paginationSet)=\"paginationSet($event)\"\n (rowClicked)=\"redirectToDetails($event)\"\n >\n <div header>\n <h3 class=\"list-header-title\">\n {{ 'object.title' | translate }}\n <sup class=\"ml-1 badge badge-pill badge-primary\">{{\n obs.objectConfiguration?.length || 0\n }}</sup>\n </h3>\n </div>\n </valtimo-list>\n </valtimo-widget>\n</ng-template>\n\n<ng-template #createNewModal>\n <ibm-modal\n *ngIf=\"{\n show: showModal$ | async,\n formValid: formValid$ | async,\n formDefinition: formDefinition$ | async,\n disableInput: disableInput$ | async\n } as modalObs\"\n [open]=\"modalObs.show\"\n >\n <ibm-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 ibmModalHeaderHeading>\n {{ 'object.createObject' | translate }}\n </h3>\n </ibm-modal-header>\n <section ibmModalContent>\n <ng-container *ngTemplateOutlet=\"modalContent; context: {modalObs: modalObs}\"></ng-container>\n </section>\n <ng-container *ngTemplateOutlet=\"modalFooter; context: {modalObs: modalObs}\"></ng-container>\n </ibm-modal>\n</ng-template>\n\n<ng-template #modalContent let-modalObs=\"modalObs\">\n <valtimo-form-io\n [form]=\"modalObs.formDefinition\"\n (change)=\"onFormioChange($event)\"\n ></valtimo-form-io>\n</ng-template>\n\n<ng-template #modalFooter let-modalObs=\"modalObs\">\n <ibm-modal-footer>\n <ng-container>\n <button\n ibmButton=\"secondary\"\n [attr.modal-primary-focus]=\"true\"\n (click)=\"closeModal()\"\n [disabled]=\"modalObs.disableInput\"\n >\n {{ 'object.close' | translate }}\n </button>\n <button\n ibmButton=\"primary\"\n [attr.modal-primary-focus]=\"true\"\n (click)=\"addObject()\"\n [disabled]=\"modalObs.disableInput || modalObs.formValid === false\"\n >\n {{ 'object.save' | translate }}\n </button>\n </ng-container>\n </ibm-modal-footer>\n</ng-template>\n\n<ng-template #loading>\n <div class=\"loading-icon\"><ibm-loading></ibm-loading></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 */.loading-icon{display:flex;justify-content:center}\n"], dependencies: [{ kind: "directive", type: i6$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i8.WidgetComponent, selector: "valtimo-widget", inputs: ["type", "name", "icon", "contrast", "divider", "title", "subtitle", "collapseAble", "collapse", "additionalClasses"] }, { kind: "component", type: i8.ListComponent, selector: "valtimo-list", inputs: ["items", "fields", "pagination", "viewMode", "isSearchable", "header", "actions", "paginationIdentifier", "initialSortState", "lastColumnTemplate"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged"] }, { kind: "directive", type: i9.Button, selector: "[ibmButton]", inputs: ["ibmButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i9.IconDirective, selector: "[ibmIcon]", inputs: ["ibmIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i9.Loading, selector: "ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "component", type: i8.FormioComponent, selector: "valtimo-form-io", inputs: ["form", "options", "submission", "readOnly", "formRefresh$"], outputs: ["submit", "change"] }, { kind: "component", type: i9.Modal, selector: "ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i9.ModalHeader, selector: "ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i9.ModalFooter, selector: "ibm-modal-footer" }, { kind: "directive", type: i9.ModalContent, selector: "[ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i9.ModalHeaderHeading, selector: "[ibmModalHeaderHeading]" }, { kind: "component", type: i8.SearchFieldsComponent, selector: "valtimo-search-fields", inputs: ["loading", "searchFields", "documentDefinitionName", "setValuesSubject$"], outputs: ["doSearch"] }, { kind: "pipe", type: i6$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] });
373
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ObjectListComponent, decorators: [{
387
+ ObjectListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ObjectListComponent, deps: [{ token: ObjectService }, { token: ObjectColumnService }, { token: i2$1.ObjectManagementService }, { token: i4.TranslateService }, { token: i3.Router }, { token: i3.ActivatedRoute }, { token: i6.ToastrService }, { token: i4.TranslateService }, { token: i7.PageTitleService }], target: i0.ɵɵFactoryTarget.Component });
388
+ ObjectListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ObjectListComponent, selector: "valtimo-object-list", 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<ng-container\n *ngIf=\"{\n loading: loading$ | async,\n pagination: pagination$ | async,\n disableInput: disableInput$ | async,\n fields: fields$ | async,\n objectConfiguration: objectConfiguration$ | async\n } as obs\"\n>\n <div class=\"main-content pt-0\">\n <div class=\"container-fluid pr-0 pl-0\">\n <div class=\"text-right\">\n <div class=\"btn-group mt-m3px mb-3 mr-0\">\n <ng-container *ngTemplateOutlet=\"buttons; context: {obs: obs}\"></ng-container>\n </div>\n </div>\n <ng-container *ngIf=\"obs.loading === false; else loading\">\n <ng-container *ngTemplateOutlet=\"searchFields; context: {obs: obs}\"></ng-container>\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n </ng-container>\n </div>\n </div>\n <ng-container *ngTemplateOutlet=\"createNewModal\"></ng-container>\n</ng-container>\n\n<ng-template #buttons let-obs=\"obs\">\n <button\n (click)=\"openModal()\"\n cdsButton=\"primary\"\n size=\"md\"\n class=\"ml-3\"\n [disabled]=\"obs.disableInput || obs.loading\"\n >\n {{ 'object.createObject' | translate }}\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #searchFields let-obs=\"obs\">\n <div class=\"mb-3\">\n <valtimo-search-fields\n [loading]=\"obs.loading\"\n [searchFields]=\"objectSearchFields$ | async\"\n (doSearch)=\"search($event)\"\n [documentDefinitionName]=\"objectManagementId$ | async\"\n [setValuesSubject$]=\"null\"\n ></valtimo-search-fields>\n </div>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <valtimo-widget>\n <valtimo-list\n [items]=\"obs.objectConfiguration\"\n [fields]=\"obs.fields\"\n [viewMode]=\"true\"\n [header]=\"true\"\n [pagination]=\"obs.pagination\"\n paginationIdentifier=\"objectConfigurationList\"\n (paginationClicked)=\"paginationClicked($event)\"\n (paginationSet)=\"paginationSet($event)\"\n (rowClicked)=\"redirectToDetails($event)\"\n >\n <div header>\n <h3 class=\"list-header-title\">\n {{ 'object.title' | translate }}\n <sup class=\"ml-1 badge badge-pill badge-primary\">{{\n obs.objectConfiguration?.length || 0\n }}</sup>\n </h3>\n </div>\n </valtimo-list>\n </valtimo-widget>\n</ng-template>\n\n<ng-template #createNewModal>\n <cds-modal\n valtimoCdsModal\n *ngIf=\"{\n show: showModal$ | async,\n formValid: formValid$ | async,\n formDefinition: formDefinition$ | async,\n disableInput: disableInput$ | async\n } as modalObs\"\n [open]=\"modalObs.show\"\n >\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>\n {{ 'object.createObject' | translate }}\n </h3>\n </cds-modal-header>\n <section cdsModalContent>\n <ng-container *ngTemplateOutlet=\"modalContent; context: {modalObs: modalObs}\"></ng-container>\n </section>\n <ng-container *ngTemplateOutlet=\"modalFooter; context: {modalObs: modalObs}\"></ng-container>\n </cds-modal>\n</ng-template>\n\n<ng-template #modalContent let-modalObs=\"modalObs\">\n <valtimo-form-io\n [form]=\"modalObs.formDefinition\"\n (change)=\"onFormioChange($event)\"\n ></valtimo-form-io>\n</ng-template>\n\n<ng-template #modalFooter let-modalObs=\"modalObs\">\n <cds-modal-footer>\n <ng-container>\n <button\n cdsButton=\"secondary\"\n [attr.modal-primary-focus]=\"true\"\n (click)=\"closeModal()\"\n [disabled]=\"modalObs.disableInput\"\n >\n {{ 'object.close' | translate }}\n </button>\n <button\n cdsButton=\"primary\"\n [attr.modal-primary-focus]=\"true\"\n (click)=\"addObject()\"\n [disabled]=\"modalObs.disableInput || modalObs.formValid === false\"\n >\n {{ 'object.save' | translate }}\n </button>\n </ng-container>\n </cds-modal-footer>\n</ng-template>\n\n<ng-template #loading>\n <div class=\"loading-icon\"><cds-loading></cds-loading></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 */.loading-icon{display:flex;justify-content:center}\n"], dependencies: [{ kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i7.WidgetComponent, selector: "valtimo-widget", inputs: ["type", "name", "icon", "contrast", "divider", "title", "subtitle", "collapseAble", "collapse", "additionalClasses"] }, { kind: "component", type: i7.ListComponent, selector: "valtimo-list", inputs: ["items", "fields", "pagination", "viewMode", "isSearchable", "header", "actions", "paginationIdentifier", "initialSortState", "lastColumnTemplate"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged"] }, { kind: "directive", type: i9.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i9.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i9.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "component", type: i7.FormioComponent, selector: "valtimo-form-io", inputs: ["form", "options", "submission", "readOnly", "formRefresh$"], outputs: ["submit", "change"] }, { kind: "component", type: i9.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i9.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i9.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i9.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i9.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "component", type: i7.SearchFieldsComponent, selector: "valtimo-search-fields", inputs: ["loading", "searchFields", "documentDefinitionName", "setValuesSubject$", "defaultValues"], outputs: ["doSearch"] }, { kind: "directive", type: i7.ValtimoCdsModalDirective, selector: "[valtimoCdsModal]" }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] });
389
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ObjectListComponent, decorators: [{
374
390
  type: Component,
375
- args: [{ selector: 'valtimo-object-list', 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<ng-container\n *ngIf=\"{\n loading: loading$ | async,\n pagination: pagination$ | async,\n disableInput: disableInput$ | async,\n fields: fields$ | async,\n objectConfiguration: objectConfiguration$ | async\n } as obs\"\n>\n <div class=\"main-content pt-0\">\n <div class=\"container-fluid pr-0 pl-0\">\n <div class=\"text-right\">\n <div class=\"btn-group mt-m3px mb-3 mr-0\">\n <ng-container *ngTemplateOutlet=\"buttons; context: {obs: obs}\"></ng-container>\n </div>\n </div>\n <ng-container *ngIf=\"obs.loading === false; else loading\">\n <ng-container *ngTemplateOutlet=\"searchFields; context: {obs: obs}\"></ng-container>\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n </ng-container>\n </div>\n </div>\n <ng-container *ngTemplateOutlet=\"createNewModal\"></ng-container>\n</ng-container>\n\n<ng-template #buttons let-obs=\"obs\">\n <button\n (click)=\"openModal()\"\n ibmButton=\"primary\"\n size=\"md\"\n class=\"ml-3\"\n [disabled]=\"obs.disableInput || obs.loading\"\n >\n {{ 'object.createObject' | translate }}\n <svg class=\"cds--btn__icon\" ibmIcon=\"add\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #searchFields let-obs=\"obs\">\n <div class=\"mb-3\">\n <valtimo-search-fields\n [loading]=\"obs.loading\"\n [searchFields]=\"objectSearchFields$ | async\"\n (doSearch)=\"search($event)\"\n [documentDefinitionName]=\"objectManagementId$ | async\"\n [setValuesSubject$]=\"null\"\n ></valtimo-search-fields>\n </div>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <valtimo-widget>\n <valtimo-list\n [items]=\"obs.objectConfiguration\"\n [fields]=\"obs.fields\"\n [viewMode]=\"true\"\n [header]=\"true\"\n [pagination]=\"obs.pagination\"\n paginationIdentifier=\"objectConfigurationList\"\n (paginationClicked)=\"paginationClicked($event)\"\n (paginationSet)=\"paginationSet($event)\"\n (rowClicked)=\"redirectToDetails($event)\"\n >\n <div header>\n <h3 class=\"list-header-title\">\n {{ 'object.title' | translate }}\n <sup class=\"ml-1 badge badge-pill badge-primary\">{{\n obs.objectConfiguration?.length || 0\n }}</sup>\n </h3>\n </div>\n </valtimo-list>\n </valtimo-widget>\n</ng-template>\n\n<ng-template #createNewModal>\n <ibm-modal\n *ngIf=\"{\n show: showModal$ | async,\n formValid: formValid$ | async,\n formDefinition: formDefinition$ | async,\n disableInput: disableInput$ | async\n } as modalObs\"\n [open]=\"modalObs.show\"\n >\n <ibm-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 ibmModalHeaderHeading>\n {{ 'object.createObject' | translate }}\n </h3>\n </ibm-modal-header>\n <section ibmModalContent>\n <ng-container *ngTemplateOutlet=\"modalContent; context: {modalObs: modalObs}\"></ng-container>\n </section>\n <ng-container *ngTemplateOutlet=\"modalFooter; context: {modalObs: modalObs}\"></ng-container>\n </ibm-modal>\n</ng-template>\n\n<ng-template #modalContent let-modalObs=\"modalObs\">\n <valtimo-form-io\n [form]=\"modalObs.formDefinition\"\n (change)=\"onFormioChange($event)\"\n ></valtimo-form-io>\n</ng-template>\n\n<ng-template #modalFooter let-modalObs=\"modalObs\">\n <ibm-modal-footer>\n <ng-container>\n <button\n ibmButton=\"secondary\"\n [attr.modal-primary-focus]=\"true\"\n (click)=\"closeModal()\"\n [disabled]=\"modalObs.disableInput\"\n >\n {{ 'object.close' | translate }}\n </button>\n <button\n ibmButton=\"primary\"\n [attr.modal-primary-focus]=\"true\"\n (click)=\"addObject()\"\n [disabled]=\"modalObs.disableInput || modalObs.formValid === false\"\n >\n {{ 'object.save' | translate }}\n </button>\n </ng-container>\n </ibm-modal-footer>\n</ng-template>\n\n<ng-template #loading>\n <div class=\"loading-icon\"><ibm-loading></ibm-loading></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 */.loading-icon{display:flex;justify-content:center}\n"] }]
376
- }], ctorParameters: function () { return [{ type: ObjectService }, { type: ObjectColumnService }, { type: i2$1.ObjectManagementService }, { type: i4.TranslateService }, { type: i3.Router }, { type: i3.ActivatedRoute }, { type: i6.ToastrService }, { type: i4.TranslateService }]; } });
391
+ args: [{ selector: 'valtimo-object-list', 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<ng-container\n *ngIf=\"{\n loading: loading$ | async,\n pagination: pagination$ | async,\n disableInput: disableInput$ | async,\n fields: fields$ | async,\n objectConfiguration: objectConfiguration$ | async\n } as obs\"\n>\n <div class=\"main-content pt-0\">\n <div class=\"container-fluid pr-0 pl-0\">\n <div class=\"text-right\">\n <div class=\"btn-group mt-m3px mb-3 mr-0\">\n <ng-container *ngTemplateOutlet=\"buttons; context: {obs: obs}\"></ng-container>\n </div>\n </div>\n <ng-container *ngIf=\"obs.loading === false; else loading\">\n <ng-container *ngTemplateOutlet=\"searchFields; context: {obs: obs}\"></ng-container>\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n </ng-container>\n </div>\n </div>\n <ng-container *ngTemplateOutlet=\"createNewModal\"></ng-container>\n</ng-container>\n\n<ng-template #buttons let-obs=\"obs\">\n <button\n (click)=\"openModal()\"\n cdsButton=\"primary\"\n size=\"md\"\n class=\"ml-3\"\n [disabled]=\"obs.disableInput || obs.loading\"\n >\n {{ 'object.createObject' | translate }}\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #searchFields let-obs=\"obs\">\n <div class=\"mb-3\">\n <valtimo-search-fields\n [loading]=\"obs.loading\"\n [searchFields]=\"objectSearchFields$ | async\"\n (doSearch)=\"search($event)\"\n [documentDefinitionName]=\"objectManagementId$ | async\"\n [setValuesSubject$]=\"null\"\n ></valtimo-search-fields>\n </div>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <valtimo-widget>\n <valtimo-list\n [items]=\"obs.objectConfiguration\"\n [fields]=\"obs.fields\"\n [viewMode]=\"true\"\n [header]=\"true\"\n [pagination]=\"obs.pagination\"\n paginationIdentifier=\"objectConfigurationList\"\n (paginationClicked)=\"paginationClicked($event)\"\n (paginationSet)=\"paginationSet($event)\"\n (rowClicked)=\"redirectToDetails($event)\"\n >\n <div header>\n <h3 class=\"list-header-title\">\n {{ 'object.title' | translate }}\n <sup class=\"ml-1 badge badge-pill badge-primary\">{{\n obs.objectConfiguration?.length || 0\n }}</sup>\n </h3>\n </div>\n </valtimo-list>\n </valtimo-widget>\n</ng-template>\n\n<ng-template #createNewModal>\n <cds-modal\n valtimoCdsModal\n *ngIf=\"{\n show: showModal$ | async,\n formValid: formValid$ | async,\n formDefinition: formDefinition$ | async,\n disableInput: disableInput$ | async\n } as modalObs\"\n [open]=\"modalObs.show\"\n >\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>\n {{ 'object.createObject' | translate }}\n </h3>\n </cds-modal-header>\n <section cdsModalContent>\n <ng-container *ngTemplateOutlet=\"modalContent; context: {modalObs: modalObs}\"></ng-container>\n </section>\n <ng-container *ngTemplateOutlet=\"modalFooter; context: {modalObs: modalObs}\"></ng-container>\n </cds-modal>\n</ng-template>\n\n<ng-template #modalContent let-modalObs=\"modalObs\">\n <valtimo-form-io\n [form]=\"modalObs.formDefinition\"\n (change)=\"onFormioChange($event)\"\n ></valtimo-form-io>\n</ng-template>\n\n<ng-template #modalFooter let-modalObs=\"modalObs\">\n <cds-modal-footer>\n <ng-container>\n <button\n cdsButton=\"secondary\"\n [attr.modal-primary-focus]=\"true\"\n (click)=\"closeModal()\"\n [disabled]=\"modalObs.disableInput\"\n >\n {{ 'object.close' | translate }}\n </button>\n <button\n cdsButton=\"primary\"\n [attr.modal-primary-focus]=\"true\"\n (click)=\"addObject()\"\n [disabled]=\"modalObs.disableInput || modalObs.formValid === false\"\n >\n {{ 'object.save' | translate }}\n </button>\n </ng-container>\n </cds-modal-footer>\n</ng-template>\n\n<ng-template #loading>\n <div class=\"loading-icon\"><cds-loading></cds-loading></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 */.loading-icon{display:flex;justify-content:center}\n"] }]
392
+ }], ctorParameters: function () { return [{ type: ObjectService }, { type: ObjectColumnService }, { type: i2$1.ObjectManagementService }, { type: i4.TranslateService }, { type: i3.Router }, { type: i3.ActivatedRoute }, { type: i6.ToastrService }, { type: i4.TranslateService }, { type: i7.PageTitleService }]; } });
377
393
 
378
394
  /*
379
395
  * Copyright 2015-2020 Ritense BV, the Netherlands.
@@ -442,9 +458,9 @@ class ObjectStateService {
442
458
  this._modalType$.next(type);
443
459
  }
444
460
  }
445
- ObjectStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ObjectStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
446
- ObjectStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ObjectStateService, providedIn: 'root' });
447
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ObjectStateService, decorators: [{
461
+ ObjectStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ObjectStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
462
+ ObjectStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ObjectStateService, providedIn: 'root' });
463
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ObjectStateService, decorators: [{
448
464
  type: Injectable,
449
465
  args: [{
450
466
  providedIn: 'root',
@@ -477,9 +493,9 @@ class TabService {
477
493
  this._currentTab$.next(tab);
478
494
  }
479
495
  }
480
- TabService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TabService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
481
- TabService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TabService, providedIn: 'root' });
482
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TabService, decorators: [{
496
+ TabService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TabService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
497
+ TabService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TabService, providedIn: 'root' });
498
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TabService, decorators: [{
483
499
  type: Injectable,
484
500
  args: [{
485
501
  providedIn: 'root',
@@ -502,13 +518,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
502
518
  * limitations under the License.
503
519
  */
504
520
  class ObjectDetailComponent {
505
- constructor(objectService, objectState, route, router, translate, toastr) {
521
+ constructor(objectService, objectState, route, router, translate, toastr, pageTitleService, breadcrumbService, objectManagementService) {
506
522
  this.objectService = objectService;
507
523
  this.objectState = objectState;
508
524
  this.route = route;
509
525
  this.router = router;
510
526
  this.translate = translate;
511
527
  this.toastr = toastr;
528
+ this.pageTitleService = pageTitleService;
529
+ this.breadcrumbService = breadcrumbService;
530
+ this.objectManagementService = objectManagementService;
512
531
  this.loading$ = new BehaviorSubject(true);
513
532
  this.submission$ = new BehaviorSubject({});
514
533
  this.formValid$ = new BehaviorSubject(false);
@@ -517,8 +536,19 @@ class ObjectDetailComponent {
517
536
  this.showDeleteModal$ = new Subject();
518
537
  this.deleteObjectUrl$ = new BehaviorSubject('');
519
538
  this.refreshObject$ = new BehaviorSubject(null);
520
- this.objectManagementId$ = this.route.params.pipe(map(params => params.objectManagementId));
521
- this.objectId$ = this.route.params.pipe(map(params => params.objectId));
539
+ this.objectManagementId$ = this.route.params.pipe(map(params => params.objectManagementId), tap(objectManagementId => {
540
+ if (!this._settingBreadcrumb && objectManagementId) {
541
+ this._settingBreadcrumb = true;
542
+ this.objectManagementService.getObjectById(objectManagementId).subscribe(objectType => {
543
+ if (objectType.id && objectType.title) {
544
+ this.setBreadcrumb(objectType.id, objectType.title);
545
+ }
546
+ });
547
+ }
548
+ }));
549
+ this.objectId$ = this.route.params.pipe(map(params => params.objectId), tap(objectId => {
550
+ this.pageTitleService.setCustomPageTitle(objectId);
551
+ }));
522
552
  this.formioFormSummary$ = combineLatest([
523
553
  this.objectManagementId$,
524
554
  this.objectId$,
@@ -536,7 +566,11 @@ class ObjectDetailComponent {
536
566
  objectId,
537
567
  formType: FormType.EDITFORM,
538
568
  })
539
- .pipe(catchError(() => this.handleRetrievingFormError()))), map(res => res?.formDefinition), tap(() => this.loading$.next(false)));
569
+ .pipe(catchError(() => {
570
+ this.disableInput();
571
+ return this.handleRetrievingFormError();
572
+ }))), map(res => res?.formDefinition), tap(() => this.loading$.next(false)));
573
+ this._settingBreadcrumb = false;
540
574
  }
541
575
  saveObject() {
542
576
  this.disableInput();
@@ -619,13 +653,20 @@ class ObjectDetailComponent {
619
653
  this.toastr.error(this.translate.instant('object.messages.objectDeleteError'));
620
654
  return throwError(error);
621
655
  }
656
+ setBreadcrumb(objectTypeId, title) {
657
+ this.breadcrumbService.setSecondBreadcrumb({
658
+ route: [`/objects/${objectTypeId}`],
659
+ content: title,
660
+ href: `/objects/${objectTypeId}`,
661
+ });
662
+ }
622
663
  }
623
- ObjectDetailComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ObjectDetailComponent, deps: [{ token: ObjectService }, { token: ObjectStateService }, { token: i3.ActivatedRoute }, { token: i3.Router }, { token: i4.TranslateService }, { token: i6.ToastrService }], target: i0.ɵɵFactoryTarget.Component });
624
- ObjectDetailComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ObjectDetailComponent, selector: "valtimo-object-detail", 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<ng-container\n *ngIf=\"{\n formioFormSummary: formioFormSummary$ | async\n } as obs\"\n>\n <div class=\"container-fluid pr-0 pl-0\">\n <div class=\"row\">\n <div class=\"col-12\">\n <div class=\"text-right\">\n <div class=\"btn-group mb-1\">\n <ng-container *ngTemplateOutlet=\"buttons; context: {obs: obs}\"></ng-container>\n </div>\n </div>\n </div>\n <div class=\"col-12\">\n <ng-container *ngTemplateOutlet=\"widget; context: {obs: obs}\"></ng-container>\n </div>\n </div>\n </div>\n <ng-container *ngTemplateOutlet=\"createEditModal\"></ng-container>\n <ng-container *ngTemplateOutlet=\"deleteModal\"></ng-container>\n</ng-container>\n\n<ng-template #buttons let-obs=\"obs\">\n <button (click)=\"openModal()\" ibmButton=\"primary\" size=\"md\">\n {{ 'object.editObject' | translate }}\n <svg class=\"cds--btn__icon\" ibmIcon=\"add\" size=\"16\"></svg>\n </button>\n\n <button (click)=\"deleteObject()\" ibmButton=\"danger\" size=\"md\" class=\"ml-3\">\n {{ 'object.deleteObject' | translate }}\n <svg class=\"cds--btn__icon\" ibmIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #widget let-obs=\"obs\">\n <valtimo-form-io [form]=\"obs.formioFormSummary\" [readOnly]=\"true\"></valtimo-form-io>\n</ng-template>\n\n<ng-template #createEditModal>\n <ibm-modal\n *ngIf=\"{\n show: showModal$ | async,\n formValid: formValid$ | async,\n disableInput: disableInput$ | async,\n formioFormEdit: formioFormEdit$ | async\n } as modalObs\"\n [open]=\"modalObs.show\"\n >\n <ibm-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 ibmModalHeaderHeading>\n {{ 'object.editObject' | translate }}\n </h3>\n </ibm-modal-header>\n <section ibmModalContent>\n <ng-container *ngTemplateOutlet=\"modalContent; context: {modalObs: modalObs}\"></ng-container>\n </section>\n <ng-container *ngTemplateOutlet=\"modalFooter; context: {modalObs: modalObs}\"></ng-container>\n </ibm-modal>\n</ng-template>\n\n<ng-template #modalContent let-modalObs=\"modalObs\">\n <valtimo-form-io\n [form]=\"modalObs.formioFormEdit\"\n (change)=\"onFormioChange($event)\"\n ></valtimo-form-io>\n</ng-template>\n\n<ng-template #modalFooter let-modalObs=\"modalObs\">\n <ibm-modal-footer>\n <ng-container>\n <button\n ibmButton=\"secondary\"\n [attr.modal-primary-focus]=\"true\"\n (click)=\"closeModal()\"\n [disabled]=\"modalObs.disableInput\"\n >\n {{ 'object.close' | translate }}\n </button>\n <button\n ibmButton=\"primary\"\n [attr.modal-primary-focus]=\"true\"\n (click)=\"saveObject()\"\n [disabled]=\"modalObs.disableInput || modalObs.formValid === false\"\n >\n {{ 'object.save' | translate }}\n </button>\n </ng-container>\n </ibm-modal-footer>\n</ng-template>\n\n<ng-template #loading>\n <div class=\"loading-icon\"><ibm-loading></ibm-loading></div>\n</ng-template>\n\n<ng-template #deleteModal>\n <valtimo-confirmation-modal\n [showModalSubject$]=\"showDeleteModal$\"\n [outputOnConfirm]=\"deleteObjectUrl$ | async\"\n (confirmEvent)=\"deleteObjectConfirmation()\"\n confirmButtonTextTranslationKey=\"object.deleteObject\"\n titleTranslationKey=\"object.deleteObject\"\n contentTranslationKey=\"object.deleteObjectConfirmation\"\n ></valtimo-confirmation-modal>\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 */.row{margin:0}.object-schema{resize:none}valtimo-widget::ng-deep .card-border.card-full-default{border:none}\n"], dependencies: [{ kind: "directive", type: i6$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i9.Button, selector: "[ibmButton]", inputs: ["ibmButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i9.IconDirective, selector: "[ibmIcon]", inputs: ["ibmIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i9.Loading, selector: "ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "component", type: i8.FormioComponent, selector: "valtimo-form-io", inputs: ["form", "options", "submission", "readOnly", "formRefresh$"], outputs: ["submit", "change"] }, { kind: "component", type: i9.Modal, selector: "ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i9.ModalHeader, selector: "ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i9.ModalFooter, selector: "ibm-modal-footer" }, { kind: "directive", type: i9.ModalContent, selector: "[ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i9.ModalHeaderHeading, selector: "[ibmModalHeaderHeading]" }, { kind: "component", type: i8.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "cancelButtonText", "cancelButtonTextTranslationKey", "showModalSubject$", "outputOnConfirm"], outputs: ["confirmEvent"] }, { kind: "pipe", type: i6$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] });
625
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ObjectDetailComponent, decorators: [{
664
+ ObjectDetailComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ObjectDetailComponent, deps: [{ token: ObjectService }, { token: ObjectStateService }, { token: i3.ActivatedRoute }, { token: i3.Router }, { token: i4.TranslateService }, { token: i6.ToastrService }, { token: i7.PageTitleService }, { token: i7.BreadcrumbService }, { token: i2$1.ObjectManagementService }], target: i0.ɵɵFactoryTarget.Component });
665
+ ObjectDetailComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ObjectDetailComponent, selector: "valtimo-object-detail", 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<ng-container\n *ngIf=\"{\n formioFormSummary: formioFormSummary$ | async,\n disableInput: disableInput$ | async\n } as obs\"\n>\n <div class=\"container-fluid pr-0 pl-0\">\n <div class=\"row\">\n <div class=\"col-12\">\n <div class=\"text-right\">\n <div class=\"btn-group mb-1\">\n <ng-container *ngTemplateOutlet=\"buttons; context: {obs: obs}\"></ng-container>\n </div>\n </div>\n </div>\n <div class=\"col-12\">\n <ng-container *ngTemplateOutlet=\"widget; context: {obs: obs}\"></ng-container>\n </div>\n </div>\n </div>\n <ng-container *ngTemplateOutlet=\"createEditModal\"></ng-container>\n <ng-container *ngTemplateOutlet=\"deleteModal\"></ng-container>\n</ng-container>\n\n<ng-template #buttons let-obs=\"obs\">\n <button [disabled]=\"obs.disableInput\" (click)=\"openModal()\" cdsButton=\"primary\" size=\"md\">\n {{ 'object.editObject' | translate }}\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n\n <button (click)=\"deleteObject()\" cdsButton=\"danger\" size=\"md\" class=\"ml-3\">\n {{ 'object.deleteObject' | translate }}\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #widget let-obs=\"obs\">\n <valtimo-form-io\n *ngIf=\"obs.formioFormSummary\"\n [form]=\"obs.formioFormSummary\"\n [readOnly]=\"true\"\n ></valtimo-form-io>\n</ng-template>\n\n<ng-template #createEditModal>\n <cds-modal\n valtimoCdsModal\n *ngIf=\"{\n show: showModal$ | async,\n formValid: formValid$ | async,\n disableInput: disableInput$ | async,\n formioFormEdit: formioFormEdit$ | async\n } as modalObs\"\n [open]=\"modalObs.show\"\n >\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>\n {{ 'object.editObject' | translate }}\n </h3>\n </cds-modal-header>\n <section cdsModalContent>\n <ng-container *ngTemplateOutlet=\"modalContent; context: {modalObs: modalObs}\"></ng-container>\n </section>\n <ng-container *ngTemplateOutlet=\"modalFooter; context: {modalObs: modalObs}\"></ng-container>\n </cds-modal>\n</ng-template>\n\n<ng-template #modalContent let-modalObs=\"modalObs\">\n <valtimo-form-io\n [form]=\"modalObs.formioFormEdit\"\n (change)=\"onFormioChange($event)\"\n ></valtimo-form-io>\n</ng-template>\n\n<ng-template #modalFooter let-modalObs=\"modalObs\">\n <cds-modal-footer>\n <ng-container>\n <button\n cdsButton=\"secondary\"\n [attr.modal-primary-focus]=\"true\"\n (click)=\"closeModal()\"\n [disabled]=\"modalObs.disableInput\"\n >\n {{ 'object.close' | translate }}\n </button>\n <button\n cdsButton=\"primary\"\n [attr.modal-primary-focus]=\"true\"\n (click)=\"saveObject()\"\n [disabled]=\"modalObs.disableInput || modalObs.formValid === false\"\n >\n {{ 'object.save' | translate }}\n </button>\n </ng-container>\n </cds-modal-footer>\n</ng-template>\n\n<ng-template #loading>\n <div class=\"loading-icon\"><cds-loading></cds-loading></div>\n</ng-template>\n\n<ng-template #deleteModal>\n <valtimo-confirmation-modal\n [showModalSubject$]=\"showDeleteModal$\"\n [outputOnConfirm]=\"deleteObjectUrl$ | async\"\n (confirmEvent)=\"deleteObjectConfirmation()\"\n confirmButtonTextTranslationKey=\"object.deleteObject\"\n titleTranslationKey=\"object.deleteObject\"\n contentTranslationKey=\"object.deleteObjectConfirmation\"\n ></valtimo-confirmation-modal>\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 */.row{margin:0}.object-schema{resize:none}valtimo-widget::ng-deep .card-border.card-full-default{border:none}\n"], dependencies: [{ kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i9.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i9.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i9.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "component", type: i7.FormioComponent, selector: "valtimo-form-io", inputs: ["form", "options", "submission", "readOnly", "formRefresh$"], outputs: ["submit", "change"] }, { kind: "component", type: i9.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i9.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i9.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i9.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i9.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "component", type: i7.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm"], outputs: ["confirmEvent"] }, { kind: "directive", type: i7.ValtimoCdsModalDirective, selector: "[valtimoCdsModal]" }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] });
666
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ObjectDetailComponent, decorators: [{
626
667
  type: Component,
627
- args: [{ selector: 'valtimo-object-detail', 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<ng-container\n *ngIf=\"{\n formioFormSummary: formioFormSummary$ | async\n } as obs\"\n>\n <div class=\"container-fluid pr-0 pl-0\">\n <div class=\"row\">\n <div class=\"col-12\">\n <div class=\"text-right\">\n <div class=\"btn-group mb-1\">\n <ng-container *ngTemplateOutlet=\"buttons; context: {obs: obs}\"></ng-container>\n </div>\n </div>\n </div>\n <div class=\"col-12\">\n <ng-container *ngTemplateOutlet=\"widget; context: {obs: obs}\"></ng-container>\n </div>\n </div>\n </div>\n <ng-container *ngTemplateOutlet=\"createEditModal\"></ng-container>\n <ng-container *ngTemplateOutlet=\"deleteModal\"></ng-container>\n</ng-container>\n\n<ng-template #buttons let-obs=\"obs\">\n <button (click)=\"openModal()\" ibmButton=\"primary\" size=\"md\">\n {{ 'object.editObject' | translate }}\n <svg class=\"cds--btn__icon\" ibmIcon=\"add\" size=\"16\"></svg>\n </button>\n\n <button (click)=\"deleteObject()\" ibmButton=\"danger\" size=\"md\" class=\"ml-3\">\n {{ 'object.deleteObject' | translate }}\n <svg class=\"cds--btn__icon\" ibmIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #widget let-obs=\"obs\">\n <valtimo-form-io [form]=\"obs.formioFormSummary\" [readOnly]=\"true\"></valtimo-form-io>\n</ng-template>\n\n<ng-template #createEditModal>\n <ibm-modal\n *ngIf=\"{\n show: showModal$ | async,\n formValid: formValid$ | async,\n disableInput: disableInput$ | async,\n formioFormEdit: formioFormEdit$ | async\n } as modalObs\"\n [open]=\"modalObs.show\"\n >\n <ibm-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 ibmModalHeaderHeading>\n {{ 'object.editObject' | translate }}\n </h3>\n </ibm-modal-header>\n <section ibmModalContent>\n <ng-container *ngTemplateOutlet=\"modalContent; context: {modalObs: modalObs}\"></ng-container>\n </section>\n <ng-container *ngTemplateOutlet=\"modalFooter; context: {modalObs: modalObs}\"></ng-container>\n </ibm-modal>\n</ng-template>\n\n<ng-template #modalContent let-modalObs=\"modalObs\">\n <valtimo-form-io\n [form]=\"modalObs.formioFormEdit\"\n (change)=\"onFormioChange($event)\"\n ></valtimo-form-io>\n</ng-template>\n\n<ng-template #modalFooter let-modalObs=\"modalObs\">\n <ibm-modal-footer>\n <ng-container>\n <button\n ibmButton=\"secondary\"\n [attr.modal-primary-focus]=\"true\"\n (click)=\"closeModal()\"\n [disabled]=\"modalObs.disableInput\"\n >\n {{ 'object.close' | translate }}\n </button>\n <button\n ibmButton=\"primary\"\n [attr.modal-primary-focus]=\"true\"\n (click)=\"saveObject()\"\n [disabled]=\"modalObs.disableInput || modalObs.formValid === false\"\n >\n {{ 'object.save' | translate }}\n </button>\n </ng-container>\n </ibm-modal-footer>\n</ng-template>\n\n<ng-template #loading>\n <div class=\"loading-icon\"><ibm-loading></ibm-loading></div>\n</ng-template>\n\n<ng-template #deleteModal>\n <valtimo-confirmation-modal\n [showModalSubject$]=\"showDeleteModal$\"\n [outputOnConfirm]=\"deleteObjectUrl$ | async\"\n (confirmEvent)=\"deleteObjectConfirmation()\"\n confirmButtonTextTranslationKey=\"object.deleteObject\"\n titleTranslationKey=\"object.deleteObject\"\n contentTranslationKey=\"object.deleteObjectConfirmation\"\n ></valtimo-confirmation-modal>\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 */.row{margin:0}.object-schema{resize:none}valtimo-widget::ng-deep .card-border.card-full-default{border:none}\n"] }]
628
- }], ctorParameters: function () { return [{ type: ObjectService }, { type: ObjectStateService }, { type: i3.ActivatedRoute }, { type: i3.Router }, { type: i4.TranslateService }, { type: i6.ToastrService }]; } });
668
+ args: [{ selector: 'valtimo-object-detail', 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<ng-container\n *ngIf=\"{\n formioFormSummary: formioFormSummary$ | async,\n disableInput: disableInput$ | async\n } as obs\"\n>\n <div class=\"container-fluid pr-0 pl-0\">\n <div class=\"row\">\n <div class=\"col-12\">\n <div class=\"text-right\">\n <div class=\"btn-group mb-1\">\n <ng-container *ngTemplateOutlet=\"buttons; context: {obs: obs}\"></ng-container>\n </div>\n </div>\n </div>\n <div class=\"col-12\">\n <ng-container *ngTemplateOutlet=\"widget; context: {obs: obs}\"></ng-container>\n </div>\n </div>\n </div>\n <ng-container *ngTemplateOutlet=\"createEditModal\"></ng-container>\n <ng-container *ngTemplateOutlet=\"deleteModal\"></ng-container>\n</ng-container>\n\n<ng-template #buttons let-obs=\"obs\">\n <button [disabled]=\"obs.disableInput\" (click)=\"openModal()\" cdsButton=\"primary\" size=\"md\">\n {{ 'object.editObject' | translate }}\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n\n <button (click)=\"deleteObject()\" cdsButton=\"danger\" size=\"md\" class=\"ml-3\">\n {{ 'object.deleteObject' | translate }}\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #widget let-obs=\"obs\">\n <valtimo-form-io\n *ngIf=\"obs.formioFormSummary\"\n [form]=\"obs.formioFormSummary\"\n [readOnly]=\"true\"\n ></valtimo-form-io>\n</ng-template>\n\n<ng-template #createEditModal>\n <cds-modal\n valtimoCdsModal\n *ngIf=\"{\n show: showModal$ | async,\n formValid: formValid$ | async,\n disableInput: disableInput$ | async,\n formioFormEdit: formioFormEdit$ | async\n } as modalObs\"\n [open]=\"modalObs.show\"\n >\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"closeModal()\">\n <h3 cdsModalHeaderHeading>\n {{ 'object.editObject' | translate }}\n </h3>\n </cds-modal-header>\n <section cdsModalContent>\n <ng-container *ngTemplateOutlet=\"modalContent; context: {modalObs: modalObs}\"></ng-container>\n </section>\n <ng-container *ngTemplateOutlet=\"modalFooter; context: {modalObs: modalObs}\"></ng-container>\n </cds-modal>\n</ng-template>\n\n<ng-template #modalContent let-modalObs=\"modalObs\">\n <valtimo-form-io\n [form]=\"modalObs.formioFormEdit\"\n (change)=\"onFormioChange($event)\"\n ></valtimo-form-io>\n</ng-template>\n\n<ng-template #modalFooter let-modalObs=\"modalObs\">\n <cds-modal-footer>\n <ng-container>\n <button\n cdsButton=\"secondary\"\n [attr.modal-primary-focus]=\"true\"\n (click)=\"closeModal()\"\n [disabled]=\"modalObs.disableInput\"\n >\n {{ 'object.close' | translate }}\n </button>\n <button\n cdsButton=\"primary\"\n [attr.modal-primary-focus]=\"true\"\n (click)=\"saveObject()\"\n [disabled]=\"modalObs.disableInput || modalObs.formValid === false\"\n >\n {{ 'object.save' | translate }}\n </button>\n </ng-container>\n </cds-modal-footer>\n</ng-template>\n\n<ng-template #loading>\n <div class=\"loading-icon\"><cds-loading></cds-loading></div>\n</ng-template>\n\n<ng-template #deleteModal>\n <valtimo-confirmation-modal\n [showModalSubject$]=\"showDeleteModal$\"\n [outputOnConfirm]=\"deleteObjectUrl$ | async\"\n (confirmEvent)=\"deleteObjectConfirmation()\"\n confirmButtonTextTranslationKey=\"object.deleteObject\"\n titleTranslationKey=\"object.deleteObject\"\n contentTranslationKey=\"object.deleteObjectConfirmation\"\n ></valtimo-confirmation-modal>\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 */.row{margin:0}.object-schema{resize:none}valtimo-widget::ng-deep .card-border.card-full-default{border:none}\n"] }]
669
+ }], ctorParameters: function () { return [{ type: ObjectService }, { type: ObjectStateService }, { type: i3.ActivatedRoute }, { type: i3.Router }, { type: i4.TranslateService }, { type: i6.ToastrService }, { type: i7.PageTitleService }, { type: i7.BreadcrumbService }, { type: i2$1.ObjectManagementService }]; } });
629
670
 
630
671
  /*
631
672
  * Copyright 2015-2020 Ritense BV, the Netherlands.
@@ -667,9 +708,9 @@ class ObjectDetailContainerComponent {
667
708
  this.tabSubscription?.unsubscribe();
668
709
  }
669
710
  }
670
- ObjectDetailContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ObjectDetailContainerComponent, deps: [{ token: ObjectStateService }, { token: ObjectService }, { token: i3.ActivatedRoute }, { token: i2.ConfigService }, { token: TabService }], target: i0.ɵɵFactoryTarget.Component });
671
- ObjectDetailContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ObjectDetailContainerComponent, selector: "valtimo-object-detail-container", ngImport: i0, template: "<!--\n ~ Copyright 2015-2022 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<div class=\"main-content\">\n <div class=\"container-fluid\">\n <div class=\"col-12 px-0 mb-5\">\n <valtimo-widget>\n <ng-container *ngTemplateOutlet=\"title\"></ng-container>\n <ng-container *ngTemplateOutlet=\"tabs\"></ng-container>\n <ng-container *ngTemplateOutlet=\"tabContent\"></ng-container>\n </valtimo-widget>\n </div>\n </div>\n</div>\n\n<ng-template #title>\n <div class=\"bg-light dossier-header\">\n <h3 class=\"dossier-title\">\n {{ 'object.header' | translate }}\n </h3>\n </div>\n</ng-template>\n\n<ng-template #tabs>\n <ul class=\"nav nav-tabs\">\n <li class=\"nav-item\">\n <a\n id=\"general-tab\"\n class=\"nav-link clickable active\"\n data-toggle=\"tab\"\n (click)=\"displayBodyComponent(TabEnum.GENERAL)\"\n >\n {{ 'object.tabs.general' | translate }}\n </a>\n </li>\n </ul>\n</ng-template>\n\n<ng-template #tabContent>\n <div class=\"pl-1 pr-1 pt-3 bg-white position-relative tab-container\">\n <div *ngIf=\"currentTab && currentTab === TabEnum.GENERAL\">\n <valtimo-object-detail></valtimo-object-detail>\n </div>\n </div>\n</ng-template>\n", styles: [".tab-container{min-height:300px}.dossier-header{height:80px;padding-top:21px;padding-left:18px;padding-right:18px;border-bottom:1px solid rgba(0,0,0,.125)}.dossier-title{margin-top:0;margin-bottom:7px}\n"], dependencies: [{ kind: "directive", type: i6$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i8.WidgetComponent, selector: "valtimo-widget", inputs: ["type", "name", "icon", "contrast", "divider", "title", "subtitle", "collapseAble", "collapse", "additionalClasses"] }, { kind: "component", type: ObjectDetailComponent, selector: "valtimo-object-detail" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] });
672
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ObjectDetailContainerComponent, decorators: [{
711
+ ObjectDetailContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ObjectDetailContainerComponent, deps: [{ token: ObjectStateService }, { token: ObjectService }, { token: i3.ActivatedRoute }, { token: i2.ConfigService }, { token: TabService }], target: i0.ɵɵFactoryTarget.Component });
712
+ ObjectDetailContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ObjectDetailContainerComponent, selector: "valtimo-object-detail-container", ngImport: i0, template: "<!--\n ~ Copyright 2015-2022 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<div class=\"main-content\">\n <div class=\"container-fluid\">\n <div class=\"col-12 px-0 mb-5\">\n <valtimo-widget>\n <ng-container *ngTemplateOutlet=\"title\"></ng-container>\n <ng-container *ngTemplateOutlet=\"tabs\"></ng-container>\n <ng-container *ngTemplateOutlet=\"tabContent\"></ng-container>\n </valtimo-widget>\n </div>\n </div>\n</div>\n\n<ng-template #title>\n <div class=\"bg-light dossier-header\">\n <h3 class=\"dossier-title\">\n {{ 'object.header' | translate }}\n </h3>\n </div>\n</ng-template>\n\n<ng-template #tabs>\n <ul class=\"nav nav-tabs\">\n <li class=\"nav-item\">\n <a\n id=\"general-tab\"\n class=\"nav-link clickable active\"\n data-toggle=\"tab\"\n (click)=\"displayBodyComponent(TabEnum.GENERAL)\"\n >\n {{ 'object.tabs.general' | translate }}\n </a>\n </li>\n </ul>\n</ng-template>\n\n<ng-template #tabContent>\n <div class=\"pl-1 pr-1 pt-3 bg-white position-relative tab-container\">\n <div *ngIf=\"currentTab && currentTab === TabEnum.GENERAL\">\n <valtimo-object-detail></valtimo-object-detail>\n </div>\n </div>\n</ng-template>\n", styles: [".tab-container{min-height:300px}.dossier-header{height:80px;padding-top:21px;padding-left:18px;padding-right:18px;border-bottom:1px solid rgba(0,0,0,.125)}.dossier-title{margin-top:0;margin-bottom:7px}\n"], dependencies: [{ kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i7.WidgetComponent, selector: "valtimo-widget", inputs: ["type", "name", "icon", "contrast", "divider", "title", "subtitle", "collapseAble", "collapse", "additionalClasses"] }, { kind: "component", type: ObjectDetailComponent, selector: "valtimo-object-detail" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] });
713
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ObjectDetailContainerComponent, decorators: [{
673
714
  type: Component,
674
715
  args: [{ selector: 'valtimo-object-detail-container', template: "<!--\n ~ Copyright 2015-2022 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<div class=\"main-content\">\n <div class=\"container-fluid\">\n <div class=\"col-12 px-0 mb-5\">\n <valtimo-widget>\n <ng-container *ngTemplateOutlet=\"title\"></ng-container>\n <ng-container *ngTemplateOutlet=\"tabs\"></ng-container>\n <ng-container *ngTemplateOutlet=\"tabContent\"></ng-container>\n </valtimo-widget>\n </div>\n </div>\n</div>\n\n<ng-template #title>\n <div class=\"bg-light dossier-header\">\n <h3 class=\"dossier-title\">\n {{ 'object.header' | translate }}\n </h3>\n </div>\n</ng-template>\n\n<ng-template #tabs>\n <ul class=\"nav nav-tabs\">\n <li class=\"nav-item\">\n <a\n id=\"general-tab\"\n class=\"nav-link clickable active\"\n data-toggle=\"tab\"\n (click)=\"displayBodyComponent(TabEnum.GENERAL)\"\n >\n {{ 'object.tabs.general' | translate }}\n </a>\n </li>\n </ul>\n</ng-template>\n\n<ng-template #tabContent>\n <div class=\"pl-1 pr-1 pt-3 bg-white position-relative tab-container\">\n <div *ngIf=\"currentTab && currentTab === TabEnum.GENERAL\">\n <valtimo-object-detail></valtimo-object-detail>\n </div>\n </div>\n</ng-template>\n", styles: [".tab-container{min-height:300px}.dossier-header{height:80px;padding-top:21px;padding-left:18px;padding-right:18px;border-bottom:1px solid rgba(0,0,0,.125)}.dossier-title{margin-top:0;margin-bottom:7px}\n"] }]
675
716
  }], ctorParameters: function () { return [{ type: ObjectStateService }, { type: ObjectService }, { type: i3.ActivatedRoute }, { type: i2.ConfigService }, { type: TabService }]; } });
@@ -694,21 +735,21 @@ const routes = [
694
735
  path: 'objects/:objectManagementId',
695
736
  canActivate: [AuthGuardService],
696
737
  component: ObjectListComponent,
697
- data: { title: 'Objects', roles: [ROLE_USER] },
738
+ data: { title: 'Objects', roles: [ROLE_USER], customPageTitle: true },
698
739
  },
699
740
  {
700
741
  path: 'objects/:objectManagementId/:objectId',
701
742
  canActivate: [AuthGuardService],
702
743
  component: ObjectDetailContainerComponent,
703
- data: { title: 'Object details', roles: [ROLE_USER] },
744
+ data: { title: 'Object details', roles: [ROLE_USER], customPageTitle: true },
704
745
  },
705
746
  ];
706
747
  class ObjectRoutingModule {
707
748
  }
708
- ObjectRoutingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ObjectRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
709
- ObjectRoutingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: ObjectRoutingModule, imports: [CommonModule, i3.RouterModule], exports: [RouterModule] });
710
- ObjectRoutingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ObjectRoutingModule, imports: [CommonModule, RouterModule.forChild(routes), RouterModule] });
711
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ObjectRoutingModule, decorators: [{
749
+ ObjectRoutingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ObjectRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
750
+ ObjectRoutingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: ObjectRoutingModule, imports: [CommonModule, i3.RouterModule], exports: [RouterModule] });
751
+ ObjectRoutingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ObjectRoutingModule, imports: [CommonModule, RouterModule.forChild(routes), RouterModule] });
752
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ObjectRoutingModule, decorators: [{
712
753
  type: NgModule,
713
754
  args: [{
714
755
  imports: [CommonModule, RouterModule.forChild(routes)],
@@ -734,8 +775,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
734
775
  */
735
776
  class ObjectModule {
736
777
  }
737
- ObjectModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ObjectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
738
- ObjectModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: ObjectModule, declarations: [ObjectListComponent, ObjectDetailContainerComponent, ObjectDetailComponent], imports: [CommonModule,
778
+ ObjectModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ObjectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
779
+ ObjectModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: ObjectModule, declarations: [ObjectListComponent, ObjectDetailContainerComponent, ObjectDetailComponent], imports: [CommonModule,
739
780
  ObjectRoutingModule,
740
781
  TranslateModule,
741
782
  AsyncPipe,
@@ -751,8 +792,9 @@ ObjectModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
751
792
  InputModule,
752
793
  TooltipIconModule,
753
794
  ConfirmationModalModule,
754
- SearchFieldsModule] });
755
- ObjectModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ObjectModule, imports: [CommonModule,
795
+ SearchFieldsModule,
796
+ ValtimoCdsModalDirectiveModule] });
797
+ ObjectModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ObjectModule, imports: [CommonModule,
756
798
  ObjectRoutingModule,
757
799
  TranslateModule,
758
800
  WidgetModule,
@@ -767,8 +809,9 @@ ObjectModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
767
809
  InputModule,
768
810
  TooltipIconModule,
769
811
  ConfirmationModalModule,
770
- SearchFieldsModule] });
771
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ObjectModule, decorators: [{
812
+ SearchFieldsModule,
813
+ ValtimoCdsModalDirectiveModule] });
814
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ObjectModule, decorators: [{
772
815
  type: NgModule,
773
816
  args: [{
774
817
  declarations: [ObjectListComponent, ObjectDetailContainerComponent, ObjectDetailComponent],
@@ -790,6 +833,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
790
833
  TooltipIconModule,
791
834
  ConfirmationModalModule,
792
835
  SearchFieldsModule,
836
+ ValtimoCdsModalDirectiveModule,
793
837
  ],
794
838
  exports: [],
795
839
  }]