Revamps all of the IOL's routing, so that the new history page can share with the rest.

This commit is contained in:
2023-01-12 16:56:40 -08:00
parent ce01a63797
commit 46dd191391
29 changed files with 1294 additions and 1053 deletions

View File

@@ -0,0 +1,104 @@
(ns auto-ap.shared-views.admin.side-bar
(:require [bidi.bidi :as bidi]
[auto-ap.client-routes :as client-routes]
[auto-ap.ssr-routes :as ssr-routes]
#?(:cljs [re-frame.core :as re-frame])
#?(:cljs [reagent.core :as r])))
(defn active-when [active-page f & rest]
(when (apply f (into [active-page] rest)) " is-active"))
(defn deep-merge [v & vs]
(letfn [(rec-merge [v1 v2]
(if (and (map? v1) (map? v2))
(merge-with deep-merge v1 v2)
v2))]
(when (some identity vs)
(reduce #(rec-merge %1 %2) v vs))))
(def all-client-visible-routes
["/" (deep-merge ssr-routes/routes (second client-routes/routes))])
(defn menu-item [{:keys [label route test-route active-route icon-class icon-style]}]
[:p.menu-item
[:a.item {:href (bidi/path-for all-client-visible-routes route)
:class (when (test-route active-route) "is-active")}
(if icon-style
[:span {:class icon-class :style icon-style}]
[:span {:class "icon"}
[:i {:class icon-class}]])
[:span {:class "name"} label]]])
(defn admin-side-bar-impl [active-route children]
[:div
[:p.menu-label "General"]
(menu-item {:label "Dashboard"
:icon-class "fa fa-tachometer"
:test-route #{:admin}
:active-route active-route
:route :admin})
[:p.menu-label "Setup"]
(menu-item {:label "Clients"
:icon-class "fa fa-star-o"
:test-route #{:admin-clients
:admin-specific-client
:admin-specific-bank-account}
:active-route active-route
:route :admin-clients})
(menu-item {:label "Vendors"
:icon-class "fa fa-star-o"
:test-route #{:admin-vendors}
:active-route active-route
:route :admin-vendors})
(menu-item {:label "Users"
:icon-class "icon icon-single-neutral-book"
:test-route #{:admin-users}
:active-route active-route
:route :admin-users
:icon-style {:font-size "25px"}})
(menu-item {:label "Accounts"
:icon-class "icon icon-list-bullets"
:test-route #{:admin-accounts}
:active-route active-route
:route :admin-accounts
:icon-style {:font-size "25px"}})
(menu-item {:label "Rules"
:icon-class "icon icon-cog-play-1"
:test-route #{:admin-rules}
:active-route active-route
:route :admin-rules
:icon-style {:font-size "25px"}})
(menu-item {:label "History"
:icon-class "icon icon-cog-play-1"
:test-route #{:admin-history :admin-history-search :admin-history-inspect}
:active-route active-route
:route :admin-history
:icon-style {:font-size "25px"}})
[:p.menu-label "Import"]
(menu-item {:label "Excel Invoices"
:icon-class "fa fa-download"
:test-route #{:admin-excel-import}
:active-route active-route
:route :admin-excel-import})
(menu-item {:label "Excel Invoices"
:icon-class "fa fa-download"
:test-route #{:admin-import-batches}
:active-route active-route
:route :admin-import-batches})
(menu-item {:label "Background Jobs"
:icon-class "icon icon-cog-play-1"
:test-route #{:admin-jobs}
:active-route active-route
:route :admin-jobs
:icon-style {:font-size "25px"}})
(into [:div ] children)])
#?(:clj
(defn admin-side-bar [active-page]
(admin-side-bar-impl active-page nil))
:cljs
(defn admin-side-bar []
(admin-side-bar-impl @(re-frame/subscribe [:auto-ap.subs/active-page])
(r/children (r/current-component)))))