@tanstack/table-core
Version:
Headless UI for building powerful tables & datagrids for TS/JS.
174 lines (166 loc) • 5.88 kB
JavaScript
/**
* table-core
*
* Copyright (c) TanStack
*
* This source code is licensed under the MIT license found in the
* LICENSE.md file in the root directory of this source tree.
*
* @license MIT
*/
;
var utils = require('../utils.js');
//
const RowExpanding = {
getInitialState: state => {
return {
expanded: {},
...state
};
},
getDefaultOptions: table => {
return {
onExpandedChange: utils.makeStateUpdater('expanded', table),
paginateExpandedRows: true
};
},
createTable: table => {
let registered = false;
let queued = false;
table._autoResetExpanded = () => {
var _ref, _table$options$autoRe;
if (!registered) {
table._queue(() => {
registered = true;
});
return;
}
if ((_ref = (_table$options$autoRe = table.options.autoResetAll) != null ? _table$options$autoRe : table.options.autoResetExpanded) != null ? _ref : !table.options.manualExpanding) {
if (queued) return;
queued = true;
table._queue(() => {
table.resetExpanded();
queued = false;
});
}
};
table.setExpanded = updater => table.options.onExpandedChange == null ? void 0 : table.options.onExpandedChange(updater);
table.toggleAllRowsExpanded = expanded => {
if (expanded != null ? expanded : !table.getIsAllRowsExpanded()) {
table.setExpanded(true);
} else {
table.setExpanded({});
}
};
table.resetExpanded = defaultState => {
var _table$initialState$e, _table$initialState;
table.setExpanded(defaultState ? {} : (_table$initialState$e = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.expanded) != null ? _table$initialState$e : {});
};
table.getCanSomeRowsExpand = () => {
return table.getPrePaginationRowModel().flatRows.some(row => row.getCanExpand());
};
table.getToggleAllRowsExpandedHandler = () => {
return e => {
e.persist == null || e.persist();
table.toggleAllRowsExpanded();
};
};
table.getIsSomeRowsExpanded = () => {
const expanded = table.getState().expanded;
return expanded === true || Object.values(expanded).some(Boolean);
};
table.getIsAllRowsExpanded = () => {
const expanded = table.getState().expanded;
// If expanded is true, save some cycles and return true
if (typeof expanded === 'boolean') {
return expanded === true;
}
if (!Object.keys(expanded).length) {
return false;
}
// If any row is not expanded, return false
if (table.getRowModel().flatRows.some(row => !row.getIsExpanded())) {
return false;
}
// They must all be expanded :shrug:
return true;
};
table.getExpandedDepth = () => {
let maxDepth = 0;
const rowIds = table.getState().expanded === true ? Object.keys(table.getRowModel().rowsById) : Object.keys(table.getState().expanded);
rowIds.forEach(id => {
const splitId = id.split('.');
maxDepth = Math.max(maxDepth, splitId.length);
});
return maxDepth;
};
table.getPreExpandedRowModel = () => table.getSortedRowModel();
table.getExpandedRowModel = () => {
if (!table._getExpandedRowModel && table.options.getExpandedRowModel) {
table._getExpandedRowModel = table.options.getExpandedRowModel(table);
}
if (table.options.manualExpanding || !table._getExpandedRowModel) {
return table.getPreExpandedRowModel();
}
return table._getExpandedRowModel();
};
},
createRow: (row, table) => {
row.toggleExpanded = expanded => {
table.setExpanded(old => {
var _expanded;
const exists = old === true ? true : !!(old != null && old[row.id]);
let oldExpanded = {};
if (old === true) {
Object.keys(table.getRowModel().rowsById).forEach(rowId => {
oldExpanded[rowId] = true;
});
} else {
oldExpanded = old;
}
expanded = (_expanded = expanded) != null ? _expanded : !exists;
if (!exists && expanded) {
return {
...oldExpanded,
[row.id]: true
};
}
if (exists && !expanded) {
const {
[row.id]: _,
...rest
} = oldExpanded;
return rest;
}
return old;
});
};
row.getIsExpanded = () => {
var _table$options$getIsR;
const expanded = table.getState().expanded;
return !!((_table$options$getIsR = table.options.getIsRowExpanded == null ? void 0 : table.options.getIsRowExpanded(row)) != null ? _table$options$getIsR : expanded === true || (expanded == null ? void 0 : expanded[row.id]));
};
row.getCanExpand = () => {
var _table$options$getRow, _table$options$enable, _row$subRows;
return (_table$options$getRow = table.options.getRowCanExpand == null ? void 0 : table.options.getRowCanExpand(row)) != null ? _table$options$getRow : ((_table$options$enable = table.options.enableExpanding) != null ? _table$options$enable : true) && !!((_row$subRows = row.subRows) != null && _row$subRows.length);
};
row.getIsAllParentsExpanded = () => {
let isFullyExpanded = true;
let currentRow = row;
while (isFullyExpanded && currentRow.parentId) {
currentRow = table.getRow(currentRow.parentId, true);
isFullyExpanded = currentRow.getIsExpanded();
}
return isFullyExpanded;
};
row.getToggleExpandedHandler = () => {
const canExpand = row.getCanExpand();
return () => {
if (!canExpand) return;
row.toggleExpanded();
};
};
}
};
exports.RowExpanding = RowExpanding;
//# sourceMappingURL=RowExpanding.js.map