@yuuvis/app-inbox 0.9.6 → 0.9.8
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.
package/README.md
CHANGED
|
@@ -18,7 +18,7 @@ import { InboxExtensions } from '@yuuvis/app-inbox/extensions';
|
|
|
18
18
|
export const appConfig: ApplicationConfig = {
|
|
19
19
|
providers: [
|
|
20
20
|
importShellExtensions([
|
|
21
|
-
InboxExtensions
|
|
21
|
+
{ id: 'io.yuuvis.app.inbox.extension', extension: InboxExtensions }
|
|
22
22
|
])
|
|
23
23
|
]
|
|
24
24
|
}
|
|
@@ -11,7 +11,8 @@ import { finalize, tap, debounceTime } from 'rxjs';
|
|
|
11
11
|
import { AppInboxUtils, APP_INBOX_NAME } from '@yuuvis/app-inbox/shared';
|
|
12
12
|
import * as i1$1 from '@angular/router';
|
|
13
13
|
import { RouterModule } from '@angular/router';
|
|
14
|
-
import
|
|
14
|
+
import * as i2$2 from '@yuuvis/client-shell';
|
|
15
|
+
import { YuvClientShellModule } from '@yuuvis/client-shell';
|
|
15
16
|
import * as i1 from '@angular/forms';
|
|
16
17
|
import { FormControl, ReactiveFormsModule, FormGroup } from '@angular/forms';
|
|
17
18
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
@@ -21,7 +22,7 @@ import * as i2 from '@angular/material/form-field';
|
|
|
21
22
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
22
23
|
import * as i1$2 from '@angular/common';
|
|
23
24
|
import { CommonModule } from '@angular/common';
|
|
24
|
-
import * as i2$
|
|
25
|
+
import * as i2$3 from '@angular/material/button';
|
|
25
26
|
import { MatButtonModule } from '@angular/material/button';
|
|
26
27
|
import * as i6 from '@angular/material/paginator';
|
|
27
28
|
import { MatPaginatorModule } from '@angular/material/paginator';
|
|
@@ -31,6 +32,7 @@ import * as i3$2 from '@yuuvis/client-framework/split-view';
|
|
|
31
32
|
import { YuvSplitViewModule } from '@yuuvis/client-framework/split-view';
|
|
32
33
|
import * as i3$1 from '@angular/material/menu';
|
|
33
34
|
import { MatMenuModule } from '@angular/material/menu';
|
|
35
|
+
import { MatDivider } from '@angular/material/divider';
|
|
34
36
|
import * as i4$1 from '@angular/material/tabs';
|
|
35
37
|
import { MatTabsModule } from '@angular/material/tabs';
|
|
36
38
|
import { ObjectMetadataComponent } from '@yuuvis/client-framework/object-details';
|
|
@@ -46,10 +48,11 @@ class AppInboxService {
|
|
|
46
48
|
#sanitizer = inject(DomSanitizer);
|
|
47
49
|
iconsByWorkflowType = {};
|
|
48
50
|
PAGE_SIZE = 20;
|
|
51
|
+
DEFAULT_SORT_PARAM = 'createTime,desc';
|
|
49
52
|
busy = signal(false);
|
|
50
53
|
inbox = signalState({
|
|
51
54
|
tasks: [],
|
|
52
|
-
sort:
|
|
55
|
+
sort: this.DEFAULT_SORT_PARAM,
|
|
53
56
|
isAssigned: true,
|
|
54
57
|
});
|
|
55
58
|
disableBriefRepresentation = signal(false);
|
|
@@ -140,7 +143,7 @@ class AppInboxService {
|
|
|
140
143
|
}
|
|
141
144
|
applySort(sort, order) {
|
|
142
145
|
patchState(this.inbox, {
|
|
143
|
-
sort: `${sort},${order}
|
|
146
|
+
sort: sort ? `${sort},${order}` : this.DEFAULT_SORT_PARAM,
|
|
144
147
|
});
|
|
145
148
|
this.fetchTasks(0);
|
|
146
149
|
}
|
|
@@ -276,29 +279,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
276
279
|
class AppInboxComponent {
|
|
277
280
|
appName = APP_INBOX_NAME;
|
|
278
281
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AppInboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
279
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: AppInboxComponent, isStandalone: true, selector: "ymi-app-inbox", ngImport: i0, template:
|
|
280
|
-
<header>
|
|
281
|
-
<yuv-app-logo [label]="appName"></yuv-app-logo>
|
|
282
|
-
<ymi-search></ymi-search>
|
|
283
|
-
</header>
|
|
284
|
-
<main>
|
|
285
|
-
<router-outlet></router-outlet>
|
|
286
|
-
</main>
|
|
287
|
-
`, isInline: true, styles: [":host{display:flex;flex-direction:column;height:100%;width:100%}:host header{display:grid;grid-template-rows:auto auto var(--ymt-spacing-s);grid-template-columns:auto 1fr var(--ymt-spacing-s);grid-template-areas:\"logo . .\" \". search .\" \". . .\";border-block-end:1px solid var(--ymt-outline-variant)}:host header yuv-app-logo{grid-area:logo}:host header ymi-search{grid-area:search;justify-self:end}:host main{flex:1;background-color:var(--ymt-surface);overflow:hidden}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$1.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: SearchComponent, selector: "ymi-search" }, { kind: "component", type: AppLogoComponent, selector: "yuv-app-logo", inputs: ["icon", "label"] }] });
|
|
282
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: AppInboxComponent, isStandalone: true, selector: "ymi-app-inbox", ngImport: i0, template: "<ng-template yuvAppHeaderSlot=\"search\"><ymi-search></ymi-search></ng-template>\n<main>\n <router-outlet></router-outlet>\n</main>\n", styles: [":host{display:flex;flex-direction:column;height:100%;width:100%}:host header{display:grid;grid-template-rows:auto auto var(--ymt-spacing-s);grid-template-columns:auto 1fr var(--ymt-spacing-s);grid-template-areas:\"logo . .\" \". search .\" \". . .\";border-block-end:1px solid var(--ymt-outline-variant)}:host header yuv-app-logo{grid-area:logo}:host header ymi-search{grid-area:search;justify-self:end}:host main{flex:1;background-color:var(--ymt-surface);overflow:hidden}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$1.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: SearchComponent, selector: "ymi-search" }, { kind: "ngmodule", type: YuvClientShellModule }, { kind: "directive", type: i2$2.YuvAppHeaderSlotDirective, selector: "ng-template[yuvAppHeaderSlot]", inputs: ["yuvAppHeaderSlot"] }] });
|
|
288
283
|
}
|
|
289
284
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AppInboxComponent, decorators: [{
|
|
290
285
|
type: Component,
|
|
291
|
-
args: [{ selector: 'ymi-app-inbox', standalone: true, imports: [TranslateModule, RouterModule,
|
|
292
|
-
SearchComponent,
|
|
293
|
-
AppLogoComponent], template: `
|
|
294
|
-
<header>
|
|
295
|
-
<yuv-app-logo [label]="appName"></yuv-app-logo>
|
|
296
|
-
<ymi-search></ymi-search>
|
|
297
|
-
</header>
|
|
298
|
-
<main>
|
|
299
|
-
<router-outlet></router-outlet>
|
|
300
|
-
</main>
|
|
301
|
-
`, styles: [":host{display:flex;flex-direction:column;height:100%;width:100%}:host header{display:grid;grid-template-rows:auto auto var(--ymt-spacing-s);grid-template-columns:auto 1fr var(--ymt-spacing-s);grid-template-areas:\"logo . .\" \". search .\" \". . .\";border-block-end:1px solid var(--ymt-outline-variant)}:host header yuv-app-logo{grid-area:logo}:host header ymi-search{grid-area:search;justify-self:end}:host main{flex:1;background-color:var(--ymt-surface);overflow:hidden}\n"] }]
|
|
286
|
+
args: [{ selector: 'ymi-app-inbox', standalone: true, imports: [TranslateModule, RouterModule, SearchComponent, YuvClientShellModule], template: "<ng-template yuvAppHeaderSlot=\"search\"><ymi-search></ymi-search></ng-template>\n<main>\n <router-outlet></router-outlet>\n</main>\n", styles: [":host{display:flex;flex-direction:column;height:100%;width:100%}:host header{display:grid;grid-template-rows:auto auto var(--ymt-spacing-s);grid-template-columns:auto 1fr var(--ymt-spacing-s);grid-template-areas:\"logo . .\" \". search .\" \". . .\";border-block-end:1px solid var(--ymt-outline-variant)}:host header yuv-app-logo{grid-area:logo}:host header ymi-search{grid-area:search;justify-self:end}:host main{flex:1;background-color:var(--ymt-surface);overflow:hidden}\n"] }]
|
|
302
287
|
}] });
|
|
303
288
|
|
|
304
289
|
class SortComponent {
|
|
@@ -310,7 +295,7 @@ class SortComponent {
|
|
|
310
295
|
]);
|
|
311
296
|
sortFields = computed(() => [...this.sortOptions(), ...this.orderOptions()]);
|
|
312
297
|
sortForm = new FormGroup({
|
|
313
|
-
sort: new FormControl(''),
|
|
298
|
+
sort: new FormControl('', { nonNullable: true }),
|
|
314
299
|
order: new FormControl('asc', { nonNullable: true }),
|
|
315
300
|
});
|
|
316
301
|
sortChange = output();
|
|
@@ -318,13 +303,14 @@ class SortComponent {
|
|
|
318
303
|
this.translate.onLangChange.pipe(takeUntilDestroyed()).subscribe(() => {
|
|
319
304
|
this.sortOptions.set(this.#setSortOptions());
|
|
320
305
|
});
|
|
306
|
+
this.sortForm.valueChanges.pipe(takeUntilDestroyed()).subscribe((form) => console.log('sortForm: ', form));
|
|
321
307
|
}
|
|
322
308
|
#setSortOptions() {
|
|
323
309
|
const translations = {
|
|
324
|
-
|
|
310
|
+
createTime: this.translate.instant('io.yuuvis.app.inbox.task.sort.created'),
|
|
325
311
|
description: this.translate.instant('io.yuuvis.app.inbox.task.sort.description'),
|
|
326
312
|
duedate: this.translate.instant('io.yuuvis.app.inbox.task.sort.duedate'),
|
|
327
|
-
|
|
313
|
+
name: this.translate.instant('io.yuuvis.app.inbox.task.sort.taskname'),
|
|
328
314
|
};
|
|
329
315
|
return ['createTime', 'description', 'dueDate', 'name'].map((f) => ({
|
|
330
316
|
label: translations[f] || f,
|
|
@@ -335,7 +321,7 @@ class SortComponent {
|
|
|
335
321
|
selectSort(type, value) {
|
|
336
322
|
const sortCtrl = this.sortForm.get('sort');
|
|
337
323
|
sortCtrl?.value === value
|
|
338
|
-
? sortCtrl?.
|
|
324
|
+
? sortCtrl?.reset()
|
|
339
325
|
: this.sortForm.get(type)?.setValue(value);
|
|
340
326
|
this.onSelectionChange();
|
|
341
327
|
}
|
|
@@ -344,11 +330,11 @@ class SortComponent {
|
|
|
344
330
|
this.sortChange.emit({ sort: sort, order: order });
|
|
345
331
|
}
|
|
346
332
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SortComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
347
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: SortComponent, isStandalone: true, selector: "ymi-sort", outputs: { sortChange: "sortChange" }, ngImport: i0, template: "\n\n\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" title=\"{{ 'yuv.app.drive.sort.tooltip' | translate }}\">\n <mat-icon>swap_vert</mat-icon>\n </button>\n\n <mat-menu #menu=\"matMenu\">\n @for (option of sortFields(); track $index) {\n @let selected = sortForm.value[option.type] === option.value;\n <button mat-menu-item (click)=\"selectSort(option.type, option.value)\">\n <mat-icon>{{ selected ? 'check_box' : 'check_box_outline_blank' }}</mat-icon>\n {{ option.label }}\n </button>\n @if (sortFields().length - 3 === $index) {\n
|
|
333
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: SortComponent, isStandalone: true, selector: "ymi-sort", outputs: { sortChange: "sortChange" }, ngImport: i0, template: "\n\n\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" title=\"{{ 'yuv.app.drive.sort.tooltip' | translate }}\">\n <mat-icon>swap_vert</mat-icon>\n </button>\n\n <mat-menu #menu=\"matMenu\">\n @for (option of sortFields(); track $index) {\n @let selected = sortForm.value[option.type] === option.value;\n <button mat-menu-item (click)=\"selectSort(option.type, option.value)\">\n <mat-icon>{{ selected ? 'check_box' : 'check_box_outline_blank' }}</mat-icon>\n {{ option.label }}\n </button>\n @if (sortFields().length - 3 === $index) {\n <mat-divider style=\"border-top-color: var(--ymt-outline-variant)\"></mat-divider>\n }\n }\n </mat-menu>\n \n\n\n\n\n\n\n\n\n<!-- <div class=\"sort-container\">\n <button\n #sortButton\n (click)=\"toggleDialog()\"\n class=\"sort-button\"\n title=\"{{ 'io.yuuvis.app.inbox.task.sort.title' | translate }}\"\n [attr.aria-haspopup]=\"true\"\n [attr.aria-expanded]=\"dialogOpen() ? 'true' : 'false'\"\n >\n <mat-icon>swap_vert</mat-icon>\n </button>\n\n <dialog\n #sortDialog\n popover\n id=\"sort\"\n class=\"sort-menu\"\n [style.top.px]=\"position().top\"\n [style.left.px]=\"position().left\"\n >\n <ol\n tabindex=\"0\"\n class=\"sort-group\"\n role=\"listbox\"\n aria-multiselectable=\"false\"\n >\n @for (sortKey of sorts(); track sortKey) {\n <li\n (click)=\"selectSort(sortKey)\"\n class=\"sort-item sort-group-item\"\n [class.selected]=\"isSelectedSort(sortKey)\"\n [attr.aria-selected]=\"isSelectedSort(sortKey)\"\n role=\"option\"\n tabindex=\"0\"\n >\n @if (isSelectedSort(sortKey)) {\n <div class=\"circle-icon\"></div>\n }\n <div class=\"label\">{{ cachedSorts.get(sortKey)?.translation }}</div>\n </li>\n }\n\n <div class=\"divider\"></div>\n\n <li\n class=\"sort-item sort-order-item\"\n role=\"option\"\n tabindex=\"0\"\n [class.selected]=\"sortOrder() === 'asc'\"\n (click)=\"selectOrder('asc')\"\n [attr.aria-selected]=\"sortOrder() === 'asc'\"\n >\n <div class=\"label\">\n {{ \"io.yuuvis.app.inbox.task.sort.ascending\" | translate }}\n </div>\n </li>\n\n <li\n class=\"sort-item sort-order-item\"\n role=\"option\"\n tabindex=\"0\"\n [class.selected]=\"sortOrder() === 'desc'\"\n (click)=\"selectOrder('desc')\"\n [attr.aria-selected]=\"sortOrder() === 'desc'\"\n >\n <div class=\"label\">\n {{ \"io.yuuvis.app.inbox.task.sort.descending\" | translate }}\n </div>\n </li>\n </ol>\n </dialog>\n</div> -->\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i3$1.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i3$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i3$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }, { kind: "component", type: MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }] });
|
|
348
334
|
}
|
|
349
335
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SortComponent, decorators: [{
|
|
350
336
|
type: Component,
|
|
351
|
-
args: [{ selector: 'ymi-sort', standalone: true, imports: [MatIconModule, MatButtonModule, MatMenuModule, TranslateModule], template: "\n\n\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" title=\"{{ 'yuv.app.drive.sort.tooltip' | translate }}\">\n <mat-icon>swap_vert</mat-icon>\n </button>\n\n <mat-menu #menu=\"matMenu\">\n @for (option of sortFields(); track $index) {\n @let selected = sortForm.value[option.type] === option.value;\n <button mat-menu-item (click)=\"selectSort(option.type, option.value)\">\n <mat-icon>{{ selected ? 'check_box' : 'check_box_outline_blank' }}</mat-icon>\n {{ option.label }}\n </button>\n @if (sortFields().length - 3 === $index) {\n
|
|
337
|
+
args: [{ selector: 'ymi-sort', standalone: true, imports: [MatIconModule, MatButtonModule, MatMenuModule, TranslateModule, MatDivider], template: "\n\n\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" title=\"{{ 'yuv.app.drive.sort.tooltip' | translate }}\">\n <mat-icon>swap_vert</mat-icon>\n </button>\n\n <mat-menu #menu=\"matMenu\">\n @for (option of sortFields(); track $index) {\n @let selected = sortForm.value[option.type] === option.value;\n <button mat-menu-item (click)=\"selectSort(option.type, option.value)\">\n <mat-icon>{{ selected ? 'check_box' : 'check_box_outline_blank' }}</mat-icon>\n {{ option.label }}\n </button>\n @if (sortFields().length - 3 === $index) {\n <mat-divider style=\"border-top-color: var(--ymt-outline-variant)\"></mat-divider>\n }\n }\n </mat-menu>\n \n\n\n\n\n\n\n\n\n<!-- <div class=\"sort-container\">\n <button\n #sortButton\n (click)=\"toggleDialog()\"\n class=\"sort-button\"\n title=\"{{ 'io.yuuvis.app.inbox.task.sort.title' | translate }}\"\n [attr.aria-haspopup]=\"true\"\n [attr.aria-expanded]=\"dialogOpen() ? 'true' : 'false'\"\n >\n <mat-icon>swap_vert</mat-icon>\n </button>\n\n <dialog\n #sortDialog\n popover\n id=\"sort\"\n class=\"sort-menu\"\n [style.top.px]=\"position().top\"\n [style.left.px]=\"position().left\"\n >\n <ol\n tabindex=\"0\"\n class=\"sort-group\"\n role=\"listbox\"\n aria-multiselectable=\"false\"\n >\n @for (sortKey of sorts(); track sortKey) {\n <li\n (click)=\"selectSort(sortKey)\"\n class=\"sort-item sort-group-item\"\n [class.selected]=\"isSelectedSort(sortKey)\"\n [attr.aria-selected]=\"isSelectedSort(sortKey)\"\n role=\"option\"\n tabindex=\"0\"\n >\n @if (isSelectedSort(sortKey)) {\n <div class=\"circle-icon\"></div>\n }\n <div class=\"label\">{{ cachedSorts.get(sortKey)?.translation }}</div>\n </li>\n }\n\n <div class=\"divider\"></div>\n\n <li\n class=\"sort-item sort-order-item\"\n role=\"option\"\n tabindex=\"0\"\n [class.selected]=\"sortOrder() === 'asc'\"\n (click)=\"selectOrder('asc')\"\n [attr.aria-selected]=\"sortOrder() === 'asc'\"\n >\n <div class=\"label\">\n {{ \"io.yuuvis.app.inbox.task.sort.ascending\" | translate }}\n </div>\n </li>\n\n <li\n class=\"sort-item sort-order-item\"\n role=\"option\"\n tabindex=\"0\"\n [class.selected]=\"sortOrder() === 'desc'\"\n (click)=\"selectOrder('desc')\"\n [attr.aria-selected]=\"sortOrder() === 'desc'\"\n >\n <div class=\"label\">\n {{ \"io.yuuvis.app.inbox.task.sort.descending\" | translate }}\n </div>\n </li>\n </ol>\n </dialog>\n</div> -->\n" }]
|
|
352
338
|
}], ctorParameters: () => [] });
|
|
353
339
|
|
|
354
340
|
class TaskComponent {
|
|
@@ -623,7 +609,7 @@ class InboxPageComponent {
|
|
|
623
609
|
return this.#inboxService.inbox().isAssigned;
|
|
624
610
|
}
|
|
625
611
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: InboxPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
626
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: InboxPageComponent, isStandalone: true, selector: "ymi-inbox", host: { properties: { "class.pagination": "inbox().pagination" } }, viewQueries: [{ propertyName: "listElement", first: true, predicate: ListComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<mat-progress-bar\n mode=\"indeterminate\"\n [ngClass]=\"{ busy: busy() }\"\n></mat-progress-bar>\n\n<yuv-split-view [gutterSize]=\"1\">\n <!-- list of inbox items -->\n <ng-template yuvSplitArea [size]=\"40\">\n <div class=\"list\">\n <header>\n <h1>{{ \"io.yuuvis.app.inbox.task.header.title\" | translate }}</h1>\n <ymi-sort (sortChange)=\"updateSort($event)\" />\n <div class=\"toolbar\">\n <button\n (click)=\"refresh()\"\n class=\"icon-button\"\n mat-icon-button\n title=\"{{\n 'io.yuuvis.app.inbox.task.header.button.refresh.title' | translate\n }}\"\n >\n <mat-icon>refresh</mat-icon>\n </button>\n\n <!-- TODO: enable again once the feature is supported on the backend side -->\n <!-- <button\n (click)=\"groupTasksByWeek()\"\n mat-icon-button\n class=\"icon-button\"\n title=\"{{\n 'io.yuuvis.app.inbox.task.header.button.week.title' | translate\n }}\"\n [class.active]=\"isWeekActive\"\n >\n <mat-icon>calendar_month</mat-icon>\n </button>\n\n <button\n (click)=\"groupTasksByOverdue()\"\n mat-icon-button\n class=\"icon-button\"\n title=\"{{\n 'io.yuuvis.app.inbox.task.header.button.overdue.title' | translate\n }}\"\n [class.active]=\"isOverdueActive\"\n >\n <mat-icon>schedule</mat-icon>\n </button> -->\n\n <button\n (click)=\"groupItems()\"\n mat-icon-button\n class=\"icon-button\"\n title=\"{{\n 'io.yuuvis.app.inbox.task.header.button.group.title' | translate\n }}\"\n [class.active]=\"!isAssigned\"\n >\n <mat-icon>group</mat-icon>\n </button>\n </div>\n </header>\n\n <yuv-list\n (itemSelect)=\"itemSelected($event)\"\n aria-label=\"Task inbox list\"\n >\n @if (!busy()) { @for(i of tasks(); track i.id){\n\n <div yuvListItem>\n <mat-icon\n [svgIcon]=\"getTaskIconKey(i.processDefinition.idPrefix)\"\n ></mat-icon>\n <div class=\"title\">{{ i.name }}</div>\n <div class=\"process meta\">{{ i.processDefinition.idPrefix }}</div>\n\n <time\n class=\"due meta\"\n [attr.datetime]=\"i.dueDate\"\n [class.overdue]=\"isDateOverdue(i.dueDate)\"\n >\n {{ i.dueDate ? (i.dueDate | date : \"dd/MM/yyyy\") : \"\" }}\n </time>\n </div>\n } }\n </yuv-list>\n @let pg = inbox().pagination; @if (pg) {\n <mat-paginator\n class=\"paginator\"\n [length]=\"pg?.total\"\n [pageSize]=\"inboxPageSize\"\n aria-label=\"Select page\"\n (page)=\"changePage($event)\"\n hidePageSize\n >\n </mat-paginator>\n }\n </div>\n </ng-template>\n <ng-template yuvSplitArea [size]=\"60\">\n <ymi-task [task]=\"task()\" (taskFinished)=\"onTaskFinished()\"></ymi-task>\n </ng-template>\n</yuv-split-view>\n", styles: [":host{--split-gutter-background-color: var(--ymt-outline-variant)}:host mat-paginator{border-block-start:1px solid var(--ymt-outline-variant)}:host mat-progress-bar{position:absolute;opacity:0}:host mat-progress-bar.busy{opacity:1}:host .list{display:grid;grid-template-rows:auto 1fr auto;grid-template-columns:1fr;grid-template-areas:\"header\" \"list\" \"paging\";height:100%}:host .list>header{grid-area:header;display:grid;border-block-end:1px solid var(--ymt-outline-variant);grid-template-columns:var(--ymt-spacing-s) 1fr auto var(--ymt-spacing-s);grid-template-rows:auto auto;align-items:center;grid-template-areas:\"toolbar toolbar toolbar toolbar\" \". title sort .\"}:host .list>header .toolbar{grid-area:toolbar;display:flex;flex-direction:row;align-items:center;justify-content:flex-start;padding:var(--ymt-spacing-s);gap:var(--ymt-spacing-s)}:host .list>header .toolbar>button.active{background-color:var(--ymt-selection-background)}:host .list>header h1{grid-area:title;font:var(--ymt-font-headline-medium)}:host .list>header ymi-sort{grid-area:sort}:host .list yuv-list{grid-area:list}:host yuv-split-view{height:100%}:host [yuvListItem]{--list-item-hover-background: var(--ymt-focus-background);padding:var(--ymt-spacing-m) var(--ymt-spacing-l);display:grid;grid-template-columns:auto 1fr auto;grid-template-rows:auto auto;grid-template-areas:\"icon title process\" \"icon title due\";align-items:center;row-gap:var(--ymt-spacing-s);column-gap:var(--ymt-spacing-m)}:host [yuvListItem]:not(:last-child){border-block-end:1px solid var(--ymt-outline-variant)}:host [yuvListItem] mat-icon{grid-area:icon}:host [yuvListItem] .title{grid-area:title;font:var(--ymt-font-title-small)}:host [yuvListItem] .process{grid-area:process;text-overflow:ellipsis;overflow:hidden}:host [yuvListItem] .due{grid-area:due;justify-self:end;padding:0 var(--ymt-spacing-xs);border-radius:var(--ymt-corner-xs)}:host [yuvListItem] .due.overdue{background-color:var(--ymt-danger-container);color:var(--ymt-on-danger-container)}:host [yuvListItem] .meta{font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i1$2.DatePipe, name: "date" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: YuvSplitViewModule }, { kind: "directive", type: i3$2.SplitAreaDirective, selector: "[yuvSplitArea]", inputs: ["size", "minSize", "maxSize", "panelClass", "visible"] }, { kind: "component", type: i3$2.SplitViewComponent, selector: "yuv-split-view", inputs: ["direction", "gutterSize", "restrictMove", "disabled", "layoutSettingsID"], outputs: ["layoutSettingsChange", "dragStart", "dragEnd", "gutterClick", "gutterDblClick"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$
|
|
612
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: InboxPageComponent, isStandalone: true, selector: "ymi-inbox", host: { properties: { "class.pagination": "inbox().pagination" } }, viewQueries: [{ propertyName: "listElement", first: true, predicate: ListComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<mat-progress-bar\n mode=\"indeterminate\"\n [ngClass]=\"{ busy: busy() }\"\n></mat-progress-bar>\n\n<yuv-split-view [gutterSize]=\"1\">\n <!-- list of inbox items -->\n <ng-template yuvSplitArea [size]=\"40\">\n <div class=\"list\">\n <header>\n <h1>{{ \"io.yuuvis.app.inbox.task.header.title\" | translate }}</h1>\n <ymi-sort (sortChange)=\"updateSort($event)\" />\n <div class=\"toolbar\">\n <button\n (click)=\"refresh()\"\n class=\"icon-button\"\n mat-icon-button\n title=\"{{\n 'io.yuuvis.app.inbox.task.header.button.refresh.title' | translate\n }}\"\n >\n <mat-icon>refresh</mat-icon>\n </button>\n\n <!-- TODO: enable again once the feature is supported on the backend side -->\n <!-- <button\n (click)=\"groupTasksByWeek()\"\n mat-icon-button\n class=\"icon-button\"\n title=\"{{\n 'io.yuuvis.app.inbox.task.header.button.week.title' | translate\n }}\"\n [class.active]=\"isWeekActive\"\n >\n <mat-icon>calendar_month</mat-icon>\n </button>\n\n <button\n (click)=\"groupTasksByOverdue()\"\n mat-icon-button\n class=\"icon-button\"\n title=\"{{\n 'io.yuuvis.app.inbox.task.header.button.overdue.title' | translate\n }}\"\n [class.active]=\"isOverdueActive\"\n >\n <mat-icon>schedule</mat-icon>\n </button> -->\n\n <button\n (click)=\"groupItems()\"\n mat-icon-button\n class=\"icon-button\"\n title=\"{{\n 'io.yuuvis.app.inbox.task.header.button.group.title' | translate\n }}\"\n [class.active]=\"!isAssigned\"\n >\n <mat-icon>group</mat-icon>\n </button>\n </div>\n </header>\n\n <yuv-list\n (itemSelect)=\"itemSelected($event)\"\n aria-label=\"Task inbox list\"\n >\n @if (!busy()) { @for(i of tasks(); track i.id){\n\n <div yuvListItem>\n <mat-icon\n [svgIcon]=\"getTaskIconKey(i.processDefinition.idPrefix)\"\n ></mat-icon>\n <div class=\"title\">{{ i.name }}</div>\n <div class=\"process meta\">{{ i.processDefinition.idPrefix }}</div>\n\n <time\n class=\"due meta\"\n [attr.datetime]=\"i.dueDate\"\n [class.overdue]=\"isDateOverdue(i.dueDate)\"\n >\n {{ i.dueDate ? (i.dueDate | date : \"dd/MM/yyyy\") : \"\" }}\n </time>\n </div>\n } }\n </yuv-list>\n @let pg = inbox().pagination; @if (pg) {\n <mat-paginator\n class=\"paginator\"\n [length]=\"pg?.total\"\n [pageSize]=\"inboxPageSize\"\n aria-label=\"Select page\"\n (page)=\"changePage($event)\"\n hidePageSize\n >\n </mat-paginator>\n }\n </div>\n </ng-template>\n <ng-template yuvSplitArea [size]=\"60\">\n <ymi-task [task]=\"task()\" (taskFinished)=\"onTaskFinished()\"></ymi-task>\n </ng-template>\n</yuv-split-view>\n", styles: [":host{--split-gutter-background-color: var(--ymt-outline-variant)}:host mat-paginator{border-block-start:1px solid var(--ymt-outline-variant)}:host mat-progress-bar{position:absolute;opacity:0}:host mat-progress-bar.busy{opacity:1}:host .list{display:grid;grid-template-rows:auto 1fr auto;grid-template-columns:1fr;grid-template-areas:\"header\" \"list\" \"paging\";height:100%}:host .list>header{grid-area:header;display:grid;border-block-end:1px solid var(--ymt-outline-variant);grid-template-columns:var(--ymt-spacing-s) 1fr auto var(--ymt-spacing-s);grid-template-rows:auto auto;align-items:center;grid-template-areas:\"toolbar toolbar toolbar toolbar\" \". title sort .\"}:host .list>header .toolbar{grid-area:toolbar;display:flex;flex-direction:row;align-items:center;justify-content:flex-start;padding:var(--ymt-spacing-s);gap:var(--ymt-spacing-s)}:host .list>header .toolbar>button.active{background-color:var(--ymt-selection-background)}:host .list>header h1{grid-area:title;font:var(--ymt-font-headline-medium)}:host .list>header ymi-sort{grid-area:sort}:host .list yuv-list{grid-area:list}:host yuv-split-view{height:100%}:host [yuvListItem]{--list-item-hover-background: var(--ymt-focus-background);padding:var(--ymt-spacing-m) var(--ymt-spacing-l);display:grid;grid-template-columns:auto 1fr auto;grid-template-rows:auto auto;grid-template-areas:\"icon title process\" \"icon title due\";align-items:center;row-gap:var(--ymt-spacing-s);column-gap:var(--ymt-spacing-m)}:host [yuvListItem]:not(:last-child){border-block-end:1px solid var(--ymt-outline-variant)}:host [yuvListItem] mat-icon{grid-area:icon}:host [yuvListItem] .title{grid-area:title;font:var(--ymt-font-title-small)}:host [yuvListItem] .process{grid-area:process;text-overflow:ellipsis;overflow:hidden}:host [yuvListItem] .due{grid-area:due;justify-self:end;padding:0 var(--ymt-spacing-xs);border-radius:var(--ymt-corner-xs)}:host [yuvListItem] .due.overdue{background-color:var(--ymt-danger-container);color:var(--ymt-on-danger-container)}:host [yuvListItem] .meta{font:var(--ymt-font-body-subtle);color:var(--ymt-text-color-subtle)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i1$2.DatePipe, name: "date" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: YuvSplitViewModule }, { kind: "directive", type: i3$2.SplitAreaDirective, selector: "[yuvSplitArea]", inputs: ["size", "minSize", "maxSize", "panelClass", "visible"] }, { kind: "component", type: i3$2.SplitViewComponent, selector: "yuv-split-view", inputs: ["direction", "gutterSize", "restrictMove", "disabled", "layoutSettingsID"], outputs: ["layoutSettingsChange", "dragStart", "dragEnd", "gutterClick", "gutterDblClick"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i6.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "component", type: MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: ListComponent, selector: "yuv-list", inputs: ["multiselect", "selfHandleSelection", "disableSelection"], outputs: ["itemSelect", "itemFocus"] }, { kind: "component", type: TaskComponent, selector: "ymi-task", inputs: ["task"], outputs: ["taskFinished"] }, { kind: "component", type: SortComponent, selector: "ymi-sort", outputs: ["sortChange"] }, { kind: "directive", type: ListItemDirective, selector: "[yuvListItem]", inputs: ["disabled", "active", "selected"] }] });
|
|
627
613
|
}
|
|
628
614
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: InboxPageComponent, decorators: [{
|
|
629
615
|
type: Component,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yuuvis-app-inbox.mjs","sources":["../../../../projects/yuuvis/app-inbox/src/lib/app-inbox.service.ts","../../../../projects/yuuvis/app-inbox/src/lib/components/search/search.component.ts","../../../../projects/yuuvis/app-inbox/src/lib/components/search/search.component.html","../../../../projects/yuuvis/app-inbox/src/lib/app-inbox.component.ts","../../../../projects/yuuvis/app-inbox/src/lib/components/sort/sort.component.ts","../../../../projects/yuuvis/app-inbox/src/lib/components/sort/sort.component.html","../../../../projects/yuuvis/app-inbox/src/lib/components/task/task.component.ts","../../../../projects/yuuvis/app-inbox/src/lib/components/task/task.component.html","../../../../projects/yuuvis/app-inbox/src/lib/pages/inbox/inbox.component.ts","../../../../projects/yuuvis/app-inbox/src/lib/pages/inbox/inbox.component.html","../../../../projects/yuuvis/app-inbox/src/lib/lib.routes.ts","../../../../projects/yuuvis/app-inbox/src/yuuvis-app-inbox.ts"],"sourcesContent":["import { HttpParams } from '@angular/common/http';\nimport { computed, inject, Injectable, signal } from '@angular/core';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { patchState, signalState } from '@ngrx/signals';\nimport {\n ApiBase,\n BackendService,\n ConfigService,\n ProcessAction,\n ProcessPostPayload\n} from '@yuuvis/client-core';\nimport { ObjectFormOptions } from '@yuuvis/client-framework/object-form';\nimport { finalize, Observable, tap } from 'rxjs';\nimport { AppInboxUtils, InboxState, Task, TasksResponse } from '@yuuvis/app-inbox/shared';\n\ntype FilterType = 'week' | 'overdue' | 'done' | 'none';\n@Injectable({\n providedIn: 'root',\n})\nexport class AppInboxService {\n #backend = inject(BackendService);\n #iconRegistry = inject(MatIconRegistry);\n #configService = inject(ConfigService);\n readonly #sanitizer = inject(DomSanitizer);\n iconsByWorkflowType: Record<string, string> = {};\n\n PAGE_SIZE = 20;\n\n busy = signal<boolean>(false);\n inbox = signalState<InboxState>({\n tasks: [],\n sort: 'createTime,desc',\n isAssigned: true,\n });\n\n disableBriefRepresentation = signal<boolean>(false);\n startFormOptions = signal<ObjectFormOptions | null>(null);\n\n /** Active filter for UI display. 'none' disables filtering. */\n activeFilter = signal<FilterType>('none');\n\n /**\n * Triggers fetching of tasks from the backend. This will update the inbox state.\n * @param page page number to fetch. Default is 0.\n * @param includeProcessVariables Whether to include process variables in the response. Default is true.\n * @param briefRepresentation Whether to use brief representation of the task. Default is true.\n */\n fetchTasks(page = 0) {\n let p = new HttpParams()\n .set('size', this.PAGE_SIZE)\n .set('sort', this.inbox().sort)\n .set('isAssigned', this.inbox().isAssigned)\n .set('page', page)\n .set('includeProcessVariables', true)\n .set('briefRepresentation', false);\n\n const sc = this.inbox().searchConditions as Record<string, any>;\n if (sc) {\n Object.keys(sc).forEach((key) => {\n p = p.set(key, sc[key]);\n });\n }\n\n this.busy.set(true);\n this.#backend\n .get(`/bpm/inbox?${p}`)\n .pipe(finalize(() => this.busy.set(false)))\n .subscribe((res: TasksResponse) => {\n const tasks = res.objects;\n patchState(this.inbox, {\n tasks: tasks,\n pagination:\n res.totalNumItems > this.PAGE_SIZE\n ? {\n page: page + 1,\n pages: Math.ceil(res.totalNumItems / this.PAGE_SIZE),\n total: res.totalNumItems,\n }\n : undefined,\n });\n const types = Array.from(\n new Set(\n tasks.map((t: any) => t.processDefinition?.idPrefix).filter(Boolean)\n )\n );\n\n types.forEach((type) => {\n if (!this.iconsByWorkflowType[this.#getIconKey(type as string)]) {\n this.loadWorkflowIcon(type as string);\n }\n });\n });\n }\n\n #getIconKey(type: string): string {\n return AppInboxUtils.getIconKey(type);\n }\n\n getTaskIconKey(type: string): string {\n return `${AppInboxUtils.getIconNamespace()}:${this.#getIconKey(type)}`;\n }\n\n /**\n * Computed signal: filtered view of tasks for the UI,\n * always derived from the last backend-fetched list and current activeFilter.\n * Never mutates primary state.\n */\n filteredTasks = computed<Task[]>(() => {\n const tasks = this.inbox().tasks;\n switch (this.activeFilter()) {\n case 'week':\n return this.#filterByWeek(tasks);\n case 'overdue':\n return this.#filterByOverdue(tasks);\n // case 'done':\n // return this.#filterByDone(tasks);\n case 'none':\n default:\n return tasks;\n }\n });\n\n isDateOverdue(dateInput?: string | Date): boolean {\n if (!dateInput) return false;\n const due = new Date(dateInput);\n return !isNaN(due.getTime()) && due < new Date();\n }\n\n loadWorkflowIcon(type: string) {\n const iconKey = this.#getIconKey(type);\n // register workflow icon in registry\n const uri = `${this.#configService.getApiBase(\n ApiBase.apiWeb,\n true\n )}/resources/icons/${iconKey}?fallback=bpm:default`;\n this.#iconRegistry.addSvgIconInNamespace(\n AppInboxUtils.getIconNamespace(),\n iconKey,\n this.#sanitizer.bypassSecurityTrustResourceUrl(uri)\n );\n this.iconsByWorkflowType[iconKey] = iconKey;\n }\n\n applySort(sort: string, order: 'asc' | 'desc') {\n patchState(this.inbox, {\n sort: `${sort},${order}`,\n });\n this.fetchTasks(0);\n }\n\n searchByName(term: string) {\n patchState(this.inbox, {\n searchConditions: {\n nameLikeIgnoreCase: `%${term}%`,\n },\n });\n this.fetchTasks(0);\n }\n\n resetSearch() {\n patchState(this.inbox, {\n searchConditions: undefined,\n });\n this.fetchTasks(0);\n }\n\n /**\n * Completes a task.\n * @param taskId ID of the tasks to complete\n * @param payload Data to be send with the complete request (may contain attachments, a new subject or variables)\n */\n completeTask(taskId: string, payload?: ProcessPostPayload): Observable<any> {\n return this.#updateTask(taskId, ProcessAction.complete, payload || {});\n }\n\n /**\n * Update a task. This will update the task in the backend and trigger a refresh of the inbox.\n * @param taskId ID of the task to update\n * @param action\n * @param payload\n * @param options\n * @returns\n */\n #updateTask(\n taskId: string,\n action: string,\n payload: ProcessPostPayload,\n options?: {\n includeProcessVar: boolean;\n briefRepresentation: boolean;\n }\n ) {\n const pl = { ...payload, action: action };\n return (\n this.#backend\n // TODO: BPM-ENGINE does not support attachments\n // .put(`/bpm-engine/api/tasks/${taskId}`, pl, ApiBase.none)\n .put(`/bpm/tasks/${taskId}`, pl)\n .pipe(\n tap((_) =>\n options\n ? this.fetchTasks(this.inbox().pagination?.page || 0)\n : this.fetchTasks()\n )\n )\n );\n }\n\n /**\n * Toggles whether tasks assigned to the current user are shown, and refreshes the task list.\n */\n toggleIsAssigned(): void {\n const currentState = this.inbox().isAssigned;\n patchState(this.inbox, { isAssigned: !currentState });\n this.fetchTasks();\n }\n\n /**\n * Sets the current UI filter to 'week' or removes it if already active.\n */\n toggleIsWeek(): void {\n const isActive = this.activeFilter() === 'week';\n this.activeFilter.set(isActive ? 'none' : 'week');\n }\n\n /**\n * Sets the current UI filter to 'overdue' or removes it if already active.\n */\n toggleIsOverdue(): void {\n const isActive = this.activeFilter() === 'overdue';\n this.activeFilter.set(isActive ? 'none' : 'overdue');\n }\n\n /**\n * Returns all tasks with due dates in the current week.\n * Used internally for UI filtering only, does not mutate state.\n * @param tasks Array of Task objects.\n * @returns Filtered array of tasks due within the week.\n */\n #filterByWeek(tasks: Task[]): Task[] {\n const today = new Date();\n // End of current week (Sunday). Adapt as needed for locale.\n const endOfWeek = new Date(today);\n endOfWeek.setDate(today.getDate() + (7 - today.getDay()));\n\n return tasks.filter((task) => {\n if (!task.dueDate) return false;\n const dueDate = new Date(task.dueDate);\n return (\n !isNaN(dueDate.getTime()) && dueDate >= today && dueDate <= endOfWeek\n );\n });\n }\n\n /**\n * Returns all tasks with a due date before today (overdue).\n * Used internally for UI filtering only, does not mutate state.\n * @param tasks Array of Task objects.\n * @returns Filtered array of overdue tasks.\n */\n #filterByOverdue(tasks: Task[]): Task[] {\n const today = new Date();\n return tasks.filter((task) => {\n if (!task.dueDate) return false;\n const dueDate = new Date(task.dueDate);\n return !isNaN(dueDate.getTime()) && dueDate < today;\n });\n }\n}\n","import { Component, inject } from '@angular/core';\nimport { AppInboxService } from '../../app-inbox.service';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { debounceTime } from 'rxjs';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\n\nimport {\n TranslateModule\n} from '@yuuvis/client-core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\n\n@Component({\n selector: 'ymi-search',\n standalone: true,\n imports: [ReactiveFormsModule, \n MatFormFieldModule,\n MatInputModule,\n MatIconModule, TranslateModule],\n templateUrl: './search.component.html',\n styleUrl: './search.component.scss',\n})\nexport class SearchComponent {\n #inboxService = inject(AppInboxService);\n\n input = new FormControl<string>('');\n\n constructor() {\n this.input.valueChanges\n .pipe(takeUntilDestroyed(), debounceTime(800))\n .subscribe((value) => {\n if (value && value.length) this.#inboxService.searchByName(value);\n else this.#inboxService.resetSearch();\n });\n }\n}\n","<mat-form-field subscriptSizing=\"dynamic\">\n <input\n matInput\n type=\"text\"\n placeholder=\"{{ 'io.yuuvis.app.inbox.task.search' | translate }}...\"\n [formControl]=\"input\"\n />\n\n <mat-icon matPrefix>search</mat-icon>\n</mat-form-field>\n","import { Component } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { TranslateModule } from '@yuuvis/client-core';\nimport { AppLogoComponent } from '@yuuvis/client-shell';\nimport { APP_INBOX_NAME } from '@yuuvis/app-inbox/shared';\nimport { SearchComponent } from './components/search/search.component';\n\n@Component({\n selector: 'ymi-app-inbox',\n standalone: true,\n imports: [TranslateModule, RouterModule, \n SearchComponent,\n AppLogoComponent],\n template: `\n <header>\n <yuv-app-logo [label]=\"appName\"></yuv-app-logo>\n <ymi-search></ymi-search>\n </header>\n <main>\n <router-outlet></router-outlet>\n </main>\n `,\n styleUrls: ['./app-inbox.component.scss'],\n})\nexport class AppInboxComponent {\n appName = APP_INBOX_NAME;\n}\n","import {\n Component,\n computed,\n inject,\n output,\n signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { TranslateModule, TranslateService } from '@yuuvis/client-core';\n\ninterface SortOption {\n label: string;\n value: string;\n type: 'sort' | 'order';\n}\n\n@Component({\n selector: 'ymi-sort',\n standalone: true,\n imports: [MatIconModule, MatButtonModule, MatMenuModule, TranslateModule],\n templateUrl: './sort.component.html',\n styleUrls: ['./sort.component.scss'],\n})\nexport class SortComponent {\n private translate = inject(TranslateService);\n\n sortOptions = signal(this.#setSortOptions());\n orderOptions = signal<SortOption[]>([\n { label: 'Ascending', value: 'asc', type: 'order' },\n { label: 'Descending', value: 'desc', type: 'order' },\n ]);\n sortFields = computed(() => [...this.sortOptions(), ...this.orderOptions()]);\n sortForm: FormGroup = new FormGroup({\n sort: new FormControl<string>(''),\n order: new FormControl<'asc' | 'desc'>('asc', { nonNullable: true }),\n });\n\n sortChange = output<{\n sort: string;\n order: 'asc' | 'desc';\n }>();\n\n constructor() {\n this.translate.onLangChange.pipe(takeUntilDestroyed()).subscribe(() => {\n this.sortOptions.set(this.#setSortOptions());\n });\n }\n\n #setSortOptions() {\n const translations: Record<string, string> = {\n created: this.translate.instant('io.yuuvis.app.inbox.task.sort.created'),\n description: this.translate.instant(\n 'io.yuuvis.app.inbox.task.sort.description'\n ),\n duedate: this.translate.instant('io.yuuvis.app.inbox.task.sort.duedate'),\n taskname: this.translate.instant(\n 'io.yuuvis.app.inbox.task.sort.taskname'\n ),\n };\n return ['createTime', 'description', 'dueDate', 'name'].map((f) => ({\n label: translations[f] || f,\n value: f,\n type: 'sort',\n }));\n }\n\n selectSort(type: string, value: string) {\n const sortCtrl = this.sortForm.get('sort');\n sortCtrl?.value === value\n ? sortCtrl?.setValue(null)\n : this.sortForm.get(type)?.setValue(value);\n this.onSelectionChange();\n }\n\n onSelectionChange() {\n const { sort, order } = this.sortForm.value;\n this.sortChange.emit({ sort: sort as string, order: order });\n }\n}\n","\n\n\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" title=\"{{ 'yuv.app.drive.sort.tooltip' | translate }}\">\n <mat-icon>swap_vert</mat-icon>\n </button>\n\n <mat-menu #menu=\"matMenu\">\n @for (option of sortFields(); track $index) {\n @let selected = sortForm.value[option.type] === option.value;\n <button mat-menu-item (click)=\"selectSort(option.type, option.value)\">\n <mat-icon>{{ selected ? 'check_box' : 'check_box_outline_blank' }}</mat-icon>\n {{ option.label }}\n </button>\n @if (sortFields().length - 3 === $index) {\n <hr style=\"border-block-start: 1px solid var(--ymt-outline-variant)\" />\n }\n }\n </mat-menu>\n \n\n\n\n\n\n\n\n\n<!-- <div class=\"sort-container\">\n <button\n #sortButton\n (click)=\"toggleDialog()\"\n class=\"sort-button\"\n title=\"{{ 'io.yuuvis.app.inbox.task.sort.title' | translate }}\"\n [attr.aria-haspopup]=\"true\"\n [attr.aria-expanded]=\"dialogOpen() ? 'true' : 'false'\"\n >\n <mat-icon>swap_vert</mat-icon>\n </button>\n\n <dialog\n #sortDialog\n popover\n id=\"sort\"\n class=\"sort-menu\"\n [style.top.px]=\"position().top\"\n [style.left.px]=\"position().left\"\n >\n <ol\n tabindex=\"0\"\n class=\"sort-group\"\n role=\"listbox\"\n aria-multiselectable=\"false\"\n >\n @for (sortKey of sorts(); track sortKey) {\n <li\n (click)=\"selectSort(sortKey)\"\n class=\"sort-item sort-group-item\"\n [class.selected]=\"isSelectedSort(sortKey)\"\n [attr.aria-selected]=\"isSelectedSort(sortKey)\"\n role=\"option\"\n tabindex=\"0\"\n >\n @if (isSelectedSort(sortKey)) {\n <div class=\"circle-icon\"></div>\n }\n <div class=\"label\">{{ cachedSorts.get(sortKey)?.translation }}</div>\n </li>\n }\n\n <div class=\"divider\"></div>\n\n <li\n class=\"sort-item sort-order-item\"\n role=\"option\"\n tabindex=\"0\"\n [class.selected]=\"sortOrder() === 'asc'\"\n (click)=\"selectOrder('asc')\"\n [attr.aria-selected]=\"sortOrder() === 'asc'\"\n >\n <div class=\"label\">\n {{ \"io.yuuvis.app.inbox.task.sort.ascending\" | translate }}\n </div>\n </li>\n\n <li\n class=\"sort-item sort-order-item\"\n role=\"option\"\n tabindex=\"0\"\n [class.selected]=\"sortOrder() === 'desc'\"\n (click)=\"selectOrder('desc')\"\n [attr.aria-selected]=\"sortOrder() === 'desc'\"\n >\n <div class=\"label\">\n {{ \"io.yuuvis.app.inbox.task.sort.descending\" | translate }}\n </div>\n </li>\n </ol>\n </dialog>\n</div> -->\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n viewChild\n} from '@angular/core';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { AppInboxService } from '../../app-inbox.service';\nimport {\n BackendService,\n DmsObject,\n DmsService,\n FlavoredDmsObject,\n ProcessVariable,\n TranslateModule,\n TranslateService,\n UserService,\n} from '@yuuvis/client-core';\nimport { ObjectMetadataComponent } from '@yuuvis/client-framework/object-details';\nimport {\n FormStatusChangedEvent,\n ObjectFormComponent,\n ObjectFormOptions,\n} from '@yuuvis/client-framework/object-form';\nimport { ObjectPreviewComponent } from '@yuuvis/client-framework/object-preview';\nimport { YuvSplitViewModule } from '@yuuvis/client-framework/split-view';\nimport { ShellService } from '@yuuvis/client-shell-core';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { finalize } from 'rxjs';\nimport { AppInboxUtils, Task } from '@yuuvis/app-inbox/shared';\n\n@Component({\n selector: 'ymi-task',\n standalone: true,\n imports: [\n CommonModule,\n TranslateModule,\n YuvSplitViewModule,\n MatTabsModule,\n MatProgressBar,\n ObjectPreviewComponent,\n ObjectFormComponent,\n ObjectMetadataComponent,\n YmtButtonDirective,\n ],\n templateUrl: './task.component.html',\n styleUrl: './task.component.scss',\n})\nexport class TaskComponent {\n task = input<Task | null>(null);\n #backend = inject(BackendService);\n #shellService = inject(ShellService);\n #dmsService = inject(DmsService);\n #userService = inject(UserService);\n #inboxService = inject(AppInboxService);\n translate = inject(TranslateService);\n\n taskForm = viewChild(ObjectFormComponent);\n\n taskFinished = output<void>();\n\n dmsObject = signal<DmsObject | undefined>(undefined);\n #taskEffect = effect(() => {\n const task = this.task();\n if (task) {\n const formData = this.#getFormDataFromProcessVars(task);\n untracked(() => {\n if (task && task.taskForm) {\n this.startFormOptions.set({\n formModel: AppInboxUtils.fixFormModel(task.taskForm.model),\n data: formData,\n });\n } else {\n this.startFormOptions.set(null);\n }\n });\n } else {\n this.startFormOptions.set(null);\n }\n });\n\n startFormOptions = signal<ObjectFormOptions | null>(null);\n busy = signal<boolean>(false);\n disableControls = signal<boolean>(false);\n\n hasAttachments = computed(() => {\n const task = this.task();\n const attachmentId = task?.attachments?.[0] ?? '';\n if (attachmentId) {\n this.#dmsService.getDmsObject(attachmentId).subscribe({\n next: (dmsObject) => {\n this.dmsObject.set(dmsObject);\n },\n error: (err) => {\n console.error('Failed to load DMS object:', err);\n },\n });\n }\n return (task && task.attachments?.length > 0) || false;\n });\n\n onIndexdataSaved(updatedObject: any) {\n this.dmsObject = updatedObject;\n }\n\n onFormStatusChanged(evt: FormStatusChangedEvent) {\n this.disableControls.set(evt.invalid);\n }\n\n finishTask() {\n const task = this.task();\n if (!task) return;\n const assignee = task.assignee;\n const variables: ProcessVariable[] = [];\n\n const taskForm = this.taskForm();\n if (taskForm) {\n const formData: Record<string, unknown> = taskForm.getFormData();\n Object.keys(formData).forEach((key) =>\n variables.push({\n name: key,\n value: formData[key],\n })\n );\n }\n\n const attachments = task.attachments ? [task.attachments[0]] : [];\n const payload: any = {\n assignee: assignee,\n subject: task.name,\n attachments,\n variables,\n };\n this.busy.set(true);\n payload.jsonPayload = JSON.stringify(payload);\n\n this.#inboxService\n .completeTask(task.id, payload)\n .pipe(\n finalize(() => {\n this.busy.set(false);\n setTimeout(() => {\n this.taskFinished.emit();\n }, 0);\n })\n )\n .subscribe();\n }\n\n flavoredDmsObject = computed<FlavoredDmsObject | undefined>((): any => {\n const o = this.dmsObject();\n return o\n ? {\n object: o,\n flavors: [...this.#shellService.getAppliedObjectFlavors(o).applied],\n }\n : undefined;\n });\n\n #getFormDataFromProcessVars(t: Task) {\n const formData: any = {};\n if (t.variables) {\n t.variables.forEach((v: any) => {\n const value = v.value;\n if (\n value &&\n Array.isArray(value) &&\n v.type === 'json' &&\n t.resolvedValues\n ) {\n value.forEach((row) =>\n Object.keys(row).forEach((k) => {\n const resValue = t.resolvedValues?.[row[k]];\n if (!!resValue) {\n row[`${k}_title`] = resValue;\n }\n })\n );\n }\n formData[v.name] = value;\n });\n }\n return formData;\n }\n\n handleTask(taskId: string, action: string): void {\n const currentUserId = this.#userService.getCurrentUser().id;\n const payload: any = {\n action: 'claim',\n assignee: action === 'accept' ? { id: currentUserId } : null,\n };\n\n this.#backend.put(`/bpm/tasks/${taskId}`, payload).subscribe({\n next: () => {\n this.taskFinished.emit();\n },\n error: (err) => {\n console.error('Error while handling task:', err);\n },\n });\n }\n}\n","@let t = task(); @let sfo = startFormOptions(); @if(t){\n\n<!-- task details and the attached object -->\n<yuv-split-view [gutterSize]=\"1\">\n <ng-template yuvSplitArea [size]=\"40\">\n <div class=\"task details-pane\">\n <mat-tab-group>\n <mat-tab [label]=\"'io.yuuvis.app.inbox.task.form.title' | translate\">\n <div class=\"task-form\">\n <mat-progress-bar\n mode=\"indeterminate\"\n [ngClass]=\"{ busy: busy() }\"\n ></mat-progress-bar>\n\n @if(sfo) {\n <div class=\"form\">\n <yuv-object-form\n [formOptions]=\"sfo\"\n (statusChanged)=\"onFormStatusChanged($event)\"\n ></yuv-object-form>\n </div>\n }\n </div>\n </mat-tab>\n @if (t.attachments) {\n <mat-tab\n [label]=\"\n 'yuv.app.drive.object-metadata.tabs.indexdata.title' | translate\n \"\n >\n <yuv-object-metadata\n [flavoredDmsObject]=\"flavoredDmsObject()\"\n (indexDataSaved)=\"onIndexdataSaved($event)\"\n >\n </yuv-object-metadata>\n </mat-tab>\n }\n </mat-tab-group>\n\n <footer>\n @if (!task()?.assignee) {\n <!-- claim a task -->\n <button\n ymtButton=\"primary\"\n (click)=\"handleTask(task()?.id || '', 'accept')\"\n >\n {{ \"io.yuuvis.app.inbox.task.footer.button.accept\" | translate }}\n </button>\n } @else if (task()?.assignee && task()?.claimTime) {\n <!-- return a claimed task -->\n <button\n ymtButton=\"primary\"\n (click)=\"handleTask(task()?.id || '', 'return')\"\n >\n {{ \"io.yuuvis.app.inbox.task.footer.button.return\" | translate }}\n </button>\n } @else{\n <button\n ymtButton=\"primary\"\n [disabled]=\"disableControls() || busy()\"\n (click)=\"finishTask()\"\n >\n {{ \"io.yuuvis.app.inbox.task.form.finish\" | translate }}</button\n >}\n </footer>\n </div>\n </ng-template>\n\n <!-- attached object -->\n <ng-template yuvSplitArea [size]=\"60\" [visible]=\"hasAttachments()\">\n @if (t.attachments) {\n <yuv-object-preview [objectId]=\"t.attachments[0]\"></yuv-object-preview>\n }\n </ng-template>\n</yuv-split-view>\n\n} @else {\n<div class=\"empty\">\n <p>{{ \"io.yuuvis.app.inbox.task.details.empty\" | translate }}</p>\n</div>\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n effect,\n inject,\n OnInit,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport { AppInboxService } from '../../app-inbox.service';\nimport { TranslateModule, TranslateService } from '@yuuvis/client-core';\nimport {\n ListComponent,\n ListItemDirective,\n} from '@yuuvis/client-framework/list';\nimport { YuvSplitViewModule } from '@yuuvis/client-framework/split-view';\nimport { SortComponent } from '../../components/sort/sort.component';\nimport { TaskComponent } from '../../components/task/task.component';\nimport { Task } from '@yuuvis/app-inbox/shared';\n@Component({\n selector: 'ymi-inbox',\n standalone: true,\n imports: [\n CommonModule,\n TranslateModule,\n YuvSplitViewModule,\n MatIconModule,\n MatButtonModule,\n MatPaginatorModule,\n MatProgressBar,\n ListComponent,\n TaskComponent,\n SortComponent,\n ListItemDirective,\n ],\n templateUrl: './inbox.component.html',\n styleUrl: './inbox.component.scss',\n host: {\n '[class.pagination]': 'inbox().pagination',\n },\n})\nexport class InboxPageComponent implements OnInit {\n readonly #inboxService = inject(AppInboxService);\n readonly translate = inject(TranslateService);\n\n inboxPageSize = this.#inboxService.PAGE_SIZE\n\n /** Signals for data and state */\n inbox = this.#inboxService.inbox;\n tasks = this.#inboxService.filteredTasks;\n busy = this.#inboxService.busy;\n selectedSort = signal<string>('created');\n sortOrder = signal<'asc' | 'desc'>('desc');\n task = signal<Task | null>(null);\n\n listElement = viewChild.required<ListComponent>(ListComponent);\n iconsByWorkflowType = this.#inboxService.iconsByWorkflowType;\n #inboxEffect = effect(() => {\n const tasks = this.tasks() ?? [];\n untracked(() => {\n const previousIndex = this.selectedIndex();\n const tasksCount = tasks.length;\n\n let newIndex = -1;\n\n if (tasksCount === 0) {\n newIndex = -1;\n } else if (previousIndex < tasksCount) {\n newIndex = previousIndex;\n } else if (previousIndex >= tasksCount) {\n newIndex = previousIndex - 1;\n if (newIndex < 0) {\n newIndex = 0;\n }\n }\n this.task.set(null);\n this.selectedIndex.set(-1);\n this.itemSelected([newIndex]);\n });\n });\n\n selectedIndex = signal<number>(-1);\n\n itemSelected(idx: number[]) {\n const tasks = this.tasks() ?? [];\n const selectedIdx = idx[0];\n\n if (selectedIdx >= 0 && selectedIdx < tasks.length) {\n this.selectedIndex.set(selectedIdx);\n this.task.set(tasks[selectedIdx]);\n } else {\n this.selectedIndex.set(-1);\n this.task.set(null);\n }\n }\n\n getTaskIconKey(type: string): string {\n return this.#inboxService.getTaskIconKey(type);\n }\n\n changePage($event: PageEvent) {\n const { pageSize, pageIndex } = $event;\n this.goToPage(pageIndex + 1);\n }\n\n goToPage(page: number) {\n if (page >= 1) {\n this.#inboxService.fetchTasks(page - 1);\n }\n }\n\n /** UI filter toggles (call service) */\n groupTasksByWeek(): void {\n this.task.set(null);\n this.selectedIndex.set(-1);\n this.#inboxService.toggleIsWeek();\n }\n\n groupTasksByOverdue(): void {\n this.task.set(null);\n this.selectedIndex.set(-1);\n this.#inboxService.toggleIsOverdue();\n }\n\n // groupTasksByDone(): void {\n // this.#inboxService.toggleIsDone();\n // }\n\n onTaskFinished() {\n this.task.set(null);\n this.selectedIndex.set(-1);\n this.#inboxService.fetchTasks();\n }\n\n groupItems(): void {\n this.task.set(null);\n this.selectedIndex.set(-1);\n this.#inboxService.toggleIsAssigned();\n }\n\n /**\n * Updates sort field and direction.\n * @param sort Sorting field.\n * @param order Sort direction.\n */\n updateSort({ sort, order }: { sort: string; order: 'asc' | 'desc' }) {\n this.selectedSort.set(sort);\n this.sortOrder.set(order);\n this.#inboxService.applySort(sort, order);\n }\n\n /**\n * Triggers a debounced fetch from backend (refresh button).\n */\n refresh(): void {\n this.#inboxService.fetchTasks();\n }\n\n isDateOverdue(dateInput?: string | Date): boolean {\n return this.#inboxService.isDateOverdue(dateInput);\n }\n\n\n ngOnInit(): void {\n this.#inboxService.fetchTasks();\n }\n\n /** UI filter state getters for button highlighting */\n get isWeekActive(): boolean {\n return this.#inboxService.activeFilter() === 'week';\n }\n\n get isOverdueActive(): boolean {\n return this.#inboxService.activeFilter() === 'overdue';\n }\n\n get isDoneActive(): boolean {\n return this.#inboxService.activeFilter() === 'done';\n }\n\n get isAssigned(): boolean {\n return this.#inboxService.inbox().isAssigned;\n }\n}\n","<mat-progress-bar\n mode=\"indeterminate\"\n [ngClass]=\"{ busy: busy() }\"\n></mat-progress-bar>\n\n<yuv-split-view [gutterSize]=\"1\">\n <!-- list of inbox items -->\n <ng-template yuvSplitArea [size]=\"40\">\n <div class=\"list\">\n <header>\n <h1>{{ \"io.yuuvis.app.inbox.task.header.title\" | translate }}</h1>\n <ymi-sort (sortChange)=\"updateSort($event)\" />\n <div class=\"toolbar\">\n <button\n (click)=\"refresh()\"\n class=\"icon-button\"\n mat-icon-button\n title=\"{{\n 'io.yuuvis.app.inbox.task.header.button.refresh.title' | translate\n }}\"\n >\n <mat-icon>refresh</mat-icon>\n </button>\n\n <!-- TODO: enable again once the feature is supported on the backend side -->\n <!-- <button\n (click)=\"groupTasksByWeek()\"\n mat-icon-button\n class=\"icon-button\"\n title=\"{{\n 'io.yuuvis.app.inbox.task.header.button.week.title' | translate\n }}\"\n [class.active]=\"isWeekActive\"\n >\n <mat-icon>calendar_month</mat-icon>\n </button>\n\n <button\n (click)=\"groupTasksByOverdue()\"\n mat-icon-button\n class=\"icon-button\"\n title=\"{{\n 'io.yuuvis.app.inbox.task.header.button.overdue.title' | translate\n }}\"\n [class.active]=\"isOverdueActive\"\n >\n <mat-icon>schedule</mat-icon>\n </button> -->\n\n <button\n (click)=\"groupItems()\"\n mat-icon-button\n class=\"icon-button\"\n title=\"{{\n 'io.yuuvis.app.inbox.task.header.button.group.title' | translate\n }}\"\n [class.active]=\"!isAssigned\"\n >\n <mat-icon>group</mat-icon>\n </button>\n </div>\n </header>\n\n <yuv-list\n (itemSelect)=\"itemSelected($event)\"\n aria-label=\"Task inbox list\"\n >\n @if (!busy()) { @for(i of tasks(); track i.id){\n\n <div yuvListItem>\n <mat-icon\n [svgIcon]=\"getTaskIconKey(i.processDefinition.idPrefix)\"\n ></mat-icon>\n <div class=\"title\">{{ i.name }}</div>\n <div class=\"process meta\">{{ i.processDefinition.idPrefix }}</div>\n\n <time\n class=\"due meta\"\n [attr.datetime]=\"i.dueDate\"\n [class.overdue]=\"isDateOverdue(i.dueDate)\"\n >\n {{ i.dueDate ? (i.dueDate | date : \"dd/MM/yyyy\") : \"\" }}\n </time>\n </div>\n } }\n </yuv-list>\n @let pg = inbox().pagination; @if (pg) {\n <mat-paginator\n class=\"paginator\"\n [length]=\"pg?.total\"\n [pageSize]=\"inboxPageSize\"\n aria-label=\"Select page\"\n (page)=\"changePage($event)\"\n hidePageSize\n >\n </mat-paginator>\n }\n </div>\n </ng-template>\n <ng-template yuvSplitArea [size]=\"60\">\n <ymi-task [task]=\"task()\" (taskFinished)=\"onTaskFinished()\"></ymi-task>\n </ng-template>\n</yuv-split-view>\n","import { Route } from '@angular/router';\nimport { AppInboxComponent } from './app-inbox.component';\nimport { InboxPageComponent } from './pages/inbox/inbox.component';\n\nexport const AppInboxRoutes: Route[] = [\n {\n path: '',\n component: AppInboxComponent,\n children: [\n { path: 'inbox', component: InboxPageComponent},\n { path: '', redirectTo: 'inbox', pathMatch: 'full' }\n ]\n },\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i5","i1","i2","i3","i4"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"yuuvis-app-inbox.mjs","sources":["../../../../projects/yuuvis/app-inbox/src/lib/app-inbox.service.ts","../../../../projects/yuuvis/app-inbox/src/lib/components/search/search.component.ts","../../../../projects/yuuvis/app-inbox/src/lib/components/search/search.component.html","../../../../projects/yuuvis/app-inbox/src/lib/app-inbox.component.ts","../../../../projects/yuuvis/app-inbox/src/lib/app-inbox.component.html","../../../../projects/yuuvis/app-inbox/src/lib/components/sort/sort.component.ts","../../../../projects/yuuvis/app-inbox/src/lib/components/sort/sort.component.html","../../../../projects/yuuvis/app-inbox/src/lib/components/task/task.component.ts","../../../../projects/yuuvis/app-inbox/src/lib/components/task/task.component.html","../../../../projects/yuuvis/app-inbox/src/lib/pages/inbox/inbox.component.ts","../../../../projects/yuuvis/app-inbox/src/lib/pages/inbox/inbox.component.html","../../../../projects/yuuvis/app-inbox/src/lib/lib.routes.ts","../../../../projects/yuuvis/app-inbox/src/yuuvis-app-inbox.ts"],"sourcesContent":["import { HttpParams } from '@angular/common/http';\nimport { computed, inject, Injectable, signal } from '@angular/core';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { patchState, signalState } from '@ngrx/signals';\nimport {\n ApiBase,\n BackendService,\n ConfigService,\n ProcessAction,\n ProcessPostPayload\n} from '@yuuvis/client-core';\nimport { ObjectFormOptions } from '@yuuvis/client-framework/object-form';\nimport { finalize, Observable, tap } from 'rxjs';\nimport { AppInboxUtils, InboxState, Task, TasksResponse } from '@yuuvis/app-inbox/shared';\n\ntype FilterType = 'week' | 'overdue' | 'done' | 'none';\n@Injectable({\n providedIn: 'root',\n})\nexport class AppInboxService {\n #backend = inject(BackendService);\n #iconRegistry = inject(MatIconRegistry);\n #configService = inject(ConfigService);\n readonly #sanitizer = inject(DomSanitizer);\n iconsByWorkflowType: Record<string, string> = {};\n\n PAGE_SIZE = 20;\n DEFAULT_SORT_PARAM = 'createTime,desc';\n\n busy = signal<boolean>(false);\n inbox = signalState<InboxState>({\n tasks: [],\n sort: this.DEFAULT_SORT_PARAM,\n isAssigned: true,\n });\n\n disableBriefRepresentation = signal<boolean>(false);\n startFormOptions = signal<ObjectFormOptions | null>(null);\n\n /** Active filter for UI display. 'none' disables filtering. */\n activeFilter = signal<FilterType>('none');\n\n /**\n * Triggers fetching of tasks from the backend. This will update the inbox state.\n * @param page page number to fetch. Default is 0.\n * @param includeProcessVariables Whether to include process variables in the response. Default is true.\n * @param briefRepresentation Whether to use brief representation of the task. Default is true.\n */\n fetchTasks(page = 0) {\n let p = new HttpParams()\n .set('size', this.PAGE_SIZE)\n .set('sort', this.inbox().sort)\n .set('isAssigned', this.inbox().isAssigned)\n .set('page', page)\n .set('includeProcessVariables', true)\n .set('briefRepresentation', false);\n\n const sc = this.inbox().searchConditions as Record<string, any>;\n if (sc) {\n Object.keys(sc).forEach((key) => {\n p = p.set(key, sc[key]);\n });\n }\n\n this.busy.set(true);\n this.#backend\n .get(`/bpm/inbox?${p}`)\n .pipe(finalize(() => this.busy.set(false)))\n .subscribe((res: TasksResponse) => {\n const tasks = res.objects;\n patchState(this.inbox, {\n tasks: tasks,\n pagination:\n res.totalNumItems > this.PAGE_SIZE\n ? {\n page: page + 1,\n pages: Math.ceil(res.totalNumItems / this.PAGE_SIZE),\n total: res.totalNumItems,\n }\n : undefined,\n });\n const types = Array.from(\n new Set(\n tasks.map((t: any) => t.processDefinition?.idPrefix).filter(Boolean)\n )\n );\n\n types.forEach((type) => {\n if (!this.iconsByWorkflowType[this.#getIconKey(type as string)]) {\n this.loadWorkflowIcon(type as string);\n }\n });\n });\n }\n\n #getIconKey(type: string): string {\n return AppInboxUtils.getIconKey(type);\n }\n\n getTaskIconKey(type: string): string {\n return `${AppInboxUtils.getIconNamespace()}:${this.#getIconKey(type)}`;\n }\n\n /**\n * Computed signal: filtered view of tasks for the UI,\n * always derived from the last backend-fetched list and current activeFilter.\n * Never mutates primary state.\n */\n filteredTasks = computed<Task[]>(() => {\n const tasks = this.inbox().tasks;\n switch (this.activeFilter()) {\n case 'week':\n return this.#filterByWeek(tasks);\n case 'overdue':\n return this.#filterByOverdue(tasks);\n // case 'done':\n // return this.#filterByDone(tasks);\n case 'none':\n default:\n return tasks;\n }\n });\n\n isDateOverdue(dateInput?: string | Date): boolean {\n if (!dateInput) return false;\n const due = new Date(dateInput);\n return !isNaN(due.getTime()) && due < new Date();\n }\n\n loadWorkflowIcon(type: string) {\n const iconKey = this.#getIconKey(type);\n // register workflow icon in registry\n const uri = `${this.#configService.getApiBase(\n ApiBase.apiWeb,\n true\n )}/resources/icons/${iconKey}?fallback=bpm:default`;\n this.#iconRegistry.addSvgIconInNamespace(\n AppInboxUtils.getIconNamespace(),\n iconKey,\n this.#sanitizer.bypassSecurityTrustResourceUrl(uri)\n );\n this.iconsByWorkflowType[iconKey] = iconKey;\n }\n\n applySort(sort: string, order: 'asc' | 'desc') {\n patchState(this.inbox, {\n sort: sort ? `${sort},${order}` : this.DEFAULT_SORT_PARAM,\n });\n this.fetchTasks(0);\n }\n\n searchByName(term: string) {\n patchState(this.inbox, {\n searchConditions: {\n nameLikeIgnoreCase: `%${term}%`,\n },\n });\n this.fetchTasks(0);\n }\n\n resetSearch() {\n patchState(this.inbox, {\n searchConditions: undefined,\n });\n this.fetchTasks(0);\n }\n\n /**\n * Completes a task.\n * @param taskId ID of the tasks to complete\n * @param payload Data to be send with the complete request (may contain attachments, a new subject or variables)\n */\n completeTask(taskId: string, payload?: ProcessPostPayload): Observable<any> {\n return this.#updateTask(taskId, ProcessAction.complete, payload || {});\n }\n\n /**\n * Update a task. This will update the task in the backend and trigger a refresh of the inbox.\n * @param taskId ID of the task to update\n * @param action\n * @param payload\n * @param options\n * @returns\n */\n #updateTask(\n taskId: string,\n action: string,\n payload: ProcessPostPayload,\n options?: {\n includeProcessVar: boolean;\n briefRepresentation: boolean;\n }\n ) {\n const pl = { ...payload, action: action };\n return (\n this.#backend\n // TODO: BPM-ENGINE does not support attachments\n // .put(`/bpm-engine/api/tasks/${taskId}`, pl, ApiBase.none)\n .put(`/bpm/tasks/${taskId}`, pl)\n .pipe(\n tap((_) =>\n options\n ? this.fetchTasks(this.inbox().pagination?.page || 0)\n : this.fetchTasks()\n )\n )\n );\n }\n\n /**\n * Toggles whether tasks assigned to the current user are shown, and refreshes the task list.\n */\n toggleIsAssigned(): void {\n const currentState = this.inbox().isAssigned;\n patchState(this.inbox, { isAssigned: !currentState });\n this.fetchTasks();\n }\n\n /**\n * Sets the current UI filter to 'week' or removes it if already active.\n */\n toggleIsWeek(): void {\n const isActive = this.activeFilter() === 'week';\n this.activeFilter.set(isActive ? 'none' : 'week');\n }\n\n /**\n * Sets the current UI filter to 'overdue' or removes it if already active.\n */\n toggleIsOverdue(): void {\n const isActive = this.activeFilter() === 'overdue';\n this.activeFilter.set(isActive ? 'none' : 'overdue');\n }\n\n /**\n * Returns all tasks with due dates in the current week.\n * Used internally for UI filtering only, does not mutate state.\n * @param tasks Array of Task objects.\n * @returns Filtered array of tasks due within the week.\n */\n #filterByWeek(tasks: Task[]): Task[] {\n const today = new Date();\n // End of current week (Sunday). Adapt as needed for locale.\n const endOfWeek = new Date(today);\n endOfWeek.setDate(today.getDate() + (7 - today.getDay()));\n\n return tasks.filter((task) => {\n if (!task.dueDate) return false;\n const dueDate = new Date(task.dueDate);\n return (\n !isNaN(dueDate.getTime()) && dueDate >= today && dueDate <= endOfWeek\n );\n });\n }\n\n /**\n * Returns all tasks with a due date before today (overdue).\n * Used internally for UI filtering only, does not mutate state.\n * @param tasks Array of Task objects.\n * @returns Filtered array of overdue tasks.\n */\n #filterByOverdue(tasks: Task[]): Task[] {\n const today = new Date();\n return tasks.filter((task) => {\n if (!task.dueDate) return false;\n const dueDate = new Date(task.dueDate);\n return !isNaN(dueDate.getTime()) && dueDate < today;\n });\n }\n}\n","import { Component, inject } from '@angular/core';\nimport { AppInboxService } from '../../app-inbox.service';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { debounceTime } from 'rxjs';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\n\nimport {\n TranslateModule\n} from '@yuuvis/client-core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\n\n@Component({\n selector: 'ymi-search',\n standalone: true,\n imports: [ReactiveFormsModule, \n MatFormFieldModule,\n MatInputModule,\n MatIconModule, TranslateModule],\n templateUrl: './search.component.html',\n styleUrl: './search.component.scss',\n})\nexport class SearchComponent {\n #inboxService = inject(AppInboxService);\n\n input = new FormControl<string>('');\n\n constructor() {\n this.input.valueChanges\n .pipe(takeUntilDestroyed(), debounceTime(800))\n .subscribe((value) => {\n if (value && value.length) this.#inboxService.searchByName(value);\n else this.#inboxService.resetSearch();\n });\n }\n}\n","<mat-form-field subscriptSizing=\"dynamic\">\n <input\n matInput\n type=\"text\"\n placeholder=\"{{ 'io.yuuvis.app.inbox.task.search' | translate }}...\"\n [formControl]=\"input\"\n />\n\n <mat-icon matPrefix>search</mat-icon>\n</mat-form-field>\n","import { Component } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { TranslateModule } from '@yuuvis/client-core';\nimport { YuvClientShellModule } from '@yuuvis/client-shell';\nimport { APP_INBOX_NAME } from '@yuuvis/app-inbox/shared';\nimport { SearchComponent } from './components/search/search.component';\n\n@Component({\n selector: 'ymi-app-inbox',\n standalone: true,\n imports: [TranslateModule, RouterModule, SearchComponent, YuvClientShellModule],\n templateUrl: './app-inbox.component.html',\n styleUrls: ['./app-inbox.component.scss'],\n})\nexport class AppInboxComponent {\n appName = APP_INBOX_NAME;\n}\n","<ng-template yuvAppHeaderSlot=\"search\"><ymi-search></ymi-search></ng-template>\n<main>\n <router-outlet></router-outlet>\n</main>\n","import {\n Component,\n computed,\n inject,\n output,\n signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { TranslateModule, TranslateService } from '@yuuvis/client-core';\nimport {MatDivider} from \"@angular/material/divider\";\n\ninterface SortOption {\n label: string;\n value: string;\n type: 'sort' | 'order';\n}\n\n@Component({\n selector: 'ymi-sort',\n standalone: true,\n imports: [MatIconModule, MatButtonModule, MatMenuModule, TranslateModule, MatDivider],\n templateUrl: './sort.component.html',\n styleUrls: ['./sort.component.scss'],\n})\nexport class SortComponent {\n private translate = inject(TranslateService);\n\n sortOptions = signal(this.#setSortOptions());\n orderOptions = signal<SortOption[]>([\n { label: 'Ascending', value: 'asc', type: 'order' },\n { label: 'Descending', value: 'desc', type: 'order' },\n ]);\n sortFields = computed(() => [...this.sortOptions(), ...this.orderOptions()]);\n sortForm: FormGroup = new FormGroup({\n sort: new FormControl<string>('', {nonNullable: true}),\n order: new FormControl<'asc' | 'desc'>('asc', { nonNullable: true }),\n });\n\n sortChange = output<{\n sort: string;\n order: 'asc' | 'desc';\n }>();\n\n constructor() {\n this.translate.onLangChange.pipe(takeUntilDestroyed()).subscribe(() => {\n this.sortOptions.set(this.#setSortOptions());\n });\n this.sortForm.valueChanges.pipe(takeUntilDestroyed()).subscribe((form) => console.log('sortForm: ', form));\n }\n\n #setSortOptions() {\n const translations: Record<string, string> = {\n createTime: this.translate.instant('io.yuuvis.app.inbox.task.sort.created'),\n description: this.translate.instant(\n 'io.yuuvis.app.inbox.task.sort.description'\n ),\n duedate: this.translate.instant('io.yuuvis.app.inbox.task.sort.duedate'),\n name: this.translate.instant(\n 'io.yuuvis.app.inbox.task.sort.taskname'\n ),\n };\n return ['createTime', 'description', 'dueDate', 'name'].map((f) => ({\n label: translations[f] || f,\n value: f,\n type: 'sort',\n }));\n }\n\n selectSort(type: string, value: string) {\n const sortCtrl = this.sortForm.get('sort');\n sortCtrl?.value === value\n ? sortCtrl?.reset()\n : this.sortForm.get(type)?.setValue(value);\n this.onSelectionChange();\n }\n\n onSelectionChange() {\n const { sort, order } = this.sortForm.value;\n this.sortChange.emit({ sort: sort as string, order: order });\n }\n}\n","\n\n\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" title=\"{{ 'yuv.app.drive.sort.tooltip' | translate }}\">\n <mat-icon>swap_vert</mat-icon>\n </button>\n\n <mat-menu #menu=\"matMenu\">\n @for (option of sortFields(); track $index) {\n @let selected = sortForm.value[option.type] === option.value;\n <button mat-menu-item (click)=\"selectSort(option.type, option.value)\">\n <mat-icon>{{ selected ? 'check_box' : 'check_box_outline_blank' }}</mat-icon>\n {{ option.label }}\n </button>\n @if (sortFields().length - 3 === $index) {\n <mat-divider style=\"border-top-color: var(--ymt-outline-variant)\"></mat-divider>\n }\n }\n </mat-menu>\n \n\n\n\n\n\n\n\n\n<!-- <div class=\"sort-container\">\n <button\n #sortButton\n (click)=\"toggleDialog()\"\n class=\"sort-button\"\n title=\"{{ 'io.yuuvis.app.inbox.task.sort.title' | translate }}\"\n [attr.aria-haspopup]=\"true\"\n [attr.aria-expanded]=\"dialogOpen() ? 'true' : 'false'\"\n >\n <mat-icon>swap_vert</mat-icon>\n </button>\n\n <dialog\n #sortDialog\n popover\n id=\"sort\"\n class=\"sort-menu\"\n [style.top.px]=\"position().top\"\n [style.left.px]=\"position().left\"\n >\n <ol\n tabindex=\"0\"\n class=\"sort-group\"\n role=\"listbox\"\n aria-multiselectable=\"false\"\n >\n @for (sortKey of sorts(); track sortKey) {\n <li\n (click)=\"selectSort(sortKey)\"\n class=\"sort-item sort-group-item\"\n [class.selected]=\"isSelectedSort(sortKey)\"\n [attr.aria-selected]=\"isSelectedSort(sortKey)\"\n role=\"option\"\n tabindex=\"0\"\n >\n @if (isSelectedSort(sortKey)) {\n <div class=\"circle-icon\"></div>\n }\n <div class=\"label\">{{ cachedSorts.get(sortKey)?.translation }}</div>\n </li>\n }\n\n <div class=\"divider\"></div>\n\n <li\n class=\"sort-item sort-order-item\"\n role=\"option\"\n tabindex=\"0\"\n [class.selected]=\"sortOrder() === 'asc'\"\n (click)=\"selectOrder('asc')\"\n [attr.aria-selected]=\"sortOrder() === 'asc'\"\n >\n <div class=\"label\">\n {{ \"io.yuuvis.app.inbox.task.sort.ascending\" | translate }}\n </div>\n </li>\n\n <li\n class=\"sort-item sort-order-item\"\n role=\"option\"\n tabindex=\"0\"\n [class.selected]=\"sortOrder() === 'desc'\"\n (click)=\"selectOrder('desc')\"\n [attr.aria-selected]=\"sortOrder() === 'desc'\"\n >\n <div class=\"label\">\n {{ \"io.yuuvis.app.inbox.task.sort.descending\" | translate }}\n </div>\n </li>\n </ol>\n </dialog>\n</div> -->\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n viewChild\n} from '@angular/core';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { AppInboxService } from '../../app-inbox.service';\nimport {\n BackendService,\n DmsObject,\n DmsService,\n FlavoredDmsObject,\n ProcessVariable,\n TranslateModule,\n TranslateService,\n UserService,\n} from '@yuuvis/client-core';\nimport { ObjectMetadataComponent } from '@yuuvis/client-framework/object-details';\nimport {\n FormStatusChangedEvent,\n ObjectFormComponent,\n ObjectFormOptions,\n} from '@yuuvis/client-framework/object-form';\nimport { ObjectPreviewComponent } from '@yuuvis/client-framework/object-preview';\nimport { YuvSplitViewModule } from '@yuuvis/client-framework/split-view';\nimport { ShellService } from '@yuuvis/client-shell-core';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { finalize } from 'rxjs';\nimport { AppInboxUtils, Task } from '@yuuvis/app-inbox/shared';\n\n@Component({\n selector: 'ymi-task',\n standalone: true,\n imports: [\n CommonModule,\n TranslateModule,\n YuvSplitViewModule,\n MatTabsModule,\n MatProgressBar,\n ObjectPreviewComponent,\n ObjectFormComponent,\n ObjectMetadataComponent,\n YmtButtonDirective,\n ],\n templateUrl: './task.component.html',\n styleUrl: './task.component.scss',\n})\nexport class TaskComponent {\n task = input<Task | null>(null);\n #backend = inject(BackendService);\n #shellService = inject(ShellService);\n #dmsService = inject(DmsService);\n #userService = inject(UserService);\n #inboxService = inject(AppInboxService);\n translate = inject(TranslateService);\n\n taskForm = viewChild(ObjectFormComponent);\n\n taskFinished = output<void>();\n\n dmsObject = signal<DmsObject | undefined>(undefined);\n #taskEffect = effect(() => {\n const task = this.task();\n if (task) {\n const formData = this.#getFormDataFromProcessVars(task);\n untracked(() => {\n if (task && task.taskForm) {\n this.startFormOptions.set({\n formModel: AppInboxUtils.fixFormModel(task.taskForm.model),\n data: formData,\n });\n } else {\n this.startFormOptions.set(null);\n }\n });\n } else {\n this.startFormOptions.set(null);\n }\n });\n\n startFormOptions = signal<ObjectFormOptions | null>(null);\n busy = signal<boolean>(false);\n disableControls = signal<boolean>(false);\n\n hasAttachments = computed(() => {\n const task = this.task();\n const attachmentId = task?.attachments?.[0] ?? '';\n if (attachmentId) {\n this.#dmsService.getDmsObject(attachmentId).subscribe({\n next: (dmsObject) => {\n this.dmsObject.set(dmsObject);\n },\n error: (err) => {\n console.error('Failed to load DMS object:', err);\n },\n });\n }\n return (task && task.attachments?.length > 0) || false;\n });\n\n onIndexdataSaved(updatedObject: any) {\n this.dmsObject = updatedObject;\n }\n\n onFormStatusChanged(evt: FormStatusChangedEvent) {\n this.disableControls.set(evt.invalid);\n }\n\n finishTask() {\n const task = this.task();\n if (!task) return;\n const assignee = task.assignee;\n const variables: ProcessVariable[] = [];\n\n const taskForm = this.taskForm();\n if (taskForm) {\n const formData: Record<string, unknown> = taskForm.getFormData();\n Object.keys(formData).forEach((key) =>\n variables.push({\n name: key,\n value: formData[key],\n })\n );\n }\n\n const attachments = task.attachments ? [task.attachments[0]] : [];\n const payload: any = {\n assignee: assignee,\n subject: task.name,\n attachments,\n variables,\n };\n this.busy.set(true);\n payload.jsonPayload = JSON.stringify(payload);\n\n this.#inboxService\n .completeTask(task.id, payload)\n .pipe(\n finalize(() => {\n this.busy.set(false);\n setTimeout(() => {\n this.taskFinished.emit();\n }, 0);\n })\n )\n .subscribe();\n }\n\n flavoredDmsObject = computed<FlavoredDmsObject | undefined>((): any => {\n const o = this.dmsObject();\n return o\n ? {\n object: o,\n flavors: [...this.#shellService.getAppliedObjectFlavors(o).applied],\n }\n : undefined;\n });\n\n #getFormDataFromProcessVars(t: Task) {\n const formData: any = {};\n if (t.variables) {\n t.variables.forEach((v: any) => {\n const value = v.value;\n if (\n value &&\n Array.isArray(value) &&\n v.type === 'json' &&\n t.resolvedValues\n ) {\n value.forEach((row) =>\n Object.keys(row).forEach((k) => {\n const resValue = t.resolvedValues?.[row[k]];\n if (!!resValue) {\n row[`${k}_title`] = resValue;\n }\n })\n );\n }\n formData[v.name] = value;\n });\n }\n return formData;\n }\n\n handleTask(taskId: string, action: string): void {\n const currentUserId = this.#userService.getCurrentUser().id;\n const payload: any = {\n action: 'claim',\n assignee: action === 'accept' ? { id: currentUserId } : null,\n };\n\n this.#backend.put(`/bpm/tasks/${taskId}`, payload).subscribe({\n next: () => {\n this.taskFinished.emit();\n },\n error: (err) => {\n console.error('Error while handling task:', err);\n },\n });\n }\n}\n","@let t = task(); @let sfo = startFormOptions(); @if(t){\n\n<!-- task details and the attached object -->\n<yuv-split-view [gutterSize]=\"1\">\n <ng-template yuvSplitArea [size]=\"40\">\n <div class=\"task details-pane\">\n <mat-tab-group>\n <mat-tab [label]=\"'io.yuuvis.app.inbox.task.form.title' | translate\">\n <div class=\"task-form\">\n <mat-progress-bar\n mode=\"indeterminate\"\n [ngClass]=\"{ busy: busy() }\"\n ></mat-progress-bar>\n\n @if(sfo) {\n <div class=\"form\">\n <yuv-object-form\n [formOptions]=\"sfo\"\n (statusChanged)=\"onFormStatusChanged($event)\"\n ></yuv-object-form>\n </div>\n }\n </div>\n </mat-tab>\n @if (t.attachments) {\n <mat-tab\n [label]=\"\n 'yuv.app.drive.object-metadata.tabs.indexdata.title' | translate\n \"\n >\n <yuv-object-metadata\n [flavoredDmsObject]=\"flavoredDmsObject()\"\n (indexDataSaved)=\"onIndexdataSaved($event)\"\n >\n </yuv-object-metadata>\n </mat-tab>\n }\n </mat-tab-group>\n\n <footer>\n @if (!task()?.assignee) {\n <!-- claim a task -->\n <button\n ymtButton=\"primary\"\n (click)=\"handleTask(task()?.id || '', 'accept')\"\n >\n {{ \"io.yuuvis.app.inbox.task.footer.button.accept\" | translate }}\n </button>\n } @else if (task()?.assignee && task()?.claimTime) {\n <!-- return a claimed task -->\n <button\n ymtButton=\"primary\"\n (click)=\"handleTask(task()?.id || '', 'return')\"\n >\n {{ \"io.yuuvis.app.inbox.task.footer.button.return\" | translate }}\n </button>\n } @else{\n <button\n ymtButton=\"primary\"\n [disabled]=\"disableControls() || busy()\"\n (click)=\"finishTask()\"\n >\n {{ \"io.yuuvis.app.inbox.task.form.finish\" | translate }}</button\n >}\n </footer>\n </div>\n </ng-template>\n\n <!-- attached object -->\n <ng-template yuvSplitArea [size]=\"60\" [visible]=\"hasAttachments()\">\n @if (t.attachments) {\n <yuv-object-preview [objectId]=\"t.attachments[0]\"></yuv-object-preview>\n }\n </ng-template>\n</yuv-split-view>\n\n} @else {\n<div class=\"empty\">\n <p>{{ \"io.yuuvis.app.inbox.task.details.empty\" | translate }}</p>\n</div>\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n effect,\n inject,\n OnInit,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport { AppInboxService } from '../../app-inbox.service';\nimport { TranslateModule, TranslateService } from '@yuuvis/client-core';\nimport {\n ListComponent,\n ListItemDirective,\n} from '@yuuvis/client-framework/list';\nimport { YuvSplitViewModule } from '@yuuvis/client-framework/split-view';\nimport { SortComponent } from '../../components/sort/sort.component';\nimport { TaskComponent } from '../../components/task/task.component';\nimport { Task } from '@yuuvis/app-inbox/shared';\n@Component({\n selector: 'ymi-inbox',\n standalone: true,\n imports: [\n CommonModule,\n TranslateModule,\n YuvSplitViewModule,\n MatIconModule,\n MatButtonModule,\n MatPaginatorModule,\n MatProgressBar,\n ListComponent,\n TaskComponent,\n SortComponent,\n ListItemDirective,\n ],\n templateUrl: './inbox.component.html',\n styleUrl: './inbox.component.scss',\n host: {\n '[class.pagination]': 'inbox().pagination',\n },\n})\nexport class InboxPageComponent implements OnInit {\n readonly #inboxService = inject(AppInboxService);\n readonly translate = inject(TranslateService);\n\n inboxPageSize = this.#inboxService.PAGE_SIZE\n\n /** Signals for data and state */\n inbox = this.#inboxService.inbox;\n tasks = this.#inboxService.filteredTasks;\n busy = this.#inboxService.busy;\n selectedSort = signal<string>('created');\n sortOrder = signal<'asc' | 'desc'>('desc');\n task = signal<Task | null>(null);\n\n listElement = viewChild.required<ListComponent>(ListComponent);\n iconsByWorkflowType = this.#inboxService.iconsByWorkflowType;\n #inboxEffect = effect(() => {\n const tasks = this.tasks() ?? [];\n untracked(() => {\n const previousIndex = this.selectedIndex();\n const tasksCount = tasks.length;\n\n let newIndex = -1;\n\n if (tasksCount === 0) {\n newIndex = -1;\n } else if (previousIndex < tasksCount) {\n newIndex = previousIndex;\n } else if (previousIndex >= tasksCount) {\n newIndex = previousIndex - 1;\n if (newIndex < 0) {\n newIndex = 0;\n }\n }\n this.task.set(null);\n this.selectedIndex.set(-1);\n this.itemSelected([newIndex]);\n });\n });\n\n selectedIndex = signal<number>(-1);\n\n itemSelected(idx: number[]) {\n const tasks = this.tasks() ?? [];\n const selectedIdx = idx[0];\n\n if (selectedIdx >= 0 && selectedIdx < tasks.length) {\n this.selectedIndex.set(selectedIdx);\n this.task.set(tasks[selectedIdx]);\n } else {\n this.selectedIndex.set(-1);\n this.task.set(null);\n }\n }\n\n getTaskIconKey(type: string): string {\n return this.#inboxService.getTaskIconKey(type);\n }\n\n changePage($event: PageEvent) {\n const { pageSize, pageIndex } = $event;\n this.goToPage(pageIndex + 1);\n }\n\n goToPage(page: number) {\n if (page >= 1) {\n this.#inboxService.fetchTasks(page - 1);\n }\n }\n\n /** UI filter toggles (call service) */\n groupTasksByWeek(): void {\n this.task.set(null);\n this.selectedIndex.set(-1);\n this.#inboxService.toggleIsWeek();\n }\n\n groupTasksByOverdue(): void {\n this.task.set(null);\n this.selectedIndex.set(-1);\n this.#inboxService.toggleIsOverdue();\n }\n\n // groupTasksByDone(): void {\n // this.#inboxService.toggleIsDone();\n // }\n\n onTaskFinished() {\n this.task.set(null);\n this.selectedIndex.set(-1);\n this.#inboxService.fetchTasks();\n }\n\n groupItems(): void {\n this.task.set(null);\n this.selectedIndex.set(-1);\n this.#inboxService.toggleIsAssigned();\n }\n\n /**\n * Updates sort field and direction.\n * @param sort Sorting field.\n * @param order Sort direction.\n */\n updateSort({ sort, order }: { sort: string; order: 'asc' | 'desc' }) {\n this.selectedSort.set(sort);\n this.sortOrder.set(order);\n this.#inboxService.applySort(sort, order);\n }\n\n /**\n * Triggers a debounced fetch from backend (refresh button).\n */\n refresh(): void {\n this.#inboxService.fetchTasks();\n }\n\n isDateOverdue(dateInput?: string | Date): boolean {\n return this.#inboxService.isDateOverdue(dateInput);\n }\n\n\n ngOnInit(): void {\n this.#inboxService.fetchTasks();\n }\n\n /** UI filter state getters for button highlighting */\n get isWeekActive(): boolean {\n return this.#inboxService.activeFilter() === 'week';\n }\n\n get isOverdueActive(): boolean {\n return this.#inboxService.activeFilter() === 'overdue';\n }\n\n get isDoneActive(): boolean {\n return this.#inboxService.activeFilter() === 'done';\n }\n\n get isAssigned(): boolean {\n return this.#inboxService.inbox().isAssigned;\n }\n}\n","<mat-progress-bar\n mode=\"indeterminate\"\n [ngClass]=\"{ busy: busy() }\"\n></mat-progress-bar>\n\n<yuv-split-view [gutterSize]=\"1\">\n <!-- list of inbox items -->\n <ng-template yuvSplitArea [size]=\"40\">\n <div class=\"list\">\n <header>\n <h1>{{ \"io.yuuvis.app.inbox.task.header.title\" | translate }}</h1>\n <ymi-sort (sortChange)=\"updateSort($event)\" />\n <div class=\"toolbar\">\n <button\n (click)=\"refresh()\"\n class=\"icon-button\"\n mat-icon-button\n title=\"{{\n 'io.yuuvis.app.inbox.task.header.button.refresh.title' | translate\n }}\"\n >\n <mat-icon>refresh</mat-icon>\n </button>\n\n <!-- TODO: enable again once the feature is supported on the backend side -->\n <!-- <button\n (click)=\"groupTasksByWeek()\"\n mat-icon-button\n class=\"icon-button\"\n title=\"{{\n 'io.yuuvis.app.inbox.task.header.button.week.title' | translate\n }}\"\n [class.active]=\"isWeekActive\"\n >\n <mat-icon>calendar_month</mat-icon>\n </button>\n\n <button\n (click)=\"groupTasksByOverdue()\"\n mat-icon-button\n class=\"icon-button\"\n title=\"{{\n 'io.yuuvis.app.inbox.task.header.button.overdue.title' | translate\n }}\"\n [class.active]=\"isOverdueActive\"\n >\n <mat-icon>schedule</mat-icon>\n </button> -->\n\n <button\n (click)=\"groupItems()\"\n mat-icon-button\n class=\"icon-button\"\n title=\"{{\n 'io.yuuvis.app.inbox.task.header.button.group.title' | translate\n }}\"\n [class.active]=\"!isAssigned\"\n >\n <mat-icon>group</mat-icon>\n </button>\n </div>\n </header>\n\n <yuv-list\n (itemSelect)=\"itemSelected($event)\"\n aria-label=\"Task inbox list\"\n >\n @if (!busy()) { @for(i of tasks(); track i.id){\n\n <div yuvListItem>\n <mat-icon\n [svgIcon]=\"getTaskIconKey(i.processDefinition.idPrefix)\"\n ></mat-icon>\n <div class=\"title\">{{ i.name }}</div>\n <div class=\"process meta\">{{ i.processDefinition.idPrefix }}</div>\n\n <time\n class=\"due meta\"\n [attr.datetime]=\"i.dueDate\"\n [class.overdue]=\"isDateOverdue(i.dueDate)\"\n >\n {{ i.dueDate ? (i.dueDate | date : \"dd/MM/yyyy\") : \"\" }}\n </time>\n </div>\n } }\n </yuv-list>\n @let pg = inbox().pagination; @if (pg) {\n <mat-paginator\n class=\"paginator\"\n [length]=\"pg?.total\"\n [pageSize]=\"inboxPageSize\"\n aria-label=\"Select page\"\n (page)=\"changePage($event)\"\n hidePageSize\n >\n </mat-paginator>\n }\n </div>\n </ng-template>\n <ng-template yuvSplitArea [size]=\"60\">\n <ymi-task [task]=\"task()\" (taskFinished)=\"onTaskFinished()\"></ymi-task>\n </ng-template>\n</yuv-split-view>\n","import { Route } from '@angular/router';\nimport { AppInboxComponent } from './app-inbox.component';\nimport { InboxPageComponent } from './pages/inbox/inbox.component';\n\nexport const AppInboxRoutes: Route[] = [\n {\n path: '',\n component: AppInboxComponent,\n children: [\n { path: 'inbox', component: InboxPageComponent},\n { path: '', redirectTo: 'inbox', pathMatch: 'full' }\n ]\n },\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i5","i1","i2","i3","i4"],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ export declare class AppInboxService {
|
|
|
8
8
|
#private;
|
|
9
9
|
iconsByWorkflowType: Record<string, string>;
|
|
10
10
|
PAGE_SIZE: number;
|
|
11
|
+
DEFAULT_SORT_PARAM: string;
|
|
11
12
|
busy: import("@angular/core").WritableSignal<boolean>;
|
|
12
13
|
inbox: import("@ngrx/signals").SignalState<InboxState>;
|
|
13
14
|
disableBriefRepresentation: import("@angular/core").WritableSignal<boolean>;
|