diff options
author | Jaz <ericvolp12@gmail.com> | 2023-05-17 21:14:26 -0700 |
---|---|---|
committer | Jaz <ericvolp12@gmail.com> | 2023-05-17 21:14:26 -0700 |
commit | 3c15f6ba024aff5a3b25a7925fe2edcb66640a56 (patch) | |
tree | ce8a1b727437c1406353c707c45c07649a44b970 /src/view/screens/Settings.tsx | |
parent | b2ef6bde0035918de131f896d00dd9a67770897a (diff) | |
download | voidsky-3c15f6ba024aff5a3b25a7925fe2edcb66640a56.tar.zst |
Move appearance settings to settings page
Diffstat (limited to 'src/view/screens/Settings.tsx')
-rw-r--r-- | src/view/screens/Settings.tsx | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/src/view/screens/Settings.tsx b/src/view/screens/Settings.tsx index 1571a6142..b222d7dbd 100644 --- a/src/view/screens/Settings.tsx +++ b/src/view/screens/Settings.tsx @@ -1,6 +1,7 @@ import React from 'react' import { ActivityIndicator, + Pressable, StyleSheet, TextStyle, TouchableOpacity, @@ -283,6 +284,34 @@ export const SettingsScreen = withAuthRequired( </TouchableOpacity> <View style={styles.spacer20} /> + <Text type="xl-bold" style={[pal.text, styles.heading]}> + Appearance + </Text> + <View> + <View style={[styles.linkCard, pal.view, styles.selectableBtns]}> + <SelectableBtn + current={store.shell.colorMode} + value="system" + label="System" + left + onChange={(v: string) => store.shell.setColorMode(v)} + /> + <SelectableBtn + current={store.shell.colorMode} + value="light" + label="Light" + onChange={(v: string) => store.shell.setColorMode(v)} + /> + <SelectableBtn + current={store.shell.colorMode} + value="dark" + label="Dark" + right + onChange={(v: string) => store.shell.setColorMode(v)} + /> + </View> + </View> + <View style={styles.spacer20} /> <Text type="xl-bold" style={[pal.text, styles.heading]}> Advanced @@ -411,6 +440,45 @@ function AccountDropdownBtn({handle}: {handle: string}) { ) } +interface SelectableBtnProps { + current: string + value: string + label: string + left?: boolean + right?: boolean + onChange: (v: string) => void +} + +function SelectableBtn({ + current, + value, + label, + left, + right, + onChange, +}: SelectableBtnProps) { + const pal = usePalette('default') + const palPrimary = usePalette('inverted') + return ( + <Pressable + style={[ + styles.selectableBtn, + left && styles.selectableBtnLeft, + right && styles.selectableBtnRight, + pal.border, + current === value ? palPrimary.view : pal.view, + ]} + onPress={() => onChange(value)} + accessibilityRole="button" + accessibilityLabel={value} + accessibilityHint={`Set color theme to ${value}`}> + <Text style={current === value ? palPrimary.text : pal.text}> + {label} + </Text> + </Pressable> + ) +} + const styles = StyleSheet.create({ dimmed: { opacity: 0.5, @@ -462,4 +530,43 @@ const styles = StyleSheet.create({ paddingVertical: 8, paddingHorizontal: 18, }, + + colorModeText: { + marginLeft: 10, + marginBottom: 6, + }, + + selectableBtns: { + flexDirection: 'row', + }, + selectableBtn: { + flexDirection: 'row', + justifyContent: 'center', + borderWidth: 1, + borderLeftWidth: 0, + paddingHorizontal: 10, + paddingVertical: 10, + }, + selectableBtnLeft: { + borderTopLeftRadius: 8, + borderBottomLeftRadius: 8, + borderLeftWidth: 1, + }, + selectableBtnRight: { + borderTopRightRadius: 8, + borderBottomRightRadius: 8, + }, + + btn: { + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'center', + width: '100%', + borderRadius: 32, + padding: 14, + backgroundColor: colors.gray1, + }, + toggleBtn: { + paddingHorizontal: 0, + }, }) |