             [status-im.components.react :refer [view
                                                 icon
                                                 touchable-highlight
-                                                text-input]]
+                                                text-input
+                                                dismiss-keyboard!]]
             [status-im.chat.views.suggestions :refer [suggestions-view]]
             [status-im.chat.views.content-suggestions :refer [content-suggestions-view]]
             [status-im.chat.views.command :as command]

(defn set-input-message [message]
  (dispatch [:set-chat-input-text message]))

(defn send []
  (dispatch [:send-chat-msg]))

(defn message-valid? [staged-commands message]

        staged-commands (subscribe [:get-chat-staged-commands])
        typing-command? (subscribe [:typing-command?])]
    (fn [{:keys [command input-options validator]}]
      (let [dismiss-keyboard (not (or command @typing-command?))]
        [view st/input-container
         (if command
           [content-suggestions-view]
           [suggestions-view])
         [view st/input-view
          (if command
            [command/command-icon command]
            [touchable-highlight {:on-press #(dispatch [:switch-command-suggestions])
                                  :style    st/switch-commands-touchable}
             [view nil
              (if @typing-command?
                [icon :close-gray st/close-icon]
                [icon :list st/list-icon])]])
          [text-input (merge {:style           (if command st-command/command-input st/message-input) ;; st-command/command-input
                              :autoFocus       false
                              :blurOnSubmit    dismiss-keyboard
                              :onChangeText    (fn [text]
                                                 ((if command
                                                    command/set-input-message
                                                    set-input-message)
                                                   text))
                              :onSubmitEditing (fn []
                                                 (if command
                                                   (command/try-send @input-command validator)
                                                   (try-send @staged-commands
                                                             @input-message
                                                             dismiss-keyboard)))}
                             input-options)
           (if command
             @input-command
             @input-message)]
          ;; TODO emoticons: not implemented
          (when (not command)
            [icon :smile st/smile-icon])
          (if command
            (if (command/valid? @input-command validator)
              [touchable-highlight {:on-press command/send-command}
               [view st/send-container [icon :send st/send-icon]]]
              [touchable-highlight {:on-press command/cancel-command-input}
               [view st-command/cancel-container
                [icon :close-gray st-command/cancel-icon]]])
            (when (message-valid? @staged-commands @input-message)
              [touchable-highlight {:on-press #(try-send @staged-commands
                                                         @input-message
                                                         dismiss-keyboard)}
               [view st/send-container
                [icon :send st/send-icon]]]))]]))))
