@valtimo/task 12.2.1 → 12.4.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 (31) hide show
  1. package/esm2022/lib/components/assign-user-to-task/assign-user-to-task.component.mjs +8 -5
  2. package/esm2022/lib/components/task-detail-content/task-detail-content.component.mjs +317 -0
  3. package/esm2022/lib/components/task-detail-intermediate-save/task-detail-intermediate-save.component.mjs +144 -0
  4. package/esm2022/lib/components/task-detail-modal/task-detail-modal.component.mjs +53 -272
  5. package/esm2022/lib/components/task-list/task-list.component.mjs +5 -5
  6. package/esm2022/lib/models/task.model.mjs +1 -1
  7. package/esm2022/lib/services/index.mjs +2 -1
  8. package/esm2022/lib/services/task-intermediate-save.service.mjs +18 -3
  9. package/esm2022/lib/task.module.mjs +17 -6
  10. package/esm2022/public_api.mjs +9 -6
  11. package/fesm2022/valtimo-task.mjs +637 -405
  12. package/fesm2022/valtimo-task.mjs.map +1 -1
  13. package/lib/components/assign-user-to-task/assign-user-to-task.component.d.ts +1 -1
  14. package/lib/components/assign-user-to-task/assign-user-to-task.component.d.ts.map +1 -1
  15. package/lib/components/task-detail-content/task-detail-content.component.d.ts +79 -0
  16. package/lib/components/task-detail-content/task-detail-content.component.d.ts.map +1 -0
  17. package/lib/components/task-detail-intermediate-save/task-detail-intermediate-save.component.d.ts +41 -0
  18. package/lib/components/task-detail-intermediate-save/task-detail-intermediate-save.component.d.ts.map +1 -0
  19. package/lib/components/task-detail-modal/task-detail-modal.component.d.ts +22 -65
  20. package/lib/components/task-detail-modal/task-detail-modal.component.d.ts.map +1 -1
  21. package/lib/models/task.model.d.ts +5 -1
  22. package/lib/models/task.model.d.ts.map +1 -1
  23. package/lib/services/index.d.ts +1 -0
  24. package/lib/services/index.d.ts.map +1 -1
  25. package/lib/services/task-intermediate-save.service.d.ts +7 -1
  26. package/lib/services/task-intermediate-save.service.d.ts.map +1 -1
  27. package/lib/task.module.d.ts +14 -12
  28. package/lib/task.module.d.ts.map +1 -1
  29. package/package.json +1 -1
  30. package/public_api.d.ts +8 -5
  31. package/public_api.d.ts.map +1 -1
@@ -1,164 +1,36 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, EventEmitter, Component, Input, Output, ViewContainerRef, ViewEncapsulation, Optional, Inject, ViewChild, ChangeDetectionStrategy, HostListener, NgModule } from '@angular/core';
2
+ import { Injectable, EventEmitter, Component, Input, Output, ViewContainerRef, ChangeDetectionStrategy, Optional, Inject, ViewChild, signal, ViewEncapsulation, HostListener, NgModule } from '@angular/core';
3
+ import * as i9 from '@valtimo/components';
4
+ import { ViewType, SearchableDropdownSelectModule, FormioOptionsImpl, FormIoModule, ConfirmationModalModule, TooltipModule, CarbonListModule, PageHeaderModule, WidgetModule, SpinnerModule, CamundaFormModule, RenderInPageHeaderDirectiveModule, SearchFieldsModule } from '@valtimo/components';
5
+ import { BehaviorSubject, combineLatest, tap, filter, switchMap, of, map as map$1, Subscription, take as take$1, distinctUntilChanged, Subject } from 'rxjs';
6
+ import * as i6 from '@angular/common';
7
+ import { CommonModule } from '@angular/common';
8
+ import * as i3 from '@ngx-translate/core';
9
+ import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
3
10
  import * as i1 from '@angular/common/http';
4
11
  import { HttpParams, HttpHeaders, HttpClient } from '@angular/common/http';
5
- import * as i2 from '@valtimo/config';
12
+ import * as i1$1 from '@valtimo/config';
6
13
  import { BaseApiService, TaskListTab, FORM_VIEW_MODEL_TOKEN, ROLE_USER, HttpLoaderFactory } from '@valtimo/config';
7
- import * as i5 from '@valtimo/security';
8
14
  import { InterceptorSkip, AuthGuardService } from '@valtimo/security';
9
- import * as i10 from '@angular/common';
10
- import { CommonModule } from '@angular/common';
11
- import { FormsModule } from '@angular/forms';
12
- import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
13
- import * as i11$1 from '@ng-bootstrap/ng-bootstrap';
14
- import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
15
- import * as i8 from '@ngx-translate/core';
16
- import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
17
- import * as i6 from '@valtimo/components';
18
- import { ViewType, FormioOptionsImpl, CarbonListModule, PageHeaderModule, WidgetModule, SpinnerModule, SearchableDropdownSelectModule, CamundaFormModule, FormIoModule, RenderInPageHeaderDirectiveModule, ConfirmationModalModule, SearchFieldsModule } from '@valtimo/components';
19
- import * as i2$1 from '@valtimo/process-link';
20
- import { ProcessLinkModule } from '@valtimo/process-link';
21
- import * as i11 from 'carbon-components-angular';
22
- import { ModalModule, LinkModule, TabsModule, ContentSwitcherModule, DropdownModule, ButtonModule, IconModule, TooltipModule } from 'carbon-components-angular';
23
- import * as i1$2 from 'ngx-toastr';
24
- import { ToastrModule } from 'ngx-toastr';
25
- import { BehaviorSubject, combineLatest, tap, filter, switchMap, of, map as map$1, Subscription, take as take$1, Subject } from 'rxjs';
26
- import { map, take, distinctUntilChanged, switchMap as switchMap$1, filter as filter$1 } from 'rxjs/operators';
15
+ import { map, take, filter as filter$1, distinctUntilChanged as distinctUntilChanged$1 } from 'rxjs/operators';
27
16
  import { omit, isEqual } from 'lodash';
28
- import * as i1$1 from '@angular/router';
17
+ import * as i1$2 from '@angular/router';
29
18
  import { RouterModule } from '@angular/router';
30
- import moment from 'moment';
31
19
  import { RecentlyViewed16 } from '@carbon/icons';
32
- import * as i7 from '@valtimo/document';
33
- import * as i12 from '@valtimo/access-control';
34
- import * as i13 from 'ngx-logger';
35
-
36
- /*
37
- * Copyright 2015-2024 Ritense BV, the Netherlands.
38
- *
39
- * Licensed under EUPL, Version 1.2 (the "License");
40
- * you may not use this file except in compliance with the License.
41
- * You may obtain a copy of the License at
42
- *
43
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
44
- *
45
- * Unless required by applicable law or agreed to in writing, software
46
- * distributed under the License is distributed on an "AS IS" basis,
47
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
48
- * See the License for the specific language governing permissions and
49
- * limitations under the License.
50
- */
51
-
52
- /*
53
- * Copyright 2015-2024 Ritense BV, the Netherlands.
54
- *
55
- * Licensed under EUPL, Version 1.2 (the "License");
56
- * you may not use this file except in compliance with the License.
57
- * You may obtain a copy of the License at
58
- *
59
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
60
- *
61
- * Unless required by applicable law or agreed to in writing, software
62
- * distributed under the License is distributed on an "AS IS" basis,
63
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
64
- * See the License for the specific language governing permissions and
65
- * limitations under the License.
66
- */
67
-
68
- /*
69
- * Copyright 2015-2024 Ritense BV, the Netherlands.
70
- *
71
- * Licensed under EUPL, Version 1.2 (the "License");
72
- * you may not use this file except in compliance with the License.
73
- * You may obtain a copy of the License at
74
- *
75
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
76
- *
77
- * Unless required by applicable law or agreed to in writing, software
78
- * distributed under the License is distributed on an "AS IS" basis,
79
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
80
- * See the License for the specific language governing permissions and
81
- * limitations under the License.
82
- */
83
- var TaskListColumnDefaultSort;
84
- (function (TaskListColumnDefaultSort) {
85
- TaskListColumnDefaultSort["ASC"] = "ASC";
86
- TaskListColumnDefaultSort["DESC"] = "DESC";
87
- })(TaskListColumnDefaultSort || (TaskListColumnDefaultSort = {}));
88
-
89
- /*
90
- * Copyright 2015-2024 Ritense BV, the Netherlands.
91
- *
92
- * Licensed under EUPL, Version 1.2 (the "License");
93
- * you may not use this file except in compliance with the License.
94
- * You may obtain a copy of the License at
95
- *
96
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
97
- *
98
- * Unless required by applicable law or agreed to in writing, software
99
- * distributed under the License is distributed on an "AS IS" basis,
100
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
101
- * See the License for the specific language governing permissions and
102
- * limitations under the License.
103
- */
104
-
105
- /*
106
- * Copyright 2015-2024 Ritense BV, the Netherlands.
107
- *
108
- * Licensed under EUPL, Version 1.2 (the "License");
109
- * you may not use this file except in compliance with the License.
110
- * You may obtain a copy of the License at
111
- *
112
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
113
- *
114
- * Unless required by applicable law or agreed to in writing, software
115
- * distributed under the License is distributed on an "AS IS" basis,
116
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
117
- * See the License for the specific language governing permissions and
118
- * limitations under the License.
119
- */
120
- var TaskListSearchFieldDataType;
121
- (function (TaskListSearchFieldDataType) {
122
- TaskListSearchFieldDataType["TEXT"] = "text";
123
- TaskListSearchFieldDataType["NUMBER"] = "number";
124
- TaskListSearchFieldDataType["DATE"] = "date";
125
- TaskListSearchFieldDataType["DATETIME"] = "datetime";
126
- TaskListSearchFieldDataType["TIME"] = "time";
127
- TaskListSearchFieldDataType["BOOLEAN"] = "boolean";
128
- })(TaskListSearchFieldDataType || (TaskListSearchFieldDataType = {}));
129
- var TaskListSearchFieldFieldType;
130
- (function (TaskListSearchFieldFieldType) {
131
- TaskListSearchFieldFieldType["SINGLE"] = "single";
132
- TaskListSearchFieldFieldType["RANGE"] = "range";
133
- TaskListSearchFieldFieldType["SINGLE_SELECT_DROPDOWN"] = "single_select_dropdown";
134
- TaskListSearchFieldFieldType["MULTI_SELECT_DROPDOWN"] = "multi_select_dropdown";
135
- })(TaskListSearchFieldFieldType || (TaskListSearchFieldFieldType = {}));
136
- var TaskListSearchFieldMatchType;
137
- (function (TaskListSearchFieldMatchType) {
138
- TaskListSearchFieldMatchType["LIKE"] = "like";
139
- TaskListSearchFieldMatchType["EXACT"] = "exact";
140
- })(TaskListSearchFieldMatchType || (TaskListSearchFieldMatchType = {}));
141
- var TaskListSearchDropdownDataProvider;
142
- (function (TaskListSearchDropdownDataProvider) {
143
- TaskListSearchDropdownDataProvider["DATABASE"] = "dropdownDatabaseDataProvider";
144
- TaskListSearchDropdownDataProvider["JSON"] = "dropdownJsonFileDataProvider";
145
- })(TaskListSearchDropdownDataProvider || (TaskListSearchDropdownDataProvider = {}));
146
-
147
- /*
148
- * Copyright 2015-2024 Ritense BV, the Netherlands.
149
- *
150
- * Licensed under EUPL, Version 1.2 (the "License");
151
- * you may not use this file except in compliance with the License.
152
- * You may obtain a copy of the License at
153
- *
154
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
155
- *
156
- * Unless required by applicable law or agreed to in writing, software
157
- * distributed under the License is distributed on an "AS IS" basis,
158
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
159
- * See the License for the specific language governing permissions and
160
- * limitations under the License.
161
- */
20
+ import * as i7 from '@valtimo/process-link';
21
+ import { ProcessLinkModule, formSizeToCarbonModalSizeMap } from '@valtimo/process-link';
22
+ import * as i2 from '@valtimo/document';
23
+ import * as i12 from 'carbon-components-angular';
24
+ import { ButtonModule, IconModule, ModalModule, LinkModule, TabsModule, ContentSwitcherModule, DropdownModule, TooltipModule as TooltipModule$1 } from 'carbon-components-angular';
25
+ import * as i4 from 'ngx-logger';
26
+ import * as i3$1 from '@valtimo/access-control';
27
+ import * as i10 from 'ngx-toastr';
28
+ import { ToastrModule } from 'ngx-toastr';
29
+ import moment from 'moment';
30
+ import * as i11 from '@ng-bootstrap/ng-bootstrap';
31
+ import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
32
+ import { FormsModule } from '@angular/forms';
33
+ import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
162
34
 
163
35
  /*
164
36
  * Copyright 2015-2024 Ritense BV, the Netherlands.
@@ -245,13 +117,13 @@ class TaskService extends BaseApiService {
245
117
  getTaskListSearchFields(caseDefinitionName) {
246
118
  return this.httpClient.get(this.getApiUrl(`v1/search/field/TaskListSearchColumns/${caseDefinitionName}`));
247
119
  }
248
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskService, deps: [{ token: i1.HttpClient }, { token: i2.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
120
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskService, deps: [{ token: i1.HttpClient }, { token: i1$1.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
249
121
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskService, providedIn: 'root' }); }
250
122
  }
251
123
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskService, decorators: [{
252
124
  type: Injectable,
253
125
  args: [{ providedIn: 'root' }]
254
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.ConfigService }] });
126
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i1$1.ConfigService }] });
255
127
 
256
128
  /*
257
129
  * Copyright 2015-2024 Ritense BV, the Netherlands.
@@ -757,12 +629,12 @@ class TaskListSearchService {
757
629
  });
758
630
  return filters;
759
631
  }
760
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskListSearchService, deps: [{ token: i2.ConfigService }, { token: TaskListService }, { token: TaskService }], target: i0.ɵɵFactoryTarget.Injectable }); }
632
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskListSearchService, deps: [{ token: i1$1.ConfigService }, { token: TaskListService }, { token: TaskService }], target: i0.ɵɵFactoryTarget.Injectable }); }
761
633
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskListSearchService }); }
762
634
  }
763
635
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskListSearchService, decorators: [{
764
636
  type: Injectable
765
- }], ctorParameters: () => [{ type: i2.ConfigService }, { type: TaskListService }, { type: TaskService }] });
637
+ }], ctorParameters: () => [{ type: i1$1.ConfigService }, { type: TaskListService }, { type: TaskService }] });
766
638
 
767
639
  /*
768
640
  * Copyright 2015-2024 Ritense BV, the Netherlands.
@@ -806,12 +678,75 @@ class TaskListQueryParamService {
806
678
  parseBase64(base64string) {
807
679
  return JSON.parse(atob(base64string));
808
680
  }
809
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskListQueryParamService, deps: [{ token: i1$1.Router }, { token: i1$1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable }); }
681
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskListQueryParamService, deps: [{ token: i1$2.Router }, { token: i1$2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable }); }
810
682
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskListQueryParamService }); }
811
683
  }
812
684
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskListQueryParamService, decorators: [{
813
685
  type: Injectable
814
- }], ctorParameters: () => [{ type: i1$1.Router }, { type: i1$1.ActivatedRoute }] });
686
+ }], ctorParameters: () => [{ type: i1$2.Router }, { type: i1$2.ActivatedRoute }] });
687
+
688
+ /*
689
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
690
+ *
691
+ * Licensed under EUPL, Version 1.2 (the "License");
692
+ * you may not use this file except in compliance with the License.
693
+ * You may obtain a copy of the License at
694
+ *
695
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
696
+ *
697
+ * Unless required by applicable law or agreed to in writing, software
698
+ * distributed under the License is distributed on an "AS IS" basis,
699
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
700
+ * See the License for the specific language governing permissions and
701
+ * limitations under the License.
702
+ */
703
+ class TaskIntermediateSaveService extends BaseApiService {
704
+ get submission$() {
705
+ return this._submission$.pipe(filter((value) => !!value));
706
+ }
707
+ get formIoFormData$() {
708
+ return this._formIoFormData$.pipe(filter((value) => !!value));
709
+ }
710
+ constructor(httpClient, configService) {
711
+ super(httpClient, configService);
712
+ this.httpClient = httpClient;
713
+ this.configService = configService;
714
+ this._submission$ = new BehaviorSubject({});
715
+ this._formIoFormData$ = new BehaviorSubject({});
716
+ }
717
+ getIntermediateSubmission(taskInstanceId) {
718
+ return this.httpClient.get(this.getApiUrl('/v1/form/intermediate/submission'), {
719
+ params: {
720
+ taskInstanceId,
721
+ },
722
+ headers: new HttpHeaders().set(InterceptorSkip, '404'),
723
+ });
724
+ }
725
+ storeIntermediateSubmission(request) {
726
+ return this.httpClient.post(this.getApiUrl('/v1/form/intermediate/submission'), request, {
727
+ headers: new HttpHeaders().set(InterceptorSkip, '400'),
728
+ });
729
+ }
730
+ clearIntermediateSubmission(taskInstanceId) {
731
+ return this.httpClient.delete(this.getApiUrl('/v1/form/intermediate/submission'), {
732
+ params: {
733
+ taskInstanceId,
734
+ },
735
+ });
736
+ }
737
+ setSubmission(value) {
738
+ this._submission$.next(value);
739
+ }
740
+ setFormIoFormData(value) {
741
+ this._formIoFormData$.next(value);
742
+ }
743
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskIntermediateSaveService, deps: [{ token: i1.HttpClient }, { token: i1$1.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
744
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskIntermediateSaveService, providedIn: 'root' }); }
745
+ }
746
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskIntermediateSaveService, decorators: [{
747
+ type: Injectable,
748
+ args: [{ providedIn: 'root' }]
749
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i1$1.ConfigService }] });
815
750
 
816
751
  /*
817
752
  * Copyright 2015-2024 Ritense BV, the Netherlands.
@@ -931,11 +866,11 @@ class AssignUserToTaskComponent {
931
866
  this.disabled$.next(true);
932
867
  }
933
868
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AssignUserToTaskComponent, deps: [{ token: TaskService }], target: i0.ɵɵFactoryTarget.Component }); }
934
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AssignUserToTaskComponent, selector: "valtimo-assign-user-to-task", inputs: { taskId: "taskId", assigneeId: "assigneeId" }, outputs: { assignmentOfTaskChanged: "assignmentOfTaskChanged" }, usesOnChanges: true, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 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\n *ngIf=\"{\n candidateUsers: candidateUsersForTask$ | async,\n disabled: disabled$ | async,\n idOnServer: assignedIdOnServer$ | async\n } as obs\"\n>\n <div class=\"container-fluid\">\n <div class=\"row mt-2 mb-2\">\n <div class=\"col-12 pl-0 d-flex flex-row align-items-center\">\n <valtimo-searchable-dropdown-select\n *ngIf=\"obs.candidateUsers; else loading\"\n [style]=\"'underlinedText'\"\n [items]=\"mapUsersForDropdown(obs.candidateUsers)\"\n [buttonText]=\"'assignTask.header' | translate\"\n [searchText]=\"'interface.typeToSearch' | translate\"\n [noResultsText]=\"'interface.noSearchResults' | translate\"\n [disabled]=\"obs.disabled\"\n [selectedText]=\"'assignTask.assignedTo' | translate\"\n [selectedTextValue]=\"assignedUserFullName$ | async\"\n [clearSelectionButtonTitle]=\"'assignTask.remove' | translate\"\n [hasSelection]=\"userIdToAssign === obs.idOnServer && obs.idOnServer !== null\"\n [width]=\"250\"\n (itemSelected)=\"assignTask($event)\"\n (clearSelection)=\"unassignTask()\"\n >\n </valtimo-searchable-dropdown-select>\n </div>\n </div>\n </div>\n</ng-container>\n\n<ng-template #loading>\n <h5>\n <b>{{ 'assignTask.fetchingUsers' | translate }}</b>\n </h5>\n</ng-template>\n", styles: [".container-fluid{color:#959595}i{font-size:13px}\n/*!\n * Copyright 2015-2024 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"], dependencies: [{ kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.SearchableDropdownSelectComponent, selector: "valtimo-searchable-dropdown-select", inputs: ["style", "items", "buttonText", "searchText", "noResultsText", "disabled", "selectedText", "selectedTextValue", "clearSelectionButtonTitle", "hasSelection", "width", "hasPermission", "showClearSelection"], outputs: ["itemSelected", "clearSelection"] }, { kind: "pipe", type: i10.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] }); }
869
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AssignUserToTaskComponent, isStandalone: true, selector: "valtimo-assign-user-to-task", inputs: { taskId: "taskId", assigneeId: "assigneeId" }, outputs: { assignmentOfTaskChanged: "assignmentOfTaskChanged" }, usesOnChanges: true, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 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\n *ngIf=\"{\n candidateUsers: candidateUsersForTask$ | async,\n disabled: disabled$ | async,\n idOnServer: assignedIdOnServer$ | async,\n } as obs\"\n>\n <div class=\"container-fluid\">\n <div class=\"row mt-2 mb-2\">\n <div class=\"col-12 pl-0 d-flex flex-row align-items-center\">\n <valtimo-searchable-dropdown-select\n *ngIf=\"obs.candidateUsers; else loading\"\n [style]=\"'underlinedText'\"\n [items]=\"mapUsersForDropdown(obs.candidateUsers)\"\n [buttonText]=\"'assignTask.header' | translate\"\n [searchText]=\"'interface.typeToSearch' | translate\"\n [noResultsText]=\"'interface.noSearchResults' | translate\"\n [disabled]=\"obs.disabled\"\n [selectedText]=\"'assignTask.assignedTo' | translate\"\n [selectedTextValue]=\"assignedUserFullName$ | async\"\n [clearSelectionButtonTitle]=\"'assignTask.remove' | translate\"\n [hasSelection]=\"userIdToAssign === obs.idOnServer && obs.idOnServer !== null\"\n [width]=\"250\"\n (itemSelected)=\"assignTask($event)\"\n (clearSelection)=\"unassignTask()\"\n >\n </valtimo-searchable-dropdown-select>\n </div>\n </div>\n </div>\n</ng-container>\n\n<ng-template #loading>\n <h5>\n <b>{{ 'assignTask.fetchingUsers' | translate }}</b>\n </h5>\n</ng-template>\n", styles: [".container-fluid{color:#959595}i{font-size:13px}\n/*!\n * Copyright 2015-2024 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"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: SearchableDropdownSelectModule }, { kind: "component", type: i9.SearchableDropdownSelectComponent, selector: "valtimo-searchable-dropdown-select", inputs: ["style", "items", "buttonText", "searchText", "noResultsText", "disabled", "selectedText", "selectedTextValue", "clearSelectionButtonTitle", "hasSelection", "width", "hasPermission", "showClearSelection"], outputs: ["itemSelected", "clearSelection"] }] }); }
935
870
  }
936
871
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AssignUserToTaskComponent, decorators: [{
937
872
  type: Component,
938
- args: [{ selector: 'valtimo-assign-user-to-task', template: "<!--\n ~ Copyright 2015-2024 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\n *ngIf=\"{\n candidateUsers: candidateUsersForTask$ | async,\n disabled: disabled$ | async,\n idOnServer: assignedIdOnServer$ | async\n } as obs\"\n>\n <div class=\"container-fluid\">\n <div class=\"row mt-2 mb-2\">\n <div class=\"col-12 pl-0 d-flex flex-row align-items-center\">\n <valtimo-searchable-dropdown-select\n *ngIf=\"obs.candidateUsers; else loading\"\n [style]=\"'underlinedText'\"\n [items]=\"mapUsersForDropdown(obs.candidateUsers)\"\n [buttonText]=\"'assignTask.header' | translate\"\n [searchText]=\"'interface.typeToSearch' | translate\"\n [noResultsText]=\"'interface.noSearchResults' | translate\"\n [disabled]=\"obs.disabled\"\n [selectedText]=\"'assignTask.assignedTo' | translate\"\n [selectedTextValue]=\"assignedUserFullName$ | async\"\n [clearSelectionButtonTitle]=\"'assignTask.remove' | translate\"\n [hasSelection]=\"userIdToAssign === obs.idOnServer && obs.idOnServer !== null\"\n [width]=\"250\"\n (itemSelected)=\"assignTask($event)\"\n (clearSelection)=\"unassignTask()\"\n >\n </valtimo-searchable-dropdown-select>\n </div>\n </div>\n </div>\n</ng-container>\n\n<ng-template #loading>\n <h5>\n <b>{{ 'assignTask.fetchingUsers' | translate }}</b>\n </h5>\n</ng-template>\n", styles: [".container-fluid{color:#959595}i{font-size:13px}\n/*!\n * Copyright 2015-2024 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"] }]
873
+ args: [{ selector: 'valtimo-assign-user-to-task', standalone: true, imports: [CommonModule, TranslateModule, SearchableDropdownSelectModule], template: "<!--\n ~ Copyright 2015-2024 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\n *ngIf=\"{\n candidateUsers: candidateUsersForTask$ | async,\n disabled: disabled$ | async,\n idOnServer: assignedIdOnServer$ | async,\n } as obs\"\n>\n <div class=\"container-fluid\">\n <div class=\"row mt-2 mb-2\">\n <div class=\"col-12 pl-0 d-flex flex-row align-items-center\">\n <valtimo-searchable-dropdown-select\n *ngIf=\"obs.candidateUsers; else loading\"\n [style]=\"'underlinedText'\"\n [items]=\"mapUsersForDropdown(obs.candidateUsers)\"\n [buttonText]=\"'assignTask.header' | translate\"\n [searchText]=\"'interface.typeToSearch' | translate\"\n [noResultsText]=\"'interface.noSearchResults' | translate\"\n [disabled]=\"obs.disabled\"\n [selectedText]=\"'assignTask.assignedTo' | translate\"\n [selectedTextValue]=\"assignedUserFullName$ | async\"\n [clearSelectionButtonTitle]=\"'assignTask.remove' | translate\"\n [hasSelection]=\"userIdToAssign === obs.idOnServer && obs.idOnServer !== null\"\n [width]=\"250\"\n (itemSelected)=\"assignTask($event)\"\n (clearSelection)=\"unassignTask()\"\n >\n </valtimo-searchable-dropdown-select>\n </div>\n </div>\n </div>\n</ng-container>\n\n<ng-template #loading>\n <h5>\n <b>{{ 'assignTask.fetchingUsers' | translate }}</b>\n </h5>\n</ng-template>\n", styles: [".container-fluid{color:#959595}i{font-size:13px}\n/*!\n * Copyright 2015-2024 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"] }]
939
874
  }], ctorParameters: () => [{ type: TaskService }], propDecorators: { taskId: [{
940
875
  type: Input
941
876
  }], assigneeId: [{
@@ -997,170 +932,79 @@ const CAN_VIEW_CASE_PERMISSION = {
997
932
  * See the License for the specific language governing permissions and
998
933
  * limitations under the License.
999
934
  */
1000
- class TaskIntermediateSaveService extends BaseApiService {
1001
- constructor(httpClient, configService) {
1002
- super(httpClient, configService);
1003
- this.httpClient = httpClient;
1004
- this.configService = configService;
1005
- }
1006
- getIntermediateSubmission(taskInstanceId) {
1007
- return this.httpClient.get(this.getApiUrl('/v1/form/intermediate/submission'), {
1008
- params: {
1009
- taskInstanceId,
1010
- },
1011
- headers: new HttpHeaders().set(InterceptorSkip, '404'),
1012
- });
1013
- }
1014
- storeIntermediateSubmission(request) {
1015
- return this.httpClient.post(this.getApiUrl('/v1/form/intermediate/submission'), request, {
1016
- headers: new HttpHeaders().set(InterceptorSkip, '400'),
1017
- });
1018
- }
1019
- clearIntermediateSubmission(taskInstanceId) {
1020
- return this.httpClient.delete(this.getApiUrl('/v1/form/intermediate/submission'), {
1021
- params: {
1022
- taskInstanceId,
1023
- },
1024
- });
935
+ class TaskDetailContentComponent {
936
+ set task(value) {
937
+ if (!value)
938
+ return;
939
+ this.loadTaskDetails(value);
1025
940
  }
1026
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskIntermediateSaveService, deps: [{ token: i1.HttpClient }, { token: i2.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1027
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskIntermediateSaveService, providedIn: 'root' }); }
1028
- }
1029
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskIntermediateSaveService, decorators: [{
1030
- type: Injectable,
1031
- args: [{ providedIn: 'root' }]
1032
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.ConfigService }] });
1033
-
1034
- /*
1035
- * Copyright 2015-2024 Ritense BV, the Netherlands.
1036
- *
1037
- * Licensed under EUPL, Version 1.2 (the "License");
1038
- * you may not use this file except in compliance with the License.
1039
- * You may obtain a copy of the License at
1040
- *
1041
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
1042
- *
1043
- * Unless required by applicable law or agreed to in writing, software
1044
- * distributed under the License is distributed on an "AS IS" basis,
1045
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1046
- * See the License for the specific language governing permissions and
1047
- * limitations under the License.
1048
- */
1049
- moment.locale(localStorage.getItem('langKey') || '');
1050
- class TaskDetailModalComponent {
1051
- constructor(toastr, processLinkService, router, taskService, userProviderService, modalService, stateService, documentService, translateService, formViewModel, taskIntermediateSaveService, configService, iconService, permissionService, logger) {
1052
- this.toastr = toastr;
941
+ constructor(configService, documentService, iconService, logger, modalService, permissionService, processLinkService, router, stateService, taskIntermediateSaveService, taskService, toastr, translateService, formViewModel, urlResolverService) {
942
+ this.configService = configService;
943
+ this.documentService = documentService;
944
+ this.iconService = iconService;
945
+ this.logger = logger;
946
+ this.modalService = modalService;
947
+ this.permissionService = permissionService;
1053
948
  this.processLinkService = processLinkService;
1054
949
  this.router = router;
1055
- this.taskService = taskService;
1056
- this.userProviderService = userProviderService;
1057
- this.modalService = modalService;
1058
950
  this.stateService = stateService;
1059
- this.documentService = documentService;
951
+ this.taskIntermediateSaveService = taskIntermediateSaveService;
952
+ this.taskService = taskService;
953
+ this.toastr = toastr;
1060
954
  this.translateService = translateService;
1061
955
  this.formViewModel = formViewModel;
1062
- this.taskIntermediateSaveService = taskIntermediateSaveService;
1063
- this.configService = configService;
1064
- this.iconService = iconService;
1065
- this.permissionService = permissionService;
1066
- this.logger = logger;
956
+ this.urlResolverService = urlResolverService;
957
+ this.closeModalEvent = new EventEmitter();
1067
958
  this.formSubmit = new EventEmitter();
1068
- this.assignmentOfTaskChanged = new EventEmitter();
1069
- this.intermediateSaveEnabled = false;
1070
- this.currentIntermediateSave = null;
1071
- this.task$ = new BehaviorSubject(null);
1072
- this.taskInstanceId$ = new BehaviorSubject(null);
1073
- this.formDefinition$ = new BehaviorSubject(undefined);
1074
- this.formDefinitionId$ = new BehaviorSubject(undefined);
1075
- this.formName$ = new BehaviorSubject(undefined);
1076
- this.submission$ = new BehaviorSubject({});
1077
- this.formFlowInstanceId$ = new BehaviorSubject(undefined);
1078
- this.page$ = new BehaviorSubject(null);
959
+ this.activeChange = new EventEmitter();
960
+ this.canAssignUserToTask$ = new BehaviorSubject(false);
961
+ this.errorMessage$ = new BehaviorSubject(null);
962
+ this.formDefinition$ = new BehaviorSubject(null);
963
+ this.formDefinitionId$ = new BehaviorSubject(null);
964
+ this.formFlowInstanceId$ = new BehaviorSubject(null);
1079
965
  this.formioOptions$ = new BehaviorSubject(null);
1080
- this.errorMessage$ = new BehaviorSubject(undefined);
1081
- this.isAdmin$ = this.userProviderService
1082
- .getUserSubject()
1083
- .pipe(map(userIdentity => userIdentity?.roles?.includes('ROLE_ADMIN')));
1084
966
  this.formIoFormData$ = new BehaviorSubject(null);
967
+ this.formName$ = new BehaviorSubject(null);
1085
968
  this.loading$ = new BehaviorSubject(true);
1086
- this.showConfirmationModal$ = new BehaviorSubject(false);
1087
- this.taskProcessLinkType$ = new BehaviorSubject(null);
1088
- this.processLinkIsForm$ = this.taskProcessLinkType$.pipe(map(type => type === 'form'));
1089
- this.processLinkIsFormViewModel$ = this.taskProcessLinkType$.pipe(map(type => type === 'form-view-model'));
1090
- this.processLinkIsFormFlow$ = this.taskProcessLinkType$.pipe(map(type => type === 'form-flow'));
1091
- this.canAssignUserToTask$ = new BehaviorSubject(false);
1092
- this.processLinkId$ = new BehaviorSubject(undefined);
969
+ this.page$ = new BehaviorSubject(null);
970
+ this.submission$ = this.taskIntermediateSaveService.submission$;
971
+ this.task$ = new BehaviorSubject(null);
972
+ this.taskInstanceId$ = new BehaviorSubject(null);
973
+ this.intermediateSaveEnabled = false;
974
+ this._taskProcessLinkType$ = new BehaviorSubject(null);
975
+ this.processLinkIsForm$ = this._taskProcessLinkType$.pipe(map$1((type) => type === 'form'));
976
+ this.processLinkIsFormViewModel$ = this._taskProcessLinkType$.pipe(map$1((type) => type === 'form-view-model'));
977
+ this.processLinkIsFormFlow$ = this._taskProcessLinkType$.pipe(map$1((type) => type === 'form-flow'));
978
+ this._processLinkId$ = new BehaviorSubject(null);
1093
979
  this._subscriptions = new Subscription();
980
+ this.intermediateSaveEnabled = !!this.configService.featureToggles?.enableIntermediateSave;
981
+ this.iconService.registerAll([RecentlyViewed16]);
1094
982
  const options = new FormioOptionsImpl();
1095
983
  options.disableAlerts = true;
1096
984
  this.formioOptions$.next(options);
1097
- this.intermediateSaveEnabled = this.configService.featureToggles.enableIntermediateSave;
1098
- this.iconService.registerAll([RecentlyViewed16]);
1099
- this._subscriptions.add(this.canAssignUserToTask$.subscribe((canAssign) => {
1100
- this.logger.debug("Is user allowed to assign a user to Task", canAssign);
1101
- }));
1102
985
  }
1103
986
  ngOnInit() {
1104
- this._subscriptions.add(this.task$.subscribe(task => {
1105
- if (task) {
1106
- this.logger.debug("Checking if user allowed to assign a user to Task with id:", task.id);
1107
- this.permissionService.requestPermission(CAN_ASSIGN_TASK_PERMISSION, {
1108
- resource: TASK_DETAIL_PERMISSION_RESOURCE.task,
1109
- identifier: task.id,
1110
- }).subscribe((allowed) => {
1111
- this.canAssignUserToTask$.next(allowed);
1112
- });
1113
- }
1114
- else {
1115
- this.logger.debug("Reset is user allowed to assign a user to Task as task is null");
1116
- this.canAssignUserToTask$.next(false);
1117
- }
1118
- }));
987
+ this.openPermissionSubscription();
1119
988
  }
1120
989
  ngOnDestroy() {
1121
990
  this._subscriptions.unsubscribe();
1122
- }
1123
- openTaskDetails(task) {
1124
- this.resetTaskProcessLinkType();
1125
- this.resetFormDefinition();
1126
- this.getTaskProcessLink(task.id);
1127
- this.setDocumentDefinitionNameInService(task);
1128
- const documentId = task.businessKey;
1129
- this.stateService.setDocumentId(documentId);
1130
- this.task$.next(task);
1131
- this.taskInstanceId$.next(task.id);
1132
- this.page$.next({
1133
- title: task.name,
1134
- subtitle: `${this.translateService.instant('taskDetail.taskCreated')} ${task.created}`,
1135
- });
1136
- //only load from formlink when process link failed for backwards compatibility
1137
- if (!this.taskProcessLinkType$.getValue()) {
1138
- this.openModal();
1139
- }
1140
- }
1141
- gotoProcessLinkScreen() {
1142
- this.closeModal();
1143
- this.router.navigate(['process-links']);
1144
- }
1145
- onChange(event) {
1146
- if (event.data) {
1147
- this.formIoFormData$.next(event.data);
1148
- }
991
+ this.taskIntermediateSaveService.setSubmission({ data: {} });
1149
992
  }
1150
993
  onSubmit(submission) {
1151
994
  if (submission.data) {
995
+ this.taskIntermediateSaveService.setFormIoFormData(submission.data);
1152
996
  this.formIoFormData$.next(submission.data);
1153
997
  }
1154
- combineLatest([this.processLinkId$, this.taskProcessLinkType$, this.task$])
1155
- .pipe(take(1))
998
+ combineLatest([this._processLinkId$, this._taskProcessLinkType$, this.task$])
999
+ .pipe(take$1(1))
1156
1000
  .subscribe(([processLinkId, taskProcessLinkType, task]) => {
1157
1001
  if (taskProcessLinkType === 'form') {
1158
1002
  if (processLinkId) {
1159
1003
  this.processLinkService
1160
- .submitForm(processLinkId, submission.data, task.businessKey, task.id)
1004
+ .submitForm(processLinkId, submission.data, task?.businessKey, task?.id)
1161
1005
  .subscribe({
1162
1006
  next: (_) => {
1163
- this.completeTask();
1007
+ this.completeTask(task);
1164
1008
  },
1165
1009
  error: errors => {
1166
1010
  this.form.showErrors(errors);
@@ -1169,46 +1013,100 @@ class TaskDetailModalComponent {
1169
1013
  }
1170
1014
  }
1171
1015
  else if (taskProcessLinkType === 'form-view-model') {
1172
- this.completeTask();
1016
+ this.completeTask(task);
1173
1017
  }
1174
1018
  });
1175
1019
  }
1176
- completeTask() {
1177
- this.task$.pipe(take(1)).subscribe(task => {
1178
- this.toastr.success(`${task.name} ${this.translateService.instant('taskDetail.taskCompleted')}`);
1179
- this.closeModal();
1180
- this.task$.next(null);
1181
- this.formSubmit.emit();
1020
+ completeTask(task) {
1021
+ if (!task)
1022
+ return;
1023
+ this.toastr.success(`${task.name} ${this.translateService.instant('taskDetail.taskCompleted')}`);
1024
+ this.task$.next(null);
1025
+ this.formSubmit.emit();
1026
+ this.closeModalEvent.emit();
1027
+ this.activeChange.emit(false);
1028
+ if (this.formFlow)
1029
+ this.formFlow.saveData();
1030
+ }
1031
+ onChange(event) {
1032
+ if (event.data) {
1033
+ this.taskIntermediateSaveService.setFormIoFormData(event.data);
1034
+ this.formIoFormData$.next(event.data);
1035
+ this.activeChange.emit(true);
1036
+ }
1037
+ }
1038
+ loadTaskDetails(task) {
1039
+ this.resetTaskProcessLinkType();
1040
+ this.resetFormDefinition();
1041
+ this.getTaskProcessLink(task.id);
1042
+ this.setDocumentDefinitionNameInService(task);
1043
+ const documentId = task.businessKey;
1044
+ this.stateService.setDocumentId(documentId);
1045
+ this.task$.next(task);
1046
+ this.taskInstanceId$.next(task.id);
1047
+ this.page$.next({
1048
+ title: task.name,
1049
+ subtitle: `${this.translateService.instant('taskDetail.taskCreated')} ${task.created}`,
1182
1050
  });
1183
1051
  }
1184
- resetFormDefinition() {
1185
- this.formDefinition$.next(null);
1186
- this.loading$.next(true);
1052
+ gotoProcessLinkScreen() {
1053
+ this.closeModalEvent.emit();
1054
+ if (this.formFlow)
1055
+ this.formFlow.saveData();
1056
+ this.router.navigate(['process-links']);
1057
+ }
1058
+ getCurrentProgress(formViewModelComponentRef) {
1059
+ this.taskInstanceId$
1060
+ .pipe(take$1(1), switchMap((taskInstanceId) => this.taskIntermediateSaveService.getIntermediateSubmission(taskInstanceId ?? '')))
1061
+ .subscribe({
1062
+ next: (intermediateSubmission) => {
1063
+ this.taskIntermediateSaveService.setSubmission({ data: intermediateSubmission.submission });
1064
+ if (formViewModelComponentRef) {
1065
+ formViewModelComponentRef.instance.submission = {
1066
+ data: intermediateSubmission.submission,
1067
+ };
1068
+ }
1069
+ },
1070
+ });
1187
1071
  }
1188
1072
  getTaskProcessLink(taskId) {
1189
1073
  this.taskService.getTaskProcessLink(taskId).subscribe({
1190
1074
  next: res => {
1191
- if (res != null) {
1075
+ if (res !== null) {
1192
1076
  switch (res?.type) {
1193
1077
  case 'form':
1194
- this.taskProcessLinkType$.next('form');
1195
- this.processLinkId$.next(res.processLinkId);
1078
+ this._taskProcessLinkType$.next('form');
1079
+ this._processLinkId$.next(res.processLinkId);
1196
1080
  if (this.intermediateSaveEnabled)
1197
1081
  this.getCurrentProgress();
1198
- this.setFormDefinitionAndOpenModal(res.properties.prefilledForm);
1082
+ this.setFormDefinition(res.properties.prefilledForm);
1199
1083
  break;
1200
1084
  case 'form-flow':
1201
- this.taskProcessLinkType$.next('form-flow');
1202
- this.formFlowInstanceId$.next(res.properties.formFlowInstanceId);
1085
+ this._taskProcessLinkType$.next('form-flow');
1086
+ this.formFlowInstanceId$.next(res.properties.formFlowInstanceId ?? '');
1203
1087
  break;
1204
1088
  case 'form-view-model':
1205
- this.taskProcessLinkType$.next('form-view-model');
1206
- this.processLinkId$.next(res.processLinkId);
1089
+ this._taskProcessLinkType$.next('form-view-model');
1090
+ this._processLinkId$.next(res.processLinkId);
1207
1091
  this.formDefinition$.next(res.properties.formDefinition);
1208
- this.formName$.next(res.properties.formName);
1209
- this.openModal();
1092
+ this.formName$.next(res.properties.formName ?? '');
1210
1093
  this.setFormViewModelComponent();
1211
1094
  break;
1095
+ case 'url':
1096
+ this._taskProcessLinkType$.next('url');
1097
+ this._processLinkId$.next(res.processLinkId);
1098
+ combineLatest([
1099
+ this.processLinkService.getVariables(),
1100
+ this.task$
1101
+ ]).pipe(take$1(1))
1102
+ .subscribe(([variables, task]) => {
1103
+ let url = this.urlResolverService.resolveUrlVariables(res.properties.url, variables.variables);
1104
+ window.open(url, '_blank').focus();
1105
+ this.processLinkService.submitURLProcessLink(res.processLinkId, task.businessKey, task.id).subscribe(() => {
1106
+ this.completeTask(task);
1107
+ });
1108
+ });
1109
+ break;
1212
1110
  }
1213
1111
  this.loading$.next(false);
1214
1112
  }
@@ -1218,23 +1116,28 @@ class TaskDetailModalComponent {
1218
1116
  },
1219
1117
  });
1220
1118
  }
1221
- resetTaskProcessLinkType() {
1222
- this.taskProcessLinkType$.next(null);
1223
- this.processLinkId$.next(null);
1119
+ openPermissionSubscription() {
1120
+ this._subscriptions.add(this.task$.subscribe(task => {
1121
+ if (task) {
1122
+ this.logger.debug('Checking if user allowed to assign a user to Task with id:', task.id);
1123
+ this.permissionService
1124
+ .requestPermission(CAN_ASSIGN_TASK_PERMISSION, {
1125
+ resource: TASK_DETAIL_PERMISSION_RESOURCE.task,
1126
+ identifier: task.id,
1127
+ })
1128
+ .subscribe((allowed) => {
1129
+ this.canAssignUserToTask$.next(allowed);
1130
+ });
1131
+ }
1132
+ else {
1133
+ this.logger.debug('Reset is user allowed to assign a user to Task as task is null');
1134
+ this.canAssignUserToTask$.next(false);
1135
+ }
1136
+ }));
1224
1137
  }
1225
- setFormDefinitionAndOpenModal(formDefinition) {
1226
- this.taskProcessLinkType$.next('form');
1138
+ setFormDefinition(formDefinition) {
1139
+ this._taskProcessLinkType$.next('form');
1227
1140
  this.formDefinition$.next(formDefinition);
1228
- this.openModal();
1229
- }
1230
- setDocumentDefinitionNameInService(task) {
1231
- this.documentService
1232
- .getProcessDocumentDefinitionFromProcessInstanceId(task.processInstanceId)
1233
- .subscribe(processDocumentDefinition => {
1234
- const documentDefinitionName = processDocumentDefinition.id.documentDefinitionId.name;
1235
- this.modalService.setDocumentDefinitionName(documentDefinitionName);
1236
- this.stateService.setDocumentDefinitionName(documentDefinitionName);
1237
- });
1238
1141
  }
1239
1142
  setFormViewModelComponent() {
1240
1143
  this.formViewModelDynamicContainer.clear();
@@ -1245,13 +1148,14 @@ class TaskDetailModalComponent {
1245
1148
  formViewModelComponent.instance.formName = this.formName$.getValue();
1246
1149
  formViewModelComponent.instance.taskInstanceId = this.taskInstanceId$.getValue();
1247
1150
  formViewModelComponent.instance.isStartForm = false;
1248
- formViewModelComponent.instance.formSubmit.pipe(take(1)).subscribe(() => {
1249
- this.completeTask();
1250
- this.closeModal();
1151
+ formViewModelComponent.instance.formSubmit
1152
+ .pipe(take$1(1), switchMap(() => this.task$))
1153
+ .subscribe((task) => {
1154
+ this.completeTask(task);
1251
1155
  });
1252
1156
  if (this.intermediateSaveEnabled) {
1253
1157
  this._subscriptions.add(formViewModelComponent.instance.submission$.subscribe(submission => {
1254
- this.submission$.next(submission);
1158
+ this.taskIntermediateSaveService.setSubmission(submission);
1255
1159
  }));
1256
1160
  this._subscriptions.add(this.submission$.pipe(distinctUntilChanged()).subscribe((submission) => {
1257
1161
  if (submission?.data && Object.keys(submission.data).length === 0) {
@@ -1261,49 +1165,142 @@ class TaskDetailModalComponent {
1261
1165
  this.getCurrentProgress(formViewModelComponent);
1262
1166
  }
1263
1167
  }
1264
- getCurrentProgress(formViewModelComponentRef) {
1265
- this.taskInstanceId$
1266
- .pipe(take(1), switchMap$1((taskInstanceId) => this.taskIntermediateSaveService.getIntermediateSubmission(taskInstanceId)))
1267
- .subscribe({
1268
- next: (intermediateSubmission) => {
1269
- this.submission$.next({ data: intermediateSubmission.submission });
1270
- this.currentIntermediateSave = this.formatIntermediateSubmission(intermediateSubmission);
1271
- if (formViewModelComponentRef) {
1272
- formViewModelComponentRef.instance.submission = {
1273
- data: intermediateSubmission.submission,
1274
- };
1275
- }
1276
- },
1168
+ resetFormDefinition() {
1169
+ this.formDefinition$.next(null);
1170
+ this.loading$.next(true);
1171
+ }
1172
+ resetTaskProcessLinkType() {
1173
+ this._taskProcessLinkType$.next(null);
1174
+ this._processLinkId$.next(null);
1175
+ }
1176
+ setDocumentDefinitionNameInService(task) {
1177
+ this.documentService
1178
+ .getProcessDocumentDefinitionFromProcessInstanceId(task.processInstanceId)
1179
+ .subscribe(processDocumentDefinition => {
1180
+ const documentDefinitionName = processDocumentDefinition.id.documentDefinitionId.name;
1181
+ this.modalService.setDocumentDefinitionName(documentDefinitionName);
1182
+ this.stateService.setDocumentDefinitionName(documentDefinitionName);
1183
+ });
1184
+ }
1185
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskDetailContentComponent, deps: [{ token: i1$1.ConfigService }, { token: i2.DocumentService }, { token: i12.IconService }, { token: i4.NGXLogger }, { token: i9.ValtimoModalService }, { token: i3$1.PermissionService }, { token: i7.ProcessLinkService }, { token: i1$2.Router }, { token: i9.FormIoStateService }, { token: TaskIntermediateSaveService }, { token: TaskService }, { token: i10.ToastrService }, { token: i3.TranslateService }, { token: FORM_VIEW_MODEL_TOKEN, optional: true }, { token: i7.UrlResolverService }], target: i0.ɵɵFactoryTarget.Component }); }
1186
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TaskDetailContentComponent, isStandalone: true, selector: "valtimo-task-detail-content", inputs: { task: "task" }, outputs: { closeModalEvent: "closeModalEvent", formSubmit: "formSubmit", activeChange: "activeChange" }, viewQueries: [{ propertyName: "form", first: true, predicate: ["form"], descendants: true }, { propertyName: "formViewModelDynamicContainer", first: true, predicate: ["formViewModelComponent"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "formFlow", first: true, predicate: ["formFlow"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 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\n *ngIf=\"{\n loading: loading$ | async,\n page: page$ | async,\n task: task$ | async,\n taskId: taskInstanceId$ | async,\n formDefinition: formDefinition$ | async,\n formDefinitionId: formDefinitionId$ | async,\n formName: formName$ | async,\n formIoFormData: formIoFormData$ | async,\n submission: submission$ | async,\n processLinkIsForm: processLinkIsForm$ | async,\n processLinkIsFormViewModel: processLinkIsFormViewModel$ | async,\n formioOptions: formioOptions$ | async,\n processLinkIsFormFlow: processLinkIsFormFlow$ | async,\n formFlowInstanceId: formFlowInstanceId$ | async,\n errorMessage: errorMessage$ | async,\n canAssignUserToTask: canAssignUserToTask$ | async,\n } as obs\"\n>\n <valtimo-form-io\n #form\n *ngIf=\"obs.formDefinition && obs.processLinkIsForm\"\n [form]=\"obs.formDefinition\"\n [submission]=\"obs.submission\"\n (submit)=\"onSubmit($event)\"\n (change)=\"onChange($event)\"\n [options]=\"obs.formioOptions\"\n ></valtimo-form-io>\n\n <valtimo-form-flow\n #formFlow\n *ngIf=\"obs.processLinkIsFormFlow\"\n [formIoFormData]=\"formIoFormData$\"\n [formFlowInstanceId]=\"obs.formFlowInstanceId\"\n (formFlowComplete)=\"completeTask(obs.task)\"\n ></valtimo-form-flow>\n\n <div *ngIf=\"obs.loading\" class=\"text-black mb-0 p-3 text-center\">\n {{ 'formManagement.loading' | translate }}\n </div>\n\n <div\n *ngIf=\"\n obs.loading === false && !obs.formDefinition && !obs.formFlowInstanceId && !obs.errorMessage\n \"\n class=\"bg-warning text-black mb-0 p-3 text-center\"\n >\n {{\n (isAdmin$ | async)\n ? ('formManagement.noFormDefinitionFoundAdmin' | translate)\n : ('formManagement.noFormDefinitionFoundUser' | translate)\n }}\n </div>\n\n <div *ngIf=\"obs.errorMessage\" class=\"bg-danger text-black mb-0 p-3 text-center\">\n {{ obs.errorMessage }}\n </div>\n\n <div class=\"m-2\">\n <ng-template #formViewModelComponent></ng-template>\n </div>\n\n <div *ngIf=\"!obs.formDefinition && !obs.formFlowInstanceId\" class=\"mb-0 p-3 text-center\">\n <button\n class=\"btn btn-secondary btn-space\"\n type=\"button\"\n (click)=\"gotoProcessLinkScreen()\"\n id=\"process-link-button\"\n >\n {{ 'formManagement.gotoProcessLinksButton' | translate }}\n </button>\n </div>\n</ng-container>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormIoModule }, { kind: "component", type: i9.FormioComponent, selector: "valtimo-form-io", inputs: ["options", "submission", "form", "readOnly", "formRefresh$"], outputs: ["submit", "change", "event"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ProcessLinkModule }, { kind: "component", type: i7.FormFlowComponent, selector: "valtimo-form-flow", inputs: ["formIoFormData", "formFlowInstanceId"], outputs: ["formFlowComplete"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1187
+ }
1188
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskDetailContentComponent, decorators: [{
1189
+ type: Component,
1190
+ args: [{ selector: 'valtimo-task-detail-content', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, FormIoModule, TranslateModule, ProcessLinkModule], template: "<!--\n ~ Copyright 2015-2024 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\n *ngIf=\"{\n loading: loading$ | async,\n page: page$ | async,\n task: task$ | async,\n taskId: taskInstanceId$ | async,\n formDefinition: formDefinition$ | async,\n formDefinitionId: formDefinitionId$ | async,\n formName: formName$ | async,\n formIoFormData: formIoFormData$ | async,\n submission: submission$ | async,\n processLinkIsForm: processLinkIsForm$ | async,\n processLinkIsFormViewModel: processLinkIsFormViewModel$ | async,\n formioOptions: formioOptions$ | async,\n processLinkIsFormFlow: processLinkIsFormFlow$ | async,\n formFlowInstanceId: formFlowInstanceId$ | async,\n errorMessage: errorMessage$ | async,\n canAssignUserToTask: canAssignUserToTask$ | async,\n } as obs\"\n>\n <valtimo-form-io\n #form\n *ngIf=\"obs.formDefinition && obs.processLinkIsForm\"\n [form]=\"obs.formDefinition\"\n [submission]=\"obs.submission\"\n (submit)=\"onSubmit($event)\"\n (change)=\"onChange($event)\"\n [options]=\"obs.formioOptions\"\n ></valtimo-form-io>\n\n <valtimo-form-flow\n #formFlow\n *ngIf=\"obs.processLinkIsFormFlow\"\n [formIoFormData]=\"formIoFormData$\"\n [formFlowInstanceId]=\"obs.formFlowInstanceId\"\n (formFlowComplete)=\"completeTask(obs.task)\"\n ></valtimo-form-flow>\n\n <div *ngIf=\"obs.loading\" class=\"text-black mb-0 p-3 text-center\">\n {{ 'formManagement.loading' | translate }}\n </div>\n\n <div\n *ngIf=\"\n obs.loading === false && !obs.formDefinition && !obs.formFlowInstanceId && !obs.errorMessage\n \"\n class=\"bg-warning text-black mb-0 p-3 text-center\"\n >\n {{\n (isAdmin$ | async)\n ? ('formManagement.noFormDefinitionFoundAdmin' | translate)\n : ('formManagement.noFormDefinitionFoundUser' | translate)\n }}\n </div>\n\n <div *ngIf=\"obs.errorMessage\" class=\"bg-danger text-black mb-0 p-3 text-center\">\n {{ obs.errorMessage }}\n </div>\n\n <div class=\"m-2\">\n <ng-template #formViewModelComponent></ng-template>\n </div>\n\n <div *ngIf=\"!obs.formDefinition && !obs.formFlowInstanceId\" class=\"mb-0 p-3 text-center\">\n <button\n class=\"btn btn-secondary btn-space\"\n type=\"button\"\n (click)=\"gotoProcessLinkScreen()\"\n id=\"process-link-button\"\n >\n {{ 'formManagement.gotoProcessLinksButton' | translate }}\n </button>\n </div>\n</ng-container>\n" }]
1191
+ }], ctorParameters: () => [{ type: i1$1.ConfigService }, { type: i2.DocumentService }, { type: i12.IconService }, { type: i4.NGXLogger }, { type: i9.ValtimoModalService }, { type: i3$1.PermissionService }, { type: i7.ProcessLinkService }, { type: i1$2.Router }, { type: i9.FormIoStateService }, { type: TaskIntermediateSaveService }, { type: TaskService }, { type: i10.ToastrService }, { type: i3.TranslateService }, { type: undefined, decorators: [{
1192
+ type: Optional
1193
+ }, {
1194
+ type: Inject,
1195
+ args: [FORM_VIEW_MODEL_TOKEN]
1196
+ }] }, { type: i7.UrlResolverService }], propDecorators: { form: [{
1197
+ type: ViewChild,
1198
+ args: ['form']
1199
+ }], formViewModelDynamicContainer: [{
1200
+ type: ViewChild,
1201
+ args: ['formViewModelComponent', { static: true, read: ViewContainerRef }]
1202
+ }], formFlow: [{
1203
+ type: ViewChild,
1204
+ args: ['formFlow']
1205
+ }], task: [{
1206
+ type: Input
1207
+ }], closeModalEvent: [{
1208
+ type: Output
1209
+ }], formSubmit: [{
1210
+ type: Output
1211
+ }], activeChange: [{
1212
+ type: Output
1213
+ }] } });
1214
+
1215
+ /*
1216
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1217
+ *
1218
+ * Licensed under EUPL, Version 1.2 (the "License");
1219
+ * you may not use this file except in compliance with the License.
1220
+ * You may obtain a copy of the License at
1221
+ *
1222
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
1223
+ *
1224
+ * Unless required by applicable law or agreed to in writing, software
1225
+ * distributed under the License is distributed on an "AS IS" basis,
1226
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1227
+ * See the License for the specific language governing permissions and
1228
+ * limitations under the License.
1229
+ */
1230
+ class TaskDetailIntermediateSaveComponent {
1231
+ set task(value) {
1232
+ if (!value)
1233
+ return;
1234
+ this.taskService
1235
+ .getTaskProcessLink(value.id)
1236
+ .pipe(take$1(1))
1237
+ .subscribe(res => {
1238
+ if (res !== null && res.type === 'form-flow')
1239
+ this.formFlowInstanceId$.next(res.properties.formFlowInstanceId);
1277
1240
  });
1241
+ this.taskValue.set(value);
1242
+ this.page.set({
1243
+ title: value.name,
1244
+ subtitle: `${this.translateService.instant('taskDetail.taskCreated')} ${value.created}`,
1245
+ });
1246
+ this.getCurrentProgress(value);
1247
+ }
1248
+ constructor(configService, iconService, translateService, taskIntermediateSaveService, taskService, toastr) {
1249
+ this.configService = configService;
1250
+ this.iconService = iconService;
1251
+ this.translateService = translateService;
1252
+ this.taskIntermediateSaveService = taskIntermediateSaveService;
1253
+ this.taskService = taskService;
1254
+ this.toastr = toastr;
1255
+ this.currentIntermediateSaveEvent = new EventEmitter();
1256
+ this.showModalEvent = new EventEmitter();
1257
+ this.formFlowInstanceId$ = new BehaviorSubject(undefined);
1258
+ this.showConfirmationModal$ = new BehaviorSubject(false);
1259
+ this.taskValue = signal(null);
1260
+ this.page = signal(null);
1261
+ this.canAssignUserToTask = signal(false);
1262
+ this.submission$ = this.taskIntermediateSaveService.submission$;
1263
+ this.formIoFormData$ = this.taskIntermediateSaveService.formIoFormData$;
1264
+ this.intermediateSaveEnabled = false;
1265
+ this.currentIntermediateSave = null;
1266
+ this.intermediateSaveEnabled = !!this.configService.featureToggles?.enableIntermediateSave;
1267
+ this.iconService.registerAll([RecentlyViewed16]);
1278
1268
  }
1279
1269
  saveCurrentProgress() {
1280
- const intermediateSaveRequest = {
1281
- submission: this.submission$.getValue().data
1282
- ? this.submission$.getValue().data
1283
- : this.formIoFormData$.getValue(),
1284
- taskInstanceId: this.taskInstanceId$.getValue(),
1285
- };
1286
- this.taskIntermediateSaveService
1287
- .storeIntermediateSubmission(intermediateSaveRequest)
1288
- .pipe(take(1))
1270
+ combineLatest([this.submission$, this.formIoFormData$])
1271
+ .pipe(switchMap(([submission, formIoFormData]) => {
1272
+ const intermediateSaveRequest = {
1273
+ submission: submission?.data ? submission.data : formIoFormData,
1274
+ taskInstanceId: this.taskValue()?.id ?? '',
1275
+ };
1276
+ return this.taskIntermediateSaveService.storeIntermediateSubmission(intermediateSaveRequest);
1277
+ }), take$1(1))
1289
1278
  .subscribe({
1290
1279
  next: intermediateSubmission => {
1291
1280
  this.toastr.success(this.translateService.instant('formManagement.intermediateSave.success'));
1292
1281
  this.currentIntermediateSave = this.formatIntermediateSubmission(intermediateSubmission);
1282
+ this.currentIntermediateSaveEvent.emit(this.currentIntermediateSave);
1293
1283
  },
1294
1284
  error: () => {
1295
1285
  this.toastr.error(this.translateService.instant('formManagement.intermediateSave.error'));
1296
1286
  },
1297
1287
  });
1298
1288
  }
1289
+ revertSaveClick() {
1290
+ if (this.showModalEvent.observed) {
1291
+ this.showModalEvent.emit();
1292
+ return;
1293
+ }
1294
+ this.showConfirmationModal$.next(true);
1295
+ }
1299
1296
  clearCurrentProgress() {
1300
- this.taskInstanceId$
1301
- .pipe(take(1), switchMap$1((taskInstanceId) => this.taskIntermediateSaveService.clearIntermediateSubmission(taskInstanceId)))
1302
- .subscribe({
1303
- next: () => {
1304
- this.submission$.next({ data: {} });
1305
- this.currentIntermediateSave = null;
1306
- },
1297
+ this.taskIntermediateSaveService
1298
+ .clearIntermediateSubmission(this.taskValue()?.id ?? '')
1299
+ .pipe(take$1(1))
1300
+ .subscribe(() => {
1301
+ this.taskIntermediateSaveService.setSubmission({ data: {} });
1302
+ this.currentIntermediateSave = null;
1303
+ this.currentIntermediateSaveEvent.emit(this.currentIntermediateSave);
1307
1304
  });
1308
1305
  }
1309
1306
  formatIntermediateSubmission(intermediateSubmission) {
@@ -1313,43 +1310,142 @@ class TaskDetailModalComponent {
1313
1310
  }
1314
1311
  return intermediateSubmission;
1315
1312
  }
1316
- openModal() {
1317
- this.modal.open = true;
1313
+ getCurrentProgress(task) {
1314
+ this.taskIntermediateSaveService
1315
+ .getIntermediateSubmission(task.id ?? '')
1316
+ .pipe(take$1(1))
1317
+ .subscribe(intermediateSave => {
1318
+ this.currentIntermediateSave = this.formatIntermediateSubmission(intermediateSave);
1319
+ });
1320
+ }
1321
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskDetailIntermediateSaveComponent, deps: [{ token: i1$1.ConfigService }, { token: i12.IconService }, { token: i3.TranslateService }, { token: TaskIntermediateSaveService }, { token: TaskService }, { token: i10.ToastrService }], target: i0.ɵɵFactoryTarget.Component }); }
1322
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: TaskDetailIntermediateSaveComponent, isStandalone: true, selector: "valtimo-task-detail-intermediate-save", inputs: { task: "task" }, outputs: { currentIntermediateSaveEvent: "currentIntermediateSaveEvent", showModalEvent: "showModalEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 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@if (intermediateSaveEnabled && (formFlowInstanceId$ | async) === undefined) {\n <button\n cdsButton=\"ghost\"\n iconOnly=\"true\"\n cdsIcon=\"save\"\n [vTooltip]=\"'formManagement.intermediateSave.save' | translate\"\n (click)=\"saveCurrentProgress()\"\n ></button>\n\n <button\n cdsButton=\"ghost\"\n iconOnly=\"true\"\n cdsIcon=\"recently-viewed\"\n [disabled]=\"!currentIntermediateSave\"\n [vTooltip]=\"'formManagement.intermediateSave.clear' | translate\"\n (click)=\"revertSaveClick()\"\n ></button>\n}\n\n<valtimo-confirmation-modal\n [showModalSubject$]=\"showConfirmationModal$\"\n (confirmEvent)=\"clearCurrentProgress()\"\n (cancelEvent)=\"showConfirmationModal$.next(false)\"\n cancelButtonType=\"ghost\"\n confirmButtonTextTranslationKey=\"interface.confirm\"\n titleTranslationKey=\"formManagement.intermediateSave.clear\"\n contentTranslationKey=\"formManagement.intermediateSave.clearConfirm\"\n></valtimo-confirmation-modal>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i12.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: ConfirmationModalModule }, { kind: "component", type: i9.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "showOptionalButton", "optionalButtonText", "optionalButtonTextTranslationKey", "optionalButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm", "outputOnOptional", "spacerAfterCancelButton"], outputs: ["confirmEvent", "optionalEvent", "cancelEvent"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i12.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: ModalModule }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i9.TooltipDirective, selector: "[vTooltip]", inputs: ["vTooltip", "onBottom", "tooltipDisabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1323
+ }
1324
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskDetailIntermediateSaveComponent, decorators: [{
1325
+ type: Component,
1326
+ args: [{ selector: 'valtimo-task-detail-intermediate-save', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
1327
+ CommonModule,
1328
+ TranslateModule,
1329
+ ButtonModule,
1330
+ ConfirmationModalModule,
1331
+ IconModule,
1332
+ ModalModule,
1333
+ TooltipModule,
1334
+ ], template: "<!--\n ~ Copyright 2015-2024 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@if (intermediateSaveEnabled && (formFlowInstanceId$ | async) === undefined) {\n <button\n cdsButton=\"ghost\"\n iconOnly=\"true\"\n cdsIcon=\"save\"\n [vTooltip]=\"'formManagement.intermediateSave.save' | translate\"\n (click)=\"saveCurrentProgress()\"\n ></button>\n\n <button\n cdsButton=\"ghost\"\n iconOnly=\"true\"\n cdsIcon=\"recently-viewed\"\n [disabled]=\"!currentIntermediateSave\"\n [vTooltip]=\"'formManagement.intermediateSave.clear' | translate\"\n (click)=\"revertSaveClick()\"\n ></button>\n}\n\n<valtimo-confirmation-modal\n [showModalSubject$]=\"showConfirmationModal$\"\n (confirmEvent)=\"clearCurrentProgress()\"\n (cancelEvent)=\"showConfirmationModal$.next(false)\"\n cancelButtonType=\"ghost\"\n confirmButtonTextTranslationKey=\"interface.confirm\"\n titleTranslationKey=\"formManagement.intermediateSave.clear\"\n contentTranslationKey=\"formManagement.intermediateSave.clearConfirm\"\n></valtimo-confirmation-modal>\n" }]
1335
+ }], ctorParameters: () => [{ type: i1$1.ConfigService }, { type: i12.IconService }, { type: i3.TranslateService }, { type: TaskIntermediateSaveService }, { type: TaskService }, { type: i10.ToastrService }], propDecorators: { task: [{
1336
+ type: Input
1337
+ }], currentIntermediateSaveEvent: [{
1338
+ type: Output
1339
+ }], showModalEvent: [{
1340
+ type: Output
1341
+ }] } });
1342
+
1343
+ /*
1344
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1345
+ *
1346
+ * Licensed under EUPL, Version 1.2 (the "License");
1347
+ * you may not use this file except in compliance with the License.
1348
+ * You may obtain a copy of the License at
1349
+ *
1350
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
1351
+ *
1352
+ * Unless required by applicable law or agreed to in writing, software
1353
+ * distributed under the License is distributed on an "AS IS" basis,
1354
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1355
+ * See the License for the specific language governing permissions and
1356
+ * limitations under the License.
1357
+ */
1358
+ moment.locale(localStorage.getItem('langKey') || '');
1359
+ class TaskDetailModalComponent {
1360
+ set modalSize(value) {
1361
+ if (value)
1362
+ this.size$.next(formSizeToCarbonModalSizeMap[value]);
1363
+ }
1364
+ constructor(router, translateService, permissionService, logger, taskIntermediateSaveService) {
1365
+ this.router = router;
1366
+ this.translateService = translateService;
1367
+ this.permissionService = permissionService;
1368
+ this.logger = logger;
1369
+ this.taskIntermediateSaveService = taskIntermediateSaveService;
1370
+ this.formSubmit = new EventEmitter();
1371
+ this.assignmentOfTaskChanged = new EventEmitter();
1372
+ this.currentIntermediateSave$ = new BehaviorSubject(null);
1373
+ this.task$ = new BehaviorSubject(null);
1374
+ this.submission$ = new BehaviorSubject({});
1375
+ this.page$ = new BehaviorSubject(null);
1376
+ this.showConfirmationModal$ = new BehaviorSubject(false);
1377
+ this.size$ = new BehaviorSubject('md');
1378
+ this.canAssignUserToTask$ = new BehaviorSubject(false);
1379
+ this._subscriptions = new Subscription();
1380
+ }
1381
+ ngOnInit() {
1382
+ this._subscriptions.add(this.task$.subscribe(task => {
1383
+ if (task) {
1384
+ this.logger.debug('Checking if user allowed to assign a user to Task with id:', task.id);
1385
+ this.permissionService
1386
+ .requestPermission(CAN_ASSIGN_TASK_PERMISSION, {
1387
+ resource: TASK_DETAIL_PERMISSION_RESOURCE.task,
1388
+ identifier: task.id,
1389
+ })
1390
+ .subscribe((allowed) => {
1391
+ this.canAssignUserToTask$.next(allowed);
1392
+ });
1393
+ }
1394
+ else {
1395
+ this.logger.debug('Reset is user allowed to assign a user to Task as task is null');
1396
+ this.canAssignUserToTask$.next(false);
1397
+ }
1398
+ }));
1399
+ }
1400
+ clearCurrentProgress() {
1401
+ this._intermediateSaveComponent.clearCurrentProgress();
1402
+ }
1403
+ openTaskDetails(task) {
1404
+ this.task$.next(task);
1405
+ this.page$.next({
1406
+ title: task?.name,
1407
+ subtitle: `${this.translateService.instant('taskDetail.taskCreated')} ${task?.created}`,
1408
+ });
1409
+ this.openModal();
1410
+ }
1411
+ gotoProcessLinkScreen() {
1412
+ this.closeModal();
1413
+ this.router.navigate(['process-links']);
1414
+ }
1415
+ onCurrentIntermediateSaveEvent(value) {
1416
+ this.currentIntermediateSave$.next(value);
1417
+ }
1418
+ onFormSubmit() {
1419
+ this.formSubmit.emit();
1420
+ }
1421
+ onShowModalEvent() {
1422
+ this.showConfirmationModal$.next(true);
1318
1423
  }
1319
1424
  closeModal() {
1320
- this.modal.open = false;
1321
- this._subscriptions.unsubscribe();
1322
- if (this.formFlow) {
1323
- this.formFlow.saveData();
1324
- }
1425
+ this._modal.open = false;
1426
+ this.taskIntermediateSaveService.setSubmission({ data: {} });
1325
1427
  }
1326
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskDetailModalComponent, deps: [{ token: i1$2.ToastrService }, { token: i2$1.ProcessLinkService }, { token: i1$1.Router }, { token: TaskService }, { token: i5.UserProviderService }, { token: i6.ValtimoModalService }, { token: i6.FormIoStateService }, { token: i7.DocumentService }, { token: i8.TranslateService }, { token: FORM_VIEW_MODEL_TOKEN, optional: true }, { token: TaskIntermediateSaveService }, { token: i2.ConfigService }, { token: i11.IconService }, { token: i12.PermissionService }, { token: i13.NGXLogger }], target: i0.ɵɵFactoryTarget.Component }); }
1327
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TaskDetailModalComponent, selector: "valtimo-task-detail-modal", outputs: { formSubmit: "formSubmit", assignmentOfTaskChanged: "assignmentOfTaskChanged" }, viewQueries: [{ propertyName: "form", first: true, predicate: ["form"], descendants: true }, { propertyName: "formFlow", first: true, predicate: ["formFlow"], descendants: true }, { propertyName: "modal", first: true, predicate: ["taskDetailModal"], descendants: true }, { propertyName: "formViewModelDynamicContainer", first: true, predicate: ["formViewModelComponent"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 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<cds-modal #taskDetailModal id=\"taskDetailModal\">\n <cds-modal-header (closeSelect)=\"closeModal()\">\n <div class=\"cds-modal-header\">\n <div class=\"title-container\">\n <p class=\"cds--modal-header__heading cds--type-beta\">{{ (page$ | async)?.title }}</p>\n <p class=\"cds--modal-header__label cds--type-delta\">{{ (page$ | async)?.subtitle }}</p>\n <p class=\"cds--modal-header__label cds--type-delta\" *ngIf=\"currentIntermediateSave\">\n {{ 'formManagement.intermediateSave.lastSavedBy' | translate }}:\n {{\n currentIntermediateSave?.editedBy\n ? currentIntermediateSave?.editedBy\n : currentIntermediateSave.createdBy\n }}\n {{ 'formManagement.intermediateSave.on' | translate }}:\n {{\n currentIntermediateSave?.editedOn\n ? currentIntermediateSave?.editedOn\n : currentIntermediateSave.createdOn\n }}\n </p>\n <ng-container *ngTemplateOutlet=\"assignUserToTask\"></ng-container>\n </div>\n <div\n *ngIf=\"intermediateSaveEnabled && (formFlowInstanceId$ | async) === undefined\"\n class=\"save-buttons-margin\"\n >\n <cds-tooltip\n [caret]=\"true\"\n enterDelayMs=\"0\"\n leaveDelayMs=\"0\"\n [description]=\"'formManagement.intermediateSave.save' | translate\"\n >\n <button\n cdsButton=\"ghost\"\n iconOnly=\"true\"\n cdsIcon=\"save\"\n (click)=\"saveCurrentProgress()\"\n ></button>\n </cds-tooltip>\n <cds-tooltip\n [caret]=\"true\"\n enterDelayMs=\"0\"\n leaveDelayMs=\"0\"\n [description]=\"'formManagement.intermediateSave.clear' | translate\"\n >\n <button\n cdsButton=\"ghost\"\n iconOnly=\"true\"\n cdsIcon=\"recently-viewed\"\n [disabled]=\"!currentIntermediateSave\"\n (click)=\"showConfirmationModal$.next(true)\"\n ></button>\n </cds-tooltip>\n </div>\n </div>\n </cds-modal-header>\n <div\n body\n class=\"cds--modal-content pb-1\"\n *ngIf=\"{\n loading: loading$ | async,\n page: page$ | async,\n task: task$ | async,\n taskId: taskInstanceId$ | async,\n formDefinition: formDefinition$ | async,\n formDefinitionId: formDefinitionId$ | async,\n formName: formName$ | async,\n formIoFormData: formIoFormData$ | async,\n submission: submission$ | async,\n processLinkIsForm: processLinkIsForm$ | async,\n processLinkIsFormViewModel: processLinkIsFormViewModel$ | async,\n formioOptions: formioOptions$ | async,\n processLinkIsFormFlow: processLinkIsFormFlow$ | async,\n formFlowInstanceId: formFlowInstanceId$ | async,\n errorMessage: errorMessage$ | async\n } as obs\"\n >\n <div *ngIf=\"obs.formDefinition && obs.processLinkIsForm\">\n <valtimo-form-io\n #form\n [form]=\"obs.formDefinition\"\n [submission]=\"obs.submission\"\n (submit)=\"onSubmit($event)\"\n (change)=\"onChange($event)\"\n [options]=\"obs.formioOptions\"\n ></valtimo-form-io>\n </div>\n <div *ngIf=\"obs.processLinkIsFormFlow\">\n <valtimo-form-flow\n #formFlow\n [formIoFormData]=\"formIoFormData$\"\n [formFlowInstanceId]=\"obs.formFlowInstanceId\"\n (formFlowComplete)=\"completeTask()\"\n ></valtimo-form-flow>\n </div>\n <div *ngIf=\"obs.loading\">\n <div class=\"text-black mb-0 p-3 text-center\">\n {{ 'formManagement.loading' | translate }}\n </div>\n </div>\n <div\n *ngIf=\"\n obs.loading === false && !obs.formDefinition && !obs.formFlowInstanceId && !obs.errorMessage\n \"\n >\n <div class=\"bg-warning text-black mb-0 p-3 text-center\">\n {{\n (isAdmin$ | async)\n ? ('formManagement.noFormDefinitionFoundAdmin' | translate)\n : ('formManagement.noFormDefinitionFoundUser' | translate)\n }}\n </div>\n </div>\n <div *ngIf=\"obs.errorMessage\">\n <div class=\"bg-danger text-black mb-0 p-3 text-center\">\n {{ obs.errorMessage }}\n </div>\n </div>\n </div>\n <div\n footer\n *ngIf=\"{\n formDefinition: formDefinition$ | async,\n formFlowInstanceId: formFlowInstanceId$ | async\n } as obs\"\n >\n <div class=\"mb-0 p-3 text-center\" *ngIf=\"!obs.formDefinition && !obs.formFlowInstanceId\">\n <button\n class=\"btn btn-secondary btn-space\"\n type=\"button\"\n (click)=\"gotoProcessLinkScreen()\"\n id=\"process-link-button\"\n >\n {{ 'formManagement.gotoProcessLinksButton' | translate }}\n </button>\n </div>\n </div>\n <div body class=\"m-2\">\n <ng-template #formViewModelComponent></ng-template>\n </div>\n</cds-modal>\n\n<valtimo-confirmation-modal\n [showModalSubject$]=\"showConfirmationModal$\"\n (confirmEvent)=\"clearCurrentProgress()\"\n (cancelEvent)=\"showConfirmationModal$.next(false)\"\n cancelButtonType=\"ghost\"\n confirmButtonTextTranslationKey=\"interface.confirm\"\n titleTranslationKey=\"formManagement.intermediateSave.clear\"\n contentTranslationKey=\"formManagement.intermediateSave.clearConfirm\"\n></valtimo-confirmation-modal>\n\n<ng-template #assignUserToTask>\n <ng-container *ngIf=\"{\n task: task$ | async,\n canAssignUserToTask: canAssignUserToTask$ | async\n } as obs\">\n <valtimo-assign-user-to-task\n *ngIf=\"obs.task && obs.canAssignUserToTask && assignmentOfTaskChanged\"\n [taskId]=\"obs.task.id\"\n [assigneeId]=\"obs.task.assignee\"\n (assignmentOfTaskChanged)=\"assignmentOfTaskChanged.emit()\"\n ></valtimo-assign-user-to-task>\n </ng-container>\n</ng-template>\n", styles: ["#taskDetailModal .formio-component-submit{text-align:right}.cds-modal-header{width:100%;display:flex;justify-content:space-between}.title-container{width:50%}.save-buttons-margin{margin-top:-15px}\n/*!\n * Copyright 2015-2024 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"], dependencies: [{ kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i6.FormioComponent, selector: "valtimo-form-io", inputs: ["options", "submission", "form", "readOnly", "formRefresh$"], outputs: ["submit", "change"] }, { kind: "component", type: i11.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i11.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i2$1.FormFlowComponent, selector: "valtimo-form-flow", inputs: ["formIoFormData", "formFlowInstanceId"], outputs: ["formFlowComplete"] }, { kind: "directive", type: i11.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i11.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i11.Tooltip, selector: "cds-tooltip, ibm-tooltip", inputs: ["id", "enterDelayMs", "leaveDelayMs", "disabled", "description", "templateContext"] }, { kind: "component", type: i6.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "showOptionalButton", "optionalButtonText", "optionalButtonTextTranslationKey", "optionalButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm", "outputOnOptional", "spacerAfterCancelButton"], outputs: ["confirmEvent", "optionalEvent", "cancelEvent"] }, { kind: "component", type: AssignUserToTaskComponent, selector: "valtimo-assign-user-to-task", inputs: ["taskId", "assigneeId"], outputs: ["assignmentOfTaskChanged"] }, { kind: "pipe", type: i10.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
1428
+ openModal() {
1429
+ this._modal.open = true;
1430
+ }
1431
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskDetailModalComponent, deps: [{ token: i1$2.Router }, { token: i3.TranslateService }, { token: i3$1.PermissionService }, { token: i4.NGXLogger }, { token: TaskIntermediateSaveService }], target: i0.ɵɵFactoryTarget.Component }); }
1432
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TaskDetailModalComponent, selector: "valtimo-task-detail-modal", inputs: { modalSize: "modalSize" }, outputs: { formSubmit: "formSubmit", assignmentOfTaskChanged: "assignmentOfTaskChanged" }, viewQueries: [{ propertyName: "_modal", first: true, predicate: ["taskDetailModal"], descendants: true }, { propertyName: "_intermediateSaveComponent", first: true, predicate: TaskDetailIntermediateSaveComponent, descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 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<cds-modal #taskDetailModal id=\"taskDetailModal\" [size]=\"size$ | async\">\n <cds-modal-header (closeSelect)=\"closeModal()\">\n <div class=\"title-container\">\n <p class=\"cds--modal-header__heading cds--type-beta\">{{ (page$ | async)?.title }}</p>\n\n <p class=\"cds--modal-header__label cds--type-delta\">{{ (page$ | async)?.subtitle }}</p>\n\n <p\n class=\"cds--modal-header__label cds--type-delta\"\n *ngIf=\"currentIntermediateSave$ | async as currentIntermediateSave\"\n >\n {{ 'formManagement.intermediateSave.lastSavedBy' | translate }}:\n\n {{\n currentIntermediateSave?.editedBy\n ? currentIntermediateSave?.editedBy\n : currentIntermediateSave.createdBy\n }}\n\n {{ 'formManagement.intermediateSave.on' | translate }}:\n\n {{\n currentIntermediateSave?.editedOn\n ? currentIntermediateSave?.editedOn\n : currentIntermediateSave.createdOn\n }}\n </p>\n\n <ng-container *ngTemplateOutlet=\"assignUserToTask\"></ng-container>\n </div>\n\n <valtimo-task-detail-intermediate-save\n class=\"save-buttons-margin\"\n [task]=\"task$ | async\"\n (currentIntermediateSaveEvent)=\"onCurrentIntermediateSaveEvent($event)\"\n (showModalEvent)=\"onShowModalEvent()\"\n ></valtimo-task-detail-intermediate-save>\n </cds-modal-header>\n\n <div body class=\"cds--modal-content pb-1\">\n <valtimo-task-detail-content\n [task]=\"task$ | async\"\n (formSubmit)=\"onFormSubmit()\"\n (closeModalEvent)=\"closeModal()\"\n ></valtimo-task-detail-content>\n </div>\n</cds-modal>\n\n<valtimo-confirmation-modal\n [showModalSubject$]=\"showConfirmationModal$\"\n (confirmEvent)=\"clearCurrentProgress()\"\n (cancelEvent)=\"showConfirmationModal$.next(false)\"\n cancelButtonType=\"ghost\"\n confirmButtonTextTranslationKey=\"interface.confirm\"\n titleTranslationKey=\"formManagement.intermediateSave.clear\"\n contentTranslationKey=\"formManagement.intermediateSave.clearConfirm\"\n></valtimo-confirmation-modal>\n\n<ng-template #assignUserToTask>\n <ng-container\n *ngIf=\"{\n task: task$ | async,\n canAssignUserToTask: canAssignUserToTask$ | async,\n } as obs\"\n >\n <valtimo-assign-user-to-task\n *ngIf=\"obs.task && obs.canAssignUserToTask && assignmentOfTaskChanged\"\n [taskId]=\"obs.task.id\"\n [assigneeId]=\"obs.task.assignee\"\n (assignmentOfTaskChanged)=\"assignmentOfTaskChanged.emit()\"\n ></valtimo-assign-user-to-task>\n </ng-container>\n</ng-template>\n", styles: ["#taskDetailModal .formio-component-submit{text-align:right}cds-modal-header .cds--modal-header{display:flex;justify-content:space-between}.save-buttons-margin{margin-top:-15px}\n/*!\n * Copyright 2015-2024 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"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i12.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i12.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i9.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "showOptionalButton", "optionalButtonText", "optionalButtonTextTranslationKey", "optionalButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm", "outputOnOptional", "spacerAfterCancelButton"], outputs: ["confirmEvent", "optionalEvent", "cancelEvent"] }, { kind: "component", type: AssignUserToTaskComponent, selector: "valtimo-assign-user-to-task", inputs: ["taskId", "assigneeId"], outputs: ["assignmentOfTaskChanged"] }, { kind: "component", type: TaskDetailContentComponent, selector: "valtimo-task-detail-content", inputs: ["task"], outputs: ["closeModalEvent", "formSubmit", "activeChange"] }, { kind: "component", type: TaskDetailIntermediateSaveComponent, selector: "valtimo-task-detail-intermediate-save", inputs: ["task"], outputs: ["currentIntermediateSaveEvent", "showModalEvent"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
1328
1433
  }
1329
1434
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskDetailModalComponent, decorators: [{
1330
1435
  type: Component,
1331
- args: [{ selector: 'valtimo-task-detail-modal', encapsulation: ViewEncapsulation.None, template: "<!--\n ~ Copyright 2015-2024 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<cds-modal #taskDetailModal id=\"taskDetailModal\">\n <cds-modal-header (closeSelect)=\"closeModal()\">\n <div class=\"cds-modal-header\">\n <div class=\"title-container\">\n <p class=\"cds--modal-header__heading cds--type-beta\">{{ (page$ | async)?.title }}</p>\n <p class=\"cds--modal-header__label cds--type-delta\">{{ (page$ | async)?.subtitle }}</p>\n <p class=\"cds--modal-header__label cds--type-delta\" *ngIf=\"currentIntermediateSave\">\n {{ 'formManagement.intermediateSave.lastSavedBy' | translate }}:\n {{\n currentIntermediateSave?.editedBy\n ? currentIntermediateSave?.editedBy\n : currentIntermediateSave.createdBy\n }}\n {{ 'formManagement.intermediateSave.on' | translate }}:\n {{\n currentIntermediateSave?.editedOn\n ? currentIntermediateSave?.editedOn\n : currentIntermediateSave.createdOn\n }}\n </p>\n <ng-container *ngTemplateOutlet=\"assignUserToTask\"></ng-container>\n </div>\n <div\n *ngIf=\"intermediateSaveEnabled && (formFlowInstanceId$ | async) === undefined\"\n class=\"save-buttons-margin\"\n >\n <cds-tooltip\n [caret]=\"true\"\n enterDelayMs=\"0\"\n leaveDelayMs=\"0\"\n [description]=\"'formManagement.intermediateSave.save' | translate\"\n >\n <button\n cdsButton=\"ghost\"\n iconOnly=\"true\"\n cdsIcon=\"save\"\n (click)=\"saveCurrentProgress()\"\n ></button>\n </cds-tooltip>\n <cds-tooltip\n [caret]=\"true\"\n enterDelayMs=\"0\"\n leaveDelayMs=\"0\"\n [description]=\"'formManagement.intermediateSave.clear' | translate\"\n >\n <button\n cdsButton=\"ghost\"\n iconOnly=\"true\"\n cdsIcon=\"recently-viewed\"\n [disabled]=\"!currentIntermediateSave\"\n (click)=\"showConfirmationModal$.next(true)\"\n ></button>\n </cds-tooltip>\n </div>\n </div>\n </cds-modal-header>\n <div\n body\n class=\"cds--modal-content pb-1\"\n *ngIf=\"{\n loading: loading$ | async,\n page: page$ | async,\n task: task$ | async,\n taskId: taskInstanceId$ | async,\n formDefinition: formDefinition$ | async,\n formDefinitionId: formDefinitionId$ | async,\n formName: formName$ | async,\n formIoFormData: formIoFormData$ | async,\n submission: submission$ | async,\n processLinkIsForm: processLinkIsForm$ | async,\n processLinkIsFormViewModel: processLinkIsFormViewModel$ | async,\n formioOptions: formioOptions$ | async,\n processLinkIsFormFlow: processLinkIsFormFlow$ | async,\n formFlowInstanceId: formFlowInstanceId$ | async,\n errorMessage: errorMessage$ | async\n } as obs\"\n >\n <div *ngIf=\"obs.formDefinition && obs.processLinkIsForm\">\n <valtimo-form-io\n #form\n [form]=\"obs.formDefinition\"\n [submission]=\"obs.submission\"\n (submit)=\"onSubmit($event)\"\n (change)=\"onChange($event)\"\n [options]=\"obs.formioOptions\"\n ></valtimo-form-io>\n </div>\n <div *ngIf=\"obs.processLinkIsFormFlow\">\n <valtimo-form-flow\n #formFlow\n [formIoFormData]=\"formIoFormData$\"\n [formFlowInstanceId]=\"obs.formFlowInstanceId\"\n (formFlowComplete)=\"completeTask()\"\n ></valtimo-form-flow>\n </div>\n <div *ngIf=\"obs.loading\">\n <div class=\"text-black mb-0 p-3 text-center\">\n {{ 'formManagement.loading' | translate }}\n </div>\n </div>\n <div\n *ngIf=\"\n obs.loading === false && !obs.formDefinition && !obs.formFlowInstanceId && !obs.errorMessage\n \"\n >\n <div class=\"bg-warning text-black mb-0 p-3 text-center\">\n {{\n (isAdmin$ | async)\n ? ('formManagement.noFormDefinitionFoundAdmin' | translate)\n : ('formManagement.noFormDefinitionFoundUser' | translate)\n }}\n </div>\n </div>\n <div *ngIf=\"obs.errorMessage\">\n <div class=\"bg-danger text-black mb-0 p-3 text-center\">\n {{ obs.errorMessage }}\n </div>\n </div>\n </div>\n <div\n footer\n *ngIf=\"{\n formDefinition: formDefinition$ | async,\n formFlowInstanceId: formFlowInstanceId$ | async\n } as obs\"\n >\n <div class=\"mb-0 p-3 text-center\" *ngIf=\"!obs.formDefinition && !obs.formFlowInstanceId\">\n <button\n class=\"btn btn-secondary btn-space\"\n type=\"button\"\n (click)=\"gotoProcessLinkScreen()\"\n id=\"process-link-button\"\n >\n {{ 'formManagement.gotoProcessLinksButton' | translate }}\n </button>\n </div>\n </div>\n <div body class=\"m-2\">\n <ng-template #formViewModelComponent></ng-template>\n </div>\n</cds-modal>\n\n<valtimo-confirmation-modal\n [showModalSubject$]=\"showConfirmationModal$\"\n (confirmEvent)=\"clearCurrentProgress()\"\n (cancelEvent)=\"showConfirmationModal$.next(false)\"\n cancelButtonType=\"ghost\"\n confirmButtonTextTranslationKey=\"interface.confirm\"\n titleTranslationKey=\"formManagement.intermediateSave.clear\"\n contentTranslationKey=\"formManagement.intermediateSave.clearConfirm\"\n></valtimo-confirmation-modal>\n\n<ng-template #assignUserToTask>\n <ng-container *ngIf=\"{\n task: task$ | async,\n canAssignUserToTask: canAssignUserToTask$ | async\n } as obs\">\n <valtimo-assign-user-to-task\n *ngIf=\"obs.task && obs.canAssignUserToTask && assignmentOfTaskChanged\"\n [taskId]=\"obs.task.id\"\n [assigneeId]=\"obs.task.assignee\"\n (assignmentOfTaskChanged)=\"assignmentOfTaskChanged.emit()\"\n ></valtimo-assign-user-to-task>\n </ng-container>\n</ng-template>\n", styles: ["#taskDetailModal .formio-component-submit{text-align:right}.cds-modal-header{width:100%;display:flex;justify-content:space-between}.title-container{width:50%}.save-buttons-margin{margin-top:-15px}\n/*!\n * Copyright 2015-2024 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"] }]
1332
- }], ctorParameters: () => [{ type: i1$2.ToastrService }, { type: i2$1.ProcessLinkService }, { type: i1$1.Router }, { type: TaskService }, { type: i5.UserProviderService }, { type: i6.ValtimoModalService }, { type: i6.FormIoStateService }, { type: i7.DocumentService }, { type: i8.TranslateService }, { type: undefined, decorators: [{
1333
- type: Optional
1334
- }, {
1335
- type: Inject,
1336
- args: [FORM_VIEW_MODEL_TOKEN]
1337
- }] }, { type: TaskIntermediateSaveService }, { type: i2.ConfigService }, { type: i11.IconService }, { type: i12.PermissionService }, { type: i13.NGXLogger }], propDecorators: { form: [{
1338
- type: ViewChild,
1339
- args: ['form']
1340
- }], formFlow: [{
1341
- type: ViewChild,
1342
- args: ['formFlow']
1343
- }], modal: [{
1436
+ args: [{ selector: 'valtimo-task-detail-modal', encapsulation: ViewEncapsulation.None, template: "<!--\n ~ Copyright 2015-2024 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<cds-modal #taskDetailModal id=\"taskDetailModal\" [size]=\"size$ | async\">\n <cds-modal-header (closeSelect)=\"closeModal()\">\n <div class=\"title-container\">\n <p class=\"cds--modal-header__heading cds--type-beta\">{{ (page$ | async)?.title }}</p>\n\n <p class=\"cds--modal-header__label cds--type-delta\">{{ (page$ | async)?.subtitle }}</p>\n\n <p\n class=\"cds--modal-header__label cds--type-delta\"\n *ngIf=\"currentIntermediateSave$ | async as currentIntermediateSave\"\n >\n {{ 'formManagement.intermediateSave.lastSavedBy' | translate }}:\n\n {{\n currentIntermediateSave?.editedBy\n ? currentIntermediateSave?.editedBy\n : currentIntermediateSave.createdBy\n }}\n\n {{ 'formManagement.intermediateSave.on' | translate }}:\n\n {{\n currentIntermediateSave?.editedOn\n ? currentIntermediateSave?.editedOn\n : currentIntermediateSave.createdOn\n }}\n </p>\n\n <ng-container *ngTemplateOutlet=\"assignUserToTask\"></ng-container>\n </div>\n\n <valtimo-task-detail-intermediate-save\n class=\"save-buttons-margin\"\n [task]=\"task$ | async\"\n (currentIntermediateSaveEvent)=\"onCurrentIntermediateSaveEvent($event)\"\n (showModalEvent)=\"onShowModalEvent()\"\n ></valtimo-task-detail-intermediate-save>\n </cds-modal-header>\n\n <div body class=\"cds--modal-content pb-1\">\n <valtimo-task-detail-content\n [task]=\"task$ | async\"\n (formSubmit)=\"onFormSubmit()\"\n (closeModalEvent)=\"closeModal()\"\n ></valtimo-task-detail-content>\n </div>\n</cds-modal>\n\n<valtimo-confirmation-modal\n [showModalSubject$]=\"showConfirmationModal$\"\n (confirmEvent)=\"clearCurrentProgress()\"\n (cancelEvent)=\"showConfirmationModal$.next(false)\"\n cancelButtonType=\"ghost\"\n confirmButtonTextTranslationKey=\"interface.confirm\"\n titleTranslationKey=\"formManagement.intermediateSave.clear\"\n contentTranslationKey=\"formManagement.intermediateSave.clearConfirm\"\n></valtimo-confirmation-modal>\n\n<ng-template #assignUserToTask>\n <ng-container\n *ngIf=\"{\n task: task$ | async,\n canAssignUserToTask: canAssignUserToTask$ | async,\n } as obs\"\n >\n <valtimo-assign-user-to-task\n *ngIf=\"obs.task && obs.canAssignUserToTask && assignmentOfTaskChanged\"\n [taskId]=\"obs.task.id\"\n [assigneeId]=\"obs.task.assignee\"\n (assignmentOfTaskChanged)=\"assignmentOfTaskChanged.emit()\"\n ></valtimo-assign-user-to-task>\n </ng-container>\n</ng-template>\n", styles: ["#taskDetailModal .formio-component-submit{text-align:right}cds-modal-header .cds--modal-header{display:flex;justify-content:space-between}.save-buttons-margin{margin-top:-15px}\n/*!\n * Copyright 2015-2024 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"] }]
1437
+ }], ctorParameters: () => [{ type: i1$2.Router }, { type: i3.TranslateService }, { type: i3$1.PermissionService }, { type: i4.NGXLogger }, { type: TaskIntermediateSaveService }], propDecorators: { _modal: [{
1344
1438
  type: ViewChild,
1345
1439
  args: ['taskDetailModal']
1346
- }], formViewModelDynamicContainer: [{
1440
+ }], _intermediateSaveComponent: [{
1347
1441
  type: ViewChild,
1348
- args: ['formViewModelComponent', { static: true, read: ViewContainerRef }]
1442
+ args: [TaskDetailIntermediateSaveComponent]
1349
1443
  }], formSubmit: [{
1350
1444
  type: Output
1351
1445
  }], assignmentOfTaskChanged: [{
1352
1446
  type: Output
1447
+ }], modalSize: [{
1448
+ type: Input
1353
1449
  }] } });
1354
1450
 
1355
1451
  /*
@@ -1432,8 +1528,8 @@ class TaskListComponent {
1432
1528
  this.selectedTaskType$,
1433
1529
  this._overrideNoResultsMessage$,
1434
1530
  ]).pipe(map(([selectedTaskType, overrideNoResultsMessage]) => overrideNoResultsMessage || {
1435
- title: 'task-list.' + selectedTaskType + '.noResultsDescription',
1436
- description: 'task-list.' + selectedTaskType + '.noResultsTitle',
1531
+ title: 'task-list.' + selectedTaskType + '.noResultsTitle',
1532
+ description: 'task-list.' + selectedTaskType + '.noResultsDescription',
1437
1533
  isSearchResult: false,
1438
1534
  }));
1439
1535
  this.fields$ = this.taskListColumnService.fields$;
@@ -1456,7 +1552,7 @@ class TaskListComponent {
1456
1552
  this._reload$,
1457
1553
  this.taskListSearchService.otherFilters$,
1458
1554
  this.taskListSortService.overrideSortStateString$,
1459
- ]).pipe(filter$1(([loadingStateForCaseDefinition]) => loadingStateForCaseDefinition === false), map(([_, selectedTaskType, paginationForSelectedTaskType, sortStringForSelectedTaskType, caseDefinitionName, enableLoadingAnimation, reload, otherFilters, overrideSortStateString,]) => this.getTaskListParams(paginationForSelectedTaskType, overrideSortStateString || sortStringForSelectedTaskType, selectedTaskType, caseDefinitionName, enableLoadingAnimation, reload, otherFilters)), distinctUntilChanged((previous, current) => isEqual(previous.params, current.params)), tap(params => {
1555
+ ]).pipe(filter$1(([loadingStateForCaseDefinition]) => loadingStateForCaseDefinition === false), map(([_, selectedTaskType, paginationForSelectedTaskType, sortStringForSelectedTaskType, caseDefinitionName, enableLoadingAnimation, reload, otherFilters, overrideSortStateString,]) => this.getTaskListParams(paginationForSelectedTaskType, overrideSortStateString || sortStringForSelectedTaskType, selectedTaskType, caseDefinitionName, enableLoadingAnimation, reload, otherFilters)), distinctUntilChanged$1((previous, current) => isEqual(previous.params, current.params)), tap(params => {
1460
1556
  if (params.enableLoadingAnimation)
1461
1557
  this.loadingTasks$.next(true);
1462
1558
  this.taskListQueryParamService.setTaskListParams(params.params);
@@ -1697,7 +1793,7 @@ class TaskListComponent {
1697
1793
  if (decodedParams.params)
1698
1794
  this.taskListPaginationService.updateTaskPagination(this.taskListService.selectedTaskType, decodedParams.params);
1699
1795
  }
1700
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskListComponent, deps: [{ token: i2.ConfigService }, { token: i7.DocumentService }, { token: i12.PermissionService }, { token: i1$1.Router }, { token: TaskService }, { token: TaskListService }, { token: i8.TranslateService }, { token: TaskListColumnService }, { token: TaskListPaginationService }, { token: TaskListSortService }, { token: TaskListSearchService }, { token: TaskListQueryParamService }, { token: i6.PageTitleService }], target: i0.ɵɵFactoryTarget.Component }); }
1796
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskListComponent, deps: [{ token: i1$1.ConfigService }, { token: i2.DocumentService }, { token: i3$1.PermissionService }, { token: i1$2.Router }, { token: TaskService }, { token: TaskListService }, { token: i3.TranslateService }, { token: TaskListColumnService }, { token: TaskListPaginationService }, { token: TaskListSortService }, { token: TaskListSearchService }, { token: TaskListQueryParamService }, { token: i9.PageTitleService }], target: i0.ɵɵFactoryTarget.Component }); }
1701
1797
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: TaskListComponent, selector: "valtimo-task-list", host: { listeners: { "window:popstate": "onPopState($event)" } }, providers: [
1702
1798
  TaskListService,
1703
1799
  TaskListColumnService,
@@ -1705,7 +1801,7 @@ class TaskListComponent {
1705
1801
  TaskListSortService,
1706
1802
  TaskListSearchService,
1707
1803
  TaskListQueryParamService,
1708
- ], viewQueries: [{ propertyName: "_taskDetail", first: true, predicate: ["taskDetail"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 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 *ngIf=\"{\n loading: loadingTasks$ | async,\n selectedTaskType: selectedTaskType$ | async,\n tasks: tasks$ | async,\n fields: fields$ | async,\n visibleTabs: visibleTabs$ | async,\n pagination: paginationForCurrentTaskTypeForList$ | async,\n taskListColumnsForCase: taskListColumnsForCase$ | async,\n sortState: sortStateForCurrentTaskType$ | async,\n overrideSortState: overrideSortState$ | async,\n searchFields: searchFields$ | async,\n loadingSearchFields: loadingSearchFields$ | async,\n caseDefinitionName: caseDefinitionName$ | async,\n noResultsMessage: noResultsMessage$ | async\n } as obs\"\n class=\"main-content\"\n>\n <div class=\"container-fluid\">\n @if (obs.caseDefinitionName && obs.caseDefinitionName !== ALL_CASES_ID) {\n <ng-container\n *ngTemplateOutlet=\"\n searchFields;\n context: {\n obs: obs\n }\n \"\n ></ng-container>\n }\n\n <ng-container\n *ngTemplateOutlet=\"\n tasksList;\n context: {\n obs: obs\n }\n \"\n ></ng-container>\n\n <ng-container\n *ngTemplateOutlet=\"\n tasksListLoading;\n context: {\n obs: obs\n }\n \"\n ></ng-container>\n\n <valtimo-task-detail-modal\n #taskDetail\n (formSubmit)=\"reload()\"\n (assignmentOfTaskChanged)=\"reload()\"\n ></valtimo-task-detail-modal>\n </div>\n</div>\n\n<ng-template #configuredTabs let-selectedTaskType=\"selectedTaskType\" let-visibleTabs=\"visibleTabs\">\n <cds-tabs *ngIf=\"visibleTabs\" type=\"contained\" class=\"valtimo-carbon-list__tabs\">\n <cds-tab\n *ngFor=\"let tab of visibleTabs\"\n [attr.data-testid]=\"'task-list-tab-' + tab\"\n [heading]=\"'task-list.' + tab + '.title' | translate\"\n [active]=\"selectedTaskType === tab\"\n (selected)=\"tabChange(tab)\"\n ></cds-tab>\n </cds-tabs>\n</ng-template>\n\n<ng-template #caseLink let-data=\"data\">\n <ng-container *ngIf=\"cachedTasks$ | async as cachedTasks\">\n <div *ngIf=\"cachedTasks[data.index].caseLocked\">\n <a\n class=\"float-left cds--link--disabled\"\n cdsLink\n href=\"javascript:void(0)\"\n ngbTooltip=\"{{ 'task-list.caseLocked' | translate }}\"\n (click)=\"$event.stopPropagation()\"\n >\n {{ 'task-list.goToCase' | translate }}\n </a>\n </div>\n <div *ngIf=\"!cachedTasks[data.index].caseLocked\">\n <a\n class=\"float-left cds--link\"\n cdsLink\n href=\"javascript:void(0)\"\n (click)=\"openRelatedCase($event, data.index)\"\n >\n {{ 'task-list.goToCase' | translate }}\n </a>\n </div>\n </ng-container>\n</ng-template>\n\n<ng-template #tasksList let-obs=\"obs\">\n <valtimo-carbon-list\n *ngIf=\"!obs.loading\"\n [fields]=\"obs.fields\"\n [header]=\"false\"\n [items]=\"obs.tasks\"\n [lastColumnTemplate]=\"caseLink\"\n [pagination]=\"obs.pagination\"\n paginationIdentifier=\"taskList\"\n lockedTooltipTranslationKey=\"task-list.rowLocked\"\n [sortState]=\"obs.overrideSortState || obs.sortState\"\n (paginationClicked)=\"paginationClicked($event, obs.selectedTaskType)\"\n (paginationSet)=\"paginationSet($event)\"\n (rowClicked)=\"rowOpenTaskClick($event)\"\n (sortChanged)=\"sortChanged($event)\"\n >\n <div tabs>\n <ng-container *ngIf=\"obs.visibleTabs\">\n <ng-container\n *ngTemplateOutlet=\"\n configuredTabs;\n context: {selectedTaskType: obs.selectedTaskType, visibleTabs: obs.visibleTabs}\n \"\n ></ng-container>\n </ng-container>\n </div>\n\n <valtimo-no-results\n [description]=\"obs.noResultsMessage.description | translate\"\n [title]=\"obs.noResultsMessage.title | translate\"\n >\n </valtimo-no-results>\n </valtimo-carbon-list>\n</ng-template>\n\n<ng-template #tasksListLoading let-obs=\"obs\">\n <valtimo-carbon-list *ngIf=\"obs.loading\" [loading]=\"true\">\n <div tabs>\n <cds-tabs *ngIf=\"!obs.visibleTabs\" type=\"contained\" class=\"valtimo-carbon-list__tabs\">\n <cds-tab\n [heading]=\"'task-list.mine.title' | translate\"\n [active]=\"obs.selectedTaskType === 'mine'\"\n >\n </cds-tab>\n\n <cds-tab\n [heading]=\"'task-list.open.title' | translate\"\n [active]=\"obs.selectedTaskType === 'open'\"\n >\n </cds-tab>\n\n <cds-tab\n [heading]=\"'task-list.all.title' | translate\"\n [active]=\"obs.selectedTaskType === 'all'\"\n >\n </cds-tab>\n </cds-tabs>\n\n <cds-tabs *ngIf=\"obs.visibleTabs\" type=\"contained\" class=\"valtimo-carbon-list__tabs\">\n <cds-tab\n *ngFor=\"let tab of obs.visibleTabs\"\n [heading]=\"'task-list.' + tab + '.title' | translate\"\n [active]=\"obs.selectedTaskType === tab\"\n ></cds-tab>\n </cds-tabs>\n </div>\n </valtimo-carbon-list>\n</ng-template>\n\n<ng-template #searchFields let-obs=\"obs\">\n <div class=\"mb-3\">\n <valtimo-search-fields\n [searchFields]=\"obs.searchFields\"\n [inputDisabled]=\"obs.loadingSearchFields\"\n [documentDefinitionName]=\"obs.caseDefinitionName\"\n [setValuesSubject$]=\"setSearchFieldValuesSubject$\"\n [clearValuesSubject$]=\"clearSearchFieldValuesSubject$\"\n (doSearch)=\"search($event)\"\n >\n </valtimo-search-fields>\n </div>\n</ng-template>\n\n<ng-container renderInPageHeader [fullWidth]=\"true\">\n <ng-template>\n <cds-dropdown\n class=\"case-definition-selection\"\n *ngIf=\"{\n loadingCaseListItems: loadingCaseListItems$ | async,\n caseListItems: caseListItems$ | async\n } as obs\"\n [attr.data-testid]=\"'task-list-case-dropdown'\"\n [disabled]=\"obs.loadingCaseListItems || (obs.caseListItems || []).length === 1\"\n [skeleton]=\"obs.loadingCaseListItems\"\n (selected)=\"setCaseDefinition($event)\"\n >\n <cds-dropdown-list [items]=\"obs.caseListItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </ng-template>\n</ng-container>\n", styles: [".cds--link--disabled{cursor:not-allowed;pointer-events:auto!important;outline:0!important}.case-definition-selection{display:flex;width:250px}\n/*!\n * Copyright 2015-2024 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"], dependencies: [{ kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i6.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "actions", "actionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "component", type: i6.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "directive", type: i11$1.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i11.Link, selector: "[cdsLink], [ibmLink]", inputs: ["inline", "disabled"] }, { kind: "component", type: i11.Tabs, selector: "cds-tabs, ibm-tabs", inputs: ["position", "cacheActive", "followFocus", "isNavigation", "ariaLabel", "ariaLabelledby", "type", "theme", "skeleton"] }, { kind: "component", type: i11.Tab, selector: "cds-tab, ibm-tab", inputs: ["heading", "title", "context", "active", "disabled", "tabIndex", "id", "cacheActive", "tabContent", "templateContext"], outputs: ["selected"] }, { kind: "directive", type: i6.RenderInPageHeaderDirective, selector: "[renderInPageHeader]", inputs: ["fullWidth"] }, { kind: "component", type: i11.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "hideLabel", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i11.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "component", type: i6.SearchFieldsComponent, selector: "valtimo-search-fields", inputs: ["loading", "searchFields", "documentDefinitionName", "setValuesSubject$", "clearValuesSubject$", "defaultValues", "inputDisabled", "externalSearchField"], outputs: ["doSearch"] }, { kind: "component", type: TaskDetailModalComponent, selector: "valtimo-task-detail-modal", outputs: ["formSubmit", "assignmentOfTaskChanged"] }, { kind: "pipe", type: i10.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1804
+ ], viewQueries: [{ propertyName: "_taskDetail", first: true, predicate: ["taskDetail"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 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 *ngIf=\"{\n loading: loadingTasks$ | async,\n selectedTaskType: selectedTaskType$ | async,\n tasks: tasks$ | async,\n fields: fields$ | async,\n visibleTabs: visibleTabs$ | async,\n pagination: paginationForCurrentTaskTypeForList$ | async,\n taskListColumnsForCase: taskListColumnsForCase$ | async,\n sortState: sortStateForCurrentTaskType$ | async,\n overrideSortState: overrideSortState$ | async,\n searchFields: searchFields$ | async,\n loadingSearchFields: loadingSearchFields$ | async,\n caseDefinitionName: caseDefinitionName$ | async,\n noResultsMessage: noResultsMessage$ | async,\n } as obs\"\n class=\"main-content\"\n>\n <div class=\"container-fluid\">\n @if (obs.caseDefinitionName && obs.caseDefinitionName !== ALL_CASES_ID) {\n <ng-container\n *ngTemplateOutlet=\"\n searchFields;\n context: {\n obs: obs,\n }\n \"\n ></ng-container>\n }\n\n <ng-container\n *ngTemplateOutlet=\"\n tasksList;\n context: {\n obs: obs,\n }\n \"\n ></ng-container>\n\n <ng-container\n *ngTemplateOutlet=\"\n tasksListLoading;\n context: {\n obs: obs,\n }\n \"\n ></ng-container>\n\n <valtimo-task-detail-modal\n #taskDetail\n (formSubmit)=\"reload()\"\n (assignmentOfTaskChanged)=\"reload()\"\n ></valtimo-task-detail-modal>\n </div>\n</div>\n\n<ng-template #configuredTabs let-selectedTaskType=\"selectedTaskType\" let-visibleTabs=\"visibleTabs\">\n <cds-tabs *ngIf=\"visibleTabs\" type=\"contained\" class=\"valtimo-carbon-list__tabs\">\n <cds-tab\n *ngFor=\"let tab of visibleTabs\"\n [attr.data-testid]=\"'task-list-tab-' + tab\"\n [heading]=\"'task-list.' + tab + '.title' | translate\"\n [active]=\"selectedTaskType === tab\"\n (selected)=\"tabChange(tab)\"\n ></cds-tab>\n </cds-tabs>\n</ng-template>\n\n<ng-template #caseLink let-data=\"data\">\n <ng-container *ngIf=\"cachedTasks$ | async as cachedTasks\">\n <div *ngIf=\"cachedTasks[data.index].caseLocked\">\n <a\n class=\"float-left cds--link--disabled\"\n cdsLink\n href=\"javascript:void(0)\"\n ngbTooltip=\"{{ 'task-list.caseLocked' | translate }}\"\n (click)=\"$event.stopPropagation()\"\n >\n {{ 'task-list.goToCase' | translate }}\n </a>\n </div>\n <div *ngIf=\"!cachedTasks[data.index].caseLocked\">\n <a\n class=\"float-left cds--link\"\n cdsLink\n href=\"javascript:void(0)\"\n (click)=\"openRelatedCase($event, data.index)\"\n >\n {{ 'task-list.goToCase' | translate }}\n </a>\n </div>\n </ng-container>\n</ng-template>\n\n<ng-template #tasksList let-obs=\"obs\">\n <valtimo-carbon-list\n *ngIf=\"!obs.loading\"\n [fields]=\"obs.fields\"\n [header]=\"false\"\n [items]=\"obs.tasks\"\n [lastColumnTemplate]=\"caseLink\"\n [pagination]=\"obs.pagination\"\n paginationIdentifier=\"taskList\"\n lockedTooltipTranslationKey=\"task-list.rowLocked\"\n [sortState]=\"obs.overrideSortState || obs.sortState\"\n (paginationClicked)=\"paginationClicked($event, obs.selectedTaskType)\"\n (paginationSet)=\"paginationSet($event)\"\n (rowClicked)=\"rowOpenTaskClick($event)\"\n (sortChanged)=\"sortChanged($event)\"\n >\n <div tabs>\n <ng-container *ngIf=\"obs.visibleTabs\">\n <ng-container\n *ngTemplateOutlet=\"\n configuredTabs;\n context: {selectedTaskType: obs.selectedTaskType, visibleTabs: obs.visibleTabs}\n \"\n ></ng-container>\n </ng-container>\n </div>\n\n <valtimo-no-results\n [description]=\"obs.noResultsMessage.description | translate\"\n [title]=\"obs.noResultsMessage.title | translate\"\n >\n </valtimo-no-results>\n </valtimo-carbon-list>\n</ng-template>\n\n<ng-template #tasksListLoading let-obs=\"obs\">\n <valtimo-carbon-list *ngIf=\"obs.loading\" [loading]=\"true\">\n <div tabs>\n <cds-tabs *ngIf=\"!obs.visibleTabs\" type=\"contained\" class=\"valtimo-carbon-list__tabs\">\n <cds-tab\n [heading]=\"'task-list.mine.title' | translate\"\n [active]=\"obs.selectedTaskType === 'mine'\"\n >\n </cds-tab>\n\n <cds-tab\n [heading]=\"'task-list.open.title' | translate\"\n [active]=\"obs.selectedTaskType === 'open'\"\n >\n </cds-tab>\n\n <cds-tab\n [heading]=\"'task-list.all.title' | translate\"\n [active]=\"obs.selectedTaskType === 'all'\"\n >\n </cds-tab>\n </cds-tabs>\n\n <cds-tabs *ngIf=\"obs.visibleTabs\" type=\"contained\" class=\"valtimo-carbon-list__tabs\">\n <cds-tab\n *ngFor=\"let tab of obs.visibleTabs\"\n [heading]=\"'task-list.' + tab + '.title' | translate\"\n [active]=\"obs.selectedTaskType === tab\"\n ></cds-tab>\n </cds-tabs>\n </div>\n </valtimo-carbon-list>\n</ng-template>\n\n<ng-template #searchFields let-obs=\"obs\">\n <div class=\"mb-3\">\n <valtimo-search-fields\n [searchFields]=\"obs.searchFields\"\n [inputDisabled]=\"obs.loadingSearchFields\"\n [documentDefinitionName]=\"obs.caseDefinitionName\"\n [setValuesSubject$]=\"setSearchFieldValuesSubject$\"\n [clearValuesSubject$]=\"clearSearchFieldValuesSubject$\"\n (doSearch)=\"search($event)\"\n >\n </valtimo-search-fields>\n </div>\n</ng-template>\n\n<ng-container renderInPageHeader [fullWidth]=\"true\">\n <ng-template>\n <cds-dropdown\n class=\"case-definition-selection\"\n *ngIf=\"{\n loadingCaseListItems: loadingCaseListItems$ | async,\n caseListItems: caseListItems$ | async,\n } as obs\"\n [attr.data-testid]=\"'task-list-case-dropdown'\"\n [disabled]=\"obs.loadingCaseListItems || (obs.caseListItems || []).length === 1\"\n [skeleton]=\"obs.loadingCaseListItems\"\n (selected)=\"setCaseDefinition($event)\"\n >\n <cds-dropdown-list [items]=\"obs.caseListItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </ng-template>\n</ng-container>\n", styles: [".cds--link--disabled{cursor:not-allowed;pointer-events:auto!important;outline:0!important}.case-definition-selection{display:flex;width:250px}\n/*!\n * Copyright 2015-2024 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"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i9.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "actions", "actionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "component", type: i9.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "directive", type: i11.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i12.Link, selector: "[cdsLink], [ibmLink]", inputs: ["inline", "disabled"] }, { kind: "component", type: i12.Tabs, selector: "cds-tabs, ibm-tabs", inputs: ["position", "cacheActive", "followFocus", "isNavigation", "ariaLabel", "ariaLabelledby", "type", "theme", "skeleton"] }, { kind: "component", type: i12.Tab, selector: "cds-tab, ibm-tab", inputs: ["heading", "title", "context", "active", "disabled", "tabIndex", "id", "cacheActive", "tabContent", "templateContext"], outputs: ["selected"] }, { kind: "directive", type: i9.RenderInPageHeaderDirective, selector: "[renderInPageHeader]", inputs: ["fullWidth"] }, { kind: "component", type: i12.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "hideLabel", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i12.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "component", type: i9.SearchFieldsComponent, selector: "valtimo-search-fields", inputs: ["loading", "searchFields", "documentDefinitionName", "setValuesSubject$", "clearValuesSubject$", "defaultValues", "inputDisabled", "externalSearchField"], outputs: ["doSearch"] }, { kind: "component", type: TaskDetailModalComponent, selector: "valtimo-task-detail-modal", inputs: ["modalSize"], outputs: ["formSubmit", "assignmentOfTaskChanged"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1709
1805
  }
1710
1806
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskListComponent, decorators: [{
1711
1807
  type: Component,
@@ -1716,8 +1812,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1716
1812
  TaskListSortService,
1717
1813
  TaskListSearchService,
1718
1814
  TaskListQueryParamService,
1719
- ], template: "<!--\n ~ Copyright 2015-2024 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 *ngIf=\"{\n loading: loadingTasks$ | async,\n selectedTaskType: selectedTaskType$ | async,\n tasks: tasks$ | async,\n fields: fields$ | async,\n visibleTabs: visibleTabs$ | async,\n pagination: paginationForCurrentTaskTypeForList$ | async,\n taskListColumnsForCase: taskListColumnsForCase$ | async,\n sortState: sortStateForCurrentTaskType$ | async,\n overrideSortState: overrideSortState$ | async,\n searchFields: searchFields$ | async,\n loadingSearchFields: loadingSearchFields$ | async,\n caseDefinitionName: caseDefinitionName$ | async,\n noResultsMessage: noResultsMessage$ | async\n } as obs\"\n class=\"main-content\"\n>\n <div class=\"container-fluid\">\n @if (obs.caseDefinitionName && obs.caseDefinitionName !== ALL_CASES_ID) {\n <ng-container\n *ngTemplateOutlet=\"\n searchFields;\n context: {\n obs: obs\n }\n \"\n ></ng-container>\n }\n\n <ng-container\n *ngTemplateOutlet=\"\n tasksList;\n context: {\n obs: obs\n }\n \"\n ></ng-container>\n\n <ng-container\n *ngTemplateOutlet=\"\n tasksListLoading;\n context: {\n obs: obs\n }\n \"\n ></ng-container>\n\n <valtimo-task-detail-modal\n #taskDetail\n (formSubmit)=\"reload()\"\n (assignmentOfTaskChanged)=\"reload()\"\n ></valtimo-task-detail-modal>\n </div>\n</div>\n\n<ng-template #configuredTabs let-selectedTaskType=\"selectedTaskType\" let-visibleTabs=\"visibleTabs\">\n <cds-tabs *ngIf=\"visibleTabs\" type=\"contained\" class=\"valtimo-carbon-list__tabs\">\n <cds-tab\n *ngFor=\"let tab of visibleTabs\"\n [attr.data-testid]=\"'task-list-tab-' + tab\"\n [heading]=\"'task-list.' + tab + '.title' | translate\"\n [active]=\"selectedTaskType === tab\"\n (selected)=\"tabChange(tab)\"\n ></cds-tab>\n </cds-tabs>\n</ng-template>\n\n<ng-template #caseLink let-data=\"data\">\n <ng-container *ngIf=\"cachedTasks$ | async as cachedTasks\">\n <div *ngIf=\"cachedTasks[data.index].caseLocked\">\n <a\n class=\"float-left cds--link--disabled\"\n cdsLink\n href=\"javascript:void(0)\"\n ngbTooltip=\"{{ 'task-list.caseLocked' | translate }}\"\n (click)=\"$event.stopPropagation()\"\n >\n {{ 'task-list.goToCase' | translate }}\n </a>\n </div>\n <div *ngIf=\"!cachedTasks[data.index].caseLocked\">\n <a\n class=\"float-left cds--link\"\n cdsLink\n href=\"javascript:void(0)\"\n (click)=\"openRelatedCase($event, data.index)\"\n >\n {{ 'task-list.goToCase' | translate }}\n </a>\n </div>\n </ng-container>\n</ng-template>\n\n<ng-template #tasksList let-obs=\"obs\">\n <valtimo-carbon-list\n *ngIf=\"!obs.loading\"\n [fields]=\"obs.fields\"\n [header]=\"false\"\n [items]=\"obs.tasks\"\n [lastColumnTemplate]=\"caseLink\"\n [pagination]=\"obs.pagination\"\n paginationIdentifier=\"taskList\"\n lockedTooltipTranslationKey=\"task-list.rowLocked\"\n [sortState]=\"obs.overrideSortState || obs.sortState\"\n (paginationClicked)=\"paginationClicked($event, obs.selectedTaskType)\"\n (paginationSet)=\"paginationSet($event)\"\n (rowClicked)=\"rowOpenTaskClick($event)\"\n (sortChanged)=\"sortChanged($event)\"\n >\n <div tabs>\n <ng-container *ngIf=\"obs.visibleTabs\">\n <ng-container\n *ngTemplateOutlet=\"\n configuredTabs;\n context: {selectedTaskType: obs.selectedTaskType, visibleTabs: obs.visibleTabs}\n \"\n ></ng-container>\n </ng-container>\n </div>\n\n <valtimo-no-results\n [description]=\"obs.noResultsMessage.description | translate\"\n [title]=\"obs.noResultsMessage.title | translate\"\n >\n </valtimo-no-results>\n </valtimo-carbon-list>\n</ng-template>\n\n<ng-template #tasksListLoading let-obs=\"obs\">\n <valtimo-carbon-list *ngIf=\"obs.loading\" [loading]=\"true\">\n <div tabs>\n <cds-tabs *ngIf=\"!obs.visibleTabs\" type=\"contained\" class=\"valtimo-carbon-list__tabs\">\n <cds-tab\n [heading]=\"'task-list.mine.title' | translate\"\n [active]=\"obs.selectedTaskType === 'mine'\"\n >\n </cds-tab>\n\n <cds-tab\n [heading]=\"'task-list.open.title' | translate\"\n [active]=\"obs.selectedTaskType === 'open'\"\n >\n </cds-tab>\n\n <cds-tab\n [heading]=\"'task-list.all.title' | translate\"\n [active]=\"obs.selectedTaskType === 'all'\"\n >\n </cds-tab>\n </cds-tabs>\n\n <cds-tabs *ngIf=\"obs.visibleTabs\" type=\"contained\" class=\"valtimo-carbon-list__tabs\">\n <cds-tab\n *ngFor=\"let tab of obs.visibleTabs\"\n [heading]=\"'task-list.' + tab + '.title' | translate\"\n [active]=\"obs.selectedTaskType === tab\"\n ></cds-tab>\n </cds-tabs>\n </div>\n </valtimo-carbon-list>\n</ng-template>\n\n<ng-template #searchFields let-obs=\"obs\">\n <div class=\"mb-3\">\n <valtimo-search-fields\n [searchFields]=\"obs.searchFields\"\n [inputDisabled]=\"obs.loadingSearchFields\"\n [documentDefinitionName]=\"obs.caseDefinitionName\"\n [setValuesSubject$]=\"setSearchFieldValuesSubject$\"\n [clearValuesSubject$]=\"clearSearchFieldValuesSubject$\"\n (doSearch)=\"search($event)\"\n >\n </valtimo-search-fields>\n </div>\n</ng-template>\n\n<ng-container renderInPageHeader [fullWidth]=\"true\">\n <ng-template>\n <cds-dropdown\n class=\"case-definition-selection\"\n *ngIf=\"{\n loadingCaseListItems: loadingCaseListItems$ | async,\n caseListItems: caseListItems$ | async\n } as obs\"\n [attr.data-testid]=\"'task-list-case-dropdown'\"\n [disabled]=\"obs.loadingCaseListItems || (obs.caseListItems || []).length === 1\"\n [skeleton]=\"obs.loadingCaseListItems\"\n (selected)=\"setCaseDefinition($event)\"\n >\n <cds-dropdown-list [items]=\"obs.caseListItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </ng-template>\n</ng-container>\n", styles: [".cds--link--disabled{cursor:not-allowed;pointer-events:auto!important;outline:0!important}.case-definition-selection{display:flex;width:250px}\n/*!\n * Copyright 2015-2024 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"] }]
1720
- }], ctorParameters: () => [{ type: i2.ConfigService }, { type: i7.DocumentService }, { type: i12.PermissionService }, { type: i1$1.Router }, { type: TaskService }, { type: TaskListService }, { type: i8.TranslateService }, { type: TaskListColumnService }, { type: TaskListPaginationService }, { type: TaskListSortService }, { type: TaskListSearchService }, { type: TaskListQueryParamService }, { type: i6.PageTitleService }], propDecorators: { _taskDetail: [{
1815
+ ], template: "<!--\n ~ Copyright 2015-2024 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 *ngIf=\"{\n loading: loadingTasks$ | async,\n selectedTaskType: selectedTaskType$ | async,\n tasks: tasks$ | async,\n fields: fields$ | async,\n visibleTabs: visibleTabs$ | async,\n pagination: paginationForCurrentTaskTypeForList$ | async,\n taskListColumnsForCase: taskListColumnsForCase$ | async,\n sortState: sortStateForCurrentTaskType$ | async,\n overrideSortState: overrideSortState$ | async,\n searchFields: searchFields$ | async,\n loadingSearchFields: loadingSearchFields$ | async,\n caseDefinitionName: caseDefinitionName$ | async,\n noResultsMessage: noResultsMessage$ | async,\n } as obs\"\n class=\"main-content\"\n>\n <div class=\"container-fluid\">\n @if (obs.caseDefinitionName && obs.caseDefinitionName !== ALL_CASES_ID) {\n <ng-container\n *ngTemplateOutlet=\"\n searchFields;\n context: {\n obs: obs,\n }\n \"\n ></ng-container>\n }\n\n <ng-container\n *ngTemplateOutlet=\"\n tasksList;\n context: {\n obs: obs,\n }\n \"\n ></ng-container>\n\n <ng-container\n *ngTemplateOutlet=\"\n tasksListLoading;\n context: {\n obs: obs,\n }\n \"\n ></ng-container>\n\n <valtimo-task-detail-modal\n #taskDetail\n (formSubmit)=\"reload()\"\n (assignmentOfTaskChanged)=\"reload()\"\n ></valtimo-task-detail-modal>\n </div>\n</div>\n\n<ng-template #configuredTabs let-selectedTaskType=\"selectedTaskType\" let-visibleTabs=\"visibleTabs\">\n <cds-tabs *ngIf=\"visibleTabs\" type=\"contained\" class=\"valtimo-carbon-list__tabs\">\n <cds-tab\n *ngFor=\"let tab of visibleTabs\"\n [attr.data-testid]=\"'task-list-tab-' + tab\"\n [heading]=\"'task-list.' + tab + '.title' | translate\"\n [active]=\"selectedTaskType === tab\"\n (selected)=\"tabChange(tab)\"\n ></cds-tab>\n </cds-tabs>\n</ng-template>\n\n<ng-template #caseLink let-data=\"data\">\n <ng-container *ngIf=\"cachedTasks$ | async as cachedTasks\">\n <div *ngIf=\"cachedTasks[data.index].caseLocked\">\n <a\n class=\"float-left cds--link--disabled\"\n cdsLink\n href=\"javascript:void(0)\"\n ngbTooltip=\"{{ 'task-list.caseLocked' | translate }}\"\n (click)=\"$event.stopPropagation()\"\n >\n {{ 'task-list.goToCase' | translate }}\n </a>\n </div>\n <div *ngIf=\"!cachedTasks[data.index].caseLocked\">\n <a\n class=\"float-left cds--link\"\n cdsLink\n href=\"javascript:void(0)\"\n (click)=\"openRelatedCase($event, data.index)\"\n >\n {{ 'task-list.goToCase' | translate }}\n </a>\n </div>\n </ng-container>\n</ng-template>\n\n<ng-template #tasksList let-obs=\"obs\">\n <valtimo-carbon-list\n *ngIf=\"!obs.loading\"\n [fields]=\"obs.fields\"\n [header]=\"false\"\n [items]=\"obs.tasks\"\n [lastColumnTemplate]=\"caseLink\"\n [pagination]=\"obs.pagination\"\n paginationIdentifier=\"taskList\"\n lockedTooltipTranslationKey=\"task-list.rowLocked\"\n [sortState]=\"obs.overrideSortState || obs.sortState\"\n (paginationClicked)=\"paginationClicked($event, obs.selectedTaskType)\"\n (paginationSet)=\"paginationSet($event)\"\n (rowClicked)=\"rowOpenTaskClick($event)\"\n (sortChanged)=\"sortChanged($event)\"\n >\n <div tabs>\n <ng-container *ngIf=\"obs.visibleTabs\">\n <ng-container\n *ngTemplateOutlet=\"\n configuredTabs;\n context: {selectedTaskType: obs.selectedTaskType, visibleTabs: obs.visibleTabs}\n \"\n ></ng-container>\n </ng-container>\n </div>\n\n <valtimo-no-results\n [description]=\"obs.noResultsMessage.description | translate\"\n [title]=\"obs.noResultsMessage.title | translate\"\n >\n </valtimo-no-results>\n </valtimo-carbon-list>\n</ng-template>\n\n<ng-template #tasksListLoading let-obs=\"obs\">\n <valtimo-carbon-list *ngIf=\"obs.loading\" [loading]=\"true\">\n <div tabs>\n <cds-tabs *ngIf=\"!obs.visibleTabs\" type=\"contained\" class=\"valtimo-carbon-list__tabs\">\n <cds-tab\n [heading]=\"'task-list.mine.title' | translate\"\n [active]=\"obs.selectedTaskType === 'mine'\"\n >\n </cds-tab>\n\n <cds-tab\n [heading]=\"'task-list.open.title' | translate\"\n [active]=\"obs.selectedTaskType === 'open'\"\n >\n </cds-tab>\n\n <cds-tab\n [heading]=\"'task-list.all.title' | translate\"\n [active]=\"obs.selectedTaskType === 'all'\"\n >\n </cds-tab>\n </cds-tabs>\n\n <cds-tabs *ngIf=\"obs.visibleTabs\" type=\"contained\" class=\"valtimo-carbon-list__tabs\">\n <cds-tab\n *ngFor=\"let tab of obs.visibleTabs\"\n [heading]=\"'task-list.' + tab + '.title' | translate\"\n [active]=\"obs.selectedTaskType === tab\"\n ></cds-tab>\n </cds-tabs>\n </div>\n </valtimo-carbon-list>\n</ng-template>\n\n<ng-template #searchFields let-obs=\"obs\">\n <div class=\"mb-3\">\n <valtimo-search-fields\n [searchFields]=\"obs.searchFields\"\n [inputDisabled]=\"obs.loadingSearchFields\"\n [documentDefinitionName]=\"obs.caseDefinitionName\"\n [setValuesSubject$]=\"setSearchFieldValuesSubject$\"\n [clearValuesSubject$]=\"clearSearchFieldValuesSubject$\"\n (doSearch)=\"search($event)\"\n >\n </valtimo-search-fields>\n </div>\n</ng-template>\n\n<ng-container renderInPageHeader [fullWidth]=\"true\">\n <ng-template>\n <cds-dropdown\n class=\"case-definition-selection\"\n *ngIf=\"{\n loadingCaseListItems: loadingCaseListItems$ | async,\n caseListItems: caseListItems$ | async,\n } as obs\"\n [attr.data-testid]=\"'task-list-case-dropdown'\"\n [disabled]=\"obs.loadingCaseListItems || (obs.caseListItems || []).length === 1\"\n [skeleton]=\"obs.loadingCaseListItems\"\n (selected)=\"setCaseDefinition($event)\"\n >\n <cds-dropdown-list [items]=\"obs.caseListItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </ng-template>\n</ng-container>\n", styles: [".cds--link--disabled{cursor:not-allowed;pointer-events:auto!important;outline:0!important}.case-definition-selection{display:flex;width:250px}\n/*!\n * Copyright 2015-2024 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"] }]
1816
+ }], ctorParameters: () => [{ type: i1$1.ConfigService }, { type: i2.DocumentService }, { type: i3$1.PermissionService }, { type: i1$2.Router }, { type: TaskService }, { type: TaskListService }, { type: i3.TranslateService }, { type: TaskListColumnService }, { type: TaskListPaginationService }, { type: TaskListSortService }, { type: TaskListSearchService }, { type: TaskListQueryParamService }, { type: i9.PageTitleService }], propDecorators: { _taskDetail: [{
1721
1817
  type: ViewChild,
1722
1818
  args: ['taskDetail']
1723
1819
  }], onPopState: [{
@@ -1725,6 +1821,133 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1725
1821
  args: ['window:popstate', ['$event']]
1726
1822
  }] } });
1727
1823
 
1824
+ /*
1825
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1826
+ *
1827
+ * Licensed under EUPL, Version 1.2 (the "License");
1828
+ * you may not use this file except in compliance with the License.
1829
+ * You may obtain a copy of the License at
1830
+ *
1831
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
1832
+ *
1833
+ * Unless required by applicable law or agreed to in writing, software
1834
+ * distributed under the License is distributed on an "AS IS" basis,
1835
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1836
+ * See the License for the specific language governing permissions and
1837
+ * limitations under the License.
1838
+ */
1839
+
1840
+ /*
1841
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1842
+ *
1843
+ * Licensed under EUPL, Version 1.2 (the "License");
1844
+ * you may not use this file except in compliance with the License.
1845
+ * You may obtain a copy of the License at
1846
+ *
1847
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
1848
+ *
1849
+ * Unless required by applicable law or agreed to in writing, software
1850
+ * distributed under the License is distributed on an "AS IS" basis,
1851
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1852
+ * See the License for the specific language governing permissions and
1853
+ * limitations under the License.
1854
+ */
1855
+
1856
+ /*
1857
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1858
+ *
1859
+ * Licensed under EUPL, Version 1.2 (the "License");
1860
+ * you may not use this file except in compliance with the License.
1861
+ * You may obtain a copy of the License at
1862
+ *
1863
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
1864
+ *
1865
+ * Unless required by applicable law or agreed to in writing, software
1866
+ * distributed under the License is distributed on an "AS IS" basis,
1867
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1868
+ * See the License for the specific language governing permissions and
1869
+ * limitations under the License.
1870
+ */
1871
+ var TaskListColumnDefaultSort;
1872
+ (function (TaskListColumnDefaultSort) {
1873
+ TaskListColumnDefaultSort["ASC"] = "ASC";
1874
+ TaskListColumnDefaultSort["DESC"] = "DESC";
1875
+ })(TaskListColumnDefaultSort || (TaskListColumnDefaultSort = {}));
1876
+
1877
+ /*
1878
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1879
+ *
1880
+ * Licensed under EUPL, Version 1.2 (the "License");
1881
+ * you may not use this file except in compliance with the License.
1882
+ * You may obtain a copy of the License at
1883
+ *
1884
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
1885
+ *
1886
+ * Unless required by applicable law or agreed to in writing, software
1887
+ * distributed under the License is distributed on an "AS IS" basis,
1888
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1889
+ * See the License for the specific language governing permissions and
1890
+ * limitations under the License.
1891
+ */
1892
+
1893
+ /*
1894
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1895
+ *
1896
+ * Licensed under EUPL, Version 1.2 (the "License");
1897
+ * you may not use this file except in compliance with the License.
1898
+ * You may obtain a copy of the License at
1899
+ *
1900
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
1901
+ *
1902
+ * Unless required by applicable law or agreed to in writing, software
1903
+ * distributed under the License is distributed on an "AS IS" basis,
1904
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1905
+ * See the License for the specific language governing permissions and
1906
+ * limitations under the License.
1907
+ */
1908
+ var TaskListSearchFieldDataType;
1909
+ (function (TaskListSearchFieldDataType) {
1910
+ TaskListSearchFieldDataType["TEXT"] = "text";
1911
+ TaskListSearchFieldDataType["NUMBER"] = "number";
1912
+ TaskListSearchFieldDataType["DATE"] = "date";
1913
+ TaskListSearchFieldDataType["DATETIME"] = "datetime";
1914
+ TaskListSearchFieldDataType["TIME"] = "time";
1915
+ TaskListSearchFieldDataType["BOOLEAN"] = "boolean";
1916
+ })(TaskListSearchFieldDataType || (TaskListSearchFieldDataType = {}));
1917
+ var TaskListSearchFieldFieldType;
1918
+ (function (TaskListSearchFieldFieldType) {
1919
+ TaskListSearchFieldFieldType["SINGLE"] = "single";
1920
+ TaskListSearchFieldFieldType["RANGE"] = "range";
1921
+ TaskListSearchFieldFieldType["SINGLE_SELECT_DROPDOWN"] = "single_select_dropdown";
1922
+ TaskListSearchFieldFieldType["MULTI_SELECT_DROPDOWN"] = "multi_select_dropdown";
1923
+ })(TaskListSearchFieldFieldType || (TaskListSearchFieldFieldType = {}));
1924
+ var TaskListSearchFieldMatchType;
1925
+ (function (TaskListSearchFieldMatchType) {
1926
+ TaskListSearchFieldMatchType["LIKE"] = "like";
1927
+ TaskListSearchFieldMatchType["EXACT"] = "exact";
1928
+ })(TaskListSearchFieldMatchType || (TaskListSearchFieldMatchType = {}));
1929
+ var TaskListSearchDropdownDataProvider;
1930
+ (function (TaskListSearchDropdownDataProvider) {
1931
+ TaskListSearchDropdownDataProvider["DATABASE"] = "dropdownDatabaseDataProvider";
1932
+ TaskListSearchDropdownDataProvider["JSON"] = "dropdownJsonFileDataProvider";
1933
+ })(TaskListSearchDropdownDataProvider || (TaskListSearchDropdownDataProvider = {}));
1934
+
1935
+ /*
1936
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
1937
+ *
1938
+ * Licensed under EUPL, Version 1.2 (the "License");
1939
+ * you may not use this file except in compliance with the License.
1940
+ * You may obtain a copy of the License at
1941
+ *
1942
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
1943
+ *
1944
+ * Unless required by applicable law or agreed to in writing, software
1945
+ * distributed under the License is distributed on an "AS IS" basis,
1946
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1947
+ * See the License for the specific language governing permissions and
1948
+ * limitations under the License.
1949
+ */
1950
+
1728
1951
  /*
1729
1952
  * Copyright 2015-2024 Ritense BV, the Netherlands.
1730
1953
  *
@@ -1750,7 +1973,7 @@ const routes = [
1750
1973
  ];
1751
1974
  class TaskRoutingModule {
1752
1975
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1753
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: TaskRoutingModule, imports: [CommonModule, i1$1.RouterModule], exports: [RouterModule] }); }
1976
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: TaskRoutingModule, imports: [CommonModule, i1$2.RouterModule], exports: [RouterModule] }); }
1754
1977
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskRoutingModule, imports: [CommonModule, RouterModule.forChild(routes), RouterModule] }); }
1755
1978
  }
1756
1979
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskRoutingModule, decorators: [{
@@ -1779,7 +2002,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1779
2002
  */
1780
2003
  class TaskModule {
1781
2004
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1782
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: TaskModule, declarations: [TaskListComponent, TaskDetailModalComponent, AssignUserToTaskComponent], imports: [CommonModule,
2005
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: TaskModule, declarations: [TaskListComponent, TaskDetailModalComponent], imports: [CommonModule,
1783
2006
  TaskRoutingModule,
1784
2007
  CarbonListModule,
1785
2008
  PageHeaderModule,
@@ -1788,7 +2011,7 @@ class TaskModule {
1788
2011
  SearchableDropdownSelectModule,
1789
2012
  CamundaFormModule,
1790
2013
  BrowserAnimationsModule,
1791
- FormsModule, i1$2.ToastrModule, i8.TranslateModule, NgbModule,
2014
+ FormsModule, i10.ToastrModule, i3.TranslateModule, NgbModule,
1792
2015
  FormIoModule,
1793
2016
  ModalModule,
1794
2017
  LinkModule,
@@ -1799,9 +2022,12 @@ class TaskModule {
1799
2022
  DropdownModule,
1800
2023
  ButtonModule,
1801
2024
  IconModule,
1802
- TooltipModule,
2025
+ TooltipModule$1,
1803
2026
  ConfirmationModalModule,
1804
- SearchFieldsModule], exports: [TaskListComponent, TaskDetailModalComponent, AssignUserToTaskComponent] }); }
2027
+ SearchFieldsModule,
2028
+ AssignUserToTaskComponent,
2029
+ TaskDetailContentComponent,
2030
+ TaskDetailIntermediateSaveComponent], exports: [TaskListComponent, TaskDetailModalComponent] }); }
1805
2031
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskModule, imports: [CommonModule,
1806
2032
  TaskRoutingModule,
1807
2033
  CarbonListModule,
@@ -1834,14 +2060,17 @@ class TaskModule {
1834
2060
  DropdownModule,
1835
2061
  ButtonModule,
1836
2062
  IconModule,
1837
- TooltipModule,
2063
+ TooltipModule$1,
1838
2064
  ConfirmationModalModule,
1839
- SearchFieldsModule] }); }
2065
+ SearchFieldsModule,
2066
+ AssignUserToTaskComponent,
2067
+ TaskDetailContentComponent,
2068
+ TaskDetailIntermediateSaveComponent] }); }
1840
2069
  }
1841
2070
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TaskModule, decorators: [{
1842
2071
  type: NgModule,
1843
2072
  args: [{
1844
- declarations: [TaskListComponent, TaskDetailModalComponent, AssignUserToTaskComponent],
2073
+ declarations: [TaskListComponent, TaskDetailModalComponent],
1845
2074
  imports: [
1846
2075
  CommonModule,
1847
2076
  TaskRoutingModule,
@@ -1875,11 +2104,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1875
2104
  DropdownModule,
1876
2105
  ButtonModule,
1877
2106
  IconModule,
1878
- TooltipModule,
2107
+ TooltipModule$1,
1879
2108
  ConfirmationModalModule,
1880
2109
  SearchFieldsModule,
2110
+ AssignUserToTaskComponent,
2111
+ TaskDetailContentComponent,
2112
+ TaskDetailIntermediateSaveComponent,
1881
2113
  ],
1882
- exports: [TaskListComponent, TaskDetailModalComponent, AssignUserToTaskComponent],
2114
+ exports: [TaskListComponent, TaskDetailModalComponent]
1883
2115
  }]
1884
2116
  }] });
1885
2117
 
@@ -1906,5 +2138,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1906
2138
  * Generated bundle index. Do not edit.
1907
2139
  */
1908
2140
 
1909
- export { AssignUserToTaskComponent, CAN_ASSIGN_TASK_PERMISSION, CAN_VIEW_CASE_PERMISSION, CAN_VIEW_TASK_PERMISSION, TASK_DETAIL_PERMISSION_RESOURCE, TASK_LIST_NO_SEARCH_RESULTS_MESSAGE, TaskDetailModalComponent, TaskListColumnDefaultSort, TaskListComponent, TaskListSearchDropdownDataProvider, TaskListSearchFieldDataType, TaskListSearchFieldFieldType, TaskListSearchFieldMatchType, TaskModule, TaskService };
2141
+ export { AssignUserToTaskComponent, CAN_ASSIGN_TASK_PERMISSION, CAN_VIEW_CASE_PERMISSION, CAN_VIEW_TASK_PERMISSION, TASK_DETAIL_PERMISSION_RESOURCE, TASK_LIST_NO_SEARCH_RESULTS_MESSAGE, TaskDetailContentComponent, TaskDetailIntermediateSaveComponent, TaskDetailModalComponent, TaskIntermediateSaveService, TaskListColumnDefaultSort, TaskListColumnService, TaskListComponent, TaskListPaginationService, TaskListQueryParamService, TaskListSearchDropdownDataProvider, TaskListSearchFieldDataType, TaskListSearchFieldFieldType, TaskListSearchFieldMatchType, TaskListSearchService, TaskListService, TaskModule, TaskService };
1910
2142
  //# sourceMappingURL=valtimo-task.mjs.map