                   (om/value new-pages))
         (om/set-state! owner :selection
                        (selection/make-selection new-pages)))))
-  ;; ;; Rotate all pages randomly
-  ;; (will-mount [_]
-  ;;   (go-loop []
-  ;;     (<! (async/timeout 100))
-  ;;     (om/transact! state [:inbox :pages] (fn [pages]
-  ;;                                           (update-in pages [(rand-int (count pages)) :rotation]
-  ;;                                                      #(mod (+ % 90) 360))))
-  ;;     (recur)))
   (render-state [_ {:keys [selection]}]
     ;; NOTE: `column' needs to be a value OR we need to extend cursors
     [:.column {:on-drag-over (when (satisfies? ColumnDropTarget (om/value column))

                       (map #(-update-pages % state pages))
                       (into (empty columns)))))))

;;; TODO: `remove-pages!'

(defrecord InboxColumnSource [id]
  ColumnSource
  (column-title [_]
    "Inbox")
  (column-pages [_ state]
    (get-in state [:inbox :pages])))

(defrecord FakeColumnSource [id]
  ColumnSource

    "Fake")
  (column-pages [_ state]
    (get-in state [::fake-column-pages]))
  (remove-pages! [_ state page-ids]
    (go
      (js/console.warn "Unimplemented: Removing pages from Fake...")))
  ColumnDropTarget
  (accepts-drop? [_ state]
    true)
  ;; TODO: Make immutable?
  (accept-drop! [_ state new-pages]
    (go
      (println "dropping" (pr-str new-pages))
      (om/transact! state ::fake-column-pages
                    (fn [pages]
                      (into pages
                            (remove #(contains? (set (map :id pages)) (:id %)))
                            new-pages)))
      (println "Fake-saving...")
      (<! (async/timeout 2000))
      (println "Saved!"))))

;;; NOTE: We need on-drag-start in `inbox-column' and in
;;; `inbox-column-page' (the latter to handle selection-updates when
