From 9df5caf3c545a7a1c559c6561625d99154aa0603 Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Tue, 21 Jan 2025 15:56:01 -0600 Subject: Update hashtag menu to use `Menu`, convert to native link for additional a11y and click handling (#7529) * Make tag a normal link on web * Replace old TagMenu with new RichTextTag component, expand and improve click utils * Clarify intents * Ensure we're passing down hint * ope * DRY --- src/components/RichText.tsx | 94 ++------------------------------------------- 1 file changed, 4 insertions(+), 90 deletions(-) (limited to 'src/components/RichText.tsx') diff --git a/src/components/RichText.tsx b/src/components/RichText.tsx index 4edd9f88e..7005d0742 100644 --- a/src/components/RichText.tsx +++ b/src/components/RichText.tsx @@ -1,19 +1,13 @@ import React from 'react' import {TextStyle} from 'react-native' import {AppBskyRichtextFacet, RichText as RichTextAPI} from '@atproto/api' -import {msg} from '@lingui/macro' -import {useLingui} from '@lingui/react' -import {useNavigation} from '@react-navigation/native' -import {NavigationProp} from '#/lib/routes/types' import {toShortUrl} from '#/lib/strings/url-helpers' -import {isNative} from '#/platform/detection' -import {atoms as a, flatten, native, TextStyleProp, useTheme, web} from '#/alf' +import {atoms as a, flatten, TextStyleProp} from '#/alf' import {isOnlyEmoji} from '#/alf/typography' -import {useInteractionState} from '#/components/hooks/useInteractionState' import {InlineLinkText, LinkProps} from '#/components/Link' import {ProfileHoverCard} from '#/components/ProfileHoverCard' -import {TagMenu, useTagMenuControl} from '#/components/TagMenu' +import {RichTextTag} from '#/components/RichTextTag' import {Text, TextProps} from '#/components/Typography' const WORD_WRAP = {wordWrap: 1} @@ -149,10 +143,9 @@ export function RichText({ els.push( , ) @@ -177,82 +170,3 @@ export function RichText({ ) } - -function RichTextTag({ - text, - tag, - style, - selectable, - authorHandle, -}: { - text: string - tag: string - selectable?: boolean - authorHandle?: string -} & TextStyleProp) { - const t = useTheme() - const {_} = useLingui() - const control = useTagMenuControl() - const { - state: hovered, - onIn: onHoverIn, - onOut: onHoverOut, - } = useInteractionState() - const {state: focused, onIn: onFocus, onOut: onBlur} = useInteractionState() - const navigation = useNavigation() - - const navigateToPage = React.useCallback(() => { - navigation.push('Hashtag', { - tag: encodeURIComponent(tag), - }) - }, [navigation, tag]) - - const openDialog = React.useCallback(() => { - control.open() - }, [control]) - - /* - * N.B. On web, this is wrapped in another pressable comopnent with a11y - * labels, etc. That's why only some of these props are applied here. - */ - - return ( - - - - {text} - - - - ) -} -- cgit 1.4.1