Files
react-native/packages/rn-tester/IntegrationTests/AppEventsTest.js
T
Fabrizio Cucci 086e93d227 Migrate rn-tester/IntegrationTests/AppEventsTest.js to function components (#48699)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/48699

As per title.

Changelog: [Internal]

Reviewed By: rshest

Differential Revision: D68152557

fbshipit-source-id: 9fa6cad408f6fbd3da513623379b864d0c33c63d
2025-01-15 06:11:21 -08:00

87 lines
1.8 KiB
JavaScript

/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
*/
'use strict';
import * as React from 'react';
import {useEffect, useState} from 'react';
import {
NativeAppEventEmitter,
NativeModules,
StyleSheet,
Text,
View,
} from 'react-native';
import deepDiffer from 'react-native/Libraries/Utilities/differ/deepDiffer';
const {TestModule} = NativeModules;
const TEST_PAYLOAD = {foo: 'bar'};
type AppEvent = {
data: Object,
ts: number,
};
type State = {
sent: 'none' | AppEvent,
received: 'none' | AppEvent,
elapsed?: string,
};
function AppEventsTest(): React.Node {
const [state, setState] = useState<State>({
sent: 'none',
received: 'none',
});
useEffect(() => {
const receiveEvent = (event: any) => {
if (deepDiffer(event.data, TEST_PAYLOAD)) {
throw new Error('Received wrong event: ' + JSON.stringify(event));
}
const elapsed = Date.now() - event.ts + 'ms';
setState(prevState => ({
...prevState,
received: event,
elapsed,
}));
TestModule.markTestCompleted();
};
const listener = NativeAppEventEmitter.addListener(
'testEvent',
receiveEvent,
);
const event = {data: TEST_PAYLOAD, ts: Date.now()};
TestModule.sendAppEvent('testEvent', event);
setState(prevState => ({...prevState, sent: event}));
return () => {
listener.remove();
};
}, []);
return (
<View style={styles.container}>
<Text>{JSON.stringify(state, null, ' ')}</Text>
</View>
);
}
const styles = StyleSheet.create({
container: {
margin: 40,
},
});
export default AppEventsTest;