From 36f53214549efa476f1d3dd89b8fc9d54da8d2d8 Mon Sep 17 00:00:00 2001 From: Bryce Covert Date: Fri, 3 May 2019 13:51:47 -0700 Subject: [PATCH] supports date filter. --- .../views/components/date_range_filter.cljs | 88 ++++++++++++------- src/cljs/auto_ap/views/utils.cljs | 12 ++- 2 files changed, 66 insertions(+), 34 deletions(-) diff --git a/src/cljs/auto_ap/views/components/date_range_filter.cljs b/src/cljs/auto_ap/views/components/date_range_filter.cljs index ce46d5b3..09bd2082 100644 --- a/src/cljs/auto_ap/views/components/date_range_filter.cljs +++ b/src/cljs/auto_ap/views/components/date_range_filter.cljs @@ -3,36 +3,62 @@ [clojure.spec.alpha :as s] [auto-ap.entities.invoice :as invoice] [auto-ap.views.components.typeahead :refer [typeahead]] - [auto-ap.views.utils :refer [bind-field date-picker]])) + [auto-ap.views.utils :refer [bind-field date-picker date->str local-now standard]] + [cljs-time.core :as t] + [re-frame.core :as re-frame])) + +(defn dispatch-change [on-change-event start end] + (fn [_] + (re-frame/dispatch (into on-change-event [[:start] start]) ) + (re-frame/dispatch (into on-change-event [[:end] end])))) (defn date-range-filter [{:keys [value on-change-event]}] - [:div.field - [:div.control - [:div.columns.is-variable.is-1 - [:div.column - [bind-field - [date-picker {:class-name "input is-fullwidth" - :class "input" - :format-week-number (fn [] "") - :previous-month-button-label "" - :placeholder "Start Date mm/dd/yyyy" - :next-month-button-label "" - :next-month-label "" - :event on-change-event - :type "date" - :field [:start] - :subscription value}]]] - [:div.column.is-narrow " to "] - [:div.column - [bind-field - [date-picker {:class-name "input is-fullwidth" - :class "input" - :format-week-number (fn [] "") - :previous-month-button-label "" - :placeholder "Start Date mm/dd/yyyy" - :next-month-button-label "" - :event on-change-event - :next-month-label "" - :type "date" - :field [:end] - :subscription value}]]]]]]) + [:div + [:div.field.has-addons + [:p.control [:a.button.is-small {:on-click + (dispatch-change on-change-event + (date->str (t/minus (local-now) (t/period :days 7)) standard) + (date->str (local-now) standard))} + "Week" ]] + [:p.control [:a.button.is-small {:on-click + (dispatch-change on-change-event + (date->str (t/minus (local-now) (t/period :months 1)) standard) + (date->str (local-now) standard))} + "Month" ]] + [:p.control [:a.button.is-small {:on-click + (dispatch-change on-change-event + (date->str (t/minus (local-now) (t/period :years 1)) standard) + (date->str (local-now) standard))} + "Year"]] + [:p.control [:a.button.is-small {:on-click + (dispatch-change on-change-event + nil + nil)} + "All"]]] + [:div.field.has-addons + [:div.control + [bind-field + [date-picker {:class-name "input is-fullwidth" + :class "input" + :format-week-number (fn [] "") + :previous-month-button-label "" + :placeholder-text "Start" + :next-month-button-label "" + :next-month-label "" + :event on-change-event + :type "date" + :field [:start] + :subscription value}]]] + [:div.control + [bind-field + [date-picker {:class-name "input is-fullwidth" + :class "input" + :format-week-number (fn [] "") + :previous-month-button-label "" + :placeholder-text "End" + :next-month-button-label "" + :event on-change-event + :next-month-label "" + :type "date" + :field [:end] + :subscription value}]]]]]) diff --git a/src/cljs/auto_ap/views/utils.cljs b/src/cljs/auto_ap/views/utils.cljs index b546d960..7758cf30 100644 --- a/src/cljs/auto_ap/views/utils.cljs +++ b/src/cljs/auto_ap/views/utils.cljs @@ -10,7 +10,8 @@ [auto-ap.subs :as subs] [cljs-time.format :as format] [goog.i18n.NumberFormat.Format] - [cljs-time.core :as t]) + [cljs-time.core :as t] + [clojure.string :as str]) (:import (goog.i18n NumberFormat) (goog.i18n.NumberFormat Format))) @@ -76,7 +77,10 @@ (defn dispatch-date-change [event] (fn [e g] - (re-frame/dispatch (conj event (date->str (time/from-default-time-zone (c/from-date e)) standard))))) + (re-frame/dispatch (conj event + (if (str/blank? e) + e + (date->str (time/from-default-time-zone (c/from-date e)) standard)))))) (defmulti do-bind (fn [a {:keys [type] :as x}] type)) @@ -163,7 +167,9 @@ event (if (keyword? event) [event] event) selected (get-in subscription field) x (str->date selected standard) - selected (if (string? selected) (c/to-date (time/to-default-time-zone (time/from-default-time-zone x))) selected ) + selected (if (string? selected) + (c/to-date (time/to-default-time-zone (time/from-default-time-zone x))) + selected ) keys (assoc keys :on-change (dispatch-date-change (conj event field)) :selected selected