Skip to content

Commit 6143e61

Browse files
committed
refactor: improve native state management
1 parent 856332c commit 6143e61

File tree

10 files changed

+18
-30
lines changed

10 files changed

+18
-30
lines changed

src/cleanup.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
1-
import { clearNativeState } from './native-state';
21
import { clearRenderResult } from './screen';
32

43
type CleanUpFunction = () => void;
54

65
const cleanupQueue = new Set<CleanUpFunction>();
76

87
export default function cleanup() {
9-
clearNativeState();
108
clearRenderResult();
119

1210
cleanupQueue.forEach((fn) => fn());

src/fire-event.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,6 @@ function setNativeStateIfNeeded(element: ReactTestInstance, eventName: string, v
154154
isHostTextInput(element) &&
155155
isTextInputEditable(element)
156156
) {
157-
nativeState?.valueForElement.set(element, value);
157+
nativeState.valueForElement.set(element, value);
158158
}
159159
}

src/helpers/text-input.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export function getTextInputValue(element: ReactTestInstance) {
1717

1818
return (
1919
element.props.value ??
20-
nativeState?.valueForElement.get(element) ??
20+
nativeState.valueForElement.get(element) ??
2121
element.props.defaultValue ??
2222
''
2323
);

src/native-state.ts

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,7 @@ export type NativeState = {
1111
contentOffsetForElement: WeakMap<ReactTestInstance, Point>;
1212
};
1313

14-
export let nativeState: NativeState | null = null;
15-
16-
export function initNativeState(): void {
17-
nativeState = {
18-
valueForElement: new WeakMap(),
19-
contentOffsetForElement: new WeakMap(),
20-
};
21-
}
22-
23-
export function clearNativeState(): void {
24-
nativeState = null;
25-
}
14+
export let nativeState: NativeState = {
15+
valueForElement: new WeakMap(),
16+
contentOffsetForElement: new WeakMap(),
17+
};

src/render.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import { validateStringsRenderedWithinText } from './helpers/string-validation';
1212
import { renderWithAct } from './render-act';
1313
import { setRenderResult } from './screen';
1414
import { getQueriesForElement } from './within';
15-
import { initNativeState } from './native-state';
1615

1716
export interface RenderOptions {
1817
wrapper?: React.ComponentType<any>;
@@ -128,7 +127,6 @@ function buildRenderResult(
128127
});
129128

130129
setRenderResult(result);
131-
initNativeState();
132130

133131
return result;
134132
}

src/user-event/paste.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ export async function paste(
3333
dispatchEvent(element, 'selectionChange', EventBuilder.TextInput.selectionChange(rangeToClear));
3434

3535
// 3. Paste the text
36-
nativeState?.valueForElement.set(element, text);
36+
nativeState.valueForElement.set(element, text);
3737
dispatchEvent(element, 'change', EventBuilder.TextInput.change(text));
3838
dispatchEvent(element, 'changeText', text);
3939

src/user-event/scroll/__tests__/scroll-to.test.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ describe('scrollTo()', () => {
103103
]);
104104
});
105105

106-
test('remembers previous scroll position', async () => {
106+
test('remembers previous scroll offset', async () => {
107107
const { events } = renderScrollViewWithToolkit();
108108
const user = userEvent.setup();
109109

src/user-event/scroll/scroll-to.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,24 +56,24 @@ export async function scrollTo(
5656
options.contentSize?.height ?? 0,
5757
);
5858

59-
const initialPosition = nativeState?.contentOffsetForElement.get(element) ?? { x: 0, y: 0 };
59+
const initialOffset = nativeState.contentOffsetForElement.get(element) ?? { x: 0, y: 0 };
6060
const dragSteps = createScrollSteps(
6161
{ y: options.y, x: options.x },
62-
initialPosition,
62+
initialOffset,
6363
linearInterpolator,
6464
);
6565
await emitDragScrollEvents(this.config, element, dragSteps, options);
6666

67-
const momentumStart = dragSteps.at(-1) ?? initialPosition;
67+
const momentumStart = dragSteps.at(-1) ?? initialOffset;
6868
const momentumSteps = createScrollSteps(
6969
{ y: options.momentumY, x: options.momentumX },
7070
momentumStart,
7171
inertialInterpolator,
7272
);
7373
await emitMomentumScrollEvents(this.config, element, momentumSteps, options);
7474

75-
const finalPosition = momentumSteps.at(-1) ?? dragSteps.at(-1) ?? initialPosition;
76-
nativeState?.contentOffsetForElement.set(element, finalPosition);
75+
const finalOffset = momentumSteps.at(-1) ?? dragSteps.at(-1) ?? initialOffset;
76+
nativeState.contentOffsetForElement.set(element, finalOffset);
7777
}
7878

7979
async function emitDragScrollEvents(

src/user-event/type/type.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ export async function emitTypingEvents(
9595
return;
9696
}
9797

98-
nativeState?.valueForElement.set(element, text);
98+
nativeState.valueForElement.set(element, text);
9999
dispatchEvent(element, 'change', EventBuilder.TextInput.change(text));
100100
dispatchEvent(element, 'changeText', text);
101101

website/docs/12.x/docs/api/events/user-event.mdx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -269,10 +269,10 @@ Each scroll interaction consists of a mandatory drag scroll part, which simulate
269269
270270
### Options {#scroll-to-options}
271271
272-
- `y` - target vertical drag scroll position
273-
- `x` - target horizontal drag scroll position
274-
- `momentumY` - target vertical momentum scroll position
275-
- `momentumX` - target horizontal momentum scroll position
272+
- `y` - target vertical drag scroll offset
273+
- `x` - target horizontal drag scroll offset
274+
- `momentumY` - target vertical momentum scroll offset
275+
- `momentumX` - target horizontal momentum scroll offset
276276
- `contentSize` - passed to `ScrollView` events and enabling `FlatList` updates
277277
- `layoutMeasurement` - passed to `ScrollView` events and enabling `FlatList` updates
278278

0 commit comments

Comments
 (0)