import React, {useCallback, useMemo} from 'react'; import {Text, TouchableOpacity, View} from 'react-native'; import {AppDetail} from 'react-native-launcher-kit/typescript/Interfaces/InstalledApps'; import {useFavorites} from '../hooks/useFavorites'; import DraggableFlatList, { DragEndParams, OpacityDecorator, ShadowDecorator, } from 'react-native-draggable-flatlist'; import Icon from 'react-native-vector-icons/MaterialIcons'; import {AppMenu} from './AppMenu'; import {useInstalledApps} from '../hooks/useInstalledApps'; const AppLabel: React.FC<{app: AppDetail}> = React.memo(({app}) => { return ( {app.label} ); }); export const Favorites: React.FC<{active: boolean}> = (_) => { const {apps} = useInstalledApps(); const {favoriteAppNames, setFavorites} = useFavorites(); const appByName = useMemo( () => Object.fromEntries(apps.map((app) => [app.packageName, app])), [apps], ); const favoriteApps = useMemo( () => favoriteAppNames.map((name) => appByName[name]).filter(Boolean), [appByName, favoriteAppNames], ); const onDragEnd = useCallback( ({data}: DragEndParams) => { setFavorites(() => data.map((app) => app.packageName)); }, [setFavorites], ); return ( app.packageName} activationDistance={10} scrollEnabled renderPlaceholder={() => } renderItem={({item: app, drag, isActive}) => ( )} /> ); };