@economic/taco 2.29.3 → 2.30.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/index.css +6 -2
- package/dist/esm/packages/taco/src/components/Combobox/useCombobox.js +4 -5
- package/dist/esm/packages/taco/src/components/Combobox/useCombobox.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Menu/components/Trigger.js +9 -7
- package/dist/esm/packages/taco/src/components/Menu/components/Trigger.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Select2/Select2.js +3 -1
- package/dist/esm/packages/taco/src/components/Select2/Select2.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/Table.js +1 -0
- package/dist/esm/packages/taco/src/primitives/Table/Core/Table.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Body/Body.js +13 -4
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Body/Body.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Internal/Selection.js +2 -2
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Columns/Internal/Selection.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/BuiltIns/SkeletonRow.js +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Row/BuiltIns/SkeletonRow.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Print/Print.js +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Print/Print.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Search/Search.js +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/components/Toolbar/components/Search/Search.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableRenderer.js +21 -27
- package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableRenderer.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/util/rows.js +1 -2
- package/dist/esm/packages/taco/src/primitives/Table/Core/util/rows.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/types.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableDataLoader.js +45 -12
- package/dist/esm/packages/taco/src/primitives/Table/useTableDataLoader.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableRowActive.js +8 -8
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/features/useTableRowActive.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableSearchListener.js +7 -3
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableSearchListener.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableServerLoadingListener.js +1 -2
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/listeners/useTableServerLoadingListener.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/useTableManager.js +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/useTableManager.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/setup.js +2 -4
- package/dist/esm/packages/taco/src/primitives/Table/useTableManager/util/setup.js.map +1 -1
- package/dist/esm/packages/taco/src/utils/dom.js +4 -1
- package/dist/esm/packages/taco/src/utils/dom.js.map +1 -1
- package/dist/index.css +6 -2
- package/dist/primitives/Table/Core/components/Body/Body.d.ts +1 -0
- package/dist/primitives/Table/Core/util/rows.d.ts +0 -1
- package/dist/primitives/Table/types.d.ts +8 -9
- package/dist/primitives/Table/useTableDataLoader.d.ts +5 -4
- package/dist/primitives/Table/useTableManager/listeners/useTableSearchListener.d.ts +2 -1
- package/dist/taco.cjs.development.js +119 -78
- package/dist/taco.cjs.development.js.map +1 -1
- package/dist/taco.cjs.production.min.js +1 -1
- package/dist/taco.cjs.production.min.js.map +1 -1
- package/dist/utils/dom.d.ts +1 -0
- package/package.json +2 -2
|
@@ -4122,6 +4122,9 @@ function isElementInteractive(element) {
|
|
|
4122
4122
|
}
|
|
4123
4123
|
return ['A', 'BUTTON', 'INPUT', 'TEXTAREA', 'SELECT', 'LABEL', 'OPTION'].includes(element.tagName) && !element.hidden && !element.disabled && !element.readOnly;
|
|
4124
4124
|
}
|
|
4125
|
+
function isElementInsideTable3OrReport(element) {
|
|
4126
|
+
return !!(element !== null && element !== void 0 && element.closest('[data-taco^=table]'));
|
|
4127
|
+
}
|
|
4125
4128
|
|
|
4126
4129
|
function isPressingMetaKey(event) {
|
|
4127
4130
|
return isMacOs() ? event.metaKey : event.ctrlKey;
|
|
@@ -5823,9 +5826,7 @@ const useCombobox = ({
|
|
|
5823
5826
|
}
|
|
5824
5827
|
};
|
|
5825
5828
|
const handleInputKeyDown = event => {
|
|
5826
|
-
var _inputRef$current;
|
|
5827
5829
|
event.persist();
|
|
5828
|
-
const insideTheTable = !!((_inputRef$current = inputRef.current) !== null && _inputRef$current !== void 0 && _inputRef$current.closest('table, [role="rowgroup"]'));
|
|
5829
5830
|
if (!event.ctrlKey && !event.metaKey) {
|
|
5830
5831
|
switch (event.key) {
|
|
5831
5832
|
case 'Backspace':
|
|
@@ -5847,7 +5848,7 @@ const useCombobox = ({
|
|
|
5847
5848
|
}
|
|
5848
5849
|
case 'Enter':
|
|
5849
5850
|
{
|
|
5850
|
-
if (
|
|
5851
|
+
if (isElementInsideTable3OrReport(event.currentTarget)) {
|
|
5851
5852
|
event.preventDefault();
|
|
5852
5853
|
if (inline && !open) {
|
|
5853
5854
|
setOpen(true);
|
|
@@ -5865,7 +5866,7 @@ const useCombobox = ({
|
|
|
5865
5866
|
if (open) {
|
|
5866
5867
|
event.preventDefault();
|
|
5867
5868
|
} else {
|
|
5868
|
-
if (!inline && buttonRef.current && !
|
|
5869
|
+
if (!inline && buttonRef.current && !isElementInsideTable3OrReport(event.currentTarget)) {
|
|
5869
5870
|
buttonRef.current.click();
|
|
5870
5871
|
}
|
|
5871
5872
|
}
|
|
@@ -5885,7 +5886,7 @@ const useCombobox = ({
|
|
|
5885
5886
|
listRef.current.dispatchEvent(createCustomKeyboardEvent(event));
|
|
5886
5887
|
}
|
|
5887
5888
|
if (inline && !open) {
|
|
5888
|
-
if ((event.key === 'ArrowUp' || event.key === 'ArrowDown') && !
|
|
5889
|
+
if ((event.key === 'ArrowUp' || event.key === 'ArrowDown') && !isElementInsideTable3OrReport(event.currentTarget)) {
|
|
5889
5890
|
event.preventDefault();
|
|
5890
5891
|
const initialIndex = event.key === 'ArrowUp' ? data.length - 1 : 0;
|
|
5891
5892
|
setCurrentIndex(currentIndex !== undefined ? currentIndex : initialIndex);
|
|
@@ -8194,12 +8195,13 @@ const Link$1 = /*#__PURE__*/React.forwardRef(function MenuLink(props, ref) {
|
|
|
8194
8195
|
const Trigger$6 = /*#__PURE__*/React.forwardRef(function MenuTrigger(props, ref) {
|
|
8195
8196
|
const menu = useCurrentMenu();
|
|
8196
8197
|
const internalRef = useMergedRef(ref);
|
|
8197
|
-
const
|
|
8198
|
-
|
|
8199
|
-
|
|
8200
|
-
|
|
8201
|
-
|
|
8202
|
-
|
|
8198
|
+
const handleKeyDown = event => {
|
|
8199
|
+
if (event.key === 'ArrowDown') {
|
|
8200
|
+
if (isElementInsideTable3OrReport(event.currentTarget)) {
|
|
8201
|
+
var _event$currentTarget$;
|
|
8202
|
+
event.preventDefault();
|
|
8203
|
+
(_event$currentTarget$ = event.currentTarget.parentNode) === null || _event$currentTarget$ === void 0 ? void 0 : _event$currentTarget$.dispatchEvent(createCustomKeyboardEvent(event));
|
|
8204
|
+
}
|
|
8203
8205
|
}
|
|
8204
8206
|
};
|
|
8205
8207
|
React.useEffect(() => {
|
|
@@ -8210,7 +8212,7 @@ const Trigger$6 = /*#__PURE__*/React.forwardRef(function MenuTrigger(props, ref)
|
|
|
8210
8212
|
return /*#__PURE__*/React.createElement(DropdownMenuPrimitive.Trigger, Object.assign({}, props, {
|
|
8211
8213
|
asChild: true,
|
|
8212
8214
|
ref: internalRef,
|
|
8213
|
-
onKeyDown:
|
|
8215
|
+
onKeyDown: handleKeyDown
|
|
8214
8216
|
}));
|
|
8215
8217
|
});
|
|
8216
8218
|
|
|
@@ -9924,6 +9926,7 @@ function processChildren(child, columns, defaultSizing, defaultSorting, defaultV
|
|
|
9924
9926
|
id,
|
|
9925
9927
|
accessorKey,
|
|
9926
9928
|
// To avoid errors caused by undefined row data values, we pass accessorFn as a preventive measure
|
|
9929
|
+
// accessorKey can be dot notated strings, so we use lodash.get to access deeply nested children
|
|
9927
9930
|
accessorFn: row => get(row, accessorKey),
|
|
9928
9931
|
header: header,
|
|
9929
9932
|
// features
|
|
@@ -9951,10 +9954,7 @@ function processChildren(child, columns, defaultSizing, defaultSorting, defaultV
|
|
|
9951
9954
|
column.cell = info => renderer(info.getValue(), info.row.original);
|
|
9952
9955
|
}
|
|
9953
9956
|
if (typeof footer === 'function') {
|
|
9954
|
-
column.footer = info => footer(info.table.getRowModel().rows.flatMap(row =>
|
|
9955
|
-
var _row$original;
|
|
9956
|
-
return ((_row$original = row.original) === null || _row$original === void 0 ? void 0 : _row$original[id]) !== undefined ? [row.original[id]] : [];
|
|
9957
|
-
}));
|
|
9957
|
+
column.footer = info => footer(info.table.getRowModel().rows.flatMap(row => row.original !== undefined ? row.original : []));
|
|
9958
9958
|
}
|
|
9959
9959
|
// config - filtering
|
|
9960
9960
|
if (enableColumnFilter) {
|
|
@@ -10420,11 +10420,11 @@ function useTableRowActive(isEnabled = false, initialRowActiveIndex) {
|
|
|
10420
10420
|
const [rowActiveIndex, setRowActiveIndex] = React__default.useState(initialRowActiveIndex);
|
|
10421
10421
|
const [rowHoverIndex, setRowHoverIndex] = React__default.useState(undefined);
|
|
10422
10422
|
const [isHoverStatePaused, setHoverStatePaused] = useIsHoverStatePaused();
|
|
10423
|
-
const move = (direction, length, scrollToIndex) =>
|
|
10424
|
-
const nextIndex =
|
|
10425
|
-
|
|
10426
|
-
|
|
10427
|
-
}
|
|
10423
|
+
const move = (direction, length, scrollToIndex) => {
|
|
10424
|
+
const nextIndex = rowActiveIndex !== undefined ? getNextIndex(direction, rowActiveIndex, length) : 0;
|
|
10425
|
+
scrollToIndex(nextIndex);
|
|
10426
|
+
setTimeout(() => setRowActiveIndex(nextIndex), 50);
|
|
10427
|
+
};
|
|
10428
10428
|
const onKeyDown = React__default.useCallback((event, length, scrollToIndex) => {
|
|
10429
10429
|
if (!isEnabled || event.defaultPrevented) {
|
|
10430
10430
|
return;
|
|
@@ -10436,8 +10436,8 @@ function useTableRowActive(isEnabled = false, initialRowActiveIndex) {
|
|
|
10436
10436
|
event.preventDefault();
|
|
10437
10437
|
if (event.ctrlKey || event.metaKey) {
|
|
10438
10438
|
const newIndex = 0;
|
|
10439
|
-
setRowActiveIndex(newIndex);
|
|
10440
10439
|
scrollToIndex(newIndex);
|
|
10440
|
+
setRowActiveIndex(newIndex);
|
|
10441
10441
|
} else {
|
|
10442
10442
|
move(-1, length, scrollToIndex);
|
|
10443
10443
|
}
|
|
@@ -10446,14 +10446,14 @@ function useTableRowActive(isEnabled = false, initialRowActiveIndex) {
|
|
|
10446
10446
|
event.preventDefault();
|
|
10447
10447
|
if (event.ctrlKey || event.metaKey) {
|
|
10448
10448
|
const newIndex = length - 1;
|
|
10449
|
-
setRowActiveIndex(newIndex);
|
|
10450
10449
|
scrollToIndex(newIndex);
|
|
10450
|
+
setRowActiveIndex(newIndex);
|
|
10451
10451
|
} else {
|
|
10452
10452
|
move(+1, length, scrollToIndex);
|
|
10453
10453
|
}
|
|
10454
10454
|
return;
|
|
10455
10455
|
}
|
|
10456
|
-
}, [isEnabled]);
|
|
10456
|
+
}, [isEnabled, rowActiveIndex]);
|
|
10457
10457
|
const onFocus = React__default.useCallback((event, length, scrollToIndex) => {
|
|
10458
10458
|
if (!isEnabled || event.isDefaultPrevented()) {
|
|
10459
10459
|
return;
|
|
@@ -10640,7 +10640,7 @@ function _finallyRethrows(body, finalizer) {
|
|
|
10640
10640
|
}
|
|
10641
10641
|
|
|
10642
10642
|
const DEFAULT_PAGE_SIZE = 100;
|
|
10643
|
-
function useTableDataLoader(
|
|
10643
|
+
function useTableDataLoader(fetchPage, fetchAll, options = {
|
|
10644
10644
|
pageSize: DEFAULT_PAGE_SIZE
|
|
10645
10645
|
}) {
|
|
10646
10646
|
const {
|
|
@@ -10656,11 +10656,11 @@ function useTableDataLoader(fetch, fetchAll, options = {
|
|
|
10656
10656
|
const _lastUsedFilters = React__default.useRef([]);
|
|
10657
10657
|
const _lastUsedSearch = React__default.useRef();
|
|
10658
10658
|
const _forceReset = React__default.useRef(false);
|
|
10659
|
-
const loadPage = function (pageIndex, sorting, filters
|
|
10659
|
+
const loadPage = function (pageIndex, sorting, filters) {
|
|
10660
10660
|
try {
|
|
10661
10661
|
let reset = false;
|
|
10662
10662
|
// sorting or filters changed, reset everything
|
|
10663
|
-
if (_forceReset.current ||
|
|
10663
|
+
if (_forceReset.current || JSON.stringify(sorting) !== JSON.stringify(_lastUsedSorting.current) || JSON.stringify(filters) !== JSON.stringify(_lastUsedFilters.current)) {
|
|
10664
10664
|
_pendingPageRequests.current = {};
|
|
10665
10665
|
// nuke the dataset so that we "start again" after sorting
|
|
10666
10666
|
reset = true;
|
|
@@ -10676,11 +10676,9 @@ function useTableDataLoader(fetch, fetchAll, options = {
|
|
|
10676
10676
|
_lastUsedSorting.current = sorting;
|
|
10677
10677
|
// set the filters so we can track if it changed between loads
|
|
10678
10678
|
_lastUsedFilters.current = filters;
|
|
10679
|
-
// set the search so we can track if it changed between loads
|
|
10680
|
-
_lastUsedSearch.current = search;
|
|
10681
10679
|
const _temp = _finallyRethrows(function () {
|
|
10682
10680
|
return _catch(function () {
|
|
10683
|
-
return Promise.resolve(
|
|
10681
|
+
return Promise.resolve(fetchPage(pageIndex, pageSize, sorting, filters)).then(function (response) {
|
|
10684
10682
|
// update state, here we do some "magic" to support "load in place"
|
|
10685
10683
|
setData(currentData => {
|
|
10686
10684
|
let nextData;
|
|
@@ -10709,10 +10707,14 @@ function useTableDataLoader(fetch, fetchAll, options = {
|
|
|
10709
10707
|
return Promise.reject(e);
|
|
10710
10708
|
}
|
|
10711
10709
|
};
|
|
10712
|
-
const loadAll = function (sorting, filters
|
|
10710
|
+
const loadAll = function (sorting, filters) {
|
|
10713
10711
|
try {
|
|
10712
|
+
// set the sorting so we can track if it changed between loads
|
|
10713
|
+
_lastUsedSorting.current = sorting;
|
|
10714
|
+
// set the filters so we can track if it changed between loads
|
|
10715
|
+
_lastUsedFilters.current = filters;
|
|
10714
10716
|
const _temp2 = _catch(function () {
|
|
10715
|
-
return Promise.resolve(fetchAll(sorting, filters
|
|
10717
|
+
return Promise.resolve(fetchAll(sorting, filters)).then(function (response) {
|
|
10716
10718
|
length.current = response.length;
|
|
10717
10719
|
setData(() => {
|
|
10718
10720
|
let nextData;
|
|
@@ -10734,22 +10736,52 @@ function useTableDataLoader(fetch, fetchAll, options = {
|
|
|
10734
10736
|
const invalidate = function () {
|
|
10735
10737
|
try {
|
|
10736
10738
|
_forceReset.current = true;
|
|
10737
|
-
return loadPage(0, _lastUsedSorting.current, _lastUsedFilters.current
|
|
10739
|
+
return loadPage(0, _lastUsedSorting.current, _lastUsedFilters.current);
|
|
10738
10740
|
} catch (e) {
|
|
10739
10741
|
return Promise.reject(e);
|
|
10740
10742
|
}
|
|
10741
10743
|
};
|
|
10742
|
-
//
|
|
10744
|
+
// search works client side - it fetches all then works client side - so these handlers are a little "weird"
|
|
10745
|
+
// if a search is currently "active", we need to re load all because
|
|
10743
10746
|
const handleSort = function (sorting) {
|
|
10744
10747
|
try {
|
|
10745
|
-
|
|
10748
|
+
// set the sorting so we can track if it changed between loads
|
|
10749
|
+
_lastUsedSorting.current = sorting;
|
|
10750
|
+
if (_lastUsedSearch.current) {
|
|
10751
|
+
// we're searching, which means we need to refetch all with the correct sorting applied
|
|
10752
|
+
loadAll(sorting, _lastUsedFilters.current);
|
|
10753
|
+
} else {
|
|
10754
|
+
// reset the page to 0 whenever sorting
|
|
10755
|
+
loadPage(0, sorting, _lastUsedFilters.current);
|
|
10756
|
+
}
|
|
10757
|
+
return Promise.resolve();
|
|
10746
10758
|
} catch (e) {
|
|
10747
10759
|
return Promise.reject(e);
|
|
10748
10760
|
}
|
|
10749
10761
|
};
|
|
10750
10762
|
const handleFilter = function (filters) {
|
|
10751
10763
|
try {
|
|
10752
|
-
|
|
10764
|
+
// set the filters so we can track if it changed between loads
|
|
10765
|
+
_lastUsedFilters.current = filters;
|
|
10766
|
+
if (_lastUsedSearch.current) {
|
|
10767
|
+
// we're searching, which means we need to refetch all with the correct sorting applied
|
|
10768
|
+
loadAll(_lastUsedSorting.current, filters);
|
|
10769
|
+
} else {
|
|
10770
|
+
// reset the page to 0 whenever sorting
|
|
10771
|
+
loadPage(0, _lastUsedSorting.current, filters);
|
|
10772
|
+
}
|
|
10773
|
+
return Promise.resolve();
|
|
10774
|
+
} catch (e) {
|
|
10775
|
+
return Promise.reject(e);
|
|
10776
|
+
}
|
|
10777
|
+
};
|
|
10778
|
+
const handleSearch = function (search) {
|
|
10779
|
+
try {
|
|
10780
|
+
// set the search so we can track if it changed between loads
|
|
10781
|
+
_lastUsedSearch.current = search || undefined;
|
|
10782
|
+
// search works client side, and focusing the search field triggers a load of all so we don't actually
|
|
10783
|
+
// want to load anything when search gets changed, we just store the value for other handlers
|
|
10784
|
+
return Promise.resolve();
|
|
10753
10785
|
} catch (e) {
|
|
10754
10786
|
return Promise.reject(e);
|
|
10755
10787
|
}
|
|
@@ -10760,6 +10792,7 @@ function useTableDataLoader(fetch, fetchAll, options = {
|
|
|
10760
10792
|
loadAll,
|
|
10761
10793
|
loadPage,
|
|
10762
10794
|
onChangeFilter: handleFilter,
|
|
10795
|
+
onChangeSearch: handleSearch,
|
|
10763
10796
|
onChangeSort: handleSort,
|
|
10764
10797
|
pageSize
|
|
10765
10798
|
}, invalidate];
|
|
@@ -11050,14 +11083,18 @@ function resetHighlightedColumnIndexes(value, table) {
|
|
|
11050
11083
|
return firstRowIndex;
|
|
11051
11084
|
}
|
|
11052
11085
|
|
|
11053
|
-
function useTableSearchListener(table) {
|
|
11086
|
+
function useTableSearchListener(table, onChangeSearch) {
|
|
11054
11087
|
const meta = table.options.meta;
|
|
11055
11088
|
// recalculates highlighted indexes whenever something important changes
|
|
11056
11089
|
React__default.useEffect(() => {
|
|
11057
11090
|
if (meta.search.isEnabled) {
|
|
11058
|
-
|
|
11091
|
+
const query = table.getState().globalFilter;
|
|
11092
|
+
resetHighlightedColumnIndexes(query, table);
|
|
11093
|
+
if (typeof onChangeSearch === 'function') {
|
|
11094
|
+
onChangeSearch(query);
|
|
11095
|
+
}
|
|
11059
11096
|
}
|
|
11060
|
-
}, [meta.server.loadAllStatus, meta.search.isEnabled, meta.search.enableGlobalFilter, table.getRowModel().rows.length, table.getState().globalFilter, JSON.stringify(table.getState().sorting), JSON.stringify(table.getState().columnVisibility)]);
|
|
11097
|
+
}, [meta.server.loadAllStatus, meta.search.isEnabled, meta.search.enableGlobalFilter, table.getRowModel().rows.length, table.getState().globalFilter, JSON.stringify(table.getState().sorting), JSON.stringify(table.getState().columnVisibility), onChangeSearch]);
|
|
11061
11098
|
}
|
|
11062
11099
|
|
|
11063
11100
|
function useTableSettingsListener(table, onChangeSettings) {
|
|
@@ -11143,11 +11180,10 @@ function useTableSortingListener(table, onSort) {
|
|
|
11143
11180
|
function useTableServerLoadingListener(table, loadPage) {
|
|
11144
11181
|
const sorting = table.getState().sorting;
|
|
11145
11182
|
const columnFilters = table.getState().columnFilters;
|
|
11146
|
-
const search = table.getState().globalFilter;
|
|
11147
11183
|
// trigger load of the first page on mount
|
|
11148
11184
|
React__default.useEffect(() => {
|
|
11149
11185
|
if (loadPage) {
|
|
11150
|
-
loadPage(0, sorting, columnFilters
|
|
11186
|
+
loadPage(0, sorting, columnFilters);
|
|
11151
11187
|
}
|
|
11152
11188
|
}, []);
|
|
11153
11189
|
}
|
|
@@ -11248,7 +11284,7 @@ function useTableManager(props, meta, internalColumns) {
|
|
|
11248
11284
|
useTableFontSizeListener(instance);
|
|
11249
11285
|
useTableRowHeightListener(instance);
|
|
11250
11286
|
useTableRowSelectionListener(instance, props.onRowSelect);
|
|
11251
|
-
useTableSearchListener(instance);
|
|
11287
|
+
useTableSearchListener(instance, props.onChangeSearch);
|
|
11252
11288
|
useTableServerLoadingListener(instance, server.loadPage);
|
|
11253
11289
|
useTableSettingsListener(instance, setSettings);
|
|
11254
11290
|
useTableShortcutsListener(instance, props.shortcuts);
|
|
@@ -11509,7 +11545,6 @@ const ROW_HEIGHT_ESTIMATES = {
|
|
|
11509
11545
|
tall: 49,
|
|
11510
11546
|
'extra-tall': 57
|
|
11511
11547
|
};
|
|
11512
|
-
const HEADER_FOOTER_ROW_HEIGHT_ESTIMATE = ROW_HEIGHT_ESTIMATES.medium + 2; // header includes 2px border
|
|
11513
11548
|
|
|
11514
11549
|
function SkeletonRow(props) {
|
|
11515
11550
|
const {
|
|
@@ -11547,7 +11582,7 @@ function RowWithServerLoading(props) {
|
|
|
11547
11582
|
React__default.useEffect(() => {
|
|
11548
11583
|
if (inView) {
|
|
11549
11584
|
var _tableMeta$server$loa, _tableMeta$server;
|
|
11550
|
-
(_tableMeta$server$loa = (_tableMeta$server = tableMeta.server).loadPage) === null || _tableMeta$server$loa === void 0 ? void 0 : _tableMeta$server$loa.call(_tableMeta$server, pageIndex, table.getState().sorting, table.getState().columnFilters
|
|
11585
|
+
(_tableMeta$server$loa = (_tableMeta$server = tableMeta.server).loadPage) === null || _tableMeta$server$loa === void 0 ? void 0 : _tableMeta$server$loa.call(_tableMeta$server, pageIndex, table.getState().sorting, table.getState().columnFilters);
|
|
11551
11586
|
}
|
|
11552
11587
|
}, [inView]);
|
|
11553
11588
|
const groupedCellCount = (_table$getState$group = (_table$getState = table.getState()) === null || _table$getState === void 0 ? void 0 : _table$getState.grouping.length) !== null && _table$getState$group !== void 0 ? _table$getState$group : 0;
|
|
@@ -11599,15 +11634,11 @@ function Row(props) {
|
|
|
11599
11634
|
})));
|
|
11600
11635
|
}
|
|
11601
11636
|
|
|
11602
|
-
const TABLE_SCROLL_PADDING_BOTTOM = 36;
|
|
11603
|
-
const TABLE_PADDING_BOTTOM = 0;
|
|
11604
11637
|
function useTableRenderer(renderers, table, tableRef, defaultRowActiveIndex) {
|
|
11605
11638
|
var _table$getState$group, _ref, _virtualItems$padding, _virtualItems$padding2, _ref2, _virtualItems;
|
|
11606
11639
|
const tableMeta = table.options.meta;
|
|
11607
11640
|
const rows = table.getRowModel().rows;
|
|
11608
|
-
const
|
|
11609
|
-
const isTableGrouped = !!((_table$getState$group = table.getState().grouping) !== null && _table$getState$group !== void 0 && _table$getState$group.length);
|
|
11610
|
-
const FOOTER_OFFSET_TOTAL = tableMeta.footer.isEnabled ? HEADER_FOOTER_ROW_HEIGHT_ESTIMATE : 0;
|
|
11641
|
+
const isTableRowGrouped = !!((_table$getState$group = table.getState().grouping) !== null && _table$getState$group !== void 0 && _table$getState$group.length);
|
|
11611
11642
|
// expanded rows
|
|
11612
11643
|
const {
|
|
11613
11644
|
createRowMeasurer,
|
|
@@ -11615,16 +11646,25 @@ function useTableRenderer(renderers, table, tableRef, defaultRowActiveIndex) {
|
|
|
11615
11646
|
} = useRowHeightVirtualisation(table);
|
|
11616
11647
|
// row groups
|
|
11617
11648
|
const rangeExtractor = useRowGroupVirtualisation(table);
|
|
11649
|
+
// account for thead and tfoot in the scroll area - both are always medium row height
|
|
11650
|
+
const scrollPaddingStart = ROW_HEIGHT_ESTIMATES.medium;
|
|
11651
|
+
// column groups offset the bottom padding :shrug:, multiplying by 1.5 ensures the bottom padding remains
|
|
11652
|
+
// consistent when there are groups and when there aren't. 1.5 is relatively arbitrary, but it gives alignment
|
|
11653
|
+
const scrollPaddingEnd = ROW_HEIGHT_ESTIMATES.medium * (table.getHeaderGroups().length > 1 ? 1.5 : 1);
|
|
11654
|
+
const scrollMargin = isTableRowGrouped ? 0 : scrollPaddingStart;
|
|
11618
11655
|
const virtualiser = reactVirtual.useVirtualizer({
|
|
11619
11656
|
count: rows.length,
|
|
11620
11657
|
estimateSize,
|
|
11621
11658
|
getScrollElement: () => tableRef.current,
|
|
11622
11659
|
overscan: tableMeta.printing.isPrinting ? rows.length : undefined,
|
|
11623
11660
|
rangeExtractor,
|
|
11624
|
-
|
|
11625
|
-
|
|
11626
|
-
|
|
11661
|
+
// correctly sets top and bottom spacing for the scroll container - very sensitive, don't change
|
|
11662
|
+
scrollMargin,
|
|
11663
|
+
// correctly sets the scroll padding offset, e.g. when keyboard navigating rows in the list
|
|
11664
|
+
scrollPaddingStart,
|
|
11665
|
+
scrollPaddingEnd: tableMeta.footer.isEnabled ? scrollPaddingEnd * 2 : scrollPaddingEnd
|
|
11627
11666
|
});
|
|
11667
|
+
const totalSize = virtualiser.getTotalSize();
|
|
11628
11668
|
const virtualItems = virtualiser.getVirtualItems();
|
|
11629
11669
|
const scrollToIndex = React__default.useCallback((index, options = {
|
|
11630
11670
|
align: 'auto',
|
|
@@ -11637,29 +11677,18 @@ function useTableRenderer(renderers, table, tableRef, defaultRowActiveIndex) {
|
|
|
11637
11677
|
if (tableRef.current) {
|
|
11638
11678
|
if (index === 0) {
|
|
11639
11679
|
virtualiser.scrollToOffset(0, notSmooth);
|
|
11640
|
-
} else if (index
|
|
11641
|
-
//
|
|
11642
|
-
|
|
11643
|
-
// so when you skip to the last you don't know if "the end" is actually the end
|
|
11644
|
-
virtualiser.scrollToIndex(index, notSmooth);
|
|
11645
|
-
// https://github.com/TanStack/virtual/issues/216
|
|
11646
|
-
setTimeout(() => {
|
|
11647
|
-
virtualiser.scrollToIndex(index, notSmooth);
|
|
11648
|
-
setTimeout(() => {
|
|
11649
|
-
virtualiser.scrollToIndex(index, notSmooth);
|
|
11650
|
-
}, 150);
|
|
11651
|
-
}, 150);
|
|
11680
|
+
} else if (index === rows.length - 1) {
|
|
11681
|
+
// sometimes the last row doesn't fully show, so we just force scroll to the bottom
|
|
11682
|
+
tableRef.current.scrollTop = tableRef.current.scrollHeight;
|
|
11652
11683
|
} else {
|
|
11653
11684
|
virtualiser.scrollToIndex(index, options);
|
|
11654
11685
|
}
|
|
11655
11686
|
}
|
|
11656
|
-
}, [virtualItems.length, tableRef.current]);
|
|
11687
|
+
}, [virtualItems.length, tableRef.current, totalSize, rows.length]);
|
|
11657
11688
|
// use row 1 not 0, because 0 might be sticky in grouped tables and it's start value will always be 0
|
|
11658
|
-
const paddingStartIndex =
|
|
11689
|
+
const paddingStartIndex = isTableRowGrouped && rows.length > 1 ? 1 : 0;
|
|
11659
11690
|
// styling for offsetting rows - this "is" the virtualisation
|
|
11660
|
-
const [paddingTop, paddingBottom] = virtualItems.length > 0 ? [
|
|
11661
|
-
// use row 1 not 0, because 0 might be sticky in grouped tables and it's start value will always be 0
|
|
11662
|
-
Math.max(0, (_ref = ((_virtualItems$padding = virtualItems[paddingStartIndex]) === null || _virtualItems$padding === void 0 ? void 0 : _virtualItems$padding.start) - virtualiser.options.scrollMargin - ((_virtualItems$padding2 = virtualItems[paddingStartIndex]) === null || _virtualItems$padding2 === void 0 ? void 0 : _virtualItems$padding2.size)) !== null && _ref !== void 0 ? _ref : 0), Math.max(0, (_ref2 = virtualiser.getTotalSize() - ((_virtualItems = virtualItems[virtualItems.length - 1]) === null || _virtualItems === void 0 ? void 0 : _virtualItems.end)) !== null && _ref2 !== void 0 ? _ref2 : 0)] : [0, 0];
|
|
11691
|
+
const [paddingTop, paddingBottom] = virtualItems.length > 0 ? [Math.max(0, (_ref = ((_virtualItems$padding = virtualItems[paddingStartIndex]) === null || _virtualItems$padding === void 0 ? void 0 : _virtualItems$padding.start) - ((_virtualItems$padding2 = virtualItems[paddingStartIndex]) === null || _virtualItems$padding2 === void 0 ? void 0 : _virtualItems$padding2.size) - scrollMargin) !== null && _ref !== void 0 ? _ref : 0), Math.max(0, (_ref2 = totalSize - ((_virtualItems = virtualItems[virtualItems.length - 1]) === null || _virtualItems === void 0 ? void 0 : _virtualItems.end)) !== null && _ref2 !== void 0 ? _ref2 : 0)] : [0, 0];
|
|
11663
11692
|
// ensure default active rows are scrolled to
|
|
11664
11693
|
React__default.useEffect(() => {
|
|
11665
11694
|
if (defaultRowActiveIndex) {
|
|
@@ -11674,7 +11703,7 @@ function useTableRenderer(renderers, table, tableRef, defaultRowActiveIndex) {
|
|
|
11674
11703
|
let content = null;
|
|
11675
11704
|
if (rows.length) {
|
|
11676
11705
|
style = {
|
|
11677
|
-
height: `${
|
|
11706
|
+
height: `${totalSize - scrollMargin}px`,
|
|
11678
11707
|
paddingBottom,
|
|
11679
11708
|
paddingTop
|
|
11680
11709
|
};
|
|
@@ -12024,7 +12053,7 @@ function Header$4(context) {
|
|
|
12024
12053
|
const _temp = function () {
|
|
12025
12054
|
if (tableMeta.server.loadAllIfNeeded) {
|
|
12026
12055
|
// don't pass the search query because we need all data - not filtered data
|
|
12027
|
-
return Promise.resolve(tableMeta.server.loadAllIfNeeded(table.getState().sorting, table.getState().columnFilters
|
|
12056
|
+
return Promise.resolve(tableMeta.server.loadAllIfNeeded(table.getState().sorting, table.getState().columnFilters)).then(function () {});
|
|
12028
12057
|
}
|
|
12029
12058
|
}();
|
|
12030
12059
|
// load all data if that is possible
|
|
@@ -12098,7 +12127,7 @@ function Cell$3(context) {
|
|
|
12098
12127
|
const _temp3 = function () {
|
|
12099
12128
|
if (tableMeta.server.loadAllIfNeeded && selectedRows.some(row => row.original === undefined)) {
|
|
12100
12129
|
// don't pass the search query because we need all data - not filtered data
|
|
12101
|
-
return Promise.resolve(tableMeta.server.loadAllIfNeeded(table.getState().sorting, table.getState().columnFilters
|
|
12130
|
+
return Promise.resolve(tableMeta.server.loadAllIfNeeded(table.getState().sorting, table.getState().columnFilters)).then(function () {});
|
|
12102
12131
|
}
|
|
12103
12132
|
}();
|
|
12104
12133
|
return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3);
|
|
@@ -13074,6 +13103,7 @@ function useAugmentedFocusManager() {
|
|
|
13074
13103
|
function Body(props) {
|
|
13075
13104
|
const {
|
|
13076
13105
|
enableHorizontalArrowKeyNavigation = false,
|
|
13106
|
+
scrollToIndex,
|
|
13077
13107
|
table,
|
|
13078
13108
|
...attributes
|
|
13079
13109
|
} = props;
|
|
@@ -13103,16 +13133,24 @@ function Body(props) {
|
|
|
13103
13133
|
// there are no previous elements to focus, go up a row or go outside the table
|
|
13104
13134
|
// but only if there are actually any focusable elements in the row
|
|
13105
13135
|
event.preventDefault();
|
|
13106
|
-
tableMeta.rowActive.
|
|
13107
|
-
|
|
13136
|
+
const prevIndex = tableMeta.rowActive.rowActiveIndex - 1;
|
|
13137
|
+
tableMeta.rowActive.setRowActiveIndex(prevIndex);
|
|
13138
|
+
requestAnimationFrame(() => {
|
|
13139
|
+
focusManager.focusLast();
|
|
13140
|
+
scrollToIndex(prevIndex);
|
|
13141
|
+
});
|
|
13108
13142
|
}
|
|
13109
13143
|
} else {
|
|
13110
13144
|
if (!isLastRow) {
|
|
13111
13145
|
// there are no next elements to focus, go down a row or go outside the table
|
|
13112
13146
|
// but only if there are actually any focusable elements in the row
|
|
13113
13147
|
event.preventDefault();
|
|
13114
|
-
tableMeta.rowActive.
|
|
13115
|
-
|
|
13148
|
+
const nextIndex = tableMeta.rowActive.rowActiveIndex + 1;
|
|
13149
|
+
tableMeta.rowActive.setRowActiveIndex(nextIndex);
|
|
13150
|
+
requestAnimationFrame(() => {
|
|
13151
|
+
focusManager.focusFirst();
|
|
13152
|
+
scrollToIndex(nextIndex);
|
|
13153
|
+
});
|
|
13116
13154
|
}
|
|
13117
13155
|
}
|
|
13118
13156
|
}
|
|
@@ -13440,7 +13478,7 @@ function Search$1(props) {
|
|
|
13440
13478
|
const _temp = function () {
|
|
13441
13479
|
if (tableMeta.server.loadAllIfNeeded) {
|
|
13442
13480
|
// don't pass the search query because we need all data - not filtered data
|
|
13443
|
-
return Promise.resolve(tableMeta.server.loadAllIfNeeded(table.getState().sorting, table.getState().columnFilters
|
|
13481
|
+
return Promise.resolve(tableMeta.server.loadAllIfNeeded(table.getState().sorting, table.getState().columnFilters)).then(function () {});
|
|
13444
13482
|
}
|
|
13445
13483
|
}();
|
|
13446
13484
|
// load all data if that is possible
|
|
@@ -15148,6 +15186,8 @@ const Select2 = /*#__PURE__*/React__default.forwardRef(function Select2(props, r
|
|
|
15148
15186
|
var _listboxRef$current;
|
|
15149
15187
|
if (open) {
|
|
15150
15188
|
event.preventDefault();
|
|
15189
|
+
} else if (isElementInsideTable3OrReport(event.currentTarget)) {
|
|
15190
|
+
return;
|
|
15151
15191
|
} else if (!event.ctrlKey && !event.metaKey && (event.key === 'ArrowDown' || /^[a-z0-9]$/i.test(event.key))) {
|
|
15152
15192
|
setOpen(true);
|
|
15153
15193
|
}
|
|
@@ -15488,7 +15528,7 @@ function Print$1(props) {
|
|
|
15488
15528
|
const _temp2 = function () {
|
|
15489
15529
|
if (tableMeta.server.isEnabled && tableMeta.server.loadAllIfNeeded) {
|
|
15490
15530
|
const _temp = _catch(function () {
|
|
15491
|
-
return Promise.resolve(tableMeta.server.loadAllIfNeeded(table.getState().sorting, table.getState().columnFilters
|
|
15531
|
+
return Promise.resolve(tableMeta.server.loadAllIfNeeded(table.getState().sorting, table.getState().columnFilters)).then(function () {});
|
|
15492
15532
|
}, function (error) {
|
|
15493
15533
|
const errorMessage = `${texts.table.print.error}: ${error}`;
|
|
15494
15534
|
console.error(errorMessage);
|
|
@@ -16170,6 +16210,7 @@ function TableGrid(props) {
|
|
|
16170
16210
|
}))))))), table.instance.getRowModel().rows.length ? ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Body, {
|
|
16171
16211
|
enableHorizontalArrowKeyNavigation: enableHorizontalArrowKeyNavigation,
|
|
16172
16212
|
table: table.instance,
|
|
16213
|
+
scrollToIndex: table.renderer.scrollToIndex,
|
|
16173
16214
|
style: table.renderer.style
|
|
16174
16215
|
}, table.renderer.rows), table.meta.footer.isEnabled ? /*#__PURE__*/React__default.createElement(Foot, {
|
|
16175
16216
|
table: table.instance
|