|
1 | 1 | import { useEventCallback } from "@mendix/widget-plugin-hooks/useEventCallback"; |
2 | 2 | import { MouseEvent, ReactElement, TouchEvent, useCallback, useEffect, useRef, useState } from "react"; |
| 3 | +import { useColumn, useColumnsStore } from "../model/hooks/injection-hooks"; |
3 | 4 |
|
4 | 5 | export interface ColumnResizerProps { |
5 | 6 | minWidth?: number; |
6 | | - setColumnWidth: (width: number) => void; |
7 | | - onResizeEnds?: () => void; |
8 | | - onResizeStart?: () => void; |
9 | 7 | } |
10 | 8 |
|
11 | | -export function ColumnResizer({ |
12 | | - minWidth = 50, |
13 | | - setColumnWidth, |
14 | | - onResizeEnds, |
15 | | - onResizeStart |
16 | | -}: ColumnResizerProps): ReactElement { |
| 9 | +export function ColumnResizer({ minWidth = 50 }: ColumnResizerProps): ReactElement { |
| 10 | + const column = useColumn(); |
| 11 | + const columnsStore = useColumnsStore(); |
17 | 12 | const [isResizing, setIsResizing] = useState(false); |
18 | 13 | const [startPosition, setStartPosition] = useState(0); |
19 | 14 | const [currentWidth, setCurrentWidth] = useState(0); |
20 | 15 | const resizerReference = useRef<HTMLDivElement>(null); |
21 | | - const onStart = useEventCallback(onResizeStart); |
22 | 16 |
|
23 | 17 | const onStartDrag = useCallback( |
24 | 18 | (e: TouchEvent<HTMLDivElement> & MouseEvent<HTMLDivElement>): void => { |
25 | 19 | const mouseX = e.touches ? e.touches[0].screenX : e.screenX; |
26 | 20 | setStartPosition(mouseX); |
27 | 21 | setIsResizing(true); |
28 | 22 | if (resizerReference.current) { |
29 | | - const column = resizerReference.current.parentElement!; |
30 | | - setCurrentWidth(column.offsetWidth); |
| 23 | + const columnElement = resizerReference.current.parentElement!; |
| 24 | + setCurrentWidth(columnElement.offsetWidth); |
31 | 25 | } |
32 | | - onStart(); |
| 26 | + columnsStore.setIsResizing(true); |
33 | 27 | }, |
34 | | - [onStart] |
| 28 | + [columnsStore] |
35 | 29 | ); |
36 | 30 | const onEndDrag = useCallback((): void => { |
37 | 31 | if (!isResizing) { |
38 | 32 | return; |
39 | 33 | } |
40 | 34 | setIsResizing(false); |
41 | 35 | setCurrentWidth(0); |
42 | | - onResizeEnds?.(); |
43 | | - }, [onResizeEnds, isResizing]); |
44 | | - const setColumnWidthStable = useEventCallback(setColumnWidth); |
| 36 | + columnsStore.setIsResizing(false); |
| 37 | + }, [columnsStore, isResizing]); |
| 38 | + const setColumnWidthStable = useEventCallback((width: number) => column.setSize(width)); |
45 | 39 | const onMouseMove = useCallback( |
46 | 40 | (e: TouchEvent & MouseEvent & Event): void => { |
47 | 41 | if (!isResizing) { |
|
0 commit comments