Skip to content

Instantly share code, notes, and snippets.

@hauleth
Last active August 29, 2015 14:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hauleth/0d95bc7aaf6c4d79212a to your computer and use it in GitHub Desktop.
Save hauleth/0d95bc7aaf6c4d79212a to your computer and use it in GitHub Desktop.
(ns perun.core
(:require-macros [cljs.core.async.macros :refer [go]])
(:require [om.core :as om :include-macros true]
[cljs.core.async :refer [<!]]
[om-tools.core :refer-macros [defcomponent]]
[om-tools.dom :as dom :include-macros true]
[perun.elasticsearch :as es]))
(enable-console-print!)
(def app-state (atom {:events []
:query "*"}))
(defn update-events! [app result]
(om/transact! app :events #(.. result -hits -hits)))
(defn search [app owner]
(let [input (-> (om/get-node owner "query")
.-value)
query (if (empty? input) "*" input)
[succ _] (es/search {:q query})]
(go (let [result (<! succ)]
(om/transact! app :query (fn [] query))
(update-events! app result)))))
(defcomponent event-view [event owner]
(render [_]
(dom/li (js/JSON.stringify event))))
(defcomponent events-view [app owner]
(will-mount [_]
(let [[succ _] (es/search {:q (:query app)})]
(go (update-events! app (<! succ)))))
(render [_]
(dom/div
(dom/div {:id "#form"}
(dom/input {:default-value (:query app)
:type "text"
:ref "query"})
(dom/button {:on-click #(search app owner)} "Search"))
(dom/ul (om/build-all event-view (:events app))))))
(om/root
events-view
app-state
{:target (. js/document (getElementById "app"))})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment