Skip to content

Commit bdfe576

Browse files
committed
Ensure adjusted size is reset after size prop change
1 parent 6488d86 commit bdfe576

File tree

3 files changed

+16
-13
lines changed

3 files changed

+16
-13
lines changed

react-spaces/src/Globals/Hooks.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ export const useSpace = (props: AllProps, divElementRef: React.MutableRefObject<
1414

1515
const setState = (stateDelta: Partial<IState>) => changeState(prev => ({...prev, ...stateDelta}));
1616

17+
const parentContext = React.useContext(SpaceContext);
18+
const currentZIndex = props.zIndex || React.useContext(SpaceLayerContext) || 0;
19+
1720
// Deal with property changes to size / anchoring
1821
React.useEffect(() => {
1922
setState({
@@ -25,7 +28,11 @@ export const useSpace = (props: AllProps, divElementRef: React.MutableRefObject<
2528
width: isHorizontalSpace(props) ? props.anchorSize || 0 : props.width,
2629
height: isVerticalSpace(props) ? props.anchorSize || 0 : props.height,
2730
debug: props.debug !== undefined ? props.debug : false,
31+
adjustedSize: 0
2832
})
33+
if (parentContext) {
34+
parentContext.updateSpaceTakerAdjustedSize(state.id, 0);
35+
}
2936
}, [ props.zIndex, props.left, props.top, props.bottom, props.right, props.width, props.height, props.anchor, props.anchorSize, props.debug ]);
3037

3138
// Setup / cleanup
@@ -58,9 +65,6 @@ export const useSpace = (props: AllProps, divElementRef: React.MutableRefObject<
5865
}
5966
})
6067

61-
const parentContext = React.useContext(SpaceContext);
62-
const currentZIndex = props.zIndex || React.useContext(SpaceLayerContext) || 0;
63-
6468
const outerStyle = {
6569
left: (state.left !== undefined ? `calc(${getSizeString(state.left || 0)}${state.adjustedLeft ? ` + ${state.adjustedLeft}px` : ``})` : undefined),
6670
top: (state.top !== undefined ? `calc(${getSizeString(state.top || 0)}${state.adjustedTop ? ` + ${state.adjustedTop}px` : ``})` : undefined),

react-spaces/src/Globals/Utils.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,9 @@ export const applyResize = (props: AllProps, state: IState, setState: (stateDelt
9898

9999
return {
100100
resizeHandle:
101-
<Resizable
102-
type={resizeType}
101+
<Resizable
102+
type={resizeType}
103+
adjustedSize={state.adjustedSize}
103104
width={resizeHandleWidth}
104105
height={resizeHandleHeight}
105106
minimumAdjust={ (props.minimumSize || 20) - (state.parsedSize || 0) }

react-spaces/src/Resizable.tsx

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export enum ResizeType {
1111

1212
interface IProps {
1313
type: ResizeType,
14+
adjustedSize: number,
1415
width?: number,
1516
height?: number,
1617
minimumAdjust: number,
@@ -19,8 +20,6 @@ interface IProps {
1920
}
2021

2122
export const Resizable : React.FC<IProps> = (props) => {
22-
const [ adjustedSize, setAdjustedSize ] = React.useState(0);
23-
2423
const resize = (originalX: number, originalY: number, x: number, y: number) => {
2524
const adjustmentX =
2625
Math.min(
@@ -34,15 +33,14 @@ export const Resizable : React.FC<IProps> = (props) => {
3433
);
3534
const adjustment = props.type === ResizeType.Left || props.type === ResizeType.Right ? adjustmentX : adjustmentY;
3635

37-
if (adjustment !== adjustedSize) {
38-
setAdjustedSize(adjustment);
36+
if (adjustment !== props.adjustedSize) {
3937
props.onResize(adjustment);
4038
}
4139
}
4240

4341
const startTouchResize = (e: React.TouchEvent<HTMLDivElement>) => {
44-
const originalTouchX = props.type === ResizeType.Left ? e.touches[0].pageX + adjustedSize : e.touches[0].pageX - adjustedSize;
45-
const originalTouchY = props.type === ResizeType.Top ? e.touches[0].pageY + adjustedSize : e.touches[0].pageY - adjustedSize;
42+
const originalTouchX = props.type === ResizeType.Left ? e.touches[0].pageX + props.adjustedSize : e.touches[0].pageX - props.adjustedSize;
43+
const originalTouchY = props.type === ResizeType.Top ? e.touches[0].pageY + props.adjustedSize : e.touches[0].pageY - props.adjustedSize;
4644

4745
const touchResize = (e: TouchEvent) => resize(originalTouchX, originalTouchY, e.touches[0].pageX, e.touches[0].pageY);
4846
const debouncedTouchResize = debounce<typeof touchResize>(touchResize, 10);
@@ -54,8 +52,8 @@ export const Resizable : React.FC<IProps> = (props) => {
5452
}
5553

5654
const startResize = (e: React.MouseEvent<HTMLDivElement, MouseEvent>) => {
57-
const originalMouseX = props.type === ResizeType.Left ? e.pageX + adjustedSize : e.pageX - adjustedSize;
58-
const originalMouseY = props.type === ResizeType.Top ? e.pageY + adjustedSize : e.pageY - adjustedSize;
55+
const originalMouseX = props.type === ResizeType.Left ? e.pageX + props.adjustedSize : e.pageX - props.adjustedSize;
56+
const originalMouseY = props.type === ResizeType.Top ? e.pageY + props.adjustedSize : e.pageY - props.adjustedSize;
5957

6058
const mouseResize = (e: MouseEvent) => resize(originalMouseX, originalMouseY, e.pageX, e.pageY);
6159
const debouncedMouseResize = debounce<typeof mouseResize>(mouseResize, 10);

0 commit comments

Comments
 (0)