react-sync-board 0.6.0 → 0.6.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/cjs/index.js CHANGED
@@ -4138,10 +4138,6 @@ var useItemList = function useItemList() {
4138
4138
  return items;
4139
4139
  };
4140
4140
 
4141
- var useSelectedItems = function useSelectedItems() {
4142
- return recoil.useRecoilValue(SelectedItemsAtom);
4143
- };
4144
-
4145
4141
  /**
4146
4142
  * Run effect only when component is unmounted.
4147
4143
  *
@@ -4329,6 +4325,28 @@ function useThrottledCallback(callback, deps, delay, noTrailing) {
4329
4325
  }, __spreadArray([delay, noTrailing], deps, true));
4330
4326
  }
4331
4327
 
4328
+ /* eslint-disable @typescript-eslint/no-explicit-any */
4329
+ /**
4330
+ * Like `useEffect`, but passed function is debounced.
4331
+ *
4332
+ * @param callback Callback like for `useEffect`, but without ability to return
4333
+ * a cleanup function.
4334
+ * @param deps Dependencies list that will be passed to underlying `useEffect`
4335
+ * and `useDebouncedCallback`.
4336
+ * @param delay Debounce delay.
4337
+ * @param maxWait Maximum amount of milliseconds that function can be delayed
4338
+ * before it's force execution. 0 means no max wait.
4339
+ */
4340
+
4341
+ function useDebouncedEffect(callback, deps, delay, maxWait) {
4342
+ if (maxWait === void 0) {
4343
+ maxWait = 0;
4344
+ } // eslint-disable-next-line react-hooks/exhaustive-deps
4345
+
4346
+
4347
+ React.useEffect(useDebouncedCallback(callback, deps, delay, maxWait), deps);
4348
+ }
4349
+
4332
4350
  /* eslint-disable @typescript-eslint/no-explicit-any */
4333
4351
  /**
4334
4352
  * Like `useEffect`, but passed function is throttled.
@@ -4473,6 +4491,45 @@ function useResizeObserver(target, callback, enabled) {
4473
4491
  }, [target, ro]);
4474
4492
  }
4475
4493
 
4494
+ var useDebouncedItems = function useDebouncedItems() {
4495
+ var items = recoil.useRecoilValue(AllItemsSelector);
4496
+
4497
+ var _React$useState = React__default['default'].useState(items),
4498
+ _React$useState2 = _slicedToArray(_React$useState, 2),
4499
+ debouncedItems = _React$useState2[0],
4500
+ setDebouncedItems = _React$useState2[1];
4501
+
4502
+ var updateDebouncedItems = recoil.useRecoilCallback(function (_ref) {
4503
+ var snapshot = _ref.snapshot;
4504
+ return /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
4505
+ var currentItemMap;
4506
+ return regeneratorRuntime.wrap(function _callee$(_context) {
4507
+ while (1) {
4508
+ switch (_context.prev = _context.next) {
4509
+ case 0:
4510
+ _context.next = 2;
4511
+ return snapshot.getPromise(AllItemsSelector);
4512
+
4513
+ case 2:
4514
+ currentItemMap = _context.sent;
4515
+ setDebouncedItems(currentItemMap);
4516
+
4517
+ case 4:
4518
+ case "end":
4519
+ return _context.stop();
4520
+ }
4521
+ }
4522
+ }, _callee);
4523
+ }));
4524
+ }, []);
4525
+ useDebouncedEffect(updateDebouncedItems, [items], 300);
4526
+ return debouncedItems;
4527
+ };
4528
+
4529
+ var useSelectedItems = function useSelectedItems() {
4530
+ return recoil.useRecoilValue(SelectedItemsAtom);
4531
+ };
4532
+
4476
4533
  var isMacOS = function isMacOS() {
4477
4534
  var userAgent = navigator.userAgent.toLowerCase();
4478
4535
  return /mac os ?x 10/.test(userAgent);
@@ -5347,8 +5404,6 @@ var PositionedItem = function PositionedItem(_ref12) {
5347
5404
  rest = _objectWithoutProperties(_ref12, _excluded2);
5348
5405
 
5349
5406
  if (!rest.itemMap[state.type]) {
5350
- // eslint-disable-next-line no-console
5351
- console.warn("Item type ".concat(state.type, " not recognized!"));
5352
5407
  return null;
5353
5408
  }
5354
5409
 
@@ -8686,8 +8741,10 @@ var getActionsFromItem = function getActionsFromItem(item, itemMap) {
8686
8741
  };
8687
8742
 
8688
8743
  var useAvailableActions = function useAvailableActions() {
8744
+ var itemMap = recoil.useRecoilValue(ItemMapAtom);
8745
+
8689
8746
  var _useRecoilValue = recoil.useRecoilValue(ConfigurationAtom),
8690
- itemMap = _useRecoilValue.itemTemplates;
8747
+ itemTemplates = _useRecoilValue.itemTemplates;
8691
8748
 
8692
8749
  var selected = recoil.useRecoilValue(SelectedItemsAtom);
8693
8750
 
@@ -8697,6 +8754,13 @@ var useAvailableActions = function useAvailableActions() {
8697
8754
  setAvailableActions = _React$useState2[1];
8698
8755
 
8699
8756
  var isMountedRef = React__default['default'].useRef(false);
8757
+ React__default['default'].useEffect(function () {
8758
+ // Mounted guard
8759
+ isMountedRef.current = true;
8760
+ return function () {
8761
+ isMountedRef.current = false;
8762
+ };
8763
+ }, []);
8700
8764
  var getItemListOrSelected = recoil.useRecoilCallback(function (_ref) {
8701
8765
  var snapshot = _ref.snapshot;
8702
8766
  return /*#__PURE__*/function () {
@@ -8744,19 +8808,12 @@ var useAvailableActions = function useAvailableActions() {
8744
8808
  };
8745
8809
  }();
8746
8810
  }, []);
8747
- React__default['default'].useEffect(function () {
8748
- // Mounted guard
8749
- isMountedRef.current = true;
8750
- return function () {
8751
- isMountedRef.current = false;
8752
- };
8753
- }, []);
8754
8811
  /**
8755
8812
  * Returns available actions for selected items. An action is kept only if all
8756
8813
  * items have this exact same action with same parameters.
8757
8814
  */
8758
8815
 
8759
- var updateAvailableActions = React__default['default'].useCallback( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
8816
+ var updateAvailableActions = React.useCallback( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
8760
8817
  var _yield$getItemListOrS, _yield$getItemListOrS2, selectedItemIds, selectedItemList, allActions;
8761
8818
 
8762
8819
  return regeneratorRuntime.wrap(function _callee2$(_context2) {
@@ -8786,13 +8843,13 @@ var useAvailableActions = function useAvailableActions() {
8786
8843
 
8787
8844
  case 9:
8788
8845
  allActions = selectedItemList.reduce(function (acc, item) {
8789
- var itemActions = getActionsFromItem(item, itemMap);
8846
+ var itemActions = getActionsFromItem(item, itemTemplates);
8790
8847
  return acc.filter(function (value) {
8791
8848
  return itemActions.some(function (itemAction) {
8792
8849
  return es6(value, itemAction);
8793
8850
  });
8794
8851
  });
8795
- }, getActionsFromItem(selectedItemList[0], itemMap));
8852
+ }, getActionsFromItem(selectedItemList[0], itemTemplates));
8796
8853
  setAvailableActions(allActions);
8797
8854
  _context2.next = 14;
8798
8855
  break;
@@ -8806,11 +8863,11 @@ var useAvailableActions = function useAvailableActions() {
8806
8863
  }
8807
8864
  }
8808
8865
  }, _callee2);
8809
- })), [getItemListOrSelected, itemMap]); // Update available actions when selection change
8866
+ })), [getItemListOrSelected, itemTemplates]); // Update available actions when selection change
8810
8867
 
8811
- React__default['default'].useEffect(function () {
8812
- updateAvailableActions();
8813
- }, [updateAvailableActions, selected]);
8868
+ React__default['default'].useEffect(updateAvailableActions, [updateAvailableActions, selected]); // Debounced update available actions when items change
8869
+
8870
+ useDebouncedEffect(updateAvailableActions, [itemMap, updateAvailableActions], 300);
8814
8871
  return {
8815
8872
  availableActions: availableActions
8816
8873
  };
@@ -9395,7 +9452,11 @@ var SyncBoard = function SyncBoard(_ref) {
9395
9452
  });
9396
9453
  }, [setConfiguration, uid]);
9397
9454
  useResizeObserver(boardWrapperRef, function () {
9398
- return setConfiguration(function (prev) {
9455
+ if (!boardWrapperRef.current) {
9456
+ return;
9457
+ }
9458
+
9459
+ setConfiguration(function (prev) {
9399
9460
  return _objectSpread2(_objectSpread2({}, prev), {}, {
9400
9461
  boardWrapperRect: boardWrapperRef.current.getBoundingClientRect()
9401
9462
  });
@@ -9470,6 +9531,7 @@ exports.useAvailableActions = useAvailableActions;
9470
9531
  exports.useBoardConfig = useBoardConfig;
9471
9532
  exports.useBoardPosition = useDim;
9472
9533
  exports.useBoardState = useBoardState;
9534
+ exports.useDebouncedItems = useDebouncedItems;
9473
9535
  exports.useItemActions = useItemActions;
9474
9536
  exports.useItemInteraction = useItemInteraction;
9475
9537
  exports.useItems = useItemList;