other pages

This commit is contained in:
Bryce
2023-05-18 22:14:23 -07:00
parent 33fc70295b
commit 33cae26cc1
9 changed files with 349 additions and 222 deletions

View File

@@ -3,120 +3,81 @@
[amazonica.aws.s3 :as s3]
[auto-ap.datomic :refer [conn]]
[auto-ap.datomic.reports :as r]
[auto-ap.graphql.utils :refer [assert-admin is-admin?]]
[auto-ap.graphql.utils :refer [assert-can-see-client is-admin?]]
[auto-ap.ssr-routes :as ssr-routes]
[auto-ap.ssr.components :as com]
[auto-ap.ssr.grid-page-helper :as helper]
[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]
[bidi.bidi :as bidi]
[config.core :refer [env]]
[datomic.api :as dc]
[hiccup2.core :as hiccup]))
[datomic.api :as dc]))
(defn row* [{:keys [flash? report identity delete-after-settle?]}]
(com/data-grid-row
{:class (when flash?
"live-added")
"_" (hiccup/raw (when delete-after-settle?" on htmx:afterSettle wait 400ms then remove me"))}
(com/data-grid-cell
{}
(:report/name report))
(com/data-grid-cell
{}
(when (:report/creator report)
(com/pill {:color :primary }
(:report/creator report))))
(com/data-grid-cell
{}
(atime/unparse-local (:report/created report)
atime/normal-date))
(com/data-grid-right-stack-cell
{}
(com/a-icon-button {:href (:report/url report)}
svg/download)
(when (is-admin? identity)
[:form
[:input {:type :hidden :name "id" :value (:db/id report)}]
(com/icon-button {:hx-delete (str (bidi/path-for ssr-routes/only-routes
:company-reports-delete
:request-method :delete))
:hx-target "closest tr"}
svg/trash)]))))
(def grid-page {:id "report-table"
:nav (com/company-aside-nav)
:id-fn :db/id
:fetch-page (fn [user args]
(r/get-graphql (into args {:id user})))
:breadcrumbs [[:a {:href (bidi/path-for ssr-routes/only-routes
:company)}
"My Company"]
(defn table* [{:keys [client start per-page identity session flash-id]}]
(let [start (or start 0)
per-page (or per-page 30)
[reports total] (r/get-graphql {:id identity
:start start
:per-page per-page
:client-id (:db/id client)
:sort nil})]
(com/data-grid-card {:id "report-table"
:title "Reports"
:entity-name "reports"
:route :company-reports-table
:start start
:per-page per-page
:total total
:action-buttons [(com/button {:color :primary}
(com/button-icon {} svg/refresh)
"Add new product")
(com/button {:color :secondary}
(com/button-icon {} svg/refresh)
"Update stocks 1/250")
(com/icon-button {}
svg/upload)]
:rows (for [report reports]
(row* {:report report
:flash? (= flash-id
(:db/id report))
:identity identity}))
:headers [(com/data-grid-header {} "Name")
(com/data-grid-header {:class "hidden md:table-cell"} "Created by")
(com/data-grid-header {:class "hidden md:table-cell"} "Created")
(com/data-grid-header {})]})))
[:a {:href (bidi/path-for ssr-routes/only-routes
:company-reports)}
"Reports"]]
:title "Reports"
:entity-name "Reports"
:route :company-reports-table
:action-buttons (fn [user]
nil)
:row-buttons (fn [user e]
(com/a-icon-button {:href (:report/url e)}
svg/download)[
(when (is-admin? user)
(com/icon-button {:hx-delete (str (bidi/path-for ssr-routes/only-routes
:company-reports-delete
:request-method :delete))
:hx-target "closest tr"}
svg/trash))])
:headers [{:key "name"
:name "Name"
:sort-key "name"
:render :report/name}
{:key "created-by"
:name "Created by"
:sort-key "creator"
:render (fn [report]
(when (:report/creator report)
(com/pill {:color :primary }
(:report/creator report))))}
{:key "created"
:name "Created"
:sort-key "created"
:render #(atime/unparse-local (:report/created %)
atime/normal-date)}]})
(defn delete-report [{:keys [query-params hx-query-params form-params identity session] :as request}]
(def row* (partial helper/row* grid-page))
(def table* (partial helper/table* grid-page))
(def table (partial helper/table grid-page))
(def page (partial helper/page grid-page))
(defn delete-report [{:keys [form-params identity]}]
(let [[id-to-delete key] (first (dc/q '[:find ?i ?k
:in $ ?i
:where [?i :report/key ?k]]
(dc/db conn)
(some-> (get form-params "id") not-empty Long/parseLong)))
report (dc/pull (dc/db conn) r/default-read id-to-delete)]
(assert-can-see-client identity (:report/client report))
(when id-to-delete
(s3/delete-object :bucket-name (:data-bucket env)
:key key)
@(dc/transact conn [[:db/retractEntity id-to-delete]]))
(html-response
(row* {:report report
:flash? true
:identity identity
(row* identity
report
{:flash? true
:delete-after-settle? true}))))
(defn reports-table [{:keys [query-params hx-query-params identity session] :as request}]
(html-response (table* {:client (:client (:session request))
:start (some-> (or (get query-params "start") (get hx-query-params "start")) not-empty (Long/parseLong ))
:per-page (some-> (or (get query-params "per-page") (get hx-query-params "per-page")) not-empty (Long/parseLong ))
:identity identity
:session session})
:headers {"hx-push-url" (str "?start=" (get (:query-params request) "start"))}))
(defn page [{:keys [query-params hx-query-params identity session] :as request}]
(base-page
request
(com/page {:nav (com/company-aside-nav)
:active-client (:client (:session request))
:identity (:identity request)}
(com/breadcrumbs {}
[:a {:href (bidi/path-for ssr-routes/only-routes
:company)} "My Company"]
[:a {:href {:href (bidi/path-for ssr-routes/only-routes
:company-reports)}} "Reports"])
(table* {:client (:client (:session request))
:start (some-> (or (get query-params "start") (get hx-query-params "start")) not-empty (Long/parseLong ))
:per-page (some-> (or (get query-params "per-page") (get hx-query-params "per-page")) not-empty (Long/parseLong ))
:identity identity
:session session}))
nil))