                                                             :state {:connection connection
                                                                     :column-id id
                                                                     :note note}
-                                                            :drag-data [:note {:column-id id :note (first note)}]}))
+                                                            :drag-data [:note {:column-id id :note (first note)}]}
+                                                 {:key :drag-data}))
                              (sort-by first (:notes column))))
                  (om/build delete-column-button {:connection connection
                                                  :column-id id}))))))

  (let [rect (.getBoundingClientRect node)]
    (and (< (.-left rect) x (+ (.-left rect) (.-width rect)))
         (< (.-top rect) y (+ (.-top rect) (.-height rect))))))
;this is stupid. use hit boxes
(defn targeted-node [droppable-nodes x y]
  (if-let [drop-node (first (filter #(on-node? % x y) (keys droppable-nodes)))]
    (droppable-nodes drop-node)))


(js/window.addEventListener "mousedown" #(put! mouse-down-ch %))
(js/window.addEventListener "mouseup"   #(put! mouse-up-ch   %))

             (let [error (:error (<! error-chan))]
               (case error
                 :no-such-environment (om/update! app :connected :no-such-environment))))))
(defn view [app owner]
  (reify
    om/IInitState
