Makes reports page work with new tailwind
This commit is contained in:
120
src/clj/auto_ap/ssr/company/reports.clj
Normal file
120
src/clj/auto_ap/ssr/company/reports.clj
Normal file
@@ -0,0 +1,120 @@
|
||||
(ns auto-ap.ssr.company.reports
|
||||
(:require
|
||||
[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.ssr-routes :as ssr-routes]
|
||||
[auto-ap.ssr.components :as com]
|
||||
[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]))
|
||||
|
||||
(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)]))))
|
||||
|
||||
(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 {})]})))
|
||||
|
||||
(defn delete-report [{:keys [query-params hx-query-params form-params identity session] :as request}]
|
||||
(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)]
|
||||
(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
|
||||
: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 "#"} "My Company"]
|
||||
[:a {:href "#"} "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))
|
||||
Reference in New Issue
Block a user