         [:th "% Down"]
         [:th "Duration"]]
        (when (:selected-mortgage state)
-         [draw-mortgage (:selected-mortgage state) state])
+         [draw-mortgage (:selected-mortgage state) true (:ui-event-chan state)])
        (for [[index m] (map-indexed vector (:mortgages state))]
-         ^{:key (str "mortgage-" index)} [draw-mortgage m state])]]]))
+         ^{:key (str "mortgage-" index)} [draw-mortgage m (= m (:selected-mortgage state)) (:ui-event-chan state)])]]]))
 
 (def some-mortgages
   (apply concat

   (for [m mortgages]
     {:mortgage m
      :value    (-> m total-price-breakdown :interest)})
   state])

(sm/defn draw-monthly-payment [mortgages :- [Mortgage]
                               state :- UIState]

   (for [m mortgages]
     {:mortgage m
      :value    (full-monthly-payment-amount m)})
   (state :selected-mortgage)
   (state :ui-event-chan)])


(sm/defn draw-mortgage [m :- Mortgage
                        is-selected-mortgage :- s/Bool
                        ui-event-chan]
  [:tr.mortgage
   {:on-mouse-enter #(put! ui-event-chan {:type     :selection-start
                                          :mortgage m})
    :on-mouse-leave #(put! ui-event-chan {:type :selection-end})
    :class          (when is-selected-mortgage
                      "selected")}
   [:td (:house-price m)]
   [:td (:apr m)]
