Skip to content

Commit f1626d9

Browse files
committed
refactor: rewrite columnreszier to use injection hooks
1 parent 032bba9 commit f1626d9

File tree

2 files changed

+12
-26
lines changed

2 files changed

+12
-26
lines changed

packages/pluggableWidgets/datagrid-web/src/components/ColumnResizer.tsx

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,41 @@
11
import { useEventCallback } from "@mendix/widget-plugin-hooks/useEventCallback";
22
import { MouseEvent, ReactElement, TouchEvent, useCallback, useEffect, useRef, useState } from "react";
3+
import { useColumn, useColumnsStore } from "../model/hooks/injection-hooks";
34

45
export interface ColumnResizerProps {
56
minWidth?: number;
6-
setColumnWidth: (width: number) => void;
7-
onResizeEnds?: () => void;
8-
onResizeStart?: () => void;
97
}
108

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();
1712
const [isResizing, setIsResizing] = useState(false);
1813
const [startPosition, setStartPosition] = useState(0);
1914
const [currentWidth, setCurrentWidth] = useState(0);
2015
const resizerReference = useRef<HTMLDivElement>(null);
21-
const onStart = useEventCallback(onResizeStart);
2216

2317
const onStartDrag = useCallback(
2418
(e: TouchEvent<HTMLDivElement> & MouseEvent<HTMLDivElement>): void => {
2519
const mouseX = e.touches ? e.touches[0].screenX : e.screenX;
2620
setStartPosition(mouseX);
2721
setIsResizing(true);
2822
if (resizerReference.current) {
29-
const column = resizerReference.current.parentElement!;
30-
setCurrentWidth(column.offsetWidth);
23+
const columnElement = resizerReference.current.parentElement!;
24+
setCurrentWidth(columnElement.offsetWidth);
3125
}
32-
onStart();
26+
columnsStore.setIsResizing(true);
3327
},
34-
[onStart]
28+
[columnsStore]
3529
);
3630
const onEndDrag = useCallback((): void => {
3731
if (!isResizing) {
3832
return;
3933
}
4034
setIsResizing(false);
4135
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));
4539
const onMouseMove = useCallback(
4640
(e: TouchEvent & MouseEvent & Event): void => {
4741
if (!isResizing) {

packages/pluggableWidgets/datagrid-web/src/components/GridHeader.tsx

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,7 @@ export function GridHeader(): ReactElement {
2222
<CheckboxColumnHeader key="headers_column_select_all" />
2323
{columns.map(column => (
2424
<ColumnProvider column={column} key={`${column.columnId}`}>
25-
<ColumnContainer
26-
resizer={
27-
<ColumnResizer
28-
onResizeStart={() => columnsStore.setIsResizing(true)}
29-
onResizeEnds={() => columnsStore.setIsResizing(false)}
30-
setColumnWidth={(width: number) => column.setSize(width)}
31-
/>
32-
}
33-
/>
25+
<ColumnContainer resizer={<ColumnResizer />} />
3426
</ColumnProvider>
3527
))}
3628
{columnsHidable && (

0 commit comments

Comments
 (0)