lots of progress
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
apply-sort-3
|
||||
conn
|
||||
merge-query
|
||||
pull-attr
|
||||
pull-many
|
||||
query2]]
|
||||
[auto-ap.query-params :as query-params]
|
||||
@@ -23,6 +24,7 @@
|
||||
:refer [apply-middleware-to-all-handlers
|
||||
entity-id
|
||||
html-response
|
||||
main-transformer
|
||||
many-entity
|
||||
ref->enum-schema
|
||||
ref->select-options
|
||||
@@ -256,13 +258,11 @@
|
||||
(def table* (partial helper/table* grid-page))
|
||||
|
||||
(defn impersonate [request]
|
||||
(println (:entity request))
|
||||
(if (:entity request)
|
||||
{:status 200
|
||||
:headers {"hx-redirect" (str "/?jwt=" (jwt/sign (auth/user->jwt (:entity request) "FAKE_TOKEN")
|
||||
(:jwt-secret env)
|
||||
{:alg :hs512}))
|
||||
}
|
||||
{:alg :hs512}))}
|
||||
:session {:identity (dissoc (auth/user->jwt (:entity request) "FAKE_TOKEN")
|
||||
:exp)}}
|
||||
{:status 404}))
|
||||
@@ -279,31 +279,27 @@
|
||||
:url (bidi/path-for ssr-routes/only-routes
|
||||
:company-search)
|
||||
:value (fc/field-value)
|
||||
:value-fn :db/id
|
||||
|
||||
|
||||
:value-fn :db/id ;; TODO better hydration
|
||||
:content-fn (fn [value]
|
||||
(:client/name (dc/pull (dc/db conn) [:client/name]
|
||||
(or (:db/id value)
|
||||
value))))
|
||||
:content-fn #(pull-attr (dc/db conn) :client/name (:db/id %))
|
||||
:size :small})))
|
||||
(com/data-grid-cell {:class "align-top"}
|
||||
(com/a-icon-button {"@click.prevent.stop" "show=false; setTimeout(() => $refs.p.remove(), 500)"} svg/x))))
|
||||
|
||||
|
||||
;; TODO hydrate user name
|
||||
(defn dialog* [{:keys [form-params form-errors entity]}]
|
||||
(fc/start-form
|
||||
form-params form-errors
|
||||
(com/modal
|
||||
{:hx-target "this"}
|
||||
[:form#edit-form {:hx-ext "response-targets"
|
||||
: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"
|
||||
:class "w-full"}
|
||||
[:form {:hx-ext "response-targets"
|
||||
: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"
|
||||
:class "w-full"}
|
||||
[:fieldset {:class "hx-disable"}
|
||||
(com/modal-card
|
||||
{}
|
||||
@@ -321,7 +317,7 @@
|
||||
:value (some->> (fc/field-value) name)
|
||||
:options (ref->select-options "user-role")})))
|
||||
(fc/with-field :user/clients
|
||||
(com/validated-field {:label "Clients"}
|
||||
(com/validated-field {:label "Clients"}
|
||||
(com/data-grid {:headers [(com/data-grid-header {} "Client")
|
||||
(com/data-grid-header {} )]
|
||||
:id "client-table"}
|
||||
@@ -336,7 +332,6 @@
|
||||
(com/validated-save-button {:errors (seq form-errors)}
|
||||
"Save user")])]])))
|
||||
|
||||
;; TODO rename edit-form or make it generic
|
||||
(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 %)))]
|
||||
@@ -346,18 +341,25 @@
|
||||
:headers {"hx-trigger" "modalclose"
|
||||
"hx-retarget" (format "#user-table tr[data-id=\"%d\"]" (:db/id user))})))
|
||||
|
||||
(defn user-save-error [request]
|
||||
;; TODO hydration
|
||||
;; TODO consistency of error handling and passing, on all form examples
|
||||
(html-response (dialog* {:form-params (:form-params request)
|
||||
:entity (:entity request)
|
||||
:form-errors (:form-errors request)})))
|
||||
|
||||
(defn user-edit-dialog [request]
|
||||
(def form-schema
|
||||
(mc/schema
|
||||
[:map
|
||||
[:db/id entity-id]
|
||||
[:user/clients {:optional true}
|
||||
[:maybe
|
||||
(many-entity {} [:db/id entity-id])]]
|
||||
[:user/role (ref->enum-schema "user-role")]]))
|
||||
|
||||
(defn user-dialog [{:keys [form-params entity form-errors]}]
|
||||
(html-response
|
||||
(dialog* {:form-params (:entity request)
|
||||
:entity (:entity request)
|
||||
:form-errors {}})
|
||||
(dialog* {:form-params (or (when (seq form-params)
|
||||
form-params)
|
||||
(when entity
|
||||
(mc/decode form-schema entity main-transformer))
|
||||
{})
|
||||
:entity entity
|
||||
:form-errors form-errors})
|
||||
|
||||
:headers {"hx-trigger" "modalopen"}))
|
||||
|
||||
@@ -367,14 +369,7 @@
|
||||
:new? true} []
|
||||
(client-row* fc/*current*))))
|
||||
|
||||
(def user-form-schema
|
||||
(mc/schema
|
||||
[:map
|
||||
[:db/id entity-id]
|
||||
[:user/clients {:optional true}
|
||||
[:maybe
|
||||
(many-entity {} [:db/id entity-id])]]
|
||||
[:user/role (ref->enum-schema "user-role")]]))
|
||||
|
||||
|
||||
(def key->handler
|
||||
(apply-middleware-to-all-handlers
|
||||
@@ -382,14 +377,14 @@
|
||||
:user-table (helper/table-route grid-page)
|
||||
:user-edit-save (-> user-edit-save
|
||||
(wrap-entity [:form-params :db/id] default-read)
|
||||
(wrap-schema-decode :form-schema user-form-schema)
|
||||
(wrap-schema-decode :form-schema form-schema)
|
||||
(wrap-nested-form-params)
|
||||
(wrap-form-4xx-2 (wrap-entity user-save-error [:form-params :db/id] default-read)))
|
||||
(wrap-form-4xx-2 (wrap-entity user-dialog [:form-params :db/id] default-read)))
|
||||
:user-client-new (-> new-client
|
||||
(wrap-schema-decode :query-schema [:map
|
||||
[:index {:optional true
|
||||
:default 0} [nat-int? {:default 0}]]]))
|
||||
:user-edit-dialog (-> user-edit-dialog
|
||||
:user-edit-dialog (-> user-dialog
|
||||
(wrap-entity [:route-params :db/id] default-read)
|
||||
(wrap-schema-decode
|
||||
:route-schema (mc/schema [:map [:db/id entity-id]])))
|
||||
|
||||
Reference in New Issue
Block a user