 
 (defprotocol ColumnSource
   (column-title [_])
-  (column-pages  [_ state]))
+  (column-pages  [_ state])
+
+  (remove-pages! [_ state page-ids]))
 
 (defprotocol ColumnDropTarget
   (accepts-drop? [_ state #_pages])     ;can't get data in drag-over

                                                             #(selection/click % click)))}
                     :fn (partial mark-page-selected (:selected selection))})]]))

(defn make-page-cache [state columns]
  (into {}
        ;; Transducerpower
        (comp (mapcat #(column-pages (val %) state))

    ;; `inbox-column' can access it (as the drop `dataTransfer' only
    ;; contains IDs)
    (let [page-cache (make-page-cache state columns)]
      [:.workflow.inbox
       (om/build-all inbox-column columns
                     {:fn (fn [column]
                            [state
                             (-> column
                                 val
                                 (assoc ::page-cache page-cache))])
                      ;; NOTE: Passing this callback as `opts' might
                      ;; cause issues
                      :opts {:handle-drop! (partial inbox-handle-drop! state owner page-cache)}})])))
