From a0bd8042621e108f47e09dd096cf0d73fe1cee53 Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Sat, 10 May 2025 00:06:06 +0300 Subject: Live (#8354) --- src/components/ProfileHoverCard/index.web.tsx | 50 ++++++++++++++++++++++----- 1 file changed, 41 insertions(+), 9 deletions(-) (limited to 'src/components/ProfileHoverCard/index.web.tsx') diff --git a/src/components/ProfileHoverCard/index.web.tsx b/src/components/ProfileHoverCard/index.web.tsx index 09b587c5e..4f6545a2e 100644 --- a/src/components/ProfileHoverCard/index.web.tsx +++ b/src/components/ProfileHoverCard/index.web.tsx @@ -1,4 +1,4 @@ -import React from 'react' +import React, {useCallback} from 'react' import {View} from 'react-native' import { type AppBskyActorDefs, @@ -8,10 +8,13 @@ import { import {flip, offset, shift, size, useFloating} from '@floating-ui/react-dom' import {msg, plural} from '@lingui/macro' import {useLingui} from '@lingui/react' +import {useNavigation} from '@react-navigation/native' +import {useActorStatus} from '#/lib/actor-status' import {isTouchDevice} from '#/lib/browser' import {getModerationCauseKey} from '#/lib/moderation' import {makeProfileLink} from '#/lib/routes/links' +import {type NavigationProp} from '#/lib/routes/types' import {sanitizeDisplayName} from '#/lib/strings/display-names' import {sanitizeHandle} from '#/lib/strings/handles' import {useProfileShadow} from '#/state/cache/profile-shadow' @@ -32,6 +35,7 @@ import { shouldShowKnownFollowers, } from '#/components/KnownFollowers' import {InlineLinkText, Link} from '#/components/Link' +import {LiveStatus} from '#/components/live/LiveStatusDialog' import {Loader} from '#/components/Loader' import * as Pills from '#/components/Pills' import {Portal} from '#/components/Portal' @@ -105,6 +109,8 @@ const HIDE_DELAY = 150 const HIDE_DURATION = 200 export function ProfileHoverCardInner(props: ProfileHoverCardProps) { + const navigation = useNavigation() + const {refs, floatingStyles} = useFloating({ middleware: floatingMiddlewares, }) @@ -330,7 +336,7 @@ export function ProfileHoverCardInner(props: ProfileHoverCardProps) { onPointerEnter={onPointerEnterCard} onPointerLeave={onPointerLeaveCard}>
- +
@@ -339,7 +345,15 @@ export function ProfileHoverCardInner(props: ProfileHoverCardProps) { ) } -let Card = ({did, hide}: {did: string; hide: () => void}): React.ReactNode => { +let Card = ({ + did, + hide, + navigation, +}: { + did: string + hide: () => void + navigation: NavigationProp +}): React.ReactNode => { const t = useTheme() const profile = useProfileQuery({did}) @@ -347,24 +361,42 @@ let Card = ({did, hide}: {did: string; hide: () => void}): React.ReactNode => { const data = profile.data + const status = useActorStatus(data) + + const onPressOpenProfile = useCallback(() => { + if (!status.isActive || !data) return + hide() + navigation.push('Profile', { + name: data.handle, + }) + }, [hide, navigation, status, data]) + return ( {data && moderationOpts ? ( - + status.isActive ? ( + + ) : ( + + ) ) : ( - + )} -- cgit 1.4.1