diff --git a/native/chat/text-message-markdown-context.js b/native/chat/text-message-markdown-context.js --- a/native/chat/text-message-markdown-context.js +++ b/native/chat/text-message-markdown-context.js @@ -3,7 +3,7 @@ import * as React from 'react'; import * as SimpleMarkdown from 'simple-markdown'; -import type { SingleASTNode } from 'lib/shared/markdown'; +import type { ASTNode, SingleASTNode } from 'lib/shared/markdown'; import { messageKey } from 'lib/shared/message-utils'; import type { TextMessageInfo } from 'lib/types/messages/text'; @@ -12,11 +12,27 @@ export type TextMessageMarkdownContextType = { +messageKey: string, +markdownAST: $ReadOnlyArray, + +markdownHasPressable: boolean, }; const TextMessageMarkdownContext: React.Context = React.createContext( null, ); +const pressableMarkdownTypes = new Set(['link']); +const markdownASTHasPressable = (node: ASTNode): boolean => { + if (Array.isArray(node)) { + return node.some(markdownASTHasPressable); + } + const { type, content, items } = node; + if (pressableMarkdownTypes.has(type)) { + return true; + } else if (items) { + return markdownASTHasPressable(items); + } else if (content) { + return markdownASTHasPressable(content); + } + return false; +}; function useTextMessageMarkdown( messageInfo: TextMessageInfo, @@ -37,6 +53,7 @@ () => ({ messageKey: key, markdownAST: ast, + markdownHasPressable: markdownASTHasPressable(ast), }), [key, ast], );