From 5f921800580b69a52b23d211b19c72d5d7ee0ef7 Mon Sep 17 00:00:00 2001 From: Paul Frazee Date: Thu, 23 Feb 2023 10:19:21 -0600 Subject: Move all of the web left-nav shell into the header --- src/view/shell/web/DesktopHeader.tsx | 166 ++++++++++++++++++++++++++++++++--- 1 file changed, 154 insertions(+), 12 deletions(-) (limited to 'src/view/shell/web/DesktopHeader.tsx') diff --git a/src/view/shell/web/DesktopHeader.tsx b/src/view/shell/web/DesktopHeader.tsx index 75acb8da9..acef3d9ba 100644 --- a/src/view/shell/web/DesktopHeader.tsx +++ b/src/view/shell/web/DesktopHeader.tsx @@ -1,12 +1,88 @@ import React from 'react' import {observer} from 'mobx-react-lite' -import {StyleSheet, TouchableOpacity, View} from 'react-native' +import {Pressable, StyleSheet, TouchableOpacity, View} from 'react-native' import {Text} from 'view/com/util/text/Text' import {Link} from 'view/com/util/Link' +import {UserAvatar} from 'view/com/util/UserAvatar' import {usePalette} from 'lib/hooks/usePalette' +import {useColorSchemeStyle} from 'lib/hooks/useColorSchemeStyle' import {useStores} from 'state/index' -import {ComposeIcon, MagnifyingGlassIcon} from 'lib/icons' import {colors} from 'lib/styles' +import { + ComposeIcon, + HomeIcon, + HomeIconSolid, + BellIcon, + BellIconSolid, + MagnifyingGlassIcon, + CogIcon, +} from 'lib/icons' + +interface NavItemProps { + count?: number + href: string + icon: JSX.Element + iconFilled: JSX.Element + isProfile?: boolean +} +export const NavItem = observer( + ({count, href, icon, iconFilled}: NavItemProps) => { + const store = useStores() + const hoverBg = useColorSchemeStyle( + styles.navItemHoverBgLight, + styles.navItemHoverBgDark, + ) + const isCurrent = store.nav.tab.current.url === href + const onPress = () => store.nav.navigate(href) + return ( + [ + styles.navItem, + // @ts-ignore Pressable state differs for RNW -prf + (state.hovered || isCurrent) && hoverBg, + ]} + onPress={onPress}> + + {isCurrent ? iconFilled : icon} + {typeof count === 'number' && count > 0 && ( + + {count} + + )} + + + ) + }, +) + +export const ProfileItem = observer(() => { + const store = useStores() + const hoverBg = useColorSchemeStyle( + styles.navItemHoverBgLight, + styles.navItemHoverBgDark, + ) + const href = `/profile/${store.me.handle}` + const isCurrent = store.nav.tab.current.url === href + const onPress = () => store.nav.navigate(href) + return ( + [ + styles.navItem, + // @ts-ignore Pressable state differs for RNW -prf + (state.hovered || isCurrent) && hoverBg, + ]} + onPress={onPress}> + + + + + ) +}) export const DesktopHeader = observer(function DesktopHeader({}: { canGoBack?: boolean @@ -16,11 +92,29 @@ export const DesktopHeader = observer(function DesktopHeader({}: { const onPressCompose = () => store.shell.openComposer({}) return ( - - - Bluesky - - + + Bluesky + + + } + iconFilled={} + /> + + } + iconFilled={} + /> + + } + iconFilled={} + /> + + + + + } + iconFilled={} + /> ) }) @@ -50,18 +152,59 @@ const styles = StyleSheet.create({ header: { flexDirection: 'row', alignItems: 'center', - paddingTop: 18, - paddingBottom: 18, + // paddingTop: 18, + // paddingBottom: 18, paddingLeft: 30, paddingRight: 40, borderBottomWidth: 1, }, - titleContainer: { - marginRight: 'auto', + spaceFlex: { + flex: 1, + }, + space15: { + width: 15, }, + space20: { + width: 20, + }, + space30: { + width: 30, + }, + title: {}, + navItem: { + paddingTop: 14, + paddingBottom: 10, + paddingHorizontal: 10, + alignItems: 'center', + borderBottomWidth: 2, + borderBottomColor: 'transparent', + }, + navItemHoverBgLight: { + borderBottomWidth: 2, + borderBottomColor: colors.blue3, + }, + navItemHoverBgDark: { + borderBottomWidth: 2, + backgroundColor: colors.blue3, + }, + navItemIconWrapper: { + marginBottom: 2, + }, + navItemCount: { + position: 'absolute', + top: -5, + left: 15, + backgroundColor: colors.red3, + color: colors.white, + fontSize: 12, + fontWeight: 'bold', + paddingHorizontal: 4, + borderRadius: 6, + }, + search: { flexDirection: 'row', alignItems: 'center', @@ -87,7 +230,6 @@ const styles = StyleSheet.create({ paddingBottom: 9, paddingHorizontal: 18, backgroundColor: colors.blue3, - marginRight: 10, }, newPostBtnIconWrapper: { marginRight: 8, -- cgit 1.4.1