import {matchSorter} from 'match-sorter'; import React, {useEffect, useMemo, useRef, useState} from 'react'; import {ScrollView, Text, TextInput, View} from 'react-native'; import Icon from 'react-native-vector-icons/MaterialIcons'; import {AppMenu} from '../components/AppMenu'; import {useInstalledApps} from '../hooks/useInstalledApps'; import {AppDetail} from 'react-native-launcher-kit/typescript/Interfaces/InstalledApps'; const AppListItem: React.FC<{app: AppDetail}> = React.memo(({app}) => { return ( {app.label} {app.packageName} ); }); export const AppList: React.FC<{active: boolean}> = React.memo(({active}) => { const {apps} = useInstalledApps(); const textInputRef = useRef(null); const [searchText, setSearchText] = useState(''); const filteredApps = useMemo(() => { if (searchText === '') return apps; return matchSorter(apps, searchText, {keys: ['label', 'packageName']}); }, [apps, searchText]); // Autofocus useEffect(() => { if (!textInputRef.current) return; if (active) TextInput.State.focusTextInput(textInputRef.current); }, [active]); return ( {filteredApps.map((app, index) => ( ))} ); });