UNPKG

@coreui/vue-pro

Version:

UI Components Library for Vue.js

261 lines (258 loc) 9.61 kB
'use strict'; const filterColumns = (items, columnFilter, columnFilterState, itemsDataColumns) => { if (columnFilter && typeof columnFilter === 'object' && columnFilter.external) { return items; } if (Object.entries(columnFilterState).length === 0) { return items; } let filteredItems = [...items]; for (const [key, value] of Object.entries(columnFilterState)) { if (typeof value === 'function') { filteredItems = filteredItems.filter((item) => value(item[key])); } else { const columnFilterValue = String(value).toLowerCase(); if (columnFilterValue && itemsDataColumns.includes(key)) { filteredItems = filteredItems.filter((item) => String(item[key]).toLowerCase().includes(columnFilterValue)); } } } return filteredItems; }; const filterTable = (items, tableFilter, tableFilterState, itemsDataColumns) => { if (!tableFilterState || (tableFilter && typeof tableFilter === 'object' && tableFilter.external)) { return items; } const filter = tableFilterState.toLowerCase(); return items.filter((item) => itemsDataColumns.some((key) => String(item[key]).toLowerCase().includes(filter))); }; const getClickedColumnName = (target, columnNames, selectable) => { const clickedCell = target.closest('td'); if (!clickedCell) { return ''; } const row = clickedCell.closest('tr'); if (!row) { return ''; } const cells = Array.from(row.children); let index = cells.indexOf(clickedCell); if (selectable) { index -= 1; } return columnNames[index] || ''; }; const getColumnKey = (column) => typeof column === 'object' ? column.key : column; const getColumnLabel = (column) => typeof column === 'object' ? (column.label ?? pretifyName(column.key)) : pretifyName(column); const getColumnName = (column) => typeof column === 'object' ? column.key : column; const getColumnNames = (columns, items) => { if (columns) { const _columns = []; for (const column of columns) { if (typeof column === 'object' && column.children) { _columns.push(...getColumnNames(column.children, [])); continue; } typeof column === 'object' ? _columns.push(column.key) : _columns.push(column); } return _columns; } return getColumnNamesFromItems(items); }; const getColumns = (_columns) => { const columns = []; for (const column of _columns) { if (typeof column === 'object' && column.group && column.children) { columns.push(...getColumns(column.children)); continue; } if (typeof column === 'object' && column.children) { columns.push(...getColumns(column.children)); } columns.push(column); } return columns; }; const countColumns = (columns) => { let count = 0; for (const column of columns) { if (!column.children || column.children.length === 0) { count++; } else { count += countColumns(column.children); } } return count; }; const getColumnGroups = (columns) => { const groups = []; const traverseColumns = (column, deep = 0, colSpan = 0) => { const groups = []; if (column.children) { for (const _column of column.children) { if (!_column.group) { colSpan++; } groups.push(...traverseColumns(_column, deep + 1, colSpan)); } } if (typeof column === 'object' && column.group) { const { children, group, ...rest } = column; groups.push({ deep: deep, label: group, ...(children && { colspan: countColumns(children) }), ...rest, }); } return groups; }; if (columns) { for (const column of columns) { if (typeof column === 'object' && column.group) { const objects = traverseColumns(column); if (objects) { for (const object of objects) { const { deep, ...rest } = object; if (deep === undefined) { continue; } for (let i = 0; i < deep; i++) { if (groups[i]) { continue; } groups.push([]); } if (groups[deep]) { groups[deep].push(rest); } else { groups.push([rest]); } } } } } } return groups; }; const getColumnNamesFromItems = (items) => Object.keys(items[0] || {}).filter((el) => el.charAt(0) !== '_'); const getColumnSorterFunction = (column) => { if (column && typeof column === 'object' && column.sorter && typeof column.sorter === 'function') { return column.sorter; } return; }; const getColumnSorterState = (key, sorterState) => { const state = sorterState && sorterState.find((el) => el.column === key); return state ? state.state : 0; }; const getColumnValues = (items, key) => items.map((item) => item[key]); const getTableDataCellProps = (column, item, colName) => { const props = { ...(typeof column === 'object' && column._colProps), ...item._cellProps?.all, ...item._cellProps?.[colName], }; return props; }; const getTableDataCellStyles = (column, item, colName) => { const styles = { ...(typeof column === 'object' && column._colStyle), ...item._cellStyle?.all, ...item._cellStyle?.[colName], }; return styles; }; const getTableHeaderCellProps = (column) => typeof column === 'object' && column._props ? column._props : {}; const getTableHeaderCellStyles = (column, columnSorter) => { const style = {}; const isSortable = columnSorter && (typeof column !== 'object' || (typeof column === 'object' && (column.sorter === undefined || column.sorter))); if (isSortable) { style.cursor = 'pointer'; } if (typeof column === 'object' && column._style) { Object.assign(style, column._style); } return style; }; const isSortable = (index, columns, columnSorter, itemsDataColumns, columnNames) => { const key = columnNames[index]; const isDataColumn = itemsDataColumns.includes(key); const column = columns ? columns[index] : undefined; return (!!columnSorter && (!columns || typeof column !== 'object' || (typeof column === 'object' && (column.sorter === undefined || column.sorter))) && isDataColumn); }; const pretifyName = (name) => { return name .replace(/[-_.]/g, ' ') .replace(/ +/g, ' ') .replace(/([a-z0-9])([A-Z])/g, '$1 $2') .split(' ') .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) .join(' '); }; const sortBy = (column, items, key, order) => { const sorterFunction = getColumnSorterFunction(column); const sortedItems = [...items].sort(sorterFunction || ((a, b) => { const valA = a[key]; const valB = b[key]; const aValue = typeof valA === 'number' ? valA : String(valA).toLowerCase(); const bValue = typeof valB === 'number' ? valB : String(valB).toLowerCase(); return aValue > bValue ? 1 : bValue > aValue ? -1 : 0; })); return order === 'desc' ? sortedItems.reverse() : sortedItems; }; const sortItems = (columns, columnSorter, items, itemsDataColumns, sorterState) => { if ((columnSorter && typeof columnSorter === 'object' && columnSorter.external) || sorterState.length === 0) { return items; } let sortedItems = [...items]; for (const sorter of [...sorterState].reverse()) { const key = sorter.column; const order = sorter.state; const column = columns && columns.find((column) => typeof column === 'object' && column.key === key); if (!key || !itemsDataColumns.includes(key)) { continue; } sortedItems = sortBy(column, sortedItems, key, order); } return sortedItems; }; exports.countColumns = countColumns; exports.filterColumns = filterColumns; exports.filterTable = filterTable; exports.getClickedColumnName = getClickedColumnName; exports.getColumnGroups = getColumnGroups; exports.getColumnKey = getColumnKey; exports.getColumnLabel = getColumnLabel; exports.getColumnName = getColumnName; exports.getColumnNames = getColumnNames; exports.getColumnNamesFromItems = getColumnNamesFromItems; exports.getColumnSorterFunction = getColumnSorterFunction; exports.getColumnSorterState = getColumnSorterState; exports.getColumnValues = getColumnValues; exports.getColumns = getColumns; exports.getTableDataCellProps = getTableDataCellProps; exports.getTableDataCellStyles = getTableDataCellStyles; exports.getTableHeaderCellProps = getTableHeaderCellProps; exports.getTableHeaderCellStyles = getTableHeaderCellStyles; exports.isSortable = isSortable; exports.pretifyName = pretifyName; exports.sortBy = sortBy; exports.sortItems = sortItems; //# sourceMappingURL=utils.js.map