        (parse-column-param)
        (remove nil?)))
 
+(defn- replace-column! [columns old new]
+  {:pre [(vector? old) (vector? new)]}
+  (nav/navigate! (nav/workflow-route
+                  :inbox
+                  {:columns (->> columns
+                                (map #(if (= old %) new %))
+                                (vec)
+                                (serialize-column-param))})))
+
 (defn- add-column! [columns column]
   {:pre [(vector? column)
          (keyword? (first column))

     [:header
      [:form {:on-submit (fn [e]
                           (ui/cancel-event e)
                           (let [text (.-value (om/get-node owner "search"))
                                 columns (->> (current-columns state)
                                              (remove #(= % [:search (:search column)])))]
                             (add-column! columns [:search text])))}
       [:input.search {:type "text"
                       :ref "search"
                       :placeholder "Search Documents"

     [:ul.search-results
      (om/build-all search-result-row (map #(get-in state [:documents %]) documents)
                    {:opts {:on-click (fn [document]
                                        (replace-column! (current-columns state)
                                                         [:search (:search column)]
                                                         [:document (:id document)]))}})]]))

(defn ^:private inbox-handle-drop! [state owner page-cache target source page-ids target-idx]
  (let [columns (om/get-state owner :columns)
