Files
Dmitry Rykun 4d07aae7ef RNTester: add legacy style event to MyNativeViewNativeComponent (#42809)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/42809

This diff adds a legacy style event to `MyNativeViewNativeComponent`.
This is a way of defining events where you specify additional string type parameter in the EventHandler in the spec. This additional type parameter is an overridden top level event name, that can be completely unrelated to the event handler name.
In this example it is `onLegacyStyleEvent` and `alternativeLegacyName`.
More context here D16042065.

Changelog: [Internal]

Reviewed By: cortinico

Differential Revision: D53310318

fbshipit-source-id: 4dec08c872acdfd09b9939f690fb7bc777149580
2024-02-13 02:47:53 -08:00

84 lines
2.3 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 type {ViewProps} from 'react-native/Libraries/Components/View/ViewPropTypes';
import type {HostComponent} from 'react-native/Libraries/Renderer/shims/ReactNativeTypes';
import type {
BubblingEventHandler,
Double,
Float,
Int32,
} from 'react-native/Libraries/Types/CodegenTypes';
import * as React from 'react';
import codegenNativeCommands from 'react-native/Libraries/Utilities/codegenNativeCommands';
import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';
type Event = $ReadOnly<{
values: $ReadOnlyArray<Int32>,
boolValues: $ReadOnlyArray<boolean>,
floats: $ReadOnlyArray<Float>,
doubles: $ReadOnlyArray<Double>,
yesNos: $ReadOnlyArray<'yep' | 'nope'>,
strings: $ReadOnlyArray<string>,
latLons: $ReadOnlyArray<{|lat: Double, lon: Double|}>,
multiArrays: $ReadOnlyArray<$ReadOnlyArray<Int32>>,
}>;
type LegacyStyleEvent = $ReadOnly<{
string: string,
}>;
type NativeProps = $ReadOnly<{|
...ViewProps,
opacity?: Float,
values: $ReadOnlyArray<Int32>,
// Events
onIntArrayChanged?: ?BubblingEventHandler<Event>,
onLegacyStyleEvent?: ?BubblingEventHandler<
LegacyStyleEvent,
'alternativeLegacyName',
>,
|}>;
export type MyNativeViewType = HostComponent<NativeProps>;
interface NativeCommands {
+callNativeMethodToChangeBackgroundColor: (
viewRef: React.ElementRef<MyNativeViewType>,
color: string,
) => void;
+callNativeMethodToAddOverlays: (
viewRef: React.ElementRef<MyNativeViewType>,
overlayColors: $ReadOnlyArray<string>,
) => void;
+callNativeMethodToRemoveOverlays: (
viewRef: React.ElementRef<MyNativeViewType>,
) => void;
+fireLagacyStyleEvent: (viewRef: React.ElementRef<MyNativeViewType>) => void;
}
export const Commands: NativeCommands = codegenNativeCommands<NativeCommands>({
supportedCommands: [
'callNativeMethodToChangeBackgroundColor',
'callNativeMethodToAddOverlays',
'callNativeMethodToRemoveOverlays',
'fireLagacyStyleEvent',
],
});
export default (codegenNativeComponent<NativeProps>(
'RNTMyNativeView',
): MyNativeViewType);