diff --git a/lib/process-services-cloud/src/lib/task/task-cloud.module.ts b/lib/process-services-cloud/src/lib/task/task-cloud.module.ts index ed458b4755..40a83589d0 100644 --- a/lib/process-services-cloud/src/lib/task/task-cloud.module.ts +++ b/lib/process-services-cloud/src/lib/task/task-cloud.module.ts @@ -18,17 +18,17 @@ import { NgModule } from '@angular/core'; import { TaskListCloudModule } from './task-list/task-list-cloud.module'; import { TaskFiltersCloudModule } from './task-filters/task-filters-cloud.module'; -import { TaskHeaderCloudModule } from './task-header/task-header-cloud.module'; import { TaskDirectiveModule } from './directives/task-directive.module'; import { TaskFormCloudComponent } from './task-form/components/task-form-cloud.component'; import { StartTaskCloudComponent } from './start-task/components/start-task-cloud.component'; +import { TaskHeaderCloudComponent } from './task-header/components/task-header-cloud.component'; @NgModule({ imports: [ TaskListCloudModule, TaskFiltersCloudModule, StartTaskCloudComponent, - TaskHeaderCloudModule, + TaskHeaderCloudComponent, TaskDirectiveModule, TaskFormCloudComponent ], @@ -36,7 +36,7 @@ import { StartTaskCloudComponent } from './start-task/components/start-task-clou TaskListCloudModule, TaskFiltersCloudModule, StartTaskCloudComponent, - TaskHeaderCloudModule, + TaskHeaderCloudComponent, TaskDirectiveModule, TaskFormCloudComponent ] diff --git a/lib/process-services-cloud/src/lib/task/task-header/components/task-header-cloud.component.spec.ts b/lib/process-services-cloud/src/lib/task/task-header/components/task-header-cloud.component.spec.ts index 1583c10495..ea27a963de 100644 --- a/lib/process-services-cloud/src/lib/task/task-header/components/task-header-cloud.component.spec.ts +++ b/lib/process-services-cloud/src/lib/task/task-header/components/task-header-cloud.component.spec.ts @@ -23,7 +23,6 @@ import { AlfrescoApiService } from '@alfresco/adf-content-services'; import { AppConfigService } from '@alfresco/adf-core'; import { ProcessServiceCloudTestingModule } from '../../../testing/process-service-cloud.testing.module'; import { TaskCloudService } from '../../services/task-cloud.service'; -import { TaskHeaderCloudModule } from '../task-header-cloud.module'; import { assignedTaskDetailsCloudMock, completedTaskDetailsCloudMock, @@ -32,7 +31,6 @@ import { taskDetailsWithParentTaskIdMock, createdTaskDetailsCloudMock } from '../mocks/task-details-cloud.mock'; -import { MatSelectModule } from '@angular/material/select'; import { HarnessLoader } from '@angular/cdk/testing'; import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed'; import { MatSelectHarness } from '@angular/material/select/testing'; @@ -62,7 +60,7 @@ describe('TaskHeaderCloudComponent', () => { beforeEach(() => { TestBed.configureTestingModule({ - imports: [ProcessServiceCloudTestingModule, TaskHeaderCloudModule, MatSelectModule] + imports: [ProcessServiceCloudTestingModule, TaskHeaderCloudComponent] }); appConfigService = TestBed.inject(AppConfigService); appConfigService.config = { diff --git a/lib/process-services-cloud/src/lib/task/task-header/components/task-header-cloud.component.stories.ts b/lib/process-services-cloud/src/lib/task/task-header/components/task-header-cloud.component.stories.ts index 5ab6a3a6e1..f6d70478f4 100644 --- a/lib/process-services-cloud/src/lib/task/task-header/components/task-header-cloud.component.stories.ts +++ b/lib/process-services-cloud/src/lib/task/task-header/components/task-header-cloud.component.stories.ts @@ -16,7 +16,6 @@ */ import { applicationConfig, Meta, moduleMetadata, StoryFn } from '@storybook/angular'; -import { TaskHeaderCloudModule } from '../task-header-cloud.module'; import { TaskHeaderCloudComponent } from './task-header-cloud.component'; import { TaskCloudService } from '../../services/task-cloud.service'; import { TaskCloudServiceMock } from '../../mock/task-cloud.service.mock'; @@ -28,7 +27,7 @@ export default { title: 'Process Services Cloud/Task Cloud/Task Header Cloud/Task Header Cloud', decorators: [ moduleMetadata({ - imports: [TaskHeaderCloudModule], + imports: [TaskHeaderCloudComponent], providers: [{ provide: TaskCloudService, useClass: TaskCloudServiceMock }] }), applicationConfig({ diff --git a/lib/process-services-cloud/src/lib/task/task-header/components/task-header-cloud.component.ts b/lib/process-services-cloud/src/lib/task/task-header/components/task-header-cloud.component.ts index 191df48ed1..c892d15051 100644 --- a/lib/process-services-cloud/src/lib/task/task-header/components/task-header-cloud.component.ts +++ b/lib/process-services-cloud/src/lib/task/task-header/components/task-header-cloud.component.ts @@ -30,19 +30,25 @@ import { CardViewUpdateService, CardViewDatetimeItemModel, CardViewArrayItem, - CardViewSelectItemModel + CardViewSelectItemModel, + CardViewComponent } from '@alfresco/adf-core'; import { TaskDetailsCloudModel } from '../../start-task/models/task-details-cloud.model'; import { TaskCloudService } from '../../services/task-cloud.service'; +import { CommonModule } from '@angular/common'; +import { TranslateModule } from '@ngx-translate/core'; +import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; +import { MatCardModule } from '@angular/material/card'; @Component({ selector: 'adf-cloud-task-header', + standalone: true, + imports: [CommonModule, TranslateModule, MatProgressSpinnerModule, CardViewComponent, MatCardModule], templateUrl: './task-header-cloud.component.html', styleUrls: ['./task-header-cloud.component.scss'], encapsulation: ViewEncapsulation.None }) export class TaskHeaderCloudComponent implements OnInit, OnDestroy, OnChanges { - /** (Required) The name of the application. */ @Input() appName: string = ''; @@ -92,16 +98,11 @@ export class TaskHeaderCloudComponent implements OnInit, OnDestroy, OnChanges { } ngOnInit() { - this.taskCloudService.dataChangesDetected$ - .pipe(takeUntil(this.onDestroy$)) - .subscribe(() => { + this.taskCloudService.dataChangesDetected$.pipe(takeUntil(this.onDestroy$)).subscribe(() => { this.loadTaskDetailsById(this.appName, this.taskId); }); - this.cardViewUpdateService.itemUpdated$ - .pipe(takeUntil(this.onDestroy$)) - .subscribe(this.updateTaskDetails.bind(this) - ); + this.cardViewUpdateService.itemUpdated$.pipe(takeUntil(this.onDestroy$)).subscribe(this.updateTaskDetails.bind(this)); } ngOnChanges() { @@ -115,162 +116,139 @@ export class TaskHeaderCloudComponent implements OnInit, OnDestroy, OnChanges { loadTaskDetailsById(appName: string, taskId: string) { this.isLoading = true; - this.taskCloudService.getTaskById(appName, taskId).pipe( - concatMap((task) => - forkJoin( - of(task), - this.taskCloudService.getCandidateUsers(this.appName, this.taskId), - this.taskCloudService.getCandidateGroups(this.appName, this.taskId) - ) - ), - finalize(() => (this.isLoading = false)) - ).subscribe(([taskDetails, candidateUsers, candidateGroups]) => { - this.taskDetails = taskDetails; - this.candidateGroups = candidateGroups.map((user) => ({ icon: 'group', value: user } as CardViewArrayItem)); - this.candidateUsers = candidateUsers.map((group) => ({ icon: 'person', value: group } as CardViewArrayItem)); - this.processInstanceId = taskDetails.processInstanceId; - if (this.taskDetails.parentTaskId) { - this.loadParentName(`${this.taskDetails.parentTaskId}`); - } else { - this.refreshData(); + this.taskCloudService + .getTaskById(appName, taskId) + .pipe( + concatMap((task) => + forkJoin( + of(task), + this.taskCloudService.getCandidateUsers(this.appName, this.taskId), + this.taskCloudService.getCandidateGroups(this.appName, this.taskId) + ) + ), + finalize(() => (this.isLoading = false)) + ) + .subscribe( + ([taskDetails, candidateUsers, candidateGroups]) => { + this.taskDetails = taskDetails; + this.candidateGroups = candidateGroups.map((user) => ({ icon: 'group', value: user } as CardViewArrayItem)); + this.candidateUsers = candidateUsers.map((group) => ({ icon: 'person', value: group } as CardViewArrayItem)); + this.processInstanceId = taskDetails.processInstanceId; + if (this.taskDetails.parentTaskId) { + this.loadParentName(`${this.taskDetails.parentTaskId}`); + } else { + this.refreshData(); + } + }, + (err) => { + this.error.emit(err); } - }, - (err) => { - this.error.emit(err); - }); + ); } private initDefaultProperties() { return [ - new CardViewTextItemModel( - { - label: 'ADF_CLOUD_TASK_HEADER.PROPERTIES.ASSIGNEE', - value: this.taskDetails.assignee, - key: 'assignee', - clickable: this.isAssigneePropertyClickable(), - default: this.translationService.instant('ADF_CLOUD_TASK_HEADER.PROPERTIES.ASSIGNEE_DEFAULT'), - icon: 'create' - } - ), - new CardViewTextItemModel( - { - label: 'ADF_CLOUD_TASK_HEADER.PROPERTIES.STATUS', - value: this.taskDetails.status, - key: 'status' - } - ), - new CardViewSelectItemModel( - { - label: 'ADF_CLOUD_TASK_HEADER.PROPERTIES.PRIORITY', - value: this.taskDetails.priority.toString(), - key: 'priority', - editable: true, - displayNoneOption: false, - options$: of(this.taskCloudService.priorities) - } - ), - new CardViewDatetimeItemModel( - { - label: 'ADF_CLOUD_TASK_HEADER.PROPERTIES.DUE_DATE', - value: this.taskDetails.dueDate, - key: 'dueDate', - default: this.translationService.instant('ADF_CLOUD_TASK_HEADER.PROPERTIES.DUE_DATE_DEFAULT'), - editable: true, - format: this.dateFormat, - locale: this.dateLocale - } - ), - new CardViewTextItemModel( - { - label: 'ADF_CLOUD_TASK_HEADER.PROPERTIES.CATEGORY', - value: this.taskDetails.category, - key: 'category', - default: this.translationService.instant('ADF_CLOUD_TASK_HEADER.PROPERTIES.CATEGORY_DEFAULT') - } - ), - new CardViewDateItemModel( - { - label: 'ADF_CLOUD_TASK_HEADER.PROPERTIES.CREATED', - value: this.taskDetails.createdDate, - key: 'created', - format: this.dateFormat, - locale: this.dateLocale - } - ), - new CardViewTextItemModel( - { - label: 'ADF_CLOUD_TASK_HEADER.PROPERTIES.PARENT_NAME', - value: this.parentTaskName, - default: this.translationService.instant('ADF_CLOUD_TASK_HEADER.PROPERTIES.PARENT_NAME_DEFAULT'), - key: 'parentName', - clickable: true - } - ), - new CardViewTextItemModel( - { - label: 'ADF_CLOUD_TASK_HEADER.PROPERTIES.PARENT_TASK_ID', - value: this.taskDetails.parentTaskId, - key: 'parentTaskId', - clickable: true - } - ), - new CardViewDateItemModel( - { - label: 'ADF_CLOUD_TASK_HEADER.PROPERTIES.END_DATE', - value: this.taskDetails.completedDate, - key: 'endDate', - format: this.dateFormat, - locale: this.dateLocale - } - ), - new CardViewTextItemModel( - { - label: 'ADF_CLOUD_TASK_HEADER.PROPERTIES.ID', - value: this.taskDetails.id, - key: 'id' - } - ), - new CardViewTextItemModel( - { - label: 'ADF_CLOUD_TASK_HEADER.PROPERTIES.PROCESS_INSTANCE_ID', - value: this.processInstanceId, - default: this.translationService.instant('ADF_CLOUD_TASK_HEADER.PROPERTIES.PROCESS_INSTANCE_ID_DEFAULT'), - key: 'processInstanceId', - clickable: true - } - ), - new CardViewTextItemModel( - { - label: 'ADF_CLOUD_TASK_HEADER.PROPERTIES.DESCRIPTION', - value: this.taskDetails.description, - key: 'description', - default: this.translationService.instant('ADF_CLOUD_TASK_HEADER.PROPERTIES.DESCRIPTION_DEFAULT'), - multiline: true, - editable: true - } - ), - new CardViewArrayItemModel( - { - label: 'ADF_CLOUD_TASK_HEADER.PROPERTIES.CANDIDATE_USERS', - value: of(this.candidateUsers), - key: 'candidateUsers', - icon: 'edit', - clickable: false, - default: this.translationService.instant('ADF_CLOUD_TASK_HEADER.PROPERTIES.CANDIDATE_USERS_DEFAULT'), - noOfItemsToDisplay: 2 - } - ), - new CardViewArrayItemModel( - { - label: 'ADF_CLOUD_TASK_HEADER.PROPERTIES.CANDIDATE_GROUPS', - value: of(this.candidateGroups), - key: 'candidateGroups', - icon: 'edit', - clickable: false, - default: this.translationService.instant('ADF_CLOUD_TASK_HEADER.PROPERTIES.CANDIDATE_GROUPS_DEFAULT'), - noOfItemsToDisplay: 2 - } - ) + new CardViewTextItemModel({ + label: 'ADF_CLOUD_TASK_HEADER.PROPERTIES.ASSIGNEE', + value: this.taskDetails.assignee, + key: 'assignee', + clickable: this.isAssigneePropertyClickable(), + default: this.translationService.instant('ADF_CLOUD_TASK_HEADER.PROPERTIES.ASSIGNEE_DEFAULT'), + icon: 'create' + }), + new CardViewTextItemModel({ + label: 'ADF_CLOUD_TASK_HEADER.PROPERTIES.STATUS', + value: this.taskDetails.status, + key: 'status' + }), + new CardViewSelectItemModel({ + label: 'ADF_CLOUD_TASK_HEADER.PROPERTIES.PRIORITY', + value: this.taskDetails.priority.toString(), + key: 'priority', + editable: true, + displayNoneOption: false, + options$: of(this.taskCloudService.priorities) + }), + new CardViewDatetimeItemModel({ + label: 'ADF_CLOUD_TASK_HEADER.PROPERTIES.DUE_DATE', + value: this.taskDetails.dueDate, + key: 'dueDate', + default: this.translationService.instant('ADF_CLOUD_TASK_HEADER.PROPERTIES.DUE_DATE_DEFAULT'), + editable: true, + format: this.dateFormat, + locale: this.dateLocale + }), + new CardViewTextItemModel({ + label: 'ADF_CLOUD_TASK_HEADER.PROPERTIES.CATEGORY', + value: this.taskDetails.category, + key: 'category', + default: this.translationService.instant('ADF_CLOUD_TASK_HEADER.PROPERTIES.CATEGORY_DEFAULT') + }), + new CardViewDateItemModel({ + label: 'ADF_CLOUD_TASK_HEADER.PROPERTIES.CREATED', + value: this.taskDetails.createdDate, + key: 'created', + format: this.dateFormat, + locale: this.dateLocale + }), + new CardViewTextItemModel({ + label: 'ADF_CLOUD_TASK_HEADER.PROPERTIES.PARENT_NAME', + value: this.parentTaskName, + default: this.translationService.instant('ADF_CLOUD_TASK_HEADER.PROPERTIES.PARENT_NAME_DEFAULT'), + key: 'parentName', + clickable: true + }), + new CardViewTextItemModel({ + label: 'ADF_CLOUD_TASK_HEADER.PROPERTIES.PARENT_TASK_ID', + value: this.taskDetails.parentTaskId, + key: 'parentTaskId', + clickable: true + }), + new CardViewDateItemModel({ + label: 'ADF_CLOUD_TASK_HEADER.PROPERTIES.END_DATE', + value: this.taskDetails.completedDate, + key: 'endDate', + format: this.dateFormat, + locale: this.dateLocale + }), + new CardViewTextItemModel({ + label: 'ADF_CLOUD_TASK_HEADER.PROPERTIES.ID', + value: this.taskDetails.id, + key: 'id' + }), + new CardViewTextItemModel({ + label: 'ADF_CLOUD_TASK_HEADER.PROPERTIES.PROCESS_INSTANCE_ID', + value: this.processInstanceId, + default: this.translationService.instant('ADF_CLOUD_TASK_HEADER.PROPERTIES.PROCESS_INSTANCE_ID_DEFAULT'), + key: 'processInstanceId', + clickable: true + }), + new CardViewTextItemModel({ + label: 'ADF_CLOUD_TASK_HEADER.PROPERTIES.DESCRIPTION', + value: this.taskDetails.description, + key: 'description', + default: this.translationService.instant('ADF_CLOUD_TASK_HEADER.PROPERTIES.DESCRIPTION_DEFAULT'), + multiline: true, + editable: true + }), + new CardViewArrayItemModel({ + label: 'ADF_CLOUD_TASK_HEADER.PROPERTIES.CANDIDATE_USERS', + value: of(this.candidateUsers), + key: 'candidateUsers', + icon: 'edit', + clickable: false, + default: this.translationService.instant('ADF_CLOUD_TASK_HEADER.PROPERTIES.CANDIDATE_USERS_DEFAULT'), + noOfItemsToDisplay: 2 + }), + new CardViewArrayItemModel({ + label: 'ADF_CLOUD_TASK_HEADER.PROPERTIES.CANDIDATE_GROUPS', + value: of(this.candidateGroups), + key: 'candidateGroups', + icon: 'edit', + clickable: false, + default: this.translationService.instant('ADF_CLOUD_TASK_HEADER.PROPERTIES.CANDIDATE_GROUPS_DEFAULT'), + noOfItemsToDisplay: 2 + }) ]; } @@ -291,26 +269,26 @@ export class TaskHeaderCloudComponent implements OnInit, OnDestroy, OnChanges { * @param updateNotification notification model */ private updateTaskDetails(updateNotification: UpdateNotification) { - this.taskCloudService.updateTask(this.appName, this.taskId, updateNotification.changed) - .pipe(catchError(() => { - this.cardViewUpdateService.updateElement(updateNotification.target); - return of(null); - })) + this.taskCloudService + .updateTask(this.appName, this.taskId, updateNotification.changed) + .pipe( + catchError(() => { + this.cardViewUpdateService.updateElement(updateNotification.target); + return of(null); + }) + ) .subscribe((taskDetails) => { - if (taskDetails) { - this.taskDetails = taskDetails; - } - }); + if (taskDetails) { + this.taskDetails = taskDetails; + } + }); } private loadParentName(taskId: string) { - this.taskCloudService.getTaskById(this.appName, taskId) - .subscribe( - (taskDetails) => { - this.parentTaskName = taskDetails.name; - this.refreshData(); - } - ); + this.taskCloudService.getTaskById(this.appName, taskId).subscribe((taskDetails) => { + this.parentTaskName = taskDetails.name; + this.refreshData(); + }); } isCompleted(): boolean { diff --git a/lib/process-services-cloud/src/lib/task/task-header/task-header-cloud.module.spec.ts b/lib/process-services-cloud/src/lib/task/task-header/task-header-cloud.module.spec.ts deleted file mode 100644 index 5baab00138..0000000000 --- a/lib/process-services-cloud/src/lib/task/task-header/task-header-cloud.module.spec.ts +++ /dev/null @@ -1,30 +0,0 @@ -/*! - * @license - * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { TaskHeaderCloudModule } from './task-header-cloud.module'; - -describe('TaskHeaderCloudModule', () => { - let taskHeaderCloudModule: TaskHeaderCloudModule; - - beforeEach(() => { - taskHeaderCloudModule = new TaskHeaderCloudModule(); - }); - - it('should create an instance', () => { - expect(taskHeaderCloudModule).toBeTruthy(); - }); -}); diff --git a/lib/process-services-cloud/src/lib/task/task-header/task-header-cloud.module.ts b/lib/process-services-cloud/src/lib/task/task-header/task-header-cloud.module.ts index 9536b793f9..b1d5bd04e1 100644 --- a/lib/process-services-cloud/src/lib/task/task-header/task-header-cloud.module.ts +++ b/lib/process-services-cloud/src/lib/task/task-header/task-header-cloud.module.ts @@ -16,22 +16,11 @@ */ import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { MaterialModule } from '../../material.module'; -import { CoreModule } from '@alfresco/adf-core'; import { TaskHeaderCloudComponent } from './components/task-header-cloud.component'; +/** @deprecated use TaskHeaderCloudComponent instead */ @NgModule({ - imports: [ - CommonModule, - MaterialModule, - CoreModule.forChild() - ], - declarations: [ - TaskHeaderCloudComponent - ], - exports: [ - TaskHeaderCloudComponent - ] + imports: [TaskHeaderCloudComponent], + exports: [TaskHeaderCloudComponent] }) -export class TaskHeaderCloudModule { } +export class TaskHeaderCloudModule {}