mirror of
https://github.com/status-im/status-react.git
synced 2025-02-16 21:07:21 +00:00
Enable links within messages (#638)
This commit is contained in:
parent
4a73facf4e
commit
e1a1ab5c37
@ -35,7 +35,8 @@
|
|||||||
"chance",
|
"chance",
|
||||||
"react-native-swiper",
|
"react-native-swiper",
|
||||||
"react-native-share",
|
"react-native-share",
|
||||||
"react-native-emoji-picker"
|
"react-native-emoji-picker",
|
||||||
|
"react-native-autolink"
|
||||||
],
|
],
|
||||||
"imageDirs": [
|
"imageDirs": [
|
||||||
"images"
|
"images"
|
||||||
|
@ -44,6 +44,7 @@
|
|||||||
"react-native": "^0.38.0",
|
"react-native": "^0.38.0",
|
||||||
"react-native-action-button": "2.0.13",
|
"react-native-action-button": "2.0.13",
|
||||||
"react-native-android-sms-listener": "github:adrian-tiberius/react-native-android-sms-listener#listener-bugfix",
|
"react-native-android-sms-listener": "github:adrian-tiberius/react-native-android-sms-listener#listener-bugfix",
|
||||||
|
"react-native-autolink": "^0.10.0",
|
||||||
"react-native-camera": "git+https://github.com/alwx/react-native-camera.git",
|
"react-native-camera": "git+https://github.com/alwx/react-native-camera.git",
|
||||||
"react-native-circle-checkbox": "github:paramoshkinandrew/ReactNativeCircleCheckbox",
|
"react-native-circle-checkbox": "github:paramoshkinandrew/ReactNativeCircleCheckbox",
|
||||||
"react-native-contacts": "^0.2.4",
|
"react-native-contacts": "^0.2.4",
|
||||||
|
@ -9,7 +9,9 @@
|
|||||||
image
|
image
|
||||||
icon
|
icon
|
||||||
animated-view
|
animated-view
|
||||||
|
touchable-without-feedback
|
||||||
touchable-highlight
|
touchable-highlight
|
||||||
|
autolink
|
||||||
get-dimensions]]
|
get-dimensions]]
|
||||||
[status-im.components.animation :as anim]
|
[status-im.components.animation :as anim]
|
||||||
[status-im.chat.constants :as chat-consts]
|
[status-im.chat.constants :as chat-consts]
|
||||||
@ -198,10 +200,15 @@
|
|||||||
(defn text-message
|
(defn text-message
|
||||||
[{:keys [content] :as message}]
|
[{:keys [content] :as message}]
|
||||||
[message-view message
|
[message-view message
|
||||||
[text {:style (st/text-message message)
|
(let [parsed-text (parse-text content)
|
||||||
:font :default
|
simple-text? (= (count parsed-text) 2)]
|
||||||
:on-long-press #(share content (label :t/message))}
|
(if simple-text?
|
||||||
(parse-text content)]])
|
[autolink {:style (st/text-message message)
|
||||||
|
:font :default
|
||||||
|
:text (apply str parsed-text)}]
|
||||||
|
[text {:style (st/text-message message)
|
||||||
|
:font :default}
|
||||||
|
(parse-text content)]))])
|
||||||
|
|
||||||
(defmethod message-content text-content-type
|
(defmethod message-content text-content-type
|
||||||
[wrapper message]
|
[wrapper message]
|
||||||
@ -377,12 +384,14 @@
|
|||||||
:from from
|
:from from
|
||||||
:message-id message-id}])))
|
:message-id message-id}])))
|
||||||
:reagent-render
|
:reagent-render
|
||||||
(fn [{:keys [outgoing group-chat] :as message}]
|
(fn [{:keys [outgoing group-chat content-type content] :as message}]
|
||||||
[message-container message
|
[message-container message
|
||||||
[view
|
[touchable-highlight {:on-long-press (when (= content-type text-content-type)
|
||||||
(let [incoming-group (and group-chat (not outgoing))]
|
#(share content (label :t/message)))}
|
||||||
[message-content
|
[view
|
||||||
(if incoming-group
|
(let [incoming-group (and group-chat (not outgoing))]
|
||||||
incoming-group-message-body
|
[message-content
|
||||||
message-body)
|
(if incoming-group
|
||||||
(merge message {:incoming-group incoming-group})])]])})))
|
incoming-group-message-body
|
||||||
|
message-body)
|
||||||
|
(merge message {:incoming-group incoming-group})])]]])})))
|
||||||
|
@ -52,20 +52,23 @@
|
|||||||
|
|
||||||
;; Accessor methods for React Components
|
;; Accessor methods for React Components
|
||||||
|
|
||||||
|
(defn add-font-style [style-key {:keys [font] :as opts :or {font :default}}]
|
||||||
|
(let [font (get-in platform-specific [:fonts (keyword font)])
|
||||||
|
style (get opts style-key)]
|
||||||
|
(-> opts
|
||||||
|
(dissoc :font)
|
||||||
|
(assoc style-key (merge style font)))))
|
||||||
|
|
||||||
(defn text
|
(defn text
|
||||||
([t]
|
([t]
|
||||||
(r/as-element [text-class t]))
|
(r/as-element [text-class t]))
|
||||||
([{:keys [style font uppercase?] :as opts
|
([{:keys [uppercase?] :as opts
|
||||||
:or {font :default}} t & ts]
|
:or {font :default}} t & ts]
|
||||||
(r/as-element
|
(r/as-element
|
||||||
(let [font (get-in platform-specific [:fonts (keyword font)])
|
(let [ts (cond->> (conj ts t)
|
||||||
ts (cond->> (conj ts t)
|
uppercase? (map clojure.string/upper-case))]
|
||||||
uppercase? (map clojure.string/upper-case))]
|
|
||||||
(vec (concat
|
(vec (concat
|
||||||
[text-class
|
[text-class (add-font-style :style opts)]
|
||||||
(-> opts
|
|
||||||
(dissoc :font)
|
|
||||||
(assoc :style (merge style font)))]
|
|
||||||
ts))))))
|
ts))))))
|
||||||
|
|
||||||
(defn text-input [{:keys [font style] :as opts
|
(defn text-input [{:keys [font style] :as opts
|
||||||
@ -133,3 +136,11 @@
|
|||||||
(def emoji-picker
|
(def emoji-picker
|
||||||
(let [emoji-picker (.-default emoji-picker-class)]
|
(let [emoji-picker (.-default emoji-picker-class)]
|
||||||
(r/adapt-react-class emoji-picker)))
|
(r/adapt-react-class emoji-picker)))
|
||||||
|
|
||||||
|
;; Autolink
|
||||||
|
|
||||||
|
(def autolink-class (r/adapt-react-class (.-default (js/require "react-native-autolink"))))
|
||||||
|
|
||||||
|
(defn autolink [opts]
|
||||||
|
(r/as-element
|
||||||
|
[autolink-class (add-font-style :style opts)]))
|
Loading…
x
Reference in New Issue
Block a user