From bc3487eac1f623c55658e57223c990414f30cba0 Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Sat, 5 Oct 2024 22:59:16 +0530 Subject: Fix issue with touchables and keyboard --- src/components/AppMenu.tsx | 25 ++++++------------- src/screens/AppList.tsx | 61 ++++++++++++++++++++++++++-------------------- 2 files changed, 42 insertions(+), 44 deletions(-) diff --git a/src/components/AppMenu.tsx b/src/components/AppMenu.tsx index ebc6dae..bd6632f 100644 --- a/src/components/AppMenu.tsx +++ b/src/components/AppMenu.tsx @@ -1,17 +1,11 @@ -import { - Text, - View, - Modal, - TouchableOpacity, - Pressable, - TouchableNativeFeedback, -} from 'react-native'; +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, @@ -63,19 +57,16 @@ export const AppMenu: React.FC> = ({ return ( <> - + {children} - + @@ -83,18 +74,18 @@ export const AppMenu: React.FC> = ({ {menuItems.map((menuItem) => ( - {menuItem.label} - + ))} - + ); diff --git a/src/screens/AppList.tsx b/src/screens/AppList.tsx index 5af2c55..03c1caa 100644 --- a/src/screens/AppList.tsx +++ b/src/screens/AppList.tsx @@ -1,56 +1,63 @@ import {matchSorter} from 'match-sorter'; -import React, {useEffect, useMemo, useRef, useState} from 'react'; -import { - ScrollView, - Text, - TextInput, - TouchableHighlight, - View, -} from 'react-native'; +import React, { + ComponentProps, + useEffect, + useMemo, + useRef, + useState, +} from 'react'; +import {Pressable, 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'; import {useStableCallback} from '../hooks/useStableCallback'; +import {TouchableHighlight} from 'react-native-gesture-handler'; -const AppListItem: React.FC<{app: AppDetail}> = React.memo(({app}) => { - return ( - - - {app.label} - {app.packageName} - - - ); -}); +const AppListItem: React.FC> = React.memo( + ({app, ...props}) => { + 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 clearSearchInput = useStableCallback(() => { - setSearchText(''); + const focusInput = useStableCallback(() => { if (active) TextInput.State.focusTextInput(textInputRef.current ?? undefined); }); + const clearSearchInput = useStableCallback(() => { + setSearchText(''); + focusInput(); + }); + const filteredApps = useMemo(() => { if (searchText === '') return apps; return matchSorter(apps, searchText, {keys: ['label', 'packageName']}); }, [apps, searchText]); - // Autofocus + // Autofocus when active useEffect(() => { - if (!textInputRef.current) return; - if (active) TextInput.State.focusTextInput(textInputRef.current); - }, [active]); + active && focusInput(); + }, [active, focusInput]); return ( - + + + = React.memo(({active}) => { + className="p-2 rounded-full"> -- cgit v1.3.1