@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/esm/state.js CHANGED
@@ -45,17 +45,6 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
45
45
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
46
  }
47
47
  };
48
- var __rest = (this && this.__rest) || function (s, e) {
49
- var t = {};
50
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
51
- t[p] = s[p];
52
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
53
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
54
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
55
- t[p[i]] = s[p[i]];
56
- }
57
- return t;
58
- };
59
48
  var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
60
49
  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
61
50
  if (ar || !(i in from)) {
@@ -110,7 +99,7 @@ export var WithFetchContext = function (_a) {
110
99
  } }, { children: children })));
111
100
  };
112
101
  // doesn't throw
113
- export var toLoadedData = function (p) { return __awaiter(void 0, void 0, void 0, function () {
102
+ export var toLoadedData = function (p, o) { return __awaiter(void 0, void 0, void 0, function () {
114
103
  var err_1;
115
104
  var _a;
116
105
  return __generator(this, function (_b) {
@@ -122,6 +111,9 @@ export var toLoadedData = function (p) { return __awaiter(void 0, void 0, void 0
122
111
  case 1: return [2 /*return*/, (_a.value = _b.sent(), _a)];
123
112
  case 2:
124
113
  err_1 = _b.sent();
114
+ if (o === null || o === void 0 ? void 0 : o.valueOnError) {
115
+ return [2 /*return*/, { status: LoadingStatus.Loaded, value: o.valueOnError }];
116
+ }
125
117
  return [2 /*return*/, { status: LoadingStatus.Error, value: err_1 }];
126
118
  case 3: return [2 /*return*/];
127
119
  }
@@ -845,30 +837,35 @@ export var useListStateHook = function (modelName, state, session, slice, apiCal
845
837
  }, [state]);
846
838
  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));
847
839
  var load = useCallback(function (force, loadOptions) {
848
- var _a, _b, _c;
840
+ var _a, _b, _c, _d;
849
841
  if (cantRead)
850
842
  return;
851
843
  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;
852
844
  var loadFilter = (_loadFilter && object_is_empty(_loadFilter)) ? undefined : _loadFilter;
853
845
  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;
854
846
  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;
847
+ var _mdbFilter = (loadOptions === null || loadOptions === void 0 ? void 0 : loadOptions.mdbFilter) || (options === null || options === void 0 ? void 0 : options.mdbFilter);
848
+ var mdbFilter = (_mdbFilter && ((_d = _mdbFilter === null || _mdbFilter === void 0 ? void 0 : _mdbFilter.$and) === null || _d === void 0 ? void 0 : _d.length)) ? _mdbFilter : undefined;
855
849
  if (!loadQuery)
856
850
  return;
857
851
  if ((options === null || options === void 0 ? void 0 : options.dontFetch) && !force)
858
852
  return;
859
- var fetchKey = (loadFilter || sort || sortBy) ? JSON.stringify(__assign(__assign({}, loadFilter), { sort: sort, sortBy: sortBy })) + modelName : modelName;
853
+ var fetchKey = (mdbFilter || loadFilter || sort || sortBy) ? JSON.stringify(__assign(__assign(__assign({}, mdbFilter), loadFilter), { sort: sort, sortBy: sortBy })) + modelName : modelName;
860
854
  if (didFetch(fetchKey, force, options === null || options === void 0 ? void 0 : options.refetchInMS))
861
855
  return;
862
856
  setFetched(fetchKey, true);
863
857
  var limit = (options === null || options === void 0 ? void 0 : options.limit) || DEFAULT_FETCH_LIMIT;
864
- toLoadedData(function () { return loadQuery({ filter: loadFilter, limit: limit, sort: sort, sortBy: sortBy }); }).then(function (es) {
858
+ toLoadedData(function () { return loadQuery({ mdbFilter: mdbFilter, filter: loadFilter, limit: limit, sort: sort, sortBy: sortBy }); }, { valueOnError: mdbFilter ? [] : undefined }).then(function (es) {
865
859
  var _a, _b;
866
860
  if (es.status === LoadingStatus.Loaded) {
867
- if (es.value.length < limit && !loadFilter) {
861
+ if (es.value.length < limit && !loadFilter && !mdbFilter) {
868
862
  setFetched('id' + modelName + DONE_LOADING_TOKEN, true);
869
863
  }
864
+ else if (es.value.length < limit) {
865
+ setFetched(fetchKey + DONE_LOADING_TOKEN, true);
866
+ }
870
867
  if (es.value.length) { // don't store oldest record from a filter, may skip some pages
871
- 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());
868
+ 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());
872
869
  var createdAt = es.value[es.value.length - 1].createdAt;
873
870
  if (typeof createdAt === 'string' || createdAt instanceof Date) {
874
871
  setLastDate(modelName, new Date(createdAt));
@@ -891,70 +888,75 @@ export var useListStateHook = function (modelName, state, session, slice, apiCal
891
888
  var getOldestLoadedDate = function () { return getLastDate(modelName); };
892
889
  var reload = useCallback(function (options) { return load(true, __assign(__assign({}, options), { reloading: true })); }, [load]);
893
890
  useEffect(function () {
891
+ if (options === null || options === void 0 ? void 0 : options.unbounceMS) {
892
+ var i_1 = setTimeout(function () { return load(false); }, options.unbounceMS);
893
+ return function () { clearTimeout(i_1); };
894
+ }
894
895
  load(false);
895
- }, [load]);
896
- useEffect(function () {
897
- var _a;
898
- if (didFetch(modelName + 'socket'))
899
- return;
900
- setFetched(modelName + 'socket', true, false);
901
- session.handle_events((_a = {},
902
- // create, update, and delete must go in this order
903
- // e.g. to ensure delete events are processed last, so deleted records don't appear as created
904
- _a["created-".concat(modelName)] = addLocalElements,
905
- _a["updated-".concat(modelName)] = function (es) {
906
- var idToUpdates = {};
907
- for (var _i = 0, es_1 = es; _i < es_1.length; _i++) {
908
- var _a = es_1[_i];
909
- var id = _a.id, e = __rest(_a, ["id"]);
910
- idToUpdates[id] = e;
911
- }
912
- updateLocalElements(idToUpdates);
913
- },
914
- _a["deleted-".concat(modelName)] = removeLocalElements,
915
- _a));
916
- return function () {
917
- setFetched(modelName + 'socket', false, false);
918
- session.removeListenersForEvent("created-".concat(modelName));
919
- session.removeListenersForEvent("updated-".concat(modelName));
920
- session.removeListenersForEvent("deleted-".concat(modelName));
921
- };
922
- }, [session, addLocalElement, updateLocalElements, removeLocalElements, modelName, didFetch]);
896
+ }, [load, options === null || options === void 0 ? void 0 : options.unbounceMS]);
923
897
  var doneLoading = useCallback(function (key) {
898
+ var _a;
924
899
  if (key === void 0) { key = "id"; }
925
- return (didFetch(key + modelName + DONE_LOADING_TOKEN));
926
- }, [didFetch, modelName]);
900
+ var unfileteredCase = didFetch(key + modelName + DONE_LOADING_TOKEN);
901
+ if (unfileteredCase)
902
+ return true;
903
+ var sort = options === null || options === void 0 ? void 0 : options.sort;
904
+ var sortBy = options === null || options === void 0 ? void 0 : options.sortBy;
905
+ var _filter = options === null || options === void 0 ? void 0 : options.loadFilter;
906
+ var filter = (_filter && object_is_empty(_filter)) ? undefined : _filter;
907
+ var _mdbFilter = options === null || options === void 0 ? void 0 : options.mdbFilter;
908
+ var mdbFilter = (_mdbFilter && ((_a = _mdbFilter === null || _mdbFilter === void 0 ? void 0 : _mdbFilter.$and) === null || _a === void 0 ? void 0 : _a.length)) ? _mdbFilter : undefined;
909
+ var filterKey = ((mdbFilter || filter || sort || sortBy)
910
+ ? JSON.stringify(__assign(__assign(__assign({}, mdbFilter), filter), { sort: sort, sortBy: sortBy })) + modelName
911
+ : modelName);
912
+ if (didFetch(filterKey + DONE_LOADING_TOKEN))
913
+ return true;
914
+ return false;
915
+ }, [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]);
927
916
  var loadMore = useCallback(function (loadOptions) { return __awaiter(void 0, void 0, void 0, function () {
928
- var filter, lastId, key, limit;
929
- var _a, _b, _c, _d;
930
- return __generator(this, function (_e) {
931
- 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;
932
- lastId = getLastId(modelName + (filter ? JSON.stringify(filter) : ""));
917
+ var sort, sortBy, _filter, filter, _mdbFilter, mdbFilter, mdbFilterIsActive, filterKey, lastId, key, limit;
918
+ var _a, _b, _c, _d, _e, _f;
919
+ return __generator(this, function (_g) {
920
+ sort = options === null || options === void 0 ? void 0 : options.sort;
921
+ sortBy = options === null || options === void 0 ? void 0 : options.sortBy;
922
+ _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;
923
+ filter = (_filter && object_is_empty(_filter)) ? undefined : _filter;
924
+ _mdbFilter = (loadOptions === null || loadOptions === void 0 ? void 0 : loadOptions.mdbFilter) || (options === null || options === void 0 ? void 0 : options.mdbFilter);
925
+ mdbFilter = (_mdbFilter && ((_b = _mdbFilter === null || _mdbFilter === void 0 ? void 0 : _mdbFilter.$and) === null || _b === void 0 ? void 0 : _b.length)) ? _mdbFilter : undefined;
926
+ mdbFilterIsActive = (mdbFilter && ((_c = mdbFilter === null || mdbFilter === void 0 ? void 0 : mdbFilter.$and) === null || _c === void 0 ? void 0 : _c.length));
927
+ filterKey = ((mdbFilter || filter || sort || sortBy)
928
+ ? JSON.stringify(__assign(__assign(__assign({}, mdbFilter), filter), { sort: sort, sortBy: sortBy })) + modelName
929
+ : modelName);
930
+ lastId = getLastId(filterKey);
933
931
  if (!lastId)
934
932
  return [2 /*return*/];
935
933
  if (!loadQuery)
936
934
  return [2 /*return*/];
937
- if (didFetch(modelName + 'lastId' + lastId))
935
+ if (didFetch(filterKey + 'lastId' + lastId))
938
936
  return [2 /*return*/];
939
- setFetched(modelName + 'lastId' + lastId, true);
940
- key = (_b = loadOptions === null || loadOptions === void 0 ? void 0 : loadOptions.key) !== null && _b !== void 0 ? _b : 'id';
937
+ setFetched(filterKey + 'lastId' + lastId, true);
938
+ key = (_d = loadOptions === null || loadOptions === void 0 ? void 0 : loadOptions.key) !== null && _d !== void 0 ? _d : 'id';
941
939
  if (key !== 'id')
942
940
  console.warn("Unrecognized key provided");
943
- 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;
941
+ 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;
944
942
  return [2 /*return*/, toLoadedData(function () { return loadQuery({
945
943
  // lastId: !options?.filter ? oldestRecord?.id?.toString() : undefined, // don't provide a lastId when there's a filter, filter could include that on its own
946
944
  lastId: lastId,
947
945
  limit: limit,
948
946
  filter: filter,
947
+ mdbFilter: mdbFilterIsActive ? mdbFilter : undefined,
949
948
  }); }).then(function (es) {
950
949
  var _a, _b;
951
950
  if (es.status === LoadingStatus.Loaded) {
952
- if (es.value.length < limit) {
951
+ if (es.value.length < limit && !mdbFilter && (!filter || object_is_empty(filter))) {
953
952
  setFetched(key + modelName + DONE_LOADING_TOKEN, true);
954
953
  }
954
+ else if (es.value.length < limit) {
955
+ setFetched(filterKey + DONE_LOADING_TOKEN, true);
956
+ }
955
957
  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();
956
958
  if (newLastId) {
957
- setLastId(modelName + (filter ? JSON.stringify(filter) : ""), newLastId);
959
+ setLastId(filterKey, newLastId);
958
960
  }
959
961
  dispatch(slice.actions.addSome({ value: es.value, options: { replaceIfMatch: true, addTo: 'end' } }));
960
962
  }
@@ -963,7 +965,7 @@ export var useListStateHook = function (modelName, state, session, slice, apiCal
963
965
  }
964
966
  })];
965
967
  });
966
- }); }, [getLastId, modelName, loadQuery, didFetch, setFetched]);
968
+ }); }, [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]);
967
969
  var loadRecentlyCreated = React.useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
968
970
  var from, created, err_2;
969
971
  return __generator(this, function (_a) {
@@ -2278,15 +2280,62 @@ export var useCalendarEventsForUser = function (options) {
2278
2280
  });
2279
2281
  }); }, [options, session]);
2280
2282
  var _a = useCalendarEvents(), eventsLoading = _a[0], _b = _a[1], addLocalElements = _b.addLocalElements, filtered = _b.filtered;
2281
- var loadEvents = useCallback(function (options) {
2282
- var key = JSON.stringify(options !== null && options !== void 0 ? options : {});
2283
- if (loadedRef.current[key])
2284
- return;
2285
- loadedRef.current[key] = Date.now();
2286
- fetchEvents(options)
2287
- .then(function (es) { return addLocalElements(es, { replaceIfMatch: true }); })
2288
- .catch(console.error);
2289
- }, [session, loadedRef, fetchEvents, addLocalElements]);
2283
+ var loadEvents = useCallback(function (options) { return __awaiter(void 0, void 0, void 0, function () {
2284
+ var key, load, i, from, _loop_1, state_1;
2285
+ return __generator(this, function (_a) {
2286
+ switch (_a.label) {
2287
+ case 0:
2288
+ key = JSON.stringify(options !== null && options !== void 0 ? options : {});
2289
+ if (loadedRef.current[key])
2290
+ return [2 /*return*/];
2291
+ loadedRef.current[key] = Date.now();
2292
+ load = function (from) { return (console.log('Loading events from', from, 'to', options === null || options === void 0 ? void 0 : options.to),
2293
+ fetchEvents(__assign(__assign({}, options), { from: from }))
2294
+ .then(function (es) { return addLocalElements(es, { replaceIfMatch: true }); })
2295
+ .catch(console.error)); };
2296
+ i = 0;
2297
+ from = options === null || options === void 0 ? void 0 : options.from;
2298
+ _loop_1 = function () {
2299
+ var loaded, to;
2300
+ return __generator(this, function (_b) {
2301
+ switch (_b.label) {
2302
+ case 0:
2303
+ i++;
2304
+ return [4 /*yield*/, load(from)];
2305
+ case 1:
2306
+ loaded = _b.sent();
2307
+ to = options === null || options === void 0 ? void 0 : options.to;
2308
+ if (!to) {
2309
+ return [2 /*return*/, "break"];
2310
+ }
2311
+ if (!loaded) {
2312
+ return [2 /*return*/, "break"];
2313
+ }
2314
+ if (loaded.length === 0) {
2315
+ return [2 /*return*/, "break"];
2316
+ }
2317
+ if (loaded.find(function (e) { return new Date(e.startTimeInMS).getTime() > to.getTime(); })) {
2318
+ return [2 /*return*/, "break"];
2319
+ }
2320
+ // else continue to loop (up to 10 times) until we find events after the to date
2321
+ from = new Date(Math.max.apply(Math, loaded.map(function (e) { return e.startTimeInMS; })));
2322
+ return [2 /*return*/];
2323
+ }
2324
+ });
2325
+ };
2326
+ _a.label = 1;
2327
+ case 1:
2328
+ if (!(i < 10)) return [3 /*break*/, 3];
2329
+ return [5 /*yield**/, _loop_1()];
2330
+ case 2:
2331
+ state_1 = _a.sent();
2332
+ if (state_1 === "break")
2333
+ return [3 /*break*/, 3];
2334
+ return [3 /*break*/, 1];
2335
+ case 3: return [2 /*return*/];
2336
+ }
2337
+ });
2338
+ }); }, [session, loadedRef, fetchEvents, addLocalElements]);
2290
2339
  return [eventsLoading, { loadEvents: loadEvents, filtered: filtered }];
2291
2340
  };
2292
2341
  export var useWaitlists = function (options) {