/** * 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 strict-local */ 'use strict'; const BatchedBridge = require('react-native/Libraries/BatchedBridge/BatchedBridge'); const React = require('react'); const renderApplication = require('react-native/Libraries/ReactNative/renderApplication'); const {StyleSheet, Text, View} = require('react-native'); import type {RootTag} from 'react-native/Libraries/Types/RootTagTypes'; type FlexTestAppProps = $ReadOnly<{||}>; class FlexTestApp extends React.Component { render() { return ( ); } } const FlexTestAppStyles = StyleSheet.create({ container: { width: 200, height: 200, flexDirection: 'row', }, child: { flex: 1, }, bgRed: { backgroundColor: '#ff0000', }, bgBlue: { backgroundColor: '#0000ff', }, }); type FlexWithTextProps = $ReadOnly<{||}>; class FlexWithText extends React.Component { render() { return ( Hello World ); } } const FlexWithTextStyles = StyleSheet.create({ container: { flexDirection: 'column', margin: 20, }, row: { flexDirection: 'row', alignItems: 'flex-end', height: 300, }, inner: { flex: 1, margin: 10, }, }); type AbsolutePositionTestAppProps = $ReadOnly<{||}>; class AbsolutePositionTestApp extends React.Component { render() { return ( ); } } const AbsolutePositionTestAppStyles = StyleSheet.create({ absolute: { position: 'absolute', top: 15, left: 10, width: 50, height: 60, }, }); type AbsolutePositionBottomRightTestAppProps = $ReadOnly<{||}>; class AbsolutePositionBottomRightTestApp extends React.Component { render() { return ( ); } } const AbsolutePositionBottomRightTestAppStyles = StyleSheet.create({ container: { width: 100, height: 100, }, absolute: { position: 'absolute', bottom: 15, right: 10, width: 50, height: 60, }, }); type CenteredTextViewProps = $ReadOnly<{| text?: ?string, |}>; class CenteredTextView extends React.Component { render() { return ( {this.props.text} ); } } const CenteredTextViewStyles = StyleSheet.create({ parent: { width: 200, height: 100, backgroundColor: '#aa3311', justifyContent: 'center', alignItems: 'center', }, text: { fontSize: 15, color: '#672831', }, }); let flushUpdatePositionInList: null | (() => void) = null; type UpdatePositionInListTestAppProps = $ReadOnly<{||}>; type UpdatePositionInListTestAppState = {| active: boolean, |}; class UpdatePositionInListTestApp extends React.Component< UpdatePositionInListTestAppProps, UpdatePositionInListTestAppState, > { state = { active: false, }; /* $FlowFixMe[missing-local-annot] The type annotation(s) required by Flow's * LTI update could not be added via codemod */ constructor(...args) { super(...args); flushUpdatePositionInList = () => this.setState({active: true}); } render() { return ( ); } } const UpdatePositionInListTestAppStyles = StyleSheet.create({ element: { height: 10, }, active: { height: 50, }, }); /** * This is a workaround for the following flow problem: * * const emptyObject: {||} = {}; // Raises error * * @see https://github.com/facebook/flow/issues/2977 */ const emptyExactProps = Object.freeze({}); const UIManagerTestModule = { renderFlexTestApplication(rootTag: RootTag) { renderApplication(FlexTestApp, emptyExactProps, rootTag); }, renderFlexWithTextApplication(rootTag: RootTag) { renderApplication(FlexWithText, emptyExactProps, rootTag); }, renderAbsolutePositionBottomRightTestApplication(rootTag: RootTag) { renderApplication( AbsolutePositionBottomRightTestApp, emptyExactProps, rootTag, ); }, renderAbsolutePositionTestApplication(rootTag: RootTag) { renderApplication(AbsolutePositionTestApp, emptyExactProps, rootTag); }, renderCenteredTextViewTestApplication(rootTag: RootTag, text: string) { renderApplication(CenteredTextView, {text: text}, rootTag); }, renderUpdatePositionInListTestApplication(rootTag: RootTag) { renderApplication(UpdatePositionInListTestApp, emptyExactProps, rootTag); }, flushUpdatePositionInList, }; BatchedBridge.registerCallableModule( 'UIManagerTestModule', UIManagerTestModule, ); module.exports = UIManagerTestModule;