@@ -16,6 +16,7 @@ import { coalesce, shortuuid } from "./core-utils";
1616import { ResizeSensor } from "css-element-queries" ;
1717import * as PropTypes from "prop-types" ;
1818import { useEffect , useRef , useState } from "react" ;
19+ import { Space } from "./components/Space" ;
1920
2021// WORKAROUND for React18 strict mode
2122// https://blog.ag-grid.com/avoiding-react-18-double-mount/
@@ -198,88 +199,45 @@ export interface IResizeHandleProps {
198199 onTouchStart : ( e : React . TouchEvent < HTMLElement > ) => void ;
199200}
200201
202+ const resizeSetup = [
203+ { id : "ml" , className : "resize-left" , resizeType : ResizeType . Left , condition : ( space : ISpaceDefinition ) => space . canResizeLeft } ,
204+ { id : "mr" , className : "resize-right" , resizeType : ResizeType . Right , condition : ( space : ISpaceDefinition ) => space . canResizeRight } ,
205+ { id : "mt" , className : "resize-top" , resizeType : ResizeType . Top , condition : ( space : ISpaceDefinition ) => space . canResizeTop } ,
206+ { id : "mb" , className : "resize-bottom" , resizeType : ResizeType . Bottom , condition : ( space : ISpaceDefinition ) => space . canResizeBottom } ,
207+ { id : "mtl" , className : "resize-top-left" , resizeType : ResizeType . TopLeft , condition : ( space : ISpaceDefinition ) => space . canResizeTopLeft } ,
208+ { id : "mtr" , className : "resize-top-right" , resizeType : ResizeType . TopRight , condition : ( space : ISpaceDefinition ) => space . canResizeTopRight } ,
209+ {
210+ id : "mbl" ,
211+ className : "resize-bottom-left" ,
212+ resizeType : ResizeType . BottomLeft ,
213+ condition : ( space : ISpaceDefinition ) => space . canResizeBottomLeft ,
214+ } ,
215+ {
216+ id : "mbr" ,
217+ className : "resize-bottom-right" ,
218+ resizeType : ResizeType . BottomRight ,
219+ condition : ( space : ISpaceDefinition ) => space . canResizeBottomRight ,
220+ } ,
221+ ] ;
222+
201223export function useSpaceResizeHandles ( store : ISpaceStore , space : ISpaceDefinition ) {
202224 const mouseHandles : IResizeHandleProps [ ] = [ ] ;
203225
204- if ( space . canResizeLeft ) {
205- mouseHandles . push ( {
206- id : `${ space . id } -ml` ,
207- key : "left" ,
208- className : `spaces-resize-handle resize-left` ,
209- onMouseDown : ( event ) => store . startMouseResize ( ResizeType . Left , space , event ) ,
210- onTouchStart : ( event ) => store . startTouchResize ( ResizeType . Left , space , event ) ,
211- } ) ;
212- }
213-
214- if ( space . canResizeRight ) {
215- mouseHandles . push ( {
216- id : `${ space . id } -mr` ,
217- key : "right" ,
218- className : `spaces-resize-handle resize-right` ,
219- onMouseDown : ( event ) => store . startMouseResize ( ResizeType . Right , space , event ) ,
220- onTouchStart : ( event ) => store . startTouchResize ( ResizeType . Right , space , event ) ,
221- } ) ;
222- }
223-
224- if ( space . canResizeTop ) {
225- mouseHandles . push ( {
226- id : `${ space . id } -mt` ,
227- key : "top" ,
228- className : `spaces-resize-handle resize-top` ,
229- onMouseDown : ( event ) => store . startMouseResize ( ResizeType . Top , space , event ) ,
230- onTouchStart : ( event ) => store . startTouchResize ( ResizeType . Top , space , event ) ,
231- } ) ;
232- }
233-
234- if ( space . canResizeBottom ) {
235- mouseHandles . push ( {
236- id : `${ space . id } -mb` ,
237- key : "bottom" ,
238- className : `spaces-resize-handle resize-bottom` ,
239- onMouseDown : ( event ) => store . startMouseResize ( ResizeType . Bottom , space , event ) ,
240- onTouchStart : ( event ) => store . startTouchResize ( ResizeType . Bottom , space , event ) ,
241- } ) ;
242- }
243-
244- if ( space . canResizeTopLeft ) {
245- mouseHandles . push ( {
246- id : `${ space . id } -mtl` ,
247- key : "top-left" ,
248- className : `spaces-resize-handle resize-top-left` ,
249- onMouseDown : ( event ) => store . startMouseResize ( ResizeType . Left , space , event ) ,
250- onTouchStart : ( event ) => store . startTouchResize ( ResizeType . Left , space , event ) ,
251- } ) ;
252- }
253-
254- if ( space . canResizeTopRight ) {
255- mouseHandles . push ( {
256- id : `${ space . id } -mtr` ,
257- key : "top-right" ,
258- className : `spaces-resize-handle resize-top-right` ,
259- onMouseDown : ( event ) => store . startMouseResize ( ResizeType . Right , space , event ) ,
260- onTouchStart : ( event ) => store . startTouchResize ( ResizeType . Right , space , event ) ,
261- } ) ;
262- }
263-
264- if ( space . canResizeBottomLeft ) {
226+ const setupResizeHandle = ( id : string , className : string , resizeType : ResizeType ) => {
265227 mouseHandles . push ( {
266- id : `${ space . id } -mbl ` ,
267- key : "bottom-left" ,
268- className : `spaces-resize-handle resize-bottom-left ` ,
269- onMouseDown : ( event ) => store . startMouseResize ( ResizeType . Bottom , space , event ) ,
270- onTouchStart : ( event ) => store . startTouchResize ( ResizeType . Bottom , space , event ) ,
228+ id : `${ space . id } -${ id } ` ,
229+ key : id ,
230+ className : `spaces-resize-handle ${ className } ` ,
231+ onMouseDown : ( event ) => store . startMouseResize ( resizeType , space , event ) ,
232+ onTouchStart : ( event ) => store . startTouchResize ( resizeType , space , event ) ,
271233 } ) ;
272- }
234+ } ;
273235
274- if ( space . canResizeBottomRight ) {
275- mouseHandles . push ( {
276- id : `${ space . id } -mbr` ,
277- key : "bottom-right" ,
278- className : `spaces-resize-handle resize-bottom-right` ,
279- onMouseDown : ( event ) => store . startMouseResize ( ResizeType . Bottom , space , event ) ,
280- onTouchStart : ( event ) => store . startTouchResize ( ResizeType . Bottom , space , event ) ,
281- } ) ;
282- }
236+ resizeSetup . forEach ( ( resizeItem ) => {
237+ if ( resizeItem . condition ( space ) ) {
238+ setupResizeHandle ( resizeItem . id , resizeItem . className , resizeItem . resizeType ) ;
239+ }
240+ } ) ;
283241
284242 return {
285243 mouseHandles,
0 commit comments