@economic/taco 2.47.0-server-1 → 2.47.0-server-2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|