Support order-by query option from JS.

This commit is contained in:
Richard Newman 2016-10-07 16:06:48 -07:00
parent b8a3f5fe2b
commit 5b6000003d

View file

@ -8,6 +8,9 @@
[datomish.pair-chan :refer [go-pair <?]] [datomish.pair-chan :refer [go-pair <?]]
[datomish.promises :refer [go-promise]]) [datomish.promises :refer [go-promise]])
(:require (:require
[datomish.util
:as util
:refer-macros [raise raise-str cond-let]]
[cljs.core.async :as a :refer [take! <! >!]] [cljs.core.async :as a :refer [take! <! >!]]
[cljs.reader] [cljs.reader]
[cljs-promises.core :refer [promise]] [cljs-promises.core :refer [promise]]
@ -27,9 +30,29 @@
(def ^:export db d/db) (def ^:export db d/db)
(defn- cljify-options [options]
;; Step one: basic parsing.
(let [o (cljify options)]
;; Step two: convert `order-by` into keywords.
(if-let [ord (:order-by o)]
(assoc o
:order-by
(map
(fn [[var dir]]
[(keyword var)
(case dir
"asc" :asc
"desc" :desc
nil :asc
:default
(raise "Unexpected order-by direction " dir
{:direction dir}))])
ord))
o)))
(defn ^:export q [db find options] (defn ^:export q [db find options]
(let [find (cljs.reader/read-string find) (let [find (cljs.reader/read-string find)
opts (cljify options)] opts (cljify-options options)]
(take-pair-as-promise! (take-pair-as-promise!
(d/<q db find opts) (d/<q db find opts)
clj->js))) clj->js)))
@ -37,7 +60,6 @@
(defn ^:export ensure-schema [conn simple-schema] (defn ^:export ensure-schema [conn simple-schema]
(let [simple-schema (cljify simple-schema) (let [simple-schema (cljify simple-schema)
datoms (simple-schema/simple-schema->schema simple-schema)] datoms (simple-schema/simple-schema->schema simple-schema)]
(println "Transacting schema datoms" (pr-str datoms))
(take-pair-as-promise! (take-pair-as-promise!
(d/<transact! (d/<transact!
conn conn