SubscribeItemEvents.jsx 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import React from "react";
  2. import { useC2C } from "../../../hooks/useC2C";
  3. import useItems from "./useItems";
  4. import { useSetRecoilState } from "recoil";
  5. import { ItemMapAtom } from "../";
  6. export const SubcribeItemEvents = () => {
  7. const [c2c] = useC2C();
  8. const setItemMap = useSetRecoilState(ItemMapAtom);
  9. const {
  10. updateItemOrder,
  11. moveItems,
  12. removeItems,
  13. insertItemBefore,
  14. } = useItems();
  15. const batchUpdate = React.useCallback(
  16. (updatedItems) => {
  17. setItemMap((prevItemMap) => {
  18. return { ...prevItemMap, ...updatedItems };
  19. });
  20. },
  21. [setItemMap]
  22. );
  23. React.useEffect(() => {
  24. const unsub = c2c.subscribe(`batchItemsUpdate`, (updatedItems) => {
  25. batchUpdate(updatedItems);
  26. });
  27. return unsub;
  28. }, [c2c, batchUpdate]);
  29. React.useEffect(() => {
  30. const unsub = c2c.subscribe(
  31. `selectedItemsMove`,
  32. ({ itemIds, posDelta }) => {
  33. moveItems(itemIds, posDelta, false);
  34. }
  35. );
  36. return unsub;
  37. }, [c2c, moveItems]);
  38. React.useEffect(() => {
  39. const unsub = c2c.subscribe(`updateItemListOrder`, (itemIds) => {
  40. updateItemOrder(itemIds, false);
  41. });
  42. return unsub;
  43. }, [c2c, updateItemOrder]);
  44. React.useEffect(() => {
  45. const unsub = c2c.subscribe(`pushItem`, (newItem) => {
  46. insertItemBefore(newItem, null, false);
  47. });
  48. return unsub;
  49. }, [c2c, insertItemBefore]);
  50. React.useEffect(() => {
  51. const unsub = c2c.subscribe(`insertItemBefore`, ([newItem, beforeId]) => {
  52. insertItemBefore(newItem, beforeId, false);
  53. });
  54. return unsub;
  55. }, [c2c, insertItemBefore]);
  56. React.useEffect(() => {
  57. const unsub = c2c.subscribe(`removeItems`, (itemIds) => {
  58. removeItems(itemIds, false);
  59. });
  60. return unsub;
  61. }, [c2c, removeItems]);
  62. return null;
  63. };
  64. export default SubcribeItemEvents;