Files
react-native/packages/react-native-popup-menu-android/js/PopupMenuAndroid.android.js
Tim Yung 1977dd6596 RN: Sort Pragmas in Headers (#51554)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/51554

Sorts pragma directives file headers in React Native.

Changelog:
[Internal]

Reviewed By: SamChou19815

Differential Revision: D75264593

fbshipit-source-id: 9e4b253dd0fc94dc2fc469d7114b93a8aae305f4
2025-05-22 21:18:53 -07:00

81 lines
1.9 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 {RefObject} from 'react';
import type {HostInstance} from 'react-native';
import type {NativeSyntheticEvent} from 'react-native/Libraries/Types/CoreEventTypes';
import PopupMenuAndroidNativeComponent, {
Commands,
} from './PopupMenuAndroidNativeComponent.android';
import nullthrows from 'nullthrows';
import * as React from 'react';
import {useCallback, useImperativeHandle, useRef} from 'react';
type PopupMenuSelectionEvent = NativeSyntheticEvent<
$ReadOnly<{
item: number,
}>,
>;
type PopupMenuDismissEvent = NativeSyntheticEvent<$ReadOnly<{}>>;
export type PopupMenuAndroidInstance = {
+show: () => void,
};
type Props = {
menuItems: $ReadOnlyArray<string>,
onSelectionChange: number => void,
onDismiss?: () => void,
children: React.Node,
instanceRef: RefObject<?PopupMenuAndroidInstance>,
};
export default function PopupMenuAndroid({
menuItems,
onSelectionChange,
onDismiss,
children,
instanceRef,
}: Props): React.Node {
const nativeRef = useRef<HostInstance | null>(null);
const _onSelectionChange = useCallback(
(event: PopupMenuSelectionEvent) => {
onSelectionChange(event.nativeEvent.item);
},
[onSelectionChange],
);
const _onDismiss = useCallback(
(event: PopupMenuDismissEvent) => {
onDismiss?.();
},
[onDismiss],
);
useImperativeHandle(instanceRef, ItemViewabilityInstance => {
return {
show() {
Commands.show(nullthrows(nativeRef.current));
},
};
});
return (
<PopupMenuAndroidNativeComponent
ref={nativeRef}
onPopupMenuSelectionChange={_onSelectionChange}
onPopupMenuDismiss={_onDismiss}
menuItems={menuItems}>
{children}
</PopupMenuAndroidNativeComponent>
);
}