lots of progress

This commit is contained in:
2023-10-24 11:52:55 -07:00
parent 91f7e79aed
commit a8cce0377d
9 changed files with 170 additions and 155 deletions

View File

@@ -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]])))