a bunch of cleanup to remove stuff
This commit is contained in:
@@ -24,13 +24,10 @@
|
||||
[auto-ap.views.pages.admin :refer [admin-page]]
|
||||
[auto-ap.views.pages.home :refer [home-page]]
|
||||
[auto-ap.views.pages.admin.clients :refer [admin-clients-page]]
|
||||
[auto-ap.views.pages.admin.accounts :refer [admin-accounts-page]]
|
||||
[auto-ap.views.pages.admin.rules :refer [admin-rules-page]]
|
||||
[auto-ap.views.pages.admin.vendors :refer [admin-vendors-page]]
|
||||
[auto-ap.views.pages.admin.excel-import :refer [admin-excel-import-page]]
|
||||
[auto-ap.views.pages.admin.users :refer [admin-users-page]]
|
||||
[auto-ap.views.pages.admin.import-batches :refer [import-batches-page]]
|
||||
[auto-ap.views.pages.company.yodlee2 :as yodlee2]
|
||||
[auto-ap.views.pages.company.other :as company-other]))
|
||||
|
||||
(defmulti page (fn [active-page] active-page))
|
||||
@@ -109,9 +106,6 @@
|
||||
(defmethod page :admin-rules [_]
|
||||
(admin-rules-page))
|
||||
|
||||
(defmethod page :admin-users [_]
|
||||
(admin-users-page))
|
||||
|
||||
(defmethod page :admin-vendors [_]
|
||||
(admin-vendors-page))
|
||||
|
||||
@@ -121,15 +115,10 @@
|
||||
(defmethod page :admin-jobs [_]
|
||||
[jobs-page])
|
||||
|
||||
(defmethod page :yodlee2 [_]
|
||||
(yodlee2/admin-yodlee-provider-accounts-page))
|
||||
|
||||
(defmethod page :company-other [_]
|
||||
(company-other/company-other-page))
|
||||
|
||||
(defmethod page :admin-accounts [_]
|
||||
(admin-accounts-page))
|
||||
|
||||
(defmethod page :index [_]
|
||||
(home-page)
|
||||
)
|
||||
|
||||
@@ -1,85 +0,0 @@
|
||||
(ns auto-ap.views.pages.admin.accounts
|
||||
(:require
|
||||
[auto-ap.effects.forward :as forward]
|
||||
[auto-ap.forms :as forms]
|
||||
[auto-ap.shared-views.admin.side-bar :refer [admin-side-bar]]
|
||||
[auto-ap.views.components.buttons :as buttons]
|
||||
[auto-ap.views.components.layouts
|
||||
:refer [appearing-side-bar side-bar-layout]]
|
||||
[auto-ap.views.pages.admin.accounts.form :as account-form]
|
||||
[auto-ap.views.pages.admin.accounts.side-bar :as side-bar]
|
||||
[auto-ap.views.pages.admin.accounts.table :as table]
|
||||
[auto-ap.views.pages.data-page :as data-page]
|
||||
[auto-ap.views.utils :refer [with-user]]
|
||||
[clojure.set :as set]
|
||||
[re-frame.core :as re-frame]
|
||||
[reagent.core :as reagent]
|
||||
[vimsical.re-frame.fx.track :as track]))
|
||||
|
||||
(def default-read [:numeric-code :name :location :type :account_set :applicability :invoice-allowance :vendor-allowance :id [:client-overrides [:id :name [:client [:name :id]]]]])
|
||||
|
||||
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::params-change
|
||||
[with-user]
|
||||
(fn [{:keys [user]} [_ params]]
|
||||
{:set-uri-params params
|
||||
:graphql {:token user
|
||||
:owns-state {:single [::data-page/page ::page]}
|
||||
:query-obj {:venia/queries [{:query/data [:account_page
|
||||
{:sort (:sort params)
|
||||
:start (:start params 0)
|
||||
:per-page (:per-page params)
|
||||
:name-like (:name-like params)
|
||||
:numeric-code (some-> params :numeric-code not-empty js/parseInt (#(if (js/Number.isNaN %) nil %)))}
|
||||
[[:accounts default-read]
|
||||
:total
|
||||
:start
|
||||
:end]]
|
||||
:query/alias :result}]}
|
||||
:on-success (fn [result]
|
||||
[::data-page/received ::page
|
||||
(set/rename-keys (:result result)
|
||||
{:accounts :data})])}}))
|
||||
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::unmounted
|
||||
(fn [_ _]
|
||||
{::track/dispose {:id ::params}
|
||||
::forward/dispose [{:id ::updated}]}))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::mounted
|
||||
(fn [_ _]
|
||||
{::track/register {:id ::params
|
||||
:subscription [::data-page/params ::page]
|
||||
:event-fn (fn [params] [::params-change params])}
|
||||
::forward/register [{:id ::updated
|
||||
:events #{::account-form/edited}
|
||||
:event-fn (fn [[_ edited-account]]
|
||||
[::data-page/updated-entity ::page (:upsert-account edited-account)])}]}))
|
||||
|
||||
(defn admin-accounts-content []
|
||||
[:div
|
||||
[:h1.title "Accounts"]
|
||||
[:div.is-pulled-right
|
||||
[buttons/new-button {:name "Account"
|
||||
:class "is-primary"
|
||||
:event [::account-form/editing
|
||||
{:account-set "default"}]}]]
|
||||
[table/accounts-table {:data-page ::page}]])
|
||||
|
||||
(defn admin-accounts-page []
|
||||
(reagent/create-class
|
||||
{:display-name "accounts-page"
|
||||
:component-will-unmount #(re-frame/dispatch [::unmounted])
|
||||
:component-did-mount #(re-frame/dispatch [::mounted])
|
||||
:reagent-render
|
||||
(fn []
|
||||
(let [{:keys [active?]} @(re-frame/subscribe [::forms/form ::account-form/form])]
|
||||
[side-bar-layout {:side-bar [admin-side-bar {}
|
||||
[side-bar/accounts-side-bar {:data-page ::page}]]
|
||||
:main [admin-accounts-content]
|
||||
:right-side-bar [appearing-side-bar {:visible? active?} [account-form/form ]]}]))}))
|
||||
@@ -1,168 +0,0 @@
|
||||
(ns auto-ap.views.pages.admin.accounts.form
|
||||
(:require
|
||||
[auto-ap.forms :as forms]
|
||||
[auto-ap.forms.builder :as form-builder]
|
||||
[auto-ap.schema :as schema]
|
||||
[auto-ap.subs :as subs]
|
||||
[auto-ap.views.components :as com]
|
||||
[auto-ap.views.components.layouts :refer [side-bar]]
|
||||
[auto-ap.views.components.typeahead :refer [typeahead-v3]]
|
||||
[auto-ap.views.utils :refer [dispatch-event with-user]]
|
||||
[clojure.string :as str]
|
||||
[malli.core :as m]
|
||||
[re-frame.core :as re-frame]
|
||||
[vimsical.re-frame.cofx.inject :as inject]))
|
||||
|
||||
(def types [:dividend :expense :asset :liability :equity :revenue])
|
||||
(def applicabilities [:global :optional :customized])
|
||||
(def allowances [:allowed :denied :warn :admin-only])
|
||||
|
||||
(re-frame/reg-sub
|
||||
::request
|
||||
:<- [::forms/form ::form]
|
||||
(fn [{{:keys [id location type client-overrides applicability invoice-allowance vendor-allowance numeric-code name account-set]} :data}]
|
||||
{:id id
|
||||
:type (keyword type)
|
||||
:applicability (keyword applicability)
|
||||
:invoice-allowance (keyword invoice-allowance)
|
||||
:vendor-allowance (keyword vendor-allowance)
|
||||
:location (if (clojure.string/blank? location)
|
||||
nil
|
||||
location)
|
||||
:numeric-code (js/parseInt numeric-code)
|
||||
:name name
|
||||
:account-set account-set
|
||||
:client-overrides (map (fn [client-override]
|
||||
{:id (:id client-override)
|
||||
:client-id (:id (:client client-override))
|
||||
:name (if (str/blank? (:name client-override))
|
||||
nil
|
||||
(:name client-override))})
|
||||
client-overrides)}))
|
||||
|
||||
|
||||
|
||||
(re-frame/reg-event-db
|
||||
::editing
|
||||
(fn [db [_ which complete-listener]]
|
||||
(-> db
|
||||
(forms/start-form ::form which complete-listener))))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::edited
|
||||
[(forms/triggers-saved ::form :upsert-account)]
|
||||
(fn [_ [_ _]]))
|
||||
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::saving
|
||||
[with-user (re-frame/inject-cofx ::inject/sub [::request]) ]
|
||||
(fn [{:keys [user] ::keys [request]} _]
|
||||
(let [_ @(re-frame/subscribe [::forms/form ::form])]
|
||||
{:graphql
|
||||
{:owns-state {:single ::form}
|
||||
:token user
|
||||
:query-obj {:venia/operation {:operation/type :mutation
|
||||
:operation/name "UpsertAccount"}
|
||||
:venia/queries [{:query/data [:upsert-account
|
||||
{:account request}
|
||||
[:id :type :name :account-set :numeric-code :location :applicability :invoice-allowance :vendor-allowance [:client-overrides [:name :id [:client [:id :name]]]]]]}]}
|
||||
:on-success [::edited]
|
||||
:on-error [::forms/save-error ::form]}})))
|
||||
|
||||
(def account-customization-schema
|
||||
(m/schema
|
||||
[:map [:client schema/reference]
|
||||
[:name schema/not-empty-string]]))
|
||||
|
||||
(def account-schema
|
||||
(m/schema
|
||||
[:map
|
||||
[:numeric-code schema/integer-code]
|
||||
[:name schema/not-empty-string]
|
||||
[:type [:enum :dividend :expense :asset :liability :equity :revenue]]
|
||||
[:location {:optional true} [:maybe :string]]
|
||||
[:applicability [:enum :global :optional :customized]]
|
||||
[:invoice-allowance [:enum :allowed :denied :warn :admin-only]]
|
||||
[:vendor-allowance [:enum :allowed :denied :warn :admin-only]]
|
||||
[:client-overrides {:optional true}
|
||||
[:maybe [:sequential account-customization-schema]]]]))
|
||||
|
||||
(defn form [_]
|
||||
(let [{account :data } @(re-frame/subscribe [::forms/form ::form])]
|
||||
[side-bar {:on-close (dispatch-event [::forms/form-closing ::form])}
|
||||
[form-builder/builder {:change-event [::forms/change ::form]
|
||||
:submit-event [::saving]
|
||||
:id ::form
|
||||
:schema account-schema}
|
||||
[form-builder/section {:title (if (:id account)
|
||||
"Edit account"
|
||||
"Add account")}
|
||||
[form-builder/field-v2 {:field :numeric-code}
|
||||
"Code"
|
||||
[com/number-input
|
||||
{:disabled (boolean (:id account))
|
||||
:auto-focus (not (boolean (:id account)))
|
||||
:style {:width "9em"}}]]
|
||||
|
||||
[form-builder/field-v2 {:field :name}
|
||||
"Name"
|
||||
[:input.input {:type "text"
|
||||
:auto-focus (boolean (:id account))}]]
|
||||
|
||||
[form-builder/field-v2 {:field :type}
|
||||
"Account Type"
|
||||
[com/select-field {:options (map (fn [l]
|
||||
[l (str/capitalize (name l))])
|
||||
types)
|
||||
:allow-nil? true
|
||||
:keywordize? true}]]
|
||||
|
||||
|
||||
[form-builder/field-v2 {:field :location}
|
||||
"Location"
|
||||
[:input.input.known-field.location {:type "text"}]]
|
||||
|
||||
[form-builder/field-v2 {:field :invoice-allowance}
|
||||
"Invoice Allowance"
|
||||
[com/select-field {:options (map (fn [l]
|
||||
[l
|
||||
(str/capitalize (name l))])
|
||||
allowances)
|
||||
:allow-nil? true
|
||||
:keywordize? true}]]
|
||||
|
||||
[form-builder/field-v2 {:field :vendor-allowance}
|
||||
"Vendor Allowance"
|
||||
[com/select-field {:options (map (fn [l]
|
||||
[l
|
||||
(str/capitalize (name l))])
|
||||
allowances)
|
||||
:allow-nil? true
|
||||
:keywordize? true}]]
|
||||
|
||||
[form-builder/section {:title "Client"}
|
||||
[:h2.subtitle "Client"]
|
||||
[form-builder/field-v2 {:field :applicability}
|
||||
"Applicability"
|
||||
[com/select-field {:options (map (fn [l]
|
||||
[l
|
||||
(str/capitalize (name l))])
|
||||
applicabilities)
|
||||
:allow-nil? true
|
||||
:keywordize? true}]]
|
||||
[form-builder/field-v2 {:field :client-overrides}
|
||||
"Customizations"
|
||||
[com/multi-field-v2 {:template [[form-builder/raw-field-v2 {:field :client}
|
||||
[typeahead-v3 {:entities @(re-frame/subscribe [::subs/clients])
|
||||
:style {:width "13em"}
|
||||
:entity->text :name}]]
|
||||
[form-builder/raw-field-v2 {:field :name}
|
||||
[:input.input {:type "text"
|
||||
:style {:width "15em"}
|
||||
:placeholder "Bubblegum"}]]]
|
||||
:key-fn :id
|
||||
:schema [:sequential account-customization-schema]}]]]
|
||||
[form-builder/error-notification]
|
||||
|
||||
[form-builder/submit-button "Save"]]]]))
|
||||
@@ -1,23 +0,0 @@
|
||||
(ns auto-ap.views.pages.admin.accounts.side-bar
|
||||
(:require
|
||||
[auto-ap.views.pages.data-page :as data-page]
|
||||
[auto-ap.views.utils :refer [dispatch-value-change]]
|
||||
[re-frame.core :as re-frame]))
|
||||
|
||||
(defn accounts-side-bar [{:keys [data-page]}]
|
||||
[:div
|
||||
[:p.menu-label "Name"]
|
||||
|
||||
[:div.field
|
||||
[:div.control [:input.input {:placeholder "Food Cost"
|
||||
:value @(re-frame/subscribe [::data-page/filter data-page :name-like])
|
||||
:on-change (dispatch-value-change [::data-page/filter-changed data-page :name-like])} ]]]
|
||||
|
||||
[:p.menu-label "Code"]
|
||||
|
||||
[:div.field
|
||||
[:div.control [:input.input {:placeholder "11000"
|
||||
:value @(re-frame/subscribe [::data-page/filter data-page :numeric-code])
|
||||
:on-change (dispatch-value-change [::data-page/filter-changed data-page :numeric-code])}]]]])
|
||||
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
(ns auto-ap.views.pages.admin.accounts.table
|
||||
(:require
|
||||
[auto-ap.views.components.buttons :as buttons]
|
||||
[auto-ap.views.components.grid :as grid]
|
||||
[auto-ap.views.pages.admin.accounts.form :as account-form]
|
||||
[auto-ap.views.pages.data-page :as data-page]
|
||||
[auto-ap.views.utils :refer [action-cell-width]]
|
||||
[re-frame.core :as re-frame]))
|
||||
|
||||
(defn accounts-table [{:keys [data-page]}]
|
||||
(let [{:keys [data]} @(re-frame/subscribe [::data-page/page data-page])]
|
||||
|
||||
[:div
|
||||
[grid/grid {:data-page data-page
|
||||
:column-count 5}
|
||||
[grid/controls data]
|
||||
[grid/table {:fullwidth true}
|
||||
[grid/header
|
||||
[grid/row {}
|
||||
[grid/header-cell {} "Code"]
|
||||
[grid/header-cell {} "Name"]
|
||||
[grid/header-cell {} "Type"]
|
||||
[grid/header-cell {} "Location"]
|
||||
[grid/header-cell {:style {:width (action-cell-width 1)}}]]]
|
||||
[grid/body
|
||||
(for [{:keys [id numeric-code name type location] :as account} (:data data)]
|
||||
^{:key id}
|
||||
[grid/row {:class (:class account) :id id}
|
||||
[grid/cell {} numeric-code]
|
||||
[grid/cell {} name]
|
||||
[grid/cell {} type]
|
||||
[grid/cell {} location]
|
||||
[grid/cell {}
|
||||
[buttons/fa-icon {:event [::account-form/editing account [::edit-completed]]
|
||||
:icon "fa-pencil"}]]])]]
|
||||
[grid/bottom-paginator data]]]))
|
||||
@@ -1,91 +0,0 @@
|
||||
(ns auto-ap.views.pages.admin.users
|
||||
(:require
|
||||
[auto-ap.effects.forward :as forward]
|
||||
[auto-ap.status :as status]
|
||||
[auto-ap.utils :refer [replace-by]]
|
||||
[auto-ap.shared-views.admin.side-bar :refer [admin-side-bar]]
|
||||
[auto-ap.views.components.grid :as grid]
|
||||
[auto-ap.views.components.layouts :refer [side-bar-layout]]
|
||||
[auto-ap.views.pages.admin.users.form :as form]
|
||||
[auto-ap.views.pages.admin.users.table :as table]
|
||||
[re-frame.core :as re-frame]
|
||||
[reagent.core :as reagent]))
|
||||
|
||||
(re-frame/reg-sub
|
||||
::params
|
||||
:<- [::table/params]
|
||||
(fn [table-params]
|
||||
table-params))
|
||||
|
||||
(re-frame/reg-sub
|
||||
::users
|
||||
(fn [db]
|
||||
(::users db)))
|
||||
|
||||
(re-frame/reg-sub
|
||||
::page
|
||||
:<- [::params]
|
||||
:<- [::users]
|
||||
(fn [[params all-users]]
|
||||
(assoc (grid/virtual-paginate-controls (:start params ) (:per-page params) all-users )
|
||||
:data (grid/virtual-paginate (:start params) (:per-page params) all-users))))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::mounted
|
||||
(fn [{:keys [db]} _]
|
||||
{:graphql {:token (:user db)
|
||||
:owns-state {:single ::page}
|
||||
:query-obj {:venia/queries [[:user
|
||||
[:name
|
||||
:profile_image_url
|
||||
:email
|
||||
:impersonate_jwt
|
||||
:id
|
||||
:role
|
||||
[:clients [:id :name]]]]]}
|
||||
:on-success [::received]}
|
||||
::forward/register {:id ::edited-user
|
||||
:events #{::form/saved}
|
||||
:event-fn (fn [[_ query-result]]
|
||||
[::saved query-result])}}))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::unmounted
|
||||
(fn [_ _]
|
||||
{::forward/dispose {:id ::edited-user}}))
|
||||
|
||||
|
||||
(re-frame/reg-event-db
|
||||
::saved
|
||||
(fn [db [_ query-result]]
|
||||
(-> db
|
||||
(update ::users
|
||||
replace-by
|
||||
:id
|
||||
(assoc (:edit-user query-result) :class "live-added")))))
|
||||
|
||||
(re-frame/reg-event-db
|
||||
::received
|
||||
(fn [db [_ d]]
|
||||
(assoc-in db [::users] (:user d))))
|
||||
|
||||
|
||||
(defn users-table []
|
||||
[table/table {:page @(re-frame/subscribe [::page])
|
||||
:status @(re-frame/subscribe [::status/single ::page])}])
|
||||
|
||||
|
||||
(defn admin-users-content []
|
||||
[:div
|
||||
[:h1.title "Users"]
|
||||
[users-table]])
|
||||
|
||||
|
||||
(defn admin-users-page []
|
||||
(reagent/create-class
|
||||
{:component-will-unmount #(re-frame/dispatch [::unmounted])
|
||||
:component-did-mount #(re-frame/dispatch [::mounted])
|
||||
:reagent-render (fn []
|
||||
[side-bar-layout {:side-bar [admin-side-bar {}]
|
||||
:main [admin-users-content]}])}))
|
||||
|
||||
@@ -1,105 +0,0 @@
|
||||
(ns auto-ap.views.pages.admin.users.form
|
||||
(:require
|
||||
[auto-ap.forms :as forms]
|
||||
[auto-ap.forms.builder :as form-builder]
|
||||
[auto-ap.schema :as schema]
|
||||
[auto-ap.status :as status]
|
||||
[auto-ap.subs :as subs]
|
||||
[auto-ap.views.components :as com]
|
||||
[auto-ap.views.components.modal :as modal]
|
||||
[auto-ap.views.utils :refer [dispatch-event with-user]]
|
||||
[malli.core :as m]
|
||||
[re-frame.core :as re-frame]))
|
||||
|
||||
(def client-schema
|
||||
(m/schema [:map [:client schema/reference]]))
|
||||
|
||||
(def user-schema
|
||||
(m/schema
|
||||
[:map
|
||||
[:name schema/not-empty-string]
|
||||
[:role [:enum :none :user :manager :power_user :admin]]
|
||||
[:clients {:optional true}
|
||||
[:maybe
|
||||
[:sequential client-schema]]]]))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::saving
|
||||
[with-user (forms/in-form ::form)]
|
||||
(fn [{:keys [db user]} [_]]
|
||||
(if (m/validate user-schema (:data db))
|
||||
{:graphql
|
||||
{:token user
|
||||
:owns-state {:single ::form}
|
||||
:query-obj {:venia/operation {:operation/type :mutation
|
||||
:operation/name "EditUser"}
|
||||
:venia/queries [{:query/data [:edit-user
|
||||
{:edit-user (-> (:data db)
|
||||
(update :clients #(map (comp :id :client) %))
|
||||
(select-keys #{:id :name :clients :role}))}
|
||||
[:id :name :role [:clients [:id :name]]]]}]}
|
||||
:on-success [::saved]}}
|
||||
|
||||
{:dispatch-n [[::forms/attempted-submit ::form]
|
||||
[::status/error ::form [{:message "Please fix the errors and try again."}]]]})
|
||||
))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::saved
|
||||
(forms/triggers-stop ::form)
|
||||
(fn [_ _]
|
||||
{:dispatch [::modal/modal-closed]}))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
(defn form []
|
||||
(let [{:keys [data]} @(re-frame/subscribe [::forms/form ::form])
|
||||
clients @(re-frame/subscribe [::subs/clients])]
|
||||
[:<>
|
||||
[form-builder/builder {:submit-event [::saving]
|
||||
:id ::form
|
||||
:schema user-schema}
|
||||
[form-builder/field-v2 {:required? true
|
||||
:field :name}
|
||||
"Name"
|
||||
[:input.input {:type "text"}]]
|
||||
[form-builder/field-v2 {:required? true
|
||||
:field :role}
|
||||
"Role"
|
||||
[com/select-field {:options [[:none "None"]
|
||||
[:user "User"]
|
||||
[:manager "Manager"]
|
||||
[:power_user "Power User"]
|
||||
[:admin "Admin"]]
|
||||
:allow-nil? false
|
||||
:keywordize? true}]]
|
||||
[form-builder/field-v2 {:field :clients}
|
||||
(if (= :admin (:role data))
|
||||
"Client Assignments"
|
||||
"Client")
|
||||
[com/multi-field-v2 {:template [[form-builder/raw-field-v2 {:field :client}
|
||||
[com/entity-typeahead
|
||||
{:entities clients
|
||||
:entity->text :name
|
||||
:style {:width "13em"}}]]]
|
||||
:key-fn :id
|
||||
:schema [:sequential client-schema]
|
||||
:new-text "Grant access to client"}]]
|
||||
|
||||
[form-builder/hidden-submit-button]]]))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::editing
|
||||
(fn [{:keys [db]} [_ d]]
|
||||
{:db (-> db
|
||||
(forms/start-form ::form (update d :clients #(mapv (fn [x] {:client x :id (random-uuid)}) %))))
|
||||
:dispatch [::modal/modal-requested {:title (str "Edit user " (:name d))
|
||||
:body [form]
|
||||
:cancel? false
|
||||
:confirm {:value "Save"
|
||||
:status-from [::status/single ::form]
|
||||
:class "is-primary"
|
||||
:on-click (dispatch-event [::saving])
|
||||
:close-event [::status/completed ::form]}}]}))
|
||||
@@ -1,78 +0,0 @@
|
||||
(ns auto-ap.views.pages.admin.users.table
|
||||
(:require
|
||||
[auto-ap.views.components.buttons :as buttons]
|
||||
[auto-ap.views.components.grid :as grid]
|
||||
[auto-ap.views.pages.admin.users.form :as form]
|
||||
[auto-ap.views.utils
|
||||
:refer [action-cell-width dispatch-event with-user]]
|
||||
[clojure.string :as str]
|
||||
[re-frame.core :as re-frame]))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::impersonated
|
||||
(fn [_ [_ impersonate-jwt]]
|
||||
(println "SUCCESED")
|
||||
(.setItem js/localStorage "jwt" impersonate-jwt)
|
||||
(.removeItem js/localStorage "last-client-id" nil)
|
||||
(.removeItem js/localStorage "last-selected-clients" nil)
|
||||
(.reload (.-location js/document ) true)
|
||||
{}))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::impersonate
|
||||
[with-user]
|
||||
(fn [{:keys [db user]} [_ impersonate-jwt]]
|
||||
{:http {:method "GET"
|
||||
:uri (str "/impersonate?jwt=" impersonate-jwt)
|
||||
:on-success [::impersonated impersonate-jwt]}}))
|
||||
|
||||
(re-frame/reg-event-fx
|
||||
::params-changed
|
||||
(fn [{:keys [db]} [_ p]]
|
||||
{:db (assoc db ::params p)}))
|
||||
|
||||
(re-frame/reg-sub
|
||||
::params
|
||||
(fn [db]
|
||||
(-> db ::params)))
|
||||
|
||||
(defn table [{:keys [status page]}]
|
||||
(let [params @(re-frame/subscribe [::params])]
|
||||
[grid/grid {:status status
|
||||
:on-params-change (fn [p]
|
||||
(re-frame/dispatch [::params-changed p]))
|
||||
:params params
|
||||
:column-count 4}
|
||||
[grid/controls page]
|
||||
[grid/table {:fullwidth true}
|
||||
[grid/header
|
||||
[grid/row {}
|
||||
[grid/header-cell {} "User"]
|
||||
[grid/header-cell {} "Email"]
|
||||
[grid/header-cell {} "Role"]
|
||||
[grid/header-cell {} "Clients"]
|
||||
[grid/header-cell {:style {:width (action-cell-width 5)}}]]]
|
||||
[grid/body
|
||||
(for [{:keys [id name role clients] :as c} (:data page)]
|
||||
^{:key (str name "-" id)}
|
||||
[grid/row {:class (:class c) :id id}
|
||||
[grid/cell {}
|
||||
[:div.level
|
||||
[:div.level-left
|
||||
(when-let [url (:profile-image-url c)]
|
||||
[:div.level-item
|
||||
[:figure.image.is-24x24
|
||||
[:img.is-rounded {:src url
|
||||
:referrer-policy= "no-referrer"}]]])
|
||||
[:div.level-item name]]]]
|
||||
[grid/cell {} (:email c)]
|
||||
[grid/cell {} role]
|
||||
[grid/cell {} (str/join ", " (map :name clients))]
|
||||
[grid/cell {}
|
||||
[:a.button {:on-click (dispatch-event [::impersonate (:impersonate-jwt c)])}
|
||||
"Impersonate"]
|
||||
|
||||
|
||||
[buttons/fa-icon {:event [::form/editing c]
|
||||
:icon "fa-pencil"}]]])]]
|
||||
]))
|
||||
Reference in New Issue
Block a user