@tellescope/react-components 1.183.0 → 1.185.0

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.
Files changed (43) hide show
  1. package/lib/cjs/Forms/hooks.d.ts.map +1 -1
  2. package/lib/cjs/Forms/hooks.js +6 -5
  3. package/lib/cjs/Forms/hooks.js.map +1 -1
  4. package/lib/cjs/inputs_shared.d.ts +43 -0
  5. package/lib/cjs/inputs_shared.d.ts.map +1 -1
  6. package/lib/cjs/inputs_shared.js +433 -2
  7. package/lib/cjs/inputs_shared.js.map +1 -1
  8. package/lib/cjs/layout.d.ts.map +1 -1
  9. package/lib/cjs/layout.js +4 -2
  10. package/lib/cjs/layout.js.map +1 -1
  11. package/lib/cjs/state.d.ts +9 -2
  12. package/lib/cjs/state.d.ts.map +1 -1
  13. package/lib/cjs/state.js +117 -68
  14. package/lib/cjs/state.js.map +1 -1
  15. package/lib/cjs/table.d.ts +8 -3
  16. package/lib/cjs/table.d.ts.map +1 -1
  17. package/lib/cjs/table.js +17 -13
  18. package/lib/cjs/table.js.map +1 -1
  19. package/lib/esm/Forms/hooks.d.ts.map +1 -1
  20. package/lib/esm/Forms/hooks.js +6 -5
  21. package/lib/esm/Forms/hooks.js.map +1 -1
  22. package/lib/esm/inputs_shared.d.ts +43 -0
  23. package/lib/esm/inputs_shared.d.ts.map +1 -1
  24. package/lib/esm/inputs_shared.js +427 -3
  25. package/lib/esm/inputs_shared.js.map +1 -1
  26. package/lib/esm/layout.d.ts.map +1 -1
  27. package/lib/esm/layout.js +4 -2
  28. package/lib/esm/layout.js.map +1 -1
  29. package/lib/esm/state.d.ts +9 -2
  30. package/lib/esm/state.d.ts.map +1 -1
  31. package/lib/esm/state.js +117 -68
  32. package/lib/esm/state.js.map +1 -1
  33. package/lib/esm/table.d.ts +8 -3
  34. package/lib/esm/table.d.ts.map +1 -1
  35. package/lib/esm/table.js +17 -13
  36. package/lib/esm/table.js.map +1 -1
  37. package/lib/tsconfig.tsbuildinfo +1 -1
  38. package/package.json +9 -9
  39. package/src/Forms/hooks.tsx +3 -2
  40. package/src/inputs_shared.tsx +444 -5
  41. package/src/layout.tsx +10 -1
  42. package/src/state.tsx +89 -51
  43. package/src/table.tsx +32 -5
package/lib/cjs/state.js CHANGED
@@ -69,17 +69,6 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
69
69
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
70
70
  }
71
71
  };
72
- var __rest = (this && this.__rest) || function (s, e) {
73
- var t = {};
74
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
75
- t[p] = s[p];
76
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
77
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
78
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
79
- t[p[i]] = s[p[i]];
80
- }
81
- return t;
82
- };
83
72
  var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
84
73
  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
85
74
  if (ar || !(i in from)) {
@@ -140,7 +129,7 @@ var WithFetchContext = function (_a) {
140
129
  };
141
130
  exports.WithFetchContext = WithFetchContext;
142
131
  // doesn't throw
143
- var toLoadedData = function (p) { return __awaiter(void 0, void 0, void 0, function () {
132
+ var toLoadedData = function (p, o) { return __awaiter(void 0, void 0, void 0, function () {
144
133
  var err_1;
145
134
  var _a;
146
135
  return __generator(this, function (_b) {
@@ -152,6 +141,9 @@ var toLoadedData = function (p) { return __awaiter(void 0, void 0, void 0, funct
152
141
  case 1: return [2 /*return*/, (_a.value = _b.sent(), _a)];
153
142
  case 2:
154
143
  err_1 = _b.sent();
144
+ if (o === null || o === void 0 ? void 0 : o.valueOnError) {
145
+ return [2 /*return*/, { status: types_utilities_1.LoadingStatus.Loaded, value: o.valueOnError }];
146
+ }
155
147
  return [2 /*return*/, { status: types_utilities_1.LoadingStatus.Error, value: err_1 }];
156
148
  case 3: return [2 /*return*/];
157
149
  }
@@ -889,30 +881,35 @@ var useListStateHook = function (modelName, state, session, slice, apiCalls, opt
889
881
  }, [state]);
890
882
  var cantRead = (session.type === 'user' && !((_d = (_c = (_b = session === null || session === void 0 ? void 0 : session.userInfo) === null || _b === void 0 ? void 0 : _b.access) === null || _c === void 0 ? void 0 : _c[modelName]) === null || _d === void 0 ? void 0 : _d.read));
891
883
  var load = (0, react_1.useCallback)(function (force, loadOptions) {
892
- var _a, _b, _c;
884
+ var _a, _b, _c, _d;
893
885
  if (cantRead)
894
886
  return;
895
887
  var _loadFilter = (_a = loadOptions === null || loadOptions === void 0 ? void 0 : loadOptions.loadFilter) !== null && _a !== void 0 ? _a : options === null || options === void 0 ? void 0 : options.loadFilter;
896
888
  var loadFilter = (_loadFilter && (0, utilities_1.object_is_empty)(_loadFilter)) ? undefined : _loadFilter;
897
889
  var sort = (_b = loadOptions === null || loadOptions === void 0 ? void 0 : loadOptions.sort) !== null && _b !== void 0 ? _b : options === null || options === void 0 ? void 0 : options.sort;
898
890
  var sortBy = (_c = loadOptions === null || loadOptions === void 0 ? void 0 : loadOptions.sortBy) !== null && _c !== void 0 ? _c : options === null || options === void 0 ? void 0 : options.sortBy;
891
+ var _mdbFilter = (loadOptions === null || loadOptions === void 0 ? void 0 : loadOptions.mdbFilter) || (options === null || options === void 0 ? void 0 : options.mdbFilter);
892
+ var mdbFilter = (_mdbFilter && ((_d = _mdbFilter === null || _mdbFilter === void 0 ? void 0 : _mdbFilter.$and) === null || _d === void 0 ? void 0 : _d.length)) ? _mdbFilter : undefined;
899
893
  if (!loadQuery)
900
894
  return;
901
895
  if ((options === null || options === void 0 ? void 0 : options.dontFetch) && !force)
902
896
  return;
903
- var fetchKey = (loadFilter || sort || sortBy) ? JSON.stringify(__assign(__assign({}, loadFilter), { sort: sort, sortBy: sortBy })) + modelName : modelName;
897
+ var fetchKey = (mdbFilter || loadFilter || sort || sortBy) ? JSON.stringify(__assign(__assign(__assign({}, mdbFilter), loadFilter), { sort: sort, sortBy: sortBy })) + modelName : modelName;
904
898
  if (didFetch(fetchKey, force, options === null || options === void 0 ? void 0 : options.refetchInMS))
905
899
  return;
906
900
  setFetched(fetchKey, true);
907
901
  var limit = (options === null || options === void 0 ? void 0 : options.limit) || DEFAULT_FETCH_LIMIT;
908
- (0, exports.toLoadedData)(function () { return loadQuery({ filter: loadFilter, limit: limit, sort: sort, sortBy: sortBy }); }).then(function (es) {
902
+ (0, exports.toLoadedData)(function () { return loadQuery({ mdbFilter: mdbFilter, filter: loadFilter, limit: limit, sort: sort, sortBy: sortBy }); }, { valueOnError: mdbFilter ? [] : undefined }).then(function (es) {
909
903
  var _a, _b;
910
904
  if (es.status === types_utilities_1.LoadingStatus.Loaded) {
911
- if (es.value.length < limit && !loadFilter) {
905
+ if (es.value.length < limit && !loadFilter && !mdbFilter) {
912
906
  setFetched('id' + modelName + DONE_LOADING_TOKEN, true);
913
907
  }
908
+ else if (es.value.length < limit) {
909
+ setFetched(fetchKey + DONE_LOADING_TOKEN, true);
910
+ }
914
911
  if (es.value.length) { // don't store oldest record from a filter, may skip some pages
915
- setLastId(modelName + (loadFilter ? JSON.stringify(loadFilter) : ''), (_b = (_a = es.value[es.value.length - 1]) === null || _a === void 0 ? void 0 : _a.id) === null || _b === void 0 ? void 0 : _b.toString());
912
+ setLastId(fetchKey, (_b = (_a = es.value[es.value.length - 1]) === null || _a === void 0 ? void 0 : _a.id) === null || _b === void 0 ? void 0 : _b.toString());
916
913
  var createdAt = es.value[es.value.length - 1].createdAt;
917
914
  if (typeof createdAt === 'string' || createdAt instanceof Date) {
918
915
  setLastDate(modelName, new Date(createdAt));
@@ -935,70 +932,75 @@ var useListStateHook = function (modelName, state, session, slice, apiCalls, opt
935
932
  var getOldestLoadedDate = function () { return getLastDate(modelName); };
936
933
  var reload = (0, react_1.useCallback)(function (options) { return load(true, __assign(__assign({}, options), { reloading: true })); }, [load]);
937
934
  (0, react_1.useEffect)(function () {
935
+ if (options === null || options === void 0 ? void 0 : options.unbounceMS) {
936
+ var i_1 = setTimeout(function () { return load(false); }, options.unbounceMS);
937
+ return function () { clearTimeout(i_1); };
938
+ }
938
939
  load(false);
939
- }, [load]);
940
- (0, react_1.useEffect)(function () {
941
- var _a;
942
- if (didFetch(modelName + 'socket'))
943
- return;
944
- setFetched(modelName + 'socket', true, false);
945
- session.handle_events((_a = {},
946
- // create, update, and delete must go in this order
947
- // e.g. to ensure delete events are processed last, so deleted records don't appear as created
948
- _a["created-".concat(modelName)] = addLocalElements,
949
- _a["updated-".concat(modelName)] = function (es) {
950
- var idToUpdates = {};
951
- for (var _i = 0, es_1 = es; _i < es_1.length; _i++) {
952
- var _a = es_1[_i];
953
- var id = _a.id, e = __rest(_a, ["id"]);
954
- idToUpdates[id] = e;
955
- }
956
- updateLocalElements(idToUpdates);
957
- },
958
- _a["deleted-".concat(modelName)] = removeLocalElements,
959
- _a));
960
- return function () {
961
- setFetched(modelName + 'socket', false, false);
962
- session.removeListenersForEvent("created-".concat(modelName));
963
- session.removeListenersForEvent("updated-".concat(modelName));
964
- session.removeListenersForEvent("deleted-".concat(modelName));
965
- };
966
- }, [session, addLocalElement, updateLocalElements, removeLocalElements, modelName, didFetch]);
940
+ }, [load, options === null || options === void 0 ? void 0 : options.unbounceMS]);
967
941
  var doneLoading = (0, react_1.useCallback)(function (key) {
942
+ var _a;
968
943
  if (key === void 0) { key = "id"; }
969
- return (didFetch(key + modelName + DONE_LOADING_TOKEN));
970
- }, [didFetch, modelName]);
944
+ var unfileteredCase = didFetch(key + modelName + DONE_LOADING_TOKEN);
945
+ if (unfileteredCase)
946
+ return true;
947
+ var sort = options === null || options === void 0 ? void 0 : options.sort;
948
+ var sortBy = options === null || options === void 0 ? void 0 : options.sortBy;
949
+ var _filter = options === null || options === void 0 ? void 0 : options.loadFilter;
950
+ var filter = (_filter && (0, utilities_1.object_is_empty)(_filter)) ? undefined : _filter;
951
+ var _mdbFilter = options === null || options === void 0 ? void 0 : options.mdbFilter;
952
+ var mdbFilter = (_mdbFilter && ((_a = _mdbFilter === null || _mdbFilter === void 0 ? void 0 : _mdbFilter.$and) === null || _a === void 0 ? void 0 : _a.length)) ? _mdbFilter : undefined;
953
+ var filterKey = ((mdbFilter || filter || sort || sortBy)
954
+ ? JSON.stringify(__assign(__assign(__assign({}, mdbFilter), filter), { sort: sort, sortBy: sortBy })) + modelName
955
+ : modelName);
956
+ if (didFetch(filterKey + DONE_LOADING_TOKEN))
957
+ return true;
958
+ return false;
959
+ }, [didFetch, modelName, options === null || options === void 0 ? void 0 : options.loadFilter, options === null || options === void 0 ? void 0 : options.mdbFilter, options === null || options === void 0 ? void 0 : options.sort, options === null || options === void 0 ? void 0 : options.sortBy]);
971
960
  var loadMore = (0, react_1.useCallback)(function (loadOptions) { return __awaiter(void 0, void 0, void 0, function () {
972
- var filter, lastId, key, limit;
973
- var _a, _b, _c, _d;
974
- return __generator(this, function (_e) {
975
- filter = (_a = loadOptions === null || loadOptions === void 0 ? void 0 : loadOptions.filter) !== null && _a !== void 0 ? _a : options === null || options === void 0 ? void 0 : options.loadFilter;
976
- lastId = getLastId(modelName + (filter ? JSON.stringify(filter) : ""));
961
+ var sort, sortBy, _filter, filter, _mdbFilter, mdbFilter, mdbFilterIsActive, filterKey, lastId, key, limit;
962
+ var _a, _b, _c, _d, _e, _f;
963
+ return __generator(this, function (_g) {
964
+ sort = options === null || options === void 0 ? void 0 : options.sort;
965
+ sortBy = options === null || options === void 0 ? void 0 : options.sortBy;
966
+ _filter = (_a = loadOptions === null || loadOptions === void 0 ? void 0 : loadOptions.filter) !== null && _a !== void 0 ? _a : options === null || options === void 0 ? void 0 : options.loadFilter;
967
+ filter = (_filter && (0, utilities_1.object_is_empty)(_filter)) ? undefined : _filter;
968
+ _mdbFilter = (loadOptions === null || loadOptions === void 0 ? void 0 : loadOptions.mdbFilter) || (options === null || options === void 0 ? void 0 : options.mdbFilter);
969
+ mdbFilter = (_mdbFilter && ((_b = _mdbFilter === null || _mdbFilter === void 0 ? void 0 : _mdbFilter.$and) === null || _b === void 0 ? void 0 : _b.length)) ? _mdbFilter : undefined;
970
+ mdbFilterIsActive = (mdbFilter && ((_c = mdbFilter === null || mdbFilter === void 0 ? void 0 : mdbFilter.$and) === null || _c === void 0 ? void 0 : _c.length));
971
+ filterKey = ((mdbFilter || filter || sort || sortBy)
972
+ ? JSON.stringify(__assign(__assign(__assign({}, mdbFilter), filter), { sort: sort, sortBy: sortBy })) + modelName
973
+ : modelName);
974
+ lastId = getLastId(filterKey);
977
975
  if (!lastId)
978
976
  return [2 /*return*/];
979
977
  if (!loadQuery)
980
978
  return [2 /*return*/];
981
- if (didFetch(modelName + 'lastId' + lastId))
979
+ if (didFetch(filterKey + 'lastId' + lastId))
982
980
  return [2 /*return*/];
983
- setFetched(modelName + 'lastId' + lastId, true);
984
- key = (_b = loadOptions === null || loadOptions === void 0 ? void 0 : loadOptions.key) !== null && _b !== void 0 ? _b : 'id';
981
+ setFetched(filterKey + 'lastId' + lastId, true);
982
+ key = (_d = loadOptions === null || loadOptions === void 0 ? void 0 : loadOptions.key) !== null && _d !== void 0 ? _d : 'id';
985
983
  if (key !== 'id')
986
984
  console.warn("Unrecognized key provided");
987
- limit = (_d = (_c = loadOptions === null || loadOptions === void 0 ? void 0 : loadOptions.limit) !== null && _c !== void 0 ? _c : options === null || options === void 0 ? void 0 : options.limit) !== null && _d !== void 0 ? _d : DEFAULT_FETCH_LIMIT;
985
+ limit = (_f = (_e = loadOptions === null || loadOptions === void 0 ? void 0 : loadOptions.limit) !== null && _e !== void 0 ? _e : options === null || options === void 0 ? void 0 : options.limit) !== null && _f !== void 0 ? _f : DEFAULT_FETCH_LIMIT;
988
986
  return [2 /*return*/, (0, exports.toLoadedData)(function () { return loadQuery({
989
987
  // lastId: !options?.filter ? oldestRecord?.id?.toString() : undefined, // don't provide a lastId when there's a filter, filter could include that on its own
990
988
  lastId: lastId,
991
989
  limit: limit,
992
990
  filter: filter,
991
+ mdbFilter: mdbFilterIsActive ? mdbFilter : undefined,
993
992
  }); }).then(function (es) {
994
993
  var _a, _b;
995
994
  if (es.status === types_utilities_1.LoadingStatus.Loaded) {
996
- if (es.value.length < limit) {
995
+ if (es.value.length < limit && !mdbFilter && (!filter || (0, utilities_1.object_is_empty)(filter))) {
997
996
  setFetched(key + modelName + DONE_LOADING_TOKEN, true);
998
997
  }
998
+ else if (es.value.length < limit) {
999
+ setFetched(filterKey + DONE_LOADING_TOKEN, true);
1000
+ }
999
1001
  var newLastId = (_b = (_a = es.value[es.value.length - 1]) === null || _a === void 0 ? void 0 : _a.id) === null || _b === void 0 ? void 0 : _b.toString();
1000
1002
  if (newLastId) {
1001
- setLastId(modelName + (filter ? JSON.stringify(filter) : ""), newLastId);
1003
+ setLastId(filterKey, newLastId);
1002
1004
  }
1003
1005
  dispatch(slice.actions.addSome({ value: es.value, options: { replaceIfMatch: true, addTo: 'end' } }));
1004
1006
  }
@@ -1007,7 +1009,7 @@ var useListStateHook = function (modelName, state, session, slice, apiCalls, opt
1007
1009
  }
1008
1010
  })];
1009
1011
  });
1010
- }); }, [getLastId, modelName, loadQuery, didFetch, setFetched]);
1012
+ }); }, [getLastId, modelName, loadQuery, didFetch, setFetched, options === null || options === void 0 ? void 0 : options.mdbFilter, options === null || options === void 0 ? void 0 : options.loadFilter, options === null || options === void 0 ? void 0 : options.sort, options === null || options === void 0 ? void 0 : options.sortBy, options === null || options === void 0 ? void 0 : options.limit, dispatch]);
1011
1013
  var loadRecentlyCreated = react_1.default.useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
1012
1014
  var from, created, err_2;
1013
1015
  return __generator(this, function (_a) {
@@ -2410,15 +2412,62 @@ var useCalendarEventsForUser = function (options) {
2410
2412
  });
2411
2413
  }); }, [options, session]);
2412
2414
  var _a = (0, exports.useCalendarEvents)(), eventsLoading = _a[0], _b = _a[1], addLocalElements = _b.addLocalElements, filtered = _b.filtered;
2413
- var loadEvents = (0, react_1.useCallback)(function (options) {
2414
- var key = JSON.stringify(options !== null && options !== void 0 ? options : {});
2415
- if (loadedRef.current[key])
2416
- return;
2417
- loadedRef.current[key] = Date.now();
2418
- fetchEvents(options)
2419
- .then(function (es) { return addLocalElements(es, { replaceIfMatch: true }); })
2420
- .catch(console.error);
2421
- }, [session, loadedRef, fetchEvents, addLocalElements]);
2415
+ var loadEvents = (0, react_1.useCallback)(function (options) { return __awaiter(void 0, void 0, void 0, function () {
2416
+ var key, load, i, from, _loop_1, state_1;
2417
+ return __generator(this, function (_a) {
2418
+ switch (_a.label) {
2419
+ case 0:
2420
+ key = JSON.stringify(options !== null && options !== void 0 ? options : {});
2421
+ if (loadedRef.current[key])
2422
+ return [2 /*return*/];
2423
+ loadedRef.current[key] = Date.now();
2424
+ load = function (from) { return (console.log('Loading events from', from, 'to', options === null || options === void 0 ? void 0 : options.to),
2425
+ fetchEvents(__assign(__assign({}, options), { from: from }))
2426
+ .then(function (es) { return addLocalElements(es, { replaceIfMatch: true }); })
2427
+ .catch(console.error)); };
2428
+ i = 0;
2429
+ from = options === null || options === void 0 ? void 0 : options.from;
2430
+ _loop_1 = function () {
2431
+ var loaded, to;
2432
+ return __generator(this, function (_b) {
2433
+ switch (_b.label) {
2434
+ case 0:
2435
+ i++;
2436
+ return [4 /*yield*/, load(from)];
2437
+ case 1:
2438
+ loaded = _b.sent();
2439
+ to = options === null || options === void 0 ? void 0 : options.to;
2440
+ if (!to) {
2441
+ return [2 /*return*/, "break"];
2442
+ }
2443
+ if (!loaded) {
2444
+ return [2 /*return*/, "break"];
2445
+ }
2446
+ if (loaded.length === 0) {
2447
+ return [2 /*return*/, "break"];
2448
+ }
2449
+ if (loaded.find(function (e) { return new Date(e.startTimeInMS).getTime() > to.getTime(); })) {
2450
+ return [2 /*return*/, "break"];
2451
+ }
2452
+ // else continue to loop (up to 10 times) until we find events after the to date
2453
+ from = new Date(Math.max.apply(Math, loaded.map(function (e) { return e.startTimeInMS; })));
2454
+ return [2 /*return*/];
2455
+ }
2456
+ });
2457
+ };
2458
+ _a.label = 1;
2459
+ case 1:
2460
+ if (!(i < 10)) return [3 /*break*/, 3];
2461
+ return [5 /*yield**/, _loop_1()];
2462
+ case 2:
2463
+ state_1 = _a.sent();
2464
+ if (state_1 === "break")
2465
+ return [3 /*break*/, 3];
2466
+ return [3 /*break*/, 1];
2467
+ case 3: return [2 /*return*/];
2468
+ }
2469
+ });
2470
+ }); }, [session, loadedRef, fetchEvents, addLocalElements]);
2422
2471
  return [eventsLoading, { loadEvents: loadEvents, filtered: filtered }];
2423
2472
  };
2424
2473
  exports.useCalendarEventsForUser = useCalendarEventsForUser;