ka-table
Version:
The customizable, extendable, lightweight, and fully free React Table Component
203 lines (202 loc) • 10.1 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getDraggableProps = exports.groupPanelOnDrop = exports.prepareTableOptions = exports.getPagesCountByProps = exports.getSortedColumns = exports.getSelectedData = exports.isValid = exports.getData = exports.areAllVisibleRowsSelected = exports.areAllFilteredRowsSelected = exports.getFilteredData = exports.mergeProps = exports.extendProps = void 0;
var PagingUtils_1 = require("./PagingUtils");
var SortUtils_1 = require("./SortUtils");
var enums_1 = require("../enums");
var FilterUtils_1 = require("./FilterUtils");
var GroupUtils_1 = require("./GroupUtils");
var TreeUtils_1 = require("./TreeUtils");
var ReducerUtils_1 = require("./ReducerUtils");
var DataUtils_1 = require("./DataUtils");
var actionCreators_1 = require("../actionCreators");
function extendProps(childElementAttributes, childProps, childComponent) {
var resultProps = childElementAttributes;
var childCustomAttributes = childComponent && childComponent.elementAttributes && childComponent.elementAttributes(childProps);
if (childCustomAttributes) {
var dispatch = childProps.dispatch;
resultProps = mergeProps(childElementAttributes, childProps, childCustomAttributes, dispatch);
}
return resultProps;
}
exports.extendProps = extendProps;
;
var emptyFunc = function () { };
function mergeProps(childElementAttributes, childProps, childCustomAttributes, dispatch) {
var customPropsWithEvents = {};
var _loop_1 = function (prop) {
if (childCustomAttributes.hasOwnProperty(prop)) {
var propName = prop;
var propValue_1 = childCustomAttributes[propName];
var baseFunc_1 = childElementAttributes[propName] || emptyFunc;
if (typeof propValue_1 === 'function') {
customPropsWithEvents[prop] = function (e) {
propValue_1(e, {
baseFunc: baseFunc_1,
childElementAttributes: childElementAttributes,
childProps: childProps,
dispatch: dispatch,
});
};
}
}
};
for (var prop in childCustomAttributes) {
_loop_1(prop);
}
var mergedResult = __assign(__assign(__assign(__assign({}, childElementAttributes), childCustomAttributes), customPropsWithEvents), { className: "".concat(childElementAttributes.className || '', " ").concat(childCustomAttributes.className || ''), style: __assign(__assign({}, childElementAttributes.style), childCustomAttributes.style) });
return mergedResult;
}
exports.mergeProps = mergeProps;
;
var getFilteredData = function (props) {
return (0, FilterUtils_1.filterAndSearchData)(props);
};
exports.getFilteredData = getFilteredData;
var areAllFilteredRowsSelected = function (props) {
var _a = props.selectedRows, selectedRows = _a === void 0 ? [] : _a, rowKeyField = props.rowKeyField;
return (0, FilterUtils_1.filterAndSearchData)(props).every(function (d) { return selectedRows.includes((0, DataUtils_1.getValueByField)(d, rowKeyField)); });
};
exports.areAllFilteredRowsSelected = areAllFilteredRowsSelected;
var areAllVisibleRowsSelected = function (props) {
var _a = props.selectedRows, selectedRows = _a === void 0 ? [] : _a, rowKeyField = props.rowKeyField;
return (0, exports.getData)(props).every(function (d) { return selectedRows.includes((0, DataUtils_1.getValueByField)(d, rowKeyField)); });
};
exports.areAllVisibleRowsSelected = areAllVisibleRowsSelected;
var getDataWithoutPaging = function (props) {
var columns = props.columns, groups = props.groups, groupsExpanded = props.groupsExpanded, treeGroupKeyField = props.treeGroupKeyField, treeGroupsExpanded = props.treeGroupsExpanded, extendedSort = props.extendedSort, rowKeyField = props.rowKeyField, sort = props.sort, _a = props.sortingMode, sortingMode = _a === void 0 ? enums_1.SortingMode.None : _a;
var _b = props.data, data = _b === void 0 ? [] : _b;
var resultData = __spreadArray([], data, true);
resultData = (0, FilterUtils_1.filterAndSearchData)(props);
if (!(0, SortUtils_1.isRemoteSorting)(sortingMode)) {
resultData = (0, SortUtils_1.sortData)(columns, resultData, sort);
}
resultData = extendedSort ? extendedSort(resultData, columns) : resultData;
var groupedColumns = groups ? columns.filter(function (c) { return groups.some(function (g) { return g.columnKey === c.key; }); }) : [];
resultData = groups ? (0, GroupUtils_1.getGroupedData)(resultData, groups, groupedColumns, groupsExpanded) : resultData;
resultData = treeGroupKeyField ? (0, TreeUtils_1.getTreeData)({ data: resultData, rowKeyField: rowKeyField, treeGroupKeyField: treeGroupKeyField, treeGroupsExpanded: treeGroupsExpanded, originalData: data }) : resultData;
return resultData;
};
var getData = function (props) {
var paging = props.paging;
var resultData = getDataWithoutPaging(props);
resultData = (0, PagingUtils_1.getPageData)(resultData, paging);
return resultData;
};
exports.getData = getData;
var isValid = function (props) {
return (!props.validation || !(0, ReducerUtils_1.getValidatedEditableCells)(props).some(function (cell) { return cell.validationMessage; }));
};
exports.isValid = isValid;
var getSelectedData = function (_a) {
var data = _a.data, selectedRows = _a.selectedRows, rowKeyField = _a.rowKeyField;
return data ? data.filter(function (d) {
var value = (0, DataUtils_1.getValueByField)(d, rowKeyField);
return selectedRows === null || selectedRows === void 0 ? void 0 : selectedRows.some(function (v) { return v === value; });
}) : [];
};
exports.getSelectedData = getSelectedData;
var getSortedColumns = function (props) {
return (0, SortUtils_1.sortColumns)(props.columns);
};
exports.getSortedColumns = getSortedColumns;
var getPagesCountByProps = function (props) {
var paging = props.paging;
var pagesCount = 1;
if (paging && paging.enabled) {
var data = getDataWithoutPaging(props);
pagesCount = (0, PagingUtils_1.getPagesCount)(data, paging);
}
return pagesCount;
};
exports.getPagesCountByProps = getPagesCountByProps;
var prepareTableOptions = function (props) {
var groups = props.groups;
var columns = props.columns;
var groupedData = (0, exports.getData)(props);
var groupColumnsCount = 0;
var groupedColumns = [];
if (groups) {
groupColumnsCount = groups.length;
groupedColumns = columns.filter(function (c) { return groups.some(function (g) { return g.columnKey === c.key; }); });
columns = columns.filter(function (c) { return !groups.some(function (g) { return g.columnKey === c.key; }); });
}
columns = columns.filter(function (c) { return c.visible !== false; });
return {
columns: columns,
groupColumnsCount: groupColumnsCount,
groupedColumns: groupedColumns,
groupedData: groupedData
};
};
exports.prepareTableOptions = prepareTableOptions;
var groupPanelOnDrop = function (event, dispatch) {
var _a;
var draggableKeyValueData = (_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.getData('ka-draggableKeyValue');
if (draggableKeyValueData) {
var draggableKeyValue = JSON.parse(draggableKeyValueData);
dispatch((0, actionCreators_1.groupColumn)(draggableKeyValue));
}
};
exports.groupPanelOnDrop = groupPanelOnDrop;
var getDraggableProps = function (_a) {
var key = _a.key, dispatch = _a.dispatch, actionCreator = _a.actionCreator, draggedClass = _a.draggedClass, dragOverClass = _a.dragOverClass, hasReordering = _a.hasReordering;
var count = 0;
var reorderingProps = hasReordering ? {
onDragEnter: function (event) {
count++;
if (!event.currentTarget.classList.contains(dragOverClass)) {
event.currentTarget.classList.add(dragOverClass);
}
event.preventDefault();
},
onDragLeave: function (event) {
count--;
if (count === 0) {
event.currentTarget.classList.remove(dragOverClass);
}
},
onDragOver: function (event) {
if (!event.currentTarget.classList.contains(dragOverClass)) {
event.currentTarget.classList.add(dragOverClass);
}
event.preventDefault();
}
} : {};
return __assign({ draggable: true, onDragStart: function (event) {
count = 0;
event.dataTransfer.setData('ka-draggableKeyValue', JSON.stringify(key));
event.currentTarget.classList.add(draggedClass);
event.dataTransfer.effectAllowed = 'move';
}, onDragEnd: function (event) {
event.currentTarget.classList.remove(draggedClass);
}, onDrop: function (event) {
event.currentTarget.classList.remove(dragOverClass);
var keyDataTransfer = event.dataTransfer.getData('ka-draggableKeyValue');
if (hasReordering && keyDataTransfer) {
var draggableKeyValue = JSON.parse(keyDataTransfer);
dispatch(actionCreator(draggableKeyValue, key));
}
} }, reorderingProps);
};
exports.getDraggableProps = getDraggableProps;