File: /var/www/vhost/disk-apps/pwa.sports-crowd.com/node_modules/@material/data-table/foundation.js
/**
* @license
* Copyright 2019 Google Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
import { __assign, __awaiter, __extends, __generator } from "tslib";
import { MDCFoundation } from '@material/base/foundation';
import { cssClasses, SortValue, attributes } from './constants';
/**
* The Foundation of data table component containing pure business logic, any
* logic requiring DOM manipulation are delegated to adapter methods.
*/
var MDCDataTableFoundation = /** @class */ (function (_super) {
__extends(MDCDataTableFoundation, _super);
function MDCDataTableFoundation(adapter) {
return _super.call(this, __assign(__assign({}, MDCDataTableFoundation.defaultAdapter), adapter)) || this;
}
Object.defineProperty(MDCDataTableFoundation, "defaultAdapter", {
get: function () {
return {
addClass: function () { return undefined; },
addClassAtRowIndex: function () { return undefined; },
getAttributeByHeaderCellIndex: function () { return ''; },
getHeaderCellCount: function () { return 0; },
getHeaderCellElements: function () { return []; },
getRowCount: function () { return 0; },
getRowElements: function () { return []; },
getRowIdAtIndex: function () { return ''; },
getRowIndexByChildElement: function () { return 0; },
getSelectedRowCount: function () { return 0; },
getTableContainerHeight: function () { return 0; },
getTableHeaderHeight: function () { return 0; },
isCheckboxAtRowIndexChecked: function () { return false; },
isHeaderRowCheckboxChecked: function () { return false; },
isRowsSelectable: function () { return false; },
notifyRowSelectionChanged: function () { return undefined; },
notifySelectedAll: function () { return undefined; },
notifySortAction: function () { return undefined; },
notifyUnselectedAll: function () { return undefined; },
notifyRowClick: function () { return undefined; },
registerHeaderRowCheckbox: function () { return undefined; },
registerRowCheckboxes: function () { return undefined; },
removeClass: function () { return undefined; },
removeClassAtRowIndex: function () { return undefined; },
removeClassNameByHeaderCellIndex: function () { return undefined; },
setAttributeAtRowIndex: function () { return undefined; },
setAttributeByHeaderCellIndex: function () { return undefined; },
setClassNameByHeaderCellIndex: function () { return undefined; },
setHeaderRowCheckboxChecked: function () { return undefined; },
setHeaderRowCheckboxIndeterminate: function () { return undefined; },
setProgressIndicatorStyles: function () { return undefined; },
setRowCheckboxCheckedAtIndex: function () { return undefined; },
setSortStatusLabelByHeaderCellIndex: function () { return undefined; },
};
},
enumerable: false,
configurable: true
});
/**
* Re-initializes header row checkbox and row checkboxes when selectable rows
* are added or removed from table. Use this if registering checkbox is
* synchronous.
*/
MDCDataTableFoundation.prototype.layout = function () {
if (this.adapter.isRowsSelectable()) {
this.adapter.registerHeaderRowCheckbox();
this.adapter.registerRowCheckboxes();
this.setHeaderRowCheckboxState();
}
};
/**
* Re-initializes header row checkbox and row checkboxes when selectable rows
* are added or removed from table. Use this if registering checkbox is
* asynchronous.
*/
MDCDataTableFoundation.prototype.layoutAsync = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!this.adapter.isRowsSelectable()) return [3 /*break*/, 3];
return [4 /*yield*/, this.adapter.registerHeaderRowCheckbox()];
case 1:
_a.sent();
return [4 /*yield*/, this.adapter.registerRowCheckboxes()];
case 2:
_a.sent();
this.setHeaderRowCheckboxState();
_a.label = 3;
case 3: return [2 /*return*/];
}
});
});
};
/**
* @return Returns array of row elements.
*/
MDCDataTableFoundation.prototype.getRows = function () {
return this.adapter.getRowElements();
};
/**
* @return Array of header cell elements.
*/
MDCDataTableFoundation.prototype.getHeaderCells = function () {
return this.adapter.getHeaderCellElements();
};
/**
* Sets selected row ids. Overwrites previously selected rows.
* @param rowIds Array of row ids that needs to be selected.
*/
MDCDataTableFoundation.prototype.setSelectedRowIds = function (rowIds) {
for (var rowIndex = 0; rowIndex < this.adapter.getRowCount(); rowIndex++) {
var rowId = this.adapter.getRowIdAtIndex(rowIndex);
var isSelected = false;
if (rowId && rowIds.indexOf(rowId) >= 0) {
isSelected = true;
}
this.adapter.setRowCheckboxCheckedAtIndex(rowIndex, isSelected);
this.selectRowAtIndex(rowIndex, isSelected);
}
this.setHeaderRowCheckboxState();
};
/**
* @return Returns array of all row ids.
*/
MDCDataTableFoundation.prototype.getRowIds = function () {
var rowIds = [];
for (var rowIndex = 0; rowIndex < this.adapter.getRowCount(); rowIndex++) {
rowIds.push(this.adapter.getRowIdAtIndex(rowIndex));
}
return rowIds;
};
/**
* @return Returns array of selected row ids.
*/
MDCDataTableFoundation.prototype.getSelectedRowIds = function () {
var selectedRowIds = [];
for (var rowIndex = 0; rowIndex < this.adapter.getRowCount(); rowIndex++) {
if (this.adapter.isCheckboxAtRowIndexChecked(rowIndex)) {
selectedRowIds.push(this.adapter.getRowIdAtIndex(rowIndex));
}
}
return selectedRowIds;
};
/**
* Handles header row checkbox change event.
*/
MDCDataTableFoundation.prototype.handleHeaderRowCheckboxChange = function () {
var isHeaderChecked = this.adapter.isHeaderRowCheckboxChecked();
for (var rowIndex = 0; rowIndex < this.adapter.getRowCount(); rowIndex++) {
this.adapter.setRowCheckboxCheckedAtIndex(rowIndex, isHeaderChecked);
this.selectRowAtIndex(rowIndex, isHeaderChecked);
}
if (isHeaderChecked) {
this.adapter.notifySelectedAll();
}
else {
this.adapter.notifyUnselectedAll();
}
};
/**
* Handles change event originated from row checkboxes.
*/
MDCDataTableFoundation.prototype.handleRowCheckboxChange = function (event) {
var rowIndex = this.adapter.getRowIndexByChildElement(event.target);
if (rowIndex === -1) {
return;
}
var selected = this.adapter.isCheckboxAtRowIndexChecked(rowIndex);
this.selectRowAtIndex(rowIndex, selected);
this.setHeaderRowCheckboxState();
var rowId = this.adapter.getRowIdAtIndex(rowIndex);
this.adapter.notifyRowSelectionChanged({ rowId: rowId, rowIndex: rowIndex, selected: selected });
};
/**
* Handles sort action on sortable header cell.
*/
MDCDataTableFoundation.prototype.handleSortAction = function (eventData) {
var columnId = eventData.columnId, columnIndex = eventData.columnIndex, headerCell = eventData.headerCell;
// Reset sort attributes / classes on other header cells.
for (var index = 0; index < this.adapter.getHeaderCellCount(); index++) {
if (index === columnIndex) {
continue;
}
this.adapter.removeClassNameByHeaderCellIndex(index, cssClasses.HEADER_CELL_SORTED);
this.adapter.removeClassNameByHeaderCellIndex(index, cssClasses.HEADER_CELL_SORTED_DESCENDING);
this.adapter.setAttributeByHeaderCellIndex(index, attributes.ARIA_SORT, SortValue.NONE);
this.adapter.setSortStatusLabelByHeaderCellIndex(index, SortValue.NONE);
}
// Set appropriate sort attributes / classes on target header cell.
this.adapter.setClassNameByHeaderCellIndex(columnIndex, cssClasses.HEADER_CELL_SORTED);
var currentSortValue = this.adapter.getAttributeByHeaderCellIndex(columnIndex, attributes.ARIA_SORT);
var sortValue = SortValue.NONE;
// Set to descending if sorted on ascending order.
if (currentSortValue === SortValue.ASCENDING) {
this.adapter.setClassNameByHeaderCellIndex(columnIndex, cssClasses.HEADER_CELL_SORTED_DESCENDING);
this.adapter.setAttributeByHeaderCellIndex(columnIndex, attributes.ARIA_SORT, SortValue.DESCENDING);
sortValue = SortValue.DESCENDING;
// Set to ascending if sorted on descending order.
}
else if (currentSortValue === SortValue.DESCENDING) {
this.adapter.removeClassNameByHeaderCellIndex(columnIndex, cssClasses.HEADER_CELL_SORTED_DESCENDING);
this.adapter.setAttributeByHeaderCellIndex(columnIndex, attributes.ARIA_SORT, SortValue.ASCENDING);
sortValue = SortValue.ASCENDING;
}
else {
// Set to ascending by default when not sorted.
this.adapter.setAttributeByHeaderCellIndex(columnIndex, attributes.ARIA_SORT, SortValue.ASCENDING);
sortValue = SortValue.ASCENDING;
}
this.adapter.setSortStatusLabelByHeaderCellIndex(columnIndex, sortValue);
this.adapter.notifySortAction({
columnId: columnId,
columnIndex: columnIndex,
headerCell: headerCell,
sortValue: sortValue,
});
};
/**
* Handles data table row click event.
*/
MDCDataTableFoundation.prototype.handleRowClick = function (_a) {
var rowId = _a.rowId, row = _a.row, altKey = _a.altKey, ctrlKey = _a.ctrlKey, metaKey = _a.metaKey, shiftKey = _a.shiftKey;
this.adapter.notifyRowClick({
rowId: rowId,
row: row,
altKey: altKey,
ctrlKey: ctrlKey,
metaKey: metaKey,
shiftKey: shiftKey,
});
};
/**
* Shows progress indicator blocking only the table body content when in
* loading state.
*/
MDCDataTableFoundation.prototype.showProgress = function () {
var tableHeaderHeight = this.adapter.getTableHeaderHeight();
// Calculate the height of table content (Not scroll content) excluding
// header row height.
var height = this.adapter.getTableContainerHeight() - tableHeaderHeight;
var top = tableHeaderHeight;
this.adapter.setProgressIndicatorStyles({
height: height + "px",
top: top + "px",
});
this.adapter.addClass(cssClasses.IN_PROGRESS);
};
/**
* Hides progress indicator when data table is finished loading.
*/
MDCDataTableFoundation.prototype.hideProgress = function () {
this.adapter.removeClass(cssClasses.IN_PROGRESS);
};
/**
* Updates header row checkbox state based on number of rows selected.
*/
MDCDataTableFoundation.prototype.setHeaderRowCheckboxState = function () {
if (this.adapter.getSelectedRowCount() === 0) {
this.adapter.setHeaderRowCheckboxChecked(false);
this.adapter.setHeaderRowCheckboxIndeterminate(false);
}
else if (this.adapter.getSelectedRowCount() === this.adapter.getRowCount()) {
this.adapter.setHeaderRowCheckboxChecked(true);
this.adapter.setHeaderRowCheckboxIndeterminate(false);
}
else {
this.adapter.setHeaderRowCheckboxIndeterminate(true);
this.adapter.setHeaderRowCheckboxChecked(false);
}
};
/**
* Sets the attributes of row element based on selection state.
*/
MDCDataTableFoundation.prototype.selectRowAtIndex = function (rowIndex, selected) {
if (selected) {
this.adapter.addClassAtRowIndex(rowIndex, cssClasses.ROW_SELECTED);
this.adapter.setAttributeAtRowIndex(rowIndex, attributes.ARIA_SELECTED, 'true');
}
else {
this.adapter.removeClassAtRowIndex(rowIndex, cssClasses.ROW_SELECTED);
this.adapter.setAttributeAtRowIndex(rowIndex, attributes.ARIA_SELECTED, 'false');
}
};
return MDCDataTableFoundation;
}(MDCFoundation));
export { MDCDataTableFoundation };
//# sourceMappingURL=foundation.js.map