import React, { useContext } from 'react';
import { useCallback } from 'react';
import { ActionSheetIOS, Platform, TouchableOpacity } from 'react-native';
import type { IMessage } from '../types/Chatty.types';
import { PropsContext } from '../Chatty';
import { contextMenuView } from '../utils/contextMenu';
import { ChatEmitter } from '../utils/eventEmitter';
interface IProps {
message: IMessage;
children: JSX.Element;
}
function ContextMenuWrapper(props: IProps) {
const propsContext = useContext(PropsContext);
const onPress = useCallback(
(index) => {
ChatEmitter.emit('actionPressed', index, props.message);
},
[props.message]
);
const onLongPress = useCallback(() => {
if (Platform.OS === 'ios') {
ActionSheetIOS.showActionSheetWithOptions(
{
options: [
...(propsContext.bubbleProps?.actions?.options.map(
(_) => _.title
) as string[]),
propsContext.bubbleProps?.actions?.cancelButtonLabel ?? 'Close',
],
cancelButtonIndex: propsContext.bubbleProps?.actions?.options.length,
destructiveButtonIndex:
propsContext.bubbleProps?.actions?.options.findIndex(
(_) => _.destructive
) || -1,
},
onPress
);
}
}, [
onPress,
propsContext.bubbleProps?.actions?.cancelButtonLabel,
propsContext.bubbleProps?.actions?.options,
]);
// If actions are not defined, just return the children
if (!propsContext.bubbleProps?.actions) return props.children;
// If actions are defined, but ios version is not supported, return the actionsheet
if (!contextMenuView) {
return (
{props.children}
);
}
if (Platform.OS === 'ios' && Platform.Version >= 13) {
return (
onPress(e.nativeEvent.index)}
>
{props.children}
);
}
return (
onPress(e.nativeEvent.index)}
>
{props.children}
);
}
export { ContextMenuWrapper };