     om/IInitState
     (init-state [_]
       {:text ""
+       :force-close? false
        :highlighted-result-index -1})
     om/IRenderState
-    (render-state [_ {:keys [text highlighted-result-index] :as state}]
-      (let [clear-tags! (fn []
-                          (om/set-state! owner :text (string/replace text #"( *#\S*)" "")))
-            constrain (fn [x a z]
+    (render-state [_ {:keys [text force-close? highlighted-result-index] :as state}]
+      (let [constrain (fn [x a z]
                         (cond
                           (> x z) z
                           (< x a) a

                                                                :content text})
                                       (clear-text!)))

                                   KeyCodes.ESC (close-autocomplete!)

                                   KeyCodes.UP (when autocomplete-open?
                                                 (.preventDefault e)

                      (fn [thread-id]
                        (dispatch! :tag-thread {:thread-id thread-id
                                                :id (tag :id)}))
                      :message-transform
                      (fn [text]
                        (string/replace text #"( *#\S*)" ""))
                      :html
                      (fn []
                        (dom/div #js {:className "tag-match"}
