From ec6782ba68d15706b1d5e3490704aa98c216a3d7 Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Sun, 12 May 2024 17:44:31 +0530 Subject: Simple slide UI + apps search --- App.tsx | 127 ++++++++---------------------------------------- src/screens/AppList.tsx | 40 +++++++++++++++ 2 files changed, 59 insertions(+), 108 deletions(-) create mode 100644 src/screens/AppList.tsx diff --git a/App.tsx b/App.tsx index 125fe1b..a0eda25 100644 --- a/App.tsx +++ b/App.tsx @@ -1,118 +1,29 @@ -/** - * Sample React Native App - * https://github.com/facebook/react-native - * - * @format - */ - -import React from 'react'; -import type {PropsWithChildren} from 'react'; -import { - SafeAreaView, - ScrollView, - StatusBar, - StyleSheet, - Text, - useColorScheme, - View, -} from 'react-native'; - -import { - Colors, - DebugInstructions, - Header, - LearnMoreLinks, - ReloadInstructions, -} from 'react-native/Libraries/NewAppScreen'; - -type SectionProps = PropsWithChildren<{ - title: string; -}>; - -function Section({children, title}: SectionProps): React.JSX.Element { - const isDarkMode = useColorScheme() === 'dark'; - return ( - - - {title} - - - {children} - - - ); -} +import React, {useState} from 'react'; +import {SafeAreaView, Text, View} from 'react-native'; +import {InstalledApps} from 'react-native-launcher-kit'; +import Swiper from 'react-native-swiper'; +import {AppList} from './src/screens/AppList'; function App(): React.JSX.Element { - const isDarkMode = useColorScheme() === 'dark'; - - const backgroundStyle = { - backgroundColor: isDarkMode ? Colors.darker : Colors.lighter, - }; + const [apps, _setApps] = useState(() => InstalledApps.getSortedApps()); return ( - - - -
- -
- Edit App.tsx to change this - screen and then come back to see your edits. -
-
- -
-
- -
-
- Read the docs to discover what to do next: -
- + + } + activeDot={<>}> + + Wow - + + + ); } -const styles = StyleSheet.create({ - sectionContainer: { - marginTop: 32, - paddingHorizontal: 24, - }, - sectionTitle: { - fontSize: 24, - fontWeight: '600', - }, - sectionDescription: { - marginTop: 8, - fontSize: 18, - fontWeight: '400', - }, - highlight: { - fontWeight: '700', - }, -}); - export default App; diff --git a/src/screens/AppList.tsx b/src/screens/AppList.tsx new file mode 100644 index 0000000..187fbed --- /dev/null +++ b/src/screens/AppList.tsx @@ -0,0 +1,40 @@ +import {matchSorter} from 'match-sorter'; +import React, {useMemo, useState} from 'react'; +import {ScrollView, Text, TextInput, View} from 'react-native'; +import {AppDetail} from 'react-native-launcher-kit/typescript/Interfaces/InstalledApps'; + +export const AppList: React.FC<{apps: AppDetail[]}> = ({apps}) => { + const [searchText, setSearchText] = useState(''); + + const filteredApps = useMemo(() => { + if (searchText === '') return apps; + + return matchSorter(apps, searchText, {keys: ['label', 'packageName']}); + }, [apps, searchText]); + + return ( + + + + + + + + {filteredApps.map((app, index) => ( + + + {app.label} + + {app.packageName} + + ))} + + + + ); +}; -- cgit v1.3.1