From 79e9e3e1b03eaf862b6f3fba7e957792d2bde0a1 Mon Sep 17 00:00:00 2001 From: Bryce Covert Date: Tue, 4 Aug 2020 06:56:36 -0700 Subject: [PATCH] standardizing vendors. --- src/cljs/auto_ap/views/pages/admin/rules.cljs | 5 +- .../views/pages/admin/rules/table.cljs | 5 +- .../auto_ap/views/pages/admin/vendors.cljs | 81 ++++++------------- .../views/pages/admin/vendors/side_bar.cljs | 13 +-- .../views/pages/admin/vendors/table.cljs | 48 +++++++++++ 5 files changed, 83 insertions(+), 69 deletions(-) create mode 100644 src/cljs/auto_ap/views/pages/admin/vendors/table.cljs diff --git a/src/cljs/auto_ap/views/pages/admin/rules.cljs b/src/cljs/auto_ap/views/pages/admin/rules.cljs index 15a44632..ad79bd6d 100644 --- a/src/cljs/auto_ap/views/pages/admin/rules.cljs +++ b/src/cljs/auto_ap/views/pages/admin/rules.cljs @@ -125,10 +125,7 @@ [table/table {:id :transactions :params (re-frame/subscribe [::params]) :rule-page (re-frame/subscribe [::page]) - :status @(re-frame/subscribe [::status/single ::page]) - :on-params-change (fn [params] - (println "CHANGING PARAMS TO" params) - (re-frame/dispatch [::params-change params]))}] + :status @(re-frame/subscribe [::status/single ::page])}] ])) {:component-did-mount (dispatch-event [::mounted ]) :component-will-unmount #(re-frame/dispatch-sync [::unmounted])})) 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 75855ebb..a5b06ccd 100644 --- a/src/cljs/auto_ap/views/pages/admin/rules/table.cljs +++ b/src/cljs/auto_ap/views/pages/admin/rules/table.cljs @@ -99,9 +99,8 @@ -(defn table* [{:keys [id rule-page on-params-change params status]}] - (let [{:keys [sort asc]} @params - {:keys [transaction-rules start end count total]} @rule-page +(defn table* [{:keys [id rule-page params status]}] + (let [{:keys [transaction-rules start end count total]} @rule-page selected-client @(re-frame/subscribe [::subs/client]) opc (fn [p] (re-frame/dispatch [::params-changed p])) diff --git a/src/cljs/auto_ap/views/pages/admin/vendors.cljs b/src/cljs/auto_ap/views/pages/admin/vendors.cljs index 7be7076c..89ffc3bf 100644 --- a/src/cljs/auto_ap/views/pages/admin/vendors.cljs +++ b/src/cljs/auto_ap/views/pages/admin/vendors.cljs @@ -1,5 +1,5 @@ (ns auto-ap.views.pages.admin.vendors -(:require [re-frame.core :as re-frame] + (:require [re-frame.core :as re-frame] [reagent.core :as reagent] [clojure.string :as str] [auto-ap.views.components.buttons :as buttons] @@ -11,17 +11,20 @@ [auto-ap.entities.vendors :as entity] [auto-ap.views.components.address :refer [address-field]] [auto-ap.views.components.vendor-dialog :refer [vendor-dialog] :as vendor-dialog] - [auto-ap.views.components.grid :as grid] + [auto-ap.views.components.grid :as grid] [auto-ap.views.components.modal :refer [modal action-modal]] [auto-ap.views.components.admin.side-bar :refer [admin-side-bar]] [auto-ap.views.components.layouts :refer [side-bar-layout]] [clojure.spec.alpha :as s] [auto-ap.views.utils :refer [login-url dispatch-value-change dispatch-event bind-field horizontal-field action-cell-width]] + [auto-ap.views.pages.admin.vendors.table :as table] [auto-ap.views.components.typeahead :refer [typeahead]] [cljs.reader :as edn] [auto-ap.routes :as routes] - [bidi.bidi :as bidi]) + [bidi.bidi :as bidi] + [auto-ap.status :as status] + [vimsical.re-frame.fx.track :as track]) (:require-macros [cljs.core.async.macros :refer [go]] [auto-ap.entities.vendors :as vendor])) @@ -31,8 +34,12 @@ ::mounted (fn [{:keys [db]} _] {:graphql {:token (:user db) + :owns-state {:single ::vendor-page} :query-obj {:venia/queries [[:vendor events/vendor-query]]} - :on-success [::received-vendors]}})) + :on-success [::received-vendors]} + ::track/register {:id ::params + :subscription [::params] + :event-fn (fn [params] [::params-change params])}})) (re-frame/reg-event-db ::received-vendors @@ -40,31 +47,25 @@ (assoc db :vendors (by :id (:vendor vendors ))))) -(re-frame/reg-event-db - ::table-params-changed - (fn [db [_ p]] - (assoc db ::table-params p))) - -(re-frame/reg-sub - ::table-params - (fn [db] - (-> db ::table-params))) - (re-frame/reg-event-fx ::unmounted (fn [{:keys [db]} _] - {:db (dissoc db ::table-params ::side-bar/filter-params)})) + {:db (dissoc db ::table/params ::side-bar/filter-params) + ::track/dispose {:id ::params}})) (re-frame/reg-sub ::params :<- [::side-bar/filter-params] - :<- [::table-params] + :<- [::table/params] (fn [[filter-params table-params]] - (println "TABLE params" table-params) (cond-> {} (seq filter-params) (merge filter-params) (seq table-params) (merge table-params)))) +(re-frame/reg-event-fx + ::params-change + (fn [_ [_ params]] + {:set-uri-params params})) (re-frame/reg-sub ::vendor-page @@ -72,46 +73,11 @@ :<- [::subs/sorted-all-vendors] (fn [[params all-vendors]] (let [matching-vendors (cond->> all-vendors - (:name params) (filter #(str/includes? (str/lower-case (:name %)) (str/lower-case (:name params)))))] + (:name-like params) (filter #(str/includes? (str/lower-case (or (:name %) "")) + (str/lower-case (:name-like params)))))] (assoc (grid/virtual-paginate-controls (:start params ) matching-vendors) :data (grid/virtual-paginate (:start params) matching-vendors))))) -(defn vendors-table [] - (let [vendor-page @(re-frame/subscribe [::vendor-page]) - params @(re-frame/subscribe [::params]) - accounts @(re-frame/subscribe [::subs/all-accounts-by-id]) - ] - - [grid/grid {:status nil - :on-params-change (fn [p] - (re-frame/dispatch [::table-params-changed p])) - :params params - :column-count 4} - [grid/controls vendor-page] - [grid/table {:fullwidth true} - [grid/header - [grid/row {} - [grid/header-cell {} "Name"] - [grid/header-cell {} "Email"] - [grid/header-cell {} "Default Account"] - [grid/header-cell {:style {:width (action-cell-width 1)}}]]] - [grid/body - (for [v (:data vendor-page)] - ^{:key (str (:id v))} - [grid/row {:class (:class v)} - [grid/cell {} (:name v)] - [grid/cell {} (:email (:primary-contact v))] - [grid/cell {} (-> v :default-account :id accounts :name)] - [grid/cell {} - [buttons/fa-icon {:event [::vendor-dialog/started v] - :icon "fa-pencil"}]]])]]])) - -(defn danger-for [[dom {:keys [field subscription class] :as keys} & rest]] - (let [keys (assoc keys :class (str class - (when (not (s/valid? field (field subscription))) - " is-danger"))) - keys (dissoc keys :field :subscription)] - (vec (concat [dom keys] rest)))) (re-frame/reg-event-fx ::merge-clicked @@ -191,10 +157,11 @@ [:div [:h1.title "Vendors"] [:div.is-pulled-right [:a.button.is-primary.is-outlined {:on-click (dispatch-event [::merge-clicked])} "Merge vendors"]] - [vendors-table] + [table/vendors-table {:page @(re-frame/subscribe [::vendor-page]) + :status @(re-frame/subscribe [::status/single ::vendor-page])}] [merge-vendors-dialog]])]) - {:component-did-mount (fn [] - (re-frame/dispatch [::mounted]))})]) + {:component-did-mount #(re-frame/dispatch [::mounted]) + :component-will-unmount #(re-frame/dispatch-sync [::unmounted])})]) (defn admin-vendors-page [] [side-bar-layout {:side-bar [admin-side-bar {} diff --git a/src/cljs/auto_ap/views/pages/admin/vendors/side_bar.cljs b/src/cljs/auto_ap/views/pages/admin/vendors/side_bar.cljs index 9bdcd612..9a732715 100644 --- a/src/cljs/auto_ap/views/pages/admin/vendors/side_bar.cljs +++ b/src/cljs/auto_ap/views/pages/admin/vendors/side_bar.cljs @@ -17,7 +17,8 @@ :<- [::subs/query-params] (fn [[specific-filters vendors-by-id query-params] ] (let [url-filters (-> query-params - (select-keys #{:name}))] + (select-keys #{:name-like}) + (update :name-like #(some-> % str)))] (merge url-filters specific-filters )))) (re-frame/reg-sub @@ -34,9 +35,11 @@ (re-frame/reg-sub ::filter-params :<- [::settled-filters] + :<- [::filters] :<- [::subs/active-page] - (fn [[filters ap ]] - {:name (:name filters)})) + (fn [[settled-filters filters ap ]] + (let [filters (or settled-filters filters)] + {:name-like (:name-like filters)}))) (re-frame/reg-event-fx ::filters-settled @@ -62,7 +65,7 @@ [:div.field [:div.control [:input.input {:placeholder "Harry's Food Products" - :value @(re-frame/subscribe [::filter :name]) - :on-change (dispatch-value-change [::filter-changed :name])} ]]]]) + :value @(re-frame/subscribe [::filter :name-like]) + :on-change (dispatch-value-change [::filter-changed :name-like])} ]]]]) diff --git a/src/cljs/auto_ap/views/pages/admin/vendors/table.cljs b/src/cljs/auto_ap/views/pages/admin/vendors/table.cljs new file mode 100644 index 00000000..a29d2e00 --- /dev/null +++ b/src/cljs/auto_ap/views/pages/admin/vendors/table.cljs @@ -0,0 +1,48 @@ +(ns auto-ap.views.pages.admin.vendors.table + (:require + [re-frame.core :as re-frame] + [reagent.core :as reagent] + [auto-ap.subs :as subs] + [auto-ap.status :as status] + [auto-ap.views.components.vendor-dialog :refer [vendor-dialog] :as vendor-dialog] + [auto-ap.views.components.grid :as grid] + [auto-ap.views.utils :refer [login-url dispatch-value-change dispatch-event bind-field horizontal-field action-cell-width]] + [auto-ap.views.components.buttons :as buttons])) + +(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 vendors-table [{:keys [status page]}] + (let [params @(re-frame/subscribe [::params]) + accounts @(re-frame/subscribe [::subs/all-accounts-by-id])] + + [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 {} "Name"] + [grid/header-cell {} "Email"] + [grid/header-cell {} "Default Account"] + [grid/header-cell {:style {:width (action-cell-width 1)}}]]] + [grid/body + (for [v (:data page)] + ^{:key (str (:id v))} + [grid/row {:class (:class v)} + [grid/cell {} (:name v)] + [grid/cell {} (:email (:primary-contact v))] + [grid/cell {} (-> v :default-account :id accounts :name)] + [grid/cell {} + [buttons/fa-icon {:event [::vendor-dialog/started v] + :icon "fa-pencil"}]]])]]]))