Skip to content

Commit f2419c4

Browse files
authored
Merge pull request #139 from aeagle/hotfix/107-resize-race-condition
Fix for race condition in resize operation
2 parents 736bb59 + 2c08baa commit f2419c4

File tree

3 files changed

+34
-5
lines changed

3 files changed

+34
-5
lines changed

src/components/stories/04-testing/Testing.stories.mdx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Meta, Story, Canvas, Props } from "@storybook/addon-docs";
2-
import { StateDriven, AnchoredDefaultOrdering, SpaceDemoStacked1 } from "../Utils";
2+
import { StateDriven, AnchoredDefaultOrdering, SpaceDemoStacked1, StateDrivenSize } from "../Utils";
33

44
<Meta title="Testing/State" />
55

@@ -19,4 +19,10 @@ import { StateDriven, AnchoredDefaultOrdering, SpaceDemoStacked1 } from "../Util
1919
<Story name="Test stacked spaces">
2020
<SpaceDemoStacked1 />
2121
</Story>
22+
</Canvas>
23+
24+
<Canvas>
25+
<Story name="State driven size">
26+
<StateDrivenSize />
27+
</Story>
2228
</Canvas>

src/components/stories/Utils.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,16 @@ export const StateDriven: React.FC = () => {
323323
);
324324
};
325325

326+
export const StateDrivenSize = () => {
327+
const [size, setSize] = React.useState<number | string | undefined>(250);
328+
return (
329+
<ViewPort>
330+
<LeftResizable size={size} onResizeEnd={(s) => setSize(s)}></LeftResizable>
331+
<Fill></Fill>
332+
</ViewPort>
333+
);
334+
};
335+
326336
export const AnchoredDefaultOrdering = () => {
327337
return (
328338
<ViewPort as="main">

src/core-resizing.ts

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -148,20 +148,33 @@ export function createResize(store: ISpaceStore) {
148148
e.preventDefault();
149149

150150
if (RESIZE_THROTTLE > 0) {
151-
throttle((x, y) => window.requestAnimationFrame(() => resize(x, y)), RESIZE_THROTTLE)(lastX, lastY);
151+
throttle(
152+
(x, y) =>
153+
window.requestAnimationFrame(() => {
154+
if (space.resizing) {
155+
resize(x, y);
156+
}
157+
}),
158+
RESIZE_THROTTLE,
159+
)(lastX, lastY);
152160
} else {
153-
window.requestAnimationFrame(() => resize(lastX, lastY));
161+
window.requestAnimationFrame(() => {
162+
if (space.resizing) {
163+
resize(lastX, lastY);
164+
}
165+
});
154166
}
155167
};
156168

157169
const removeListener = () => {
170+
space.resizing = false;
171+
158172
if (moved) {
159173
resize(lastX, lastY);
160174
}
175+
161176
window.removeEventListener(moveEvent, withPreventDefault as EventListener);
162177
window.removeEventListener(endEvent, removeListener);
163-
164-
space.resizing = false;
165178
space.updateParent();
166179

167180
const resizeEnd = onResizeEnd || space.onResizeEnd;

0 commit comments

Comments
 (0)