much better sorting.

This commit is contained in:
Bryce Covert
2020-04-25 16:21:36 -07:00
parent a8736f351e
commit d799fc469d
17 changed files with 294 additions and 219 deletions

View File

@@ -779,30 +779,23 @@
(update-in [:query :where] into (get-in query-part-2 [:query :where]))
(update-in [:args] into (get-in query-part-2 [:args]))))
(defn add-sorter-fields [q sort-map args]
(reduce
(fn [q {:keys [sort-key asc]}]
(merge-query q
{:query {:find [(symbol (str "?sort-" sort-key))]
:where (sort-map
sort-key
(println "Warning, trying to sort by unsupported field" sort-key))}}))
q
(:sort args)))
(defn add-sorter-field [q sort-map args]
(merge-query q
{:query {:find ['?sorter]
:where (sort-map
(:sort-by args)
(println "Warning, trying to sort by unsupported field" (:sort-by args)))}}))
(defn apply-sort [args sort-fn results ]
(cond->> results
sort-fn (sort-by sort-fn)
(= (:asc args) false) (reverse)))
(defn apply-sort-2 [args default-sort results ]
(let [sort-bys (if (:sort-by args)
(conj (seq default-sort) (if (:asc args)
:asc
:desc))
(seq default-sort))
(defn apply-sort-3 [args results]
(let [sort-bys (or (:sort args) [])
comparator (fn [xs ys]
(or (->> (map vector sort-bys xs ys)
(map (fn [[asc x y]]
(if (= :asc asc)
(map (fn [[{:keys [asc]} x y]]
(if asc
(compare x y)
(compare y x))))
(drop-while #(= 0 %))