Notification count fixes

zio/stable
Paul Frazee 2023-03-13 21:46:16 -05:00
parent 6533d7dd08
commit b5c64a03b6
2 changed files with 53 additions and 15 deletions

View File

@ -26,6 +26,7 @@ import {
} from 'lib/icons'
import {colors} from 'lib/styles'
import {usePalette} from 'lib/hooks/usePalette'
import {useColorSchemeStyle} from 'lib/hooks/useColorSchemeStyle'
import {getTabState, TabState} from 'lib/routes/helpers'
export const BottomBar = observer(({navigation}: BottomTabBarProps) => {
@ -186,6 +187,10 @@ function Btn({
onPress?: (event: GestureResponderEvent) => void
onLongPress?: (event: GestureResponderEvent) => void
}) {
const borderStyle = useColorSchemeStyle(
styles.notificationCountLight,
styles.notificationCountDark,
)
return (
<TouchableOpacity
style={styles.ctrl}
@ -193,7 +198,7 @@ function Btn({
onPressIn={onLongPress ? undefined : onPress}
onLongPress={onLongPress}>
{notificationCount ? (
<View style={styles.notificationCount}>
<View style={[styles.notificationCount, borderStyle]}>
<Text style={styles.notificationCountLabel}>{notificationCount}</Text>
</View>
) : undefined}
@ -221,13 +226,20 @@ const styles = StyleSheet.create({
notificationCount: {
position: 'absolute',
left: '52%',
top: 10,
top: 8,
backgroundColor: colors.blue3,
paddingHorizontal: 4,
paddingBottom: 1,
borderRadius: 8,
borderRadius: 6,
borderWidth: 2,
zIndex: 1,
},
notificationCountLight: {
borderColor: colors.white,
},
notificationCountDark: {
borderColor: colors.gray8,
},
notificationCountLabel: {
fontSize: 12,
fontWeight: 'bold',

View File

@ -38,7 +38,7 @@ import {useTheme} from 'lib/ThemeContext'
import {usePalette} from 'lib/hooks/usePalette'
import {useAnalytics} from 'lib/analytics'
import {pluralize} from 'lib/strings/helpers'
import {getCurrentRoute, isTab, getTabState, TabState} from 'lib/routes/helpers'
import {getTabState, TabState} from 'lib/routes/helpers'
import {NavigationProp} from 'lib/routes/types'
export const DrawerContent = observer(() => {
@ -49,13 +49,11 @@ export const DrawerContent = observer(() => {
const {track} = useAnalytics()
const {isAtHome, isAtSearch, isAtNotifications} = useNavigationState(
state => {
const currentRoute = state ? getCurrentRoute(state) : false
return {
isAtHome: currentRoute ? isTab(currentRoute.name, 'Home') : true,
isAtSearch: currentRoute ? isTab(currentRoute.name, 'Search') : false,
isAtNotifications: currentRoute
? isTab(currentRoute.name, 'Notifications')
: false,
isAtHome: getTabState(state, 'Home') !== TabState.Outside,
isAtSearch: getTabState(state, 'Search') !== TabState.Outside,
isAtNotifications:
getTabState(state, 'Notifications') !== TabState.Outside,
}
},
)
@ -133,8 +131,21 @@ export const DrawerContent = observer(() => {
<View style={[styles.menuItemIconWrapper]}>
{icon}
{count ? (
<View style={styles.menuItemCount}>
<Text style={styles.menuItemCountLabel}>{count}</Text>
<View
style={[
styles.menuItemCount,
theme.colorScheme === 'light'
? styles.menuItemCountLight
: styles.menuItemCountDark,
count > 99
? styles.menuItemCountHundreds
: count > 9
? styles.menuItemCountTens
: undefined,
]}>
<Text style={styles.menuItemCountLabel} numberOfLines={1}>
{count > 999 ? `${Math.round(count / 1000)}k` : count}
</Text>
</View>
) : undefined}
</View>
@ -346,16 +357,31 @@ const styles = StyleSheet.create({
},
menuItemCount: {
position: 'absolute',
right: -6,
top: -2,
backgroundColor: colors.red3,
width: 'auto',
right: -8,
top: -8,
backgroundColor: colors.blue3,
borderWidth: 2,
paddingHorizontal: 4,
paddingBottom: 1,
borderRadius: 6,
},
menuItemCountLight: {
borderColor: colors.white,
},
menuItemCountDark: {
borderColor: '#1B1919',
},
menuItemCountTens: {
width: 29,
},
menuItemCountHundreds: {
width: 38,
},
menuItemCountLabel: {
fontSize: 12,
fontWeight: 'bold',
fontVariant: ['tabular-nums'],
color: colors.white,
},