From 8c01ccf93138a7f492ce444b38778b936a64f8ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Grzegorz=20Ja=C5=9Bkowski?= <138671284+g-jaskowski@users.noreply.github.com> Date: Fri, 13 Sep 2024 09:35:48 +0200 Subject: [PATCH] [ACS-8745] handle row selection in process list (#10196) * ACS-8745 handle row selection in process list * ACS-8745 add type to event emitter * ACS-8745 change type in docs * ACS-8745 review remarks - duplicated methods, redundant property * ACS-8745 review remarks - docs typo, unit tests --- .../components/process-list.component.md | 1 + .../process-list/process-list.component.html | 5 +++- .../process-list.component.spec.ts | 23 +++++++++++++++++++ .../process-list/process-list.component.ts | 11 ++++++++- 4 files changed, 38 insertions(+), 2 deletions(-) diff --git a/docs/process-services/components/process-list.component.md b/docs/process-services/components/process-list.component.md index 242cdf486e..b38957458f 100644 --- a/docs/process-services/components/process-list.component.md +++ b/docs/process-services/components/process-list.component.md @@ -77,6 +77,7 @@ when the process list is empty: | rowClick | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when a row in the process list is clicked. | | showRowContextMenu | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`DataCellEvent`](../../../lib/core/src/lib/datatable/components/data-cell.event.ts)`>` | Emitted before the context menu is displayed for a row. | | success | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`ProcessListModel`](../../../lib/process-services/src/lib/process-list/models/process-list.model.ts)`>` | Emitted when the list of process instances has been loaded successfully from the server. | +| rowsSelected | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`ObjectDataRow[]`](../../../lib/core/src/lib/datatable/data/object-datarow.model.ts)`>` | Emmitted when rows are selected or unselected. | ## Details diff --git a/lib/process-services/src/lib/process-list/components/process-list/process-list.component.html b/lib/process-services/src/lib/process-list/components/process-list/process-list.component.html index 94dbc0540a..e299f85906 100644 --- a/lib/process-services/src/lib/process-list/components/process-list/process-list.component.html +++ b/lib/process-services/src/lib/process-list/components/process-list/process-list.component.html @@ -13,7 +13,10 @@ [contextMenu]="showContextMenu" (showRowContextMenu)="onShowRowContextMenu($event)" (rowClick)="onRowClick($event)" - (row-keyup)="onRowKeyUp($any($event))"> + (row-keyup)="onRowKeyUp($any($event))" + (row-select)="onRowCheckboxToggle($any($event))" + (row-unselect)="onRowCheckboxToggle($any($event))" +> { expect(triggered).toBeFalsy(); }); + it('should emit rowsSelected event when a row is selected', (done) => { + const row = new ObjectDataRow({ obj: fakeProcessInstance.data[0] }); + const customEvent = new CustomEvent('row-select', { detail: { selection: [row] } }); + + component.rowsSelected.subscribe((selection) => { + expect(selection).toEqual([row]); + done(); + }); + + component.onRowCheckboxToggle(customEvent); + }); + + it('should emit rowsSelected event when a row is unselected', (done) => { + const customEvent = new CustomEvent('row-unselect', { detail: { selection: [] } }); + + component.rowsSelected.subscribe((selection) => { + expect(selection).toEqual([]); + done(); + }); + + component.onRowCheckboxToggle(customEvent); + }); + it('should show custom resolved value in the column', async () => { appConfig.config['adf-process-list'] = { presets: { diff --git a/lib/process-services/src/lib/process-list/components/process-list/process-list.component.ts b/lib/process-services/src/lib/process-list/components/process-list/process-list.component.ts index 3cb8f2d918..5b33fb1c8d 100644 --- a/lib/process-services/src/lib/process-list/components/process-list/process-list.component.ts +++ b/lib/process-services/src/lib/process-list/components/process-list/process-list.component.ts @@ -32,7 +32,8 @@ import { EmptyContentComponent, DataTableComponent, LoadingContentTemplateDirective, - NoContentTemplateDirective + NoContentTemplateDirective, + ObjectDataRow } from '@alfresco/adf-core'; import { AfterContentInit, Component, ContentChild, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core'; import { ProcessService } from '../../services/process.service'; @@ -181,6 +182,10 @@ export class ProcessInstanceListComponent extends DataTableSchema implements OnC @Output() error = new EventEmitter(); + /** Emitted when rows are selected/unselected */ + @Output() + rowsSelected = new EventEmitter(); + requestNode: ProcessInstanceQueryRepresentation; currentInstanceId: string; isLoading: boolean = true; @@ -275,6 +280,10 @@ export class ProcessInstanceListComponent extends DataTableSchema implements OnC this.rowClick.emit(this.currentInstanceId); } + onRowCheckboxToggle(event: CustomEvent) { + this.rowsSelected.emit([...event.detail.selection]); + } + /** * Emit the event rowClick passing the current task id when pressed the Enter key on the selected row *