import {Text, View, Modal, TouchableOpacity, Pressable} from 'react-native'; import {AppDetail} from 'react-native-launcher-kit/typescript/Interfaces/InstalledApps'; import {useFavorites} from '../hooks/useFavorites'; import React, {useState} from 'react'; // @ts-expect-error No declaration file import IntentLauncher from '@angelkrak/react-native-intent-launcher'; import {useStableCallback} from '../hooks/useStableCallback'; import {TouchableNativeFeedback} from 'react-native-gesture-handler'; export const AppMenu: React.FC> = ({ app, children, }) => { const [isOpen, setIsOpen] = useState(false); const {addToFavorites, isFavorite, removeFromFavorites} = useFavorites(); const openContextMenu = useStableCallback(() => setIsOpen(true)); const closeContextMenu = useStableCallback(() => setIsOpen(false)); const onMenuItemPress = (fn: () => Promise | void) => async () => { closeContextMenu(); await fn(); }; const menuItems = [ isFavorite(app.packageName) ? { label: 'Remove from favorites', onPress: onMenuItemPress(() => removeFromFavorites(app.packageName)), } : { label: 'Add to favorites', onPress: onMenuItemPress(() => addToFavorites(app.packageName)), }, { label: 'App info', onPress: onMenuItemPress(() => IntentLauncher.startActivity({ action: 'android.settings.APPLICATION_DETAILS_SETTINGS', data: 'package:' + app.packageName, }), ), }, { label: 'Uninstall', onPress: onMenuItemPress(() => IntentLauncher.startActivity({ action: 'android.intent.action.DELETE', data: 'package:' + app.packageName, }), ), }, ]; const openApp = useStableCallback(() => IntentLauncher.startAppByPackageName(app.packageName), ); return ( <> {children} {app.label} {menuItems.map((menuItem) => ( {menuItem.label} ))} ); };