coreui
Version:
Platform Core UI
151 lines (119 loc) • 5.65 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _Table = require('../../theme/components/Table');
var _Table2 = _interopRequireDefault(_Table);
var _ramda = require('ramda');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var currentPage = function currentPage(pagination, pageIndex, pageSize, data) {
return !pagination ? data : (0, _ramda.splitEvery)(pageSize, data)[pageIndex] || [];
};
var isColumnSearchable = function isColumnSearchable(columnId, searchable) {
return (0, _ramda.is)(Array, searchable) ? new Set(searchable).has(columnId) : !!searchable;
};
var isColumnSortable = function isColumnSortable(columnId, sortable) {
return (0, _ramda.is)(Array, sortable) ? new Set(sortable).has(columnId) : !!sortable;
};
var isKeyColumnValid = function isKeyColumnValid(data, valueField) {
return !!(valueField && new Set(data.filter(function (r) {
return !(0, _ramda.isNil)(r[valueField]);
})).size === data.length);
};
var isSearchMatchingRow = function isSearchMatchingRow(columns, searchValue, row) {
return (0, _ramda.any)(function (c) {
return c.isSearchable && (row[c.id] || '').toString().toLowerCase().includes(searchValue.toLowerCase());
}, columns);
};
var maxPageIndex = function maxPageIndex(data, pageSize) {
return (0, _ramda.dec)((0, _ramda.splitEvery)(pageSize, data).length);
};
var normalizedColumns = function normalizedColumns(baseTableProps, columns) {
var data = baseTableProps.data,
helpers = baseTableProps.helpers,
searchable = baseTableProps.searchable,
sortable = baseTableProps.sortable;
return (columns || (0, _ramda.uniq)((0, _ramda.chain)(_ramda.keys, data))).map(function (c) {
var component = c.component;
var displayName = (0, _ramda.isNil)(c.displayName) ? c : c.displayName;
var id = c.id || c;
var isSearchable = helpers.isColumnSearchable(id, searchable);
var isSortable = helpers.isColumnSortable(id, sortable);
return { component: component, displayName: displayName, id: id, isSearchable: isSearchable, isSortable: isSortable };
});
};
var normalizedProps = function normalizedProps(helpers, props) {
var pagination = props.pagination,
pageIndex = props.pageIndex,
pageSize = props.pageSize,
prevPageIndex = props.prevPageIndex,
searchable = props.searchable,
selection = props.selection,
searchValue = props.searchValue,
sortable = props.sortable,
sortAscending = props.sortAscending,
sortField = props.sortField,
valueField = props.valueField;
var columns = helpers.normalizedColumns({ data: props.data, helpers: helpers, searchable: searchable, sortable: sortable }, props.columns);
var sortedData = helpers.sortedData({ columns: columns, searchable: searchable, searchValue: searchValue, sortAscending: sortAscending, sortField: sortField }, helpers, props.data);
var data = helpers.currentPage(pagination, (0, _ramda.isNil)(pageIndex) ? prevPageIndex : pageIndex, pageSize, sortedData);
return (0, _ramda.merge)(props, {
columns: columns,
data: data,
maxPageIndex: helpers.maxPageIndex(sortedData, pageSize),
searchable: !!searchable,
selection: !!(selection && helpers.isKeyColumnValid(data, valueField)),
sortable: !!sortable
});
};
var toString = function toString(strOrNil) {
return (0, _ramda.isNil)(strOrNil) ? '' : strOrNil;
};
var caseInsensitiveSortedData = function caseInsensitiveSortedData(filteredData, sortField) {
var firstValue = (filteredData.find(function (x) {
return x[sortField];
}) || {})[sortField];
var isCaseInsensitiveSortable = sortField && firstValue && (0, _ramda.is)(Function, firstValue.toUpperCase);
var sortByFn = (0, _ramda.sortBy)(isCaseInsensitiveSortable ? (0, _ramda.compose)(_ramda.toLower, toString, (0, _ramda.prop)(sortField)) : (0, _ramda.prop)(sortField));
return sortByFn(filteredData);
};
var sortedData = function sortedData(baseTableProps, helpers, data) {
var columns = baseTableProps.columns,
searchable = baseTableProps.searchable,
searchValue = baseTableProps.searchValue,
sortAscending = baseTableProps.sortAscending,
sortField = baseTableProps.sortField;
var filteredData = searchable ? data.filter((0, _ramda.partial)(helpers.isSearchMatchingRow, [columns, searchValue])) : data;
var xs = !sortField ? filteredData : caseInsensitiveSortedData(filteredData, sortField);
return sortField && sortAscending === false ? (0, _ramda.reverse)(xs) : xs;
};
var classes = _Table2.default.classes;
var options = _Table2.default.options;
var styles = _Table2.default.styles;
var tableDefaultProps = function tableDefaultProps() {
return {
columns: null,
data: [],
pageSize: 10,
pagination: false,
searchable: false,
searchPlaceholder: 'Search items...',
selectMultiple: true,
selection: true,
sortable: true,
sortAscending: true,
theme: { classes: classes, options: options, styles: styles }
};
};
var toggleRow = function toggleRow(selectedRows, rowId) {
if (selectedRows.has(rowId)) {
selectedRows.delete(rowId);
} else {
selectedRows.add(rowId);
}
return selectedRows;
};
exports.default = {
currentPage: currentPage, isColumnSearchable: isColumnSearchable, isColumnSortable: isColumnSortable, isKeyColumnValid: isKeyColumnValid, isSearchMatchingRow: isSearchMatchingRow,
maxPageIndex: maxPageIndex, normalizedColumns: normalizedColumns, normalizedProps: normalizedProps, sortedData: sortedData, tableDefaultProps: tableDefaultProps, toggleRow: toggleRow
};