migrates accounts to new dialog, adds client search to user

This commit is contained in:
2023-10-17 10:14:02 -07:00
parent 3d9d02f76a
commit 346ece787a
10 changed files with 302 additions and 124 deletions

View File

@@ -17,7 +17,8 @@
[auto-ap.ssr.grid-page-helper :as helper]
[auto-ap.ssr.svg :as svg]
[auto-ap.ssr.utils
:refer [entity-id
:refer [apply-middleware-to-all-handlers
entity-id
forced-vector
html-response
ref->enum-schema
@@ -68,7 +69,15 @@
{:value "user"
:content "User"}
{:value "none"
:content "None"}]}))]])
:content "None"}]}))
(com/field {:label "Client"}
(com/typeahead {:name "client"
:placeholder "Search..."
:url (bidi/path-for ssr-routes/only-routes
:company-search)
:id (str "client-search")
:value [(:db/id (:client (:parsed-query-params request)))
(:client/name (:client (:parsed-query-params request)))]}))]])
(def default-read '[:db/id
:user/name
@@ -110,6 +119,12 @@
'[(clojure.string/includes? ?upper-se ?es)]]}
:args [(str/upper-case (:email query-params))]})
(some->> query-params :client :db/id)
(merge-query {:query {:find []
:in ['?c]
:where ['[?e :user/clients ?c]]}
:args [(some->> query-params :client :db/id)]})
(some->> query-params :role)
(merge-query {:query {:find []
:in ['?r]
@@ -171,6 +186,10 @@
(com/pill {:color :white}
(format "%d more" remainder))))])
(defn parse-client [client]
(let [client-id (Long/parseLong client)]
(dc/pull (dc/db conn) '[:client/name :db/id] client-id)))
(def grid-page
(helper/build {:id "user-table"
:nav (com/admin-aside-nav)
@@ -178,8 +197,7 @@
:fetch-page fetch-page
:parse-query-params (comp
(query-params/parse-key :role #(query-params/parse-keyword "user-role" %))
(query-params/parse-key :total-gte query-params/parse-double)
(query-params/parse-key :total-lte query-params/parse-double)
(query-params/parse-key :client parse-client)
(helper/default-parse-query-params grid-page))
:row-buttons (fn [request entity]
[(com/button {:hx-post (str (bidi/path-for ssr-routes/only-routes
@@ -241,9 +259,9 @@
:session {:identity (dissoc (auth/user->jwt user "FAKE_TOKEN")
:exp)}}))
(defn user-edit-save [{:keys [params route-params] :as request}]
(let [_ @(dc/transact conn [[:upsert-entity (-> params (assoc :db/id (:db/id route-params)) (dissoc :id))]])
user (some-> request :route-params :db/id (#(dc/pull (dc/db conn) default-read %)))]
(defn user-edit-save [{:keys [form-params identity] :as request}]
(let [_ @(dc/transact conn [[:upsert-entity form-params]])
user (some-> form-params :db/id (#(dc/pull (dc/db conn) default-read %)))]
(html-response
(row* identity user {:flash? true})
@@ -259,10 +277,9 @@
(com/modal
{}
[:form {:hx-ext "response-targets"
:hx-post (str (bidi/path-for ssr-routes/only-routes
:user-edit-save
:request-method :post
:db/id (:db/id user )))
:hx-put (str (bidi/path-for ssr-routes/only-routes
:user-edit-save
:request-method :put))
:hx-swap "outerHTML swap:300ms"
:hx-target-400 "#form-errors .error-content"}
[:fieldset {:class "hx-disable"}
@@ -270,6 +287,8 @@
{}
[:div.flex [:div.p-2 "User"] [:p.ml-2.rounded.bg-gray-200.p-2.dark:bg-gray-600 (:user/name user)]]
[:div.space-y-6
(com/hidden {:name "db/id"
:value (:db/id user)})
(com/field {:label "Role"}
(com/select {:name "user/role"
:class "w-36"
@@ -280,8 +299,7 @@
["power-user" "Power user"]
["manager" "Manager"]
["admin" "Admin"]
["user" "User"]]
:size :small}))
["user" "User"]]}))
(com/field {:label "Clients"}
(com/typeahead {:name "user/clients"
:class "w-full"
@@ -300,25 +318,24 @@
[:div])]]))))
(def key->handler
{:users (wrap-admin (helper/page-route grid-page))
:user-table (wrap-admin (helper/table-route grid-page))
:user-edit-save (-> user-edit-save
wrap-admin
wrap-client-redirect-unauthenticated
(wrap-schema-decode
:route-schema (mc/schema [:map [:db/id entity-id]])
:params-schema (mc/schema
[:map
[:user/clients (forced-vector entity-id)]
[:user/role (ref->enum-schema "user-role")]])))
:user-edit-dialog (-> user-edit-dialog
wrap-admin
wrap-client-redirect-unauthenticated
(wrap-schema-decode
:route-schema (mc/schema [:map [:db/id entity-id]])))
:user-impersonate (-> impersonate
wrap-admin
wrap-client-redirect-unauthenticated
(wrap-schema-decode
:params-schema (mc/schema [:map [:db/id entity-id]])))})
(apply-middleware-to-all-handlers
{:users (helper/page-route grid-page)
:user-table (helper/table-route grid-page)
:user-edit-save (-> user-edit-save
(wrap-schema-decode
:form-schema (mc/schema
[:map
[:db/id entity-id]
[:user/clients (forced-vector entity-id)]
[:user/role (ref->enum-schema "user-role")]])))
:user-edit-dialog (-> user-edit-dialog
(wrap-schema-decode
:route-schema (mc/schema [:map [:db/id entity-id]])))
:user-impersonate (-> impersonate
(wrap-schema-decode
:params-schema (mc/schema [:map [:db/id entity-id]])))}
(fn [h]
(-> h
(wrap-admin)
(wrap-client-redirect-unauthenticated)))))