migrates accounts to new dialog, adds client search to user
This commit is contained in:
@@ -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)))))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user