[ACA-1574] DocumentList - single click navigation (#513)

* single click navigation

* fix tests

* allow action on row

* use adf link class

* update tests
This commit is contained in:
Cilibiu Bogdan 2018-07-18 18:25:30 +03:00 committed by Denys Vuika
parent 36629adf99
commit af4089ae74
7 changed files with 36 additions and 34 deletions

View File

@ -44,6 +44,7 @@ export class DataTable extends Component {
selectedRow: '.adf-datatable-row.is-selected', selectedRow: '.adf-datatable-row.is-selected',
cell: '.adf-data-table-cell', cell: '.adf-data-table-cell',
locationLink: 'aca-location-link', locationLink: 'aca-location-link',
linkCell: '.adf-location-cell',
selectedIcon: '.mat-icon', selectedIcon: '.mat-icon',
@ -59,6 +60,7 @@ export class DataTable extends Component {
body: ElementFinder = this.component.element(by.css(DataTable.selectors.body)); body: ElementFinder = this.component.element(by.css(DataTable.selectors.body));
cell = by.css(DataTable.selectors.cell); cell = by.css(DataTable.selectors.cell);
locationLink = by.css(DataTable.selectors.locationLink); locationLink = by.css(DataTable.selectors.locationLink);
linkCell: ElementFinder = this.component.element(by.css(DataTable.selectors.linkCell));
emptyList: ElementFinder = this.component.element(by.css(DataTable.selectors.emptyListContainer)); emptyList: ElementFinder = this.component.element(by.css(DataTable.selectors.emptyListContainer));
emptyFolderDragAndDrop: ElementFinder = this.component.element(by.css(DataTable.selectors.emptyFolderDragAndDrop)); emptyFolderDragAndDrop: ElementFinder = this.component.element(by.css(DataTable.selectors.emptyFolderDragAndDrop));
emptyListTitle: ElementFinder = this.component.element(by.css(DataTable.selectors.emptyListTitle)); emptyListTitle: ElementFinder = this.component.element(by.css(DataTable.selectors.emptyListTitle));
@ -139,10 +141,18 @@ export class DataTable extends Component {
return this.body.element(by.cssContainingText(`.adf-data-table-cell span`, name)); return this.body.element(by.cssContainingText(`.adf-data-table-cell span`, name));
} }
getRowLink(name: string): ElementFinder {
return this.body.element(by.cssContainingText(`.adf-data-table-cell a`, name));
}
getItemNameTooltip(name: string): promise.Promise<string> { getItemNameTooltip(name: string): promise.Promise<string> {
return this.getRowName(name).getAttribute('title'); return this.getRowName(name).getAttribute('title');
} }
getLinkCellTooltip(name: string): promise.Promise<string> {
return this.getRowLink(name).getAttribute('title');
}
countRows(): promise.Promise<number> { countRows(): promise.Promise<number> {
return this.getRows().count(); return this.getRows().count();
} }

View File

@ -150,12 +150,12 @@ describe('File Libraries', () => {
}); });
it('Tooltip for sites without description [C217096]', () => { it('Tooltip for sites without description [C217096]', () => {
const tooltip = dataTable.getItemNameTooltip(sitePrivate); const tooltip = dataTable.getLinkCellTooltip(sitePrivate);
expect(tooltip).toBe(`${sitePrivate}`); expect(tooltip).toBe(`${sitePrivate}`);
}); });
it('Tooltip for sites with description [C217097]', () => { it('Tooltip for sites with description [C217097]', () => {
const tooltip = dataTable.getItemNameTooltip(siteModerated); const tooltip = dataTable.getLinkCellTooltip(siteModerated);
expect(tooltip).toBe(`${siteDescription}`); expect(tooltip).toBe(`${siteDescription}`);
}); });
}); });

View File

@ -147,7 +147,7 @@
[allowDropFiles]="true" [allowDropFiles]="true"
[navigate]="false" [navigate]="false"
[imageResolver]="imageResolver" [imageResolver]="imageResolver"
(node-dblclick)="onNodeDoubleClick($event.detail?.node)"> (node-dblclick)="navigateTo($event.detail?.node)">
<data-columns> <data-columns>
<data-column <data-column
@ -158,11 +158,15 @@
</data-column> </data-column>
<data-column <data-column
class="adf-data-table-cell--ellipsis__name" class="adf-data-table-cell--ellipsis__name adf-location-cell"
key="name" key="name"
title="APP.DOCUMENT_LIST.COLUMNS.NAME"> title="APP.DOCUMENT_LIST.COLUMNS.NAME">
<ng-template let-value="value" let-context> <ng-template let-value="value" let-context>
<span class="adf-datatable-cell" title="{{ context?.row?.obj | adfNodeNameTooltip }}">{{ value }}</span> <a
title="{{ context?.row?.obj | adfNodeNameTooltip }}"
(click)="navigateTo(context?.row?.obj)">
{{ value }}
</a>
</ng-template> </ng-template>
</data-column> </data-column>

View File

@ -118,7 +118,7 @@ export class FilesComponent extends PageComponent implements OnInit, OnDestroy {
}); });
} }
onNodeDoubleClick(node: MinimalNodeEntity) { navigateTo(node: MinimalNodeEntity) {
if (node && node.entry) { if (node && node.entry) {
const { id, isFolder } = node.entry; const { id, isFolder } = node.entry;

View File

@ -49,7 +49,7 @@
selectionMode="single" selectionMode="single"
[navigate]="false" [navigate]="false"
[sorting]="[ 'title', 'asc' ]" [sorting]="[ 'title', 'asc' ]"
(node-dblclick)="onNodeDoubleClick($event)"> (node-dblclick)="navigateTo($event.detail?.node)">
<empty-folder-content> <empty-folder-content>
<ng-template> <ng-template>
@ -70,13 +70,15 @@
</data-column> </data-column>
<data-column <data-column
class="adf-data-table-cell--ellipsis__name" class="adf-data-table-cell--ellipsis__name adf-location-cell"
key="title" key="title"
title="APP.DOCUMENT_LIST.COLUMNS.TITLE"> title="APP.DOCUMENT_LIST.COLUMNS.TITLE">
<ng-template let-context> <ng-template let-context>
<span class="adf-datatable-cell" title="{{ makeLibraryTooltip(context.row.obj.entry) }}"> <a
title="{{ makeLibraryTooltip(context.row.obj.entry) }}"
(click)="navigateTo(context?.row?.obj)">
{{ makeLibraryTitle(context.row.obj.entry) }} {{ makeLibraryTitle(context.row.obj.entry) }}
</span> </a>
</ng-template> </ng-template>
</data-column> </data-column>

View File

@ -163,35 +163,23 @@ describe('LibrariesComponent', () => {
}); });
}); });
describe('onNodeDoubleClick', () => { describe('navigateTo', () => {
it('navigates to document', () => { it('navigates into library folder', () => {
spyOn(component, 'navigate'); spyOn(component, 'navigate');
const event: any = { const site: any = {
detail: { entry: { guid: 'node-guid' }
node: {
entry: { guid: 'node-guid' }
}
}
}; };
component.onNodeDoubleClick(event); component.navigateTo(site);
expect(component.navigate).toHaveBeenCalledWith('node-guid'); expect(component.navigate).toHaveBeenCalledWith('node-guid');
}); });
it(' does not navigate when document is not provided', () => { it(' does not navigate when library is not provided', () => {
spyOn(component, 'navigate'); spyOn(component, 'navigate');
const event: any = { component.navigateTo(null);
detail: {
node: {
entry: null
}
}
};
component.onNodeDoubleClick(event);
expect(component.navigate).not.toHaveBeenCalled(); expect(component.navigate).not.toHaveBeenCalled();
}); });

View File

@ -84,11 +84,9 @@ export class LibrariesComponent extends PageComponent implements OnInit {
return isDuplicate ? `${title} (${id})` : `${title}`; return isDuplicate ? `${title} (${id})` : `${title}`;
} }
onNodeDoubleClick(e: CustomEvent) { navigateTo(node: SiteEntry) {
const node: any = e.detail.node.entry; if (node && node.entry.guid) {
this.navigate(node.entry.guid);
if (node && node.guid) {
this.navigate(node.guid);
} }
} }