cleans up grids

This commit is contained in:
2024-11-18 19:41:54 -08:00
parent ad06418a69
commit a8c7c7eb8e
31 changed files with 842 additions and 714 deletions

View File

@@ -206,49 +206,6 @@
(defn default-unparse-query-params [query-params]
(reduce
(fn [query-params [k value]]
(assoc query-params k
(cond (= k :sort)
(sort->query value)
(instance? org.joda.time.base.AbstractInstant value)
(atime/unparse-local value atime/normal-date)
(instance? Long value)
(str value)
(instance? Double value)
(format "%.2f" value)
(instance? Float value)
(format "%.2f" value)
(keyword? value)
(name value)
(and (map? value)
(:db/id value))
(:db/id value)
:else
value)))
query-params
query-params))
(defn default-parse-query-params [grid-spec]
(comp
(query-params/apply-remove-sort)
(query-params/apply-toggle-sort grid-spec)
(query-params/apply-date-range :date-range :start-date :end-date)
(query-params/parse-key :exact-match-id query-params/parse-long)
(query-params/parse-key :sort #(query-params/parse-sort grid-spec %))
(query-params/parse-key :per-page query-params/parse-long)
(query-params/parse-key :start query-params/parse-long)
(query-params/parse-key :start-date query-params/parse-date)
(query-params/parse-key :end-date query-params/parse-date)))
(defn wrap-trim-client-ids [handler]
(fn trim-client-ids [request]
(let [valid-clients (extract-client-ids (:clients request)
@@ -262,36 +219,30 @@
(handler (assoc request :trimmed-clients valid-clients)))))
(defn table-route [grid-spec & {:keys [parse-query-params? push-url?] :or {parse-query-params? true push-url? true}}]
(defn table-route [grid-spec & {:keys [push-url?] :or { push-url? true}}]
(cond-> (fn table [{:keys [identity] :as request}]
(println "SORT IS")
(clojure.pprint/pprint (sort->query (:sort (:query-params request))))
(let [unparse-query-params (or (:unparse-query grid-spec)
default-unparse-query-params)]
(html-response (table*
grid-spec
identity
request)
:headers (when push-url?
{"hx-push-url" (str "?" (url/map->query
(dissoc (if (:query-schema grid-spec)
(update (filter-vals #(not (nil? %))
(m/encode (:query-schema grid-spec)
(:query-params request)
main-transformer))
"sort" sort->query)
(unparse-query-params (:parsed-query-params request)))
"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)))))
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)))
(html-response (table*
grid-spec
identity
request)
:headers (when push-url?
{"hx-push-url" (str "?" (url/map->query
(dissoc (if (:query-schema grid-spec)
(update (filter-vals #(not (nil? %))
(m/encode (:query-schema grid-spec)
(:query-params request)
main-transformer))
"sort" sort->query)
{})
"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))))
true (wrap-trim-client-ids)
true (wrap-secure)
true (wrap-client-redirect-unauthenticated)))
(defn csv-route [{:keys [fetch-page headers page->csv-entities]} & {:keys [parse-query-params?] :or {parse-query-params? true}}]
(defn csv-route [{:keys [fetch-page headers page->csv-entities]} & {:keys []}]
(cond-> (fn csv-route [{:keys [identity] :as request}]
(let [page-results (fetch-page (assoc-in request [:query-params :per-page] Long/MAX_VALUE))
@@ -314,7 +265,7 @@
true (wrap-secure)
true (wrap-client-redirect-unauthenticated)))
(defn page-route [grid-spec & {:keys [parse-query-params?] :or {parse-query-params? true}}]
(defn page-route [grid-spec & {:keys []}]
(cond-> (fn page [{:keys [identity] :as request}]
(alog/info ::page-route
:pqp (:parsed-query-params request)
@@ -346,8 +297,6 @@
(: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)))
@@ -376,14 +325,10 @@
[:=>
[:cat map?]
nat-int?]]
[:query-schema :any]
[:fetch-page [:=>
[:cat request-spec]
[:cat [:vector entity-spec] :int]]]
[:parse-query-params
{:optional true}
[:=>
[:cat [:map-of :keyword :any]]
[:map-of :keyword :any]]]
[:above-grid
{:optional true
:default (fn [request])}