Enable links within messages (#638)

This commit is contained in:
alwx 2017-01-19 13:25:10 +03:00 committed by Roman Volosovskyi
parent 4a73facf4e
commit e1a1ab5c37
4 changed files with 43 additions and 21 deletions

View File

@ -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"

View File

@ -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",

View File

@ -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})])]]])})))

View File

@ -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)]))