Skip to content

Commit bf9ccdb

Browse files
Navigation drawer issue 432 (#433)
* feat(Drawer): add the 'event' argument to the 'onResize' prop (#432) * fix(Drawer): add a type specifier for import (#432)
1 parent 7a25d9d commit bf9ccdb

File tree

2 files changed

+16
-9
lines changed

2 files changed

+16
-9
lines changed

src/components/Drawer/Drawer.tsx

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,12 @@ import {CSSTransition, Transition} from 'react-transition-group';
77

88
import {block} from '../utils/cn';
99

10-
import {type DrawerDirection, useResizableDrawerItem} from './utils';
10+
import {
11+
type DrawerDirection,
12+
type OnResizeContinueHandler,
13+
type OnResizeHandler,
14+
useResizableDrawerItem,
15+
} from './utils';
1116

1217
import './Drawer.scss';
1318

@@ -53,15 +58,16 @@ export interface DrawerItemProps {
5358
/**
5459
* Called at the end of resizing. Can be used to save the new width.
5560
* @param width The new width of the drawer item
61+
* @param event The original event
5662
*/
57-
onResize?: (width: number) => void;
63+
onResize?: OnResizeHandler;
5864

5965
/**
6066
* Callback function called each time when the drawer item is resizing.
6167
* Do not use it to store the new width for DrawerItem `width` prop. Use `onResize` instead.
6268
* @param width The new width of the drawer item
6369
*/
64-
onResizeContinue?: (width: number) => void;
70+
onResizeContinue?: OnResizeContinueHandler;
6571

6672
/** The minimum width of the resizable drawer item */
6773
minResizeWidth?: number;

src/components/Drawer/utils.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ export const DRAWER_ITEM_MAX_RESIZE_WIDTH = 800;
55
export const DRAWER_ITEM_INITIAL_RESIZE_WIDTH = 400;
66

77
export type DrawerDirection = 'right' | 'left' | 'top' | 'bottom';
8-
export type OnResizeHandler = (width: number) => void;
8+
export type OnResizeHandler = (width: number, event: MouseEvent | TouchEvent) => void;
9+
export type OnResizeContinueHandler = (width: number) => void;
910

1011
function getEventClientPosition(
1112
e: MouseEvent | TouchEvent | React.MouseEvent | React.TouchEvent,
@@ -23,7 +24,7 @@ function getEventClientPosition(
2324
export interface UseResizeHandlersParams {
2425
onStart: () => void;
2526
onMove: (delta: number) => void;
26-
onEnd: (delta: number) => void;
27+
onEnd: (delta: number, event: MouseEvent | TouchEvent) => void;
2728
direction?: 'horizontal' | 'vertical';
2829
}
2930

@@ -69,7 +70,7 @@ export function useResizeHandlers({
6970
const current = getEventClientPosition(e, direction);
7071
const delta = initialPosition.current - current;
7172

72-
onEnd(delta);
73+
onEnd(delta, e);
7374
},
7475
[handleMove, disableSelect, direction, onEnd],
7576
);
@@ -114,7 +115,7 @@ export interface UseResizableDrawerItemParams {
114115
maxResizeWidth?: number;
115116
onResizeStart?: VoidFunction;
116117
onResize?: OnResizeHandler;
117-
onResizeContinue?: OnResizeHandler;
118+
onResizeContinue?: OnResizeContinueHandler;
118119
}
119120

120121
export function useResizableDrawerItem(params: UseResizableDrawerItemParams) {
@@ -163,11 +164,11 @@ export function useResizableDrawerItem(params: UseResizableDrawerItemParams) {
163164
);
164165

165166
const onEnd = React.useCallback(
166-
(delta: number) => {
167+
(delta: number, event: MouseEvent | TouchEvent) => {
167168
const newWidth = getResizedWidth(delta);
168169
setIsResizing(false);
169170
setInternalWidth(newWidth);
170-
onResize?.(newWidth);
171+
onResize?.(newWidth, event);
171172
},
172173
[getResizedWidth, onResize],
173174
);

0 commit comments

Comments
 (0)