@economic/taco 2.47.0-server-1 → 2.47.0-server-2
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/packages/taco/src/charts/components/Donut/Legend.js +1 -0
- package/dist/esm/packages/taco/src/charts/components/Donut/Legend.js.map +1 -1
- package/dist/esm/packages/taco/src/charts/components/Legend.js +1 -0
- package/dist/esm/packages/taco/src/charts/components/Legend.js.map +1 -1
- package/dist/esm/packages/taco/src/index.js +1 -0
- package/dist/esm/packages/taco/src/index.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/useTableDataLoader2.js +249 -0
- package/dist/esm/packages/taco/src/primitives/Table/useTableDataLoader2.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/primitives/Table/useTableDataLoader2.d.ts +0 -1
- package/dist/taco.cjs.development.js +244 -0
- 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/package.json +1 -1
@@ -22098,6 +22098,249 @@ Navigation2.Link = Link$3;
|
|
22098
22098
|
Navigation2.Section = Section;
|
22099
22099
|
Navigation2.Content = Content$a;
|
22100
22100
|
|
22101
|
+
const DATASET_SIZE_MULTIPLIER = 15;
|
22102
|
+
function useTableDataLoader2(fetchPage, fetchAll, options = {
|
22103
|
+
pageSize: DEFAULT_PAGE_SIZE
|
22104
|
+
}) {
|
22105
|
+
const loadPage = function (pageIndex, sorting, filters, search, hiddenColumns, reset = false) {
|
22106
|
+
try {
|
22107
|
+
if (_hasFetchedAll.current) {
|
22108
|
+
return Promise.resolve();
|
22109
|
+
}
|
22110
|
+
// if page is already loading, abort, otherwise mark it as loading
|
22111
|
+
if (_pendingPageRequests.current[pageIndex]) {
|
22112
|
+
return Promise.resolve();
|
22113
|
+
} else {
|
22114
|
+
_pendingPageRequests.current[pageIndex] = true;
|
22115
|
+
}
|
22116
|
+
// if the page is already loaded and has actual rows, abort
|
22117
|
+
if (data.pages.includes(pageIndex)) {
|
22118
|
+
const position = data.pages.indexOf(pageIndex);
|
22119
|
+
if (data.rows[position * pageSize] !== undefined) {
|
22120
|
+
return Promise.resolve();
|
22121
|
+
}
|
22122
|
+
}
|
22123
|
+
// set the sorting so we can track if it changed between loads
|
22124
|
+
_lastUsedSorting.current = sorting;
|
22125
|
+
// set the filters so we can track if it changed between loads
|
22126
|
+
_lastUsedFilters.current = filters;
|
22127
|
+
const direction = getDirection2(pageIndex, _lastFetchedPage.current);
|
22128
|
+
const _temp2 = _finallyRethrows(function () {
|
22129
|
+
return _catch(function () {
|
22130
|
+
return Promise.resolve(fetchPage(pageIndex, pageSize, sorting, filters, search, hiddenColumns)).then(function (response) {
|
22131
|
+
length.current = response.length;
|
22132
|
+
// update state, here we do some "magic" to support "load in place"
|
22133
|
+
setData(currentData => {
|
22134
|
+
const nextPages = getPages(pageIndex, _lastFetchedPage.current, reset ? [] : currentData.pages, direction);
|
22135
|
+
let nextRows = currentData.rows;
|
22136
|
+
if (reset || !direction) {
|
22137
|
+
const index = nextPages.indexOf(pageIndex);
|
22138
|
+
const startIndex = (index > -1 ? index : 0) * pageSize;
|
22139
|
+
if (reset) {
|
22140
|
+
nextRows = [].concat(response.data);
|
22141
|
+
} else if (startIndex > 0 || pageIndex === 0) {
|
22142
|
+
nextRows = Array(startIndex).fill(undefined).concat(response.data);
|
22143
|
+
} else if (startIndex === 0) {
|
22144
|
+
nextRows = response.data.concat(currentData.rows.slice(pageSize));
|
22145
|
+
}
|
22146
|
+
} else if (direction === 'forward') {
|
22147
|
+
// if the new data will exceed the dataset size, then chop off the start or end
|
22148
|
+
// this keeps the stored dataset to our preferred size
|
22149
|
+
if (currentData.rows.length >= DATASET_SIZE) {
|
22150
|
+
nextRows = currentData.rows.slice(DEFAULT_PAGE_SIZE).concat(response.data);
|
22151
|
+
} else {
|
22152
|
+
nextRows = currentData.rows.concat(response.data);
|
22153
|
+
}
|
22154
|
+
} else if (direction === 'backward') {
|
22155
|
+
if (currentData.rows.length >= DATASET_SIZE) {
|
22156
|
+
nextRows = response.data.concat(currentData.rows.slice(0, -1 * pageSize));
|
22157
|
+
} else {
|
22158
|
+
nextRows = currentData.rows.concat(response.data);
|
22159
|
+
}
|
22160
|
+
}
|
22161
|
+
return {
|
22162
|
+
rows: nextRows,
|
22163
|
+
pages: nextPages
|
22164
|
+
};
|
22165
|
+
});
|
22166
|
+
});
|
22167
|
+
}, function () {});
|
22168
|
+
}, function (_wasThrown2, _result2) {
|
22169
|
+
_hasFetchedAll.current = false;
|
22170
|
+
// reset pending requests
|
22171
|
+
delete _pendingPageRequests.current[pageIndex];
|
22172
|
+
// update the last loaded page
|
22173
|
+
_lastFetchedPage.current = {
|
22174
|
+
index: pageIndex,
|
22175
|
+
direction
|
22176
|
+
};
|
22177
|
+
if (_wasThrown2) throw _result2;
|
22178
|
+
return _result2;
|
22179
|
+
});
|
22180
|
+
return Promise.resolve(_temp2 && _temp2.then ? _temp2.then(function () {}) : void 0);
|
22181
|
+
} catch (e) {
|
22182
|
+
return Promise.reject(e);
|
22183
|
+
}
|
22184
|
+
};
|
22185
|
+
const {
|
22186
|
+
pageSize
|
22187
|
+
} = options;
|
22188
|
+
const DATASET_SIZE = DATASET_SIZE_MULTIPLIER * pageSize;
|
22189
|
+
// track the data length, we don't know it until the first request
|
22190
|
+
const length = React__default.useRef(0);
|
22191
|
+
// data will be filled after the first request
|
22192
|
+
const [data, setData] = React__default.useState({
|
22193
|
+
rows: [],
|
22194
|
+
pages: []
|
22195
|
+
});
|
22196
|
+
// track which pages have been loaded to dedupe requests
|
22197
|
+
const _pendingPageRequests = React__default.useRef({});
|
22198
|
+
const _lastUsedSorting = React__default.useRef([]);
|
22199
|
+
const _lastUsedFilters = React__default.useRef([]);
|
22200
|
+
const _lastUsedSearch = React__default.useRef();
|
22201
|
+
const _lastUsedHiddenColumns = React__default.useRef([]);
|
22202
|
+
const _lastFetchedPage = React__default.useRef({
|
22203
|
+
index: undefined,
|
22204
|
+
direction: undefined
|
22205
|
+
});
|
22206
|
+
const _hasFetchedAll = React__default.useRef(false);
|
22207
|
+
const loadAll = function (sorting, filters, search, hiddenColumns) {
|
22208
|
+
try {
|
22209
|
+
_hasFetchedAll.current = true;
|
22210
|
+
// set the sorting so we can track if it changed between loads
|
22211
|
+
_lastUsedSorting.current = sorting;
|
22212
|
+
// set the filters so we can track if it changed between loads
|
22213
|
+
_lastUsedFilters.current = filters;
|
22214
|
+
const _temp = _finallyRethrows(function () {
|
22215
|
+
return _catch(function () {
|
22216
|
+
return Promise.resolve(fetchAll(sorting, filters, search, hiddenColumns)).then(function (response) {
|
22217
|
+
length.current = response.length;
|
22218
|
+
setData({
|
22219
|
+
rows: response.data,
|
22220
|
+
pages: Array.from(Array(response.length / pageSize).keys())
|
22221
|
+
});
|
22222
|
+
});
|
22223
|
+
}, function () {});
|
22224
|
+
}, function (_wasThrown, _result) {
|
22225
|
+
// reset pending requests
|
22226
|
+
_pendingPageRequests.current = {};
|
22227
|
+
if (_wasThrown) throw _result;
|
22228
|
+
return _result;
|
22229
|
+
});
|
22230
|
+
return Promise.resolve(_temp && _temp.then ? _temp.then(function () {}) : void 0);
|
22231
|
+
} catch (e) {
|
22232
|
+
return Promise.reject(e);
|
22233
|
+
}
|
22234
|
+
};
|
22235
|
+
const invalidate = function () {
|
22236
|
+
try {
|
22237
|
+
// reset stuff
|
22238
|
+
_pendingPageRequests.current = {};
|
22239
|
+
_hasFetchedAll.current = false;
|
22240
|
+
// load the last page that we scrolled to
|
22241
|
+
return loadPage(getCurrentPage(data.pages, _lastFetchedPage.current), _lastUsedSorting.current, _lastUsedFilters.current, _lastUsedSearch.current, _lastUsedHiddenColumns.current, true);
|
22242
|
+
} catch (e) {
|
22243
|
+
return Promise.reject(e);
|
22244
|
+
}
|
22245
|
+
};
|
22246
|
+
// search works client side - it fetches all then works client side - so these handlers are a little "weird"
|
22247
|
+
// if a search is currently "active", we need to re load all because
|
22248
|
+
const handleSort = function (sorting) {
|
22249
|
+
try {
|
22250
|
+
_lastUsedSorting.current = sorting;
|
22251
|
+
// reset stuff
|
22252
|
+
_pendingPageRequests.current = {};
|
22253
|
+
_hasFetchedAll.current = false;
|
22254
|
+
return loadPage(getCurrentPage(data.pages, _lastFetchedPage.current), sorting, _lastUsedFilters.current, _lastUsedSearch.current, _lastUsedHiddenColumns.current, true);
|
22255
|
+
} catch (e) {
|
22256
|
+
return Promise.reject(e);
|
22257
|
+
}
|
22258
|
+
};
|
22259
|
+
const handleFilter = function (filters, hiddenColumns) {
|
22260
|
+
try {
|
22261
|
+
_lastUsedFilters.current = filters;
|
22262
|
+
_lastUsedHiddenColumns.current = hiddenColumns;
|
22263
|
+
// reset stuff
|
22264
|
+
_pendingPageRequests.current = {};
|
22265
|
+
_hasFetchedAll.current = false;
|
22266
|
+
return loadPage(getCurrentPage(data.pages, _lastFetchedPage.current), _lastUsedSorting.current, filters, _lastUsedSearch.current, hiddenColumns, true);
|
22267
|
+
} catch (e) {
|
22268
|
+
return Promise.reject(e);
|
22269
|
+
}
|
22270
|
+
};
|
22271
|
+
const handleSearch = function (search, hiddenColumns) {
|
22272
|
+
try {
|
22273
|
+
_lastUsedSearch.current = search;
|
22274
|
+
_lastUsedHiddenColumns.current = hiddenColumns;
|
22275
|
+
// reset stuff
|
22276
|
+
_pendingPageRequests.current = {};
|
22277
|
+
_hasFetchedAll.current = false;
|
22278
|
+
return loadPage(getCurrentPage(data.pages, _lastFetchedPage.current), _lastUsedSorting.current, _lastUsedFilters.current, search, hiddenColumns, true);
|
22279
|
+
} catch (e) {
|
22280
|
+
return Promise.reject(e);
|
22281
|
+
}
|
22282
|
+
};
|
22283
|
+
return [{
|
22284
|
+
data: data.rows,
|
22285
|
+
pages: data.pages,
|
22286
|
+
length: length.current,
|
22287
|
+
loadAll,
|
22288
|
+
loadPage,
|
22289
|
+
onChangeFilter: handleFilter,
|
22290
|
+
onChangeSearch: handleSearch,
|
22291
|
+
onChangeSort: handleSort,
|
22292
|
+
pageSize,
|
22293
|
+
_experimentalDataLoader2: true
|
22294
|
+
}, invalidate];
|
22295
|
+
}
|
22296
|
+
function getCurrentPage(currentPages, lastFetchedPage) {
|
22297
|
+
if (currentPages.length <= 2) {
|
22298
|
+
var _currentPages$;
|
22299
|
+
return (_currentPages$ = currentPages[0]) !== null && _currentPages$ !== void 0 ? _currentPages$ : 0;
|
22300
|
+
}
|
22301
|
+
const middle = Math.floor(DATASET_SIZE_MULTIPLIER / 2);
|
22302
|
+
if (lastFetchedPage.index) {
|
22303
|
+
if (!lastFetchedPage.direction) {
|
22304
|
+
return lastFetchedPage.index;
|
22305
|
+
}
|
22306
|
+
return lastFetchedPage.direction === 'forward' ? lastFetchedPage.index + middle : lastFetchedPage.index - middle;
|
22307
|
+
}
|
22308
|
+
return 0;
|
22309
|
+
}
|
22310
|
+
function getDirection2(pageIndex, lastUsedPage) {
|
22311
|
+
if (lastUsedPage.index === undefined) {
|
22312
|
+
return undefined;
|
22313
|
+
}
|
22314
|
+
if (pageIndex > lastUsedPage.index) {
|
22315
|
+
if (lastUsedPage.index + 1 === pageIndex || lastUsedPage.index + DATASET_SIZE_MULTIPLIER === pageIndex) {
|
22316
|
+
return 'forward';
|
22317
|
+
}
|
22318
|
+
} else if (pageIndex < lastUsedPage.index) {
|
22319
|
+
if (lastUsedPage.index - 1 === pageIndex || lastUsedPage.index - DATASET_SIZE_MULTIPLIER === pageIndex) {
|
22320
|
+
return 'backward';
|
22321
|
+
}
|
22322
|
+
}
|
22323
|
+
return undefined;
|
22324
|
+
}
|
22325
|
+
function getPages(pageIndex, lastUsedPage, currentPages, direction) {
|
22326
|
+
if (currentPages.length && (pageIndex === lastUsedPage.index || currentPages.includes(pageIndex))) {
|
22327
|
+
return currentPages;
|
22328
|
+
}
|
22329
|
+
if (direction === 'forward') {
|
22330
|
+
const nextPages = currentPages.length === DATASET_SIZE_MULTIPLIER ? currentPages.slice(1) : currentPages;
|
22331
|
+
return nextPages.concat(pageIndex);
|
22332
|
+
}
|
22333
|
+
if (direction === 'backward') {
|
22334
|
+
const nextPages = currentPages.length === DATASET_SIZE_MULTIPLIER ? currentPages.slice(0, -1) : currentPages;
|
22335
|
+
return [pageIndex].concat(nextPages);
|
22336
|
+
}
|
22337
|
+
if (pageIndex === 0) {
|
22338
|
+
return [0];
|
22339
|
+
}
|
22340
|
+
// don't go forward, the current page will trigger load of the next page
|
22341
|
+
return [pageIndex - 1, pageIndex];
|
22342
|
+
}
|
22343
|
+
|
22101
22344
|
const useBoundaryOverflowDetection = (ref, dependencies = []) => {
|
22102
22345
|
const [boundaryIndex, setBoundaryIndex] = React__default.useState();
|
22103
22346
|
const dimensions = useBoundingClientRectListener(ref, dependencies);
|
@@ -22237,6 +22480,7 @@ exports.useOnClickOutside = useOnClickOutside;
|
|
22237
22480
|
exports.usePagination = usePagination;
|
22238
22481
|
exports.useRadioGroup = useRadioGroup;
|
22239
22482
|
exports.useTableDataLoader = useTableDataLoader;
|
22483
|
+
exports.useTableDataLoader2 = useTableDataLoader2;
|
22240
22484
|
exports.useTableRowCreation = useTableRowCreation;
|
22241
22485
|
exports.useToast = useToast;
|
22242
22486
|
//# sourceMappingURL=taco.cjs.development.js.map
|