@valtimo/task 12.14.1 → 13.0.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 (60) hide show
  1. package/fesm2022/valtimo-task.mjs +218 -173
  2. package/fesm2022/valtimo-task.mjs.map +1 -1
  3. package/lib/components/assign-user-to-task/assign-user-to-task.component.d.ts +1 -1
  4. package/lib/components/task-detail-content/task-detail-content.component.d.ts +3 -4
  5. package/lib/components/task-detail-content/task-detail-content.component.d.ts.map +1 -1
  6. package/lib/components/task-detail-intermediate-save/task-detail-intermediate-save.component.d.ts +5 -6
  7. package/lib/components/task-detail-intermediate-save/task-detail-intermediate-save.component.d.ts.map +1 -1
  8. package/lib/components/task-detail-modal/task-detail-modal.component.d.ts +10 -4
  9. package/lib/components/task-detail-modal/task-detail-modal.component.d.ts.map +1 -1
  10. package/lib/components/task-list/task-list.component.d.ts +8 -4
  11. package/lib/components/task-list/task-list.component.d.ts.map +1 -1
  12. package/lib/models/index.d.ts +1 -0
  13. package/lib/models/index.d.ts.map +1 -1
  14. package/lib/models/task-list.model.d.ts +2 -2
  15. package/lib/models/task-list.model.d.ts.map +1 -1
  16. package/lib/models/task-sse-event.model.d.ts +8 -0
  17. package/lib/models/task-sse-event.model.d.ts.map +1 -0
  18. package/lib/models/task.model.d.ts +1 -1
  19. package/lib/services/task-intermediate-save.service.d.ts +1 -1
  20. package/lib/services/task-intermediate-save.service.d.ts.map +1 -1
  21. package/lib/services/task-list-pagination.service.d.ts +1 -1
  22. package/lib/services/task-list-search.service.d.ts +1 -1
  23. package/lib/services/task-list-sort.service.d.ts +1 -1
  24. package/lib/services/task-list.service.d.ts +4 -7
  25. package/lib/services/task-list.service.d.ts.map +1 -1
  26. package/lib/services/task.service.d.ts +4 -4
  27. package/lib/services/task.service.d.ts.map +1 -1
  28. package/lib/task-permissions.d.ts +1 -1
  29. package/lib/task-permissions.d.ts.map +1 -1
  30. package/lib/task.module.d.ts +9 -10
  31. package/lib/task.module.d.ts.map +1 -1
  32. package/package.json +4 -7
  33. package/esm2022/lib/components/assign-user-to-task/assign-user-to-task.component.mjs +0 -210
  34. package/esm2022/lib/components/set-task-due-date/set-task-due-date.component.mjs +0 -128
  35. package/esm2022/lib/components/task-detail-content/task-detail-content.component.mjs +0 -398
  36. package/esm2022/lib/components/task-detail-intermediate-save/task-detail-intermediate-save.component.mjs +0 -168
  37. package/esm2022/lib/components/task-detail-modal/task-detail-modal.component.mjs +0 -151
  38. package/esm2022/lib/components/task-list/task-list.component.mjs +0 -361
  39. package/esm2022/lib/constants/index.mjs +0 -17
  40. package/esm2022/lib/constants/task-list.constants.mjs +0 -22
  41. package/esm2022/lib/models/index.mjs +0 -21
  42. package/esm2022/lib/models/task-definition.model.mjs +0 -17
  43. package/esm2022/lib/models/task-intermediate-save.model.mjs +0 -17
  44. package/esm2022/lib/models/task-list-search-field.model.mjs +0 -43
  45. package/esm2022/lib/models/task-list.model.mjs +0 -22
  46. package/esm2022/lib/models/task.model.mjs +0 -17
  47. package/esm2022/lib/services/index.mjs +0 -23
  48. package/esm2022/lib/services/task-intermediate-save.service.mjs +0 -73
  49. package/esm2022/lib/services/task-list-column.service.mjs +0 -193
  50. package/esm2022/lib/services/task-list-pagination.service.mjs +0 -74
  51. package/esm2022/lib/services/task-list-query-param.service.mjs +0 -53
  52. package/esm2022/lib/services/task-list-search.service.mjs +0 -99
  53. package/esm2022/lib/services/task-list-sort.service.mjs +0 -116
  54. package/esm2022/lib/services/task-list.service.mjs +0 -60
  55. package/esm2022/lib/services/task.service.mjs +0 -104
  56. package/esm2022/lib/task-permissions.mjs +0 -44
  57. package/esm2022/lib/task-routing.module.mjs +0 -45
  58. package/esm2022/lib/task.module.mjs +0 -158
  59. package/esm2022/public_api.mjs +0 -31
  60. package/esm2022/valtimo-task.mjs +0 -5
@@ -1,210 +0,0 @@
1
- /*
2
- * Copyright 2015-2024 Ritense BV, the Netherlands.
3
- *
4
- * Licensed under EUPL, Version 1.2 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" basis,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { Component, EventEmitter, Input, Output, } from '@angular/core';
17
- import { RemoveClassnamesDirective, SearchableDropdownSelectModule, } from '@valtimo/components';
18
- import { BehaviorSubject, combineLatest, Subject, Subscription, take, tap } from 'rxjs';
19
- import { CommonModule } from '@angular/common';
20
- import { TranslateModule } from '@ngx-translate/core';
21
- import { ButtonModule, ComboBoxModule, DatePickerModule, IconModule, LayerModule, ToggletipModule, } from 'carbon-components-angular';
22
- import { UserFollow16 } from '@carbon/icons';
23
- import { filter, map } from 'rxjs/operators';
24
- import * as i0 from "@angular/core";
25
- import * as i1 from "../../services";
26
- import * as i2 from "carbon-components-angular";
27
- import * as i3 from "@valtimo/components";
28
- import * as i4 from "@angular/common";
29
- import * as i5 from "@ngx-translate/core";
30
- import * as i6 from "carbon-components-angular/dropdown";
31
- export class AssignUserToTaskComponent {
32
- set canAssignUserToTask(value) {
33
- this.canAssignUserToTaskSet$.next(true);
34
- this.canAssignUserToTask$.next(value);
35
- }
36
- constructor(taskService, iconService, elementRef, renderer2, cdsThemeService) {
37
- this.taskService = taskService;
38
- this.iconService = iconService;
39
- this.elementRef = elementRef;
40
- this.renderer2 = renderer2;
41
- this.cdsThemeService = cdsThemeService;
42
- this.assignmentOfTaskChanged = new EventEmitter();
43
- this.canAssignUserToTaskSet$ = new BehaviorSubject(false);
44
- this.canAssignUserToTask$ = new BehaviorSubject(false);
45
- this.assignedIdOnServer$ = new BehaviorSubject(null);
46
- this._assignedUserFullName$ = new BehaviorSubject(null);
47
- this.assignedUserFullName$ = this._assignedUserFullName$.pipe(map(fullName => `${fullName?.trim()}`));
48
- this._candidateUsersForTask$ = new BehaviorSubject(undefined);
49
- this._selectedUserId$ = new BehaviorSubject(null);
50
- this.selectedUserId$ = this._selectedUserId$.asObservable();
51
- this.candidateUsersForTask$ = combineLatest([
52
- this._candidateUsersForTask$,
53
- this._selectedUserId$,
54
- ]).pipe(map(([users, selectedUserId]) => this.mapUsersForDropdown(users, selectedUserId)));
55
- this.mouseIsOverAssignee$ = new BehaviorSubject(false);
56
- this.open$ = new Subject();
57
- this.disabled$ = new BehaviorSubject(true);
58
- this.toggletipTheme$ = this.cdsThemeService.toggletipTheme$;
59
- this._subscriptions = new Subscription();
60
- this.iconService.registerAll([UserFollow16]);
61
- }
62
- ngOnInit() {
63
- this.fetchCandidateUsers();
64
- this.openHideElementSubscription();
65
- }
66
- ngOnChanges(changes) {
67
- this._candidateUsersForTask$.pipe(take(1)).subscribe(candidateUsers => {
68
- const currentUserId = changes.assigneeId?.currentValue || this.assigneeId;
69
- this.assignedIdOnServer$.next(currentUserId || null);
70
- this._selectedUserId$.next(currentUserId || null);
71
- this._assignedUserFullName$.next(this.getAssignedUserName(candidateUsers ?? [], currentUserId));
72
- });
73
- }
74
- ngOnDestroy() {
75
- this._subscriptions.unsubscribe();
76
- }
77
- assignTask(userId) {
78
- this.disable();
79
- combineLatest([
80
- this._candidateUsersForTask$,
81
- this.taskService.assignTask(this.taskId, { assignee: userId }),
82
- ])
83
- .pipe(take(1))
84
- .subscribe({
85
- next: ([candidateUsers]) => {
86
- this._selectedUserId$.next(userId);
87
- this.assignedIdOnServer$.next(userId);
88
- this._assignedUserFullName$.next(this.getAssignedUserName(candidateUsers ?? [], userId));
89
- this.closeToggletip();
90
- this.emitChange();
91
- this.enable();
92
- },
93
- error: () => {
94
- this.enable();
95
- },
96
- });
97
- }
98
- unassignTask() {
99
- this.disable();
100
- this.taskService
101
- .unassignTask(this.taskId)
102
- .pipe(tap(() => {
103
- this.emitChange();
104
- this.enable();
105
- this.clear();
106
- }))
107
- .subscribe();
108
- }
109
- getAssignedUserName(users, userId) {
110
- if (users && userId) {
111
- const findUser = users.find(user => user.id === userId) || users.find(user => user.userName === userId);
112
- return findUser ? findUser.label : userId;
113
- }
114
- return userId || '-';
115
- }
116
- onMouseEnterAssignee() {
117
- this.mouseIsOverAssignee$.next(true);
118
- }
119
- onMouseLeaveAssignee() {
120
- this.mouseIsOverAssignee$.next(false);
121
- }
122
- onSubmitButtonClick() {
123
- this.assignTask(this._selectedUserId$.getValue());
124
- }
125
- onUserSelect(event) {
126
- if (!event?.id)
127
- return;
128
- this._selectedUserId$.next(event.id);
129
- }
130
- clear() {
131
- this.assignedIdOnServer$.next(null);
132
- this._selectedUserId$.next(null);
133
- }
134
- mapUsersForDropdown(users, selectedUserId) {
135
- return (users
136
- ?.map(user => ({ ...user, lastName: user.lastName?.split(' ').splice(-1)[0] || '' }))
137
- .sort((a, b) => a.lastName.localeCompare(b.lastName))
138
- .map(user => ({ content: user.label, id: user.id, selected: user.id === selectedUserId })) ||
139
- []);
140
- }
141
- emitChange() {
142
- this.assignmentOfTaskChanged.emit();
143
- }
144
- enable() {
145
- this.disabled$.next(false);
146
- }
147
- disable() {
148
- this.disabled$.next(true);
149
- }
150
- closeToggletip() {
151
- // needed to reliably trigger toggle tip closure
152
- this.open$.next(true);
153
- setTimeout(() => this.open$.next(false));
154
- }
155
- fetchCandidateUsers() {
156
- this.canAssignUserToTask$
157
- .pipe(filter(allowed => !!allowed), take(1))
158
- .subscribe(() => {
159
- this.taskService.getCandidateUsers(this.taskId).subscribe(candidateUsers => {
160
- this._candidateUsersForTask$.next(candidateUsers);
161
- if (this.assigneeId) {
162
- this.assignedIdOnServer$.next(this.assigneeId);
163
- this._selectedUserId$.next(this.assigneeId);
164
- this._assignedUserFullName$.next(this.getAssignedUserName(candidateUsers, this.assigneeId));
165
- }
166
- this.enable();
167
- });
168
- });
169
- }
170
- openHideElementSubscription() {
171
- this._subscriptions.add(combineLatest([
172
- this.selectedUserId$,
173
- this.assignedIdOnServer$,
174
- this.canAssignUserToTask$,
175
- ]).subscribe(([selectedUserId, idOnServer, canAssignUserToTask]) => {
176
- if (!canAssignUserToTask && !(selectedUserId === idOnServer && idOnServer !== null)) {
177
- this.renderer2.setStyle(this.elementRef.nativeElement, 'display', 'none');
178
- }
179
- else {
180
- this.renderer2.removeStyle(this.elementRef.nativeElement, 'display');
181
- }
182
- }));
183
- }
184
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AssignUserToTaskComponent, deps: [{ token: i1.TaskService }, { token: i2.IconService }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i3.CdsThemeService }], target: i0.ɵɵFactoryTarget.Component }); }
185
- 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", canAssignUserToTask: "canAssignUserToTask" }, 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 (canAssignUserToTaskSet$ | async) && {\n candidateUsers: candidateUsersForTask$ | async,\n disabled: disabled$ | async,\n idOnServer: assignedIdOnServer$ | async,\n mouseIsOverAssignee: mouseIsOverAssignee$ | async,\n assignedUserFullName: assignedUserFullName$ | async,\n selectedUserId: selectedUserId$ | async,\n canAssignUserToTask: canAssignUserToTask$ | async,\n } as obs\n \"\n>\n <ng-container\n *ngIf=\"{hasSelection: obs.selectedUserId === obs.idOnServer && obs.idOnServer !== null} as vars\"\n >\n <div\n class=\"assign-user-container\"\n *ngIf=\"obs.canAssignUserToTask || (!obs.canAssignUserToTask && vars.hasSelection)\"\n (mouseenter)=\"onMouseEnterAssignee()\"\n (mouseleave)=\"onMouseLeaveAssignee()\"\n >\n <div\n class=\"assignee-text element\"\n [ngClass]=\"{\n active: obs.canAssignUserToTask\n ? vars.hasSelection && !obs.mouseIsOverAssignee\n : vars.hasSelection,\n }\"\n >\n <span class=\"bold\">{{ 'assignTask.assignedTo' | translate }}</span>\n\n &nbsp;\n\n <span class=\"name\">{{ obs.assignedUserFullName }}</span>\n </div>\n\n <button\n *ngIf=\"obs.canAssignUserToTask\"\n cdsButton=\"ghost\"\n class=\"element remove-button\"\n [ngClass]=\"{active: vars.hasSelection && obs.mouseIsOverAssignee}\"\n [disabled]=\"obs.disabled\"\n size=\"sm\"\n (click)=\"unassignTask()\"\n >\n {{ 'assignTask.remove' | translate }}\n </button>\n\n <cds-toggletip\n align=\"bottom\"\n class=\"element main\"\n [autoAlign]=\"true\"\n [isOpen]=\"open$ | async\"\n [ngClass]=\"{active: !vars.hasSelection}\"\n (onOpen)=\"clear()\"\n >\n <button\n cdsToggletipButton\n [removeClassnames]=\"['cds--toggletip-button']\"\n cdsButton=\"tertiary\"\n size=\"sm\"\n class=\"set-assignee-button\"\n >\n {{ 'assignTask.buttonText' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"user--follow\" size=\"16\"></svg>\n </button>\n\n <div\n cdsToggletipContent\n [attr.data-carbon-theme]=\"toggletipTheme$ | async\"\n class=\"assign-task-popover-content\"\n >\n <cds-combo-box\n *ngIf=\"!vars.hasSelection\"\n [label]=\"'assignTask.comboboxLabel' | translate\"\n [placeholder]=\"'assignTask.placeholder' | translate\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [cdsLayer]=\"1\"\n [items]=\"obs?.candidateUsers || []\"\n [disabled]=\"obs.disabled\"\n (selected)=\"onUserSelect($event)\"\n (clear)=\"clear()\"\n >\n <cds-dropdown-list onclick=\"event.stopPropagation()\"></cds-dropdown-list>\n </cds-combo-box>\n\n <button\n cdsButton\n class=\"submit-task-button\"\n [disabled]=\"!obs.selectedUserId || obs.disabled\"\n (click)=\"onSubmitButtonClick()\"\n >\n {{ 'assignTask.submitButtonText' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"user--follow\" size=\"16\"></svg>\n </button>\n </div>\n </cds-toggletip>\n </div>\n </ng-container>\n</ng-container>\n", styles: [":host ::ng-deep .cds--popover-content{max-inline-size:unset}.assign-user-container{display:flex;align-items:center;justify-content:center;position:relative;font-weight:400;font-size:14px;line-height:18px;letter-spacing:.16px;color:var(--cds-link-01)}.assign-user-container .bold{font-weight:700;flex-shrink:0}.assign-user-container .name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.remove-button{width:100%}.assignee-text{display:flex;justify-content:flex-start;align-items:center;width:100%}.element{opacity:0;visibility:hidden;position:absolute;transition:opacity .3s ease-in-out}.element.active{opacity:1;visibility:visible}.element.main{position:relative}.assign-task-popover-content{width:400px;max-inline-size:400px;display:flex;flex-direction:column;gap:16px}.assign-task-popover-content .cds--btn{width:100%;max-width:unset}.set-assignee-button{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: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: SearchableDropdownSelectModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: ToggletipModule }, { kind: "component", type: i2.Toggletip, selector: "cds-toggletip, ibm-toggletip", inputs: ["id", "isOpen"] }, { kind: "directive", type: i2.ToggletipButton, selector: "[cdsToggletipButton], [ibmToggletipButton]", inputs: ["ariaLabel"] }, { kind: "directive", type: i2.ToggletipContent, selector: "[cdsToggletipContent], [ibmToggletipContent]" }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: LayerModule }, { kind: "directive", type: i2.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "ngmodule", type: DatePickerModule }, { kind: "ngmodule", type: ComboBoxModule }, { kind: "component", type: i2.ComboBox, selector: "cds-combo-box, ibm-combo-box", inputs: ["placeholder", "openMenuAria", "closeMenuAria", "clearSelectionsTitle", "clearSelectionsAria", "clearSelectionTitle", "clearSelectionAria", "id", "labelId", "items", "type", "size", "itemValueKey", "label", "hideLabel", "helperText", "appendInline", "invalid", "invalidText", "warn", "warnText", "maxLength", "theme", "selectionFeedback", "autocomplete", "dropUp", "disabled"], outputs: ["selected", "submit", "close", "search", "clear"] }, { kind: "component", type: i6.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "directive", type: RemoveClassnamesDirective, selector: "[removeClassnames]", inputs: ["removeClassnames"] }] }); }
186
- }
187
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AssignUserToTaskComponent, decorators: [{
188
- type: Component,
189
- args: [{ selector: 'valtimo-assign-user-to-task', standalone: true, imports: [
190
- CommonModule,
191
- TranslateModule,
192
- SearchableDropdownSelectModule,
193
- ButtonModule,
194
- ToggletipModule,
195
- IconModule,
196
- LayerModule,
197
- DatePickerModule,
198
- ComboBoxModule,
199
- RemoveClassnamesDirective,
200
- ], 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 (canAssignUserToTaskSet$ | async) && {\n candidateUsers: candidateUsersForTask$ | async,\n disabled: disabled$ | async,\n idOnServer: assignedIdOnServer$ | async,\n mouseIsOverAssignee: mouseIsOverAssignee$ | async,\n assignedUserFullName: assignedUserFullName$ | async,\n selectedUserId: selectedUserId$ | async,\n canAssignUserToTask: canAssignUserToTask$ | async,\n } as obs\n \"\n>\n <ng-container\n *ngIf=\"{hasSelection: obs.selectedUserId === obs.idOnServer && obs.idOnServer !== null} as vars\"\n >\n <div\n class=\"assign-user-container\"\n *ngIf=\"obs.canAssignUserToTask || (!obs.canAssignUserToTask && vars.hasSelection)\"\n (mouseenter)=\"onMouseEnterAssignee()\"\n (mouseleave)=\"onMouseLeaveAssignee()\"\n >\n <div\n class=\"assignee-text element\"\n [ngClass]=\"{\n active: obs.canAssignUserToTask\n ? vars.hasSelection && !obs.mouseIsOverAssignee\n : vars.hasSelection,\n }\"\n >\n <span class=\"bold\">{{ 'assignTask.assignedTo' | translate }}</span>\n\n &nbsp;\n\n <span class=\"name\">{{ obs.assignedUserFullName }}</span>\n </div>\n\n <button\n *ngIf=\"obs.canAssignUserToTask\"\n cdsButton=\"ghost\"\n class=\"element remove-button\"\n [ngClass]=\"{active: vars.hasSelection && obs.mouseIsOverAssignee}\"\n [disabled]=\"obs.disabled\"\n size=\"sm\"\n (click)=\"unassignTask()\"\n >\n {{ 'assignTask.remove' | translate }}\n </button>\n\n <cds-toggletip\n align=\"bottom\"\n class=\"element main\"\n [autoAlign]=\"true\"\n [isOpen]=\"open$ | async\"\n [ngClass]=\"{active: !vars.hasSelection}\"\n (onOpen)=\"clear()\"\n >\n <button\n cdsToggletipButton\n [removeClassnames]=\"['cds--toggletip-button']\"\n cdsButton=\"tertiary\"\n size=\"sm\"\n class=\"set-assignee-button\"\n >\n {{ 'assignTask.buttonText' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"user--follow\" size=\"16\"></svg>\n </button>\n\n <div\n cdsToggletipContent\n [attr.data-carbon-theme]=\"toggletipTheme$ | async\"\n class=\"assign-task-popover-content\"\n >\n <cds-combo-box\n *ngIf=\"!vars.hasSelection\"\n [label]=\"'assignTask.comboboxLabel' | translate\"\n [placeholder]=\"'assignTask.placeholder' | translate\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [cdsLayer]=\"1\"\n [items]=\"obs?.candidateUsers || []\"\n [disabled]=\"obs.disabled\"\n (selected)=\"onUserSelect($event)\"\n (clear)=\"clear()\"\n >\n <cds-dropdown-list onclick=\"event.stopPropagation()\"></cds-dropdown-list>\n </cds-combo-box>\n\n <button\n cdsButton\n class=\"submit-task-button\"\n [disabled]=\"!obs.selectedUserId || obs.disabled\"\n (click)=\"onSubmitButtonClick()\"\n >\n {{ 'assignTask.submitButtonText' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"user--follow\" size=\"16\"></svg>\n </button>\n </div>\n </cds-toggletip>\n </div>\n </ng-container>\n</ng-container>\n", styles: [":host ::ng-deep .cds--popover-content{max-inline-size:unset}.assign-user-container{display:flex;align-items:center;justify-content:center;position:relative;font-weight:400;font-size:14px;line-height:18px;letter-spacing:.16px;color:var(--cds-link-01)}.assign-user-container .bold{font-weight:700;flex-shrink:0}.assign-user-container .name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.remove-button{width:100%}.assignee-text{display:flex;justify-content:flex-start;align-items:center;width:100%}.element{opacity:0;visibility:hidden;position:absolute;transition:opacity .3s ease-in-out}.element.active{opacity:1;visibility:visible}.element.main{position:relative}.assign-task-popover-content{width:400px;max-inline-size:400px;display:flex;flex-direction:column;gap:16px}.assign-task-popover-content .cds--btn{width:100%;max-width:unset}.set-assignee-button{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"] }]
201
- }], ctorParameters: () => [{ type: i1.TaskService }, { type: i2.IconService }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i3.CdsThemeService }], propDecorators: { taskId: [{
202
- type: Input
203
- }], assigneeId: [{
204
- type: Input
205
- }], assignmentOfTaskChanged: [{
206
- type: Output
207
- }], canAssignUserToTask: [{
208
- type: Input
209
- }] } });
210
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzaWduLXVzZXItdG8tdGFzay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL3Rhc2svc3JjL2xpYi9jb21wb25lbnRzL2Fzc2lnbi11c2VyLXRvLXRhc2svYXNzaWduLXVzZXItdG8tdGFzay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL3Rhc2svc3JjL2xpYi9jb21wb25lbnRzL2Fzc2lnbi11c2VyLXRvLXRhc2svYXNzaWduLXVzZXItdG8tdGFzay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEdBR1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLHlCQUF5QixFQUN6Qiw4QkFBOEIsR0FDL0IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBYyxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFHbEcsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQ0wsWUFBWSxFQUNaLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsVUFBVSxFQUVWLFdBQVcsRUFFWCxlQUFlLEdBQ2hCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7OztBQW9CM0MsTUFBTSxPQUFPLHlCQUF5QjtJQVFwQyxJ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bUI7c0JBQXRDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFJlbmRlcmVyMixcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDZHNUaGVtZVNlcnZpY2UsXG4gIFJlbW92ZUNsYXNzbmFtZXNEaXJlY3RpdmUsXG4gIFNlYXJjaGFibGVEcm9wZG93blNlbGVjdE1vZHVsZSxcbn0gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0YWtlLCB0YXB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtUYXNrU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtOYW1lZFVzZXJ9IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7XG4gIEJ1dHRvbk1vZHVsZSxcbiAgQ29tYm9Cb3hNb2R1bGUsXG4gIERhdGVQaWNrZXJNb2R1bGUsXG4gIEljb25Nb2R1bGUsXG4gIEljb25TZXJ2aWNlLFxuICBMYXllck1vZHVsZSxcbiAgTGlzdEl0ZW0sXG4gIFRvZ2dsZXRpcE1vZHVsZSxcbn0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG5pbXBvcnQge1VzZXJGb2xsb3cxNn0gZnJvbSAnQGNhcmJvbi9pY29ucyc7XG5pbXBvcnQge2ZpbHRlciwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tYXNzaWduLXVzZXItdG8tdGFzaycsXG4gIHRlbXBsYXRlVXJsOiAnLi9hc3NpZ24tdXNlci10by10YXNrLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXNzaWduLXVzZXItdG8tdGFzay5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBTZWFyY2hhYmxlRHJvcGRvd25TZWxlY3RNb2R1bGUsXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIFRvZ2dsZXRpcE1vZHVsZSxcbiAgICBJY29uTW9kdWxlLFxuICAgIExheWVyTW9kdWxlLFxuICAgIERhdGVQaWNrZXJNb2R1bGUsXG4gICAgQ29tYm9Cb3hNb2R1bGUsXG4gICAgUmVtb3ZlQ2xhc3NuYW1lc0RpcmVjdGl2ZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQXNzaWduVXNlclRvVGFza0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBwdWJsaWMgcmVhZG9ubHkgdGFza0lkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHB1YmxpYyByZWFkb25seSBhc3NpZ25lZUlkOiBzdHJpbmc7XG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgYXNzaWdubWVudE9mVGFza0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNhbkFzc2lnblVzZXJUb1Rhc2tTZXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSBjYW5Bc3NpZ25Vc2VyVG9UYXNrJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgY2FuQXNzaWduVXNlclRvVGFzayh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuY2FuQXNzaWduVXNlclRvVGFza1NldCQubmV4dCh0cnVlKTtcbiAgICB0aGlzLmNhbkFzc2lnblVzZXJUb1Rhc2skLm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGFzc2lnbmVkSWRPblNlcnZlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hc3NpZ25lZFVzZXJGdWxsTmFtZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgYXNzaWduZWRVc2VyRnVsbE5hbWUkOiBPYnNlcnZhYmxlPHN0cmluZz4gPSB0aGlzLl9hc3NpZ25lZFVzZXJGdWxsTmFtZSQucGlwZShcbiAgICBtYXAoZnVsbE5hbWUgPT4gYCR7ZnVsbE5hbWU/LnRyaW0oKX1gKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NhbmRpZGF0ZVVzZXJzRm9yVGFzayQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE5hbWVkVXNlcltdIHwgdW5kZWZpbmVkPihcbiAgICB1bmRlZmluZWRcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zZWxlY3RlZFVzZXJJZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0ZWRVc2VySWQkID0gdGhpcy5fc2VsZWN0ZWRVc2VySWQkLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHB1YmxpYyByZWFkb25seSBjYW5kaWRhdGVVc2Vyc0ZvclRhc2skID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5fY2FuZGlkYXRlVXNlcnNGb3JUYXNrJCxcbiAgICB0aGlzLl9zZWxlY3RlZFVzZXJJZCQsXG4gIF0pLnBpcGUobWFwKChbdXNlcnMsIHNlbGVjdGVkVXNlcklkXSkgPT4gdGhpcy5tYXBVc2Vyc0ZvckRyb3Bkb3duKHVzZXJzLCBzZWxlY3RlZFVzZXJJZCkpKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgbW91c2VJc092ZXJBc3NpZ25lZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIHJlYWRvbmx5IG9wZW4kID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHVibGljIHJlYWRvbmx5IGRpc2FibGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHRvZ2dsZXRpcFRoZW1lJCA9IHRoaXMuY2RzVGhlbWVTZXJ2aWNlLnRvZ2dsZXRpcFRoZW1lJDtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGFza1NlcnZpY2U6IFRhc2tTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaWNvblNlcnZpY2U6IEljb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyMjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2RzVGhlbWVTZXJ2aWNlOiBDZHNUaGVtZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5pY29uU2VydmljZS5yZWdpc3RlckFsbChbVXNlckZvbGxvdzE2XSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5mZXRjaENhbmRpZGF0ZVVzZXJzKCk7XG4gICAgdGhpcy5vcGVuSGlkZUVsZW1lbnRTdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgdGhpcy5fY2FuZGlkYXRlVXNlcnNGb3JUYXNrJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShjYW5kaWRhdGVVc2VycyA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50VXNlcklkID0gY2hhbmdlcy5hc3NpZ25lZUlkPy5jdXJyZW50VmFsdWUgfHwgdGhpcy5hc3NpZ25lZUlkO1xuICAgICAgdGhpcy5hc3NpZ25lZElkT25TZXJ2ZXIkLm5leHQoY3VycmVudFVzZXJJZCB8fCBudWxsKTtcbiAgICAgIHRoaXMuX3NlbGVjdGVkVXNlcklkJC5uZXh0KGN1cnJlbnRVc2VySWQgfHwgbnVsbCk7XG4gICAgICB0aGlzLl9hc3NpZ25lZFVzZXJGdWxsTmFtZSQubmV4dChcbiAgICAgICAgdGhpcy5nZXRBc3NpZ25lZFVzZXJOYW1lKGNhbmRpZGF0ZVVzZXJzID8/IFtdLCBjdXJyZW50VXNlcklkKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgYXNzaWduVGFzayh1c2VySWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZSgpO1xuXG4gICAgY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLl9jYW5kaWRhdGVVc2Vyc0ZvclRhc2skLFxuICAgICAgdGhpcy50YXNrU2VydmljZS5hc3NpZ25UYXNrKHRoaXMudGFza0lkLCB7YXNzaWduZWU6IHVzZXJJZH0pLFxuICAgIF0pXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChbY2FuZGlkYXRlVXNlcnNdKSA9PiB7XG4gICAgICAgICAgdGhpcy5fc2VsZWN0ZWRVc2VySWQkLm5leHQodXNlcklkKTtcbiAgICAgICAgICB0aGlzLmFzc2lnbmVkSWRPblNlcnZlciQubmV4dCh1c2VySWQpO1xuICAgICAgICAgIHRoaXMuX2Fzc2lnbmVkVXNlckZ1bGxOYW1lJC5uZXh0KHRoaXMuZ2V0QXNzaWduZWRVc2VyTmFtZShjYW5kaWRhdGVVc2VycyA/PyBbXSwgdXNlcklkKSk7XG4gICAgICAgICAgdGhpcy5jbG9zZVRvZ2dsZXRpcCgpO1xuICAgICAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgICAgICAgIHRoaXMuZW5hYmxlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5lbmFibGUoKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHVuYXNzaWduVGFzaygpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGUoKTtcbiAgICB0aGlzLnRhc2tTZXJ2aWNlXG4gICAgICAudW5hc3NpZ25UYXNrKHRoaXMudGFza0lkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgICAgICAgdGhpcy5lbmFibGUoKTtcbiAgICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXNzaWduZWRVc2VyTmFtZSh1c2VyczogTmFtZWRVc2VyW10sIHVzZXJJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodXNlcnMgJiYgdXNlcklkKSB7XG4gICAgICBjb25zdCBmaW5kVXNlciA9XG4gICAgICAgIHVzZXJzLmZpbmQodXNlciA9PiB1c2VyLmlkID09PSB1c2VySWQpIHx8IHVzZXJzLmZpbmQodXNlciA9PiB1c2VyLnVzZXJOYW1lID09PSB1c2VySWQpO1xuICAgICAgcmV0dXJuIGZpbmRVc2VyID8gZmluZFVzZXIubGFiZWwgOiB1c2VySWQ7XG4gICAgfVxuICAgIHJldHVybiB1c2VySWQgfHwgJy0nO1xuICB9XG5cbiAgcHVibGljIG9uTW91c2VFbnRlckFzc2lnbmVlKCk6IHZvaWQge1xuICAgIHRoaXMubW91c2VJc092ZXJBc3NpZ25lZSQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBvbk1vdXNlTGVhdmVBc3NpZ25lZSgpOiB2b2lkIHtcbiAgICB0aGlzLm1vdXNlSXNPdmVyQXNzaWduZWUkLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIG9uU3VibWl0QnV0dG9uQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5hc3NpZ25UYXNrKHRoaXMuX3NlbGVjdGVkVXNlcklkJC5nZXRWYWx1ZSgpKTtcbiAgfVxuICBwdWJsaWMgb25Vc2VyU2VsZWN0KGV2ZW50OiBMaXN0SXRlbSk6IHZvaWQge1xuICAgIGlmICghZXZlbnQ/LmlkKSByZXR1cm47XG4gICAgdGhpcy5fc2VsZWN0ZWRVc2VySWQkLm5leHQoZXZlbnQuaWQpO1xuICB9XG5cbiAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuYXNzaWduZWRJZE9uU2VydmVyJC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX3NlbGVjdGVkVXNlcklkJC5uZXh0KG51bGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBVc2Vyc0ZvckRyb3Bkb3duKHVzZXJzOiBOYW1lZFVzZXJbXSwgc2VsZWN0ZWRVc2VySWQ6IHN0cmluZyk6IExpc3RJdGVtW10ge1xuICAgIHJldHVybiAoXG4gICAgICB1c2Vyc1xuICAgICAgICA/Lm1hcCh1c2VyID0+ICh7Li4udXNlciwgbGFzdE5hbWU6IHVzZXIubGFzdE5hbWU/LnNwbGl0KCcgJykuc3BsaWNlKC0xKVswXSB8fCAnJ30pKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5sYXN0TmFtZS5sb2NhbGVDb21wYXJlKGIubGFzdE5hbWUpKVxuICAgICAgICAubWFwKHVzZXIgPT4gKHtjb250ZW50OiB1c2VyLmxhYmVsLCBpZDogdXNlci5pZCwgc2VsZWN0ZWQ6IHVzZXIuaWQgPT09IHNlbGVjdGVkVXNlcklkfSkpIHx8XG4gICAgICBbXVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5hc3NpZ25tZW50T2ZUYXNrQ2hhbmdlZC5lbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIGVuYWJsZSgpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkJC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzYWJsZSgpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkJC5uZXh0KHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZVRvZ2dsZXRpcCgpOiB2b2lkIHtcbiAgICAvLyBuZWVkZWQgdG8gcmVsaWFibHkgdHJpZ2dlciB0b2dnbGUgdGlwIGNsb3N1cmVcbiAgICB0aGlzLm9wZW4kLm5leHQodHJ1ZSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm9wZW4kLm5leHQoZmFsc2UpKTtcbiAgfVxuXG4gIHByaXZhdGUgZmV0Y2hDYW5kaWRhdGVVc2VycygpOiB2b2lkIHtcbiAgICB0aGlzLmNhbkFzc2lnblVzZXJUb1Rhc2skXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKGFsbG93ZWQgPT4gISFhbGxvd2VkKSxcbiAgICAgICAgdGFrZSgxKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMudGFza1NlcnZpY2UuZ2V0Q2FuZGlkYXRlVXNlcnModGhpcy50YXNrSWQpLnN1YnNjcmliZShjYW5kaWRhdGVVc2VycyA9PiB7XG4gICAgICAgICAgdGhpcy5fY2FuZGlkYXRlVXNlcnNGb3JUYXNrJC5uZXh0KGNhbmRpZGF0ZVVzZXJzKTtcbiAgICAgICAgICBpZiAodGhpcy5hc3NpZ25lZUlkKSB7XG4gICAgICAgICAgICB0aGlzLmFzc2lnbmVkSWRPblNlcnZlciQubmV4dCh0aGlzLmFzc2lnbmVlSWQpO1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRVc2VySWQkLm5leHQodGhpcy5hc3NpZ25lZUlkKTtcbiAgICAgICAgICAgIHRoaXMuX2Fzc2lnbmVkVXNlckZ1bGxOYW1lJC5uZXh0KFxuICAgICAgICAgICAgICB0aGlzLmdldEFzc2lnbmVkVXNlck5hbWUoY2FuZGlkYXRlVXNlcnMsIHRoaXMuYXNzaWduZWVJZClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZW5hYmxlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5IaWRlRWxlbWVudFN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLnNlbGVjdGVkVXNlcklkJCxcbiAgICAgICAgdGhpcy5hc3NpZ25lZElkT25TZXJ2ZXIkLFxuICAgICAgICB0aGlzLmNhbkFzc2lnblVzZXJUb1Rhc2skLFxuICAgICAgXSkuc3Vic2NyaWJlKChbc2VsZWN0ZWRVc2VySWQsIGlkT25TZXJ2ZXIsIGNhbkFzc2lnblVzZXJUb1Rhc2tdKSA9PiB7XG4gICAgICAgIGlmICghY2FuQXNzaWduVXNlclRvVGFzayAmJiAhKHNlbGVjdGVkVXNlcklkID09PSBpZE9uU2VydmVyICYmIGlkT25TZXJ2ZXIgIT09IG51bGwpKSB7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdkaXNwbGF5JywgJ25vbmUnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyMi5yZW1vdmVTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2Rpc3BsYXknKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxuZy1jb250YWluZXJcbiAgKm5nSWY9XCJcbiAgICAoY2FuQXNzaWduVXNlclRvVGFza1NldCQgfCBhc3luYykgJiYge1xuICAgICAgY2FuZGlkYXRlVXNlcnM6IGNhbmRpZGF0ZVVzZXJzRm9yVGFzayQgfCBhc3luYyxcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCQgfCBhc3luYyxcbiAgICAgIGlkT25TZXJ2ZXI6IGFzc2lnbmVkSWRPblNlcnZlciQgfCBhc3luYyxcbiAgICAgIG1vdXNlSXNPdmVyQXNzaWduZWU6IG1vdXNlSXNPdmVyQXNzaWduZWUkIHwgYXN5bmMsXG4gICAgICBhc3NpZ25lZFVzZXJGdWxsTmFtZTogYXNzaWduZWRVc2VyRnVsbE5hbWUkIHwgYXN5bmMsXG4gICAgICBzZWxlY3RlZFVzZXJJZDogc2VsZWN0ZWRVc2VySWQkIHwgYXN5bmMsXG4gICAgICBjYW5Bc3NpZ25Vc2VyVG9UYXNrOiBjYW5Bc3NpZ25Vc2VyVG9UYXNrJCB8IGFzeW5jLFxuICAgIH0gYXMgb2JzXG4gIFwiXG4+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIntoYXNTZWxlY3Rpb246IG9icy5zZWxlY3RlZFVzZXJJZCA9PT0gb2JzLmlkT25TZXJ2ZXIgJiYgb2JzLmlkT25TZXJ2ZXIgIT09IG51bGx9IGFzIHZhcnNcIlxuICA+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJhc3NpZ24tdXNlci1jb250YWluZXJcIlxuICAgICAgKm5nSWY9XCJvYnMuY2FuQXNzaWduVXNlclRvVGFzayB8fCAoIW9icy5jYW5Bc3NpZ25Vc2VyVG9UYXNrICYmIHZhcnMuaGFzU2VsZWN0aW9uKVwiXG4gICAgICAobW91c2VlbnRlcik9XCJvbk1vdXNlRW50ZXJBc3NpZ25lZSgpXCJcbiAgICAgIChtb3VzZWxlYXZlKT1cIm9uTW91c2VMZWF2ZUFzc2lnbmVlKClcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJhc3NpZ25lZS10ZXh0IGVsZW1lbnRcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgYWN0aXZlOiBvYnMuY2FuQXNzaWduVXNlclRvVGFza1xuICAgICAgICAgICAgPyB2YXJzLmhhc1NlbGVjdGlvbiAmJiAhb2JzLm1vdXNlSXNPdmVyQXNzaWduZWVcbiAgICAgICAgICAgIDogdmFycy5oYXNTZWxlY3Rpb24sXG4gICAgICAgIH1cIlxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImJvbGRcIj57eyAnYXNzaWduVGFzay5hc3NpZ25lZFRvJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cblxuICAgICAgICAmbmJzcDtcblxuICAgICAgICA8c3BhbiBjbGFzcz1cIm5hbWVcIj57eyBvYnMuYXNzaWduZWRVc2VyRnVsbE5hbWUgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cIm9icy5jYW5Bc3NpZ25Vc2VyVG9UYXNrXCJcbiAgICAgICAgY2RzQnV0dG9uPVwiZ2hvc3RcIlxuICAgICAgICBjbGFzcz1cImVsZW1lbnQgcmVtb3ZlLWJ1dHRvblwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInthY3RpdmU6IHZhcnMuaGFzU2VsZWN0aW9uICYmIG9icy5tb3VzZUlzT3ZlckFzc2lnbmVlfVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZWRcIlxuICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAoY2xpY2spPVwidW5hc3NpZ25UYXNrKClcIlxuICAgICAgPlxuICAgICAgICB7eyAnYXNzaWduVGFzay5yZW1vdmUnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGNkcy10b2dnbGV0aXBcbiAgICAgICAgYWxpZ249XCJib3R0b21cIlxuICAgICAgICBjbGFzcz1cImVsZW1lbnQgbWFpblwiXG4gICAgICAgIFthdXRvQWxpZ25dPVwidHJ1ZVwiXG4gICAgICAgIFtpc09wZW5dPVwib3BlbiQgfCBhc3luY1wiXG4gICAgICAgIFtuZ0NsYXNzXT1cInthY3RpdmU6ICF2YXJzLmhhc1NlbGVjdGlvbn1cIlxuICAgICAgICAob25PcGVuKT1cImNsZWFyKClcIlxuICAgICAgPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2RzVG9nZ2xldGlwQnV0dG9uXG4gICAgICAgICAgW3JlbW92ZUNsYXNzbmFtZXNdPVwiWydjZHMtLXRvZ2dsZXRpcC1idXR0b24nXVwiXG4gICAgICAgICAgY2RzQnV0dG9uPVwidGVydGlhcnlcIlxuICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgY2xhc3M9XCJzZXQtYXNzaWduZWUtYnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7ICdhc3NpZ25UYXNrLmJ1dHRvblRleHQnIHwgdHJhbnNsYXRlIH19XG5cbiAgICAgICAgICA8c3ZnIGNsYXNzPVwiY2RzLS1idG5fX2ljb25cIiBjZHNJY29uPVwidXNlci0tZm9sbG93XCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjZHNUb2dnbGV0aXBDb250ZW50XG4gICAgICAgICAgW2F0dHIuZGF0YS1jYXJib24tdGhlbWVdPVwidG9nZ2xldGlwVGhlbWUkIHwgYXN5bmNcIlxuICAgICAgICAgIGNsYXNzPVwiYXNzaWduLXRhc2stcG9wb3Zlci1jb250ZW50XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjZHMtY29tYm8tYm94XG4gICAgICAgICAgICAqbmdJZj1cIiF2YXJzLmhhc1NlbGVjdGlvblwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiJ2Fzc2lnblRhc2suY29tYm9ib3hMYWJlbCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidhc3NpZ25UYXNrLnBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbYXBwZW5kSW5saW5lXT1cInRydWVcIlxuICAgICAgICAgICAgW2Ryb3BVcF09XCJmYWxzZVwiXG4gICAgICAgICAgICBbY2RzTGF5ZXJdPVwiMVwiXG4gICAgICAgICAgICBbaXRlbXNdPVwib2JzPy5jYW5kaWRhdGVVc2VycyB8fCBbXVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVkXCJcbiAgICAgICAgICAgIChzZWxlY3RlZCk9XCJvblVzZXJTZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgICAgICAoY2xlYXIpPVwiY2xlYXIoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGNkcy1kcm9wZG93bi1saXN0IG9uY2xpY2s9XCJldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPjwvY2RzLWRyb3Bkb3duLWxpc3Q+XG4gICAgICAgICAgPC9jZHMtY29tYm8tYm94PlxuXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2RzQnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cInN1Ym1pdC10YXNrLWJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIW9icy5zZWxlY3RlZFVzZXJJZCB8fCBvYnMuZGlzYWJsZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uU3VibWl0QnV0dG9uQ2xpY2soKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgJ2Fzc2lnblRhc2suc3VibWl0QnV0dG9uVGV4dCcgfCB0cmFuc2xhdGUgfX1cblxuICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImNkcy0tYnRuX19pY29uXCIgY2RzSWNvbj1cInVzZXItLWZvbGxvd1wiIHNpemU9XCIxNlwiPjwvc3ZnPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvY2RzLXRvZ2dsZXRpcD5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
@@ -1,128 +0,0 @@
1
- /*
2
- * Copyright 2015-2024 Ritense BV, the Netherlands.
3
- *
4
- * Licensed under EUPL, Version 1.2 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" basis,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { Component, Input } from '@angular/core';
17
- import { CommonModule } from '@angular/common';
18
- import { TranslateModule } from '@ngx-translate/core';
19
- import { BehaviorSubject, Subject } from 'rxjs';
20
- import { filter, map } from 'rxjs/operators';
21
- import { ButtonModule, DatePickerModule, IconModule, LayerModule, ToggletipModule, } from 'carbon-components-angular';
22
- import { CalendarAdd16 } from '@carbon/icons';
23
- import { RemoveClassnamesDirective } from '@valtimo/components';
24
- import * as i0 from "@angular/core";
25
- import * as i1 from "carbon-components-angular";
26
- import * as i2 from "../../services";
27
- import * as i3 from "@valtimo/components";
28
- import * as i4 from "@angular/common";
29
- import * as i5 from "@ngx-translate/core";
30
- export class SetTaskDueDateComponent {
31
- set canModifyTask(value) {
32
- this.canModifyTaskSet$.next(true);
33
- this.canModifyTask$.next(value);
34
- }
35
- get _task() {
36
- return this._task$.getValue();
37
- }
38
- get _selectedDateString() {
39
- return this.selectedDateString$.getValue();
40
- }
41
- set task(value) {
42
- if (!value)
43
- return;
44
- this.hasDueDate$.next(!!value.due);
45
- this._task$.next(value);
46
- }
47
- constructor(iconService, taskService, cdsThemeService) {
48
- this.iconService = iconService;
49
- this.taskService = taskService;
50
- this.cdsThemeService = cdsThemeService;
51
- this.canModifyTaskSet$ = new BehaviorSubject(false);
52
- this.canModifyTask$ = new BehaviorSubject(false);
53
- this._task$ = new BehaviorSubject(null);
54
- this.hasDueDate$ = new BehaviorSubject(false);
55
- this.selectedDateString$ = new BehaviorSubject('');
56
- this.taskDueDate$ = this._task$.pipe(filter(task => !!task), map(task => new Date(task.due)));
57
- this.disabled$ = new BehaviorSubject(false);
58
- this.open$ = new Subject();
59
- this.mouseIsOverDueDate$ = new BehaviorSubject(false);
60
- this.toggletipTheme$ = this.cdsThemeService.toggletipTheme$;
61
- this.iconService.registerAll([CalendarAdd16]);
62
- }
63
- onDateValueChange(value) {
64
- const date = Array.isArray(value) && value[0];
65
- if (!date)
66
- return;
67
- this.selectedDateString$.next(date.toISOString());
68
- }
69
- onSubmitButtonClick() {
70
- this.disabled$.next(true);
71
- this.taskService.setTaskDueDate(this._task.id, { dueDate: this._selectedDateString }).subscribe({
72
- next: () => {
73
- this.disabled$.next(false);
74
- this.hasDueDate$.next(true);
75
- this._task$.next({ ...this._task, due: this._selectedDateString });
76
- this.selectedDateString$.next('');
77
- this.closeToggletip();
78
- },
79
- error: () => {
80
- this.disabled$.next(false);
81
- },
82
- });
83
- }
84
- onRemoveButtonClick() {
85
- this.disabled$.next(true);
86
- this.taskService.removeTaskDueDate(this._task.id).subscribe({
87
- next: () => {
88
- this.disabled$.next(false);
89
- this.hasDueDate$.next(false);
90
- this._task$.next({ ...this._task, due: null });
91
- },
92
- error: () => {
93
- this.disabled$.next(false);
94
- },
95
- });
96
- }
97
- closeToggletip() {
98
- // needed to reliably trigger toggle tip closure
99
- this.open$.next(true);
100
- setTimeout(() => this.open$.next(false));
101
- }
102
- onMouseEnterDueDate() {
103
- this.mouseIsOverDueDate$.next(true);
104
- }
105
- onMouseLeaveDueDate() {
106
- this.mouseIsOverDueDate$.next(false);
107
- }
108
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SetTaskDueDateComponent, deps: [{ token: i1.IconService }, { token: i2.TaskService }, { token: i3.CdsThemeService }], target: i0.ɵɵFactoryTarget.Component }); }
109
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SetTaskDueDateComponent, isStandalone: true, selector: "valtimo-set-task-due-date", inputs: { canModifyTask: "canModifyTask", task: "task" }, 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<ng-container\n *ngIf=\"\n (canModifyTaskSet$ | async) && {\n hasDueDate: hasDueDate$ | async,\n taskDueDate: taskDueDate$ | async,\n selectedDateString: selectedDateString$ | async,\n disabled: disabled$ | async,\n mouseIsOverDueDate: mouseIsOverDueDate$ | async,\n canModifyTask: canModifyTask$ | async,\n } as obs\n \"\n>\n <div\n *ngIf=\"obs.canModifyTask || (!obs.canModifyTask && obs.hasDueDate)\"\n class=\"due-date-container\"\n (mouseenter)=\"onMouseEnterDueDate()\"\n (mouseleave)=\"onMouseLeaveDueDate()\"\n >\n <div\n class=\"due-date-text element\"\n [ngClass]=\"{\n active: obs.canModifyTask ? obs.hasDueDate && !obs.mouseIsOverDueDate : obs.hasDueDate,\n }\"\n >\n <span class=\"bold\">{{ 'setTaskDueDate.dueDateText' | translate }}</span>\n\n &nbsp;\n\n {{ obs.taskDueDate | date: 'dd-MM-yyyy' }}\n </div>\n\n <button\n *ngIf=\"obs.canModifyTask\"\n cdsButton=\"ghost\"\n class=\"element remove-button\"\n [ngClass]=\"{active: obs.hasDueDate && obs.mouseIsOverDueDate}\"\n [disabled]=\"obs.disabled\"\n size=\"sm\"\n (click)=\"onRemoveButtonClick()\"\n >\n {{ 'setTaskDueDate.removeButtonText' | translate }}\n </button>\n\n <cds-toggletip\n align=\"bottom\"\n class=\"element main\"\n [autoAlign]=\"true\"\n [isOpen]=\"open$ | async\"\n [ngClass]=\"{active: !obs.hasDueDate}\"\n >\n <button\n cdsToggletipButton\n [removeClassnames]=\"['cds--toggletip-button']\"\n cdsButton=\"tertiary\"\n size=\"sm\"\n class=\"set-task-due-date-button\"\n >\n {{ 'setTaskDueDate.buttonText' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"calendar--add\" size=\"16\"></svg>\n </button>\n\n <div\n cdsToggletipContent\n [attr.data-carbon-theme]=\"toggletipTheme$ | async\"\n class=\"assign-due-date-popover-content\"\n >\n <cds-date-picker\n *ngIf=\"!obs.hasDueDate\"\n [cdsLayer]=\"1\"\n [label]=\"'Select date'\"\n [placeholder]=\"'dd-mm-jjjj'\"\n dateFormat=\"d/m/Y\"\n [disabled]=\"obs.disabled\"\n (valueChange)=\"onDateValueChange($event)\"\n ></cds-date-picker>\n\n <button\n cdsButton\n class=\"submit-due-date-button\"\n [disabled]=\"!obs.selectedDateString || obs.disabled\"\n (click)=\"onSubmitButtonClick()\"\n >\n {{ 'setTaskDueDate.submitButtonText' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"calendar--add\" size=\"16\"></svg>\n </button>\n </div>\n </cds-toggletip>\n </div>\n</ng-container>\n", styles: [":host ::ng-deep .cds--popover-content{max-inline-size:unset}.due-date-container{display:flex;align-items:center;justify-content:center;position:relative;font-weight:400;font-size:14px;line-height:18px;letter-spacing:.16px;color:var(--cds-link-01)}.due-date-container .bold{font-weight:700}.remove-button{width:100%}.due-date-text{display:flex;justify-content:flex-start;align-items:center;width:100%}.element{opacity:0;visibility:hidden;position:absolute;transition:opacity .3s ease-in-out}.element.active{opacity:1;visibility:visible}.element.main{position:relative}.assign-due-date-popover-content{width:400px;max-inline-size:400px;display:flex;flex-direction:column;gap:16px}.assign-due-date-popover-content .cds--btn{width:100%;max-width:unset}.assign-due-date-popover-content ::ng-deep .cds--date-picker-input__wrapper,.assign-due-date-popover-content ::ng-deep .cds--date-picker-input__wrapper>span,.assign-due-date-popover-content ::ng-deep .cds--date-picker-container,.assign-due-date-popover-content ::ng-deep .cds--date-picker,.assign-due-date-popover-content ::ng-deep .cds--date-picker__input{width:100%}.set-task-due-date-button{width:250px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.DatePipe, name: "date" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i1.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: ToggletipModule }, { kind: "component", type: i1.Toggletip, selector: "cds-toggletip, ibm-toggletip", inputs: ["id", "isOpen"] }, { kind: "directive", type: i1.ToggletipButton, selector: "[cdsToggletipButton], [ibmToggletipButton]", inputs: ["ariaLabel"] }, { kind: "directive", type: i1.ToggletipContent, selector: "[cdsToggletipContent], [ibmToggletipContent]" }, { kind: "ngmodule", type: DatePickerModule }, { kind: "component", type: i1.DatePicker, selector: "cds-date-picker, ibm-date-picker", inputs: ["range", "dateFormat", "language", "label", "helperText", "rangeHelperText", "rangeLabel", "placeholder", "ariaLabel", "inputPattern", "id", "value", "theme", "disabled", "invalid", "invalidText", "warn", "warnText", "size", "rangeInvalid", "rangeInvalidText", "rangeWarn", "rangeWarnText", "skeleton", "plugins", "flatpickrOptions"], outputs: ["valueChange", "onClose"] }, { kind: "ngmodule", type: LayerModule }, { kind: "directive", type: i1.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "directive", type: RemoveClassnamesDirective, selector: "[removeClassnames]", inputs: ["removeClassnames"] }] }); }
110
- }
111
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SetTaskDueDateComponent, decorators: [{
112
- type: Component,
113
- args: [{ selector: 'valtimo-set-task-due-date', standalone: true, imports: [
114
- CommonModule,
115
- TranslateModule,
116
- ButtonModule,
117
- IconModule,
118
- ToggletipModule,
119
- DatePickerModule,
120
- LayerModule,
121
- RemoveClassnamesDirective,
122
- ], 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<ng-container\n *ngIf=\"\n (canModifyTaskSet$ | async) && {\n hasDueDate: hasDueDate$ | async,\n taskDueDate: taskDueDate$ | async,\n selectedDateString: selectedDateString$ | async,\n disabled: disabled$ | async,\n mouseIsOverDueDate: mouseIsOverDueDate$ | async,\n canModifyTask: canModifyTask$ | async,\n } as obs\n \"\n>\n <div\n *ngIf=\"obs.canModifyTask || (!obs.canModifyTask && obs.hasDueDate)\"\n class=\"due-date-container\"\n (mouseenter)=\"onMouseEnterDueDate()\"\n (mouseleave)=\"onMouseLeaveDueDate()\"\n >\n <div\n class=\"due-date-text element\"\n [ngClass]=\"{\n active: obs.canModifyTask ? obs.hasDueDate && !obs.mouseIsOverDueDate : obs.hasDueDate,\n }\"\n >\n <span class=\"bold\">{{ 'setTaskDueDate.dueDateText' | translate }}</span>\n\n &nbsp;\n\n {{ obs.taskDueDate | date: 'dd-MM-yyyy' }}\n </div>\n\n <button\n *ngIf=\"obs.canModifyTask\"\n cdsButton=\"ghost\"\n class=\"element remove-button\"\n [ngClass]=\"{active: obs.hasDueDate && obs.mouseIsOverDueDate}\"\n [disabled]=\"obs.disabled\"\n size=\"sm\"\n (click)=\"onRemoveButtonClick()\"\n >\n {{ 'setTaskDueDate.removeButtonText' | translate }}\n </button>\n\n <cds-toggletip\n align=\"bottom\"\n class=\"element main\"\n [autoAlign]=\"true\"\n [isOpen]=\"open$ | async\"\n [ngClass]=\"{active: !obs.hasDueDate}\"\n >\n <button\n cdsToggletipButton\n [removeClassnames]=\"['cds--toggletip-button']\"\n cdsButton=\"tertiary\"\n size=\"sm\"\n class=\"set-task-due-date-button\"\n >\n {{ 'setTaskDueDate.buttonText' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"calendar--add\" size=\"16\"></svg>\n </button>\n\n <div\n cdsToggletipContent\n [attr.data-carbon-theme]=\"toggletipTheme$ | async\"\n class=\"assign-due-date-popover-content\"\n >\n <cds-date-picker\n *ngIf=\"!obs.hasDueDate\"\n [cdsLayer]=\"1\"\n [label]=\"'Select date'\"\n [placeholder]=\"'dd-mm-jjjj'\"\n dateFormat=\"d/m/Y\"\n [disabled]=\"obs.disabled\"\n (valueChange)=\"onDateValueChange($event)\"\n ></cds-date-picker>\n\n <button\n cdsButton\n class=\"submit-due-date-button\"\n [disabled]=\"!obs.selectedDateString || obs.disabled\"\n (click)=\"onSubmitButtonClick()\"\n >\n {{ 'setTaskDueDate.submitButtonText' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"calendar--add\" size=\"16\"></svg>\n </button>\n </div>\n </cds-toggletip>\n </div>\n</ng-container>\n", styles: [":host ::ng-deep .cds--popover-content{max-inline-size:unset}.due-date-container{display:flex;align-items:center;justify-content:center;position:relative;font-weight:400;font-size:14px;line-height:18px;letter-spacing:.16px;color:var(--cds-link-01)}.due-date-container .bold{font-weight:700}.remove-button{width:100%}.due-date-text{display:flex;justify-content:flex-start;align-items:center;width:100%}.element{opacity:0;visibility:hidden;position:absolute;transition:opacity .3s ease-in-out}.element.active{opacity:1;visibility:visible}.element.main{position:relative}.assign-due-date-popover-content{width:400px;max-inline-size:400px;display:flex;flex-direction:column;gap:16px}.assign-due-date-popover-content .cds--btn{width:100%;max-width:unset}.assign-due-date-popover-content ::ng-deep .cds--date-picker-input__wrapper,.assign-due-date-popover-content ::ng-deep .cds--date-picker-input__wrapper>span,.assign-due-date-popover-content ::ng-deep .cds--date-picker-container,.assign-due-date-popover-content ::ng-deep .cds--date-picker,.assign-due-date-popover-content ::ng-deep .cds--date-picker__input{width:100%}.set-task-due-date-button{width:250px}\n"] }]
123
- }], ctorParameters: () => [{ type: i1.IconService }, { type: i2.TaskService }, { type: i3.CdsThemeService }], propDecorators: { canModifyTask: [{
124
- type: Input
125
- }], task: [{
126
- type: Input
127
- }] } });
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LXRhc2stZHVlLWRhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby90YXNrL3NyYy9saWIvY29tcG9uZW50cy9zZXQtdGFzay1kdWUtZGF0ZS9zZXQtdGFzay1kdWUtZGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL3Rhc2svc3JjL2xpYi9jb21wb25lbnRzL3NldC10YXNrLWR1ZS1kYXRlL3NldC10YXNrLWR1ZS1kYXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUVwRCxPQUFPLEVBQUMsZUFBZSxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFDTCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLFVBQVUsRUFFVixXQUFXLEVBQ1gsZUFBZSxHQUNoQixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHNUMsT0FBTyxFQUFrQix5QkFBeUIsRUFBQyxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7O0FBa0IvRSxNQUFNLE9BQU8sdUJBQXVCO0lBSWxDLElBQW9CLGFBQWEsQ0FBQyxLQUFjO1FBQzlDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLGNBQWMs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QUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVNLG1CQUFtQjtRQUN4QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7K0dBcEdVLHVCQUF1QjttR0FBdkIsdUJBQXVCLCtJQ25EcEMsbTJHQTBHQSw2ckNEakVJLFlBQVksd1VBQ1osZUFBZSwyRkFDZixZQUFZLGdNQUNaLFVBQVUsNE5BQ1YsZUFBZSx5WEFDZixnQkFBZ0IscWZBQ2hCLFdBQVcsMEtBQ1gseUJBQXlCOzs0RkFHaEIsdUJBQXVCO2tCQWhCbkMsU0FBUzsrQkFDRSwyQkFBMkIsY0FHekIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixZQUFZO3dCQUNaLFVBQVU7d0JBQ1YsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLFdBQVc7d0JBQ1gseUJBQXlCO3FCQUMxQjt3SUFNbUIsYUFBYTtzQkFBaEMsS0FBSztnQkFtQmMsSUFBSTtzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7Q29tcG9uZW50LCBJbnB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7UHJvY2Vzc0luc3RhbmNlVGFza30gZnJvbSAnQHZhbHRpbW8vcHJvY2Vzcyc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2ZpbHRlciwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBCdXR0b25Nb2R1bGUsXG4gIERhdGVQaWNrZXJNb2R1bGUsXG4gIEljb25Nb2R1bGUsXG4gIEljb25TZXJ2aWNlLFxuICBMYXllck1vZHVsZSxcbiAgVG9nZ2xldGlwTW9kdWxlLFxufSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbmltcG9ydCB7Q2FsZW5kYXJBZGQxNn0gZnJvbSAnQGNhcmJvbi9pY29ucyc7XG5pbXBvcnQge1Rhc2tTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge1Rhc2t9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge0Nkc1RoZW1lU2VydmljZSwgUmVtb3ZlQ2xhc3NuYW1lc0RpcmVjdGl2ZX0gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tc2V0LXRhc2stZHVlLWRhdGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2V0LXRhc2stZHVlLWRhdGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zZXQtdGFzay1kdWUtZGF0ZS5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBCdXR0b25Nb2R1bGUsXG4gICAgSWNvbk1vZHVsZSxcbiAgICBUb2dnbGV0aXBNb2R1bGUsXG4gICAgRGF0ZVBpY2tlck1vZHVsZSxcbiAgICBMYXllck1vZHVsZSxcbiAgICBSZW1vdmVDbGFzc25hbWVzRGlyZWN0aXZlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTZXRUYXNrRHVlRGF0ZUNvbXBvbmVudCB7XG4gIHB1YmxpYyByZWFkb25seSBjYW5Nb2RpZnlUYXNrU2V0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgY2FuTW9kaWZ5VGFzayQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBASW5wdXQoKSBwdWJsaWMgc2V0IGNhbk1vZGlmeVRhc2sodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNhbk1vZGlmeVRhc2tTZXQkLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5jYW5Nb2RpZnlUYXNrJC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3Rhc2skID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQYXJ0aWFsPFByb2Nlc3NJbnN0YW5jZVRhc2s+IHwgbnVsbD4obnVsbCk7XG5cbiAgcHJpdmF0ZSBnZXQgX3Rhc2soKTogUGFydGlhbDxQcm9jZXNzSW5zdGFuY2VUYXNrPiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl90YXNrJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGhhc0R1ZURhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHNlbGVjdGVkRGF0ZVN0cmluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuXG4gIHByaXZhdGUgZ2V0IF9zZWxlY3RlZERhdGVTdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZERhdGVTdHJpbmckLmdldFZhbHVlKCk7XG4gIH1cblxuICBASW5wdXQoKSBwdWJsaWMgc2V0IHRhc2sodmFsdWU6IFByb2Nlc3NJbnN0YW5jZVRhc2sgfCBUYXNrKSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuICAgIHRoaXMuaGFzRHVlRGF0ZSQubmV4dCghIXZhbHVlLmR1ZSk7XG4gICAgdGhpcy5fdGFzayQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgdGFza0R1ZURhdGUkID0gdGhpcy5fdGFzayQucGlwZShcbiAgICBmaWx0ZXIodGFzayA9PiAhIXRhc2spLFxuICAgIG1hcCh0YXNrID0+IG5ldyBEYXRlKHRhc2suZHVlKSlcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZGlzYWJsZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IG9wZW4kID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgbW91c2VJc092ZXJEdWVEYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHB1YmxpYyByZWFkb25seSB0b2dnbGV0aXBUaGVtZSQgPSB0aGlzLmNkc1RoZW1lU2VydmljZS50b2dnbGV0aXBUaGVtZSQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBpY29uU2VydmljZTogSWNvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0YXNrU2VydmljZTogVGFza1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHNUaGVtZVNlcnZpY2U6IENkc1RoZW1lU2VydmljZVxuICApIHtcbiAgICB0aGlzLmljb25TZXJ2aWNlLnJlZ2lzdGVyQWxsKFtDYWxlbmRhckFkZDE2XSk7XG4gIH1cblxuICBwdWJsaWMgb25EYXRlVmFsdWVDaGFuZ2UodmFsdWU6IERhdGVbXSk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGUgPSBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZVswXTtcbiAgICBpZiAoIWRhdGUpIHJldHVybjtcbiAgICB0aGlzLnNlbGVjdGVkRGF0ZVN0cmluZyQubmV4dChkYXRlLnRvSVNPU3RyaW5nKCkpO1xuICB9XG5cbiAgcHVibGljIG9uU3VibWl0QnV0dG9uQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCQubmV4dCh0cnVlKTtcblxuICAgIHRoaXMudGFza1NlcnZpY2Uuc2V0VGFza0R1ZURhdGUodGhpcy5fdGFzay5pZCwge2R1ZURhdGU6IHRoaXMuX3NlbGVjdGVkRGF0ZVN0cmluZ30pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQkLm5leHQoZmFsc2UpO1xuICAgICAgICB0aGlzLmhhc0R1ZURhdGUkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuX3Rhc2skLm5leHQoey4uLnRoaXMuX3Rhc2ssIGR1ZTogdGhpcy5fc2VsZWN0ZWREYXRlU3RyaW5nfSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlU3RyaW5nJC5uZXh0KCcnKTtcbiAgICAgICAgdGhpcy5jbG9zZVRvZ2dsZXRpcCgpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQkLm5leHQoZmFsc2UpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvblJlbW92ZUJ1dHRvbkNsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQkLm5leHQodHJ1ZSk7XG5cbiAgICB0aGlzLnRhc2tTZXJ2aWNlLnJlbW92ZVRhc2tEdWVEYXRlKHRoaXMuX3Rhc2suaWQpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQkLm5leHQoZmFsc2UpO1xuICAgICAgICB0aGlzLmhhc0R1ZURhdGUkLm5leHQoZmFsc2UpO1xuICAgICAgICB0aGlzLl90YXNrJC5uZXh0KHsuLi50aGlzLl90YXNrLCBkdWU6IG51bGx9KTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICB0aGlzLmRpc2FibGVkJC5uZXh0KGZhbHNlKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNsb3NlVG9nZ2xldGlwKCk6IHZvaWQge1xuICAgIC8vIG5lZWRlZCB0byByZWxpYWJseSB0cmlnZ2VyIHRvZ2dsZSB0aXAgY2xvc3VyZVxuICAgIHRoaXMub3BlbiQubmV4dCh0cnVlKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMub3BlbiQubmV4dChmYWxzZSkpO1xuICB9XG5cbiAgcHVibGljIG9uTW91c2VFbnRlckR1ZURhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5tb3VzZUlzT3ZlckR1ZURhdGUkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgb25Nb3VzZUxlYXZlRHVlRGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLm1vdXNlSXNPdmVyRHVlRGF0ZSQubmV4dChmYWxzZSk7XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cbjxuZy1jb250YWluZXJcbiAgKm5nSWY9XCJcbiAgICAoY2FuTW9kaWZ5VGFza1NldCQgfCBhc3luYykgJiYge1xuICAgICAgaGFzRHVlRGF0ZTogaGFzRHVlRGF0ZSQgfCBhc3luYyxcbiAgICAgIHRhc2tEdWVEYXRlOiB0YXNrRHVlRGF0ZSQgfCBhc3luYyxcbiAgICAgIHNlbGVjdGVkRGF0ZVN0cmluZzogc2VsZWN0ZWREYXRlU3RyaW5nJCB8IGFzeW5jLFxuICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkJCB8IGFzeW5jLFxuICAgICAgbW91c2VJc092ZXJEdWVEYXRlOiBtb3VzZUlzT3ZlckR1ZURhdGUkIHwgYXN5bmMsXG4gICAgICBjYW5Nb2RpZnlUYXNrOiBjYW5Nb2RpZnlUYXNrJCB8IGFzeW5jLFxuICAgIH0gYXMgb2JzXG4gIFwiXG4+XG4gIDxkaXZcbiAgICAqbmdJZj1cIm9icy5jYW5Nb2RpZnlUYXNrIHx8ICghb2JzLmNhbk1vZGlmeVRhc2sgJiYgb2JzLmhhc0R1ZURhdGUpXCJcbiAgICBjbGFzcz1cImR1ZS1kYXRlLWNvbnRhaW5lclwiXG4gICAgKG1vdXNlZW50ZXIpPVwib25Nb3VzZUVudGVyRHVlRGF0ZSgpXCJcbiAgICAobW91c2VsZWF2ZSk9XCJvbk1vdXNlTGVhdmVEdWVEYXRlKClcIlxuICA+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJkdWUtZGF0ZS10ZXh0IGVsZW1lbnRcIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICBhY3RpdmU6IG9icy5jYW5Nb2RpZnlUYXNrID8gb2JzLmhhc0R1ZURhdGUgJiYgIW9icy5tb3VzZUlzT3ZlckR1ZURhdGUgOiBvYnMuaGFzRHVlRGF0ZSxcbiAgICAgIH1cIlxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzPVwiYm9sZFwiPnt7ICdzZXRUYXNrRHVlRGF0ZS5kdWVEYXRlVGV4dCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG5cbiAgICAgICZuYnNwO1xuXG4gICAgICB7eyBvYnMudGFza0R1ZURhdGUgfCBkYXRlOiAnZGQtTU0teXl5eScgfX1cbiAgICA8L2Rpdj5cblxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwib2JzLmNhbk1vZGlmeVRhc2tcIlxuICAgICAgY2RzQnV0dG9uPVwiZ2hvc3RcIlxuICAgICAgY2xhc3M9XCJlbGVtZW50IHJlbW92ZS1idXR0b25cIlxuICAgICAgW25nQ2xhc3NdPVwie2FjdGl2ZTogb2JzLmhhc0R1ZURhdGUgJiYgb2JzLm1vdXNlSXNPdmVyRHVlRGF0ZX1cIlxuICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZFwiXG4gICAgICBzaXplPVwic21cIlxuICAgICAgKGNsaWNrKT1cIm9uUmVtb3ZlQnV0dG9uQ2xpY2soKVwiXG4gICAgPlxuICAgICAge3sgJ3NldFRhc2tEdWVEYXRlLnJlbW92ZUJ1dHRvblRleHQnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG5cbiAgICA8Y2RzLXRvZ2dsZXRpcFxuICAgICAgYWxpZ249XCJib3R0b21cIlxuICAgICAgY2xhc3M9XCJlbGVtZW50IG1haW5cIlxuICAgICAgW2F1dG9BbGlnbl09XCJ0cnVlXCJcbiAgICAgIFtpc09wZW5dPVwib3BlbiQgfCBhc3luY1wiXG4gICAgICBbbmdDbGFzc109XCJ7YWN0aXZlOiAhb2JzLmhhc0R1ZURhdGV9XCJcbiAgICA+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNkc1RvZ2dsZXRpcEJ1dHRvblxuICAgICAgICBbcmVtb3ZlQ2xhc3NuYW1lc109XCJbJ2Nkcy0tdG9nZ2xldGlwLWJ1dHRvbiddXCJcbiAgICAgICAgY2RzQnV0dG9uPVwidGVydGlhcnlcIlxuICAgICAgICBzaXplPVwic21cIlxuICAgICAgICBjbGFzcz1cInNldC10YXNrLWR1ZS1kYXRlLWJ1dHRvblwiXG4gICAgICA+XG4gICAgICAgIHt7ICdzZXRUYXNrRHVlRGF0ZS5idXR0b25UZXh0JyB8IHRyYW5zbGF0ZSB9fVxuXG4gICAgICAgIDxzdmcgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiIGNkc0ljb249XCJjYWxlbmRhci0tYWRkXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGRpdlxuICAgICAgICBjZHNUb2dnbGV0aXBDb250ZW50XG4gICAgICAgIFthdHRyLmRhdGEtY2FyYm9uLXRoZW1lXT1cInRvZ2dsZXRpcFRoZW1lJCB8IGFzeW5jXCJcbiAgICAgICAgY2xhc3M9XCJhc3NpZ24tZHVlLWRhdGUtcG9wb3Zlci1jb250ZW50XCJcbiAgICAgID5cbiAgICAgICAgPGNkcy1kYXRlLXBpY2tlclxuICAgICAgICAgICpuZ0lmPVwiIW9icy5oYXNEdWVEYXRlXCJcbiAgICAgICAgICBbY2RzTGF5ZXJdPVwiMVwiXG4gICAgICAgICAgW2xhYmVsXT1cIidTZWxlY3QgZGF0ZSdcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZGQtbW0tampqaidcIlxuICAgICAgICAgIGRhdGVGb3JtYXQ9XCJkL20vWVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZFwiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uRGF0ZVZhbHVlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICA+PC9jZHMtZGF0ZS1waWNrZXI+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNkc0J1dHRvblxuICAgICAgICAgIGNsYXNzPVwic3VibWl0LWR1ZS1kYXRlLWJ1dHRvblwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFvYnMuc2VsZWN0ZWREYXRlU3RyaW5nIHx8IG9icy5kaXNhYmxlZFwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uU3VibWl0QnV0dG9uQ2xpY2soKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyAnc2V0VGFza0R1ZURhdGUuc3VibWl0QnV0dG9uVGV4dCcgfCB0cmFuc2xhdGUgfX1cblxuICAgICAgICAgIDxzdmcgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiIGNkc0ljb249XCJjYWxlbmRhci0tYWRkXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9jZHMtdG9nZ2xldGlwPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuIl19