diff --git a/SettingsPage.tsx b/SettingsPage.tsx index 0cea6e5..c11a20e 100644 --- a/SettingsPage.tsx +++ b/SettingsPage.tsx @@ -1,10 +1,4 @@ -import React, { - ReactNode, - useCallback, - useContext, - useEffect, - useState, -} from 'react'; +import React, {useCallback, useContext, useEffect, useState} from 'react'; import {NativeModules, ScrollView, StyleSheet, View} from 'react-native'; import DocumentPicker from 'react-native-document-picker'; import {Button, Searchbar, Text} from 'react-native-paper'; @@ -14,10 +8,16 @@ import MassiveInput from './MassiveInput'; import MassiveSwitch from './MassiveSwitch'; import {getSettings, setSettings} from './settings.service'; +interface Input { + name: string; + value?: T; + onChange: (value: T) => void; +} + export default function SettingsPage() { const [vibrate, setVibrate] = useState(true); const [minutes, setMinutes] = useState(''); - const [sets, setMaxSets] = useState('3'); + const [sets, setSets] = useState('3'); const [seconds, setSeconds] = useState(''); const [alarm, setAlarm] = useState(false); const [predict, setPredict] = useState(false); @@ -36,7 +36,7 @@ export default function SettingsPage() { setSeconds(settings.seconds.toString()); setAlarm(!!settings.alarm); setPredict(!!settings.predict); - setMaxSets(settings.sets.toString()); + setSets(settings.sets.toString()); setVibrate(!!settings.vibrate); setSound(settings.sound); setNotify(!!settings.notify); @@ -103,121 +103,18 @@ export default function SettingsPage() { [toast], ); - const items: {name: string; element: ReactNode}[] = [ - { - name: 'Sets per workout', - element: ( - { - setMaxSets(value); - }} - /> - ), - }, - { - name: 'Rest minutes Rest seconds', - element: ( - - { - setMinutes(text); - }} - /> - { - setSeconds(s); - }} - /> - - ), - }, - { - name: 'Rest timers', - element: ( - <> - Rest timers - - - ), - }, - { - name: 'Vibrate', - element: ( - <> - Vibrate - - - ), - }, - { - name: 'Predict sets', - element: ( - <> - Predict sets - - - ), - }, - { - name: 'Record notifications', - element: ( - <> - Record notifications - - - ), - }, - { - name: 'Show images', - element: ( - <> - Show images - - - ), - }, - { - name: 'Alarm sound', - element: ( - - ), - }, + const inputs: Input[] = [ + {name: 'Sets per workout', value: sets, onChange: setSets}, + {name: 'Rest minutes', value: minutes, onChange: setMinutes}, + {name: 'Rest seconds', value: seconds, onChange: setSeconds}, + ]; + + const switches: Input[] = [ + {name: 'Rest timers', value: alarm, onChange: changeAlarmEnabled}, + {name: 'Vibrate', value: vibrate, onChange: changeVibrate}, + {name: 'Predict sets', value: predict, onChange: changePredict}, + {name: 'Record notifications', value: notify, onChange: changeNotify}, + {name: 'Show images', value: images, onChange: setImages}, ]; return ( @@ -229,13 +126,37 @@ export default function SettingsPage() { onChangeText={setSearch} /> - {items - .filter(item => - item.name.toLowerCase().includes(search.toLowerCase()), - ) - .map(item => ( - {item.element} + {inputs + .filter(input => input.name.toLowerCase().includes(search)) + .map(input => ( + ))} + {switches + .filter(input => input.name.toLowerCase().includes(search)) + .map(input => ( + + {input.name} + + + ))} + {'alarm sound'.includes(search) && ( + + )}