                   data {:person    person
                         :layout    (get layout person-id)
                         :extended? (contains? extended-set person-id)
-                        :filtered? (not (every? true? (map #(% person) filter-predicates)))
+                        :filtered? (is-person-filtered? person filter-predicates)
                         :anim      (:person anims)}]
               (om/build person-component data {:react-key person-id}))))))))
 

  ISeqable
  (-seq [nl] (array-seq nl 0)))

(defn retrieve-card-layout [card]
  [(.getAttribute card "data-fbid")
   {:left (.-offsetLeft card)
    :top  (.-offsetTop card)}])

(defn retrieve-cards-layout [cards]
  (apply hash-map (mapcat #(retrieve-card-layout %) cards)))

(defn recompute-layout [data owner]
  (let [node (om/get-node owner "desk")
        cards (.-childNodes node)
        old-layout (get-in data [:ui :people :layout])
        layout (retrieve-cards-layout cards)]
    (when-not (= (pr-str old-layout) (pr-str layout))
      (perform! :people-layout layout))))

(defcomponent people-scaffold-component [data owner _]
  (did-mount [_]

                      (str
                        "translateX(" (:left layout) "px)"
                        "translateY(" (:top layout) "px)"
                        "translateZ(" (:z layout) "px)"))
          zoom-transform (when layout
                           (str
                             "translateZ(" (if extended? 100 0) "px)"))]
