@tanstack/table-core
Version:
Headless UI for building powerful tables & datagrids for TS/JS.
170 lines (165 loc) • 6.21 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 defaultPageIndex = 0;
const defaultPageSize = 10;
const getDefaultPaginationState = () => ({
pageIndex: defaultPageIndex,
pageSize: defaultPageSize
});
const RowPagination = {
getInitialState: state => {
return {
...state,
pagination: {
...getDefaultPaginationState(),
...(state == null ? void 0 : state.pagination)
}
};
},
getDefaultOptions: table => {
return {
onPaginationChange: utils.makeStateUpdater('pagination', table)
};
},
createTable: table => {
let registered = false;
let queued = false;
table._autoResetPageIndex = () => {
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.autoResetPageIndex) != null ? _ref : !table.options.manualPagination) {
if (queued) return;
queued = true;
table._queue(() => {
table.resetPageIndex();
queued = false;
});
}
};
table.setPagination = updater => {
const safeUpdater = old => {
let newState = utils.functionalUpdate(updater, old);
return newState;
};
return table.options.onPaginationChange == null ? void 0 : table.options.onPaginationChange(safeUpdater);
};
table.resetPagination = defaultState => {
var _table$initialState$p;
table.setPagination(defaultState ? getDefaultPaginationState() : (_table$initialState$p = table.initialState.pagination) != null ? _table$initialState$p : getDefaultPaginationState());
};
table.setPageIndex = updater => {
table.setPagination(old => {
let pageIndex = utils.functionalUpdate(updater, old.pageIndex);
const maxPageIndex = typeof table.options.pageCount === 'undefined' || table.options.pageCount === -1 ? Number.MAX_SAFE_INTEGER : table.options.pageCount - 1;
pageIndex = Math.max(0, Math.min(pageIndex, maxPageIndex));
return {
...old,
pageIndex
};
});
};
table.resetPageIndex = defaultState => {
var _table$initialState$p2, _table$initialState;
table.setPageIndex(defaultState ? defaultPageIndex : (_table$initialState$p2 = (_table$initialState = table.initialState) == null || (_table$initialState = _table$initialState.pagination) == null ? void 0 : _table$initialState.pageIndex) != null ? _table$initialState$p2 : defaultPageIndex);
};
table.resetPageSize = defaultState => {
var _table$initialState$p3, _table$initialState2;
table.setPageSize(defaultState ? defaultPageSize : (_table$initialState$p3 = (_table$initialState2 = table.initialState) == null || (_table$initialState2 = _table$initialState2.pagination) == null ? void 0 : _table$initialState2.pageSize) != null ? _table$initialState$p3 : defaultPageSize);
};
table.setPageSize = updater => {
table.setPagination(old => {
const pageSize = Math.max(1, utils.functionalUpdate(updater, old.pageSize));
const topRowIndex = old.pageSize * old.pageIndex;
const pageIndex = Math.floor(topRowIndex / pageSize);
return {
...old,
pageIndex,
pageSize
};
});
};
//deprecated
table.setPageCount = updater => table.setPagination(old => {
var _table$options$pageCo;
let newPageCount = utils.functionalUpdate(updater, (_table$options$pageCo = table.options.pageCount) != null ? _table$options$pageCo : -1);
if (typeof newPageCount === 'number') {
newPageCount = Math.max(-1, newPageCount);
}
return {
...old,
pageCount: newPageCount
};
});
table.getPageOptions = utils.memo(() => [table.getPageCount()], pageCount => {
let pageOptions = [];
if (pageCount && pageCount > 0) {
pageOptions = [...new Array(pageCount)].fill(null).map((_, i) => i);
}
return pageOptions;
}, utils.getMemoOptions(table.options, 'debugTable', 'getPageOptions'));
table.getCanPreviousPage = () => table.getState().pagination.pageIndex > 0;
table.getCanNextPage = () => {
const {
pageIndex
} = table.getState().pagination;
const pageCount = table.getPageCount();
if (pageCount === -1) {
return true;
}
if (pageCount === 0) {
return false;
}
return pageIndex < pageCount - 1;
};
table.previousPage = () => {
return table.setPageIndex(old => old - 1);
};
table.nextPage = () => {
return table.setPageIndex(old => {
return old + 1;
});
};
table.firstPage = () => {
return table.setPageIndex(0);
};
table.lastPage = () => {
return table.setPageIndex(table.getPageCount() - 1);
};
table.getPrePaginationRowModel = () => table.getExpandedRowModel();
table.getPaginationRowModel = () => {
if (!table._getPaginationRowModel && table.options.getPaginationRowModel) {
table._getPaginationRowModel = table.options.getPaginationRowModel(table);
}
if (table.options.manualPagination || !table._getPaginationRowModel) {
return table.getPrePaginationRowModel();
}
return table._getPaginationRowModel();
};
table.getPageCount = () => {
var _table$options$pageCo2;
return (_table$options$pageCo2 = table.options.pageCount) != null ? _table$options$pageCo2 : Math.ceil(table.getRowCount() / table.getState().pagination.pageSize);
};
table.getRowCount = () => {
var _table$options$rowCou;
return (_table$options$rowCou = table.options.rowCount) != null ? _table$options$rowCou : table.getPrePaginationRowModel().rows.length;
};
}
};
exports.RowPagination = RowPagination;
//# sourceMappingURL=RowPagination.js.map