Add cashtag support for stock ticker discussions (#9689)
* Add cashtag support for stock ticker discussions Display cashtags ($TICKER format) as clickable links with dedicated menu actions and search feed, alongside hashtags. Includes composer highlighting and proper formatting. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * Fix cashtag search query to use # prefix Cashtags need to be searched as "#$BTC" rather than just "$BTC" to work with the search API. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Update @atproto/api to 0.18.14 with cashtag support The updated package includes native CASHTAG_REGEX detection for stock ticker symbols like $AAPL and $BTC. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Fix todo, remove redundant validation --------- Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com> Co-authored-by: Eric Bailey <git@esb.lol>
This commit is contained in:
@@ -48,10 +48,11 @@ export function RichTextTag({
|
||||
reset: resetRemove,
|
||||
} = useRemoveMutedWordsMutation()
|
||||
const navigation = useNavigation<NavigationProp>()
|
||||
const label = _(msg`Hashtag ${tag}`)
|
||||
const isCashtag = tag.startsWith('$')
|
||||
const label = isCashtag ? _(msg`Cashtag ${tag}`) : _(msg`Hashtag ${tag}`)
|
||||
const hint = isNative
|
||||
? _(msg`Long press to open tag menu for #${tag}`)
|
||||
: _(msg`Click to open tag menu for ${tag}`)
|
||||
? _(msg`Long press to open tag menu for ${isCashtag ? tag : `#${tag}`}`)
|
||||
: _(msg`Click to open tag menu for ${isCashtag ? tag : `#${tag}`}`)
|
||||
|
||||
const isMuted = Boolean(
|
||||
(preferences?.moderationPrefs.mutedWords?.find(
|
||||
@@ -109,20 +110,24 @@ export function RichTextTag({
|
||||
<Menu.Outer>
|
||||
<Menu.Group>
|
||||
<Menu.Item
|
||||
label={_(msg`See ${tag} posts`)}
|
||||
label={_(msg`See ${isCashtag ? tag : `#${tag}`} posts`)}
|
||||
onPress={() => {
|
||||
navigation.push('Hashtag', {
|
||||
tag: encodeURIComponent(tag),
|
||||
})
|
||||
}}>
|
||||
<Menu.ItemText>
|
||||
<Trans>See #{tag} posts</Trans>
|
||||
{isCashtag ? (
|
||||
<Trans>See {tag} posts</Trans>
|
||||
) : (
|
||||
<Trans>See #{tag} posts</Trans>
|
||||
)}
|
||||
</Menu.ItemText>
|
||||
<Menu.ItemIcon icon={Search} />
|
||||
</Menu.Item>
|
||||
{authorHandle && !isInvalidHandle(authorHandle) && (
|
||||
<Menu.Item
|
||||
label={_(msg`See ${tag} posts by user`)}
|
||||
label={_(msg`See ${isCashtag ? tag : `#${tag}`} posts by user`)}
|
||||
onPress={() => {
|
||||
navigation.push('Hashtag', {
|
||||
tag: encodeURIComponent(tag),
|
||||
@@ -130,7 +135,11 @@ export function RichTextTag({
|
||||
})
|
||||
}}>
|
||||
<Menu.ItemText>
|
||||
<Trans>See #{tag} posts by user</Trans>
|
||||
{isCashtag ? (
|
||||
<Trans>See {tag} posts by user</Trans>
|
||||
) : (
|
||||
<Trans>See #{tag} posts by user</Trans>
|
||||
)}
|
||||
</Menu.ItemText>
|
||||
<Menu.ItemIcon icon={Person} />
|
||||
</Menu.Item>
|
||||
|
||||
Reference in New Issue
Block a user