1
1
import { SyntheticEvent } from "react" ;
2
- import { ISpaceDefinition , ResizeType , ISpaceStore , OnResizeEnd , EndEvent , MoveEvent , Type } from "./core-types" ;
2
+ import { ISpaceDefinition , ResizeType , ISpaceStore , OnResizeEnd , EndEvent , MoveEvent , Type , ISize } from "./core-types" ;
3
3
import { coalesce , throttle } from "./core-utils" ;
4
4
5
5
const RESIZE_THROTTLE = 0 ;
@@ -15,29 +15,21 @@ function isHorizontal(resizeType: ResizeType) {
15
15
16
16
type ResizeAdjuster = ( currentX : number , currentY : number ) => void ;
17
17
18
- function createAdjuster ( resizeType : ResizeType , space : ISpaceDefinition , originalX : number , originalY : number ) : ResizeAdjuster {
19
- const dimensionToAdjust = ( ( ) => {
20
- if ( resizeType === ResizeType . Left ) {
21
- return space . left ;
22
- } else if ( resizeType === ResizeType . Right ) {
23
- return space . right ;
24
- } else if ( resizeType === ResizeType . Bottom ) {
25
- return space . bottom ;
26
- } else if ( resizeType === ResizeType . Top ) {
27
- return space . top ;
28
- } else {
29
- throw new Error ( "unknown resize type" ) ;
30
- }
31
- } ) ( ) ;
32
-
18
+ function createSideAdjuster (
19
+ rect : DOMRect ,
20
+ resizeType : ResizeType ,
21
+ dimensionToAdjust : ISize ,
22
+ space : ISpaceDefinition ,
23
+ originalX : number ,
24
+ originalY : number ,
25
+ ) : ResizeAdjuster {
33
26
const negater = resizeType === ResizeType . Right || resizeType === ResizeType . Bottom ? ( val : number ) => - val : ( val : number ) => val ;
34
27
35
28
const candidateOppositeDimensionToAdjust = isHorizontal ( resizeType ) ? space . width : space . height ;
36
29
37
30
const offset1 = dimensionToAdjust . resized ;
38
31
const offset2 = candidateOppositeDimensionToAdjust . resized ;
39
32
40
- const rect = space . element . getBoundingClientRect ( ) ;
41
33
const size = isHorizontal ( resizeType ) ? rect . width : rect . height ;
42
34
const minimumAdjust = coalesce ( space . minimumSize , 20 ) ! - size + 0 ;
43
35
const maximumAdjust = space . maximumSize ? space . maximumSize - size + 0 : undefined ;
@@ -71,6 +63,50 @@ function createAdjuster(resizeType: ResizeType, space: ISpaceDefinition, origina
71
63
} ;
72
64
}
73
65
66
+ function createAdjuster ( resizeType : ResizeType , space : ISpaceDefinition , originalX : number , originalY : number ) : ResizeAdjuster {
67
+ const rect = space . element . getBoundingClientRect ( ) ;
68
+ switch ( resizeType ) {
69
+ case ResizeType . Left :
70
+ return createSideAdjuster ( rect , resizeType , space . left , space , originalX , originalY ) ;
71
+ case ResizeType . Right :
72
+ return createSideAdjuster ( rect , resizeType , space . right , space , originalX , originalY ) ;
73
+ case ResizeType . Bottom :
74
+ return createSideAdjuster ( rect , resizeType , space . bottom , space , originalX , originalY ) ;
75
+ case ResizeType . Top :
76
+ return createSideAdjuster ( rect , resizeType , space . top , space , originalX , originalY ) ;
77
+ case ResizeType . TopLeft :
78
+ const topAdjuster = createSideAdjuster ( rect , ResizeType . Top , space . top , space , originalX , originalY ) ;
79
+ const leftAdjuster = createSideAdjuster ( rect , ResizeType . Left , space . left , space , originalX , originalY ) ;
80
+ return ( x , y ) => {
81
+ topAdjuster ( x , y ) ;
82
+ leftAdjuster ( x , y ) ;
83
+ } ;
84
+ case ResizeType . TopRight :
85
+ const top1Adjuster = createSideAdjuster ( rect , ResizeType . Top , space . top , space , originalX , originalY ) ;
86
+ const rightAdjuster = createSideAdjuster ( rect , ResizeType . Right , space . right , space , originalX , originalY ) ;
87
+ return ( x , y ) => {
88
+ top1Adjuster ( x , y ) ;
89
+ rightAdjuster ( x , y ) ;
90
+ } ;
91
+ case ResizeType . BottomLeft :
92
+ const bottomAdjuster = createSideAdjuster ( rect , ResizeType . Bottom , space . bottom , space , originalX , originalY ) ;
93
+ const left1Adjuster = createSideAdjuster ( rect , ResizeType . Left , space . left , space , originalX , originalY ) ;
94
+ return ( x , y ) => {
95
+ bottomAdjuster ( x , y ) ;
96
+ left1Adjuster ( x , y ) ;
97
+ } ;
98
+ case ResizeType . BottomRight :
99
+ const bottom1Adjuster = createSideAdjuster ( rect , ResizeType . Bottom , space . bottom , space , originalX , originalY ) ;
100
+ const right1Adjuster = createSideAdjuster ( rect , ResizeType . Right , space . right , space , originalX , originalY ) ;
101
+ return ( x , y ) => {
102
+ bottom1Adjuster ( x , y ) ;
103
+ right1Adjuster ( x , y ) ;
104
+ } ;
105
+ default :
106
+ throw `Resize type ${ resizeType } not supported` ;
107
+ }
108
+ }
109
+
74
110
export function createResize ( store : ISpaceStore ) {
75
111
return {
76
112
startResize < T extends SyntheticEvent < HTMLElement > | MouseEvent | TouchEvent > (
@@ -111,7 +147,11 @@ export function createResize(store: ISpaceStore) {
111
147
lastY = newCoords . y ;
112
148
e . preventDefault ( ) ;
113
149
114
- throttle ( ( x , y ) => window . requestAnimationFrame ( ( ) => resize ( x , y ) ) , RESIZE_THROTTLE ) ( lastX , lastY ) ;
150
+ if ( RESIZE_THROTTLE > 0 ) {
151
+ throttle ( ( x , y ) => window . requestAnimationFrame ( ( ) => resize ( x , y ) ) , RESIZE_THROTTLE ) ( lastX , lastY ) ;
152
+ } else {
153
+ window . requestAnimationFrame ( ( ) => resize ( lastX , lastY ) ) ;
154
+ }
115
155
} ;
116
156
117
157
const removeListener = ( ) => {
0 commit comments