Files
react-native/packages/rn-tester/NativeComponentExample/js/MyLegacyViewNativeComponent.js
T
Nicola Corti 6dcdd2e2bc Fix old-arch component not updating background in interop layer example (#36924)
Summary:
I've noticed that in the Fabric Interop Layer sample on RN-Tester, when running with Old Arch, the legacy view is not receiving the commands correctly.
This is due to us not sending the command as string, which is making the command fail to deliver.

## Changelog:

[INTERNAL] - Fix old-arch component not updating background in interop layer example

Pull Request resolved: https://github.com/facebook/react-native/pull/36924

Test Plan:
Tested locally:

| Before | After |
|--------|--------|
| ![screen-1681728104](https://user-images.githubusercontent.com/3001957/232461662-68b23545-f38c-40fe-9a5d-44bb0cae29e9.png) | ![screen-1681728077](https://user-images.githubusercontent.com/3001957/232461651-eec93a51-b0f0-4650-af3a-c5dd991f2f96.png) |

Reviewed By: cipolleschi

Differential Revision: D45043929

Pulled By: cortinico

fbshipit-source-id: 8bb2a052a1a600046f3a16c868062c5e600385f0
2023-04-18 04:24:13 -07:00

57 lines
1.4 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.
*
* @flow strict-local
* @format
*/
import * as React from 'react';
import type {HostComponent} from 'react-native';
import type {ViewProps} from 'react-native/Libraries/Components/View/ViewPropTypes';
import {requireNativeComponent, UIManager} from 'react-native';
import ReactNative from '../../../react-native/Libraries/Renderer/shims/ReactNative';
type ColorChangedEvent = {
nativeEvent: {
backgroundColor: {
hue: number,
saturation: number,
brightness: number,
alpha: number,
},
},
};
type NativeProps = $ReadOnly<{|
...ViewProps,
opacity?: number,
color?: string,
onColorChanged?: (event: ColorChangedEvent) => void,
|}>;
export type MyLegacyViewType = HostComponent<NativeProps>;
export function callNativeMethodToChangeBackgroundColor(
viewRef: React.ElementRef<MyLegacyViewType> | null,
color: string,
) {
if (!viewRef) {
console.log('viewRef is null');
return;
}
UIManager.dispatchViewManagerCommand(
ReactNative.findNodeHandle(viewRef),
UIManager.getViewManagerConfig(
'RNTMyLegacyNativeView',
).Commands.changeBackgroundColor.toString(),
[color],
);
}
export default (requireNativeComponent(
'RNTMyLegacyNativeView',
): HostComponent<NativeProps>);