                  ;; forwarded to wrapped `input-text`:
                  status status-icon? status-tooltip placeholder width height disabled? class style attr]}]
       {:pre [(validate-args-macro typeahead-args-desc args "typeahead")]}
-      (let [{:as state :keys [suggestions waiting? suggestion-active-index external-model]} @state-atom
+      (let [{:as state :keys [suggestions waiting? suggestion-active-index]} @state-atom
             last-data-source (:data-source state)
-            latest-external-model (deref-or-value model)
             width (or width "250px")]
         (when (not= last-data-source data-source)
           (swap! state-atom change-data-source data-source))
-        (when (not= latest-external-model external-model)
-          (swap! state-atom external-model-changed latest-external-model))
         [v-box
          :class    "rc-typeahead"
          :attr     attr

                     :change-on-blur? false
                     :attr {:on-key-down (partial input-text-on-key-down! state-atom)
                            :on-focus #()
                            :on-blur  #(swap! state-atom got-suggestions [])}]
                    (if (or (not-empty suggestions) waiting?)
                      [box
                       :style {:position "relative"}


(defn- input-text-will-blur
  "Update state when the `input-text` is about to lose focus."
  [{:keys [input-text displaying-suggestion? model] :as state}]
  (cond
    (and (not displaying-suggestion?)
         (event-updates-model? state :input-text-blurred))
    (update-model state input-text)
    :else (-> state
              ;; if nothing was actually selected, then view should be the unchanged value
              (assoc :input-text model)
              clear-suggestions)))

(defn- change-data-source
  "Update `state` given a new `data-source`. Resets the typeahead since any existing suggestions
