diff --git a/src/cljs/auto_ap/views/components/grid.cljs b/src/cljs/auto_ap/views/components/grid.cljs index c88b2cf2..d5fbafb9 100644 --- a/src/cljs/auto_ap/views/components/grid.cljs +++ b/src/cljs/auto_ap/views/components/grid.cljs @@ -1,10 +1,12 @@ (ns auto-ap.views.components.grid (:require [reagent.core :as r] - [auto-ap.views.utils :refer [appearing]] + [auto-ap.views.utils :refer [appearing copy-to-clipboard]] [auto-ap.utils :refer [default-pagination-size]] [react :as react] [re-frame.core :as re-frame] - [auto-ap.views.pages.data-page :as data-page])) + [auto-ap.views.pages.data-page :as data-page] + [auto-ap.views.components.buttons :as buttons] + [auto-ap.subs :as subs])) (defonce grid-context (react/createContext "default")) (def Provider (.-Provider grid-context)) @@ -151,7 +153,10 @@ (r/children (r/current-component)))) (defn row [{:keys [class id checkable? entity] }] - (let [children (r/children (r/current-component))] + (let [children (r/children (r/current-component)) + is-admin? @(re-frame/subscribe [::subs/is-admin?]) + + ] [:> Consumer {} (fn [consume] (let [on-check-changed (aget consume "on-check-changed") @@ -178,6 +183,15 @@ (on-check-changed (conj checked id)))))))} (boolean? checkable?) (assoc :disabled (not checkable?))) ]])) + (when is-admin? + (r/as-element + (cond + (not id) [:th {:style {:width "4em"}}] + id [:th {:style {:width "4em"}} [:button.button.is-link.is-light + {:on-click (fn [] + (copy-to-clipboard id))} + [:span.icon [:i.fa.fa-files-o]] + ]]))) (map r/as-element children))))])) (defn button-cell [params] @@ -190,12 +204,14 @@ ) (defn body [] - (let [children (r/children (r/current-component))] + (let [children (r/children (r/current-component)) + is-admin? @(re-frame/subscribe [::subs/is-admin?])] [:> Consumer {} (fn [consume] (let [{:strs [column-count status check-boxes?]} (js->clj consume) column-count (cond-> column-count - check-boxes? inc)] + check-boxes? inc + is-admin? inc)] (r/as-element (cond (= :loading (:state status)) ^{:key "loading-body"} diff --git a/src/cljs/auto_ap/views/pages/admin/accounts.cljs b/src/cljs/auto_ap/views/pages/admin/accounts.cljs index f41a91d1..715869f4 100644 --- a/src/cljs/auto_ap/views/pages/admin/accounts.cljs +++ b/src/cljs/auto_ap/views/pages/admin/accounts.cljs @@ -97,7 +97,7 @@ [grid/body (for [{:keys [id numeric-code name type location class] :as account} (:data accounts)] ^{:key id} - [grid/row {:class (:class account)} + [grid/row {:class (:class account) :id id} [grid/cell {} numeric-code] [grid/cell {} name] [grid/cell {} type] diff --git a/src/cljs/auto_ap/views/pages/admin/clients/table.cljs b/src/cljs/auto_ap/views/pages/admin/clients/table.cljs index 5d2ed5e3..228b48db 100644 --- a/src/cljs/auto_ap/views/pages/admin/clients/table.cljs +++ b/src/cljs/auto_ap/views/pages/admin/clients/table.cljs @@ -44,7 +44,7 @@ [grid/body (for [{:keys [id name email code locations] :as c} (:data page)] ^{:key (str name "-" id )} - [grid/row + [grid/row {:id id} [grid/cell {} name] [grid/cell {} code] [grid/cell {} (str/join ", " locations)] diff --git a/src/cljs/auto_ap/views/pages/admin/rules.cljs b/src/cljs/auto_ap/views/pages/admin/rules.cljs index 424819be..0f35653c 100644 --- a/src/cljs/auto_ap/views/pages/admin/rules.cljs +++ b/src/cljs/auto_ap/views/pages/admin/rules.cljs @@ -34,7 +34,7 @@ :owns-state {:single [::data-page/page ::page]} :query-obj {:venia/queries [[:transaction_rule_page {:sort (:sort params) - :start (:start params) + :start (:start params 0) :per-page (:per-page params) :vendor-id (:id (:vendor params)) :client-id (:id @(re-frame/subscribe [::subs/client]))} diff --git a/src/cljs/auto_ap/views/pages/admin/rules/table.cljs b/src/cljs/auto_ap/views/pages/admin/rules/table.cljs index 8ee3c204..1505cb6c 100644 --- a/src/cljs/auto_ap/views/pages/admin/rules/table.cljs +++ b/src/cljs/auto_ap/views/pages/admin/rules/table.cljs @@ -133,7 +133,7 @@ [grid/body (for [{:keys [client bank-account description amount-lte amount-gte note id] :as r} (:data data)] ^{:key id} - [grid/row {:class (:class r)} + [grid/row {:class (:class r) :id id} [grid/cell {} (:name client)] [grid/cell {} (:name bank-account)] [grid/cell {} description] diff --git a/src/cljs/auto_ap/views/pages/admin/users/table.cljs b/src/cljs/auto_ap/views/pages/admin/users/table.cljs index 69fbe734..e49d9228 100644 --- a/src/cljs/auto_ap/views/pages/admin/users/table.cljs +++ b/src/cljs/auto_ap/views/pages/admin/users/table.cljs @@ -35,7 +35,7 @@ [grid/body (for [{:keys [id name role clients] :as c} (:data page)] ^{:key (str name "-" id )} - [grid/row {:class (:class c)} + [grid/row {:class (:class c) :id id} [grid/cell {} name] [grid/cell {} role] [grid/cell {} (str/join ", " (map :name clients))] diff --git a/src/cljs/auto_ap/views/pages/admin/vendors/table.cljs b/src/cljs/auto_ap/views/pages/admin/vendors/table.cljs index a29d2e00..0fd09bf2 100644 --- a/src/cljs/auto_ap/views/pages/admin/vendors/table.cljs +++ b/src/cljs/auto_ap/views/pages/admin/vendors/table.cljs @@ -39,7 +39,7 @@ [grid/body (for [v (:data page)] ^{:key (str (:id v))} - [grid/row {:class (:class v)} + [grid/row {:class (:class v) :id (:id v)} [grid/cell {} (:name v)] [grid/cell {} (:email (:primary-contact v))] [grid/cell {} (-> v :default-account :id accounts :name)] diff --git a/src/cljs/auto_ap/views/pages/ledger/table.cljs b/src/cljs/auto_ap/views/pages/ledger/table.cljs index 93327940..bda3c845 100644 --- a/src/cljs/auto_ap/views/pages/ledger/table.cljs +++ b/src/cljs/auto_ap/views/pages/ledger/table.cljs @@ -12,7 +12,7 @@ (defn ledger-row [{{:keys [client vendor status date amount id line-items] :as i} :row :keys [selected-client accounts-by-id bank-accounts-by-id]}] [:<> - [grid/row {:class (:class i)} + [grid/row {:class (:class i) :id id} (when-not selected-client [grid/cell {} (:name client)]) [grid/cell {} (if vendor diff --git a/src/cljs/auto_ap/views/pages/payments/table.cljs b/src/cljs/auto_ap/views/pages/payments/table.cljs index 58211287..d24befe0 100644 --- a/src/cljs/auto_ap/views/pages/payments/table.cljs +++ b/src/cljs/auto_ap/views/pages/payments/table.cljs @@ -43,7 +43,7 @@ states :states }] (let [{:keys [client s3-url bank-account payments type check-number date amount id vendor status invoices] :as check} check] - [grid/row {:class (:class check)} + [grid/row {:class (:class check) :id id} (when-not selected-client [grid/cell {} (:name client)]) [grid/cell {} (:name vendor)] diff --git a/src/cljs/auto_ap/views/pages/sales_orders/table.cljs b/src/cljs/auto_ap/views/pages/sales_orders/table.cljs index 5241c67f..c7f2a5d2 100644 --- a/src/cljs/auto_ap/views/pages/sales_orders/table.cljs +++ b/src/cljs/auto_ap/views/pages/sales_orders/table.cljs @@ -10,8 +10,8 @@ (defn row [{sales-order :sales-order selected-client :selected-client}] - (let [{:keys [client date total tax tip charges line-items]} sales-order] - [grid/row {:class (:class sales-order)} + (let [{:keys [client date total tax tip charges line-items id]} sales-order] + [grid/row {:class (:class sales-order) :id id} (when-not selected-client [grid/cell {} (:name client)]) [grid/cell {} (date->str date) ] diff --git a/src/cljs/auto_ap/views/pages/transactions/table.cljs b/src/cljs/auto_ap/views/pages/transactions/table.cljs index 4bdff1c1..bc1af759 100644 --- a/src/cljs/auto_ap/views/pages/transactions/table.cljs +++ b/src/cljs/auto_ap/views/pages/transactions/table.cljs @@ -76,7 +76,7 @@ [grid/body (for [{:keys [client account vendor approval-status payment status bank-account description-original date amount id yodlee-merchant ] :as i} (:data data)] ^{:key id} - [grid/row {:class (:class i)} + [grid/row {:class (:class i) :id id} (when-not selected-client [grid/cell {} (:name client)]) diff --git a/src/cljs/auto_ap/views/utils.cljs b/src/cljs/auto_ap/views/utils.cljs index 2947ba2d..8cdaa94a 100644 --- a/src/cljs/auto_ap/views/utils.cljs +++ b/src/cljs/auto_ap/views/utils.cljs @@ -464,3 +464,12 @@ (- (t/in-days (t/interval (t/minus d (t/days 1)) today))) (t/in-days (t/interval today d )))] in)) + +(defn copy-to-clipboard [text] + (let [el (js/document.createElement "textarea")] + + (set! (.-value el) text) + (.appendChild js/document.body el) + (.select el) + (js/document.execCommand "copy") + (.removeChild js/document.body el)))