From 5d9a458ccdc95e54edbb34505e006e908293007a Mon Sep 17 00:00:00 2001 From: Brandon Presley Date: Tue, 23 Aug 2022 12:04:52 +1200 Subject: [PATCH] Add search bar to SettingsPage --- SettingsPage.tsx | 168 ++++++++++++++++++++++++++++++----------------- 1 file changed, 107 insertions(+), 61 deletions(-) diff --git a/SettingsPage.tsx b/SettingsPage.tsx index bcc109c..ea5c867 100644 --- a/SettingsPage.tsx +++ b/SettingsPage.tsx @@ -1,5 +1,11 @@ import AsyncStorage from '@react-native-async-storage/async-storage'; -import React, {useCallback, useEffect, useState} from 'react'; +import React, { + ReactNode, + useCallback, + useEffect, + useMemo, + useState, +} from 'react'; import { NativeModules, StyleSheet, @@ -7,7 +13,7 @@ import { ToastAndroid, View, } from 'react-native'; -import {TextInput} from 'react-native-paper'; +import {Searchbar, TextInput} from 'react-native-paper'; import ConfirmDialog from './ConfirmDialog'; import MassiveSwitch from './MassiveSwitch'; @@ -22,6 +28,7 @@ export default function SettingsPage() { const [predictive, setPredictive] = useState(false); const [battery, setBattery] = useState(false); const [ignoring, setIgnoring] = useState(false); + const [search, setSearch] = useState(''); const refresh = useCallback(async () => { setMinutes((await getItem('minutes')) || ''); @@ -57,46 +64,6 @@ export default function SettingsPage() { [setPredictive], ); - const textInputs = ( - <> - { - setMinutes(text); - setItem('minutes', text); - }} - style={styles.text} - selectTextOnFocus - /> - { - setSeconds(s); - setItem('seconds', s); - }} - style={styles.text} - selectTextOnFocus - /> - { - setMaxSets(value); - setItem('maxSets', value); - }} - style={styles.text} - selectTextOnFocus - /> - - ); - const changeVibrate = useCallback( (value: boolean) => { setVibrate(value); @@ -105,21 +72,106 @@ export default function SettingsPage() { [setVibrate], ); + const items: {name: string; element: ReactNode}[] = [ + { + name: 'Sets per workout', + element: ( + { + setMaxSets(value); + setItem('maxSets', value); + }} + style={styles.text} + selectTextOnFocus + /> + ), + }, + { + name: 'Rest seconds', + element: ( + { + setSeconds(s); + setItem('seconds', s); + }} + style={styles.text} + selectTextOnFocus + /> + ), + }, + { + name: 'Rest minutes', + element: ( + { + setMinutes(text); + setItem('minutes', text); + }} + style={styles.text} + selectTextOnFocus + /> + ), + }, + { + name: 'Rest timers', + element: ( + <> + Rest timers + + + ), + }, + { + name: 'Vibrate', + element: ( + <> + Vibrate + + + ), + }, + { + name: 'Predictive sets', + element: ( + <> + Predictive sets + + + ), + }, + ]; + return ( - {textInputs} - Rest timers - - Vibrate - + + {items + .filter(item => item.name.toLowerCase().includes(search.toLowerCase())) + .map(item => ( + {item.element} + ))} Disable battery optimizations for Massive to use rest timers. - Predictive sets - ); }