From bc5f0ccda660cac7149940096141b1e304f7e159 Mon Sep 17 00:00:00 2001 From: Ibrahem Khalil Date: Mon, 20 Feb 2023 11:47:26 +0200 Subject: [PATCH] Prevent #links to work except in community chats and allow redirection from channel to another when clicked (#15069) --- src/status_im/communities/core.cljs | 9 +++++ .../ui2/screens/chat/messages/message.cljs | 38 +++++++++++++------ src/status_im2/subs/chat/chats.cljs | 8 ++++ 3 files changed, 43 insertions(+), 12 deletions(-) diff --git a/src/status_im/communities/core.cljs b/src/status_im/communities/core.cljs index 8dfa8d95ce..2289b2c6fa 100644 --- a/src/status_im/communities/core.cljs +++ b/src/status_im/communities/core.cljs @@ -198,6 +198,15 @@ %) (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-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 4e25f1d8cd..7b3284a77c 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 [:contacts/contact-name-by-identity 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]} reply pin?] @@ -234,7 +248,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/subs/chat/chats.cljs b/src/status_im2/subs/chat/chats.cljs index 19b85018ab..bfce0f9028 100644 --- a/src/status_im2/subs/chat/chats.cljs +++ b/src/status_im2/subs/chat/chats.cljs @@ -20,6 +20,14 @@ (fn [chats [_ chat-id]] (get chats chat-id))) +(re-frame/reg-sub + :community-id-by-chat-id + :<- [:chats/chats] + (fn [chats [_ chat-id]] + (-> chats + (get chat-id) + :community-id))) + (re-frame/reg-sub :chats/by-community-id :<- [:chats/chats]