From 7a62b4b48bc933aba0be715dacba39eca6203f65 Mon Sep 17 00:00:00 2001 From: Dmitry Novotochinov Date: Mon, 22 Oct 2018 21:20:35 +0300 Subject: [PATCH] [#6415] mark button as inactive when no internet or mailserver connection Signed-off-by: Goran Jovic --- .../ui/screens/chat/input/send_button.cljs | 8 +++-- .../ui/screens/desktop/main/chat/views.cljs | 32 ++++++++++++------- src/status_im/ui/screens/subs.cljs | 5 +++ 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/src/status_im/ui/screens/chat/input/send_button.cljs b/src/status_im/ui/screens/chat/input/send_button.cljs index ed9736892b..812c8b23af 100644 --- a/src/status_im/ui/screens/chat/input/send_button.cljs +++ b/src/status_im/ui/screens/chat/input/send_button.cljs @@ -14,20 +14,22 @@ (animation/timing spin-value {:toValue to-spin-value :duration 300}))))) -(defn sendable? [input-text network-status] +(defn sendable? [input-text network-status mailserver-connected?] (let [trimmed (string/trim input-text)] (not (or (string/blank? trimmed) (= trimmed "/") - (= :offline network-status))))) + (= :offline network-status) + (not mailserver-connected?))))) (defview send-button-view [] (letsubs [{:keys [command-completion]} [:selected-chat-command] {:keys [input-text seq-arg-input-text]} [:get-current-chat] network-status [:network-status] + mailserver-connected? [:mailserver-connected?] spin-value (animation/create-value 1)] {:component-did-update (send-button-view-on-update {:spin-value spin-value :command-completion command-completion})} - (when (and (sendable? input-text network-status) + (when (and (sendable? input-text network-status mailserver-connected?) (or (not command-completion) (#{:complete :less-than-needed} command-completion))) [react/touchable-highlight {:on-press #(re-frame/dispatch [:chat.ui/send-current-message])} diff --git a/src/status_im/ui/screens/desktop/main/chat/views.cljs b/src/status_im/ui/screens/desktop/main/chat/views.cljs index 2d29fe957c..87e2a02d69 100644 --- a/src/status_im/ui/screens/desktop/main/chat/views.cljs +++ b/src/status_im/ui/screens/desktop/main/chat/views.cljs @@ -251,16 +251,20 @@ :current-public-key current-public-key)]))]] [connectivity/error-view]]))) -(views/defview send-button [inp-ref] +(views/defview send-button [inp-ref network-status mailserver-connected?] (views/letsubs [{:keys [input-text]} [:get-current-chat]] - (let [empty? (= "" input-text)] + (let [empty? (= "" input-text) + offline? (= :offline network-status) + inactive? (or empty? offline? (not mailserver-connected?))] [react/touchable-highlight {:style styles/send-button + :disabled inactive? :on-press (fn [] - (.clear @inp-ref) - (.focus @inp-ref) - (re-frame/dispatch [:chat.ui/send-current-message]))} - [react/view {:style (styles/send-icon empty?)} - [icons/icon :icons/arrow-left {:style (styles/send-icon-arrow empty?)}]]]))) + (when-not inactive? + (.clear @inp-ref) + (.focus @inp-ref) + (re-frame/dispatch [:chat.ui/send-current-message])))} + [react/view {:style (styles/send-icon inactive?)} + [icons/icon :icons/arrow-left {:style (styles/send-icon-arrow inactive?)}]]]))) (views/defview reply-message [from message-text] (views/letsubs [username [:get-contact-name-by-identity from] @@ -292,7 +296,9 @@ [icons/icon :icons/close {:style styles/reply-close-icon}]]]]))) (views/defview chat-text-input [chat-id input-text] - (views/letsubs [inp-ref (atom nil)] + (views/letsubs [inp-ref (atom nil) + network-status [:network-status] + mailserver-connected? [:mailserver-connected?]] {:component-will-update (fn [e [_ new-chat-id new-input-text]] (let [[_ old-chat-id] (.. e -props -argv)] @@ -313,14 +319,16 @@ :default-value input-text :on-content-size-change #(set-container-height-fn (.-height (.-contentSize (.-nativeEvent %)))) :submit-shortcut {:key "Enter"} - :on-submit-editing #(do (.clear @inp-ref) - (.focus @inp-ref) - (re-frame/dispatch [:chat.ui/send-current-message])) + :on-submit-editing #(when (and (= :online network-status) + mailserver-connected?) + (.clear @inp-ref) + (.focus @inp-ref) + (re-frame/dispatch [:chat.ui/send-current-message])) :on-change (fn [e] (let [native-event (.-nativeEvent e) text (.-text native-event)] (re-frame/dispatch [:chat.ui/set-chat-input-text text])))}] - [send-button inp-ref]]))) + [send-button inp-ref network-status mailserver-connected?]]))) (views/defview chat-view [] (views/letsubs [{:keys [input-text chat-id] :as current-chat} [:get-current-chat]] diff --git a/src/status_im/ui/screens/subs.cljs b/src/status_im/ui/screens/subs.cljs index 44605c00b5..ceeac50f51 100644 --- a/src/status_im/ui/screens/subs.cljs +++ b/src/status_im/ui/screens/subs.cljs @@ -72,6 +72,11 @@ (fn [mailserver-status] (#{:error :disconnected} mailserver-status))) +(reg-sub :mailserver-connected? + :<- [:mailserver-status] + (fn [mailserver-status] + (= :connected mailserver-status))) + (reg-sub :syncing? :<- [:sync-state] (fn [sync-state]