diff --git a/src/status_im/communities/core.cljs b/src/status_im/communities/core.cljs index 8082038590..ec5f83a748 100644 --- a/src/status_im/communities/core.cljs +++ b/src/status_im/communities/core.cljs @@ -202,6 +202,16 @@ %) (re-frame/dispatch [::failed-to-leave %]))}]})) +(rf/defn status-tag-pressed + {:events [:communities/status-tag-pressed]} + [{:keys [db]} community-id literal] + (let [current-chat-id (:current-chat-id db) + {:keys [id]} (some #(when (= (:name %) literal) %) + (vals (get-in db [:communities community-id :chats])))] + (when (and id + (not= current-chat-id (str community-id id))) + {:dispatch [:chat/navigate-to-chat (str community-id id)]}))) + (rf/defn fetch [_] {:json-rpc/call [{:method "wakuext_communities" diff --git a/src/status_im/ui2/screens/chat/messages/message.cljs b/src/status_im/ui2/screens/chat/messages/message.cljs index c8b7503119..27172934e2 100644 --- a/src/status_im/ui2/screens/chat/messages/message.cljs +++ b/src/status_im/ui2/screens/chat/messages/message.cljs @@ -38,7 +38,8 @@ (rf/sub [:messages/resolve-mention from])) (defn render-inline - [_message-text content-type acc {:keys [type literal destination]}] + [_message-text content-type acc {:keys [type literal destination]} + community-id] (case type "" (conj acc literal) @@ -80,9 +81,10 @@ "status-tag" (conj acc [rn/text - {:style {:color :blue - :text-decoration-line :underline} - :on-press #(rf/dispatch [:chat.ui/start-public-chat literal])} + (when community-id + {:style {:color :blue + :text-decoration-line :underline} + :on-press #(rf/dispatch [:communities/status-tag-pressed community-id literal])}) "#" literal]) @@ -94,13 +96,20 @@ ;; TEXT (defn render-block [{:keys [content content-type edited-at in-popover?]} acc - {:keys [type ^js literal children]}] + {:keys [type ^js literal children]} + community-id] + (case type "paragraph" (conj acc (reduce - (fn [acc e] (render-inline (:text content) content-type acc e)) + (fn [acc e] + (render-inline (:text content) + content-type + acc + e + community-id)) [rn/text (style/text-style content-type in-popover?)] (conj children @@ -121,11 +130,16 @@ acc)) (defn render-parsed-text - [{:keys [content] :as message-data}] - (reduce (fn [acc e] - (render-block message-data acc e)) - [:<>] - (:parsed-text content))) + [{:keys [content chat-id] + :as message-data}] + (let [community-id (rf/sub [:community-id-by-chat-id chat-id])] + (reduce (fn [acc e] + (render-block message-data + acc + e + community-id)) + [:<>] + (:parsed-text content)))) (defn quoted-message [{:keys [message-id chat-id]} pin?] @@ -219,7 +233,7 @@ [rn/view style/status-container [rn/text {:style (style/status-text)} (reduce - (fn [acc e] (render-inline (:text content) content-type acc e)) + (fn [acc e] (render-inline (:text content) content-type acc e nil)) [rn/text {:style (style/status-text)}] (-> content :parsed-text peek :children))]]) diff --git a/src/status_im2/contexts/chat/messages/content/text/view.cljs b/src/status_im2/contexts/chat/messages/content/text/view.cljs index dd4293e9db..303a17850e 100644 --- a/src/status_im2/contexts/chat/messages/content/text/view.cljs +++ b/src/status_im2/contexts/chat/messages/content/text/view.cljs @@ -10,7 +10,7 @@ (defn render-inline - [units {:keys [type literal destination]}] + [units {:keys [type literal destination]} chat-id] (case (keyword type) :code (conj units [rn/view {:style (merge style/block (style/code))} [quo/text {:weight :code} literal]]) @@ -59,17 +59,28 @@ :color (colors/theme-colors colors/neutral-40 colors/neutral-50)}} literal]) + :status-tag + (let [community-id (rf/sub [:community-id-by-chat-id chat-id])] + (conj units + [rn/text + (when community-id + {:style {:color :blue + :text-decoration-line :underline} + :on-press #(rf/dispatch [:communities/status-tag-pressed community-id literal])}) + "#" + literal])) (conj units literal))) (defn render-block - [blocks {:keys [type ^js literal children]} edited-at] + [blocks {:keys [type literal children]} chat-id edited-at] (case (keyword type) :paragraph (conj blocks (reduce - render-inline + (fn [acc e] + (render-inline acc e chat-id)) [quo/text] children)) @@ -110,9 +121,9 @@ :type :edited})))) (defn render-parsed-text - [{:keys [content edited-at]}] + [{:keys [content chat-id edited-at]}] (reduce (fn [acc e] - (render-block acc e edited-at)) + (render-block acc e chat-id edited-at)) [:<>] (cond-> (:parsed-text content) edited-at add-edited-tag))) diff --git a/src/status_im2/subs/chat/chats.cljs b/src/status_im2/subs/chat/chats.cljs index f8eca27f31..affca6d6e6 100644 --- a/src/status_im2/subs/chat/chats.cljs +++ b/src/status_im2/subs/chat/chats.cljs @@ -20,6 +20,13 @@ (fn [chats [_ chat-id]] (get chats chat-id))) +(re-frame/reg-sub + :community-id-by-chat-id + (fn [[_ chat-id]] + [(re-frame/subscribe [:chats/chat chat-id])]) + (fn [[chat]] + (:community-id chat))) + (re-frame/reg-sub :chats/by-community-id :<- [:chats/chats]