Skip to content

Commit 72e48cc

Browse files
authored
Merge pull request #40 from aeagle/fix/29-adjusted-size-after-props-update
Fix/29 adjusted size after props update
2 parents 45642b0 + 1fffb02 commit 72e48cc

File tree

3 files changed

+16
-14
lines changed

3 files changed

+16
-14
lines changed

react-spaces/src/Globals/Hooks.ts

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

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

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

3037
// Setup / cleanup
@@ -57,9 +64,6 @@ export const useSpace = (props: AllProps, divElementRef: React.MutableRefObject<
5764
}
5865
})
5966

60-
const parentContext = React.useContext(SpaceContext);
61-
const currentZIndex = props.zIndex || React.useContext(SpaceLayerContext) || 0;
62-
6367
const outerStyle = {
6468
left: (state.left !== undefined ? `calc(${getSizeString(state.left || 0)}${state.adjustedLeft ? ` + ${state.adjustedLeft}px` : ``})` : undefined),
6569
top: (state.top !== undefined ? `calc(${getSizeString(state.top || 0)}${state.adjustedTop ? ` + ${state.adjustedTop}px` : ``})` : undefined),
@@ -72,7 +76,6 @@ export const useSpace = (props: AllProps, divElementRef: React.MutableRefObject<
7276

7377
if (parentContext) {
7478
onRemove.current = () => {
75-
console.log(`Removing ${state.id}`);
7679
parentContext.removeSpaceTaker(state.id);
7780
}
7881

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
@@ -6,6 +6,7 @@ import * as PropTypes from 'prop-types';
66

77
interface IProps {
88
type: ResizeType,
9+
adjustedSize: number,
910
width?: number,
1011
height?: number,
1112
minimumAdjust: number,
@@ -14,8 +15,6 @@ interface IProps {
1415
}
1516

1617
export const Resizable : React.FC<IProps> = (props) => {
17-
const [ adjustedSize, setAdjustedSize ] = React.useState(0);
18-
1918
const resize = (originalX: number, originalY: number, x: number, y: number) => {
2019
const adjustmentX =
2120
Math.min(
@@ -29,15 +28,14 @@ export const Resizable : React.FC<IProps> = (props) => {
2928
);
3029
const adjustment = props.type === ResizeType.Left || props.type === ResizeType.Right ? adjustmentX : adjustmentY;
3130

32-
if (adjustment !== adjustedSize) {
33-
setAdjustedSize(adjustment);
31+
if (adjustment !== props.adjustedSize) {
3432
props.onResize(adjustment);
3533
}
3634
}
3735

3836
const startTouchResize = (e: React.TouchEvent<HTMLDivElement>) => {
39-
const originalTouchX = props.type === ResizeType.Left ? e.touches[0].pageX + adjustedSize : e.touches[0].pageX - adjustedSize;
40-
const originalTouchY = props.type === ResizeType.Top ? e.touches[0].pageY + adjustedSize : e.touches[0].pageY - adjustedSize;
37+
const originalTouchX = props.type === ResizeType.Left ? e.touches[0].pageX + props.adjustedSize : e.touches[0].pageX - props.adjustedSize;
38+
const originalTouchY = props.type === ResizeType.Top ? e.touches[0].pageY + props.adjustedSize : e.touches[0].pageY - props.adjustedSize;
4139

4240
const touchResize = (e: TouchEvent) => resize(originalTouchX, originalTouchY, e.touches[0].pageX, e.touches[0].pageY);
4341
const debouncedTouchResize = debounce<typeof touchResize>(touchResize, 10);
@@ -49,8 +47,8 @@ export const Resizable : React.FC<IProps> = (props) => {
4947
}
5048

5149
const startResize = (e: React.MouseEvent<HTMLDivElement, MouseEvent>) => {
52-
const originalMouseX = props.type === ResizeType.Left ? e.pageX + adjustedSize : e.pageX - adjustedSize;
53-
const originalMouseY = props.type === ResizeType.Top ? e.pageY + adjustedSize : e.pageY - adjustedSize;
50+
const originalMouseX = props.type === ResizeType.Left ? e.pageX + props.adjustedSize : e.pageX - props.adjustedSize;
51+
const originalMouseY = props.type === ResizeType.Top ? e.pageY + props.adjustedSize : e.pageY - props.adjustedSize;
5452

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

0 commit comments

Comments
 (0)