diff --git a/src/allotment.tsx b/src/allotment.tsx index 5ded7e46..cdc4f44d 100644 --- a/src/allotment.tsx +++ b/src/allotment.tsx @@ -14,7 +14,6 @@ import useResizeObserver from "use-resize-observer"; import styles from "./allotment.module.css"; import { isIOS } from "./helpers/platform"; -import useIsomorphicLayoutEffect from "./helpers/use-isomorphic-layout-effect"; import { LayoutService } from "./layout-service"; import { PaneView } from "./pane-view"; import { Orientation, setGlobalSashSize } from "./sash"; @@ -197,7 +196,7 @@ const Allotment = forwardRef( }, })); - useIsomorphicLayoutEffect(() => { + useEffect(() => { let initializeSizes = true; if ( @@ -313,7 +312,7 @@ const Allotment = forwardRef( /** * Add, remove or update views as children change */ - useIsomorphicLayoutEffect(() => { + useEffect(() => { if (dimensionsInitialized) { const keys = childrenArray.map((child) => child.key as string); const panes = [...previousKeys.current]; diff --git a/src/helpers/use-isomorphic-layout-effect.ts b/src/helpers/use-isomorphic-layout-effect.ts deleted file mode 100644 index bc8ee5ee..00000000 --- a/src/helpers/use-isomorphic-layout-effect.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { useEffect, useLayoutEffect } from "react"; - -const useIsomorphicLayoutEffect = - typeof window !== "undefined" && - typeof window.document !== "undefined" && - typeof window.document.createElement !== "undefined" - ? useLayoutEffect - : useEffect; - -export default useIsomorphicLayoutEffect; diff --git a/stories/basic.stories.tsx b/stories/basic.stories.tsx index 31956987..eb9ca819 100644 --- a/stories/basic.stories.tsx +++ b/stories/basic.stories.tsx @@ -1,6 +1,6 @@ import { Meta, Story } from "@storybook/react"; import { debounce } from "lodash"; -import { useEffect, useMemo, useRef, useState } from "react"; +import { Suspense, useEffect, useMemo, useRef, useState } from "react"; import useResizeObserver from "use-resize-observer"; import { @@ -71,7 +71,7 @@ export const PersistSizes: Story<{ numViews: number; vertical: boolean }> = ({ console.log("write_sizes", sizes); localStorage.setItem("sizes", JSON.stringify(sizes)); }, 100), - [] + [], ); useEffect(() => { @@ -528,3 +528,50 @@ export const MeasureSize: Story = () => { ); }; Nested.args = {}; + +function useManualSuspense() { + const [suspend, setSuspend] = useState(false); + + const triggerSuspense = (ms: number = 1000) => { + setSuspend(true); + setTimeout(() => setSuspend(false), ms); + }; + + if (suspend) { + throw new Promise(() => {}); + } + + return triggerSuspense; +} + +const Wrapper = ({ children }: { children?: React.ReactNode }) => { + const triggerSuspense = useManualSuspense(); + + return ( +
+ + {children} +
+ ); +}; + +export const WithSuspense: Story = () => { + return ( + + +
+ + + + +
+
+
+ ); +};