From 9947d6aa40ceb49edeff6a1cfe91e93eb5bbfb12 Mon Sep 17 00:00:00 2001 From: arditdomi <32884230+arditdomi@users.noreply.github.com> Date: Mon, 11 Jan 2021 09:36:10 +0000 Subject: [PATCH] [AAE-3467] - Fix Uploaded files are not being attached after selecting more files (#6506) * Fix selection not working after uploading files, simplify if else conditions * add unit test --- .../document-list.component.spec.ts | 27 ++++++++++-- .../components/document-list.component.ts | 42 ++++--------------- 2 files changed, 32 insertions(+), 37 deletions(-) diff --git a/lib/content-services/src/lib/document-list/components/document-list.component.spec.ts b/lib/content-services/src/lib/document-list/components/document-list.component.spec.ts index 3a59568534..8712261828 100644 --- a/lib/content-services/src/lib/document-list/components/document-list.component.spec.ts +++ b/lib/content-services/src/lib/document-list/components/document-list.component.spec.ts @@ -27,7 +27,8 @@ import { DataTableModule, ObjectDataTableAdapter, ShowHeaderMode, - ThumbnailService + ThumbnailService, + ContentService } from '@alfresco/adf-core'; import { Subject, of, throwError } from 'rxjs'; import { @@ -52,6 +53,7 @@ import { NodeEntry } from '@alfresco/js-api'; import { By } from '@angular/platform-browser'; import { DocumentListModule } from '../document-list.module'; import { TranslateModule } from '@ngx-translate/core'; +import { ShareDataRow } from '../data/share-data-row.model'; describe('DocumentList', () => { @@ -60,6 +62,7 @@ describe('DocumentList', () => { let apiService: AlfrescoApiService; let customResourcesService: CustomResourcesService; let thumbnailService: ThumbnailService; + let contentService: ContentService; let fixture: ComponentFixture; let element: HTMLElement; let eventMock: any; @@ -91,6 +94,7 @@ describe('DocumentList', () => { apiService = TestBed.inject(AlfrescoApiService); customResourcesService = TestBed.inject(CustomResourcesService); thumbnailService = TestBed.inject(ThumbnailService); + contentService = TestBed.inject(ContentService); spyFolder = spyOn(documentListService, 'getFolder').and.callFake(() => { return Promise.resolve({ list: {} }); @@ -1544,7 +1548,7 @@ describe('DocumentList', () => { expect(nodeSelectedSpy).toHaveBeenCalled(); }); - it('should able to select first node from the preselectNodes when selectionMode set to single', async () => { + it('should be able to select first node from the preselectNodes when selectionMode set to single', async () => { documentList.selectionMode = 'single'; fixture.detectChanges(); @@ -1559,7 +1563,7 @@ describe('DocumentList', () => { expect(documentList.getPreselectNodesBasedOnSelectionMode().length).toBe(1); }); - it('should able to select all preselectNodes when selectionMode set to multiple', async () => { + it('should be able to select all preselectNodes when selectionMode set to multiple', async () => { documentList.selectionMode = 'multiple'; fixture.detectChanges(); @@ -1574,7 +1578,22 @@ describe('DocumentList', () => { expect(documentList.getPreselectNodesBasedOnSelectionMode().length).toBe(2); }); - it('should not emit nodeSelected event when preselectNodes undefined/empty', async () => { + it('should call the datatable select row method for each preselected node', async () => { + const datatableSelectRowSpy = spyOn(documentList.dataTable, 'selectRow'); + const fakeDatatableRows = [new ShareDataRow(mockPreselectedNodes[0], contentService, null), new ShareDataRow(mockPreselectedNodes[1], contentService, null)]; + spyOn(documentList.data, 'getPreselectRows').and.returnValue(fakeDatatableRows); + + documentList.selectionMode = 'multiple'; + documentList.preselectNodes = mockPreselectedNodes; + documentList.onPreselectNodes(); + + fixture.detectChanges(); + await fixture.whenStable(); + + expect(datatableSelectRowSpy.calls.count()).toEqual(fakeDatatableRows.length); + }); + + it('should not emit nodeSelected event when preselectNodes is undefined/empty', async () => { const nodeSelectedSpy = spyOn(documentList.nodeSelected, 'emit'); fixture.detectChanges(); diff --git a/lib/content-services/src/lib/document-list/components/document-list.component.ts b/lib/content-services/src/lib/document-list/components/document-list.component.ts index 11655a0dc7..fdb31ec8ad 100644 --- a/lib/content-services/src/lib/document-list/components/document-list.component.ts +++ b/lib/content-services/src/lib/document-list/components/document-list.component.ts @@ -44,8 +44,7 @@ import { RequestPaginationModel, AlfrescoApiService, UserPreferenceValues, - LockService, - DataRow + LockService } from '@alfresco/adf-core'; import { Node, NodeEntry, NodePaging, Pagination } from '@alfresco/js-api'; @@ -634,13 +633,7 @@ export class DocumentListComponent implements OnInit, OnChanges, OnDestroy, Afte */ executeContentAction(node: NodeEntry, action: ContentActionModel) { if (node && node.entry && action) { - let handlerSub; - - if (typeof action.handler === 'function') { - handlerSub = action.handler(node, this, action.permission); - } else { - handlerSub = of(true); - } + const handlerSub = (typeof action.handler === 'function') ? action.handler(node, this, action.permission) : of(true); if (typeof action.execute === 'function' && handlerSub) { handlerSub @@ -879,12 +872,7 @@ export class DocumentListComponent implements OnInit, OnChanges, OnDestroy, Afte private loadLayoutPresets(): void { const externalSettings = this.appConfig.get('document-list.presets', null); - - if (externalSettings) { - this.layoutPresets = Object.assign({}, presetsDefaultModel, externalSettings); - } else { - this.layoutPresets = presetsDefaultModel; - } + this.layoutPresets = externalSettings ? Object.assign({}, presetsDefaultModel, externalSettings) : presetsDefaultModel; } private onDataReady(nodePaging: NodePaging) { @@ -932,29 +920,17 @@ export class DocumentListComponent implements OnInit, OnChanges, OnDestroy, Afte } getPreselectNodesBasedOnSelectionMode(): NodeEntry[] { - let selectedNodes: NodeEntry[] = []; - - if (this.hasPreselectNodes()) { - if (this.isSingleSelectionMode()) { - selectedNodes = [this.preselectNodes[0]]; - } else { - selectedNodes = this.preselectNodes; - } - } - - return selectedNodes; + return this.hasPreselectNodes() ? (this.isSingleSelectionMode() ? [this.preselectNodes[0]] : this.preselectNodes) : []; } - private onPreselectNodes() { + onPreselectNodes() { if (this.hasPreselectNodes()) { - let selectedNodes: DataRow[] = []; + const preselectedNodes = [...this.isSingleSelectionMode() ? [this.data.getPreselectRows()[0]] : this.data.getPreselectRows()]; + const selectedNodes = [...this.selection, ...preselectedNodes]; - if (this.isSingleSelectionMode()) { - selectedNodes = [this.data.getPreselectRows()[0]]; - } else { - selectedNodes = this.data.getPreselectRows(); + for (const node of preselectedNodes) { + this.dataTable.selectRow(node, true); } - this.onNodeSelect({ row: undefined, selection: selectedNodes }); } }