progress on migrating all grids.

This commit is contained in:
2023-09-28 22:22:25 -07:00
parent d1798f6b5c
commit 99accc067c
15 changed files with 743 additions and 742 deletions

View File

@@ -1,17 +1,21 @@
(ns auto-ap.ssr.grid-page-helper
(:require
[auto-ap.graphql.utils :refer [extract-client-ids]]
[auto-ap.query-params :as query-params]
[auto-ap.routes.utils
:refer [wrap-client-redirect-unauthenticated wrap-secure]]
[auto-ap.ssr-routes :as ssr-routes]
[auto-ap.ssr.components :as com]
[auto-ap.ssr.svg :as svg]
[auto-ap.ssr.ui :refer [base-page]]
[auto-ap.ssr.utils :refer [html-response]]
[auto-ap.time :as atime]
[malli.core :as m]
[bidi.bidi :as bidi]
[cemerick.url :as url]
[clojure.string :as str]
[hiccup2.core :as hiccup]
[clj-time.core :as time]
[auto-ap.time :as atime]
[auto-ap.query-params :as query-params]))
[malli.transform :as mt2]))
(defn row* [gridspec user entity {:keys [flash? delete-after-settle? request] :as options}]
(let [cells (->> gridspec
@@ -125,23 +129,12 @@
(com/data-grid-header {}))})))
(defn sort->query [s]
(str/join "," (map (fn [k] (format "%s:%s" (:sort-key k) (if (= true (:asc k))
"asc"
"desc")))
s)))
(defn params->query-string [q]
(-> q
:parsed-query-params
(update :sort sort->query)
(url/map->query)))
(defn default-unparse-query-params [query-params]
(reduce
(fn [query-params [k value]]
@@ -169,37 +162,6 @@
query-params
query-params))
(defn table [grid-spec {:keys [identity] :as request}]
(let [unparse-query-params (or (:unparse-query grid-spec)
default-unparse-query-params)]
(html-response (table*
grid-spec
identity
request)
:headers {"hx-push-url" (str "?" (url/map->query (unparse-query-params (:parsed-query-params request))))}
:oob (when-let [oob-render (:oob-render grid-spec)]
(oob-render request)))))
(defn page [grid-spec {: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 (:session request))
:clients (:clients request)
:client (:client request)
:identity (:identity request)}
(apply com/breadcrumbs {} (:breadcrumbs grid-spec))
(table* grid-spec
identity
request))
(:title grid-spec)))
(defn default-parse-query-params [grid-spec]
(comp
(query-params/apply-remove-sort)
@@ -211,3 +173,116 @@
(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)
(:client request)
(:client-id (:parsed-query-params request))
(when (:client-code (:parsed-query-params request))
[:client/code (:client-code (:parsed-query-params request))]))
valid-clients (->> valid-clients
(take 20)
set)]
(handler (assoc request :trimmed-clients valid-clients)))))
(defn table-route [grid-spec]
(-> (fn table [{:keys [identity] :as request}]
(let [unparse-query-params (or (:unparse-query grid-spec)
default-unparse-query-params)]
(html-response (table*
grid-spec
identity
request)
:headers {"hx-push-url" (str "?" (url/map->query (unparse-query-params (:parsed-query-params request))))}
: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)
(default-parse-query-params grid-spec)))
(wrap-secure)
(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 (:session request))
:clients (:clients request)
:client (:client request)
:identity (:identity request)}
(apply com/breadcrumbs {} (:breadcrumbs grid-spec))
(table* grid-spec
identity
request))
(:title grid-spec)))
(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)))
(def request-spec (m/schema [:map]))
(def entity-spec (m/schema [:map]))
(def header-spec (m/schema [:map
[:key :string]
[:name :string]
[:sort-key {:optional true} :string]
[:render [:=> [:cat entity-spec] :any]]
[:hide? {:optional true} [:=> [:cat entity-spec] :boolean]]]))
(def grid-spec (m/schema [:map
[:id :string]
[:nav vector?]
[:page-specific-nav
{:optional true
:default (fn [request])}
[:maybe [:=>
[:cat request-spec]
vector?]]]
[:id-fn {:default :db/id
:optional true}
[:=>
[:cat map?]
nat-int?]]
[:fetch-page [:=>
[:cat request-spec]
[:cat [:vector entity-spec] :int]]]
[:parse-query-params
{:optional true}
[:=>
[:cat [:map-of :keyword :any]]
[:map-of :keyword :any]]]
[:oob-render
{:optional true
:default (fn [request])}
[:=>
[:cat request-spec]
vector?]]
[:breadcrumbs [:vector vector?]]
[:title :string]
[:entity-name :string]
[:route :keyword]
[:action-buttons
{:default (fn [request])
:optional true}
[:=>
[:cat request-spec]
[:maybe [:vector vector?]]]]
[:row-buttons
{:default (fn [request entity])
:optional true}
[:=>
[:cat request-spec entity-spec]
[:maybe [:vector vector?]]]]
[:headers [:vector header-spec]]]))
(defn build [grid-page]
(when-not (m/validate grid-spec grid-page)
(throw (ex-info "Could not validate grid"
(m/explain grid-spec grid-page))))
(m/decode grid-spec grid-page (mt2/default-value-transformer {::mt2/add-optional-keys true})))