@valtimo/components 5.10.0 → 5.12.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 (50) hide show
  1. package/esm2020/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.mjs +89 -11
  2. package/esm2020/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.module.mjs +6 -3
  3. package/esm2020/lib/components/form-io/documenten-api-uploader/documenten-api-uploader-edit-form.mjs +295 -0
  4. package/esm2020/lib/components/form-io/documenten-api-uploader/documenten-api-uploader.component.mjs +147 -0
  5. package/esm2020/lib/components/form-io/documenten-api-uploader/documenten-api-uploader.formio.mjs +43 -0
  6. package/esm2020/lib/components/form-io/form-io.component.mjs +8 -13
  7. package/esm2020/lib/components/form-io/form-io.module.mjs +26 -5
  8. package/esm2020/lib/components/list/list.component.mjs +5 -5
  9. package/esm2020/lib/components/search-fields/search-fields.component.mjs +88 -0
  10. package/esm2020/lib/components/search-fields/search-fields.module.mjs +68 -0
  11. package/esm2020/lib/components/view-content/type-converters/dateTypeConverter.mjs +2 -2
  12. package/esm2020/lib/components/view-content/view-content.service.mjs +11 -1
  13. package/esm2020/lib/models/documenten-api-metadata.model.mjs +1 -1
  14. package/esm2020/lib/models/form-io.model.mjs +1 -1
  15. package/esm2020/lib/services/valtimo-modal.service.mjs +9 -2
  16. package/esm2020/public_api.mjs +5 -1
  17. package/fesm2015/valtimo-components.mjs +996 -277
  18. package/fesm2015/valtimo-components.mjs.map +1 -1
  19. package/fesm2020/valtimo-components.mjs +991 -275
  20. package/fesm2020/valtimo-components.mjs.map +1 -1
  21. package/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.d.ts +34 -5
  22. package/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.d.ts.map +1 -1
  23. package/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.module.d.ts +1 -1
  24. package/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.module.d.ts.map +1 -1
  25. package/lib/components/form-io/documenten-api-uploader/documenten-api-uploader-edit-form.d.ts +105 -0
  26. package/lib/components/form-io/documenten-api-uploader/documenten-api-uploader-edit-form.d.ts.map +1 -0
  27. package/lib/components/form-io/documenten-api-uploader/documenten-api-uploader.component.d.ts +61 -0
  28. package/lib/components/form-io/documenten-api-uploader/documenten-api-uploader.component.d.ts.map +1 -0
  29. package/lib/components/form-io/documenten-api-uploader/documenten-api-uploader.formio.d.ts +4 -0
  30. package/lib/components/form-io/documenten-api-uploader/documenten-api-uploader.formio.d.ts.map +1 -0
  31. package/lib/components/form-io/form-io.component.d.ts +2 -4
  32. package/lib/components/form-io/form-io.component.d.ts.map +1 -1
  33. package/lib/components/form-io/form-io.module.d.ts +11 -9
  34. package/lib/components/form-io/form-io.module.d.ts.map +1 -1
  35. package/lib/components/search-fields/search-fields.component.d.ts +26 -0
  36. package/lib/components/search-fields/search-fields.component.d.ts.map +1 -0
  37. package/lib/components/search-fields/search-fields.module.d.ts +13 -0
  38. package/lib/components/search-fields/search-fields.module.d.ts.map +1 -0
  39. package/lib/components/view-content/type-converters/dateTypeConverter.d.ts.map +1 -1
  40. package/lib/components/view-content/view-content.service.d.ts +1 -0
  41. package/lib/components/view-content/view-content.service.d.ts.map +1 -1
  42. package/lib/models/documenten-api-metadata.model.d.ts +2 -1
  43. package/lib/models/documenten-api-metadata.model.d.ts.map +1 -1
  44. package/lib/models/form-io.model.d.ts +3 -0
  45. package/lib/models/form-io.model.d.ts.map +1 -1
  46. package/lib/services/valtimo-modal.service.d.ts +3 -0
  47. package/lib/services/valtimo-modal.service.d.ts.map +1 -1
  48. package/package.json +2 -2
  49. package/public_api.d.ts +4 -0
  50. package/public_api.d.ts.map +1 -1
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Injectable, Component, Input, Directive, EventEmitter, Output, ViewContainerRef, ViewChild, NgModule, Pipe, HostListener, ViewChildren } from '@angular/core';
3
- import { Subject, from, switchMap, map, BehaviorSubject, Observable, combineLatest, fromEvent, Subscription, timer, take as take$1 } from 'rxjs';
3
+ import { Subject, BehaviorSubject, from, switchMap, map, Observable, combineLatest, fromEvent, Subscription, timer, take as take$1, of, filter as filter$1, startWith } from 'rxjs';
4
4
  import * as i3 from '@angular/forms';
5
5
  import { Validators, FormControl, ReactiveFormsModule, FormsModule } from '@angular/forms';
6
6
  import moment from 'moment';
@@ -11,7 +11,7 @@ import * as i1$2 from 'keycloak-angular';
11
11
  import * as i1$3 from '@valtimo/config';
12
12
  import { HttpLoaderFactory } from '@valtimo/config';
13
13
  import * as i1$4 from '@valtimo/user-interface';
14
- import { ParagraphModule, ModalModule as ModalModule$1, TitleModule, ButtonModule, FormModule, InputModule, SelectModule, DatePickerModule } from '@valtimo/user-interface';
14
+ import { ParagraphModule, ModalModule as ModalModule$1, TitleModule, ButtonModule, FormModule, InputModule, SelectModule, DatePickerModule, InputLabelModule } from '@valtimo/user-interface';
15
15
  import * as i1$5 from '@angular/router';
16
16
  import { RouterModule, NavigationEnd, PRIMARY_OUTLET, NavigationStart } from '@angular/router';
17
17
  import * as i2 from '@valtimo/document';
@@ -25,7 +25,7 @@ import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
25
25
  import * as i1$9 from '@angular/common/http';
26
26
  import { HttpClient } from '@angular/common/http';
27
27
  import * as i5 from '@valtimo/context';
28
- import { map as map$1, debounceTime, take, filter, switchMap as switchMap$1 } from 'rxjs/operators';
28
+ import { map as map$1, debounceTime, take, filter, switchMap as switchMap$1, tap } from 'rxjs/operators';
29
29
  import * as i2$1 from '@angular/platform-browser';
30
30
  import BpmnJS from 'bpmn-js/dist/bpmn-navigated-viewer.production.min.js';
31
31
  import heatmap from 'heatmap.js-fixed/build/heatmap.js';
@@ -243,13 +243,20 @@ class TimelineItemImpl {
243
243
  class ValtimoModalService {
244
244
  constructor() {
245
245
  this._scrollToTop$ = new Subject();
246
+ this._documentDefinitionName$ = new BehaviorSubject('');
246
247
  }
247
248
  get scrollToTop$() {
248
249
  return this._scrollToTop$.asObservable();
249
250
  }
251
+ get documentDefinitionName$() {
252
+ return this._documentDefinitionName$.asObservable();
253
+ }
250
254
  scrollToTop() {
251
255
  this._scrollToTop$.next(null);
252
256
  }
257
+ setDocumentDefinitionName(documentDefinitionName) {
258
+ this._documentDefinitionName$.next(documentDefinitionName);
259
+ }
253
260
  }
254
261
  ValtimoModalService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ValtimoModalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
255
262
  ValtimoModalService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ValtimoModalService, providedIn: 'root' });
@@ -1896,7 +1903,7 @@ class DateTypeConverter {
1896
1903
  if (!value) {
1897
1904
  return '-';
1898
1905
  }
1899
- return moment(value).format('DD-MM-YYYY, hh:mm A');
1906
+ return moment(value).format(definition?.format || 'DD-MM-YYYY, hh:mm A');
1900
1907
  }
1901
1908
  }
1902
1909
 
@@ -2028,9 +2035,16 @@ class ViewContentService {
2028
2035
  TYPE_CONVERTERS.forEach(converter => this.addConverter(converter));
2029
2036
  }
2030
2037
  get(value, definition) {
2038
+ const separator = ':';
2031
2039
  if (!definition.viewType) {
2032
2040
  definition.viewType = typeof value;
2033
2041
  }
2042
+ if (definition.viewType.includes(separator)) {
2043
+ // Get the substring of the string after the separator (:) and assign it to a new key
2044
+ definition.format = definition.viewType.slice(this.getSeparatorIndex(definition, separator) + 1);
2045
+ // Remove the substring after the separator and the separator from the string and assign it back to the viewType
2046
+ definition.viewType = definition.viewType.slice(0, this.getSeparatorIndex(definition, separator));
2047
+ }
2034
2048
  if (typeof this.converters[definition.viewType] !== 'undefined') {
2035
2049
  return this.converters[definition.viewType].convert(value, definition);
2036
2050
  }
@@ -2044,6 +2058,9 @@ class ViewContentService {
2044
2058
  }
2045
2059
  this.converters[converter.getTypeString()] = converter;
2046
2060
  }
2061
+ getSeparatorIndex(definition, separator) {
2062
+ return definition.viewType.indexOf(separator);
2063
+ }
2047
2064
  }
2048
2065
  ViewContentService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ViewContentService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2049
2066
  ViewContentService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ViewContentService, providedIn: 'root' });
@@ -2237,10 +2254,10 @@ class ListComponent {
2237
2254
  }
2238
2255
  ListComponent.PAGINATION_SIZE = 'PaginationSize';
2239
2256
  ListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ListComponent, deps: [{ token: ViewContentService }, { token: i4.NGXLogger }], target: i0.ɵɵFactoryTarget.Component });
2240
- ListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ListComponent, selector: "valtimo-list", inputs: { items: "items", fields: "fields", pagination: "pagination", viewMode: "viewMode", isSearchable: "isSearchable", header: "header", actions: "actions", paginationIdentifier: "paginationIdentifier", initialSortState: "initialSortState" }, outputs: { rowClicked: "rowClicked", paginationClicked: "paginationClicked", paginationSet: "paginationSet", search: "search", sortChanged: "sortChanged" }, viewQueries: [{ propertyName: "searchBox", first: true, predicate: ["searchBox"], descendants: true }], usesOnChanges: 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<div>\n <div *ngIf=\"(items?.length > 0 && fields?.length > 0) || header\">\n <div\n class=\"d-flex align-items-center search-holder bg-light\"\n [ngClass]=\"{'pb-4 pt-4': !header}\"\n *ngIf=\"isSearchable || viewMode || header\"\n >\n <div class=\"align-self-start\">\n <ng-content select=\"[header]\"></ng-content>\n </div>\n\n <div class=\"ml-auto row\">\n <input\n *ngIf=\"isSearchable\"\n class=\"form-control col-sm-8\"\n type=\"text\"\n placeholder=\"Search...\"\n #searchBox\n />\n\n <div\n class=\"switch-view-holder btn-group col-sm-4 mt-1 mt-sm-0\"\n role=\"group\"\n *ngIf=\"viewMode\"\n >\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'table' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('table')\"\n >\n <i class=\"icon mdi mdi-view-headline view-icon\"></i>\n </button>\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'tile' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('tile')\"\n >\n <i class=\"icon mdi mdi-view-module view-icon\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <div *ngIf=\"items?.length > 0 && fields?.length > 0\">\n <div class=\"table-responsive noSwipe\" *ngIf=\"!viewMode || viewListAs === 'table'\">\n <table class=\"table table-striped table-hover m-0\" *ngIf=\"sort$ | async as sort\">\n <thead>\n <tr>\n <th\n *ngFor=\"let field of fields\"\n (click)=\"handleFieldClick(field.key, field.sortable)\"\n [ngClass]=\"{\n sortable: field.sortable,\n 'is-being-sorted': field.key === sort.state.name && sort.isSorting,\n ascending: sort.state.direction === 'ASC'\n }\"\n >\n {{ field.label }}\n </th>\n <th *ngFor=\"let action of actions\">\n {{ action.columnName }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n [ngClass]=\"{'click-able': this.rowClicked.observers.length > 0}\"\n *ngFor=\"let item of items | listFilter: searchModel\"\n (click)=\"onClickRow(item)\"\n >\n <td class=\"align-top\" *ngFor=\"let listItemField of item.listItemFields\">\n <ng-container *ngIf=\"listItemField.type === ''\">\n {{ listItemField.value || '-' }}\n </ng-container>\n\n <ng-container\n *ngIf=\"listItemField.type === 'dropdownActions'\"\n [ngTemplateOutlet]=\"dropdownActions\"\n [ngTemplateOutletContext]=\"{listItemField: listItemField, item: item}\"\n ></ng-container>\n </td>\n <td class=\"align-top\" *ngFor=\"let action of actions\">\n <i\n class=\"action-icon\"\n style=\"cursor: pointer\"\n [ngClass]=\"action.iconClass\"\n (click)=\"action.callback(item)\"\n ></i>\n </td>\n </tr>\n <tr>\n <td *ngIf=\"(items | listFilter: searchModel).length === 0\" [colSpan]=\"fields.length\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <div class=\"container-fluid\" *ngIf=\"viewMode && viewListAs === 'tile'\">\n <div class=\"row p-2\">\n <div\n class=\"col-12 col-sm-6 col-xl-4 p-2\"\n *ngFor=\"let item of items | listFilter: searchModel\"\n (click)=\"onClickRow(item)\"\n >\n <div class=\"click-able tile-holder p-4\">\n <dl class=\"row mb-0\" *ngFor=\"let listItemField of item.listItemFields\">\n <dt class=\"col-12 col-md-5 text-xl-right\">{{ listItemField.label }}</dt>\n <dd class=\"col-12 col-md-7\">{{ listItemField.value || '-' }}</dd>\n </dl>\n </div>\n </div>\n <div class=\"col-12\" *ngIf=\"(items | listFilter: searchModel).length === 0\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"pagination-holder bg-light px-4 pt-4 pb-2 overflow-auto row mr-0 ml-0\"\n *ngIf=\"pagination && items?.length > 0 && fields?.length > 0\"\n >\n <div class=\"float-left page-count col-4\">\n <strong>{{\n 'list.currentPage' | translate: {current: pagination.page, total: getTotalPageCount()}\n }}</strong>\n <br />\n {{\n pagination.collectionSize === 1\n ? ('list.showingResult' | translate: {number: (items | listFilter: searchModel).length})\n : ('list.showingResults'\n | translate\n : {\n number: (items | listFilter: searchModel).length,\n total: pagination.collectionSize\n })\n }}\n </div>\n <div class=\"col-4 text-center\">\n {{ 'list.show' | translate }}\n <select [(ngModel)]=\"pagination.size\" (ngModelChange)=\"setPaginationSize($event)\">\n <option [ngValue]=\"10\">10</option>\n <option [ngValue]=\"25\">25</option>\n <option [ngValue]=\"50\">50</option>\n <option [ngValue]=\"100\">100</option>\n </select>\n {{ 'list.entries' | translate }}\n </div>\n <div class=\"col-4\">\n <ngb-pagination\n *ngIf=\"pagination.collectionSize > pagination.size\"\n class=\"float-right\"\n [collectionSize]=\"pagination.collectionSize\"\n [(page)]=\"pagination.page\"\n [pageSize]=\"pagination.size\"\n [maxSize]=\"pagination.maxPaginationItemSize\"\n [rotate]=\"true\"\n (pageChange)=\"onClickPagination(pagination.page)\"\n ></ngb-pagination>\n </div>\n </div>\n\n <div id=\"no-results\" class=\"p-5\" *ngIf=\"items?.length === 0\">\n {{ 'list.noResults' | translate }}\n </div>\n\n <div id=\"no-field-definitions\" class=\"p-5\" *ngIf=\"items?.length > 0 && fields?.length === 0\">\n {{ 'list.noFieldDefinitions' | translate }}\n </div>\n</div>\n\n<ng-template #dropdownActions let-listItemField=\"listItemField\" let-item=\"item\">\n <div class=\"dropdown\" *ngIf=\"listItemField?.value.length > 0\">\n <a\n style=\"cursor: pointer\"\n class=\"dropdown-toggle d-block\"\n id=\"dropdownMenu\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n <i class=\"action-icon icon mdi mdi-dots-vertical\"></i>\n </a>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenu\">\n <a\n (click)=\"action.callback(item)\"\n class=\"dropdown-item p-2\"\n *ngFor=\"let action of listItemField.value\"\n >\n <ng-container *ngIf=\"action.iconClass !== null\">\n <i [ngClass]=\"action.iconClass\"></i>\n </ng-container>\n {{ action?.label || '-' }}\n </a>\n </div>\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 */.table{table-layout:fixed}.table-responsive{overflow-x:visible}.click-able{cursor:pointer}.pagination-holder{border-top:1px solid #dee2e6}.search-holder{border-bottom:1px solid #dee2e6;padding-left:18px;padding-right:18px;height:80px}.switch-view-holder i{font-size:1.8rem;line-height:1.2rem;margin-top:9px}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}.page-count{margin-bottom:1rem}th:first-child,td:first-child{padding-left:25px}th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}th.sortable:after{font-family:\"Font Awesome 5 Free\";content:\" \\f0dd\";position:absolute;margin:auto 0 auto 5px;opacity:0;transition:all .15s ease}th.sortable.is-being-sorted.ascending:after{transform:rotate(-180deg)}th.sortable:hover:after{opacity:.5}th.sortable.is-being-sorted:after{opacity:1}.action-icon,.view-icon{font-size:16px!important}\n"], components: [{ type: i1$7.NgbPagination, selector: "ngb-pagination", inputs: ["disabled", "boundaryLinks", "directionLinks", "ellipses", "rotate", "collectionSize", "maxSize", "page", "pageSize", "size"], outputs: ["pageChange"] }], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }], pipes: { "async": i1.AsyncPipe, "listFilter": ListFilterPipe, "translate": i1$8.TranslatePipe } });
2257
+ ListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ListComponent, selector: "valtimo-list", inputs: { items: "items", fields: "fields", pagination: "pagination", viewMode: "viewMode", isSearchable: "isSearchable", header: "header", actions: "actions", paginationIdentifier: "paginationIdentifier", initialSortState: "initialSortState" }, outputs: { rowClicked: "rowClicked", paginationClicked: "paginationClicked", paginationSet: "paginationSet", search: "search", sortChanged: "sortChanged" }, viewQueries: [{ propertyName: "searchBox", first: true, predicate: ["searchBox"], descendants: true }], usesOnChanges: 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<div>\n <div *ngIf=\"(items?.length > 0 && fields?.length > 0) || header\">\n <div\n class=\"d-flex align-items-center search-holder bg-light\"\n [ngClass]=\"{'pb-4 pt-4': !header}\"\n *ngIf=\"isSearchable || viewMode || header\"\n >\n <div class=\"align-self-start\">\n <ng-content select=\"[header]\"></ng-content>\n </div>\n\n <div class=\"ml-auto row\">\n <input\n *ngIf=\"isSearchable\"\n class=\"form-control col-sm-8\"\n type=\"text\"\n placeholder=\"{{ 'list.search' | translate }}\"\n #searchBox\n />\n\n <div\n class=\"switch-view-holder btn-group col-sm-4 mt-1 mt-sm-0\"\n role=\"group\"\n *ngIf=\"viewMode\"\n >\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'table' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('table')\"\n >\n <i class=\"icon mdi mdi-view-headline view-icon\"></i>\n </button>\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'tile' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('tile')\"\n >\n <i class=\"icon mdi mdi-view-module view-icon\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <div *ngIf=\"items?.length > 0 && fields?.length > 0\">\n <div class=\"table-responsive noSwipe\" *ngIf=\"!viewMode || viewListAs === 'table'\">\n <table class=\"table table-striped table-hover m-0\" *ngIf=\"sort$ | async as sort\">\n <thead>\n <tr>\n <th\n *ngFor=\"let field of fields\"\n (click)=\"handleFieldClick(field.key, field.sortable)\"\n [ngClass]=\"{\n sortable: field.sortable,\n 'is-being-sorted': field.key === sort.state.name && sort.isSorting,\n ascending: sort.state.direction === 'ASC'\n }\"\n >\n {{ field.label }}\n </th>\n <th *ngFor=\"let action of actions\">\n {{ action.columnName }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n [ngClass]=\"{'click-able': this.rowClicked.observers.length > 0}\"\n *ngFor=\"let item of items | listFilter: searchModel\"\n (click)=\"onClickRow(item)\"\n >\n <td class=\"align-top\" *ngFor=\"let listItemField of item.listItemFields\">\n <ng-container *ngIf=\"listItemField.type === ''\">\n {{ listItemField.value || '-' }}\n </ng-container>\n\n <ng-container\n *ngIf=\"listItemField.type === 'dropdownActions'\"\n [ngTemplateOutlet]=\"dropdownActions\"\n [ngTemplateOutletContext]=\"{listItemField: listItemField, item: item}\"\n ></ng-container>\n </td>\n <td class=\"align-top\" *ngFor=\"let action of actions\">\n <i\n class=\"action-icon\"\n style=\"cursor: pointer\"\n [ngClass]=\"action.iconClass\"\n (click)=\"action.callback(item)\"\n ></i>\n </td>\n </tr>\n <tr>\n <td *ngIf=\"(items | listFilter: searchModel).length === 0\" [colSpan]=\"fields.length\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <div class=\"container-fluid\" *ngIf=\"viewMode && viewListAs === 'tile'\">\n <div class=\"row p-2\">\n <div\n class=\"col-12 col-sm-6 col-xl-4 p-2\"\n *ngFor=\"let item of items | listFilter: searchModel\"\n (click)=\"onClickRow(item)\"\n >\n <div class=\"click-able tile-holder p-4\">\n <dl class=\"row mb-0\" *ngFor=\"let listItemField of item.listItemFields\">\n <dt class=\"col-12 col-md-5 text-xl-right\">{{ listItemField.label }}</dt>\n <dd class=\"col-12 col-md-7\">{{ listItemField.value || '-' }}</dd>\n </dl>\n </div>\n </div>\n <div class=\"col-12\" *ngIf=\"(items | listFilter: searchModel).length === 0\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"pagination-holder bg-light px-4 pt-4 pb-2 overflow-auto row mr-0 ml-0\"\n *ngIf=\"pagination && items?.length > 0 && fields?.length > 0\"\n >\n <div class=\"float-left page-count col-4\">\n <strong>{{\n 'list.currentPage' | translate: {current: pagination.page, total: getTotalPageCount()}\n }}</strong>\n <br />\n {{\n pagination.collectionSize === 1\n ? ('list.showingResult' | translate: {number: (items | listFilter: searchModel).length})\n : ('list.showingResults'\n | translate\n : {\n number: (items | listFilter: searchModel).length,\n total: pagination.collectionSize\n })\n }}\n </div>\n <div class=\"col-4 text-center\">\n {{ 'list.show' | translate }}\n <select [(ngModel)]=\"pagination.size\" (ngModelChange)=\"setPaginationSize($event)\">\n <option [ngValue]=\"10\">10</option>\n <option [ngValue]=\"25\">25</option>\n <option [ngValue]=\"50\">50</option>\n <option [ngValue]=\"100\">100</option>\n </select>\n {{ 'list.entries' | translate }}\n </div>\n <div class=\"col-4\">\n <ngb-pagination\n *ngIf=\"pagination.collectionSize > pagination.size\"\n class=\"float-right\"\n [collectionSize]=\"pagination.collectionSize\"\n [(page)]=\"pagination.page\"\n [pageSize]=\"pagination.size\"\n [maxSize]=\"pagination.maxPaginationItemSize\"\n [rotate]=\"true\"\n (pageChange)=\"onClickPagination(pagination.page)\"\n ></ngb-pagination>\n </div>\n </div>\n\n <div id=\"no-results\" class=\"p-5\" *ngIf=\"items?.length === 0\">\n {{ 'list.noResults' | translate }}\n </div>\n\n <div id=\"no-field-definitions\" class=\"p-5\" *ngIf=\"items?.length > 0 && fields?.length === 0\">\n {{ 'list.noFieldDefinitions' | translate }}\n </div>\n</div>\n\n<ng-template #dropdownActions let-listItemField=\"listItemField\" let-item=\"item\">\n <div class=\"dropdown\" *ngIf=\"listItemField?.value.length > 0\">\n <a\n style=\"cursor: pointer\"\n class=\"dropdown-toggle d-block\"\n id=\"dropdownMenu\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n <i class=\"action-icon icon mdi mdi-dots-vertical\"></i>\n </a>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenu\">\n <a\n (click)=\"action.callback(item)\"\n class=\"dropdown-item p-2\"\n *ngFor=\"let action of listItemField.value\"\n >\n <ng-container *ngIf=\"action.iconClass !== null\">\n <i [ngClass]=\"action.iconClass\"></i>\n </ng-container>\n {{ action?.label || '-' }}\n </a>\n </div>\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 */.table{table-layout:fixed}.table-responsive{overflow-x:visible}.click-able{cursor:pointer}.pagination-holder{border-top:1px solid #dee2e6}.search-holder{border-bottom:1px solid #dee2e6;padding-left:18px;padding-right:18px;height:80px}.switch-view-holder i{font-size:1.8rem;line-height:1.2rem;margin-top:9px}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}.page-count{margin-bottom:1rem}th:first-child,td:first-child{padding-left:25px}th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}th.sortable:after{font-family:\"Font Awesome 5 Free\";content:\" \\f0dd\";position:absolute;margin:auto 0 auto 5px;opacity:0;transition:all .15s ease}th.sortable.is-being-sorted.ascending:after{transform:rotate(-180deg)}th.sortable:hover:after{opacity:.5}th.sortable.is-being-sorted:after{opacity:1}.action-icon,.view-icon{font-size:16px!important}\n"], components: [{ type: i1$7.NgbPagination, selector: "ngb-pagination", inputs: ["disabled", "boundaryLinks", "directionLinks", "ellipses", "rotate", "collectionSize", "maxSize", "page", "pageSize", "size"], outputs: ["pageChange"] }], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }], pipes: { "translate": i1$8.TranslatePipe, "async": i1.AsyncPipe, "listFilter": ListFilterPipe } });
2241
2258
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ListComponent, decorators: [{
2242
2259
  type: Component,
2243
- args: [{ selector: 'valtimo-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\n<div>\n <div *ngIf=\"(items?.length > 0 && fields?.length > 0) || header\">\n <div\n class=\"d-flex align-items-center search-holder bg-light\"\n [ngClass]=\"{'pb-4 pt-4': !header}\"\n *ngIf=\"isSearchable || viewMode || header\"\n >\n <div class=\"align-self-start\">\n <ng-content select=\"[header]\"></ng-content>\n </div>\n\n <div class=\"ml-auto row\">\n <input\n *ngIf=\"isSearchable\"\n class=\"form-control col-sm-8\"\n type=\"text\"\n placeholder=\"Search...\"\n #searchBox\n />\n\n <div\n class=\"switch-view-holder btn-group col-sm-4 mt-1 mt-sm-0\"\n role=\"group\"\n *ngIf=\"viewMode\"\n >\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'table' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('table')\"\n >\n <i class=\"icon mdi mdi-view-headline view-icon\"></i>\n </button>\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'tile' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('tile')\"\n >\n <i class=\"icon mdi mdi-view-module view-icon\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <div *ngIf=\"items?.length > 0 && fields?.length > 0\">\n <div class=\"table-responsive noSwipe\" *ngIf=\"!viewMode || viewListAs === 'table'\">\n <table class=\"table table-striped table-hover m-0\" *ngIf=\"sort$ | async as sort\">\n <thead>\n <tr>\n <th\n *ngFor=\"let field of fields\"\n (click)=\"handleFieldClick(field.key, field.sortable)\"\n [ngClass]=\"{\n sortable: field.sortable,\n 'is-being-sorted': field.key === sort.state.name && sort.isSorting,\n ascending: sort.state.direction === 'ASC'\n }\"\n >\n {{ field.label }}\n </th>\n <th *ngFor=\"let action of actions\">\n {{ action.columnName }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n [ngClass]=\"{'click-able': this.rowClicked.observers.length > 0}\"\n *ngFor=\"let item of items | listFilter: searchModel\"\n (click)=\"onClickRow(item)\"\n >\n <td class=\"align-top\" *ngFor=\"let listItemField of item.listItemFields\">\n <ng-container *ngIf=\"listItemField.type === ''\">\n {{ listItemField.value || '-' }}\n </ng-container>\n\n <ng-container\n *ngIf=\"listItemField.type === 'dropdownActions'\"\n [ngTemplateOutlet]=\"dropdownActions\"\n [ngTemplateOutletContext]=\"{listItemField: listItemField, item: item}\"\n ></ng-container>\n </td>\n <td class=\"align-top\" *ngFor=\"let action of actions\">\n <i\n class=\"action-icon\"\n style=\"cursor: pointer\"\n [ngClass]=\"action.iconClass\"\n (click)=\"action.callback(item)\"\n ></i>\n </td>\n </tr>\n <tr>\n <td *ngIf=\"(items | listFilter: searchModel).length === 0\" [colSpan]=\"fields.length\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <div class=\"container-fluid\" *ngIf=\"viewMode && viewListAs === 'tile'\">\n <div class=\"row p-2\">\n <div\n class=\"col-12 col-sm-6 col-xl-4 p-2\"\n *ngFor=\"let item of items | listFilter: searchModel\"\n (click)=\"onClickRow(item)\"\n >\n <div class=\"click-able tile-holder p-4\">\n <dl class=\"row mb-0\" *ngFor=\"let listItemField of item.listItemFields\">\n <dt class=\"col-12 col-md-5 text-xl-right\">{{ listItemField.label }}</dt>\n <dd class=\"col-12 col-md-7\">{{ listItemField.value || '-' }}</dd>\n </dl>\n </div>\n </div>\n <div class=\"col-12\" *ngIf=\"(items | listFilter: searchModel).length === 0\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"pagination-holder bg-light px-4 pt-4 pb-2 overflow-auto row mr-0 ml-0\"\n *ngIf=\"pagination && items?.length > 0 && fields?.length > 0\"\n >\n <div class=\"float-left page-count col-4\">\n <strong>{{\n 'list.currentPage' | translate: {current: pagination.page, total: getTotalPageCount()}\n }}</strong>\n <br />\n {{\n pagination.collectionSize === 1\n ? ('list.showingResult' | translate: {number: (items | listFilter: searchModel).length})\n : ('list.showingResults'\n | translate\n : {\n number: (items | listFilter: searchModel).length,\n total: pagination.collectionSize\n })\n }}\n </div>\n <div class=\"col-4 text-center\">\n {{ 'list.show' | translate }}\n <select [(ngModel)]=\"pagination.size\" (ngModelChange)=\"setPaginationSize($event)\">\n <option [ngValue]=\"10\">10</option>\n <option [ngValue]=\"25\">25</option>\n <option [ngValue]=\"50\">50</option>\n <option [ngValue]=\"100\">100</option>\n </select>\n {{ 'list.entries' | translate }}\n </div>\n <div class=\"col-4\">\n <ngb-pagination\n *ngIf=\"pagination.collectionSize > pagination.size\"\n class=\"float-right\"\n [collectionSize]=\"pagination.collectionSize\"\n [(page)]=\"pagination.page\"\n [pageSize]=\"pagination.size\"\n [maxSize]=\"pagination.maxPaginationItemSize\"\n [rotate]=\"true\"\n (pageChange)=\"onClickPagination(pagination.page)\"\n ></ngb-pagination>\n </div>\n </div>\n\n <div id=\"no-results\" class=\"p-5\" *ngIf=\"items?.length === 0\">\n {{ 'list.noResults' | translate }}\n </div>\n\n <div id=\"no-field-definitions\" class=\"p-5\" *ngIf=\"items?.length > 0 && fields?.length === 0\">\n {{ 'list.noFieldDefinitions' | translate }}\n </div>\n</div>\n\n<ng-template #dropdownActions let-listItemField=\"listItemField\" let-item=\"item\">\n <div class=\"dropdown\" *ngIf=\"listItemField?.value.length > 0\">\n <a\n style=\"cursor: pointer\"\n class=\"dropdown-toggle d-block\"\n id=\"dropdownMenu\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n <i class=\"action-icon icon mdi mdi-dots-vertical\"></i>\n </a>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenu\">\n <a\n (click)=\"action.callback(item)\"\n class=\"dropdown-item p-2\"\n *ngFor=\"let action of listItemField.value\"\n >\n <ng-container *ngIf=\"action.iconClass !== null\">\n <i [ngClass]=\"action.iconClass\"></i>\n </ng-container>\n {{ action?.label || '-' }}\n </a>\n </div>\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 */.table{table-layout:fixed}.table-responsive{overflow-x:visible}.click-able{cursor:pointer}.pagination-holder{border-top:1px solid #dee2e6}.search-holder{border-bottom:1px solid #dee2e6;padding-left:18px;padding-right:18px;height:80px}.switch-view-holder i{font-size:1.8rem;line-height:1.2rem;margin-top:9px}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}.page-count{margin-bottom:1rem}th:first-child,td:first-child{padding-left:25px}th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}th.sortable:after{font-family:\"Font Awesome 5 Free\";content:\" \\f0dd\";position:absolute;margin:auto 0 auto 5px;opacity:0;transition:all .15s ease}th.sortable.is-being-sorted.ascending:after{transform:rotate(-180deg)}th.sortable:hover:after{opacity:.5}th.sortable.is-being-sorted:after{opacity:1}.action-icon,.view-icon{font-size:16px!important}\n"] }]
2260
+ args: [{ selector: 'valtimo-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\n<div>\n <div *ngIf=\"(items?.length > 0 && fields?.length > 0) || header\">\n <div\n class=\"d-flex align-items-center search-holder bg-light\"\n [ngClass]=\"{'pb-4 pt-4': !header}\"\n *ngIf=\"isSearchable || viewMode || header\"\n >\n <div class=\"align-self-start\">\n <ng-content select=\"[header]\"></ng-content>\n </div>\n\n <div class=\"ml-auto row\">\n <input\n *ngIf=\"isSearchable\"\n class=\"form-control col-sm-8\"\n type=\"text\"\n placeholder=\"{{ 'list.search' | translate }}\"\n #searchBox\n />\n\n <div\n class=\"switch-view-holder btn-group col-sm-4 mt-1 mt-sm-0\"\n role=\"group\"\n *ngIf=\"viewMode\"\n >\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'table' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('table')\"\n >\n <i class=\"icon mdi mdi-view-headline view-icon\"></i>\n </button>\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'tile' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('tile')\"\n >\n <i class=\"icon mdi mdi-view-module view-icon\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <div *ngIf=\"items?.length > 0 && fields?.length > 0\">\n <div class=\"table-responsive noSwipe\" *ngIf=\"!viewMode || viewListAs === 'table'\">\n <table class=\"table table-striped table-hover m-0\" *ngIf=\"sort$ | async as sort\">\n <thead>\n <tr>\n <th\n *ngFor=\"let field of fields\"\n (click)=\"handleFieldClick(field.key, field.sortable)\"\n [ngClass]=\"{\n sortable: field.sortable,\n 'is-being-sorted': field.key === sort.state.name && sort.isSorting,\n ascending: sort.state.direction === 'ASC'\n }\"\n >\n {{ field.label }}\n </th>\n <th *ngFor=\"let action of actions\">\n {{ action.columnName }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n [ngClass]=\"{'click-able': this.rowClicked.observers.length > 0}\"\n *ngFor=\"let item of items | listFilter: searchModel\"\n (click)=\"onClickRow(item)\"\n >\n <td class=\"align-top\" *ngFor=\"let listItemField of item.listItemFields\">\n <ng-container *ngIf=\"listItemField.type === ''\">\n {{ listItemField.value || '-' }}\n </ng-container>\n\n <ng-container\n *ngIf=\"listItemField.type === 'dropdownActions'\"\n [ngTemplateOutlet]=\"dropdownActions\"\n [ngTemplateOutletContext]=\"{listItemField: listItemField, item: item}\"\n ></ng-container>\n </td>\n <td class=\"align-top\" *ngFor=\"let action of actions\">\n <i\n class=\"action-icon\"\n style=\"cursor: pointer\"\n [ngClass]=\"action.iconClass\"\n (click)=\"action.callback(item)\"\n ></i>\n </td>\n </tr>\n <tr>\n <td *ngIf=\"(items | listFilter: searchModel).length === 0\" [colSpan]=\"fields.length\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <div class=\"container-fluid\" *ngIf=\"viewMode && viewListAs === 'tile'\">\n <div class=\"row p-2\">\n <div\n class=\"col-12 col-sm-6 col-xl-4 p-2\"\n *ngFor=\"let item of items | listFilter: searchModel\"\n (click)=\"onClickRow(item)\"\n >\n <div class=\"click-able tile-holder p-4\">\n <dl class=\"row mb-0\" *ngFor=\"let listItemField of item.listItemFields\">\n <dt class=\"col-12 col-md-5 text-xl-right\">{{ listItemField.label }}</dt>\n <dd class=\"col-12 col-md-7\">{{ listItemField.value || '-' }}</dd>\n </dl>\n </div>\n </div>\n <div class=\"col-12\" *ngIf=\"(items | listFilter: searchModel).length === 0\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"pagination-holder bg-light px-4 pt-4 pb-2 overflow-auto row mr-0 ml-0\"\n *ngIf=\"pagination && items?.length > 0 && fields?.length > 0\"\n >\n <div class=\"float-left page-count col-4\">\n <strong>{{\n 'list.currentPage' | translate: {current: pagination.page, total: getTotalPageCount()}\n }}</strong>\n <br />\n {{\n pagination.collectionSize === 1\n ? ('list.showingResult' | translate: {number: (items | listFilter: searchModel).length})\n : ('list.showingResults'\n | translate\n : {\n number: (items | listFilter: searchModel).length,\n total: pagination.collectionSize\n })\n }}\n </div>\n <div class=\"col-4 text-center\">\n {{ 'list.show' | translate }}\n <select [(ngModel)]=\"pagination.size\" (ngModelChange)=\"setPaginationSize($event)\">\n <option [ngValue]=\"10\">10</option>\n <option [ngValue]=\"25\">25</option>\n <option [ngValue]=\"50\">50</option>\n <option [ngValue]=\"100\">100</option>\n </select>\n {{ 'list.entries' | translate }}\n </div>\n <div class=\"col-4\">\n <ngb-pagination\n *ngIf=\"pagination.collectionSize > pagination.size\"\n class=\"float-right\"\n [collectionSize]=\"pagination.collectionSize\"\n [(page)]=\"pagination.page\"\n [pageSize]=\"pagination.size\"\n [maxSize]=\"pagination.maxPaginationItemSize\"\n [rotate]=\"true\"\n (pageChange)=\"onClickPagination(pagination.page)\"\n ></ngb-pagination>\n </div>\n </div>\n\n <div id=\"no-results\" class=\"p-5\" *ngIf=\"items?.length === 0\">\n {{ 'list.noResults' | translate }}\n </div>\n\n <div id=\"no-field-definitions\" class=\"p-5\" *ngIf=\"items?.length > 0 && fields?.length === 0\">\n {{ 'list.noFieldDefinitions' | translate }}\n </div>\n</div>\n\n<ng-template #dropdownActions let-listItemField=\"listItemField\" let-item=\"item\">\n <div class=\"dropdown\" *ngIf=\"listItemField?.value.length > 0\">\n <a\n style=\"cursor: pointer\"\n class=\"dropdown-toggle d-block\"\n id=\"dropdownMenu\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n <i class=\"action-icon icon mdi mdi-dots-vertical\"></i>\n </a>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenu\">\n <a\n (click)=\"action.callback(item)\"\n class=\"dropdown-item p-2\"\n *ngFor=\"let action of listItemField.value\"\n >\n <ng-container *ngIf=\"action.iconClass !== null\">\n <i [ngClass]=\"action.iconClass\"></i>\n </ng-container>\n {{ action?.label || '-' }}\n </a>\n </div>\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 */.table{table-layout:fixed}.table-responsive{overflow-x:visible}.click-able{cursor:pointer}.pagination-holder{border-top:1px solid #dee2e6}.search-holder{border-bottom:1px solid #dee2e6;padding-left:18px;padding-right:18px;height:80px}.switch-view-holder i{font-size:1.8rem;line-height:1.2rem;margin-top:9px}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}.page-count{margin-bottom:1rem}th:first-child,td:first-child{padding-left:25px}th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}th.sortable:after{font-family:\"Font Awesome 5 Free\";content:\" \\f0dd\";position:absolute;margin:auto 0 auto 5px;opacity:0;transition:all .15s ease}th.sortable.is-being-sorted.ascending:after{transform:rotate(-180deg)}th.sortable:hover:after{opacity:.5}th.sortable.is-being-sorted:after{opacity:1}.action-icon,.view-icon{font-size:16px!important}\n"] }]
2244
2261
  }], ctorParameters: function () { return [{ type: ViewContentService }, { type: i4.NGXLogger }]; }, propDecorators: { items: [{
2245
2262
  type: Input
2246
2263
  }], fields: [{
@@ -3648,7 +3665,9 @@ class FormioComponent {
3648
3665
  this.change = new EventEmitter();
3649
3666
  this.refreshForm = new EventEmitter();
3650
3667
  this.errors = [];
3651
- this.currentLanguage$ = new BehaviorSubject(this.translateService.currentLang);
3668
+ this.currentLanguage$ = this.translateService
3669
+ .stream('key')
3670
+ .pipe(map$1(() => this.translateService.currentLang));
3652
3671
  }
3653
3672
  ngOnInit() {
3654
3673
  const documentDefinitionName = this.route.snapshot.paramMap.get('documentDefinitionName');
@@ -3663,7 +3682,6 @@ class FormioComponent {
3663
3682
  this.stateService.setDocumentId(documentId);
3664
3683
  }
3665
3684
  this.subscribeFormRefresh();
3666
- this.openLanguageSubscription();
3667
3685
  }
3668
3686
  ngOnChanges(changes) {
3669
3687
  this.formDefinition = changes.form.currentValue;
@@ -3677,7 +3695,6 @@ class FormioComponent {
3677
3695
  ngOnDestroy() {
3678
3696
  this.unsubscribeFormRefresh();
3679
3697
  this.tokenRefreshTimerSubscription?.unsubscribe();
3680
- this.languageSubscription?.unsubscribe();
3681
3698
  }
3682
3699
  reloadForm() {
3683
3700
  this.refreshForm.emit({
@@ -3749,17 +3766,12 @@ class FormioComponent {
3749
3766
  this.formRefreshSubscription.unsubscribe();
3750
3767
  }
3751
3768
  }
3752
- openLanguageSubscription() {
3753
- this.languageSubscription = this.translateService.stream('key').subscribe(() => {
3754
- this.currentLanguage$.next(this.translateService.currentLang);
3755
- });
3756
- }
3757
3769
  }
3758
3770
  FormioComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: FormioComponent, deps: [{ token: i1$6.UserProviderService }, { token: i4.NGXLogger }, { token: FormIoStateService }, { token: i1$5.ActivatedRoute }, { token: i1$8.TranslateService }, { token: ValtimoModalService }], target: i0.ɵɵFactoryTarget.Component });
3759
- FormioComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: FormioComponent, selector: "valtimo-form-io", inputs: { form: "form", options: "options", submission: "submission", formRefresh$: "formRefresh$" }, outputs: { submit: "submit", change: "change" }, usesOnChanges: 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<div>\n <div *ngIf=\"errors.length > 0\" class=\"alert alert-danger pt-5 pb-5 mb-2\">\n <ol>\n <li *ngFor=\"let error of errors\">\n {{ error }}\n </li>\n </ol>\n </div>\n <formio\n [submission]=\"submission\"\n [form]=\"formDefinition\"\n [refresh]=\"refreshForm\"\n [options]=\"options\"\n [language]=\"currentLanguage$ | async\"\n (submit)=\"onSubmit($event)\"\n (ready)=\"formReady($event)\"\n (change)=\"onChange($event)\"\n (nextPage)=\"nextPage()\"\n (prevPage)=\"prevPage()\"\n ></formio>\n</div>\n", styles: [""], components: [{ type: i7.FormioComponent, selector: "formio" }], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i1.AsyncPipe } });
3771
+ FormioComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: FormioComponent, selector: "valtimo-form-io", inputs: { form: "form", options: "options", submission: "submission", formRefresh$: "formRefresh$" }, outputs: { submit: "submit", change: "change" }, usesOnChanges: 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<div>\n <div *ngIf=\"errors.length > 0\" class=\"alert alert-danger pt-5 pb-5 mb-2\">\n <ol>\n <li *ngFor=\"let error of errors\">\n {{ error }}\n </li>\n </ol>\n </div>\n <formio\n *ngIf=\"currentLanguage$ | async as currentLanguage\"\n [submission]=\"submission\"\n [form]=\"formDefinition\"\n [refresh]=\"refreshForm\"\n [options]=\"options\"\n [language]=\"currentLanguage\"\n (submit)=\"onSubmit($event)\"\n (ready)=\"formReady($event)\"\n (change)=\"onChange($event)\"\n (nextPage)=\"nextPage()\"\n (prevPage)=\"prevPage()\"\n ></formio>\n</div>\n", styles: [""], components: [{ type: i7.FormioComponent, selector: "formio" }], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i1.AsyncPipe } });
3760
3772
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: FormioComponent, decorators: [{
3761
3773
  type: Component,
3762
- args: [{ selector: 'valtimo-form-io', 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<div>\n <div *ngIf=\"errors.length > 0\" class=\"alert alert-danger pt-5 pb-5 mb-2\">\n <ol>\n <li *ngFor=\"let error of errors\">\n {{ error }}\n </li>\n </ol>\n </div>\n <formio\n [submission]=\"submission\"\n [form]=\"formDefinition\"\n [refresh]=\"refreshForm\"\n [options]=\"options\"\n [language]=\"currentLanguage$ | async\"\n (submit)=\"onSubmit($event)\"\n (ready)=\"formReady($event)\"\n (change)=\"onChange($event)\"\n (nextPage)=\"nextPage()\"\n (prevPage)=\"prevPage()\"\n ></formio>\n</div>\n", styles: [""] }]
3774
+ args: [{ selector: 'valtimo-form-io', 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<div>\n <div *ngIf=\"errors.length > 0\" class=\"alert alert-danger pt-5 pb-5 mb-2\">\n <ol>\n <li *ngFor=\"let error of errors\">\n {{ error }}\n </li>\n </ol>\n </div>\n <formio\n *ngIf=\"currentLanguage$ | async as currentLanguage\"\n [submission]=\"submission\"\n [form]=\"formDefinition\"\n [refresh]=\"refreshForm\"\n [options]=\"options\"\n [language]=\"currentLanguage\"\n (submit)=\"onSubmit($event)\"\n (ready)=\"formReady($event)\"\n (change)=\"onChange($event)\"\n (nextPage)=\"nextPage()\"\n (prevPage)=\"prevPage()\"\n ></formio>\n</div>\n", styles: [""] }]
3763
3775
  }], ctorParameters: function () { return [{ type: i1$6.UserProviderService }, { type: i4.NGXLogger }, { type: FormIoStateService }, { type: i1$5.ActivatedRoute }, { type: i1$8.TranslateService }, { type: ValtimoModalService }]; }, propDecorators: { form: [{
3764
3776
  type: Input
3765
3777
  }], options: [{
@@ -4331,45 +4343,192 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
4331
4343
  * See the License for the specific language governing permissions and
4332
4344
  * limitations under the License.
4333
4345
  */
4334
- class FormIoModule {
4346
+ class DocumentenApiMetadataModalComponent {
4347
+ constructor(modalService, translateService, route, documentService, keycloakService, valtimoModalService) {
4348
+ this.modalService = modalService;
4349
+ this.translateService = translateService;
4350
+ this.route = route;
4351
+ this.documentService = documentService;
4352
+ this.keycloakService = keycloakService;
4353
+ this.valtimoModalService = valtimoModalService;
4354
+ this.documentTitle = '';
4355
+ this.metadata = new EventEmitter();
4356
+ this.CONFIDENTIALITY_LEVELS = [
4357
+ 'openbaar',
4358
+ 'beperkt_openbaar',
4359
+ 'intern',
4360
+ 'zaakvertrouwelijk',
4361
+ 'vertrouwelijk',
4362
+ 'confidentieel',
4363
+ 'geheim',
4364
+ 'zeer_geheim',
4365
+ ];
4366
+ this.confidentialityLevelItems$ = this.translateService
4367
+ .stream('key')
4368
+ .pipe(map(() => this.CONFIDENTIALITY_LEVELS.map(confidentialityLevel => ({
4369
+ id: confidentialityLevel,
4370
+ text: this.translateService.instant(`document.${confidentialityLevel}`),
4371
+ }))));
4372
+ this.ADDITONAL_DOCUMENT_DATE_OPTIONS = [
4373
+ {
4374
+ value: 'neither',
4375
+ translationKey: 'document.noAdditionalDate',
4376
+ },
4377
+ {
4378
+ value: 'sent',
4379
+ translationKey: 'document.sendDate',
4380
+ },
4381
+ {
4382
+ value: 'received',
4383
+ translationKey: 'document.receiptDate',
4384
+ },
4385
+ ];
4386
+ this.clearStatusSelection$ = new Subject();
4387
+ this.additionalDocumentDate$ = new BehaviorSubject('neither');
4388
+ this.STATUSES = [
4389
+ 'in_bewerking',
4390
+ 'ter_vaststelling',
4391
+ 'definitief',
4392
+ 'gearchiveerd',
4393
+ ];
4394
+ this.RECEIPT_STATUSES = ['definitief', 'gearchiveerd'];
4395
+ this.formData$ = new BehaviorSubject(null);
4396
+ this.statusItems$ = combineLatest([
4397
+ this.additionalDocumentDate$,
4398
+ this.translateService.stream('key'),
4399
+ ]).pipe(tap(([additionalDocumentDate]) => {
4400
+ this.formData$.pipe(take$1(1)).subscribe(formData => {
4401
+ if (additionalDocumentDate === 'received' &&
4402
+ (formData.status === 'in_bewerking' || formData.status === 'ter_vaststelling')) {
4403
+ this.clearStatusSelection$.next(null);
4404
+ }
4405
+ });
4406
+ }), map(([additionalDocumentDate]) => (additionalDocumentDate === 'received' ? this.RECEIPT_STATUSES : this.STATUSES).map(status => ({
4407
+ id: status,
4408
+ text: this.translateService.instant(`document.${status}`),
4409
+ }))));
4410
+ this.LANGUAGES = ['nld', 'eng', 'deu'];
4411
+ this.languageItems$ = this.translateService.stream('key').pipe(map(() => this.LANGUAGES.map(language => ({
4412
+ id: language,
4413
+ text: this.translateService.instant(`document.${language}`),
4414
+ }))));
4415
+ this.documentTypeItems$ = combineLatest([
4416
+ this.route?.params || of(null),
4417
+ this.route?.firstChild?.params || of(null),
4418
+ this.valtimoModalService.documentDefinitionName$,
4419
+ ]).pipe(filter$1(([params, firstChildParams, documentDefinitionName]) => !!(params?.documentDefinitionName ||
4420
+ firstChildParams?.documentDefinitionName ||
4421
+ documentDefinitionName)), switchMap(([params, firstChildParams, documentDefinitionName]) => this.documentService.getDocumentTypes(params?.documentDefinitionName ||
4422
+ firstChildParams?.documentDefinitionName ||
4423
+ documentDefinitionName)), map(documentTypes => documentTypes.map(type => ({ id: type.url, text: type.name }))));
4424
+ this.showForm$ = this.modalService.modalVisible$;
4425
+ this.valid$ = new BehaviorSubject(false);
4426
+ this.userEmail$ = from(this.keycloakService.loadUserProfile()).pipe(map(userProfile => userProfile?.email || ''));
4427
+ }
4428
+ ngOnInit() {
4429
+ this.openShowSubscription();
4430
+ this.openHideSubscription();
4431
+ }
4432
+ ngOnDestroy() {
4433
+ this.showSubscription?.unsubscribe();
4434
+ this.hideSubscription?.unsubscribe();
4435
+ }
4436
+ hide() {
4437
+ this.formData$.next(null);
4438
+ this.valid$.next(false);
4439
+ this.additionalDocumentDate$.next('neither');
4440
+ this.modalService.closeModal();
4441
+ }
4442
+ cancel() {
4443
+ this.hide();
4444
+ }
4445
+ save() {
4446
+ combineLatest([this.valid$, this.formData$])
4447
+ .pipe(take$1(1))
4448
+ .subscribe(([valid, formData]) => {
4449
+ if (valid) {
4450
+ this.metadata.emit(formData);
4451
+ }
4452
+ });
4453
+ }
4454
+ formValueChange(data) {
4455
+ this.formData$.next(data);
4456
+ this.setValid(data);
4457
+ }
4458
+ setAdditionalDate(value) {
4459
+ this.additionalDocumentDate$.next(value);
4460
+ }
4461
+ setValid(data) {
4462
+ this.valid$.next(!!(data.filename &&
4463
+ data.title &&
4464
+ data.author &&
4465
+ data.creationDate &&
4466
+ data.status &&
4467
+ data.language &&
4468
+ data.informatieobjecttype));
4469
+ }
4470
+ openShowSubscription() {
4471
+ this.showSubscription = this.show$.subscribe(() => {
4472
+ this.modalService.openModal(this.documentenApiMetadataModal);
4473
+ });
4474
+ }
4475
+ openHideSubscription() {
4476
+ this.hideSubscription = this.hide$.subscribe(() => {
4477
+ this.hide();
4478
+ });
4479
+ }
4335
4480
  }
4336
- FormIoModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: FormIoModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
4337
- FormIoModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: FormIoModule, declarations: [FormioComponent, FormioBuilderComponent, FormIoUploaderComponent], imports: [CommonModule,
4338
- FormioModule,
4339
- DropzoneModule,
4340
- TranslateModule,
4341
- DocumentModule,
4342
- FileSizeModule,
4343
- ResourceModule,
4344
- RouterModule], exports: [FormioComponent, FormioBuilderComponent, FormIoUploaderComponent] });
4345
- FormIoModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: FormIoModule, providers: [FormIoDomService, { provide: FormioAppConfig, useValue: AppConfig }], imports: [[
4346
- CommonModule,
4347
- FormioModule,
4348
- DropzoneModule,
4349
- TranslateModule,
4350
- DocumentModule,
4351
- FileSizeModule,
4352
- ResourceModule,
4353
- RouterModule,
4354
- ]] });
4355
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: FormIoModule, decorators: [{
4356
- type: NgModule,
4357
- args: [{
4358
- imports: [
4359
- CommonModule,
4360
- FormioModule,
4361
- DropzoneModule,
4362
- TranslateModule,
4363
- DocumentModule,
4364
- FileSizeModule,
4365
- ResourceModule,
4366
- RouterModule,
4367
- ],
4368
- declarations: [FormioComponent, FormioBuilderComponent, FormIoUploaderComponent],
4369
- exports: [FormioComponent, FormioBuilderComponent, FormIoUploaderComponent],
4370
- providers: [FormIoDomService, { provide: FormioAppConfig, useValue: AppConfig }],
4371
- }]
4372
- }] });
4481
+ DocumentenApiMetadataModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: DocumentenApiMetadataModalComponent, deps: [{ token: i1$4.ModalService }, { token: i1$8.TranslateService }, { token: i1$5.ActivatedRoute }, { token: i2.DocumentService }, { token: i1$2.KeycloakService }, { token: ValtimoModalService }], target: i0.ɵɵFactoryTarget.Component });
4482
+ DocumentenApiMetadataModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: DocumentenApiMetadataModalComponent, selector: "valtimo-documenten-api-metadata-modal", inputs: { show$: "show$", hide$: "hide$", disabled$: "disabled$", file$: "file$", documentTitle: "documentTitle", disableDocumentTitle: "disableDocumentTitle", filename: "filename", disableFilename: "disableFilename", author: "author", disableAuthor: "disableAuthor", status: "status", disableStatus: "disableStatus", language: "language", disableLanguage: "disableLanguage", documentType: "documentType", disableDocumentType: "disableDocumentType", description: "description", disableDescription: "disableDescription", confidentialityLevel: "confidentialityLevel", disableConfidentialityLevel: "disableConfidentialityLevel" }, outputs: { metadata: "metadata" }, viewQueries: [{ propertyName: "documentenApiMetadataModal", first: true, predicate: ["documentenApiMetadataModal"], 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-modal\n #documentenApiMetadataModal\n (closeEvent)=\"hide()\"\n *ngIf=\"{file: file$ | async, disabled: disabled$ | async, valid: valid$ | async} as obs\"\n>\n <div role=\"header\">\n <div class=\"edit-configuration-title\">\n <v-title [center]=\"true\" [fullWidth]=\"true\" [margin]=\"false\" type=\"h2\">{{\n 'document.fillInMetadata' | translate\n }}</v-title>\n </div>\n </div>\n <div role=\"content\">\n <ng-container *ngTemplateOutlet=\"metadataForm; context: {obs: obs}\"></ng-container>\n </div>\n <div role=\"footer\">\n <div class=\"buttons\">\n <v-button (clickEvent)=\"cancel()\" [disabled]=\"obs.disabled\" type=\"secondary\">{{\n 'document.cancel' | translate\n }}</v-button>\n <v-button\n (clickEvent)=\"save()\"\n [disabled]=\"obs.disabled || !obs.valid\"\n mdiIcon=\"upload\"\n type=\"success\"\n >{{ 'document.upload' | translate }}</v-button\n >\n </div>\n </div>\n</v-modal>\n\n<ng-template #metadataForm let-obs=\"obs\">\n <ng-container *ngIf=\"showForm$ | async\">\n <v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"additionalDocumentDate$ | async as additionalDate\"\n >\n <v-input\n [defaultValue]=\"filename || obs.file?.name\"\n [disabled]=\"obs.disabled || disableFilename\"\n [fullWidth]=\"true\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.filename' | translate\"\n [tooltip]=\"'document.filenameTooltip' | translate\"\n name=\"filename\"\n >\n </v-input>\n <v-input\n [defaultValue]=\"documentTitle\"\n [disabled]=\"obs.disabled || disableDocumentTitle\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.inputTitle' | translate\"\n [tooltip]=\"'document.inputTitleTooltip' | translate\"\n [widthPx]=\"400\"\n name=\"title\"\n >\n </v-input>\n <v-input\n [defaultValue]=\"author || (userEmail$ | async)\"\n [disabled]=\"obs.disabled || disableAuthor\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.author' | translate\"\n [tooltip]=\"'document.authorTooltip' | translate\"\n [widthPx]=\"300\"\n name=\"author\"\n >\n </v-input>\n <v-select\n *ngIf=\"languageItems$ | async as languageItems\"\n [defaultSelectionId]=\"language || languageItems[0].id\"\n [disabled]=\"obs.disabled || disableLanguage\"\n [items]=\"languageItems\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.language' | translate\"\n [tooltip]=\"'document.languageTooltip' | translate\"\n [widthInPx]=\"200\"\n name=\"language\"\n ></v-select>\n <ng-container *ngIf=\"{documentTypeItems: documentTypeItems$ | async} as obs\">\n <v-select\n [defaultSelectionId]=\"documentType\"\n [disabled]=\"obs.disabled || disableDocumentType\"\n [items]=\"obs.documentTypeItems\"\n [loading]=\"!obs.documentTypeItems\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.informatieobjecttype' | translate\"\n [tooltip]=\"'document.informatieobjecttypeTooltip' | translate\"\n [widthInPx]=\"200\"\n name=\"informatieobjecttype\"\n ></v-select>\n </ng-container>\n <v-date-picker\n [defaultDateIsToday]=\"true\"\n [disabled]=\"obs.disabled\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.creationDate' | translate\"\n [tooltip]=\"'document.creationDateTooltip' | translate\"\n [widthPx]=\"100\"\n name=\"creationDate\"\n ></v-date-picker>\n <ng-container\n *ngTemplateOutlet=\"additionalDatePicker; context: {additionalDate: additionalDate}\"\n ></ng-container>\n <v-date-picker\n *ngIf=\"additionalDate === 'received'\"\n [defaultDateIsToday]=\"true\"\n [disabled]=\"obs.disabled\"\n [margin]=\"true\"\n [title]=\"'document.receiptDate' | translate\"\n [tooltip]=\"'document.receiptDateTooltip' | translate\"\n [widthPx]=\"100\"\n name=\"receiptDate\"\n ></v-date-picker>\n <v-date-picker\n *ngIf=\"additionalDate === 'sent'\"\n [defaultDateIsToday]=\"true\"\n [disabled]=\"obs.disabled\"\n [margin]=\"true\"\n [title]=\"'document.sendDate' | translate\"\n [tooltip]=\"'document.sendDateTooltip' | translate\"\n [widthPx]=\"100\"\n name=\"sendDate\"\n ></v-date-picker>\n <v-select\n [defaultSelectionId]=\"status\"\n [disabled]=\"obs.disabled || disableStatus\"\n [items]=\"statusItems$ | async\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.status' | translate\"\n [tooltip]=\"'document.statusTooltip' | translate\"\n [widthInPx]=\"200\"\n [clearSelectionSubject$]=\"clearStatusSelection$\"\n name=\"status\"\n ></v-select>\n <v-input\n [defaultValue]=\"description\"\n [disabled]=\"obs.disabled || disableDescription\"\n [fullWidth]=\"true\"\n [margin]=\"true\"\n [title]=\"'document.inputDescription' | translate\"\n [tooltip]=\"'document.inputDescriptionTooltip' | translate\"\n name=\"description\"\n >\n </v-input>\n <v-select\n [defaultSelectionId]=\"confidentialityLevel\"\n [disabled]=\"obs.disabled || disableConfidentialityLevel\"\n [items]=\"confidentialityLevelItems$ | async\"\n [margin]=\"true\"\n [title]=\"'document.confidentialityLevel' | translate\"\n [tooltip]=\"'document.confidentialityLevelTooltip' | translate\"\n [widthInPx]=\"200\"\n name=\"confidentialityLevel\"\n ></v-select>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template #additionalDatePicker let-additionalDate=\"additionalDate\">\n <v-input-label\n [title]=\"'document.additionalDate' | translate\"\n [name]=\"'additionalDate'\"\n [tooltip]=\"'document.additionalDateTooltip' | translate\"\n [required]=\"true\"\n >\n </v-input-label>\n <div class=\"col-12 col-sm-8 col-lg-6 form-check mt-1 additional-date\">\n <label\n class=\"custom-control custom-radio custom-control-inline\"\n *ngFor=\"let option of ADDITONAL_DOCUMENT_DATE_OPTIONS\"\n (click)=\"setAdditionalDate(option.value)\"\n >\n <input\n class=\"custom-control-input\"\n type=\"radio\"\n name=\"radio-inline\"\n [checked]=\"additionalDate === option.value\"\n /><span class=\"custom-control-label\">{{ option.translationKey | translate }}</span>\n </label>\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 */.buttons{display:flex;flex-direction:row;width:100%;justify-content:space-between}.additional-date{padding:0;width:100%;max-width:100%;margin:0;margin-block-end:var(--v-input-margin)}.additional-date .custom-control{margin-bottom:0}\n"], components: [{ type: i1$4.ModalComponent, selector: "v-modal", inputs: ["appearingDelayMs", "maxWidthPx", "hideFooter"], outputs: ["closeEvent"] }, { type: i1$4.TitleComponent, selector: "v-title", inputs: ["type", "margin", "fullWidth", "center"] }, { type: i1$4.ButtonComponent, selector: "v-button", inputs: ["type", "mdiIcon", "disabled", "title", "titleTranslationKey"], outputs: ["clickEvent"] }, { type: i1$4.FormComponent, selector: "v-form", inputs: ["className"], outputs: ["valueChange"] }, { type: i1$4.InputComponent, selector: "v-input", inputs: ["name", "type", "title", "titleTranslationKey", "defaultValue", "widthPx", "fullWidth", "margin", "disabled", "step", "min", "maxLength", "tooltip", "required", "hideNumberSpinBox", "smallLabel"], outputs: ["valueChange"] }, { type: i1$4.SelectComponent, selector: "v-select", inputs: ["items", "defaultSelection", "defaultSelectionId", "clearable", "disabled", "multiple", "margin", "widthInPx", "notFoundText", "clearAllText", "name", "title", "titleTranslationKey", "clearSelectionSubject$", "tooltip", "required", "loading", "loadingText", "placeholder"], outputs: ["selectedChange", "clear"] }, { type: i1$4.DatePickerComponent, selector: "v-date-picker", inputs: ["name", "title", "titleTranslationKey", "widthPx", "fullWidth", "margin", "disabled", "tooltip", "required", "defaultDate", "defaultDateIsToday", "smallLabel"], outputs: ["valueChange"] }, { type: i1$4.InputLabelComponent, selector: "v-input-label", inputs: ["name", "title", "titleTranslationKey", "tooltip", "required", "largeMargin", "small"] }], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i1.AsyncPipe, "translate": i1$8.TranslatePipe } });
4483
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: DocumentenApiMetadataModalComponent, decorators: [{
4484
+ type: Component,
4485
+ args: [{ selector: 'valtimo-documenten-api-metadata-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-modal\n #documentenApiMetadataModal\n (closeEvent)=\"hide()\"\n *ngIf=\"{file: file$ | async, disabled: disabled$ | async, valid: valid$ | async} as obs\"\n>\n <div role=\"header\">\n <div class=\"edit-configuration-title\">\n <v-title [center]=\"true\" [fullWidth]=\"true\" [margin]=\"false\" type=\"h2\">{{\n 'document.fillInMetadata' | translate\n }}</v-title>\n </div>\n </div>\n <div role=\"content\">\n <ng-container *ngTemplateOutlet=\"metadataForm; context: {obs: obs}\"></ng-container>\n </div>\n <div role=\"footer\">\n <div class=\"buttons\">\n <v-button (clickEvent)=\"cancel()\" [disabled]=\"obs.disabled\" type=\"secondary\">{{\n 'document.cancel' | translate\n }}</v-button>\n <v-button\n (clickEvent)=\"save()\"\n [disabled]=\"obs.disabled || !obs.valid\"\n mdiIcon=\"upload\"\n type=\"success\"\n >{{ 'document.upload' | translate }}</v-button\n >\n </div>\n </div>\n</v-modal>\n\n<ng-template #metadataForm let-obs=\"obs\">\n <ng-container *ngIf=\"showForm$ | async\">\n <v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"additionalDocumentDate$ | async as additionalDate\"\n >\n <v-input\n [defaultValue]=\"filename || obs.file?.name\"\n [disabled]=\"obs.disabled || disableFilename\"\n [fullWidth]=\"true\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.filename' | translate\"\n [tooltip]=\"'document.filenameTooltip' | translate\"\n name=\"filename\"\n >\n </v-input>\n <v-input\n [defaultValue]=\"documentTitle\"\n [disabled]=\"obs.disabled || disableDocumentTitle\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.inputTitle' | translate\"\n [tooltip]=\"'document.inputTitleTooltip' | translate\"\n [widthPx]=\"400\"\n name=\"title\"\n >\n </v-input>\n <v-input\n [defaultValue]=\"author || (userEmail$ | async)\"\n [disabled]=\"obs.disabled || disableAuthor\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.author' | translate\"\n [tooltip]=\"'document.authorTooltip' | translate\"\n [widthPx]=\"300\"\n name=\"author\"\n >\n </v-input>\n <v-select\n *ngIf=\"languageItems$ | async as languageItems\"\n [defaultSelectionId]=\"language || languageItems[0].id\"\n [disabled]=\"obs.disabled || disableLanguage\"\n [items]=\"languageItems\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.language' | translate\"\n [tooltip]=\"'document.languageTooltip' | translate\"\n [widthInPx]=\"200\"\n name=\"language\"\n ></v-select>\n <ng-container *ngIf=\"{documentTypeItems: documentTypeItems$ | async} as obs\">\n <v-select\n [defaultSelectionId]=\"documentType\"\n [disabled]=\"obs.disabled || disableDocumentType\"\n [items]=\"obs.documentTypeItems\"\n [loading]=\"!obs.documentTypeItems\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.informatieobjecttype' | translate\"\n [tooltip]=\"'document.informatieobjecttypeTooltip' | translate\"\n [widthInPx]=\"200\"\n name=\"informatieobjecttype\"\n ></v-select>\n </ng-container>\n <v-date-picker\n [defaultDateIsToday]=\"true\"\n [disabled]=\"obs.disabled\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.creationDate' | translate\"\n [tooltip]=\"'document.creationDateTooltip' | translate\"\n [widthPx]=\"100\"\n name=\"creationDate\"\n ></v-date-picker>\n <ng-container\n *ngTemplateOutlet=\"additionalDatePicker; context: {additionalDate: additionalDate}\"\n ></ng-container>\n <v-date-picker\n *ngIf=\"additionalDate === 'received'\"\n [defaultDateIsToday]=\"true\"\n [disabled]=\"obs.disabled\"\n [margin]=\"true\"\n [title]=\"'document.receiptDate' | translate\"\n [tooltip]=\"'document.receiptDateTooltip' | translate\"\n [widthPx]=\"100\"\n name=\"receiptDate\"\n ></v-date-picker>\n <v-date-picker\n *ngIf=\"additionalDate === 'sent'\"\n [defaultDateIsToday]=\"true\"\n [disabled]=\"obs.disabled\"\n [margin]=\"true\"\n [title]=\"'document.sendDate' | translate\"\n [tooltip]=\"'document.sendDateTooltip' | translate\"\n [widthPx]=\"100\"\n name=\"sendDate\"\n ></v-date-picker>\n <v-select\n [defaultSelectionId]=\"status\"\n [disabled]=\"obs.disabled || disableStatus\"\n [items]=\"statusItems$ | async\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.status' | translate\"\n [tooltip]=\"'document.statusTooltip' | translate\"\n [widthInPx]=\"200\"\n [clearSelectionSubject$]=\"clearStatusSelection$\"\n name=\"status\"\n ></v-select>\n <v-input\n [defaultValue]=\"description\"\n [disabled]=\"obs.disabled || disableDescription\"\n [fullWidth]=\"true\"\n [margin]=\"true\"\n [title]=\"'document.inputDescription' | translate\"\n [tooltip]=\"'document.inputDescriptionTooltip' | translate\"\n name=\"description\"\n >\n </v-input>\n <v-select\n [defaultSelectionId]=\"confidentialityLevel\"\n [disabled]=\"obs.disabled || disableConfidentialityLevel\"\n [items]=\"confidentialityLevelItems$ | async\"\n [margin]=\"true\"\n [title]=\"'document.confidentialityLevel' | translate\"\n [tooltip]=\"'document.confidentialityLevelTooltip' | translate\"\n [widthInPx]=\"200\"\n name=\"confidentialityLevel\"\n ></v-select>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template #additionalDatePicker let-additionalDate=\"additionalDate\">\n <v-input-label\n [title]=\"'document.additionalDate' | translate\"\n [name]=\"'additionalDate'\"\n [tooltip]=\"'document.additionalDateTooltip' | translate\"\n [required]=\"true\"\n >\n </v-input-label>\n <div class=\"col-12 col-sm-8 col-lg-6 form-check mt-1 additional-date\">\n <label\n class=\"custom-control custom-radio custom-control-inline\"\n *ngFor=\"let option of ADDITONAL_DOCUMENT_DATE_OPTIONS\"\n (click)=\"setAdditionalDate(option.value)\"\n >\n <input\n class=\"custom-control-input\"\n type=\"radio\"\n name=\"radio-inline\"\n [checked]=\"additionalDate === option.value\"\n /><span class=\"custom-control-label\">{{ option.translationKey | translate }}</span>\n </label>\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 */.buttons{display:flex;flex-direction:row;width:100%;justify-content:space-between}.additional-date{padding:0;width:100%;max-width:100%;margin:0;margin-block-end:var(--v-input-margin)}.additional-date .custom-control{margin-bottom:0}\n"] }]
4486
+ }], ctorParameters: function () { return [{ type: i1$4.ModalService }, { type: i1$8.TranslateService }, { type: i1$5.ActivatedRoute }, { type: i2.DocumentService }, { type: i1$2.KeycloakService }, { type: ValtimoModalService }]; }, propDecorators: { documentenApiMetadataModal: [{
4487
+ type: ViewChild,
4488
+ args: ['documentenApiMetadataModal']
4489
+ }], show$: [{
4490
+ type: Input
4491
+ }], hide$: [{
4492
+ type: Input
4493
+ }], disabled$: [{
4494
+ type: Input
4495
+ }], file$: [{
4496
+ type: Input
4497
+ }], documentTitle: [{
4498
+ type: Input
4499
+ }], disableDocumentTitle: [{
4500
+ type: Input
4501
+ }], filename: [{
4502
+ type: Input
4503
+ }], disableFilename: [{
4504
+ type: Input
4505
+ }], author: [{
4506
+ type: Input
4507
+ }], disableAuthor: [{
4508
+ type: Input
4509
+ }], status: [{
4510
+ type: Input
4511
+ }], disableStatus: [{
4512
+ type: Input
4513
+ }], language: [{
4514
+ type: Input
4515
+ }], disableLanguage: [{
4516
+ type: Input
4517
+ }], documentType: [{
4518
+ type: Input
4519
+ }], disableDocumentType: [{
4520
+ type: Input
4521
+ }], description: [{
4522
+ type: Input
4523
+ }], disableDescription: [{
4524
+ type: Input
4525
+ }], confidentialityLevel: [{
4526
+ type: Input
4527
+ }], disableConfidentialityLevel: [{
4528
+ type: Input
4529
+ }], metadata: [{
4530
+ type: Output
4531
+ }] } });
4373
4532
 
4374
4533
  /*
4375
4534
  * Copyright 2015-2020 Ritense BV, the Netherlands.
@@ -4386,54 +4545,121 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
4386
4545
  * See the License for the specific language governing permissions and
4387
4546
  * limitations under the License.
4388
4547
  */
4389
- class ModalComponent {
4390
- constructor(modalService) {
4548
+ class DocumentenApiUploaderComponent {
4549
+ constructor(uploadProviderService, stateService, domService, downloadService, modalService, userProviderService, route) {
4550
+ this.uploadProviderService = uploadProviderService;
4551
+ this.stateService = stateService;
4552
+ this.domService = domService;
4553
+ this.downloadService = downloadService;
4391
4554
  this.modalService = modalService;
4392
- this.title = '';
4393
- this.subtitle = '';
4394
- this.showFooter = false;
4395
- }
4396
- ngOnInit() {
4397
- this.openScrollSubscription();
4555
+ this.userProviderService = userProviderService;
4556
+ this.route = route;
4557
+ this.valueChange = new EventEmitter();
4558
+ this.uploading$ = new BehaviorSubject(false);
4559
+ this.fileToBeUploaded$ = new BehaviorSubject(null);
4560
+ this.modalDisabled$ = new BehaviorSubject(false);
4561
+ this.showModal$ = new Subject();
4562
+ this.hideModal$ = new Subject();
4563
+ this.uploadProcessLinked$ = combineLatest([
4564
+ this.route?.params || of(null),
4565
+ this.route?.firstChild?.params || of(null),
4566
+ this.modalService.documentDefinitionName$,
4567
+ ]).pipe(filter(([params, firstChildParams, documentDefinitionName]) => !!(params?.documentDefinitionName ||
4568
+ firstChildParams?.documentDefinitionName ||
4569
+ documentDefinitionName)), switchMap(([params, firstChildParams, documentDefinitionName]) => this.uploadProviderService.checkUploadProcessLink(params?.documentDefinitionName ||
4570
+ firstChildParams?.documentDefinitionName ||
4571
+ documentDefinitionName)), startWith('loading'));
4572
+ this.isAdmin$ = this.userProviderService
4573
+ .getUserSubject()
4574
+ .pipe(map$1(userIdentity => userIdentity?.roles.includes('ROLE_ADMIN')));
4575
+ this._value = [];
4398
4576
  }
4399
- ngAfterViewInit() {
4400
- $(`#${this.elementId}`).modal({ show: false });
4577
+ get value() {
4578
+ return this._value;
4401
4579
  }
4402
- show() {
4403
- $(`#${this.elementId}`).modal('show');
4580
+ set value(value) {
4581
+ if (Array.isArray(value)) {
4582
+ this._value = value;
4583
+ }
4404
4584
  }
4405
- hide() {
4406
- $(`#${this.elementId}`).modal('hide');
4585
+ fileSelected(file) {
4586
+ this.fileToBeUploaded$.next(file);
4587
+ this.showModal$.next(null);
4407
4588
  }
4408
- ngOnDestroy() {
4409
- this.scrollSubscription.unsubscribe();
4589
+ deleteFile(id) {
4590
+ this.domService.toggleSubmitButton(true);
4591
+ this._value = this._value.filter((file) => file?.id ? file?.id !== id : true);
4592
+ this.valueChange.emit(this._value);
4410
4593
  }
4411
- openScrollSubscription() {
4412
- this.scrollSubscription = this.modalService.scrollToTop$.subscribe(() => {
4413
- const element = this.scrollModal.nativeElement;
4414
- if (element)
4415
- element.scrollTo(0, 0);
4416
- });
4594
+ metadataSet(metadata) {
4595
+ this.uploading$.next(true);
4596
+ this.hideModal$.next(null);
4597
+ this.domService.toggleSubmitButton(true);
4598
+ this.fileToBeUploaded$
4599
+ .pipe(take(1), switchMap(file => this.uploadProviderService.uploadTempFileWithMetadata(file, metadata)), tap(result => {
4600
+ this.domService.toggleSubmitButton(false);
4601
+ this.uploading$.next(false);
4602
+ this._value.push(result);
4603
+ this.valueChange.emit(this._value);
4604
+ }))
4605
+ .subscribe();
4417
4606
  }
4418
4607
  }
4419
- ModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ModalComponent, deps: [{ token: ValtimoModalService }], target: i0.ɵɵFactoryTarget.Component });
4420
- ModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ModalComponent, selector: "valtimo-modal", inputs: { elementId: "elementId", title: "title", subtitle: "subtitle", templateBelowSubtitle: "templateBelowSubtitle", showFooter: "showFooter" }, viewQueries: [{ propertyName: "scrollModal", first: true, predicate: ["scrollModal"], 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<div class=\"modal fade custom-width\" [id]=\"elementId\" role=\"dialog\" aria-modal=\"true\" #scrollModal>\n <div class=\"modal-dialog modal-lg\">\n <div class=\"modal-content\">\n <div class=\"modal-header modal-header-colored colored-header-grey\">\n <div class=\"modal-title\">\n <h4 class=\"title-text mb-2\">{{ title }}</h4>\n <h5 class=\"subtitle-text\">{{ subtitle }}</h5>\n <ng-container *ngIf=\"templateBelowSubtitle\">\n <ng-container *ngTemplateOutlet=\"templateBelowSubtitle\"></ng-container>\n </ng-container>\n </div>\n <div class=\"text-right\">\n <img src=\"assets/modal/header-image.png\" class=\"modal-header-image\" />\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </div>\n </div>\n <div class=\"modal-body\">\n <ng-content select=\"[body]\"></ng-content>\n </div>\n <div class=\"modal-footer\" *ngIf=\"showFooter\">\n <ng-content select=\"[footer]\"></ng-content>\n </div>\n </div>\n </div>\n</div>\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 */.colored-header-grey{background-color:#f3f4f7}.title-text{color:#585555}.subtitle-text{color:#959595}.modal-header-image{height:auto;width:50%}.modal-header{padding-bottom:.66rem;border-bottom:1px solid #c5c6c9}@media (min-width: 768px){.close{position:relative;left:25px;padding:0!important;margin-top:-20px!important}.close span{color:#fff}.modal-content{overflow:visible}}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
4421
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ModalComponent, decorators: [{
4608
+ DocumentenApiUploaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: DocumentenApiUploaderComponent, deps: [{ token: i1$a.UploadProviderService }, { token: FormIoStateService }, { token: FormIoDomService }, { token: i1$a.DownloadService }, { token: ValtimoModalService }, { token: i1$6.UserProviderService }, { token: i1$5.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
4609
+ DocumentenApiUploaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: DocumentenApiUploaderComponent, selector: "valtimo-documenten-api-formio-uploader", inputs: { disabled: "disabled", title: "title", hideTitle: "hideTitle", subtitle: "subtitle", maxFileSize: "maxFileSize", hideMaxFileSize: "hideMaxFileSize", camera: "camera", documentTitle: "documentTitle", disableDocumentTitle: "disableDocumentTitle", filename: "filename", disableFilename: "disableFilename", author: "author", disableAuthor: "disableAuthor", status: "status", disableStatus: "disableStatus", language: "language", disableLanguage: "disableLanguage", documentType: "documentType", disableDocumentType: "disableDocumentType", description: "description", disableDescription: "disableDescription", confidentialityLevel: "confidentialityLevel", disableConfidentialityLevel: "disableConfidentialityLevel", value: "value" }, outputs: { valueChange: "valueChange" }, 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=\"{linked: uploadProcessLinked$ | async, isAdmin: isAdmin$ | async} as obs\">\n <div *ngIf=\"obs.linked === false\">\n <div\n *ngIf=\"obs.isAdmin\"\n [translate]=\"'dossier.documenten.noProcessLinked.adminRole'\"\n class=\"bg-warning text-black mb-2 p-3 text-center\"\n ></div>\n <div\n *ngIf=\"!obs.isAdmin\"\n [translate]=\"'dossier.documenten.noProcessLinked.regularUser'\"\n class=\"bg-warning text-black mb-2 p-3 text-center\"\n ></div>\n </div>\n <valtimo-dropzone\n (fileSelected)=\"fileSelected($event)\"\n [acceptedFiles]=\"null\"\n [camera]=\"camera\"\n [disabled]=\"disabled || obs.linked === false || obs.linked === 'loading'\"\n [hideFilePreview]=\"true\"\n [hideTitle]=\"hideTitle\"\n [maxFileSize]=\"maxFileSize\"\n [maxFiles]=\"1\"\n [showMaxFileSize]=\"!hideMaxFileSize\"\n [subtitle]=\"subtitle\"\n [title]=\"title\"\n [uploading]=\"uploading$ | async\"\n ></valtimo-dropzone>\n</ng-container>\n\n<div *ngFor=\"let resource of _value\" class=\"file-preview\">\n <div class=\"file-preview-name\">\n <span>\n {{ resource.filename }}\n </span>\n </div>\n <div class=\"file-preview-size\">\n <span>\n {{ resource.sizeInBytes | filesize }}\n </span>\n </div>\n <div *ngIf=\"!disabled\" class=\"file-preview-delete\">\n <a (click)=\"deleteFile(resource.id)\">\n <i class=\"icon mdi mdi-delete\"></i>\n </a>\n </div>\n</div>\n\n<valtimo-documenten-api-metadata-modal\n (metadata)=\"metadataSet($event)\"\n [author]=\"author\"\n [confidentialityLevel]=\"confidentialityLevel\"\n [description]=\"description\"\n [disableAuthor]=\"disableAuthor\"\n [disableConfidentialityLevel]=\"disableConfidentialityLevel\"\n [disableDescription]=\"disableDescription\"\n [disableDocumentTitle]=\"disableDocumentTitle\"\n [disableDocumentType]=\"disableDocumentType\"\n [disableFilename]=\"disableFilename\"\n [disableLanguage]=\"disableLanguage\"\n [disableStatus]=\"disableStatus\"\n [disabled$]=\"modalDisabled$\"\n [documentTitle]=\"documentTitle\"\n [documentType]=\"documentType\"\n [file$]=\"fileToBeUploaded$\"\n [filename]=\"filename\"\n [hide$]=\"hideModal$\"\n [language]=\"language\"\n [show$]=\"showModal$\"\n [status]=\"status\"\n></valtimo-documenten-api-metadata-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 */.progress-bar-container{padding:15px 20px}::ng-deep .formio-component-valtimo-file .formio-button-add-another,::ng-deep .formio-component-valtimo-file .btn-secondary{display:none}::ng-deep .formio-component-valtimo-file td{padding:0!important;border:none}::ng-deep .formio-component-valtimo-file .table{border-collapse:collapse;border:none;margin:10px 0}.dropzone-container{margin-bottom:12px}.file-preview{margin-top:-1px;display:flex;border:1px solid #dee2e6}.file-preview div{padding:12px 10px}.file-preview .file-preview-name{width:65%}.file-preview .file-preview-size{width:35%}.file-preview .icon{color:#a1a1a1;font-size:1.3846rem;line-height:18px;cursor:pointer}.file-preview .icon:hover{color:gray}\n"], components: [{ type: DropzoneComponent, selector: "valtimo-dropzone", inputs: ["title", "hideTitle", "subtitle", "externalError$", "maxFileSize", "showMaxFileSize", "acceptedFiles", "clear$", "disabled", "hideFilePreview", "uploading", "camera", "maxFiles"], outputs: ["fileSelected"] }, { type: DocumentenApiMetadataModalComponent, selector: "valtimo-documenten-api-metadata-modal", inputs: ["show$", "hide$", "disabled$", "file$", "documentTitle", "disableDocumentTitle", "filename", "disableFilename", "author", "disableAuthor", "status", "disableStatus", "language", "disableLanguage", "documentType", "disableDocumentType", "description", "disableDescription", "confidentialityLevel", "disableConfidentialityLevel"], outputs: ["metadata"] }], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$8.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i1.AsyncPipe, "filesize": FileSizePipe } });
4610
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: DocumentenApiUploaderComponent, decorators: [{
4422
4611
  type: Component,
4423
- args: [{ selector: 'valtimo-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<div class=\"modal fade custom-width\" [id]=\"elementId\" role=\"dialog\" aria-modal=\"true\" #scrollModal>\n <div class=\"modal-dialog modal-lg\">\n <div class=\"modal-content\">\n <div class=\"modal-header modal-header-colored colored-header-grey\">\n <div class=\"modal-title\">\n <h4 class=\"title-text mb-2\">{{ title }}</h4>\n <h5 class=\"subtitle-text\">{{ subtitle }}</h5>\n <ng-container *ngIf=\"templateBelowSubtitle\">\n <ng-container *ngTemplateOutlet=\"templateBelowSubtitle\"></ng-container>\n </ng-container>\n </div>\n <div class=\"text-right\">\n <img src=\"assets/modal/header-image.png\" class=\"modal-header-image\" />\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </div>\n </div>\n <div class=\"modal-body\">\n <ng-content select=\"[body]\"></ng-content>\n </div>\n <div class=\"modal-footer\" *ngIf=\"showFooter\">\n <ng-content select=\"[footer]\"></ng-content>\n </div>\n </div>\n </div>\n</div>\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 */.colored-header-grey{background-color:#f3f4f7}.title-text{color:#585555}.subtitle-text{color:#959595}.modal-header-image{height:auto;width:50%}.modal-header{padding-bottom:.66rem;border-bottom:1px solid #c5c6c9}@media (min-width: 768px){.close{position:relative;left:25px;padding:0!important;margin-top:-20px!important}.close span{color:#fff}.modal-content{overflow:visible}}\n"] }]
4424
- }], ctorParameters: function () { return [{ type: ValtimoModalService }]; }, propDecorators: { elementId: [{
4612
+ args: [{ selector: 'valtimo-documenten-api-formio-uploader', 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=\"{linked: uploadProcessLinked$ | async, isAdmin: isAdmin$ | async} as obs\">\n <div *ngIf=\"obs.linked === false\">\n <div\n *ngIf=\"obs.isAdmin\"\n [translate]=\"'dossier.documenten.noProcessLinked.adminRole'\"\n class=\"bg-warning text-black mb-2 p-3 text-center\"\n ></div>\n <div\n *ngIf=\"!obs.isAdmin\"\n [translate]=\"'dossier.documenten.noProcessLinked.regularUser'\"\n class=\"bg-warning text-black mb-2 p-3 text-center\"\n ></div>\n </div>\n <valtimo-dropzone\n (fileSelected)=\"fileSelected($event)\"\n [acceptedFiles]=\"null\"\n [camera]=\"camera\"\n [disabled]=\"disabled || obs.linked === false || obs.linked === 'loading'\"\n [hideFilePreview]=\"true\"\n [hideTitle]=\"hideTitle\"\n [maxFileSize]=\"maxFileSize\"\n [maxFiles]=\"1\"\n [showMaxFileSize]=\"!hideMaxFileSize\"\n [subtitle]=\"subtitle\"\n [title]=\"title\"\n [uploading]=\"uploading$ | async\"\n ></valtimo-dropzone>\n</ng-container>\n\n<div *ngFor=\"let resource of _value\" class=\"file-preview\">\n <div class=\"file-preview-name\">\n <span>\n {{ resource.filename }}\n </span>\n </div>\n <div class=\"file-preview-size\">\n <span>\n {{ resource.sizeInBytes | filesize }}\n </span>\n </div>\n <div *ngIf=\"!disabled\" class=\"file-preview-delete\">\n <a (click)=\"deleteFile(resource.id)\">\n <i class=\"icon mdi mdi-delete\"></i>\n </a>\n </div>\n</div>\n\n<valtimo-documenten-api-metadata-modal\n (metadata)=\"metadataSet($event)\"\n [author]=\"author\"\n [confidentialityLevel]=\"confidentialityLevel\"\n [description]=\"description\"\n [disableAuthor]=\"disableAuthor\"\n [disableConfidentialityLevel]=\"disableConfidentialityLevel\"\n [disableDescription]=\"disableDescription\"\n [disableDocumentTitle]=\"disableDocumentTitle\"\n [disableDocumentType]=\"disableDocumentType\"\n [disableFilename]=\"disableFilename\"\n [disableLanguage]=\"disableLanguage\"\n [disableStatus]=\"disableStatus\"\n [disabled$]=\"modalDisabled$\"\n [documentTitle]=\"documentTitle\"\n [documentType]=\"documentType\"\n [file$]=\"fileToBeUploaded$\"\n [filename]=\"filename\"\n [hide$]=\"hideModal$\"\n [language]=\"language\"\n [show$]=\"showModal$\"\n [status]=\"status\"\n></valtimo-documenten-api-metadata-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 */.progress-bar-container{padding:15px 20px}::ng-deep .formio-component-valtimo-file .formio-button-add-another,::ng-deep .formio-component-valtimo-file .btn-secondary{display:none}::ng-deep .formio-component-valtimo-file td{padding:0!important;border:none}::ng-deep .formio-component-valtimo-file .table{border-collapse:collapse;border:none;margin:10px 0}.dropzone-container{margin-bottom:12px}.file-preview{margin-top:-1px;display:flex;border:1px solid #dee2e6}.file-preview div{padding:12px 10px}.file-preview .file-preview-name{width:65%}.file-preview .file-preview-size{width:35%}.file-preview .icon{color:#a1a1a1;font-size:1.3846rem;line-height:18px;cursor:pointer}.file-preview .icon:hover{color:gray}\n"] }]
4613
+ }], ctorParameters: function () { return [{ type: i1$a.UploadProviderService }, { type: FormIoStateService }, { type: FormIoDomService }, { type: i1$a.DownloadService }, { type: ValtimoModalService }, { type: i1$6.UserProviderService }, { type: i1$5.ActivatedRoute }]; }, propDecorators: { disabled: [{
4425
4614
  type: Input
4426
4615
  }], title: [{
4427
4616
  type: Input
4617
+ }], hideTitle: [{
4618
+ type: Input
4428
4619
  }], subtitle: [{
4429
4620
  type: Input
4430
- }], templateBelowSubtitle: [{
4621
+ }], maxFileSize: [{
4431
4622
  type: Input
4432
- }], showFooter: [{
4623
+ }], hideMaxFileSize: [{
4624
+ type: Input
4625
+ }], camera: [{
4626
+ type: Input
4627
+ }], documentTitle: [{
4628
+ type: Input
4629
+ }], disableDocumentTitle: [{
4630
+ type: Input
4631
+ }], filename: [{
4632
+ type: Input
4633
+ }], disableFilename: [{
4634
+ type: Input
4635
+ }], author: [{
4636
+ type: Input
4637
+ }], disableAuthor: [{
4638
+ type: Input
4639
+ }], status: [{
4640
+ type: Input
4641
+ }], disableStatus: [{
4642
+ type: Input
4643
+ }], language: [{
4644
+ type: Input
4645
+ }], disableLanguage: [{
4646
+ type: Input
4647
+ }], documentType: [{
4648
+ type: Input
4649
+ }], disableDocumentType: [{
4650
+ type: Input
4651
+ }], description: [{
4652
+ type: Input
4653
+ }], disableDescription: [{
4654
+ type: Input
4655
+ }], confidentialityLevel: [{
4656
+ type: Input
4657
+ }], disableConfidentialityLevel: [{
4658
+ type: Input
4659
+ }], valueChange: [{
4660
+ type: Output
4661
+ }], value: [{
4433
4662
  type: Input
4434
- }], scrollModal: [{
4435
- type: ViewChild,
4436
- args: ['scrollModal']
4437
4663
  }] } });
4438
4664
 
4439
4665
  /*
@@ -4451,11 +4677,213 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
4451
4677
  * See the License for the specific language governing permissions and
4452
4678
  * limitations under the License.
4453
4679
  */
4454
- class ModalModule {
4680
+ class DocumentenApiMetadataModalModule {
4455
4681
  }
4456
- ModalModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ModalModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
4457
- ModalModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ModalModule, declarations: [ModalComponent], imports: [CommonModule], exports: [ModalComponent] });
4458
- ModalModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ModalModule, imports: [[CommonModule]] });
4682
+ DocumentenApiMetadataModalModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: DocumentenApiMetadataModalModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
4683
+ DocumentenApiMetadataModalModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: DocumentenApiMetadataModalModule, declarations: [DocumentenApiMetadataModalComponent], imports: [CommonModule,
4684
+ TranslateModule,
4685
+ ModalModule$1,
4686
+ TitleModule,
4687
+ ButtonModule,
4688
+ TranslateModule,
4689
+ FormModule,
4690
+ InputModule,
4691
+ SelectModule,
4692
+ DatePickerModule,
4693
+ InputLabelModule], exports: [DocumentenApiMetadataModalComponent] });
4694
+ DocumentenApiMetadataModalModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: DocumentenApiMetadataModalModule, imports: [[
4695
+ CommonModule,
4696
+ TranslateModule,
4697
+ ModalModule$1,
4698
+ TitleModule,
4699
+ ButtonModule,
4700
+ TranslateModule,
4701
+ FormModule,
4702
+ InputModule,
4703
+ SelectModule,
4704
+ DatePickerModule,
4705
+ InputLabelModule,
4706
+ ]] });
4707
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: DocumentenApiMetadataModalModule, decorators: [{
4708
+ type: NgModule,
4709
+ args: [{
4710
+ declarations: [DocumentenApiMetadataModalComponent],
4711
+ exports: [DocumentenApiMetadataModalComponent],
4712
+ imports: [
4713
+ CommonModule,
4714
+ TranslateModule,
4715
+ ModalModule$1,
4716
+ TitleModule,
4717
+ ButtonModule,
4718
+ TranslateModule,
4719
+ FormModule,
4720
+ InputModule,
4721
+ SelectModule,
4722
+ DatePickerModule,
4723
+ InputLabelModule,
4724
+ ],
4725
+ }]
4726
+ }] });
4727
+
4728
+ /*
4729
+ * Copyright 2015-2020 Ritense BV, the Netherlands.
4730
+ *
4731
+ * Licensed under EUPL, Version 1.2 (the "License");
4732
+ * you may not use this file except in compliance with the License.
4733
+ * You may obtain a copy of the License at
4734
+ *
4735
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
4736
+ *
4737
+ * Unless required by applicable law or agreed to in writing, software
4738
+ * distributed under the License is distributed on an "AS IS" basis,
4739
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4740
+ * See the License for the specific language governing permissions and
4741
+ * limitations under the License.
4742
+ */
4743
+ class FormIoModule {
4744
+ }
4745
+ FormIoModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: FormIoModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
4746
+ FormIoModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: FormIoModule, declarations: [FormioComponent,
4747
+ FormioBuilderComponent,
4748
+ FormIoUploaderComponent,
4749
+ DocumentenApiUploaderComponent], imports: [CommonModule,
4750
+ FormioModule,
4751
+ DropzoneModule,
4752
+ TranslateModule,
4753
+ DocumentModule,
4754
+ FileSizeModule,
4755
+ ResourceModule,
4756
+ RouterModule,
4757
+ DocumentenApiMetadataModalModule], exports: [FormioComponent,
4758
+ FormioBuilderComponent,
4759
+ FormIoUploaderComponent,
4760
+ DocumentenApiUploaderComponent] });
4761
+ FormIoModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: FormIoModule, providers: [FormIoDomService, { provide: FormioAppConfig, useValue: AppConfig }], imports: [[
4762
+ CommonModule,
4763
+ FormioModule,
4764
+ DropzoneModule,
4765
+ TranslateModule,
4766
+ DocumentModule,
4767
+ FileSizeModule,
4768
+ ResourceModule,
4769
+ RouterModule,
4770
+ DocumentenApiMetadataModalModule,
4771
+ ]] });
4772
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: FormIoModule, decorators: [{
4773
+ type: NgModule,
4774
+ args: [{
4775
+ imports: [
4776
+ CommonModule,
4777
+ FormioModule,
4778
+ DropzoneModule,
4779
+ TranslateModule,
4780
+ DocumentModule,
4781
+ FileSizeModule,
4782
+ ResourceModule,
4783
+ RouterModule,
4784
+ DocumentenApiMetadataModalModule,
4785
+ ],
4786
+ declarations: [
4787
+ FormioComponent,
4788
+ FormioBuilderComponent,
4789
+ FormIoUploaderComponent,
4790
+ DocumentenApiUploaderComponent,
4791
+ ],
4792
+ exports: [
4793
+ FormioComponent,
4794
+ FormioBuilderComponent,
4795
+ FormIoUploaderComponent,
4796
+ DocumentenApiUploaderComponent,
4797
+ ],
4798
+ providers: [FormIoDomService, { provide: FormioAppConfig, useValue: AppConfig }],
4799
+ }]
4800
+ }] });
4801
+
4802
+ /*
4803
+ * Copyright 2015-2020 Ritense BV, the Netherlands.
4804
+ *
4805
+ * Licensed under EUPL, Version 1.2 (the "License");
4806
+ * you may not use this file except in compliance with the License.
4807
+ * You may obtain a copy of the License at
4808
+ *
4809
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
4810
+ *
4811
+ * Unless required by applicable law or agreed to in writing, software
4812
+ * distributed under the License is distributed on an "AS IS" basis,
4813
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4814
+ * See the License for the specific language governing permissions and
4815
+ * limitations under the License.
4816
+ */
4817
+ class ModalComponent {
4818
+ constructor(modalService) {
4819
+ this.modalService = modalService;
4820
+ this.title = '';
4821
+ this.subtitle = '';
4822
+ this.showFooter = false;
4823
+ }
4824
+ ngOnInit() {
4825
+ this.openScrollSubscription();
4826
+ }
4827
+ ngAfterViewInit() {
4828
+ $(`#${this.elementId}`).modal({ show: false });
4829
+ }
4830
+ show() {
4831
+ $(`#${this.elementId}`).modal('show');
4832
+ }
4833
+ hide() {
4834
+ $(`#${this.elementId}`).modal('hide');
4835
+ }
4836
+ ngOnDestroy() {
4837
+ this.scrollSubscription.unsubscribe();
4838
+ }
4839
+ openScrollSubscription() {
4840
+ this.scrollSubscription = this.modalService.scrollToTop$.subscribe(() => {
4841
+ const element = this.scrollModal.nativeElement;
4842
+ if (element)
4843
+ element.scrollTo(0, 0);
4844
+ });
4845
+ }
4846
+ }
4847
+ ModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ModalComponent, deps: [{ token: ValtimoModalService }], target: i0.ɵɵFactoryTarget.Component });
4848
+ ModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ModalComponent, selector: "valtimo-modal", inputs: { elementId: "elementId", title: "title", subtitle: "subtitle", templateBelowSubtitle: "templateBelowSubtitle", showFooter: "showFooter" }, viewQueries: [{ propertyName: "scrollModal", first: true, predicate: ["scrollModal"], 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<div class=\"modal fade custom-width\" [id]=\"elementId\" role=\"dialog\" aria-modal=\"true\" #scrollModal>\n <div class=\"modal-dialog modal-lg\">\n <div class=\"modal-content\">\n <div class=\"modal-header modal-header-colored colored-header-grey\">\n <div class=\"modal-title\">\n <h4 class=\"title-text mb-2\">{{ title }}</h4>\n <h5 class=\"subtitle-text\">{{ subtitle }}</h5>\n <ng-container *ngIf=\"templateBelowSubtitle\">\n <ng-container *ngTemplateOutlet=\"templateBelowSubtitle\"></ng-container>\n </ng-container>\n </div>\n <div class=\"text-right\">\n <img src=\"assets/modal/header-image.png\" class=\"modal-header-image\" />\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </div>\n </div>\n <div class=\"modal-body\">\n <ng-content select=\"[body]\"></ng-content>\n </div>\n <div class=\"modal-footer\" *ngIf=\"showFooter\">\n <ng-content select=\"[footer]\"></ng-content>\n </div>\n </div>\n </div>\n</div>\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 */.colored-header-grey{background-color:#f3f4f7}.title-text{color:#585555}.subtitle-text{color:#959595}.modal-header-image{height:auto;width:50%}.modal-header{padding-bottom:.66rem;border-bottom:1px solid #c5c6c9}@media (min-width: 768px){.close{position:relative;left:25px;padding:0!important;margin-top:-20px!important}.close span{color:#fff}.modal-content{overflow:visible}}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
4849
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ModalComponent, decorators: [{
4850
+ type: Component,
4851
+ args: [{ selector: 'valtimo-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<div class=\"modal fade custom-width\" [id]=\"elementId\" role=\"dialog\" aria-modal=\"true\" #scrollModal>\n <div class=\"modal-dialog modal-lg\">\n <div class=\"modal-content\">\n <div class=\"modal-header modal-header-colored colored-header-grey\">\n <div class=\"modal-title\">\n <h4 class=\"title-text mb-2\">{{ title }}</h4>\n <h5 class=\"subtitle-text\">{{ subtitle }}</h5>\n <ng-container *ngIf=\"templateBelowSubtitle\">\n <ng-container *ngTemplateOutlet=\"templateBelowSubtitle\"></ng-container>\n </ng-container>\n </div>\n <div class=\"text-right\">\n <img src=\"assets/modal/header-image.png\" class=\"modal-header-image\" />\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </div>\n </div>\n <div class=\"modal-body\">\n <ng-content select=\"[body]\"></ng-content>\n </div>\n <div class=\"modal-footer\" *ngIf=\"showFooter\">\n <ng-content select=\"[footer]\"></ng-content>\n </div>\n </div>\n </div>\n</div>\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 */.colored-header-grey{background-color:#f3f4f7}.title-text{color:#585555}.subtitle-text{color:#959595}.modal-header-image{height:auto;width:50%}.modal-header{padding-bottom:.66rem;border-bottom:1px solid #c5c6c9}@media (min-width: 768px){.close{position:relative;left:25px;padding:0!important;margin-top:-20px!important}.close span{color:#fff}.modal-content{overflow:visible}}\n"] }]
4852
+ }], ctorParameters: function () { return [{ type: ValtimoModalService }]; }, propDecorators: { elementId: [{
4853
+ type: Input
4854
+ }], title: [{
4855
+ type: Input
4856
+ }], subtitle: [{
4857
+ type: Input
4858
+ }], templateBelowSubtitle: [{
4859
+ type: Input
4860
+ }], showFooter: [{
4861
+ type: Input
4862
+ }], scrollModal: [{
4863
+ type: ViewChild,
4864
+ args: ['scrollModal']
4865
+ }] } });
4866
+
4867
+ /*
4868
+ * Copyright 2015-2020 Ritense BV, the Netherlands.
4869
+ *
4870
+ * Licensed under EUPL, Version 1.2 (the "License");
4871
+ * you may not use this file except in compliance with the License.
4872
+ * You may obtain a copy of the License at
4873
+ *
4874
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
4875
+ *
4876
+ * Unless required by applicable law or agreed to in writing, software
4877
+ * distributed under the License is distributed on an "AS IS" basis,
4878
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4879
+ * See the License for the specific language governing permissions and
4880
+ * limitations under the License.
4881
+ */
4882
+ class ModalModule {
4883
+ }
4884
+ ModalModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ModalModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
4885
+ ModalModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ModalModule, declarations: [ModalComponent], imports: [CommonModule], exports: [ModalComponent] });
4886
+ ModalModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ModalModule, imports: [[CommonModule]] });
4459
4887
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ModalModule, decorators: [{
4460
4888
  type: NgModule,
4461
4889
  args: [{
@@ -4887,7 +5315,7 @@ const formIoUploaderEditForm = () => ({
4887
5315
  * limitations under the License.
4888
5316
  */
4889
5317
  const customUploaderType = 'valtimo-file';
4890
- const COMPONENT_OPTIONS = {
5318
+ const COMPONENT_OPTIONS$1 = {
4891
5319
  type: customUploaderType,
4892
5320
  selector: 'valtimo-form-io-uploader',
4893
5321
  title: 'Valtimo File Upload',
@@ -4898,7 +5326,7 @@ const COMPONENT_OPTIONS = {
4898
5326
  editForm: formIoUploaderEditForm,
4899
5327
  };
4900
5328
  function registerFormioUploadComponent(injector) {
4901
- const originalUploadComponent = createCustomFormioComponent(COMPONENT_OPTIONS);
5329
+ const originalUploadComponent = createCustomFormioComponent(COMPONENT_OPTIONS$1);
4902
5330
  // override setValue function to allow for setting an array value
4903
5331
  class UploaderComponent extends originalUploadComponent {
4904
5332
  setValue(value) {
@@ -4906,8 +5334,8 @@ function registerFormioUploadComponent(injector) {
4906
5334
  return true;
4907
5335
  }
4908
5336
  }
4909
- if (!customElements.get(COMPONENT_OPTIONS.selector)) {
4910
- registerCustomFormioComponentWithClass(COMPONENT_OPTIONS, FormIoUploaderComponent, UploaderComponent, injector);
5337
+ if (!customElements.get(COMPONENT_OPTIONS$1.selector)) {
5338
+ registerCustomFormioComponentWithClass(COMPONENT_OPTIONS$1, FormIoUploaderComponent, UploaderComponent, injector);
4911
5339
  }
4912
5340
  }
4913
5341
 
@@ -4926,67 +5354,402 @@ function registerFormioUploadComponent(injector) {
4926
5354
  * See the License for the specific language governing permissions and
4927
5355
  * limitations under the License.
4928
5356
  */
4929
- const SelectComponent = Components.components.select;
4930
- function registerFormioFileSelectorComponent(injector) {
4931
- const documentService = injector.get(DocumentService);
4932
- const stateService = injector.get(FormIoStateService);
4933
- const unavailableMessage = {
4934
- label: 'could not retrieve documents',
4935
- value: null,
4936
- };
4937
- function getDocumentResources(documentId) {
4938
- if (!documentId) {
4939
- return new Promise(resolve => {
4940
- resolve([unavailableMessage]);
4941
- });
4942
- }
4943
- return documentService
4944
- .getDocument(documentId)
4945
- .toPromise()
4946
- .then(document => document.relatedFiles.map(relatedFile => ({
4947
- label: relatedFile.fileName,
4948
- value: relatedFile.fileId,
4949
- })))
4950
- .catch(() => new Promise(resolve => {
4951
- resolve([unavailableMessage]);
4952
- }));
4953
- }
4954
- class ResourceSelectorComponent extends SelectComponent {
4955
- static schema(...extend) {
4956
- return SelectComponent.schema({
4957
- type: 'resource-selector',
4958
- label: 'Resource selector',
4959
- key: 'resource-selector',
4960
- dataSrc: 'custom',
4961
- dataType: 'string',
4962
- valueProperty: 'value',
4963
- asyncValues: true,
4964
- data: {
4965
- custom: 'values = instance.getResources()',
4966
- },
4967
- ...extend,
4968
- });
4969
- }
4970
- getResources() {
4971
- return stateService.documentId$
4972
- .pipe(take(1))
4973
- .toPromise()
4974
- .then(documentId => getDocumentResources(documentId));
4975
- }
4976
- static get builderInfo() {
4977
- return {
4978
- title: 'Document picker',
4979
- icon: 'th-list',
4980
- group: 'basic',
4981
- documentation: '/userguide/#textfield',
4982
- weight: 0,
4983
- schema: ResourceSelectorComponent.schema(),
4984
- };
4985
- }
4986
- }
4987
- Formio.use({
4988
- components: {
4989
- 'resource-selector': ResourceSelectorComponent,
5357
+ const documentenApiUploaderEditForm = () => ({
5358
+ components: [
5359
+ { key: 'type', type: 'hidden' },
5360
+ {
5361
+ type: 'textfield',
5362
+ input: true,
5363
+ key: 'label',
5364
+ label: 'Label',
5365
+ placeholder: 'Label',
5366
+ validate: {
5367
+ required: true,
5368
+ },
5369
+ },
5370
+ {
5371
+ type: 'textfield',
5372
+ input: true,
5373
+ key: 'key',
5374
+ label: 'Property Name',
5375
+ placeholder: 'Property Name',
5376
+ tooltip: 'The name of this field in the API endpoint.',
5377
+ validate: {
5378
+ required: true,
5379
+ },
5380
+ },
5381
+ {
5382
+ type: 'textfield',
5383
+ input: true,
5384
+ key: 'customOptions.title',
5385
+ label: 'Title',
5386
+ placeholder: 'Title',
5387
+ tooltip: 'Leave empty to use the default title',
5388
+ validate: {
5389
+ required: false,
5390
+ },
5391
+ },
5392
+ {
5393
+ type: 'checkbox',
5394
+ input: true,
5395
+ inputType: 'checkbox',
5396
+ key: 'customOptions.hideTitle',
5397
+ label: 'Hide title',
5398
+ validate: {
5399
+ required: false,
5400
+ },
5401
+ },
5402
+ {
5403
+ type: 'textfield',
5404
+ input: true,
5405
+ key: 'customOptions.subtitle',
5406
+ label: 'Subtitle',
5407
+ placeholder: 'Title',
5408
+ tooltip: 'Leave empty to hide subtitle',
5409
+ validate: {
5410
+ required: false,
5411
+ },
5412
+ },
5413
+ {
5414
+ type: 'number',
5415
+ input: true,
5416
+ key: 'customOptions.maxFileSize',
5417
+ label: 'Maximum file size',
5418
+ placeholder: 'Maximum file size',
5419
+ defaultValue: 5,
5420
+ validate: {
5421
+ required: true,
5422
+ },
5423
+ },
5424
+ {
5425
+ type: 'checkbox',
5426
+ input: true,
5427
+ inputType: 'checkbox',
5428
+ key: 'customOptions.hideMaxFileSize',
5429
+ label: 'Hide maximum file size',
5430
+ validate: {
5431
+ required: false,
5432
+ },
5433
+ },
5434
+ {
5435
+ type: 'checkbox',
5436
+ input: true,
5437
+ inputType: 'checkbox',
5438
+ key: 'customOptions.camera',
5439
+ label: 'Allow camera uploads',
5440
+ validate: {
5441
+ required: false,
5442
+ },
5443
+ },
5444
+ {
5445
+ type: 'textfield',
5446
+ input: true,
5447
+ key: 'customOptions.documentTitle',
5448
+ label: 'Default document title',
5449
+ tooltip: 'Leave empty to let the user input their own title',
5450
+ validate: {
5451
+ required: false,
5452
+ },
5453
+ },
5454
+ {
5455
+ type: 'checkbox',
5456
+ input: true,
5457
+ inputType: 'checkbox',
5458
+ key: 'customOptions.disableDocumentTitle',
5459
+ label: 'Disable document title input',
5460
+ validate: {
5461
+ required: false,
5462
+ },
5463
+ },
5464
+ {
5465
+ type: 'textfield',
5466
+ input: true,
5467
+ key: 'customOptions.filename',
5468
+ label: 'Default filename',
5469
+ tooltip: 'Leave empty to let the user input their own filename',
5470
+ validate: {
5471
+ required: false,
5472
+ },
5473
+ },
5474
+ {
5475
+ type: 'checkbox',
5476
+ input: true,
5477
+ inputType: 'checkbox',
5478
+ key: 'customOptions.disableFilename',
5479
+ label: 'Disable filename input',
5480
+ validate: {
5481
+ required: false,
5482
+ },
5483
+ },
5484
+ {
5485
+ type: 'textfield',
5486
+ input: true,
5487
+ key: 'customOptions.author',
5488
+ label: 'Default author',
5489
+ tooltip: 'Leave empty to let the user input their own author',
5490
+ validate: {
5491
+ required: false,
5492
+ },
5493
+ },
5494
+ {
5495
+ type: 'checkbox',
5496
+ input: true,
5497
+ inputType: 'checkbox',
5498
+ key: 'customOptions.disableAuthor',
5499
+ label: 'Disable author input',
5500
+ validate: {
5501
+ required: false,
5502
+ },
5503
+ },
5504
+ {
5505
+ type: 'select',
5506
+ label: 'Default status',
5507
+ key: 'customOptions.status',
5508
+ placeholder: 'Select a default status',
5509
+ data: {
5510
+ values: [
5511
+ { value: 'in_bewerking', label: 'In editing' },
5512
+ { value: 'ter_vaststelling', label: 'To be confirmed' },
5513
+ { value: 'definitief', label: 'Definitive' },
5514
+ { value: 'gearchiveerd', label: 'Archived' },
5515
+ ],
5516
+ },
5517
+ dataSrc: 'values',
5518
+ input: true,
5519
+ validate: {
5520
+ required: false,
5521
+ },
5522
+ },
5523
+ {
5524
+ type: 'checkbox',
5525
+ input: true,
5526
+ inputType: 'checkbox',
5527
+ key: 'customOptions.disableStatus',
5528
+ label: 'Disable status input',
5529
+ validate: {
5530
+ required: false,
5531
+ },
5532
+ },
5533
+ {
5534
+ type: 'select',
5535
+ label: 'Default language',
5536
+ key: 'customOptions.language',
5537
+ placeholder: 'Select a default language',
5538
+ data: {
5539
+ values: [
5540
+ { value: 'nld', label: 'Dutch' },
5541
+ { value: 'eng', label: 'English' },
5542
+ { value: 'deu', label: 'German' },
5543
+ ],
5544
+ },
5545
+ dataSrc: 'values',
5546
+ input: true,
5547
+ validate: {
5548
+ required: false,
5549
+ },
5550
+ },
5551
+ {
5552
+ type: 'checkbox',
5553
+ input: true,
5554
+ inputType: 'checkbox',
5555
+ key: 'customOptions.disableLanguage',
5556
+ label: 'Disable language input',
5557
+ validate: {
5558
+ required: false,
5559
+ },
5560
+ },
5561
+ {
5562
+ type: 'textfield',
5563
+ input: true,
5564
+ key: 'customOptions.documentType',
5565
+ label: 'Default document type url',
5566
+ tooltip: 'Must match the document type url exactly. Leave empty to let the user input their own document type',
5567
+ validate: {
5568
+ required: false,
5569
+ },
5570
+ },
5571
+ {
5572
+ type: 'checkbox',
5573
+ input: true,
5574
+ inputType: 'checkbox',
5575
+ key: 'customOptions.disableDocumentType',
5576
+ label: 'Disable document type input',
5577
+ validate: {
5578
+ required: false,
5579
+ },
5580
+ },
5581
+ {
5582
+ type: 'textfield',
5583
+ input: true,
5584
+ key: 'customOptions.description',
5585
+ label: 'Default description',
5586
+ tooltip: 'Leave empty to let the user input their own description',
5587
+ validate: {
5588
+ required: false,
5589
+ },
5590
+ },
5591
+ {
5592
+ type: 'checkbox',
5593
+ input: true,
5594
+ inputType: 'checkbox',
5595
+ key: 'customOptions.disableDescription',
5596
+ label: 'Disable description input',
5597
+ validate: {
5598
+ required: false,
5599
+ },
5600
+ },
5601
+ {
5602
+ type: 'select',
5603
+ label: 'Default confidentiality level',
5604
+ key: 'customOptions.confidentialityLevel',
5605
+ placeholder: 'Select a default confidentiality level',
5606
+ data: {
5607
+ values: [
5608
+ { value: 'openbaar', label: 'Public' },
5609
+ { value: 'beperkt_openbaar', label: 'Restricted public' },
5610
+ { value: 'intern', label: 'Internal' },
5611
+ { value: 'zaakvertrouwelijk', label: 'Case confidential' },
5612
+ { value: 'vertrouwelijk', label: 'Private' },
5613
+ { value: 'confidentieel', label: 'Confidential' },
5614
+ { value: 'geheim', label: 'Secret' },
5615
+ { value: 'zeer_geheim', label: 'Very secret' },
5616
+ ],
5617
+ },
5618
+ dataSrc: 'values',
5619
+ input: true,
5620
+ validate: {
5621
+ required: false,
5622
+ },
5623
+ },
5624
+ {
5625
+ type: 'checkbox',
5626
+ input: true,
5627
+ inputType: 'checkbox',
5628
+ key: 'customOptions.disableConfidentialityLevel',
5629
+ label: 'Disable confidentiality level input',
5630
+ validate: {
5631
+ required: false,
5632
+ },
5633
+ },
5634
+ ],
5635
+ });
5636
+
5637
+ /*
5638
+ * Copyright 2015-2020 Ritense BV, the Netherlands.
5639
+ *
5640
+ * Licensed under EUPL, Version 1.2 (the "License");
5641
+ * you may not use this file except in compliance with the License.
5642
+ * You may obtain a copy of the License at
5643
+ *
5644
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
5645
+ *
5646
+ * Unless required by applicable law or agreed to in writing, software
5647
+ * distributed under the License is distributed on an "AS IS" basis,
5648
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
5649
+ * See the License for the specific language governing permissions and
5650
+ * limitations under the License.
5651
+ */
5652
+ const customDocumentApiUploaderType = 'documenten-api-file';
5653
+ const COMPONENT_OPTIONS = {
5654
+ type: customDocumentApiUploaderType,
5655
+ selector: 'documenten-api-form-io-uploader',
5656
+ title: 'Documenten API File Upload',
5657
+ group: 'advanced',
5658
+ icon: 'upload',
5659
+ // set empty value to force formio to accept arrays as valid input value for this field type
5660
+ emptyValue: [],
5661
+ editForm: documentenApiUploaderEditForm,
5662
+ };
5663
+ function registerDocumentenApiFormioUploadComponent(injector) {
5664
+ const originalUploadComponent = createCustomFormioComponent(COMPONENT_OPTIONS);
5665
+ // override setValue function to allow for setting an array value
5666
+ class UploaderComponent extends originalUploadComponent {
5667
+ setValue(value) {
5668
+ this._customAngularElement.value = value;
5669
+ return true;
5670
+ }
5671
+ }
5672
+ if (!customElements.get(COMPONENT_OPTIONS.selector)) {
5673
+ registerCustomFormioComponentWithClass(COMPONENT_OPTIONS, DocumentenApiUploaderComponent, UploaderComponent, injector);
5674
+ }
5675
+ }
5676
+
5677
+ /*
5678
+ * Copyright 2015-2020 Ritense BV, the Netherlands.
5679
+ *
5680
+ * Licensed under EUPL, Version 1.2 (the "License");
5681
+ * you may not use this file except in compliance with the License.
5682
+ * You may obtain a copy of the License at
5683
+ *
5684
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
5685
+ *
5686
+ * Unless required by applicable law or agreed to in writing, software
5687
+ * distributed under the License is distributed on an "AS IS" basis,
5688
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
5689
+ * See the License for the specific language governing permissions and
5690
+ * limitations under the License.
5691
+ */
5692
+ const SelectComponent = Components.components.select;
5693
+ function registerFormioFileSelectorComponent(injector) {
5694
+ const documentService = injector.get(DocumentService);
5695
+ const stateService = injector.get(FormIoStateService);
5696
+ const unavailableMessage = {
5697
+ label: 'could not retrieve documents',
5698
+ value: null,
5699
+ };
5700
+ function getDocumentResources(documentId) {
5701
+ if (!documentId) {
5702
+ return new Promise(resolve => {
5703
+ resolve([unavailableMessage]);
5704
+ });
5705
+ }
5706
+ return documentService
5707
+ .getDocument(documentId)
5708
+ .toPromise()
5709
+ .then(document => document.relatedFiles.map(relatedFile => ({
5710
+ label: relatedFile.fileName,
5711
+ value: relatedFile.fileId,
5712
+ })))
5713
+ .catch(() => new Promise(resolve => {
5714
+ resolve([unavailableMessage]);
5715
+ }));
5716
+ }
5717
+ class ResourceSelectorComponent extends SelectComponent {
5718
+ static schema(...extend) {
5719
+ return SelectComponent.schema({
5720
+ type: 'resource-selector',
5721
+ label: 'Resource selector',
5722
+ key: 'resource-selector',
5723
+ dataSrc: 'custom',
5724
+ dataType: 'string',
5725
+ valueProperty: 'value',
5726
+ asyncValues: true,
5727
+ data: {
5728
+ custom: 'values = instance.getResources()',
5729
+ },
5730
+ ...extend,
5731
+ });
5732
+ }
5733
+ getResources() {
5734
+ return stateService.documentId$
5735
+ .pipe(take(1))
5736
+ .toPromise()
5737
+ .then(documentId => getDocumentResources(documentId));
5738
+ }
5739
+ static get builderInfo() {
5740
+ return {
5741
+ title: 'Document picker',
5742
+ icon: 'th-list',
5743
+ group: 'basic',
5744
+ documentation: '/userguide/#textfield',
5745
+ weight: 0,
5746
+ schema: ResourceSelectorComponent.schema(),
5747
+ };
5748
+ }
5749
+ }
5750
+ Formio.use({
5751
+ components: {
5752
+ 'resource-selector': ResourceSelectorComponent,
4990
5753
  },
4991
5754
  });
4992
5755
  }
@@ -5173,115 +5936,68 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
5173
5936
  * See the License for the specific language governing permissions and
5174
5937
  * limitations under the License.
5175
5938
  */
5176
- class DocumentenApiMetadataModalComponent {
5177
- constructor(modalService, translateService, route, documentService) {
5178
- this.modalService = modalService;
5179
- this.translateService = translateService;
5180
- this.route = route;
5181
- this.documentService = documentService;
5182
- this.metadata = new EventEmitter();
5183
- this.CONFIDENTIALITY_LEVELS = [
5184
- 'openbaar',
5185
- 'beperkt_openbaar',
5186
- 'intern',
5187
- 'zaakvertrouwelijk',
5188
- 'vertrouwelijk',
5189
- 'confidentieel',
5190
- 'geheim',
5191
- 'zeer_geheim',
5192
- ];
5193
- this.confidentialityLevelItems$ = this.translateService
5194
- .stream('key')
5195
- .pipe(map(() => this.CONFIDENTIALITY_LEVELS.map(confidentialityLevel => ({
5196
- id: confidentialityLevel,
5197
- text: this.translateService.instant(`document.${confidentialityLevel}`),
5198
- }))));
5199
- this.STATUSES = [
5200
- 'in_bewerking',
5201
- 'ter_vaststelling',
5202
- 'definitief',
5203
- 'gearchiveerd',
5204
- ];
5205
- this.statusItems$ = this.translateService.stream('key').pipe(map(() => this.STATUSES.map(status => ({
5206
- id: status,
5207
- text: this.translateService.instant(`document.${status}`),
5208
- }))));
5209
- this.LANGUAGES = ['nld', 'eng', 'deu'];
5210
- this.languageItems$ = this.translateService.stream('key').pipe(map(() => this.LANGUAGES.map(language => ({
5211
- id: language,
5212
- text: this.translateService.instant(`document.${language}`),
5213
- }))));
5214
- this.documentTypeItems$ = this.route.params.pipe(switchMap(params => this.documentService.getDocumentTypes(params.documentDefinitionName)), map(documentTypes => documentTypes.map(type => ({ id: type.url, text: type.name }))));
5215
- this.showForm$ = this.modalService.modalVisible$;
5216
- this.valid$ = new BehaviorSubject(false);
5217
- this.formData$ = new BehaviorSubject(null);
5939
+ class SearchFieldsComponent {
5940
+ constructor() {
5941
+ this.searchFields$ = new BehaviorSubject([]);
5942
+ this.values$ = new BehaviorSubject({});
5943
+ this.valueChange = new EventEmitter();
5944
+ this.doSearch = new EventEmitter();
5945
+ this.expanded$ = new BehaviorSubject(false);
5946
+ }
5947
+ set searchFields(fields) {
5948
+ this.searchFields$.next(fields);
5218
5949
  }
5219
5950
  ngOnInit() {
5220
- this.openShowSubscription();
5221
- this.openHideSubscription();
5951
+ this.openValuesSubscription();
5222
5952
  }
5223
5953
  ngOnDestroy() {
5224
- this.showSubscription?.unsubscribe();
5225
- this.hideSubscription?.unsubscribe();
5226
- }
5227
- hide() {
5228
- this.formData$.next(null);
5229
- this.valid$.next(false);
5230
- this.modalService.closeModal();
5954
+ this.valuesSubscription?.unsubscribe();
5231
5955
  }
5232
- cancel() {
5233
- this.hide();
5234
- }
5235
- save() {
5236
- combineLatest([this.valid$, this.formData$])
5237
- .pipe(take$1(1))
5238
- .subscribe(([valid, formData]) => {
5239
- if (valid) {
5240
- this.metadata.emit(formData);
5241
- }
5956
+ singleValueChange(searchFieldKey, value) {
5957
+ this.values$.pipe(take$1(1)).subscribe(values => {
5958
+ this.values$.next({ ...values, [searchFieldKey]: value });
5242
5959
  });
5243
5960
  }
5244
- formValueChange(data) {
5245
- this.formData$.next(data);
5246
- this.setValid(data);
5247
- }
5248
- setValid(data) {
5249
- this.valid$.next(!!(data.filename &&
5250
- data.title &&
5251
- data.author &&
5252
- data.creationDate &&
5253
- data.status &&
5254
- data.language &&
5255
- data.informatieobjecttype));
5961
+ multipleValueChange(searchFieldKey, value) {
5962
+ this.values$.pipe(take$1(1)).subscribe(values => {
5963
+ this.values$.next({ ...values, [searchFieldKey]: { start: value.start, end: value.end } });
5964
+ });
5256
5965
  }
5257
- openShowSubscription() {
5258
- this.showSubscription = this.show$.subscribe(() => {
5259
- this.modalService.openModal(this.documentenApiMetadataModal);
5966
+ toggleExpanded() {
5967
+ this.expanded$.pipe(take$1(1)).subscribe(expanded => {
5968
+ this.expanded$.next(!expanded);
5260
5969
  });
5261
5970
  }
5262
- openHideSubscription() {
5263
- this.hideSubscription = this.hide$.subscribe(() => {
5264
- this.hide();
5971
+ search() {
5972
+ this.doSearch.emit();
5973
+ }
5974
+ openValuesSubscription() {
5975
+ this.valuesSubscription = combineLatest([this.searchFields$, this.values$]).subscribe(([searchFields, values]) => {
5976
+ const valuesKeys = Object.keys(values);
5977
+ const searchFieldsCopy = [...(searchFields || [])];
5978
+ valuesKeys.forEach(valueKey => {
5979
+ const correspondingSearchFieldIndex = searchFieldsCopy.findIndex(searchField => searchField.key === valueKey);
5980
+ if (correspondingSearchFieldIndex !== -1) {
5981
+ searchFieldsCopy[correspondingSearchFieldIndex].value = values[valueKey];
5982
+ }
5983
+ });
5984
+ console.log(searchFieldsCopy);
5985
+ this.valueChange.emit(searchFieldsCopy);
5265
5986
  });
5266
5987
  }
5267
5988
  }
5268
- DocumentenApiMetadataModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: DocumentenApiMetadataModalComponent, deps: [{ token: i1$4.ModalService }, { token: i1$8.TranslateService }, { token: i1$5.ActivatedRoute }, { token: i2.DocumentService }], target: i0.ɵɵFactoryTarget.Component });
5269
- DocumentenApiMetadataModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: DocumentenApiMetadataModalComponent, selector: "valtimo-documenten-api-metadata-modal", inputs: { show$: "show$", hide$: "hide$", disabled$: "disabled$", file$: "file$" }, outputs: { metadata: "metadata" }, viewQueries: [{ propertyName: "documentenApiMetadataModal", first: true, predicate: ["documentenApiMetadataModal"], 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-modal\n #documentenApiMetadataModal\n (closeEvent)=\"hide()\"\n *ngIf=\"{file: file$ | async, disabled: disabled$ | async, valid: valid$ | async} as obs\"\n>\n <div role=\"header\">\n <div class=\"edit-configuration-title\">\n <v-title [center]=\"true\" [fullWidth]=\"true\" [margin]=\"false\" type=\"h2\">{{\n 'document.fillInMetadata' | translate\n }}</v-title>\n </div>\n </div>\n <div role=\"content\">\n <ng-container *ngTemplateOutlet=\"metadataForm; context: {obs: obs}\"></ng-container>\n </div>\n <div role=\"footer\">\n <div class=\"buttons\">\n <v-button (clickEvent)=\"cancel()\" [disabled]=\"obs.disabled\" type=\"secondary\">{{\n 'document.cancel' | translate\n }}</v-button>\n <v-button\n (clickEvent)=\"save()\"\n [disabled]=\"obs.disabled || !obs.valid\"\n mdiIcon=\"upload\"\n type=\"success\"\n >{{ 'document.upload' | translate }}</v-button\n >\n </div>\n </div>\n</v-modal>\n\n<ng-template #metadataForm let-obs=\"obs\">\n <ng-container *ngIf=\"showForm$ | async\">\n <v-form (valueChange)=\"formValueChange($event)\">\n <v-input\n [defaultValue]=\"obs.file?.name\"\n [disabled]=\"obs.disabled\"\n [fullWidth]=\"true\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.filename' | translate\"\n [tooltip]=\"'document.filenameTooltip' | translate\"\n name=\"filename\"\n >\n </v-input>\n <v-input\n [disabled]=\"obs.disabled\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.inputTitle' | translate\"\n [tooltip]=\"'document.inputTitleTooltip' | translate\"\n [widthPx]=\"400\"\n name=\"title\"\n >\n </v-input>\n <v-input\n [disabled]=\"obs.disabled\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.author' | translate\"\n [tooltip]=\"'document.authorTooltip' | translate\"\n [widthPx]=\"300\"\n name=\"author\"\n >\n </v-input>\n <v-select\n [disabled]=\"obs.disabled\"\n [items]=\"statusItems$ | async\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.status' | translate\"\n [tooltip]=\"'document.statusTooltip' | translate\"\n [widthInPx]=\"200\"\n name=\"status\"\n ></v-select>\n <v-select\n *ngIf=\"languageItems$ | async as languageItems\"\n [defaultSelection]=\"languageItems[0]\"\n [disabled]=\"obs.disabled\"\n [items]=\"languageItems\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.language' | translate\"\n [tooltip]=\"'document.languageTooltip' | translate\"\n [widthInPx]=\"200\"\n name=\"language\"\n ></v-select>\n <ng-container *ngIf=\"{documentTypeItems: documentTypeItems$ | async} as obs\">\n <v-select\n [disabled]=\"obs.disabled\"\n [items]=\"obs.documentTypeItems\"\n [loading]=\"!obs.documentTypeItems\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.informatieobjecttype' | translate\"\n [tooltip]=\"'document.informatieobjecttypeTooltip' | translate\"\n [widthInPx]=\"200\"\n name=\"informatieobjecttype\"\n ></v-select>\n </ng-container>\n <v-date-picker\n [defaultDateIsToday]=\"true\"\n [disabled]=\"obs.disabled\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.creationDate' | translate\"\n [tooltip]=\"'document.creationDateTooltip' | translate\"\n [widthPx]=\"100\"\n name=\"creationDate\"\n ></v-date-picker>\n <v-date-picker\n [defaultDateIsToday]=\"true\"\n [disabled]=\"obs.disabled\"\n [margin]=\"true\"\n [title]=\"'document.receiptDate' | translate\"\n [tooltip]=\"'document.receiptDateTooltip' | translate\"\n [widthPx]=\"100\"\n name=\"receiptDate\"\n ></v-date-picker>\n <v-date-picker\n [defaultDateIsToday]=\"true\"\n [disabled]=\"obs.disabled\"\n [margin]=\"true\"\n [title]=\"'document.sendDate' | translate\"\n [tooltip]=\"'document.sendDateTooltip' | translate\"\n [widthPx]=\"100\"\n name=\"sendDate\"\n ></v-date-picker>\n <v-input\n [disabled]=\"obs.disabled\"\n [fullWidth]=\"true\"\n [margin]=\"true\"\n [title]=\"'document.inputDescription' | translate\"\n [tooltip]=\"'document.inputDescriptionTooltip' | translate\"\n name=\"description\"\n >\n </v-input>\n <v-select\n [disabled]=\"obs.disabled\"\n [items]=\"confidentialityLevelItems$ | async\"\n [margin]=\"true\"\n [title]=\"'document.confidentialityLevel' | translate\"\n [tooltip]=\"'document.confidentialityLevelTooltip' | translate\"\n [widthInPx]=\"200\"\n name=\"confidentialityLevel\"\n ></v-select>\n </v-form>\n </ng-container>\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 */.buttons{display:flex;flex-direction:row;width:100%;justify-content:space-between}\n"], components: [{ type: i1$4.ModalComponent, selector: "v-modal", inputs: ["appearingDelayMs", "maxWidthPx", "hideFooter"], outputs: ["closeEvent"] }, { type: i1$4.TitleComponent, selector: "v-title", inputs: ["type", "margin", "fullWidth", "center"] }, { type: i1$4.ButtonComponent, selector: "v-button", inputs: ["type", "mdiIcon", "disabled", "title", "titleTranslationKey"], outputs: ["clickEvent"] }, { type: i1$4.FormComponent, selector: "v-form", outputs: ["valueChange"] }, { type: i1$4.InputComponent, selector: "v-input", inputs: ["name", "type", "title", "titleTranslationKey", "defaultValue", "widthPx", "fullWidth", "margin", "disabled", "step", "min", "maxLength", "tooltip", "required", "hideNumberSpinBox"], outputs: ["valueChange"] }, { type: i1$4.SelectComponent, selector: "v-select", inputs: ["items", "defaultSelection", "defaultSelectionId", "clearable", "disabled", "multiple", "margin", "widthInPx", "notFoundText", "clearAllText", "name", "title", "titleTranslationKey", "clearSelectionSubject$", "tooltip", "required", "loading", "loadingText", "placeholder"], outputs: ["selectedChange", "clear"] }, { type: i1$4.DatePickerComponent, selector: "v-date-picker", inputs: ["name", "title", "titleTranslationKey", "widthPx", "fullWidth", "margin", "disabled", "tooltip", "required", "defaultDate", "defaultDateIsToday"] }], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "async": i1.AsyncPipe, "translate": i1$8.TranslatePipe } });
5270
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: DocumentenApiMetadataModalComponent, decorators: [{
5989
+ SearchFieldsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SearchFieldsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
5990
+ SearchFieldsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: SearchFieldsComponent, selector: "valtimo-search-fields", inputs: { loading: "loading", searchFields: "searchFields" }, outputs: { valueChange: "valueChange", doSearch: "doSearch" }, 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<div class=\"search fields\">\n <ng-container *ngIf=\"loading\">\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!loading\">\n <ng-container *ngTemplateOutlet=\"searchFieldsTemplate\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #loadingTemplate>\n <valtimo-spinner></valtimo-spinner>\n</ng-template>\n\n<ng-template #searchFieldsTemplate>\n <valtimo-widget>\n <div class=\"row p-3\" [ngClass]=\"{'row--hidden': (expanded$ | async) === false}\">\n <ng-container *ngFor=\"let searchField of searchFields$ | async; let i = index\">\n <div class=\"col-4\">\n <ng-container\n *ngTemplateOutlet=\"searchFieldTemplate; context: {searchField: searchField}\"\n ></ng-container>\n </div>\n <div class=\"w-100\" *ngIf=\"(i + 1) % 3 === 0\"></div>\n </ng-container>\n </div>\n <div class=\"row\">\n <div class=\"col-12\">\n <ng-container *ngTemplateOutlet=\"buttonsTemplate\"></ng-container>\n </div>\n </div>\n </valtimo-widget>\n</ng-template>\n\n<ng-template #searchFieldTemplate let-searchField=\"searchField\">\n <ng-container\n *ngIf=\"{\n tooltipKey: 'searchFieldsTooltips.' + searchField.key,\n tooltip: 'searchFieldsTooltips.' + searchField.key | translate\n } as vars\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateText;\n context: {searchField: searchField, tooltipKey: vars.tooltipKey, tooltip: vars.tooltip}\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumber;\n context: {searchField: searchField, tooltipKey: vars.tooltipKey, tooltip: vars.tooltip}\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDate;\n context: {searchField: searchField, tooltipKey: vars.tooltipKey, tooltip: vars.tooltip}\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumberRange;\n context: {searchField: searchField, tooltipKey: vars.tooltipKey, tooltip: vars.tooltip}\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateRange;\n context: {searchField: searchField, tooltipKey: vars.tooltipKey, tooltip: vars.tooltip}\n \"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateText\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n>\n <v-input\n *ngIf=\"searchField.datatype === 'text' && searchField.fieldtype === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"'searchFields.' + searchField.key | translate\"\n [fullWidth]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumber\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n>\n <v-input\n *ngIf=\"searchField.datatype === 'number' && searchField.fieldtype === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"'searchFields.' + searchField.key | translate\"\n [fullWidth]=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [smallLabel]=\"true\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDate\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n>\n <v-date-picker\n *ngIf=\"searchField.datatype === 'date' && searchField.fieldtype === 'single'\"\n [title]=\"'searchFields.' + searchField.key | translate\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumberRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n>\n <ng-container *ngIf=\"searchField.datatype === 'number' && searchField.fieldtype === 'range'\">\n <v-input-label\n [title]=\"'searchFields.' + searchField.key | translate\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input name=\"start\" [fullWidth]=\"true\" type=\"number\" [hideNumberSpinBox]=\"true\"> </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input name=\"end\" [fullWidth]=\"true\" type=\"number\" [hideNumberSpinBox]=\"true\"> </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n>\n <ng-container *ngIf=\"searchField.datatype === 'date' && searchField.fieldtype === 'range'\">\n <v-input-label\n [title]=\"'searchFields.' + searchField.key | translate\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker name=\"start\" fullWidth=\"true\"></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker name=\"end\" fullWidth=\"true\"></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template #toText>\n <div class=\"to-text\">\n <v-paragraph>{{ 'searchFields.to' | translate }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonsTemplate>\n <div class=\"buttons-container p-3\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <v-button\n (clickEvent)=\"toggleExpanded()\"\n [disabled]=\"loading\"\n type=\"secondary\"\n [mdiIcon]=\"obs.expanded ? 'chevron-up' : 'chevron-down'\"\n >{{\n obs.expanded\n ? ('searchFields.collapseButtonText' | translate)\n : ('searchFields.expandButtonText' | translate)\n }}</v-button\n >\n <div class=\"right-buttons\">\n <v-button\n (clickEvent)=\"search()\"\n [disabled]=\"loading\"\n type=\"danger\"\n *ngIf=\"obs.expanded\"\n mdiIcon=\"close\"\n >{{ 'searchFields.clearButtonText' | translate }}</v-button\n >\n <v-button\n (clickEvent)=\"search()\"\n [disabled]=\"loading\"\n type=\"primary\"\n *ngIf=\"obs.expanded\"\n mdiIcon=\"magnify\"\n >{{ 'searchFields.searchButtonText' | translate }}</v-button\n >\n </div>\n </div>\n</ng-template>\n", styles: [".w-100{height:15px}.w-100:last-child{display:none}::ng-deep .multiple-search-fields{display:flex!important;flex-direction:row!important;align-items:center}.to-text{margin-inline-start:8px;margin-inline-end:8px}.buttons-container{width:100%;display:flex;flex-direction:row;justify-content:space-between}.right-buttons{display:flex;flex-direction:row}.right-buttons v-button:last-child{margin-left:8px}.row--hidden{display:none}\n"], components: [{ type: SpinnerComponent, selector: "valtimo-spinner", inputs: ["useBootstrapSpinner", "name", "type", "size", "color", "bdColor", "fullScreen", "noMarginTop"] }, { type: WidgetComponent, selector: "valtimo-widget", inputs: ["type", "name", "icon", "contrast", "divider", "title", "subtitle", "collapseAble", "collapse", "additionalClasses"] }, { type: i1$4.InputComponent, selector: "v-input", inputs: ["name", "type", "title", "titleTranslationKey", "defaultValue", "widthPx", "fullWidth", "margin", "disabled", "step", "min", "maxLength", "tooltip", "required", "hideNumberSpinBox", "smallLabel"], outputs: ["valueChange"] }, { type: i1$4.DatePickerComponent, selector: "v-date-picker", inputs: ["name", "title", "titleTranslationKey", "widthPx", "fullWidth", "margin", "disabled", "tooltip", "required", "defaultDate", "defaultDateIsToday", "smallLabel"], outputs: ["valueChange"] }, { type: i1$4.InputLabelComponent, selector: "v-input-label", inputs: ["name", "title", "titleTranslationKey", "tooltip", "required", "largeMargin", "small"] }, { type: i1$4.FormComponent, selector: "v-form", inputs: ["className"], outputs: ["valueChange"] }, { type: i1$4.ParagraphComponent, selector: "v-paragraph", inputs: ["center", "fullWidth", "margin", "italic", "loading"] }, { type: i1$4.ButtonComponent, selector: "v-button", inputs: ["type", "mdiIcon", "disabled", "title", "titleTranslationKey"], outputs: ["clickEvent"] }], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i1.AsyncPipe, "translate": i1$8.TranslatePipe } });
5991
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SearchFieldsComponent, decorators: [{
5271
5992
  type: Component,
5272
- args: [{ selector: 'valtimo-documenten-api-metadata-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-modal\n #documentenApiMetadataModal\n (closeEvent)=\"hide()\"\n *ngIf=\"{file: file$ | async, disabled: disabled$ | async, valid: valid$ | async} as obs\"\n>\n <div role=\"header\">\n <div class=\"edit-configuration-title\">\n <v-title [center]=\"true\" [fullWidth]=\"true\" [margin]=\"false\" type=\"h2\">{{\n 'document.fillInMetadata' | translate\n }}</v-title>\n </div>\n </div>\n <div role=\"content\">\n <ng-container *ngTemplateOutlet=\"metadataForm; context: {obs: obs}\"></ng-container>\n </div>\n <div role=\"footer\">\n <div class=\"buttons\">\n <v-button (clickEvent)=\"cancel()\" [disabled]=\"obs.disabled\" type=\"secondary\">{{\n 'document.cancel' | translate\n }}</v-button>\n <v-button\n (clickEvent)=\"save()\"\n [disabled]=\"obs.disabled || !obs.valid\"\n mdiIcon=\"upload\"\n type=\"success\"\n >{{ 'document.upload' | translate }}</v-button\n >\n </div>\n </div>\n</v-modal>\n\n<ng-template #metadataForm let-obs=\"obs\">\n <ng-container *ngIf=\"showForm$ | async\">\n <v-form (valueChange)=\"formValueChange($event)\">\n <v-input\n [defaultValue]=\"obs.file?.name\"\n [disabled]=\"obs.disabled\"\n [fullWidth]=\"true\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.filename' | translate\"\n [tooltip]=\"'document.filenameTooltip' | translate\"\n name=\"filename\"\n >\n </v-input>\n <v-input\n [disabled]=\"obs.disabled\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.inputTitle' | translate\"\n [tooltip]=\"'document.inputTitleTooltip' | translate\"\n [widthPx]=\"400\"\n name=\"title\"\n >\n </v-input>\n <v-input\n [disabled]=\"obs.disabled\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.author' | translate\"\n [tooltip]=\"'document.authorTooltip' | translate\"\n [widthPx]=\"300\"\n name=\"author\"\n >\n </v-input>\n <v-select\n [disabled]=\"obs.disabled\"\n [items]=\"statusItems$ | async\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.status' | translate\"\n [tooltip]=\"'document.statusTooltip' | translate\"\n [widthInPx]=\"200\"\n name=\"status\"\n ></v-select>\n <v-select\n *ngIf=\"languageItems$ | async as languageItems\"\n [defaultSelection]=\"languageItems[0]\"\n [disabled]=\"obs.disabled\"\n [items]=\"languageItems\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.language' | translate\"\n [tooltip]=\"'document.languageTooltip' | translate\"\n [widthInPx]=\"200\"\n name=\"language\"\n ></v-select>\n <ng-container *ngIf=\"{documentTypeItems: documentTypeItems$ | async} as obs\">\n <v-select\n [disabled]=\"obs.disabled\"\n [items]=\"obs.documentTypeItems\"\n [loading]=\"!obs.documentTypeItems\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.informatieobjecttype' | translate\"\n [tooltip]=\"'document.informatieobjecttypeTooltip' | translate\"\n [widthInPx]=\"200\"\n name=\"informatieobjecttype\"\n ></v-select>\n </ng-container>\n <v-date-picker\n [defaultDateIsToday]=\"true\"\n [disabled]=\"obs.disabled\"\n [margin]=\"true\"\n [required]=\"true\"\n [title]=\"'document.creationDate' | translate\"\n [tooltip]=\"'document.creationDateTooltip' | translate\"\n [widthPx]=\"100\"\n name=\"creationDate\"\n ></v-date-picker>\n <v-date-picker\n [defaultDateIsToday]=\"true\"\n [disabled]=\"obs.disabled\"\n [margin]=\"true\"\n [title]=\"'document.receiptDate' | translate\"\n [tooltip]=\"'document.receiptDateTooltip' | translate\"\n [widthPx]=\"100\"\n name=\"receiptDate\"\n ></v-date-picker>\n <v-date-picker\n [defaultDateIsToday]=\"true\"\n [disabled]=\"obs.disabled\"\n [margin]=\"true\"\n [title]=\"'document.sendDate' | translate\"\n [tooltip]=\"'document.sendDateTooltip' | translate\"\n [widthPx]=\"100\"\n name=\"sendDate\"\n ></v-date-picker>\n <v-input\n [disabled]=\"obs.disabled\"\n [fullWidth]=\"true\"\n [margin]=\"true\"\n [title]=\"'document.inputDescription' | translate\"\n [tooltip]=\"'document.inputDescriptionTooltip' | translate\"\n name=\"description\"\n >\n </v-input>\n <v-select\n [disabled]=\"obs.disabled\"\n [items]=\"confidentialityLevelItems$ | async\"\n [margin]=\"true\"\n [title]=\"'document.confidentialityLevel' | translate\"\n [tooltip]=\"'document.confidentialityLevelTooltip' | translate\"\n [widthInPx]=\"200\"\n name=\"confidentialityLevel\"\n ></v-select>\n </v-form>\n </ng-container>\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 */.buttons{display:flex;flex-direction:row;width:100%;justify-content:space-between}\n"] }]
5273
- }], ctorParameters: function () { return [{ type: i1$4.ModalService }, { type: i1$8.TranslateService }, { type: i1$5.ActivatedRoute }, { type: i2.DocumentService }]; }, propDecorators: { documentenApiMetadataModal: [{
5274
- type: ViewChild,
5275
- args: ['documentenApiMetadataModal']
5276
- }], show$: [{
5277
- type: Input
5278
- }], hide$: [{
5993
+ args: [{ selector: 'valtimo-search-fields', 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<div class=\"search fields\">\n <ng-container *ngIf=\"loading\">\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!loading\">\n <ng-container *ngTemplateOutlet=\"searchFieldsTemplate\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #loadingTemplate>\n <valtimo-spinner></valtimo-spinner>\n</ng-template>\n\n<ng-template #searchFieldsTemplate>\n <valtimo-widget>\n <div class=\"row p-3\" [ngClass]=\"{'row--hidden': (expanded$ | async) === false}\">\n <ng-container *ngFor=\"let searchField of searchFields$ | async; let i = index\">\n <div class=\"col-4\">\n <ng-container\n *ngTemplateOutlet=\"searchFieldTemplate; context: {searchField: searchField}\"\n ></ng-container>\n </div>\n <div class=\"w-100\" *ngIf=\"(i + 1) % 3 === 0\"></div>\n </ng-container>\n </div>\n <div class=\"row\">\n <div class=\"col-12\">\n <ng-container *ngTemplateOutlet=\"buttonsTemplate\"></ng-container>\n </div>\n </div>\n </valtimo-widget>\n</ng-template>\n\n<ng-template #searchFieldTemplate let-searchField=\"searchField\">\n <ng-container\n *ngIf=\"{\n tooltipKey: 'searchFieldsTooltips.' + searchField.key,\n tooltip: 'searchFieldsTooltips.' + searchField.key | translate\n } as vars\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateText;\n context: {searchField: searchField, tooltipKey: vars.tooltipKey, tooltip: vars.tooltip}\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumber;\n context: {searchField: searchField, tooltipKey: vars.tooltipKey, tooltip: vars.tooltip}\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDate;\n context: {searchField: searchField, tooltipKey: vars.tooltipKey, tooltip: vars.tooltip}\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumberRange;\n context: {searchField: searchField, tooltipKey: vars.tooltipKey, tooltip: vars.tooltip}\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateRange;\n context: {searchField: searchField, tooltipKey: vars.tooltipKey, tooltip: vars.tooltip}\n \"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateText\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n>\n <v-input\n *ngIf=\"searchField.datatype === 'text' && searchField.fieldtype === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"'searchFields.' + searchField.key | translate\"\n [fullWidth]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumber\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n>\n <v-input\n *ngIf=\"searchField.datatype === 'number' && searchField.fieldtype === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"'searchFields.' + searchField.key | translate\"\n [fullWidth]=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [smallLabel]=\"true\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDate\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n>\n <v-date-picker\n *ngIf=\"searchField.datatype === 'date' && searchField.fieldtype === 'single'\"\n [title]=\"'searchFields.' + searchField.key | translate\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumberRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n>\n <ng-container *ngIf=\"searchField.datatype === 'number' && searchField.fieldtype === 'range'\">\n <v-input-label\n [title]=\"'searchFields.' + searchField.key | translate\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input name=\"start\" [fullWidth]=\"true\" type=\"number\" [hideNumberSpinBox]=\"true\"> </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input name=\"end\" [fullWidth]=\"true\" type=\"number\" [hideNumberSpinBox]=\"true\"> </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n>\n <ng-container *ngIf=\"searchField.datatype === 'date' && searchField.fieldtype === 'range'\">\n <v-input-label\n [title]=\"'searchFields.' + searchField.key | translate\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker name=\"start\" fullWidth=\"true\"></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker name=\"end\" fullWidth=\"true\"></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template #toText>\n <div class=\"to-text\">\n <v-paragraph>{{ 'searchFields.to' | translate }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonsTemplate>\n <div class=\"buttons-container p-3\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <v-button\n (clickEvent)=\"toggleExpanded()\"\n [disabled]=\"loading\"\n type=\"secondary\"\n [mdiIcon]=\"obs.expanded ? 'chevron-up' : 'chevron-down'\"\n >{{\n obs.expanded\n ? ('searchFields.collapseButtonText' | translate)\n : ('searchFields.expandButtonText' | translate)\n }}</v-button\n >\n <div class=\"right-buttons\">\n <v-button\n (clickEvent)=\"search()\"\n [disabled]=\"loading\"\n type=\"danger\"\n *ngIf=\"obs.expanded\"\n mdiIcon=\"close\"\n >{{ 'searchFields.clearButtonText' | translate }}</v-button\n >\n <v-button\n (clickEvent)=\"search()\"\n [disabled]=\"loading\"\n type=\"primary\"\n *ngIf=\"obs.expanded\"\n mdiIcon=\"magnify\"\n >{{ 'searchFields.searchButtonText' | translate }}</v-button\n >\n </div>\n </div>\n</ng-template>\n", styles: [".w-100{height:15px}.w-100:last-child{display:none}::ng-deep .multiple-search-fields{display:flex!important;flex-direction:row!important;align-items:center}.to-text{margin-inline-start:8px;margin-inline-end:8px}.buttons-container{width:100%;display:flex;flex-direction:row;justify-content:space-between}.right-buttons{display:flex;flex-direction:row}.right-buttons v-button:last-child{margin-left:8px}.row--hidden{display:none}\n"] }]
5994
+ }], propDecorators: { loading: [{
5279
5995
  type: Input
5280
- }], disabled$: [{
5996
+ }], searchFields: [{
5281
5997
  type: Input
5282
- }], file$: [{
5283
- type: Input
5284
- }], metadata: [{
5998
+ }], valueChange: [{
5999
+ type: Output
6000
+ }], doSearch: [{
5285
6001
  type: Output
5286
6002
  }] } });
5287
6003
 
@@ -5300,48 +6016,48 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
5300
6016
  * See the License for the specific language governing permissions and
5301
6017
  * limitations under the License.
5302
6018
  */
5303
- class DocumentenApiMetadataModalModule {
6019
+ class SearchFieldsModule {
5304
6020
  }
5305
- DocumentenApiMetadataModalModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: DocumentenApiMetadataModalModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
5306
- DocumentenApiMetadataModalModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: DocumentenApiMetadataModalModule, declarations: [DocumentenApiMetadataModalComponent], imports: [CommonModule,
6021
+ SearchFieldsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SearchFieldsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
6022
+ SearchFieldsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SearchFieldsModule, declarations: [SearchFieldsComponent], imports: [CommonModule,
6023
+ SpinnerModule,
6024
+ WidgetModule,
5307
6025
  TranslateModule,
5308
- ModalModule$1,
5309
- TitleModule,
5310
- ButtonModule,
5311
- TranslateModule,
5312
- FormModule,
5313
6026
  InputModule,
5314
- SelectModule,
5315
- DatePickerModule], exports: [DocumentenApiMetadataModalComponent] });
5316
- DocumentenApiMetadataModalModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: DocumentenApiMetadataModalModule, imports: [[
6027
+ FormModule,
6028
+ DatePickerModule,
6029
+ InputLabelModule,
6030
+ ParagraphModule,
6031
+ ButtonModule], exports: [SearchFieldsComponent] });
6032
+ SearchFieldsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SearchFieldsModule, imports: [[
5317
6033
  CommonModule,
6034
+ SpinnerModule,
6035
+ WidgetModule,
5318
6036
  TranslateModule,
5319
- ModalModule$1,
5320
- TitleModule,
5321
- ButtonModule,
5322
- TranslateModule,
5323
- FormModule,
5324
6037
  InputModule,
5325
- SelectModule,
6038
+ FormModule,
5326
6039
  DatePickerModule,
6040
+ InputLabelModule,
6041
+ ParagraphModule,
6042
+ ButtonModule,
5327
6043
  ]] });
5328
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: DocumentenApiMetadataModalModule, decorators: [{
6044
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SearchFieldsModule, decorators: [{
5329
6045
  type: NgModule,
5330
6046
  args: [{
5331
- declarations: [DocumentenApiMetadataModalComponent],
5332
- exports: [DocumentenApiMetadataModalComponent],
6047
+ declarations: [SearchFieldsComponent],
5333
6048
  imports: [
5334
6049
  CommonModule,
6050
+ SpinnerModule,
6051
+ WidgetModule,
5335
6052
  TranslateModule,
5336
- ModalModule$1,
5337
- TitleModule,
5338
- ButtonModule,
5339
- TranslateModule,
5340
- FormModule,
5341
6053
  InputModule,
5342
- SelectModule,
6054
+ FormModule,
5343
6055
  DatePickerModule,
6056
+ InputLabelModule,
6057
+ ParagraphModule,
6058
+ ButtonModule,
5344
6059
  ],
6060
+ exports: [SearchFieldsComponent],
5345
6061
  }]
5346
6062
  }] });
5347
6063
 
@@ -5365,5 +6081,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
5365
6081
  * Generated bundle index. Do not edit.
5366
6082
  */
5367
6083
 
5368
- export { Alert, AlertComponent, AlertModule, AlertService, AlertType, AlertsOptionsImpl, BpmnJsDiagramComponent, BpmnJsDiagramModule, BreadcrumbNavigationComponent, BreadcrumbNavigationModule, CamundaFormComponent, CamundaFormModule, CardComponent, CardModule, ComponentsModule, DataListComponent, DataListModule, DocumentenApiMetadataModalComponent, DocumentenApiMetadataModalModule, DropzoneComponent, DropzoneModule, FieldAutoFocusDirective, FieldAutoFocusModule, FileSizeModule, FileSizePipe, FilterSidebarComponent, FilterSidebarModule, FormIoModule, FormIoStateService, FormIoUploaderComponent, FormioBuilderComponent, FormioComponent, FormioOptionsImpl, LeftSidebarComponent, LeftSidebarModule, ListComponent, ListFilterPipe, ListModule, MenuComponent, MenuModule, MenuRoutingModule, MenuService, ModalComponent, ModalModule, MultiselectDropdownComponent, MultiselectDropdownModule, PageHeaderComponent, PageHeaderModule, PageTitleComponent, PageTitleModule, ProgressBarComponent, ProgressBarModule, RightSidebarComponent, RightSidebarModule, SearchableDropdownComponent, SearchableDropdownModule, SearchableDropdownSelectComponent, SearchableDropdownSelectModule, SpinnerComponent, SpinnerModule, TimelineComponent, TimelineItemImpl, TimelineModule, TopbarComponent, TopbarModule, UploaderComponent, UploaderDragDropDirective, UploaderModule, ValtimoModalService, ViewContentService, WebcamComponent, WebcamModule, WidgetComponent, WidgetModule, customUploaderType, menuInitializer, registerFormioFileSelectorComponent, registerFormioUploadComponent };
6084
+ export { Alert, AlertComponent, AlertModule, AlertService, AlertType, AlertsOptionsImpl, BpmnJsDiagramComponent, BpmnJsDiagramModule, BreadcrumbNavigationComponent, BreadcrumbNavigationModule, CamundaFormComponent, CamundaFormModule, CardComponent, CardModule, ComponentsModule, DataListComponent, DataListModule, DocumentenApiMetadataModalComponent, DocumentenApiMetadataModalModule, DocumentenApiUploaderComponent, DropzoneComponent, DropzoneModule, FieldAutoFocusDirective, FieldAutoFocusModule, FileSizeModule, FileSizePipe, FilterSidebarComponent, FilterSidebarModule, FormIoModule, FormIoStateService, FormIoUploaderComponent, FormioBuilderComponent, FormioComponent, FormioOptionsImpl, LeftSidebarComponent, LeftSidebarModule, ListComponent, ListFilterPipe, ListModule, MenuComponent, MenuModule, MenuRoutingModule, MenuService, ModalComponent, ModalModule, MultiselectDropdownComponent, MultiselectDropdownModule, PageHeaderComponent, PageHeaderModule, PageTitleComponent, PageTitleModule, ProgressBarComponent, ProgressBarModule, RightSidebarComponent, RightSidebarModule, SearchFieldsComponent, SearchFieldsModule, SearchableDropdownComponent, SearchableDropdownModule, SearchableDropdownSelectComponent, SearchableDropdownSelectModule, SpinnerComponent, SpinnerModule, TimelineComponent, TimelineItemImpl, TimelineModule, TopbarComponent, TopbarModule, UploaderComponent, UploaderDragDropDirective, UploaderModule, ValtimoModalService, ViewContentService, WebcamComponent, WebcamModule, WidgetComponent, WidgetModule, customDocumentApiUploaderType, customUploaderType, menuInitializer, registerDocumentenApiFormioUploadComponent, registerFormioFileSelectorComponent, registerFormioUploadComponent };
5369
6085
  //# sourceMappingURL=valtimo-components.mjs.map