@yuuvis/app-inbox 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +45 -0
- package/extensions/README.md +3 -0
- package/extensions/index.d.ts +1 -0
- package/extensions/lib/actions/start-process/start-process.action.d.ts +17 -0
- package/extensions/lib/actions/start-process/start-process.component.d.ts +45 -0
- package/extensions/lib/services/extensions.service.d.ts +8 -0
- package/fesm2022/yuuvis-app-inbox-extensions.mjs +208 -0
- package/fesm2022/yuuvis-app-inbox-extensions.mjs.map +1 -0
- package/fesm2022/yuuvis-app-inbox-shared.mjs +93 -0
- package/fesm2022/yuuvis-app-inbox-shared.mjs.map +1 -0
- package/fesm2022/yuuvis-app-inbox.mjs +663 -0
- package/fesm2022/yuuvis-app-inbox.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/app-inbox.component.d.ts +6 -0
- package/lib/app-inbox.service.d.ts +57 -0
- package/lib/components/search/search.component.d.ts +9 -0
- package/lib/components/sort/sort.component.d.ts +33 -0
- package/lib/components/task/task.component.d.ts +23 -0
- package/lib/lib.routes.d.ts +2 -0
- package/lib/pages/inbox/inbox.component.d.ts +52 -0
- package/package.json +32 -0
- package/public-api.d.ts +3 -0
- package/shared/inbox.interface.d.ts +111 -0
- package/shared/inbox.schema.d.ts +3 -0
- package/shared/index.d.ts +3 -0
- package/shared/utils.d.ts +17 -0
|
@@ -0,0 +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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"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
export declare class AppInboxComponent {
|
|
3
|
+
appName: string;
|
|
4
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AppInboxComponent, never>;
|
|
5
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AppInboxComponent, "ymi-app-inbox", never, {}, {}, never, never, true, never>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { ProcessPostPayload } from '@yuuvis/client-core';
|
|
2
|
+
import { ObjectFormOptions } from '@yuuvis/client-framework/object-form';
|
|
3
|
+
import { Observable } from 'rxjs';
|
|
4
|
+
import { InboxState, Task } from '@yuuvis/app-inbox/shared';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
type FilterType = 'week' | 'overdue' | 'done' | 'none';
|
|
7
|
+
export declare class AppInboxService {
|
|
8
|
+
#private;
|
|
9
|
+
iconsByWorkflowType: Record<string, string>;
|
|
10
|
+
PAGE_SIZE: number;
|
|
11
|
+
busy: import("@angular/core").WritableSignal<boolean>;
|
|
12
|
+
inbox: import("@ngrx/signals").SignalState<InboxState>;
|
|
13
|
+
disableBriefRepresentation: import("@angular/core").WritableSignal<boolean>;
|
|
14
|
+
startFormOptions: import("@angular/core").WritableSignal<ObjectFormOptions | null>;
|
|
15
|
+
/** Active filter for UI display. 'none' disables filtering. */
|
|
16
|
+
activeFilter: import("@angular/core").WritableSignal<FilterType>;
|
|
17
|
+
/**
|
|
18
|
+
* Triggers fetching of tasks from the backend. This will update the inbox state.
|
|
19
|
+
* @param page page number to fetch. Default is 0.
|
|
20
|
+
* @param includeProcessVariables Whether to include process variables in the response. Default is true.
|
|
21
|
+
* @param briefRepresentation Whether to use brief representation of the task. Default is true.
|
|
22
|
+
*/
|
|
23
|
+
fetchTasks(page?: number): void;
|
|
24
|
+
getTaskIconKey(type: string): string;
|
|
25
|
+
/**
|
|
26
|
+
* Computed signal: filtered view of tasks for the UI,
|
|
27
|
+
* always derived from the last backend-fetched list and current activeFilter.
|
|
28
|
+
* Never mutates primary state.
|
|
29
|
+
*/
|
|
30
|
+
filteredTasks: import("@angular/core").Signal<Task[]>;
|
|
31
|
+
isDateOverdue(dateInput?: string | Date): boolean;
|
|
32
|
+
loadWorkflowIcon(type: string): void;
|
|
33
|
+
applySort(sort: string, order: 'asc' | 'desc'): void;
|
|
34
|
+
searchByName(term: string): void;
|
|
35
|
+
resetSearch(): void;
|
|
36
|
+
/**
|
|
37
|
+
* Completes a task.
|
|
38
|
+
* @param taskId ID of the tasks to complete
|
|
39
|
+
* @param payload Data to be send with the complete request (may contain attachments, a new subject or variables)
|
|
40
|
+
*/
|
|
41
|
+
completeTask(taskId: string, payload?: ProcessPostPayload): Observable<any>;
|
|
42
|
+
/**
|
|
43
|
+
* Toggles whether tasks assigned to the current user are shown, and refreshes the task list.
|
|
44
|
+
*/
|
|
45
|
+
toggleIsAssigned(): void;
|
|
46
|
+
/**
|
|
47
|
+
* Sets the current UI filter to 'week' or removes it if already active.
|
|
48
|
+
*/
|
|
49
|
+
toggleIsWeek(): void;
|
|
50
|
+
/**
|
|
51
|
+
* Sets the current UI filter to 'overdue' or removes it if already active.
|
|
52
|
+
*/
|
|
53
|
+
toggleIsOverdue(): void;
|
|
54
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AppInboxService, never>;
|
|
55
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<AppInboxService>;
|
|
56
|
+
}
|
|
57
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { FormControl } from '@angular/forms';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class SearchComponent {
|
|
4
|
+
#private;
|
|
5
|
+
input: FormControl<string | null>;
|
|
6
|
+
constructor();
|
|
7
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SearchComponent, never>;
|
|
8
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SearchComponent, "ymi-search", never, {}, {}, never, never, true, never>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { FormGroup } from '@angular/forms';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
interface SortOption {
|
|
4
|
+
label: string;
|
|
5
|
+
value: string;
|
|
6
|
+
type: 'sort' | 'order';
|
|
7
|
+
}
|
|
8
|
+
export declare class SortComponent {
|
|
9
|
+
#private;
|
|
10
|
+
private translate;
|
|
11
|
+
sortOptions: import("@angular/core").WritableSignal<{
|
|
12
|
+
label: string;
|
|
13
|
+
value: string;
|
|
14
|
+
type: string;
|
|
15
|
+
}[]>;
|
|
16
|
+
orderOptions: import("@angular/core").WritableSignal<SortOption[]>;
|
|
17
|
+
sortFields: import("@angular/core").Signal<{
|
|
18
|
+
label: string;
|
|
19
|
+
value: string;
|
|
20
|
+
type: string;
|
|
21
|
+
}[]>;
|
|
22
|
+
sortForm: FormGroup;
|
|
23
|
+
sortChange: import("@angular/core").OutputEmitterRef<{
|
|
24
|
+
sort: string;
|
|
25
|
+
order: "asc" | "desc";
|
|
26
|
+
}>;
|
|
27
|
+
constructor();
|
|
28
|
+
selectSort(type: string, value: string): void;
|
|
29
|
+
onSelectionChange(): void;
|
|
30
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SortComponent, never>;
|
|
31
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SortComponent, "ymi-sort", never, {}, { "sortChange": "sortChange"; }, never, never, true, never>;
|
|
32
|
+
}
|
|
33
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { DmsObject, FlavoredDmsObject, TranslateService } from '@yuuvis/client-core';
|
|
2
|
+
import { FormStatusChangedEvent, ObjectFormComponent, ObjectFormOptions } from '@yuuvis/client-framework/object-form';
|
|
3
|
+
import { Task } from '@yuuvis/app-inbox/shared';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class TaskComponent {
|
|
6
|
+
#private;
|
|
7
|
+
task: import("@angular/core").InputSignal<Task | null>;
|
|
8
|
+
translate: TranslateService;
|
|
9
|
+
taskForm: import("@angular/core").Signal<ObjectFormComponent | undefined>;
|
|
10
|
+
taskFinished: import("@angular/core").OutputEmitterRef<void>;
|
|
11
|
+
dmsObject: import("@angular/core").WritableSignal<DmsObject | undefined>;
|
|
12
|
+
startFormOptions: import("@angular/core").WritableSignal<ObjectFormOptions | null>;
|
|
13
|
+
busy: import("@angular/core").WritableSignal<boolean>;
|
|
14
|
+
disableControls: import("@angular/core").WritableSignal<boolean>;
|
|
15
|
+
hasAttachments: import("@angular/core").Signal<boolean>;
|
|
16
|
+
onIndexdataSaved(updatedObject: any): void;
|
|
17
|
+
onFormStatusChanged(evt: FormStatusChangedEvent): void;
|
|
18
|
+
finishTask(): void;
|
|
19
|
+
flavoredDmsObject: import("@angular/core").Signal<FlavoredDmsObject | undefined>;
|
|
20
|
+
handleTask(taskId: string, action: string): void;
|
|
21
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TaskComponent, never>;
|
|
22
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TaskComponent, "ymi-task", never, { "task": { "alias": "task"; "required": false; "isSignal": true; }; }, { "taskFinished": "taskFinished"; }, never, never, true, never>;
|
|
23
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { OnInit } from '@angular/core';
|
|
2
|
+
import { PageEvent } from '@angular/material/paginator';
|
|
3
|
+
import { TranslateService } from '@yuuvis/client-core';
|
|
4
|
+
import { ListComponent } from '@yuuvis/client-framework/list';
|
|
5
|
+
import { Task } from '@yuuvis/app-inbox/shared';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export declare class InboxPageComponent implements OnInit {
|
|
8
|
+
#private;
|
|
9
|
+
readonly translate: TranslateService;
|
|
10
|
+
inboxPageSize: number;
|
|
11
|
+
/** Signals for data and state */
|
|
12
|
+
inbox: import("@ngrx/signals").SignalState<import("@yuuvis/app-inbox/shared").InboxState>;
|
|
13
|
+
tasks: import("@angular/core").Signal<Task[]>;
|
|
14
|
+
busy: import("@angular/core").WritableSignal<boolean>;
|
|
15
|
+
selectedSort: import("@angular/core").WritableSignal<string>;
|
|
16
|
+
sortOrder: import("@angular/core").WritableSignal<"asc" | "desc">;
|
|
17
|
+
task: import("@angular/core").WritableSignal<Task | null>;
|
|
18
|
+
listElement: import("@angular/core").Signal<ListComponent>;
|
|
19
|
+
iconsByWorkflowType: Record<string, string>;
|
|
20
|
+
selectedIndex: import("@angular/core").WritableSignal<number>;
|
|
21
|
+
itemSelected(idx: number[]): void;
|
|
22
|
+
getTaskIconKey(type: string): string;
|
|
23
|
+
changePage($event: PageEvent): void;
|
|
24
|
+
goToPage(page: number): void;
|
|
25
|
+
/** UI filter toggles (call service) */
|
|
26
|
+
groupTasksByWeek(): void;
|
|
27
|
+
groupTasksByOverdue(): void;
|
|
28
|
+
onTaskFinished(): void;
|
|
29
|
+
groupItems(): void;
|
|
30
|
+
/**
|
|
31
|
+
* Updates sort field and direction.
|
|
32
|
+
* @param sort Sorting field.
|
|
33
|
+
* @param order Sort direction.
|
|
34
|
+
*/
|
|
35
|
+
updateSort({ sort, order }: {
|
|
36
|
+
sort: string;
|
|
37
|
+
order: 'asc' | 'desc';
|
|
38
|
+
}): void;
|
|
39
|
+
/**
|
|
40
|
+
* Triggers a debounced fetch from backend (refresh button).
|
|
41
|
+
*/
|
|
42
|
+
refresh(): void;
|
|
43
|
+
isDateOverdue(dateInput?: string | Date): boolean;
|
|
44
|
+
ngOnInit(): void;
|
|
45
|
+
/** UI filter state getters for button highlighting */
|
|
46
|
+
get isWeekActive(): boolean;
|
|
47
|
+
get isOverdueActive(): boolean;
|
|
48
|
+
get isDoneActive(): boolean;
|
|
49
|
+
get isAssigned(): boolean;
|
|
50
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<InboxPageComponent, never>;
|
|
51
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<InboxPageComponent, "ymi-inbox", never, {}, {}, never, never, true, never>;
|
|
52
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@yuuvis/app-inbox",
|
|
3
|
+
"version": "0.9.0",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"peerDependencies": {
|
|
6
|
+
"@angular/common": "^18.2.0",
|
|
7
|
+
"@angular/core": "^18.2.0"
|
|
8
|
+
},
|
|
9
|
+
"dependencies": {
|
|
10
|
+
"tslib": "^2.3.0"
|
|
11
|
+
},
|
|
12
|
+
"sideEffects": false,
|
|
13
|
+
"module": "fesm2022/yuuvis-app-inbox.mjs",
|
|
14
|
+
"typings": "index.d.ts",
|
|
15
|
+
"exports": {
|
|
16
|
+
"./package.json": {
|
|
17
|
+
"default": "./package.json"
|
|
18
|
+
},
|
|
19
|
+
".": {
|
|
20
|
+
"types": "./index.d.ts",
|
|
21
|
+
"default": "./fesm2022/yuuvis-app-inbox.mjs"
|
|
22
|
+
},
|
|
23
|
+
"./extensions": {
|
|
24
|
+
"types": "./extensions/index.d.ts",
|
|
25
|
+
"default": "./fesm2022/yuuvis-app-inbox-extensions.mjs"
|
|
26
|
+
},
|
|
27
|
+
"./shared": {
|
|
28
|
+
"types": "./shared/index.d.ts",
|
|
29
|
+
"default": "./fesm2022/yuuvis-app-inbox-shared.mjs"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
package/public-api.d.ts
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { Pagination } from '@yuuvis/client-framework/pagination';
|
|
2
|
+
export interface ProcessVariable {
|
|
3
|
+
name: string;
|
|
4
|
+
type?: string;
|
|
5
|
+
value: any;
|
|
6
|
+
readonly?: boolean;
|
|
7
|
+
scope?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare const ProcessAction: {
|
|
10
|
+
complete: string;
|
|
11
|
+
claim: string;
|
|
12
|
+
delegate: string;
|
|
13
|
+
resolve: string;
|
|
14
|
+
save: string;
|
|
15
|
+
};
|
|
16
|
+
export interface TasksResponse {
|
|
17
|
+
objects: Task[];
|
|
18
|
+
hasMoreItems: boolean;
|
|
19
|
+
totalNumItems: number;
|
|
20
|
+
numItems: number;
|
|
21
|
+
}
|
|
22
|
+
export interface InboxState {
|
|
23
|
+
tasks: Task[];
|
|
24
|
+
pagination?: Pagination;
|
|
25
|
+
sort: string;
|
|
26
|
+
isAssigned: boolean;
|
|
27
|
+
searchConditions?: InboxSearchConditions;
|
|
28
|
+
}
|
|
29
|
+
export interface InboxSearchConditions {
|
|
30
|
+
nameLikeIgnoreCase?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* A task is an entry in a users inbox.
|
|
34
|
+
*/
|
|
35
|
+
export interface Task {
|
|
36
|
+
id: string;
|
|
37
|
+
processInstanceId: string;
|
|
38
|
+
taskDefinitionKey: string;
|
|
39
|
+
assignee: ProcessUser;
|
|
40
|
+
claimTime: Date;
|
|
41
|
+
createTime: Date;
|
|
42
|
+
dueDate: Date;
|
|
43
|
+
description: string;
|
|
44
|
+
taskMessages?: TaskMessage[];
|
|
45
|
+
taskForm?: {
|
|
46
|
+
schemaProperties?: string[];
|
|
47
|
+
model?: any;
|
|
48
|
+
data?: any;
|
|
49
|
+
outcomes?: TaskOutcome[];
|
|
50
|
+
};
|
|
51
|
+
delegationState?: string;
|
|
52
|
+
formKey: string;
|
|
53
|
+
initiator: ProcessUser;
|
|
54
|
+
name: string;
|
|
55
|
+
owner: ProcessUser;
|
|
56
|
+
parentTaskId: string;
|
|
57
|
+
processDefinition: {
|
|
58
|
+
id: string;
|
|
59
|
+
idPrefix: string;
|
|
60
|
+
name: string;
|
|
61
|
+
description: string;
|
|
62
|
+
};
|
|
63
|
+
suspended: false;
|
|
64
|
+
variables: ProcessVariable[];
|
|
65
|
+
resolvedValues?: {
|
|
66
|
+
[id: string]: string;
|
|
67
|
+
};
|
|
68
|
+
attachments: string[];
|
|
69
|
+
}
|
|
70
|
+
export interface ProcessUser {
|
|
71
|
+
id: string;
|
|
72
|
+
title: string;
|
|
73
|
+
}
|
|
74
|
+
export interface TaskMessage {
|
|
75
|
+
level?: string;
|
|
76
|
+
type?: string;
|
|
77
|
+
message: string;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* A task outcome is basically an action that will be rendered as a button in the
|
|
81
|
+
* task form. When the button is clicked, the outcome will be triggered.
|
|
82
|
+
*/
|
|
83
|
+
export interface TaskOutcome {
|
|
84
|
+
name: string;
|
|
85
|
+
variable: string;
|
|
86
|
+
value: any;
|
|
87
|
+
/**
|
|
88
|
+
* Optional form model. Could be the model object as well as a string (Id
|
|
89
|
+
* to fetch a form model from the backend).
|
|
90
|
+
*
|
|
91
|
+
* If you provide a model, triggering the outcome will display/render this form
|
|
92
|
+
* alongside with the tasks form. Values of all rendered forms will be put into
|
|
93
|
+
* the process variables
|
|
94
|
+
*/
|
|
95
|
+
model?: any;
|
|
96
|
+
/**
|
|
97
|
+
* Outcomes will be rendered as primary buttons. If you want an outcome
|
|
98
|
+
* to be less prominent you could set this property to 'true'
|
|
99
|
+
*/
|
|
100
|
+
secondary?: boolean;
|
|
101
|
+
}
|
|
102
|
+
export interface ProcessCreatePayload extends ProcessPostPayload {
|
|
103
|
+
processDefinitionKey: string;
|
|
104
|
+
name?: string;
|
|
105
|
+
businessKey?: string;
|
|
106
|
+
returnVariables?: boolean;
|
|
107
|
+
}
|
|
108
|
+
export interface ProcessPostPayload {
|
|
109
|
+
variables?: ProcessVariable[];
|
|
110
|
+
attachments?: string[];
|
|
111
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare const APP_INBOX_ID = "io.yuuvis.app.inbox";
|
|
2
|
+
export declare const APP_INBOX_NAME = "yuuvis Inbox";
|
|
3
|
+
export declare const APP_INBOX_ICON = "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#e8eaed\"><path d=\"M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-120H640q-30 38-71.5 59T480-240q-47 0-88.5-21T320-320H200v120Zm280-120q38 0 69-22t43-58h168v-360H200v360h168q12 36 43 58t69 22Zm0-80L320-560l56-58 64 64v-166h80v166l64-64 56 58-160 160ZM200-200h560-560Z\"/></svg>";
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ProcessVariable } from './inbox.interface';
|
|
2
|
+
export declare class AppInboxUtils {
|
|
3
|
+
/**
|
|
4
|
+
* Fixes the form model by ensuring that it contains 'core' and 'data' elements.
|
|
5
|
+
* If these elements are missing, they are added to the form model.
|
|
6
|
+
* @param formModel The form model to be fixed.
|
|
7
|
+
* @returns The fixed form model
|
|
8
|
+
*/
|
|
9
|
+
static fixFormModel(formModel: any): any;
|
|
10
|
+
static getIconKey(processIdPrefix: string): string;
|
|
11
|
+
static getIconNamespace(): string;
|
|
12
|
+
static getVariableType(element: any): string;
|
|
13
|
+
static getVariableValue(formValue: any, type: string): any;
|
|
14
|
+
static getProcessVariables(formData: unknown, formElements: unknown & {
|
|
15
|
+
type: string;
|
|
16
|
+
}, name: string): ProcessVariable;
|
|
17
|
+
}
|