[Experiment] Remove "Load Latest" button (#7120)
* Remove "show latest" behind the gate * Add HomeBadgeProvider * Update provider state from home feed tabs * Add Home badge to native * Add Home badge to mobile web * Add Home badge to desktop web
This commit is contained in:
@@ -15,8 +15,10 @@ import {useNavigationTabState} from '#/lib/hooks/useNavigationTabState'
|
||||
import {usePalette} from '#/lib/hooks/usePalette'
|
||||
import {clamp} from '#/lib/numbers'
|
||||
import {getTabState, TabState} from '#/lib/routes/helpers'
|
||||
import {useGate} from '#/lib/statsig/statsig'
|
||||
import {s} from '#/lib/styles'
|
||||
import {emitSoftReset} from '#/state/events'
|
||||
import {useHomeBadge} from '#/state/home-badge'
|
||||
import {useUnreadMessageCount} from '#/state/queries/messages/list-conversations'
|
||||
import {useUnreadNotifications} from '#/state/queries/notifications/unread'
|
||||
import {useProfileQuery} from '#/state/queries/profile'
|
||||
@@ -73,6 +75,8 @@ export function BottomBar({navigation}: BottomTabBarProps) {
|
||||
const dedupe = useDedupe()
|
||||
const accountSwitchControl = useDialogControl()
|
||||
const playHaptic = useHaptics()
|
||||
const hasHomeBadge = useHomeBadge()
|
||||
const gate = useGate()
|
||||
const iconWidth = 28
|
||||
|
||||
const showSignIn = React.useCallback(() => {
|
||||
@@ -153,6 +157,7 @@ export function BottomBar({navigation}: BottomTabBarProps) {
|
||||
/>
|
||||
)
|
||||
}
|
||||
hasNew={hasHomeBadge && gate('remove_show_latest_button')}
|
||||
onPress={onPressHome}
|
||||
accessibilityRole="tab"
|
||||
accessibilityLabel={_(msg`Home`)}
|
||||
@@ -334,6 +339,7 @@ interface BtnProps
|
||||
testID?: string
|
||||
icon: JSX.Element
|
||||
notificationCount?: string
|
||||
hasNew?: boolean
|
||||
onPress?: (event: GestureResponderEvent) => void
|
||||
onLongPress?: (event: GestureResponderEvent) => void
|
||||
}
|
||||
@@ -341,6 +347,7 @@ interface BtnProps
|
||||
function Btn({
|
||||
testID,
|
||||
icon,
|
||||
hasNew,
|
||||
notificationCount,
|
||||
onPress,
|
||||
onLongPress,
|
||||
@@ -363,7 +370,9 @@ function Btn({
|
||||
<View style={[styles.notificationCount, a.rounded_full]}>
|
||||
<Text style={styles.notificationCountLabel}>{notificationCount}</Text>
|
||||
</View>
|
||||
) : undefined}
|
||||
) : hasNew ? (
|
||||
<View style={[styles.hasNewBadge, a.rounded_full]} />
|
||||
) : null}
|
||||
</PressableScale>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -44,6 +44,17 @@ export const styles = StyleSheet.create({
|
||||
color: colors.white,
|
||||
fontVariant: ['tabular-nums'],
|
||||
},
|
||||
hasNewBadge: {
|
||||
position: 'absolute',
|
||||
left: '52%',
|
||||
marginLeft: 4,
|
||||
top: 10,
|
||||
width: 8,
|
||||
height: 8,
|
||||
backgroundColor: colors.blue3,
|
||||
borderRadius: 6,
|
||||
zIndex: 1,
|
||||
},
|
||||
ctrlIcon: {
|
||||
marginLeft: 'auto',
|
||||
marginRight: 'auto',
|
||||
|
||||
@@ -9,6 +9,8 @@ import {useMinimalShellFooterTransform} from '#/lib/hooks/useMinimalShellTransfo
|
||||
import {getCurrentRoute, isTab} from '#/lib/routes/helpers'
|
||||
import {makeProfileLink} from '#/lib/routes/links'
|
||||
import {CommonNavigatorParams} from '#/lib/routes/types'
|
||||
import {useGate} from '#/lib/statsig/statsig'
|
||||
import {useHomeBadge} from '#/state/home-badge'
|
||||
import {useUnreadMessageCount} from '#/state/queries/messages/list-conversations'
|
||||
import {useUnreadNotifications} from '#/state/queries/notifications/unread'
|
||||
import {useSession} from '#/state/session'
|
||||
@@ -51,6 +53,8 @@ export function BottomBarWeb() {
|
||||
|
||||
const unreadMessageCount = useUnreadMessageCount()
|
||||
const notificationCountStr = useUnreadNotifications()
|
||||
const hasHomeBadge = useHomeBadge()
|
||||
const gate = useGate()
|
||||
|
||||
const showSignIn = React.useCallback(() => {
|
||||
closeAllActiveElements()
|
||||
@@ -75,7 +79,10 @@ export function BottomBarWeb() {
|
||||
]}>
|
||||
{hasSession ? (
|
||||
<>
|
||||
<NavItem routeName="Home" href="/">
|
||||
<NavItem
|
||||
routeName="Home"
|
||||
href="/"
|
||||
hasNew={hasHomeBadge && gate('remove_show_latest_button')}>
|
||||
{({isActive}) => {
|
||||
const Icon = isActive ? HomeFilled : Home
|
||||
return (
|
||||
@@ -105,7 +112,7 @@ export function BottomBarWeb() {
|
||||
<NavItem
|
||||
routeName="Messages"
|
||||
href="/messages"
|
||||
badge={
|
||||
notificationCount={
|
||||
unreadMessageCount.count > 0
|
||||
? unreadMessageCount.numUnread
|
||||
: undefined
|
||||
@@ -128,7 +135,7 @@ export function BottomBarWeb() {
|
||||
<NavItem
|
||||
routeName="Notifications"
|
||||
href="/notifications"
|
||||
badge={notificationCountStr}>
|
||||
notificationCount={notificationCountStr}>
|
||||
{({isActive}) => {
|
||||
const Icon = isActive ? BellFilled : Bell
|
||||
return (
|
||||
@@ -220,8 +227,9 @@ const NavItem: React.FC<{
|
||||
children: (props: {isActive: boolean}) => React.ReactChild
|
||||
href: string
|
||||
routeName: string
|
||||
badge?: string
|
||||
}> = ({children, href, routeName, badge}) => {
|
||||
hasNew?: boolean
|
||||
notificationCount?: string
|
||||
}> = ({children, href, routeName, hasNew, notificationCount}) => {
|
||||
const {_} = useLingui()
|
||||
const {currentAccount} = useSession()
|
||||
const currentRoute = useNavigationState(state => {
|
||||
@@ -246,13 +254,15 @@ const NavItem: React.FC<{
|
||||
aria-label={routeName}
|
||||
accessible={true}>
|
||||
{children({isActive})}
|
||||
{!!badge && (
|
||||
{notificationCount ? (
|
||||
<View
|
||||
style={styles.notificationCount}
|
||||
aria-label={_(msg`${badge} unread items`)}>
|
||||
<Text style={styles.notificationCountLabel}>{badge}</Text>
|
||||
aria-label={_(msg`${notificationCount} unread items`)}>
|
||||
<Text style={styles.notificationCountLabel}>{notificationCount}</Text>
|
||||
</View>
|
||||
)}
|
||||
) : hasNew ? (
|
||||
<View style={styles.hasNewBadge} />
|
||||
) : null}
|
||||
</Link>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -14,8 +14,10 @@ import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
|
||||
import {getCurrentRoute, isTab} from '#/lib/routes/helpers'
|
||||
import {makeProfileLink} from '#/lib/routes/links'
|
||||
import {CommonNavigatorParams} from '#/lib/routes/types'
|
||||
import {useGate} from '#/lib/statsig/statsig'
|
||||
import {isInvalidHandle} from '#/lib/strings/handles'
|
||||
import {emitSoftReset} from '#/state/events'
|
||||
import {useHomeBadge} from '#/state/home-badge'
|
||||
import {useFetchHandle} from '#/state/queries/handle'
|
||||
import {useUnreadMessageCount} from '#/state/queries/messages/list-conversations'
|
||||
import {useUnreadNotifications} from '#/state/queries/notifications/unread'
|
||||
@@ -100,12 +102,13 @@ function ProfileCard() {
|
||||
|
||||
interface NavItemProps {
|
||||
count?: string
|
||||
hasNew?: boolean
|
||||
href: string
|
||||
icon: JSX.Element
|
||||
iconFilled: JSX.Element
|
||||
label: string
|
||||
}
|
||||
function NavItem({count, href, icon, iconFilled, label}: NavItemProps) {
|
||||
function NavItem({count, hasNew, href, icon, iconFilled, label}: NavItemProps) {
|
||||
const t = useTheme()
|
||||
const {_} = useLingui()
|
||||
const {currentAccount} = useSession()
|
||||
@@ -214,6 +217,24 @@ function NavItem({count, href, icon, iconFilled, label}: NavItemProps) {
|
||||
{count}
|
||||
</Text>
|
||||
</View>
|
||||
) : hasNew ? (
|
||||
<View
|
||||
style={[
|
||||
a.absolute,
|
||||
a.rounded_full,
|
||||
{
|
||||
backgroundColor: t.palette.primary_500,
|
||||
width: 8,
|
||||
height: 8,
|
||||
right: -1,
|
||||
top: -3,
|
||||
},
|
||||
isTablet && {
|
||||
right: 6,
|
||||
top: 4,
|
||||
},
|
||||
]}
|
||||
/>
|
||||
) : null}
|
||||
</View>
|
||||
{gtTablet && (
|
||||
@@ -322,6 +343,8 @@ export function DesktopLeftNav() {
|
||||
const {_} = useLingui()
|
||||
const {isDesktop, isTablet} = useWebMediaQueries()
|
||||
const numUnreadNotifications = useUnreadNotifications()
|
||||
const hasHomeBadge = useHomeBadge()
|
||||
const gate = useGate()
|
||||
|
||||
if (!hasSession && !isDesktop) {
|
||||
return null
|
||||
@@ -348,6 +371,7 @@ export function DesktopLeftNav() {
|
||||
<>
|
||||
<NavItem
|
||||
href="/"
|
||||
hasNew={hasHomeBadge && gate('remove_show_latest_button')}
|
||||
icon={
|
||||
<Home
|
||||
aria-hidden={true}
|
||||
|
||||
Reference in New Issue
Block a user