UNPKG

coreui

Version:

Platform Core UI

151 lines (119 loc) 5.65 kB
'use strict'; 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 };