Skip to content

Commit 1df7e30

Browse files
authored
Add missing types (#3731)
## Description While writing examples I noticed that some types would be useful. This includes types for each gesture and their events. This PR adds those types. **Important**: The v3 gesture types take over the names of old v2 types, the v2 types are getting a `Legacy` prefix. This change will have to be added to the migration guide. Added this as a [task](https://github.com/orgs/software-mansion/projects/31/views/1?pane=issue&itemId=132253302) to roadmap. ## Test plan `yarn lint-js`
1 parent a724f16 commit 1df7e30

File tree

14 files changed

+256
-35
lines changed

14 files changed

+256
-35
lines changed

apps/basic-example/src/NativeDetector.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@ import { Animated, Button, useAnimatedValue } from 'react-native';
33
import {
44
GestureHandlerRootView,
55
NativeDetector,
6-
SingleGestureName,
7-
useGesture,
6+
usePan,
87
} from 'react-native-gesture-handler';
98

109
export default function App() {
@@ -18,7 +17,7 @@ export default function App() {
1817
}
1918
);
2019

21-
const gesture = useGesture(SingleGestureName.Pan, {
20+
const gesture = usePan({
2221
onUpdate: event,
2322
});
2423

apps/common-app/src/new_api/drag_n_drop/Draggable.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import {
44
PanGestureHandlerEventPayload,
55
Gesture,
66
GestureDetector,
7-
PanGesture,
8-
TapGesture,
7+
LegacyPanGesture,
8+
LegacyTapGesture,
99
} from 'react-native-gesture-handler';
1010
import Animated, { runOnJS, useAnimatedStyle } from 'react-native-reanimated';
1111

@@ -22,8 +22,8 @@ interface DraggableProps {
2222
isActive: boolean;
2323
translation: AnimatedPostion;
2424
position: { x: number; y: number };
25-
dragGesture: PanGesture;
26-
tapEndGesture: TapGesture;
25+
dragGesture: LegacyPanGesture;
26+
tapEndGesture: LegacyTapGesture;
2727
tileSize: number;
2828
rowGap: number;
2929
columnGap: number;

packages/react-native-gesture-handler/src/__tests__/Events.test.tsx

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ import {
1313
Gesture,
1414
GestureDetector,
1515
State,
16-
PanGesture,
17-
TapGesture,
16+
LegacyPanGesture,
17+
LegacyTapGesture,
1818
} from '../index';
1919
import { useAnimatedGestureHandler } from 'react-native-reanimated';
2020
import { fireGestureHandler, getByGestureTestId } from '../jestUtils';
@@ -300,7 +300,7 @@ describe('Using RNGH v2 gesture API', () => {
300300
<RacingHandlers tapHandlers={tapHandlers} panHandlers={panHandlers} />
301301
);
302302

303-
fireGestureHandler<PanGesture>(getByGestureTestId('pan'), [
303+
fireGestureHandler<LegacyPanGesture>(getByGestureTestId('pan'), [
304304
{ state: State.BEGAN },
305305
{ state: State.ACTIVE },
306306
{ state: State.END },
@@ -315,7 +315,7 @@ describe('Using RNGH v2 gesture API', () => {
315315
test('sends events with additional data to handlers', () => {
316316
const panHandlers = mockedEventHandlers();
317317
render(<SingleHandler handlers={panHandlers} treatStartAsUpdate />);
318-
fireGestureHandler<PanGesture>(getByGestureTestId('pan'), [
318+
fireGestureHandler<LegacyPanGesture>(getByGestureTestId('pan'), [
319319
{ state: State.BEGAN, translationX: 0 },
320320
{ state: State.ACTIVE, translationX: 10 },
321321
{ translationX: 20 },
@@ -358,7 +358,7 @@ describe('Event list validation', () => {
358358
const panHandlers = mockedEventHandlers();
359359
render(<SingleHandler handlers={panHandlers} />);
360360
expect(() => {
361-
fireGestureHandler<PanGesture>(getByGestureTestId('pan'), [
361+
fireGestureHandler<LegacyPanGesture>(getByGestureTestId('pan'), [
362362
{ oldState: State.UNDETERMINED, state: State.BEGAN, x: 0, y: 10 },
363363
{ oldState: State.UNDETERMINED, state: State.ACTIVE, x: 1, y: 11 },
364364
]);
@@ -372,7 +372,7 @@ describe('Event list validation', () => {
372372
(lastState) => {
373373
const panHandlers = mockedEventHandlers();
374374
render(<SingleHandler handlers={panHandlers} />);
375-
fireGestureHandler<PanGesture>(getByGestureTestId('pan'), [
375+
fireGestureHandler<LegacyPanGesture>(getByGestureTestId('pan'), [
376376
{ state: State.BEGAN },
377377
{ state: State.ACTIVE },
378378
{ state: lastState },
@@ -452,7 +452,7 @@ describe('Filling event list with defaults', () => {
452452
test('fills missing ACTIVE states', () => {
453453
const panHandlers = mockedEventHandlers();
454454
render(<RacingTapAndPan handlers={panHandlers} treatStartAsUpdate />);
455-
fireGestureHandler<PanGesture>(getByGestureTestId('pan'), [
455+
fireGestureHandler<LegacyPanGesture>(getByGestureTestId('pan'), [
456456
{ state: State.BEGAN, x: 0, y: 10 },
457457
{ state: State.ACTIVE, x: 1, y: 11 },
458458
{ x: 2, y: 12 },
@@ -469,15 +469,15 @@ describe('Filling event list with defaults', () => {
469469
test('fills BEGIN and END events for discrete handlers', () => {
470470
const handlers = mockedEventHandlers();
471471
render(<RacingTapAndPan handlers={handlers} treatStartAsUpdate />);
472-
fireGestureHandler<TapGesture>(getByGestureTestId('tap'), [{ x: 5 }]);
472+
fireGestureHandler<LegacyTapGesture>(getByGestureTestId('tap'), [{ x: 5 }]);
473473
expect(handlers.begin).toHaveBeenCalledTimes(1);
474474
expect(handlers.end).toHaveBeenCalledTimes(1);
475475
});
476476

477477
test('with FAILED event, fills BEGIN event for discrete handlers', () => {
478478
const handlers = mockedEventHandlers();
479479
render(<RacingTapAndPan handlers={handlers} treatStartAsUpdate />);
480-
fireGestureHandler<TapGesture>(getByGestureTestId('tap'), [
480+
fireGestureHandler<LegacyTapGesture>(getByGestureTestId('tap'), [
481481
{ state: State.FAILED },
482482
]);
483483
expect(handlers.begin).toHaveBeenCalledTimes(1);
@@ -488,7 +488,9 @@ describe('Filling event list with defaults', () => {
488488
test('uses event data from first event in filled BEGIN, ACTIVE events', () => {
489489
const handlers = mockedEventHandlers();
490490
render(<RacingTapAndPan handlers={handlers} treatStartAsUpdate />);
491-
fireGestureHandler<PanGesture>(getByGestureTestId('pan'), [{ x: 120 }]);
491+
fireGestureHandler<LegacyPanGesture>(getByGestureTestId('pan'), [
492+
{ x: 120 },
493+
]);
492494
expect(handlers.begin).toHaveBeenCalledWith(
493495
expect.objectContaining({ x: 120 })
494496
);
@@ -501,7 +503,7 @@ describe('Filling event list with defaults', () => {
501503
test('uses event data from last event in filled END events', () => {
502504
const handlers = mockedEventHandlers();
503505
render(<RacingTapAndPan handlers={handlers} treatStartAsUpdate />);
504-
fireGestureHandler<PanGesture>(getByGestureTestId('pan'), [
506+
fireGestureHandler<LegacyPanGesture>(getByGestureTestId('pan'), [
505507
{ x: 120, state: State.FAILED },
506508
]);
507509
expect(handlers.begin).toHaveBeenCalledTimes(1);
@@ -515,7 +517,7 @@ describe('Filling event list with defaults', () => {
515517
test('uses event data filled events', () => {
516518
const handlers = mockedEventHandlers();
517519
render(<RacingTapAndPan handlers={handlers} treatStartAsUpdate />);
518-
fireGestureHandler<PanGesture>(getByGestureTestId('pan'), [
520+
fireGestureHandler<LegacyPanGesture>(getByGestureTestId('pan'), [
519521
{ x: 5, y: 15 },
520522
{ x: 6, y: 16 },
521523
{ x: 7, y: 17 },
@@ -533,15 +535,15 @@ describe('Filling event list with defaults', () => {
533535
test("fills BEGIN and END events when they're not present, for discrete handlers", () => {
534536
const handlers = mockedEventHandlers();
535537
render(<RacingTapAndPan handlers={handlers} treatStartAsUpdate />);
536-
fireGestureHandler<TapGesture>(getByGestureTestId('tap'));
538+
fireGestureHandler<LegacyTapGesture>(getByGestureTestId('tap'));
537539
expect(handlers.begin).toHaveBeenCalledTimes(1);
538540
expect(handlers.end).toHaveBeenCalledTimes(1);
539541
});
540542

541543
test("fills BEGIN, ACTIVE and END events when they're not present, for continuous handlers", () => {
542544
const handlers = mockedEventHandlers();
543545
render(<RacingTapAndPan handlers={handlers} treatStartAsUpdate />);
544-
fireGestureHandler<PanGesture>(getByGestureTestId('pan'));
546+
fireGestureHandler<LegacyPanGesture>(getByGestureTestId('pan'));
545547
expect(handlers.begin).toHaveBeenCalledTimes(1);
546548
expect(handlers.active).toHaveBeenCalledTimes(1);
547549
expect(handlers.end).toHaveBeenCalledTimes(1);

packages/react-native-gesture-handler/src/index.ts

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -54,20 +54,20 @@ export { default as createNativeWrapper } from './handlers/createNativeWrapper';
5454
export type { NativeViewGestureHandlerProps } from './handlers/NativeViewGestureHandler';
5555
export { GestureDetector } from './handlers/gestures/GestureDetector';
5656
export { GestureObjects as Gesture } from './handlers/gestures/gestureObjects';
57-
export type { TapGestureType as TapGesture } from './handlers/gestures/tapGesture';
58-
export type { PanGestureType as PanGesture } from './handlers/gestures/panGesture';
59-
export type { FlingGestureType as FlingGesture } from './handlers/gestures/flingGesture';
60-
export type { LongPressGestureType as LongPressGesture } from './handlers/gestures/longPressGesture';
61-
export type { PinchGestureType as PinchGesture } from './handlers/gestures/pinchGesture';
62-
export type { RotationGestureType as RotationGesture } from './handlers/gestures/rotationGesture';
63-
export type { ForceTouchGestureType as ForceTouchGesture } from './handlers/gestures/forceTouchGesture';
64-
export type { ManualGestureType as ManualGesture } from './handlers/gestures/manualGesture';
65-
export type { HoverGestureType as HoverGesture } from './handlers/gestures/hoverGesture';
57+
export type { TapGestureType as LegacyTapGesture } from './handlers/gestures/tapGesture';
58+
export type { PanGestureType as LegacyPanGesture } from './handlers/gestures/panGesture';
59+
export type { FlingGestureType as LegacyFlingGesture } from './handlers/gestures/flingGesture';
60+
export type { LongPressGestureType as LegacyLongPressGesture } from './handlers/gestures/longPressGesture';
61+
export type { PinchGestureType as LegacyPinchGesture } from './handlers/gestures/pinchGesture';
62+
export type { RotationGestureType as LegacyRotationGesture } from './handlers/gestures/rotationGesture';
63+
export type { ForceTouchGestureType as LegacyForceTouchGesture } from './handlers/gestures/forceTouchGesture';
64+
export type { ManualGestureType as LegacyManualGesture } from './handlers/gestures/manualGesture';
65+
export type { HoverGestureType as LegacyHoverGesture } from './handlers/gestures/hoverGesture';
6666
export type {
67-
ComposedGestureType as ComposedGesture,
68-
RaceGestureType as RaceGesture,
69-
SimultaneousGestureType as SimultaneousGesture,
70-
ExclusiveGestureType as ExclusiveGesture,
67+
ComposedGestureType as LegacyComposedGesture,
68+
RaceGestureType as LegacyRaceGesture,
69+
SimultaneousGestureType as LegacySimultaneousGesture,
70+
ExclusiveGestureType as LegacyExclusiveGesture,
7171
} from './handlers/gestures/gestureComposition';
7272
export type { GestureStateManagerType as GestureStateManager } from './handlers/gestures/gestureStateManager';
7373
export { NativeViewGestureHandler } from './handlers/NativeViewGestureHandler';
@@ -157,7 +157,8 @@ export { LogicDetector } from './v3/LogicDetector';
157157
export * from './v3/hooks/useGesture';
158158
export * from './v3/hooks/relations';
159159

160-
export { SingleGestureName } from './v3/types';
160+
export type { ComposedGesture } from './v3/types';
161+
export type { GestureTouchEvent as SingleGestureTouchEvent } from './handlers/gestureHandlerCommon';
161162

162163
export * from './v3/hooks/gestures';
163164

packages/react-native-gesture-handler/src/v3/hooks/gestures/fling/useFling.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
import {
22
BaseGestureConfig,
33
ExcludeInternalConfigProps,
4+
SingleGesture,
45
SingleGestureName,
56
WithSharedValue,
7+
GestureStateChangeEvent,
8+
GestureUpdateEvent,
69
} from '../../../types';
710
import { useGesture } from '../../useGesture';
811
import { cloneConfig } from '../../utils';
@@ -32,3 +35,12 @@ export function useFling(config: FlingGestureConfig) {
3235

3336
return useGesture(SingleGestureName.Fling, flingConfig);
3437
}
38+
39+
export type FlingGestureStateChangeEvent =
40+
GestureStateChangeEvent<FlingHandlerData>;
41+
export type FlingGestureUpdateEvent = GestureUpdateEvent<FlingHandlerData>;
42+
43+
export type FlingGesture = SingleGesture<
44+
FlingHandlerData,
45+
FlingGestureProperties
46+
>;

packages/react-native-gesture-handler/src/v3/hooks/gestures/hover/useHover.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@ import { HoverEffect } from '../../../../handlers/gestures/hoverGesture';
33
import {
44
BaseGestureConfig,
55
ExcludeInternalConfigProps,
6+
SingleGesture,
67
HandlerData,
78
SingleGestureName,
89
WithSharedValue,
10+
GestureStateChangeEvent,
11+
GestureUpdateEvent,
912
} from '../../../types';
1013
import { useGesture } from '../../useGesture';
1114
import { cloneConfig, getChangeEventCalculator } from '../../utils';
@@ -54,3 +57,12 @@ export function useHover(config: HoverGestureConfig) {
5457

5558
return useGesture(SingleGestureName.Hover, hoverConfig);
5659
}
60+
61+
export type HoverGestureStateChangeEvent =
62+
GestureStateChangeEvent<HoverHandlerData>;
63+
export type HoverGestureUpdateEvent = GestureUpdateEvent<HoverHandlerData>;
64+
65+
export type HoverGesture = SingleGesture<
66+
HoverHandlerData,
67+
HoverGestureProperties
68+
>;
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,140 @@
1+
import type {
2+
FlingGestureStateChangeEvent,
3+
FlingGestureUpdateEvent,
4+
FlingGesture,
5+
} from './fling/useFling';
6+
import type {
7+
HoverGestureStateChangeEvent,
8+
HoverGestureUpdateEvent,
9+
HoverGesture,
10+
} from './hover/useHover';
11+
import type {
12+
LongPressGestureStateChangeEvent,
13+
LongPressGestureUpdateEvent,
14+
LongPressGesture,
15+
} from './longPress/useLongPress';
16+
import type {
17+
ManualGestureStateChangeEvent,
18+
ManualGestureUpdateEvent,
19+
ManualGesture,
20+
} from './manual/useManual';
21+
import type {
22+
NativeGestureStateChangeEvent,
23+
NativeGestureUpdateEvent,
24+
NativeGesture,
25+
} from './native/useNative';
26+
import type {
27+
PanGestureStateChangeEvent,
28+
PanGestureUpdateEvent,
29+
PanGesture,
30+
} from './pan/usePan';
31+
import type {
32+
PinchGestureStateChangeEvent,
33+
PinchGestureUpdateEvent,
34+
PinchGesture,
35+
} from './pinch/usePinch';
36+
import type {
37+
RotationGestureStateChangeEvent,
38+
RotationGestureUpdateEvent,
39+
RotationGesture,
40+
} from './rotation/useRotation';
41+
import type {
42+
TapGestureStateChangeEvent,
43+
TapGestureUpdateEvent,
44+
TapGesture,
45+
} from './tap/useTap';
46+
147
export type { TapGestureConfig } from './tap/useTap';
48+
export type { TapGesture, TapGestureStateChangeEvent, TapGestureUpdateEvent };
249
export { useTap } from './tap/useTap';
350

451
export type { FlingGestureConfig } from './fling/useFling';
52+
export type {
53+
FlingGesture,
54+
FlingGestureStateChangeEvent,
55+
FlingGestureUpdateEvent,
56+
};
557
export { useFling } from './fling/useFling';
658

759
export type { LongPressGestureConfig } from './longPress/useLongPress';
60+
export type {
61+
LongPressGesture,
62+
LongPressGestureStateChangeEvent,
63+
LongPressGestureUpdateEvent,
64+
};
865
export { useLongPress } from './longPress/useLongPress';
966

1067
export type { PinchGestureConfig } from './pinch/usePinch';
68+
export type {
69+
PinchGesture,
70+
PinchGestureStateChangeEvent,
71+
PinchGestureUpdateEvent,
72+
};
1173
export { usePinch } from './pinch/usePinch';
1274

1375
export type { RotationGestureConfig } from './rotation/useRotation';
76+
export type {
77+
RotationGesture,
78+
RotationGestureStateChangeEvent,
79+
RotationGestureUpdateEvent,
80+
};
1481
export { useRotation } from './rotation/useRotation';
1582

1683
export type { HoverGestureConfig } from './hover/useHover';
84+
export type {
85+
HoverGesture,
86+
HoverGestureStateChangeEvent,
87+
HoverGestureUpdateEvent,
88+
};
1789
export { useHover } from './hover/useHover';
1890

1991
export type { ManualGestureConfig } from './manual/useManual';
92+
export type {
93+
ManualGesture,
94+
ManualGestureStateChangeEvent,
95+
ManualGestureUpdateEvent,
96+
};
2097
export { useManual } from './manual/useManual';
2198

2299
export type { NativeViewGestureConfig } from './native/useNative';
100+
export type {
101+
NativeGesture,
102+
NativeGestureStateChangeEvent,
103+
NativeGestureUpdateEvent,
104+
};
23105
export { useNative } from './native/useNative';
24106

25107
export type { PanGestureConfig } from './pan/usePan';
108+
export type { PanGesture, PanGestureStateChangeEvent, PanGestureUpdateEvent };
26109
export { usePan } from './pan/usePan';
110+
111+
export type SingleGesture =
112+
| TapGesture
113+
| FlingGesture
114+
| LongPressGesture
115+
| PinchGesture
116+
| RotationGesture
117+
| HoverGesture
118+
| ManualGesture
119+
| NativeGesture
120+
| PanGesture;
121+
122+
export type SingleGestureStateChangeEvent =
123+
| TapGestureStateChangeEvent
124+
| FlingGestureStateChangeEvent
125+
| LongPressGestureStateChangeEvent
126+
| RotationGestureStateChangeEvent
127+
| HoverGestureStateChangeEvent
128+
| ManualGestureStateChangeEvent
129+
| NativeGestureStateChangeEvent
130+
| PanGestureStateChangeEvent;
131+
132+
export type SingleGestureUpdateEvent =
133+
| TapGestureUpdateEvent
134+
| FlingGestureUpdateEvent
135+
| LongPressGestureUpdateEvent
136+
| RotationGestureUpdateEvent
137+
| HoverGestureUpdateEvent
138+
| ManualGestureUpdateEvent
139+
| NativeGestureUpdateEvent
140+
| PanGestureUpdateEvent;

0 commit comments

Comments
 (0)