Skip to content

Instantly share code, notes, and snippets.

@loganlinn
Created May 13, 2014 22:08
Show Gist options
  • Save loganlinn/6a2dd683a1aa7f120126 to your computer and use it in GitHub Desktop.
Save loganlinn/6a2dd683a1aa7f120126 to your computer and use it in GitHub Desktop.
Test case for omcljs/om#179 (modified examples/unmount/src/core.cljs)
(ns examples.unmount.core
(:require [om.core :as om :include-macros true]
[om.dom :as dom :include-macros true]))
(enable-console-print!)
(def app-state (atom {:widget :a}))
(defn widget-a [data owner]
(reify
om/IWillUnmount
(will-unmount [_]
(println "umounting Widget A"))
om/IRenderState
(render-state [_ state]
(dom/div nil (str "Widget A (state: " (pr-str state) ")")
(dom/button #js {:onClick (fn [e]
(om/set-state! owner :swapping? true)
(swap! app-state assoc :widget :b))}
"Hard Switch")))))
(defn widget-b [data owner]
(reify
om/IWillUnmount
(will-unmount [_]
(println "umounting Widget B"))
om/IRender
(render [_]
(dom/div nil "Widget B"))))
(defn app [data owner]
(reify
om/IRender
(render [_]
(dom/div nil
(if (= (:widget data) :a)
(om/build widget-a {})
(om/build widget-b {}))
(dom/button
#js {:onClick (fn [e] (om/transact! data :widget {:a :b :b :a}))}
"Switch!")))))
(om/root app app-state
{:target (.getElementById js/document "app")})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment