mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-07-31 17:38:48 +00:00
Merge pull request #4155 from Alfresco/dev-spopa-ADF-3860
This commit is contained in:
@@ -1,10 +1,11 @@
|
|||||||
<div
|
<div
|
||||||
|
role="grid"
|
||||||
*ngIf="data" class="adf-full-width"
|
*ngIf="data" class="adf-full-width"
|
||||||
[class.adf-data-table-card]="display === 'gallery'"
|
[class.adf-data-table-card]="display === 'gallery'"
|
||||||
[class.adf-data-table]="display === 'list'"
|
[class.adf-data-table]="display === 'list'"
|
||||||
[class.adf-data-table--empty]="isEmpty()">
|
[class.adf-data-table--empty]="isEmpty()">
|
||||||
<div *ngIf="isHeaderVisible()" class="adf-datatable-header">
|
<div *ngIf="isHeaderVisible()" class="adf-datatable-header" role="rowgroup">
|
||||||
<div class="adf-datatable-row" *ngIf="display === 'list'">
|
<div class="adf-datatable-row" *ngIf="display === 'list'" role="row">
|
||||||
<!-- Actions (left) -->
|
<!-- Actions (left) -->
|
||||||
<div *ngIf="actions && actionsPosition === 'left'" class="adf-actions-column adf-datatable-table-cell-header">
|
<div *ngIf="actions && actionsPosition === 'left'" class="adf-actions-column adf-datatable-table-cell-header">
|
||||||
<span class="adf-sr-only">Actions</span>
|
<span class="adf-sr-only">Actions</span>
|
||||||
@@ -21,7 +22,7 @@
|
|||||||
[class.adf-data-table__header--sorted-desc]="isColumnSorted(col, 'desc')"
|
[class.adf-data-table__header--sorted-desc]="isColumnSorted(col, 'desc')"
|
||||||
(click)="onColumnHeaderClick(col)"
|
(click)="onColumnHeaderClick(col)"
|
||||||
(keyup.enter)="onColumnHeaderClick(col)"
|
(keyup.enter)="onColumnHeaderClick(col)"
|
||||||
role="button"
|
role="columnheader"
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
title="{{ col.title | translate }}">
|
title="{{ col.title | translate }}">
|
||||||
<span *ngIf="col.srTitle" class="adf-sr-only">{{ col.srTitle | translate }}</span>
|
<span *ngIf="col.srTitle" class="adf-sr-only">{{ col.srTitle | translate }}</span>
|
||||||
@@ -45,18 +46,18 @@
|
|||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="adf-datatable-body">
|
<div class="adf-datatable-body" role="rowgroup">
|
||||||
<ng-container *ngIf="!loading && !noPermission">
|
<ng-container *ngIf="!loading && !noPermission">
|
||||||
<div *ngFor="let row of data.getRows(); let idx = index"
|
<div *ngFor="let row of data.getRows(); let idx = index"
|
||||||
class="adf-datatable-row"
|
class="adf-datatable-row"
|
||||||
role="button"
|
role="row"
|
||||||
[class.adf-is-selected]="row.isSelected"
|
[class.adf-is-selected]="row.isSelected"
|
||||||
[adf-upload]="allowDropFiles && rowAllowsDrop(row)" [adf-upload-data]="row"
|
[adf-upload]="allowDropFiles && rowAllowsDrop(row)" [adf-upload-data]="row"
|
||||||
[ngStyle]="rowStyle"
|
[ngStyle]="rowStyle"
|
||||||
[ngClass]="getRowStyle(row)"
|
[ngClass]="getRowStyle(row)"
|
||||||
(keyup)="onRowKeyUp(row, $event)">
|
(keyup)="onRowKeyUp(row, $event)">
|
||||||
<!-- Actions (left) -->
|
<!-- Actions (left) -->
|
||||||
<div *ngIf="actions && actionsPosition === 'left'" class="adf-datatable-table-cell">
|
<div *ngIf="actions && actionsPosition === 'left'" role="gridcell" class="adf-datatable-table-cell">
|
||||||
<button mat-icon-button [matMenuTriggerFor]="menu"
|
<button mat-icon-button [matMenuTriggerFor]="menu"
|
||||||
[title]="'ADF-DATATABLE.CONTENT-ACTIONS.TOOLTIP' | translate"
|
[title]="'ADF-DATATABLE.CONTENT-ACTIONS.TOOLTIP' | translate"
|
||||||
[attr.id]="'action_menu_left_' + idx"
|
[attr.id]="'action_menu_left_' + idx"
|
||||||
@@ -81,6 +82,7 @@
|
|||||||
</mat-checkbox>
|
</mat-checkbox>
|
||||||
</div>
|
</div>
|
||||||
<div *ngFor="let col of data.getColumns()"
|
<div *ngFor="let col of data.getColumns()"
|
||||||
|
role="gridcell"
|
||||||
class="adf-data-table-cell adf-datatable-table-cell adf-data-table-cell--{{col.type || 'text'}} {{col.cssClass}}"
|
class="adf-data-table-cell adf-datatable-table-cell adf-data-table-cell--{{col.type || 'text'}} {{col.cssClass}}"
|
||||||
[attr.title]="col.title | translate"
|
[attr.title]="col.title | translate"
|
||||||
[attr.filename]="getFilename(row)"
|
[attr.filename]="getFilename(row)"
|
||||||
@@ -161,6 +163,7 @@
|
|||||||
|
|
||||||
<!-- Actions (right) -->
|
<!-- Actions (right) -->
|
||||||
<div *ngIf="actions && actionsPosition === 'right'"
|
<div *ngIf="actions && actionsPosition === 'right'"
|
||||||
|
role="gridcell"
|
||||||
class="adf-datatable-table-cell adf-datatable__actions-cell">
|
class="adf-datatable-table-cell adf-datatable__actions-cell">
|
||||||
<button mat-icon-button [matMenuTriggerFor]="menu"
|
<button mat-icon-button [matMenuTriggerFor]="menu"
|
||||||
[title]="'ADF-DATATABLE.CONTENT-ACTIONS.TOOLTIP' | translate"
|
[title]="'ADF-DATATABLE.CONTENT-ACTIONS.TOOLTIP' | translate"
|
||||||
@@ -181,9 +184,10 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="isEmpty()"
|
<div *ngIf="isEmpty()"
|
||||||
|
role="row"
|
||||||
[class.adf-datatable-row]="display === 'list'"
|
[class.adf-datatable-row]="display === 'list'"
|
||||||
[class.adf-data-table-card-empty]="display === 'gallery'">
|
[class.adf-data-table-card-empty]="display === 'gallery'">
|
||||||
<div class="adf-no-content-container adf-datatable-table-cell">
|
<div class="adf-no-content-container adf-datatable-table-cell" role="gridcell">
|
||||||
<ng-template *ngIf="noContentTemplate"
|
<ng-template *ngIf="noContentTemplate"
|
||||||
ngFor [ngForOf]="[data]"
|
ngFor [ngForOf]="[data]"
|
||||||
[ngForTemplate]="noContentTemplate">
|
[ngForTemplate]="noContentTemplate">
|
||||||
@@ -196,6 +200,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
<div *ngIf="!loading && noPermission"
|
<div *ngIf="!loading && noPermission"
|
||||||
|
role="row"
|
||||||
[class.adf-datatable-row]="display === 'list'"
|
[class.adf-datatable-row]="display === 'list'"
|
||||||
[class.adf-data-table-card-permissions]="display === 'gallery'"
|
[class.adf-data-table-card-permissions]="display === 'gallery'"
|
||||||
class="adf-no-permission__row">
|
class="adf-no-permission__row">
|
||||||
@@ -217,4 +222,4 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
@@ -32,12 +32,15 @@ import { DataColumnComponent } from '../../../data-column/data-column.component'
|
|||||||
class FakeDataRow implements DataRow {
|
class FakeDataRow implements DataRow {
|
||||||
isDropTarget = false;
|
isDropTarget = false;
|
||||||
isSelected = true;
|
isSelected = true;
|
||||||
|
|
||||||
hasValue(key: any) {
|
hasValue(key: any) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
getValue() {
|
getValue() {
|
||||||
return '1';
|
return '1';
|
||||||
}
|
}
|
||||||
|
|
||||||
imageErrorResolver() {
|
imageErrorResolver() {
|
||||||
return './assets/images/ft_ic_miscellaneous.svg';
|
return './assets/images/ft_ic_miscellaneous.svg';
|
||||||
}
|
}
|
||||||
@@ -53,7 +56,7 @@ describe('DataTable', () => {
|
|||||||
imports: [
|
imports: [
|
||||||
CoreTestingModule
|
CoreTestingModule
|
||||||
],
|
],
|
||||||
schemas: [ NO_ERRORS_SCHEMA ]
|
schemas: [NO_ERRORS_SCHEMA]
|
||||||
});
|
});
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
@@ -69,7 +72,7 @@ describe('DataTable', () => {
|
|||||||
it('should preserve the historical selection order', () => {
|
it('should preserve the historical selection order', () => {
|
||||||
dataTable.data = new ObjectDataTableAdapter(
|
dataTable.data = new ObjectDataTableAdapter(
|
||||||
[{ id: 0 }, { id: 1 }, { id: 2 }],
|
[{ id: 0 }, { id: 1 }, { id: 2 }],
|
||||||
[ new ObjectDataColumn({ key: 'id' })]
|
[new ObjectDataColumn({ key: 'id' })]
|
||||||
);
|
);
|
||||||
|
|
||||||
const rows = dataTable.data.getRows();
|
const rows = dataTable.data.getRows();
|
||||||
@@ -200,7 +203,7 @@ describe('DataTable', () => {
|
|||||||
{ name: '1' },
|
{ name: '1' },
|
||||||
{ name: '2' }
|
{ name: '2' }
|
||||||
],
|
],
|
||||||
[ column ]
|
[column]
|
||||||
);
|
);
|
||||||
dataTable.data.setSorting(new DataSorting('name', 'desc'));
|
dataTable.data.setSorting(new DataSorting('name', 'desc'));
|
||||||
|
|
||||||
@@ -270,7 +273,7 @@ describe('DataTable', () => {
|
|||||||
{ name: 'test3' },
|
{ name: 'test3' },
|
||||||
{ name: 'test4' }
|
{ name: 'test4' }
|
||||||
];
|
];
|
||||||
dataTable.sorting = [ 'dummyName', 'asc' ];
|
dataTable.sorting = ['dummyName', 'asc'];
|
||||||
dataTable.ngOnChanges({
|
dataTable.ngOnChanges({
|
||||||
rows: new SimpleChange(null, dataRows, false)
|
rows: new SimpleChange(null, dataRows, false)
|
||||||
});
|
});
|
||||||
@@ -287,7 +290,7 @@ describe('DataTable', () => {
|
|||||||
{ name: '1' },
|
{ name: '1' },
|
||||||
{ name: '2' }
|
{ name: '2' }
|
||||||
],
|
],
|
||||||
[ new ObjectDataColumn({ key: 'name'}) ]
|
[new ObjectDataColumn({ key: 'name' })]
|
||||||
);
|
);
|
||||||
const rows = dataTable.data.getRows();
|
const rows = dataTable.data.getRows();
|
||||||
rows[0].isSelected = true;
|
rows[0].isSelected = true;
|
||||||
@@ -305,10 +308,10 @@ describe('DataTable', () => {
|
|||||||
|
|
||||||
it('should select the row where isSelected is true', () => {
|
it('should select the row where isSelected is true', () => {
|
||||||
dataTable.rows = [
|
dataTable.rows = [
|
||||||
{ name: 'TEST1' },
|
{ name: 'TEST1' },
|
||||||
{ name: 'FAKE2' },
|
{ name: 'FAKE2' },
|
||||||
{ name: 'TEST2', isSelected : true },
|
{ name: 'TEST2', isSelected: true },
|
||||||
{ name: 'FAKE2' }];
|
{ name: 'FAKE2' }];
|
||||||
dataTable.data = new ObjectDataTableAdapter([],
|
dataTable.data = new ObjectDataTableAdapter([],
|
||||||
[new ObjectDataColumn({ key: 'name' })]
|
[new ObjectDataColumn({ key: 'name' })]
|
||||||
);
|
);
|
||||||
@@ -395,7 +398,7 @@ describe('DataTable', () => {
|
|||||||
{ name: '1' },
|
{ name: '1' },
|
||||||
{ name: '2' }
|
{ name: '2' }
|
||||||
],
|
],
|
||||||
[ new ObjectDataColumn({ key: 'name'}) ]
|
[new ObjectDataColumn({ key: 'name' })]
|
||||||
);
|
);
|
||||||
const rows = dataTable.data.getRows();
|
const rows = dataTable.data.getRows();
|
||||||
|
|
||||||
@@ -416,7 +419,7 @@ describe('DataTable', () => {
|
|||||||
{ name: '1' },
|
{ name: '1' },
|
||||||
{ name: '2' }
|
{ name: '2' }
|
||||||
],
|
],
|
||||||
[ new ObjectDataColumn({ key: 'name'}) ]
|
[new ObjectDataColumn({ key: 'name' })]
|
||||||
);
|
);
|
||||||
const rows = dataTable.data.getRows();
|
const rows = dataTable.data.getRows();
|
||||||
|
|
||||||
@@ -467,7 +470,10 @@ describe('DataTable', () => {
|
|||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
|
||||||
dataTable.onRowClick(rows[0], <any> { metaKey: true, preventDefault() { } });
|
dataTable.onRowClick(rows[0], <any> {
|
||||||
|
metaKey: true, preventDefault() {
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should select multiple rows with [multiple] selection mode and modifier key', (done) => {
|
it('should select multiple rows with [multiple] selection mode and modifier key', (done) => {
|
||||||
@@ -535,7 +541,7 @@ describe('DataTable', () => {
|
|||||||
it('should initialize default adapter', () => {
|
it('should initialize default adapter', () => {
|
||||||
let table = new DataTableComponent(null, null);
|
let table = new DataTableComponent(null, null);
|
||||||
expect(table.data).toBeUndefined();
|
expect(table.data).toBeUndefined();
|
||||||
table.ngOnChanges({'data': new SimpleChange('123', {}, true)});
|
table.ngOnChanges({ 'data': new SimpleChange('123', {}, true) });
|
||||||
expect(table.data).toEqual(jasmine.any(ObjectDataTableAdapter));
|
expect(table.data).toEqual(jasmine.any(ObjectDataTableAdapter));
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -563,7 +569,7 @@ describe('DataTable', () => {
|
|||||||
let row = <DataRow> {};
|
let row = <DataRow> {};
|
||||||
dataTable.ngOnChanges({});
|
dataTable.ngOnChanges({});
|
||||||
|
|
||||||
dataTable.rowDblClick.subscribe( () => {
|
dataTable.rowDblClick.subscribe(() => {
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -580,7 +586,7 @@ describe('DataTable', () => {
|
|||||||
let row = <DataRow> {};
|
let row = <DataRow> {};
|
||||||
dataTable.ngOnChanges({});
|
dataTable.ngOnChanges({});
|
||||||
|
|
||||||
dataTable.rowDblClick.subscribe( () => {
|
dataTable.rowDblClick.subscribe(() => {
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -601,7 +607,7 @@ describe('DataTable', () => {
|
|||||||
|
|
||||||
dataTable.ngOnChanges({});
|
dataTable.ngOnChanges({});
|
||||||
|
|
||||||
dataTable.rowClick.subscribe( () => {
|
dataTable.rowClick.subscribe(() => {
|
||||||
clickCount += 1;
|
clickCount += 1;
|
||||||
if (clickCount === 2) {
|
if (clickCount === 2) {
|
||||||
done();
|
done();
|
||||||
@@ -655,7 +661,7 @@ describe('DataTable', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should not sort if column is missing', () => {
|
it('should not sort if column is missing', () => {
|
||||||
dataTable.ngOnChanges({'data': new SimpleChange('123', {}, true)});
|
dataTable.ngOnChanges({ 'data': new SimpleChange('123', {}, true) });
|
||||||
let adapter = dataTable.data;
|
let adapter = dataTable.data;
|
||||||
spyOn(adapter, 'setSorting').and.callThrough();
|
spyOn(adapter, 'setSorting').and.callThrough();
|
||||||
dataTable.onColumnHeaderClick(null);
|
dataTable.onColumnHeaderClick(null);
|
||||||
@@ -663,7 +669,7 @@ describe('DataTable', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should not sort upon clicking non-sortable column header', () => {
|
it('should not sort upon clicking non-sortable column header', () => {
|
||||||
dataTable.ngOnChanges({'data': new SimpleChange('123', {}, true)});
|
dataTable.ngOnChanges({ 'data': new SimpleChange('123', {}, true) });
|
||||||
let adapter = dataTable.data;
|
let adapter = dataTable.data;
|
||||||
spyOn(adapter, 'setSorting').and.callThrough();
|
spyOn(adapter, 'setSorting').and.callThrough();
|
||||||
|
|
||||||
@@ -676,7 +682,7 @@ describe('DataTable', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should set sorting upon column header clicked', () => {
|
it('should set sorting upon column header clicked', () => {
|
||||||
dataTable.ngOnChanges({'data': new SimpleChange('123', {}, true)});
|
dataTable.ngOnChanges({ 'data': new SimpleChange('123', {}, true) });
|
||||||
let adapter = dataTable.data;
|
let adapter = dataTable.data;
|
||||||
spyOn(adapter, 'setSorting').and.callThrough();
|
spyOn(adapter, 'setSorting').and.callThrough();
|
||||||
|
|
||||||
@@ -695,7 +701,7 @@ describe('DataTable', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should invert sorting upon column header clicked', () => {
|
it('should invert sorting upon column header clicked', () => {
|
||||||
dataTable.ngOnChanges({'data': new SimpleChange('123', {}, true)});
|
dataTable.ngOnChanges({ 'data': new SimpleChange('123', {}, true) });
|
||||||
|
|
||||||
let adapter = dataTable.data;
|
let adapter = dataTable.data;
|
||||||
let sorting = new DataSorting('column_1', 'asc');
|
let sorting = new DataSorting('column_1', 'asc');
|
||||||
@@ -742,7 +748,7 @@ describe('DataTable', () => {
|
|||||||
dataTable.data = data;
|
dataTable.data = data;
|
||||||
dataTable.multiselect = true;
|
dataTable.multiselect = true;
|
||||||
dataTable.ngAfterContentInit();
|
dataTable.ngAfterContentInit();
|
||||||
dataTable.onSelectAllClick(<MatCheckboxChange> { checked: true });
|
dataTable.onSelectAllClick(<MatCheckboxChange> {checked: true });
|
||||||
|
|
||||||
expect(dataTable.selection.every((entry) => entry.isSelected));
|
expect(dataTable.selection.every((entry) => entry.isSelected));
|
||||||
|
|
||||||
@@ -760,13 +766,13 @@ describe('DataTable', () => {
|
|||||||
dataTable.multiselect = true;
|
dataTable.multiselect = true;
|
||||||
dataTable.ngAfterContentInit();
|
dataTable.ngAfterContentInit();
|
||||||
|
|
||||||
dataTable.onSelectAllClick(<MatCheckboxChange> { checked: true });
|
dataTable.onSelectAllClick(<MatCheckboxChange> {checked: true });
|
||||||
expect(dataTable.isSelectAllChecked).toBe(true);
|
expect(dataTable.isSelectAllChecked).toBe(true);
|
||||||
for (let i = 0; i < rows.length; i++) {
|
for (let i = 0; i < rows.length; i++) {
|
||||||
expect(rows[i].isSelected).toBe(true);
|
expect(rows[i].isSelected).toBe(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
dataTable.onSelectAllClick(<MatCheckboxChange> { checked: false });
|
dataTable.onSelectAllClick(<MatCheckboxChange> {checked: false });
|
||||||
expect(dataTable.isSelectAllChecked).toBe(false);
|
expect(dataTable.isSelectAllChecked).toBe(false);
|
||||||
for (let i = 0; i < rows.length; i++) {
|
for (let i = 0; i < rows.length; i++) {
|
||||||
expect(rows[i].isSelected).toBe(false);
|
expect(rows[i].isSelected).toBe(false);
|
||||||
@@ -775,9 +781,9 @@ describe('DataTable', () => {
|
|||||||
|
|
||||||
it('should allow "select all" calls with no rows', () => {
|
it('should allow "select all" calls with no rows', () => {
|
||||||
dataTable.multiselect = true;
|
dataTable.multiselect = true;
|
||||||
dataTable.ngOnChanges({'data': new SimpleChange('123', {}, true)});
|
dataTable.ngOnChanges({ 'data': new SimpleChange('123', {}, true) });
|
||||||
|
|
||||||
dataTable.onSelectAllClick(<MatCheckboxChange> { checked: true });
|
dataTable.onSelectAllClick(<MatCheckboxChange> {checked: true });
|
||||||
expect(dataTable.isSelectAllChecked).toBe(true);
|
expect(dataTable.isSelectAllChecked).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -789,7 +795,7 @@ describe('DataTable', () => {
|
|||||||
dataTable.multiselect = false;
|
dataTable.multiselect = false;
|
||||||
dataTable.ngAfterContentInit();
|
dataTable.ngAfterContentInit();
|
||||||
|
|
||||||
dataTable.onSelectAllClick(<MatCheckboxChange> { checked: true });
|
dataTable.onSelectAllClick(<MatCheckboxChange> {checked: true });
|
||||||
expect(dataTable.isSelectAllChecked).toBe(true);
|
expect(dataTable.isSelectAllChecked).toBe(true);
|
||||||
for (let i = 0; i < rows.length; i++) {
|
for (let i = 0; i < rows.length; i++) {
|
||||||
expect(rows[i].isSelected).toBe(false);
|
expect(rows[i].isSelected).toBe(false);
|
||||||
@@ -863,16 +869,16 @@ describe('DataTable', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should require adapter sorting to evaluate sorting state', () => {
|
it('should require adapter sorting to evaluate sorting state', () => {
|
||||||
dataTable.ngOnChanges({'data': new SimpleChange('123', {}, true)});
|
dataTable.ngOnChanges({ 'data': new SimpleChange('123', {}, true) });
|
||||||
spyOn(dataTable.data, 'getSorting').and.returnValue(null);
|
spyOn(dataTable.data, 'getSorting').and.returnValue(null);
|
||||||
expect(dataTable.isColumnSorted(<DataColumn> {}, 'asc')).toBeFalsy();
|
expect(dataTable.isColumnSorted(<DataColumn> {}, 'asc')).toBeFalsy();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should evaluate column sorting state', () => {
|
it('should evaluate column sorting state', () => {
|
||||||
dataTable.ngOnChanges({'data': new SimpleChange('123', {}, true)});
|
dataTable.ngOnChanges({ 'data': new SimpleChange('123', {}, true) });
|
||||||
spyOn(dataTable.data, 'getSorting').and.returnValue(new DataSorting('column_1', 'asc'));
|
spyOn(dataTable.data, 'getSorting').and.returnValue(new DataSorting('column_1', 'asc'));
|
||||||
expect(dataTable.isColumnSorted(<DataColumn> {key: 'column_1'}, 'asc')).toBeTruthy();
|
expect(dataTable.isColumnSorted(<DataColumn> { key: 'column_1' }, 'asc')).toBeTruthy();
|
||||||
expect(dataTable.isColumnSorted(<DataColumn> {key: 'column_2'}, 'desc')).toBeFalsy();
|
expect(dataTable.isColumnSorted(<DataColumn> { key: 'column_2' }, 'desc')).toBeFalsy();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should replace image source with fallback thumbnail on error', () => {
|
it('should replace image source with fallback thumbnail on error', () => {
|
||||||
@@ -897,7 +903,7 @@ describe('DataTable', () => {
|
|||||||
const row = new FakeDataRow();
|
const row = new FakeDataRow();
|
||||||
dataTable.fallbackThumbnail = null;
|
dataTable.fallbackThumbnail = null;
|
||||||
dataTable.onImageLoadingError(event, row);
|
dataTable.onImageLoadingError(event, row);
|
||||||
expect(event.target.src).toBe('./assets/images/ft_ic_miscellaneous.svg' );
|
expect(event.target.src).toBe('./assets/images/ft_ic_miscellaneous.svg');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should not get cell tooltip when row is not provided', () => {
|
it('should not get cell tooltip when row is not provided', () => {
|
||||||
@@ -921,7 +927,7 @@ describe('DataTable', () => {
|
|||||||
const col = <DataColumn> {
|
const col = <DataColumn> {
|
||||||
key: 'name',
|
key: 'name',
|
||||||
type: 'text',
|
type: 'text',
|
||||||
formatTooltip: () => tooltip
|
formatTooltip: () => tooltip
|
||||||
};
|
};
|
||||||
const row = <DataRow> {};
|
const row = <DataRow> {};
|
||||||
expect(dataTable.getCellTooltip(row, col)).toBe(tooltip);
|
expect(dataTable.getCellTooltip(row, col)).toBe(tooltip);
|
||||||
@@ -931,7 +937,7 @@ describe('DataTable', () => {
|
|||||||
const col = <DataColumn> {
|
const col = <DataColumn> {
|
||||||
key: 'name',
|
key: 'name',
|
||||||
type: 'text',
|
type: 'text',
|
||||||
formatTooltip: () => null
|
formatTooltip: () => null
|
||||||
};
|
};
|
||||||
const row = <DataRow> {};
|
const row = <DataRow> {};
|
||||||
expect(dataTable.getCellTooltip(row, col)).toBeNull();
|
expect(dataTable.getCellTooltip(row, col)).toBeNull();
|
||||||
@@ -939,15 +945,78 @@ describe('DataTable', () => {
|
|||||||
|
|
||||||
it('should reset the menu cache after rows change', () => {
|
it('should reset the menu cache after rows change', () => {
|
||||||
let emitted = 0;
|
let emitted = 0;
|
||||||
dataTable.showRowActionsMenu.subscribe(() => { emitted++; });
|
dataTable.showRowActionsMenu.subscribe(() => {
|
||||||
|
emitted++;
|
||||||
|
});
|
||||||
|
|
||||||
const column = <DataColumn> {};
|
const column = <DataColumn> {};
|
||||||
const row = <DataRow> { getValue: function (key: string) { return 'id'; } };
|
const row = <DataRow> {
|
||||||
|
getValue: function (key: string) {
|
||||||
|
return 'id';
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
dataTable.getRowActions(row, column);
|
dataTable.getRowActions(row, column);
|
||||||
dataTable.ngOnChanges({'data': new SimpleChange('123', {}, true)});
|
dataTable.ngOnChanges({ 'data': new SimpleChange('123', {}, true) });
|
||||||
dataTable.getRowActions(row, column);
|
dataTable.getRowActions(row, column);
|
||||||
|
|
||||||
expect(emitted).toBe(2);
|
expect(emitted).toBe(2);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('Accesibility', () => {
|
||||||
|
|
||||||
|
let fixture: ComponentFixture<DataTableComponent>;
|
||||||
|
let dataTable: DataTableComponent;
|
||||||
|
let element: any;
|
||||||
|
|
||||||
|
setupTestBed({
|
||||||
|
imports: [
|
||||||
|
CoreTestingModule
|
||||||
|
],
|
||||||
|
schemas: [NO_ERRORS_SCHEMA]
|
||||||
|
});
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(DataTableComponent);
|
||||||
|
dataTable = fixture.componentInstance;
|
||||||
|
element = fixture.debugElement.nativeElement;
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
fixture.destroy();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should have accessibility tags', () => {
|
||||||
|
|
||||||
|
const dataRows =
|
||||||
|
[
|
||||||
|
{ name: 'test1' },
|
||||||
|
{ name: 'test2' },
|
||||||
|
{ name: 'test3' },
|
||||||
|
{ name: 'test4' }
|
||||||
|
];
|
||||||
|
dataTable.data = new ObjectDataTableAdapter([],
|
||||||
|
[new ObjectDataColumn({ key: 'name' })]
|
||||||
|
);
|
||||||
|
|
||||||
|
dataTable.ngOnChanges({
|
||||||
|
rows: new SimpleChange(null, dataRows, false)
|
||||||
|
});
|
||||||
|
|
||||||
|
fixture.detectChanges();
|
||||||
|
const datatableAttributes = element.querySelector('.adf-data-table').attributes;
|
||||||
|
const datatableHeaderAttributes = element.querySelector('.adf-data-table .adf-datatable-header').attributes;
|
||||||
|
const datatableHeaderCellAttributes = element.querySelector('.adf-datatable-table-cell-header').attributes;
|
||||||
|
const datatableBodyAttributes = element.querySelector('.adf-datatable-body').attributes;
|
||||||
|
const datatableBodyRowAttributes = element.querySelector('.adf-datatable-body .adf-datatable-row').attributes;
|
||||||
|
const datatableBodyCellAttributes = element.querySelector('.adf-datatable-body .adf-datatable-table-cell').attributes;
|
||||||
|
|
||||||
|
expect(datatableAttributes.getNamedItem('role').value).toEqual('grid');
|
||||||
|
expect(datatableHeaderAttributes.getNamedItem('role').value).toEqual('rowgroup');
|
||||||
|
expect(datatableHeaderCellAttributes.getNamedItem('role').value).toEqual('columnheader');
|
||||||
|
expect(datatableBodyAttributes.getNamedItem('role').value).toEqual('rowgroup');
|
||||||
|
expect(datatableBodyRowAttributes.getNamedItem('role').value).toEqual('row');
|
||||||
|
expect(datatableBodyCellAttributes.getNamedItem('role').value).toEqual('gridcell');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
Reference in New Issue
Block a user