react-native-drawer-layout 3.1.0 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/index.js +8 -9
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/utils/DrawerGestureContext.js +3 -3
- package/lib/commonjs/utils/DrawerGestureContext.js.map +1 -1
- package/lib/commonjs/utils/DrawerProgressContext.js +3 -3
- package/lib/commonjs/utils/DrawerProgressContext.js.map +1 -1
- package/lib/commonjs/utils/useDrawerProgress.js +3 -4
- package/lib/commonjs/utils/useDrawerProgress.js.map +1 -1
- package/lib/commonjs/views/Drawer.js +2 -2
- package/lib/commonjs/views/Drawer.js.map +1 -1
- package/lib/commonjs/views/GestureHandler.android.js.map +1 -1
- package/lib/commonjs/views/GestureHandler.ios.js.map +1 -1
- package/lib/commonjs/views/GestureHandler.js.map +1 -1
- package/lib/commonjs/views/GestureHandlerNative.js +2 -3
- package/lib/commonjs/views/GestureHandlerNative.js.map +1 -1
- package/lib/commonjs/views/legacy/Drawer.js +232 -199
- package/lib/commonjs/views/legacy/Drawer.js.map +1 -1
- package/lib/commonjs/views/legacy/Overlay.js +2 -3
- package/lib/commonjs/views/legacy/Overlay.js.map +1 -1
- package/lib/commonjs/views/modern/Drawer.js +31 -10
- package/lib/commonjs/views/modern/Drawer.js.map +1 -1
- package/lib/commonjs/views/modern/Overlay.js +2 -3
- package/lib/commonjs/views/modern/Overlay.js.map +1 -1
- package/lib/module/index.js +4 -4
- package/lib/module/index.js.map +1 -1
- package/lib/module/utils/DrawerGestureContext.js +1 -1
- package/lib/module/utils/DrawerGestureContext.js.map +1 -1
- package/lib/module/utils/DrawerProgressContext.js +1 -1
- package/lib/module/utils/DrawerProgressContext.js.map +1 -1
- package/lib/module/utils/useDrawerProgress.js +2 -2
- package/lib/module/utils/useDrawerProgress.js.map +1 -1
- package/lib/module/views/Drawer.js +2 -2
- package/lib/module/views/Drawer.js.map +1 -1
- package/lib/module/views/GestureHandler.android.js.map +1 -1
- package/lib/module/views/GestureHandler.ios.js.map +1 -1
- package/lib/module/views/GestureHandler.js.map +1 -1
- package/lib/module/views/GestureHandlerNative.js +1 -1
- package/lib/module/views/GestureHandlerNative.js.map +1 -1
- package/lib/module/views/legacy/Drawer.js +229 -196
- package/lib/module/views/legacy/Drawer.js.map +1 -1
- package/lib/module/views/legacy/Overlay.js +1 -2
- package/lib/module/views/legacy/Overlay.js.map +1 -1
- package/lib/module/views/modern/Drawer.js +29 -8
- package/lib/module/views/modern/Drawer.js.map +1 -1
- package/lib/module/views/modern/Overlay.js +1 -2
- package/lib/module/views/modern/Overlay.js.map +1 -1
- package/lib/typescript/src/index.d.ts +4 -4
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/types.d.ts +20 -0
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/lib/typescript/src/utils/DrawerGestureContext.d.ts +1 -2
- package/lib/typescript/src/utils/DrawerGestureContext.d.ts.map +1 -1
- package/lib/typescript/src/utils/DrawerProgressContext.d.ts +1 -2
- package/lib/typescript/src/utils/DrawerProgressContext.d.ts.map +1 -1
- package/lib/typescript/src/utils/useDrawerProgress.d.ts +1 -1
- package/lib/typescript/src/utils/useDrawerProgress.d.ts.map +1 -1
- package/lib/typescript/src/views/Drawer.d.ts +1 -1
- package/lib/typescript/src/views/Drawer.d.ts.map +1 -1
- package/lib/typescript/src/views/legacy/Drawer.d.ts +1 -1
- package/lib/typescript/src/views/legacy/Drawer.d.ts.map +1 -1
- package/lib/typescript/src/views/legacy/Overlay.d.ts +1 -2
- package/lib/typescript/src/views/legacy/Overlay.d.ts.map +1 -1
- package/lib/typescript/src/views/modern/Drawer.d.ts +1 -1
- package/lib/typescript/src/views/modern/Drawer.d.ts.map +1 -1
- package/lib/typescript/src/views/modern/Overlay.d.ts +1 -2
- package/lib/typescript/src/views/modern/Overlay.d.ts.map +1 -1
- package/package.json +6 -3
- package/src/index.tsx +4 -4
- package/src/types.tsx +25 -0
- package/src/utils/DrawerGestureContext.tsx +2 -1
- package/src/utils/DrawerProgressContext.tsx +1 -1
- package/src/utils/useDrawerProgress.tsx +2 -2
- package/src/views/Drawer.tsx +4 -4
- package/src/views/GestureHandlerNative.tsx +1 -1
- package/src/views/legacy/Drawer.tsx +24 -3
- package/src/views/legacy/Overlay.tsx +1 -3
- package/src/views/modern/Drawer.tsx +55 -16
- package/src/views/modern/Overlay.tsx +1 -3
|
@@ -17,6 +17,7 @@ import Animated, {
|
|
|
17
17
|
useSharedValue,
|
|
18
18
|
withSpring,
|
|
19
19
|
} from 'react-native-reanimated';
|
|
20
|
+
import useLatestCallback from 'use-latest-callback';
|
|
20
21
|
|
|
21
22
|
import {
|
|
22
23
|
DEFAULT_DRAWER_WIDTH,
|
|
@@ -25,13 +26,13 @@ import {
|
|
|
25
26
|
SWIPE_MIN_VELOCITY,
|
|
26
27
|
} from '../../constants';
|
|
27
28
|
import type { DrawerProps } from '../../types';
|
|
28
|
-
import DrawerProgressContext from '../../utils/DrawerProgressContext';
|
|
29
|
+
import { DrawerProgressContext } from '../../utils/DrawerProgressContext';
|
|
29
30
|
import {
|
|
30
31
|
GestureState,
|
|
31
32
|
PanGestureHandler,
|
|
32
33
|
PanGestureHandlerGestureEvent,
|
|
33
34
|
} from '../GestureHandler';
|
|
34
|
-
import Overlay from './Overlay';
|
|
35
|
+
import { Overlay } from './Overlay';
|
|
35
36
|
|
|
36
37
|
const minmax = (value: number, start: number, end: number) => {
|
|
37
38
|
'worklet';
|
|
@@ -43,7 +44,7 @@ type Props = DrawerProps & {
|
|
|
43
44
|
layout: { width: number };
|
|
44
45
|
};
|
|
45
46
|
|
|
46
|
-
export
|
|
47
|
+
export function Drawer({
|
|
47
48
|
layout,
|
|
48
49
|
drawerPosition,
|
|
49
50
|
drawerStyle,
|
|
@@ -53,6 +54,11 @@ export default function Drawer({
|
|
|
53
54
|
keyboardDismissMode,
|
|
54
55
|
onClose,
|
|
55
56
|
onOpen,
|
|
57
|
+
onGestureStart,
|
|
58
|
+
onGestureCancel,
|
|
59
|
+
onGestureEnd,
|
|
60
|
+
onTransitionStart,
|
|
61
|
+
onTransitionEnd,
|
|
56
62
|
open,
|
|
57
63
|
overlayStyle,
|
|
58
64
|
overlayAccessibilityLabel,
|
|
@@ -132,13 +138,15 @@ export default function Drawer({
|
|
|
132
138
|
}
|
|
133
139
|
};
|
|
134
140
|
|
|
135
|
-
const
|
|
141
|
+
const onGestureBegin = () => {
|
|
142
|
+
onGestureStart?.();
|
|
136
143
|
startInteraction();
|
|
137
144
|
hideKeyboard();
|
|
138
145
|
hideStatusBar(true);
|
|
139
146
|
};
|
|
140
147
|
|
|
141
148
|
const onGestureFinish = () => {
|
|
149
|
+
onGestureEnd?.();
|
|
142
150
|
endInteraction();
|
|
143
151
|
};
|
|
144
152
|
|
|
@@ -155,23 +163,42 @@ export default function Drawer({
|
|
|
155
163
|
const translationX = useSharedValue(getDrawerTranslationX(open));
|
|
156
164
|
const gestureState = useSharedValue<GestureState>(GestureState.UNDETERMINED);
|
|
157
165
|
|
|
166
|
+
const handleAnimationStart = useLatestCallback((open: boolean) => {
|
|
167
|
+
onTransitionStart?.(!open);
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
const handleAnimationEnd = useLatestCallback(
|
|
171
|
+
(open: boolean, finished?: boolean) => {
|
|
172
|
+
if (!finished) return;
|
|
173
|
+
onTransitionEnd?.(!open);
|
|
174
|
+
}
|
|
175
|
+
);
|
|
176
|
+
|
|
158
177
|
const toggleDrawer = React.useCallback(
|
|
159
178
|
(open: boolean, velocity?: number) => {
|
|
160
179
|
'worklet';
|
|
161
180
|
|
|
162
181
|
const translateX = getDrawerTranslationX(open);
|
|
163
182
|
|
|
183
|
+
if (velocity === undefined) {
|
|
184
|
+
runOnJS(handleAnimationStart)(open);
|
|
185
|
+
}
|
|
186
|
+
|
|
164
187
|
touchStartX.value = 0;
|
|
165
188
|
touchX.value = 0;
|
|
166
|
-
translationX.value = withSpring(
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
189
|
+
translationX.value = withSpring(
|
|
190
|
+
translateX,
|
|
191
|
+
{
|
|
192
|
+
velocity,
|
|
193
|
+
stiffness: 1000,
|
|
194
|
+
damping: 500,
|
|
195
|
+
mass: 3,
|
|
196
|
+
overshootClamping: true,
|
|
197
|
+
restDisplacementThreshold: 0.01,
|
|
198
|
+
restSpeedThreshold: 0.01,
|
|
199
|
+
},
|
|
200
|
+
(finished) => runOnJS(handleAnimationEnd)(open, finished)
|
|
201
|
+
);
|
|
175
202
|
|
|
176
203
|
if (open) {
|
|
177
204
|
runOnJS(onOpen)();
|
|
@@ -179,7 +206,16 @@ export default function Drawer({
|
|
|
179
206
|
runOnJS(onClose)();
|
|
180
207
|
}
|
|
181
208
|
},
|
|
182
|
-
[
|
|
209
|
+
[
|
|
210
|
+
getDrawerTranslationX,
|
|
211
|
+
handleAnimationEnd,
|
|
212
|
+
handleAnimationStart,
|
|
213
|
+
onClose,
|
|
214
|
+
onOpen,
|
|
215
|
+
touchStartX,
|
|
216
|
+
touchX,
|
|
217
|
+
translationX,
|
|
218
|
+
]
|
|
183
219
|
);
|
|
184
220
|
|
|
185
221
|
React.useEffect(() => toggleDrawer(open), [open, toggleDrawer]);
|
|
@@ -194,17 +230,20 @@ export default function Drawer({
|
|
|
194
230
|
gestureState.value = event.state;
|
|
195
231
|
touchStartX.value = event.x;
|
|
196
232
|
},
|
|
233
|
+
onCancel: () => {
|
|
234
|
+
runOnJS(() => onGestureCancel?.())();
|
|
235
|
+
},
|
|
197
236
|
onActive: (event, ctx) => {
|
|
198
237
|
touchX.value = event.x;
|
|
199
238
|
translationX.value = ctx.startX + event.translationX;
|
|
200
239
|
gestureState.value = event.state;
|
|
201
240
|
|
|
202
241
|
// onStart will _always_ be called, even when the activation
|
|
203
|
-
// criteria isn't met yet. This makes sure
|
|
242
|
+
// criteria isn't met yet. This makes sure onGestureBegin is only
|
|
204
243
|
// called when the criteria is really met.
|
|
205
244
|
if (!ctx.hasCalledOnStart) {
|
|
206
245
|
ctx.hasCalledOnStart = true;
|
|
207
|
-
runOnJS(
|
|
246
|
+
runOnJS(onGestureBegin)();
|
|
208
247
|
}
|
|
209
248
|
},
|
|
210
249
|
onEnd: (event) => {
|
|
@@ -13,7 +13,7 @@ type Props = React.ComponentProps<typeof Animated.View> & {
|
|
|
13
13
|
accessibilityLabel?: string;
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
-
const Overlay = React.forwardRef(function Overlay(
|
|
16
|
+
export const Overlay = React.forwardRef(function Overlay(
|
|
17
17
|
{
|
|
18
18
|
progress,
|
|
19
19
|
onPress,
|
|
@@ -78,5 +78,3 @@ const styles = StyleSheet.create({
|
|
|
78
78
|
pointerEvents: 'auto',
|
|
79
79
|
},
|
|
80
80
|
});
|
|
81
|
-
|
|
82
|
-
export default Overlay;
|