All Downloads are FREE. Search and download functionalities are using the official Maven repository.

package.react-utils.useRestoreScrollPosition.useRestoreScrollPosition.js.map Maven / Gradle / Ivy

Go to download

A package encapsulating common code across neeto projects including initializers, utility functions, common components and hooks and so on.

There is a newer version: 4.12.3
Show newest version
{"version":3,"file":"useRestoreScrollPosition.js","names":["useEffect","assoc","dissoc","prop","useFuncDebounce","withImmutableActions","create","useScrollStore","set","get","scrollPositions","setScrollPosition","key","value","state","removeScrollPosition","getScrollPosition","useRestoreScrollPosition","ref","handleScroll","current","scrollTop","savedScrollPosition","undefined","addEventListener","removeEventListener","useSetScrollPosition","useGetScrollPosition","useRemoveScrollPosition"],"sources":["../../../src/react-utils/useRestoreScrollPosition/useRestoreScrollPosition.js"],"sourcesContent":["import { useEffect } from \"react\";\n\nimport { assoc, dissoc, prop } from \"ramda\";\nimport useFuncDebounce from \"react-utils/useFuncDebounce\";\nimport withImmutableActions from \"react-utils/withImmutableActions\";\nimport { create } from \"zustand\";\n\n/** @type {import(\"neetocommons/react-utils\").ZustandStoreHook} */\nconst useScrollStore = create(\n  withImmutableActions((set, get) => ({\n    scrollPositions: {},\n    setScrollPosition: (key, value) =>\n      set(state => ({\n        scrollPositions: assoc(key, value, state.scrollPositions),\n      })),\n    removeScrollPosition: key =>\n      set(state => ({ scrollPositions: dissoc(key, state.scrollPositions) })),\n    getScrollPosition: key => get().scrollPositions[key],\n  }))\n);\n\nconst useRestoreScrollPosition = (key, ref) => {\n  const setScrollPosition = useScrollStore(prop(\"setScrollPosition\"));\n  const getScrollPosition = useScrollStore(prop(\"getScrollPosition\"));\n\n  const handleScroll = useFuncDebounce(() => {\n    if (!ref.current) return;\n    setScrollPosition(key, ref.current.scrollTop);\n  }, 500);\n\n  useEffect(() => {\n    if (ref.current) {\n      const savedScrollPosition = getScrollPosition(key);\n      if (savedScrollPosition !== undefined) {\n        ref.current.scrollTop = savedScrollPosition;\n      }\n      ref.current.addEventListener(\"scroll\", handleScroll);\n    }\n\n    return () => {\n      if (ref.current) {\n        ref.current.removeEventListener(\"scroll\", handleScroll);\n      }\n    };\n  }, [key]);\n};\n\nexport const useSetScrollPosition = () =>\n  useScrollStore(prop(\"setScrollPosition\"));\n\nexport const useGetScrollPosition = () =>\n  useScrollStore(prop(\"getScrollPosition\"));\n\nexport const useRemoveScrollPosition = () =>\n  useScrollStore(prop(\"removeScrollPosition\"));\n\nexport default useRestoreScrollPosition;\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,OAAO;AAEjC,SAASC,KAAK,EAAEC,MAAM,EAAEC,IAAI,QAAQ,OAAO;AAC3C,OAAOC,eAAe;AACtB,OAAOC,oBAAoB;AAC3B,SAASC,MAAM,QAAQ,SAAS;;AAEhC;AACA,IAAMC,cAAc,GAAGD,MAAM,CAC3BD,oBAAoB,CAAC,UAACG,GAAG,EAAEC,GAAG;EAAA,OAAM;IAClCC,eAAe,EAAE,CAAC,CAAC;IACnBC,iBAAiB,EAAE,SAAAA,kBAACC,GAAG,EAAEC,KAAK;MAAA,OAC5BL,GAAG,CAAC,UAAAM,KAAK;QAAA,OAAK;UACZJ,eAAe,EAAET,KAAK,CAACW,GAAG,EAAEC,KAAK,EAAEC,KAAK,CAACJ,eAAe;QAC1D,CAAC;MAAA,CAAC,CAAC;IAAA;IACLK,oBAAoB,EAAE,SAAAA,qBAAAH,GAAG;MAAA,OACvBJ,GAAG,CAAC,UAAAM,KAAK;QAAA,OAAK;UAAEJ,eAAe,EAAER,MAAM,CAACU,GAAG,EAAEE,KAAK,CAACJ,eAAe;QAAE,CAAC;MAAA,CAAC,CAAC;IAAA;IACzEM,iBAAiB,EAAE,SAAAA,kBAAAJ,GAAG;MAAA,OAAIH,GAAG,EAAE,CAACC,eAAe,CAACE,GAAG,CAAC;IAAA;EACtD,CAAC;AAAA,CAAC,CAAC,CACJ;AAED,IAAMK,wBAAwB,GAAG,SAA3BA,wBAAwBA,CAAIL,GAAG,EAAEM,GAAG,EAAK;EAC7C,IAAMP,iBAAiB,GAAGJ,cAAc,CAACJ,IAAI,CAAC,mBAAmB,CAAC,CAAC;EACnE,IAAMa,iBAAiB,GAAGT,cAAc,CAACJ,IAAI,CAAC,mBAAmB,CAAC,CAAC;EAEnE,IAAMgB,YAAY,GAAGf,eAAe,CAAC,YAAM;IACzC,IAAI,CAACc,GAAG,CAACE,OAAO,EAAE;IAClBT,iBAAiB,CAACC,GAAG,EAAEM,GAAG,CAACE,OAAO,CAACC,SAAS,CAAC;EAC/C,CAAC,EAAE,GAAG,CAAC;EAEPrB,SAAS,CAAC,YAAM;IACd,IAAIkB,GAAG,CAACE,OAAO,EAAE;MACf,IAAME,mBAAmB,GAAGN,iBAAiB,CAACJ,GAAG,CAAC;MAClD,IAAIU,mBAAmB,KAAKC,SAAS,EAAE;QACrCL,GAAG,CAACE,OAAO,CAACC,SAAS,GAAGC,mBAAmB;MAC7C;MACAJ,GAAG,CAACE,OAAO,CAACI,gBAAgB,CAAC,QAAQ,EAAEL,YAAY,CAAC;IACtD;IAEA,OAAO,YAAM;MACX,IAAID,GAAG,CAACE,OAAO,EAAE;QACfF,GAAG,CAACE,OAAO,CAACK,mBAAmB,CAAC,QAAQ,EAAEN,YAAY,CAAC;MACzD;IACF,CAAC;EACH,CAAC,EAAE,CAACP,GAAG,CAAC,CAAC;AACX,CAAC;AAED,OAAO,IAAMc,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAAA;EAAA,OAC/BnB,cAAc,CAACJ,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAAA;AAE3C,OAAO,IAAMwB,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAAA;EAAA,OAC/BpB,cAAc,CAACJ,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAAA;AAE3C,OAAO,IAAMyB,uBAAuB,GAAG,SAA1BA,uBAAuBA,CAAA;EAAA,OAClCrB,cAAc,CAACJ,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAAA;AAE9C,eAAec,wBAAwB"}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy