From a90fd5d26f1a8aa5149627a68a8dd6b13b26fec5 Mon Sep 17 00:00:00 2001 From: Paul Frazee Date: Fri, 30 Dec 2022 15:48:34 -0600 Subject: Add dark mode toggle --- src/view/shell/mobile/Menu.tsx | 342 +++++++++++++++++++++-------------------- 1 file changed, 177 insertions(+), 165 deletions(-) (limited to 'src/view/shell/mobile/Menu.tsx') diff --git a/src/view/shell/mobile/Menu.tsx b/src/view/shell/mobile/Menu.tsx index 84c3f494e..81f2164da 100644 --- a/src/view/shell/mobile/Menu.tsx +++ b/src/view/shell/mobile/Menu.tsx @@ -6,6 +6,7 @@ import { View, ViewStyle, } from 'react-native' +import {observer} from 'mobx-react-lite' import VersionNumber from 'react-native-version-number' import {s, colors} from '../../lib/styles' import {useStores} from '../../../state' @@ -18,187 +19,198 @@ import { } from '../../lib/icons' import {UserAvatar} from '../../com/util/UserAvatar' import {Text} from '../../com/util/text/Text' +import {ToggleButton} from '../../com/util/forms/ToggleButton' import {CreateSceneModal} from '../../../state/models/shell-ui' import {usePalette} from '../../lib/hooks/usePalette' -export const Menu = ({ - visible, - onClose, -}: { - visible: boolean - onClose: () => void -}) => { - const pal = usePalette('default') - const store = useStores() +export const Menu = observer( + ({visible, onClose}: {visible: boolean; onClose: () => void}) => { + const pal = usePalette('default') + const store = useStores() - useEffect(() => { - if (visible) { - // trigger a refresh in case memberships have changed recently - // TODO this impacts performance, need to find the right time to do this - // store.me.refreshMemberships() - } - }, [store, visible]) + useEffect(() => { + if (visible) { + // trigger a refresh in case memberships have changed recently + // TODO this impacts performance, need to find the right time to do this + // store.me.refreshMemberships() + } + }, [store, visible]) - // events - // = + // events + // = - const onNavigate = (url: string) => { - onClose() - if (url === '/notifications') { - store.nav.switchTo(1, true) - } else { - store.nav.switchTo(0, true) - if (url !== '/') { - store.nav.navigate(url) + const onNavigate = (url: string) => { + onClose() + if (url === '/notifications') { + store.nav.switchTo(1, true) + } else { + store.nav.switchTo(0, true) + if (url !== '/') { + store.nav.navigate(url) + } } } - } - const onPressCreateScene = () => { - onClose() - store.shell.openModal(new CreateSceneModal()) - } + const onPressCreateScene = () => { + onClose() + store.shell.openModal(new CreateSceneModal()) + } - // rendering - // = + // rendering + // = - const MenuItem = ({ - icon, - label, - count, - url, - bold, - onPress, - }: { - icon: JSX.Element - label: string - count?: number - url?: string - bold?: boolean - onPress?: () => void - }) => ( - onNavigate(url || '/')}> - - {icon} - {count ? ( - - {count} - - ) : undefined} - - - {label} - - - ) - - return ( - + const MenuItem = ({ + icon, + label, + count, + url, + bold, + onPress, + }: { + icon: JSX.Element + label: string + count?: number + url?: string + bold?: boolean + onPress?: () => void + }) => ( onNavigate(`/profile/${store.me.handle}`)} - style={styles.profileCard}> - - - - {store.me.displayName || store.me.handle} - - - @{store.me.handle} - + style={styles.menuItem} + onPress={onPress ? onPress : () => onNavigate(url || '/')}> + + {icon} + {count ? ( + + {count} + + ) : undefined} - - onNavigate('/search')}> - } - size={25} - /> - - Search + + {label} - - } size="26" />} - label="Home" - url="/" - /> - } size="28" />} - label="Notifications" - url="/notifications" - count={store.me.notificationCount} - /> - - - - Scenes - - {store.me.memberships - ? store.me.memberships.memberships.map((membership, i) => ( - - } - label={membership.displayName || membership.handle} - url={`/profile/${membership.handle}`} + ) + + return ( + + onNavigate(`/profile/${store.me.handle}`)} + style={styles.profileCard}> + + + + {store.me.displayName || store.me.handle} + + + @{store.me.handle} + + + + onNavigate('/search')}> + } + size={25} + /> + + Search + + + + } size="26" /> + } + label="Home" + url="/" + /> + } size="28" /> + } + label="Notifications" + url="/notifications" + count={store.me.notificationCount} + /> + + + + Scenes + + {store.me.memberships + ? store.me.memberships.memberships.map((membership, i) => ( + + } + label={membership.displayName || membership.handle} + url={`/profile/${membership.handle}`} + /> + )) + : undefined} + + + } + size="30" /> - )) - : undefined} - - - } size="30" /> - } - label="Create a scene" - onPress={onPressCreateScene} - /> - } - size="30" - strokeWidth={2} - /> - } - label="Settings" - url="/settings" - /> - - - - Build version {VersionNumber.appVersion} ({VersionNumber.buildVersion} - ) - + } + label="Create a scene" + onPress={onPressCreateScene} + /> + } + size="30" + strokeWidth={2} + /> + } + label="Settings" + url="/settings" + /> + + + store.shell.setDarkMode(!store.shell.darkMode)} + /> + + + + Build version {VersionNumber.appVersion} ( + {VersionNumber.buildVersion}) + + - - ) -} + ) + }, +) const styles = StyleSheet.create({ view: { -- cgit 1.4.1