improvements

This commit is contained in:
2026-05-26 11:18:52 -07:00
parent f239b114c3
commit ae0788e6dd
6 changed files with 299 additions and 147 deletions

View File

@@ -19,6 +19,7 @@
[auto-ap.ssr.hiccup-helper :as hh]
[auto-ap.ssr.hx :as hx]
[auto-ap.ssr.svg :as svg]
[auto-ap.time :as atime]
[bidi.bidi :as bidi]
[hiccup.util :as hu]))
@@ -58,6 +59,31 @@
(update-in c [1 1 :class] (fn [c]
(hh/add-class (or c "") " flex items-center p-2 pl-11 w-full text-base font-normal rounded-lg transition duration-75 group hover:bg-gray-100 dark:text-white dark:hover:bg-gray-700")))])])
(defn- transaction-nav-params [request]
(let [qp (:query-params request)]
(cond-> {}
(:amount-gte qp) (assoc :amount-gte (:amount-gte qp))
(:amount-lte qp) (assoc :amount-lte (:amount-lte qp))
(:vendor qp) (assoc :vendor (:db/id (:vendor qp)))
(:account qp) (assoc :account (:db/id (:account qp)))
(:bank-account qp) (assoc :bank-account (:db/id (:bank-account qp)))
(:linked-to qp) (assoc :linked-to (:linked-to qp))
(:description qp) (assoc :description (:description qp))
(:location qp) (assoc :location (:location qp))
(:client-id qp) (assoc :client-id (:client-id qp))
(:unresolved qp) (assoc :unresolved (:unresolved qp))
(:potential-duplicates qp) (assoc :potential-duplicates (:potential-duplicates qp))
(:start-date qp) (assoc :start-date (atime/unparse-local (:start-date qp) atime/normal-date))
(:end-date qp) (assoc :end-date (atime/unparse-local (:end-date qp) atime/normal-date))
(:per-page qp) (assoc :per-page (:per-page qp)))))
(defn- transaction-nav-url [request route & {:keys [default-params] :or {default-params {:date-range "month"}}}]
(let [preserved (transaction-nav-params request)]
(hu/url (bidi/path-for ssr-routes/only-routes route)
(if (or (:start-date preserved) (:end-date preserved))
preserved
(merge default-params preserved)))))
(defn left-aside- [{:keys [nav page-specific]} & _]
[:aside {:id "left-nav",
:class "fixed top-0 left-0 pt-16 z-20 w-64 h-screen transition-transform",
@@ -260,25 +286,26 @@
(sub-menu- {:selector "transactions"
:active? (= "transactions" selected)}
(menu-button- {:href (hu/url (bidi/path-for ssr-routes/only-routes
::transaction-routes/page)
{:date-range "month"})
(menu-button- {:href (transaction-nav-url request ::transaction-routes/page)
:active? (= ::transaction-routes/page (:matched-route request))
:hx-boost "true"} "All")
(menu-button- {:href (hu/url (bidi/path-for ssr-routes/only-routes
::transaction-routes/unapproved-page)
{:date-range "month"})
:hx-boost "true"
:hx-vals "js:(() => { const p = new URLSearchParams(window.location.search); p.delete('status'); p.delete('start'); p.delete('per-page'); return Object.fromEntries(p); })()"}
"All")
(menu-button- {:href (transaction-nav-url request ::transaction-routes/unapproved-page)
:active? (= ::transaction-routes/unapproved-page (:matched-route request))
:hx-boost "true"} "Unapproved")
(menu-button- {:href (hu/url (bidi/path-for ssr-routes/only-routes
::transaction-routes/requires-feedback-page)
{:date-range "month"})
:hx-boost "true"
:hx-vals "js:(() => { const p = new URLSearchParams(window.location.search); p.delete('status'); p.delete('start'); p.delete('per-page'); return Object.fromEntries(p); })()"}
"Unapproved")
(menu-button- {:href (transaction-nav-url request ::transaction-routes/requires-feedback-page)
:active? (= ::transaction-routes/requires-feedback-page (:matched-route request))
:hx-boost "true"} "Client Review")
(menu-button- {:href (hu/url (bidi/path-for ssr-routes/only-routes ::transaction-routes/approved-page)
{:date-range "month"})
:hx-boost "true"
:hx-vals "js:(() => { const p = new URLSearchParams(window.location.search); p.delete('status'); p.delete('start'); p.delete('per-page'); return Object.fromEntries(p); })()"}
"Client Review")
(menu-button- {:href (transaction-nav-url request ::transaction-routes/approved-page)
:active? (= ::transaction-routes/approved-page (:matched-route request))
:hx-boost "true"} "Approved")
:hx-boost "true"
:hx-vals "js:(() => { const p = new URLSearchParams(window.location.search); p.delete('status'); p.delete('start'); p.delete('per-page'); return Object.fromEntries(p); })()"}
"Approved")
(when (can? (:identity request)
{:subject :transaction :activity :insights})
(menu-button- {:href (bidi/path-for ssr-routes/only-routes