FIX: Send transaction crash #6751

This commit is contained in:
Marcos Rodriguez Velez 2024-06-28 10:49:24 -04:00
parent a0fe77a98c
commit 63633336b8
No known key found for this signature in database
GPG key ID: 6030B2F48CCE86D7
2 changed files with 35 additions and 20 deletions

View file

@ -1,6 +1,13 @@
import React, { Ref, useCallback, useMemo } from 'react'; import React, { Ref, useCallback, useMemo } from 'react';
import { Platform, Pressable, TouchableOpacity, View } from 'react-native'; import { Platform, Pressable, TouchableOpacity, View } from 'react-native';
import { ContextMenuView, RenderItem, OnPressMenuItemEventObject, MenuState, IconConfig } from 'react-native-ios-context-menu'; import {
ContextMenuView,
RenderItem,
OnPressMenuItemEventObject,
MenuState,
IconConfig,
MenuElementConfig,
} from 'react-native-ios-context-menu';
import { MenuView, MenuAction, NativeActionEvent } from '@react-native-menu/menu'; import { MenuView, MenuAction, NativeActionEvent } from '@react-native-menu/menu';
import { ToolTipMenuProps, Action } from './types'; import { ToolTipMenuProps, Action } from './types';
@ -21,6 +28,7 @@ const ToolTipMenu = React.memo((props: ToolTipMenuProps, ref?: Ref<any>) => {
} = props; } = props;
const mapMenuItemForContextMenuView = useCallback((action: Action) => { const mapMenuItemForContextMenuView = useCallback((action: Action) => {
if (!action.id) return null;
return { return {
actionKey: action.id.toString(), actionKey: action.id.toString(),
actionTitle: action.text, actionTitle: action.text,
@ -30,7 +38,8 @@ const ToolTipMenu = React.memo((props: ToolTipMenuProps, ref?: Ref<any>) => {
}; };
}, []); }, []);
const mapMenuItemForMenuView = useCallback((action: Action): MenuAction => { const mapMenuItemForMenuView = useCallback((action: Action): MenuAction | null => {
if (!action.id) return null;
return { return {
id: action.id.toString(), id: action.id.toString(),
title: action.text, title: action.text,
@ -41,28 +50,34 @@ const ToolTipMenu = React.memo((props: ToolTipMenuProps, ref?: Ref<any>) => {
}, []); }, []);
const contextMenuItems = useMemo(() => { const contextMenuItems = useMemo(() => {
const flattenedActions = props.actions.flat(); const flattenedActions = props.actions.flat().filter(action => action.id);
return flattenedActions.map(mapMenuItemForContextMenuView); return flattenedActions.map(mapMenuItemForContextMenuView).filter(item => item !== null) as MenuElementConfig[];
}, [props.actions, mapMenuItemForContextMenuView]); }, [props.actions, mapMenuItemForContextMenuView]);
const menuViewItemsIOS = useMemo(() => { const menuViewItemsIOS = useMemo(() => {
return props.actions.map(actionGroup => { return props.actions
if (Array.isArray(actionGroup)) { .map(actionGroup => {
if (Array.isArray(actionGroup) && actionGroup.length > 0) {
return { return {
id: actionGroup[0].id.toString(), id: actionGroup[0].id.toString(),
title: '', title: '',
subactions: actionGroup.map(mapMenuItemForMenuView), subactions: actionGroup
.filter(action => action.id)
.map(mapMenuItemForMenuView)
.filter(item => item !== null) as MenuAction[],
displayInline: true, displayInline: true,
}; };
} else { } else if (!Array.isArray(actionGroup) && actionGroup.id) {
return mapMenuItemForMenuView(actionGroup); return mapMenuItemForMenuView(actionGroup);
} }
}); return null;
})
.filter(item => item !== null) as MenuAction[];
}, [props.actions, mapMenuItemForMenuView]); }, [props.actions, mapMenuItemForMenuView]);
const menuViewItemsAndroid = useMemo(() => { const menuViewItemsAndroid = useMemo(() => {
const mergedActions = props.actions.flat(); const mergedActions = props.actions.flat().filter(action => action.id);
return mergedActions.map(mapMenuItemForMenuView); return mergedActions.map(mapMenuItemForMenuView).filter(item => item !== null) as MenuAction[];
}, [props.actions, mapMenuItemForMenuView]); }, [props.actions, mapMenuItemForMenuView]);
const handlePressMenuItemForContextMenuView = useCallback( const handlePressMenuItemForContextMenuView = useCallback(
@ -138,7 +153,7 @@ const ToolTipMenu = React.memo((props: ToolTipMenuProps, ref?: Ref<any>) => {
); );
}; };
return Platform.OS === 'ios' && renderPreview ? renderContextMenuView() : renderMenuView(); return props.actions.length > 0 ? (Platform.OS === 'ios' && renderPreview ? renderContextMenuView() : renderMenuView()) : null;
}); });
export default ToolTipMenu; export default ToolTipMenu;