simplify sorting
This commit is contained in:
@@ -21,6 +21,8 @@
|
||||
[malli.transform :as mt]
|
||||
[taoensso.encore :refer [filter-vals]]))
|
||||
|
||||
|
||||
|
||||
(defn row* [gridspec user entity {:keys [flash? delete-after-settle? request class] :as options}]
|
||||
(let [cells (if (:check-boxes? gridspec)
|
||||
[(com/data-grid-cell {} (com/checkbox {:name "id" :value ((:id-fn gridspec) entity)
|
||||
@@ -75,6 +77,10 @@
|
||||
"default sort"))
|
||||
|
||||
(defn table* [grid-spec user {{:keys [start per-page flash-id sort]} :parsed-query-params :as request}]
|
||||
(alog/info ::TABLE-QP
|
||||
:qp (:query-params request)
|
||||
:pqp (:parsed-query-params request)
|
||||
:sort sort)
|
||||
(let [start (or start 0)
|
||||
per-page (or per-page 25)
|
||||
[entities total] ((:fetch-page grid-spec)
|
||||
@@ -206,9 +212,9 @@
|
||||
set)]
|
||||
(handler (assoc request :trimmed-clients valid-clients)))))
|
||||
|
||||
(defn table-route [grid-spec]
|
||||
(-> (fn table [{:keys [identity] :as request}]
|
||||
(alog/peek ::TABLE-QP (:parsed-query-params request))
|
||||
(defn table-route [grid-spec & {:keys [parse-query-params?] :or {parse-query-params? true}}]
|
||||
(cond-> (fn table [{:keys [identity] :as request}]
|
||||
|
||||
(let [unparse-query-params (or (:unparse-query grid-spec)
|
||||
default-unparse-query-params)]
|
||||
(html-response (table*
|
||||
@@ -233,41 +239,45 @@
|
||||
"selected" "all-selected")))} ;; TODO seems hacky to special case selected and all-selected here
|
||||
:oob (when-let [oob-render (:oob-render grid-spec)]
|
||||
(oob-render request)))))
|
||||
(wrap-trim-client-ids)
|
||||
(query-params/wrap-parse-query-params (or (:parse-query-params grid-spec)
|
||||
true (wrap-trim-client-ids)
|
||||
parse-query-params? (query-params/wrap-parse-query-params (or (:parse-query-params grid-spec)
|
||||
(default-parse-query-params grid-spec)))
|
||||
(wrap-secure)
|
||||
(wrap-client-redirect-unauthenticated)))
|
||||
true (wrap-secure)
|
||||
true (wrap-client-redirect-unauthenticated)))
|
||||
|
||||
(defn page-route [grid-spec]
|
||||
(-> (fn page [{:keys [identity] :as request}]
|
||||
(base-page
|
||||
request
|
||||
(com/page {:nav (:nav grid-spec)
|
||||
:page-specific (when-let [page-specific-nav (:page-specific-nav grid-spec)]
|
||||
[:div#page-specific-nav (page-specific-nav request)])
|
||||
:client-selection (:client-selection request)
|
||||
:clients (:clients request)
|
||||
:client (:client request)
|
||||
:identity (:identity request)
|
||||
:request request}
|
||||
(apply com/breadcrumbs {} (:breadcrumbs grid-spec))
|
||||
[:div {:x-data (hx/json {:selected [] :all_selected false})
|
||||
"x-bind:hx-vals" "JSON.stringify({selected: $data.selected, 'all-selected': $data.all_selected})"
|
||||
:x-init "$watch('selected', s=> $dispatch('selectedChanged', {selected: s, all_selected: all_selected}) );
|
||||
(defn page-route [grid-spec & {:keys [parse-query-params?] :or {parse-query-params? true}}]
|
||||
|
||||
(cond-> (fn page [{:keys [identity] :as request}]
|
||||
(alog/info ::page-route
|
||||
:pqp (:parsed-query-params request)
|
||||
:qp (:query-params request))
|
||||
(base-page
|
||||
request
|
||||
(com/page {:nav (:nav grid-spec)
|
||||
:page-specific (when-let [page-specific-nav (:page-specific-nav grid-spec)]
|
||||
[:div#page-specific-nav (page-specific-nav request)])
|
||||
:client-selection (:client-selection request)
|
||||
:clients (:clients request)
|
||||
:client (:client request)
|
||||
:identity (:identity request)
|
||||
:request request}
|
||||
(apply com/breadcrumbs {} (:breadcrumbs grid-spec))
|
||||
[:div {:x-data (hx/json {:selected [] :all_selected false})
|
||||
"x-bind:hx-vals" "JSON.stringify({selected: $data.selected, 'all-selected': $data.all_selected})"
|
||||
:x-init "$watch('selected', s=> $dispatch('selectedChanged', {selected: s, all_selected: all_selected}) );
|
||||
$watch('all_selected', a=>$dispatch('selectedChanged', {selected: selected, all_selected: a}))"}
|
||||
|
||||
(table* grid-spec
|
||||
identity
|
||||
request)])
|
||||
(if (string? (:title grid-spec))
|
||||
(:title grid-spec)
|
||||
((:title grid-spec) request))))
|
||||
(wrap-trim-client-ids)
|
||||
(query-params/wrap-parse-query-params (or (:parse-query-params grid-spec)
|
||||
(default-parse-query-params grid-spec)))
|
||||
(wrap-secure)
|
||||
(wrap-client-redirect-unauthenticated)))
|
||||
|
||||
(table* grid-spec
|
||||
identity
|
||||
request)])
|
||||
(if (string? (:title grid-spec))
|
||||
(:title grid-spec)
|
||||
((:title grid-spec) request))))
|
||||
true (wrap-trim-client-ids)
|
||||
parse-query-params? (query-params/wrap-parse-query-params (or (:parse-query-params grid-spec)
|
||||
(default-parse-query-params grid-spec)))
|
||||
true (wrap-secure)
|
||||
true (wrap-client-redirect-unauthenticated)))
|
||||
|
||||
(def request-spec (m/schema [:map]))
|
||||
(def entity-spec (m/schema [:map]))
|
||||
@@ -281,8 +291,8 @@
|
||||
(def grid-spec (m/schema [:map
|
||||
[:id :string]
|
||||
[:nav [:=>
|
||||
[:cat request-spec]
|
||||
vector?]]
|
||||
[:cat request-spec]
|
||||
vector?]]
|
||||
[:page-specific-nav
|
||||
{:optional true
|
||||
:default (fn [request])}
|
||||
@@ -339,8 +349,8 @@
|
||||
(handler (update request :query-params
|
||||
(fn [qp]
|
||||
((comp
|
||||
(query-params/apply-remove-sort)
|
||||
(query-params/apply-toggle-sort grid-spec)
|
||||
(query-params/parse-key :sort #(query-params/parse-sort grid-spec %)))
|
||||
(query-params/apply-remove-sort)
|
||||
(query-params/apply-toggle-sort grid-spec)
|
||||
(query-params/parse-key :sort #(query-params/parse-sort grid-spec %)))
|
||||
qp))))))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user