diff --git a/src/cljs/commiteth/bounties.cljs b/src/cljs/commiteth/bounties.cljs index cfb5f57..b4bb03c 100644 --- a/src/cljs/commiteth/bounties.cljs +++ b/src/cljs/commiteth/bounties.cljs @@ -74,13 +74,13 @@ on-change-fn (fn [min-val max-val] (rf/dispatch [::handlers/set-open-bounty-filter-type ::ui-model/bounty-filter-type|value - [(min min-val (dec default-max)) - (max max-val (inc default-min))]])) + [(min min-val default-max) + (max max-val default-min)]])) on-min-change-fn (fn [new-min] - (let [new-max (max current-max (inc new-min))] + (let [new-max (max current-max (min default-max new-min))] (on-change-fn new-min new-max))) on-max-change-fn (fn [new-max] - (let [new-min (min current-min (dec new-max))] + (let [new-min (min current-min (max default-min new-max))] (on-change-fn new-min new-max)))] [:div "$0 - $1000+" diff --git a/src/cljs/commiteth/ui_model.cljs b/src/cljs/commiteth/ui_model.cljs index 75f1c6f..75e9c3c 100644 --- a/src/cljs/commiteth/ui_model.cljs +++ b/src/cljs/commiteth/ui_model.cljs @@ -1,5 +1,8 @@ (ns commiteth.ui-model - (:require [clojure.set :as set])) + (:require [clojure.set :as set] + [cljs-time.core :as t] + [cljs-time.coerce :as t-coerce] + [cljs-time.format :as t-format])) ;;;; bounty sorting types @@ -10,11 +13,11 @@ ::bounty-sorting-type.sort-comparator-fn compare} ::bounty-sorting-type|lowest-value {::bounty-sorting-type.name "Lowest value" ::bounty-sorting-type.sort-key-fn (fn [bounty] - (:value-usd bounty)) + (js/parseFloat (:value-usd bounty))) ::bounty-sorting-type.sort-comparator-fn compare} ::bounty-sorting-type|highest-value {::bounty-sorting-type.name "Highest value" ::bounty-sorting-type.sort-key-fn (fn [bounty] - (:value-usd bounty)) + (js/parseFloat (:value-usd bounty))) ::bounty-sorting-type.sort-comparator-fn (comp - compare)} ::bounty-sorting-type|owner {::bounty-sorting-type.name "Owner" ::bounty-sorting-type.sort-key-fn (fn [bounty] @@ -38,7 +41,9 @@ (def bounty-filter-types-def {::bounty-filter-type|value {::bounty-filter-type.name "Value" ::bounty-filter-type.predicate (fn [filter-value bounty] - true)} + (let [min-val (first filter-value) + max-val (second filter-value)] + (<= min-val (:value-usd bounty) max-val)))} ::bounty-filter-type|currency {::bounty-filter-type.name "Currency" ::bounty-filter-type.predicate (fn [filter-value bounty] (and (or (not-any? #{"ETH"} filter-value) @@ -47,10 +52,19 @@ (-> bounty :tokens keys set))))} ::bounty-filter-type|date {::bounty-filter-type.name "Date" ::bounty-filter-type.predicate (fn [filter-value bounty] - true)} + (when-let [created-at-inst (:created-at bounty)] + (let [created-at-date (-> created-at-inst inst-ms t-coerce/from-long) + filter-from (condp = filter-value + ::bounty-filter-type-date-option|last-week (t/minus (t/now) (t/weeks 1)) + ::bounty-filter-type-date-option|last-month (t/minus (t/now) (t/months 1)) + ::bounty-filter-type-date-option|last-3-months (t/minus (t/now) (t/months 3))) + interval (t/interval filter-from (t/now))] + (t/within? interval created-at-date))))} ::bounty-filter-type|owner {::bounty-filter-type.name "Owner" ::bounty-filter-type.predicate (fn [filter-value bounty] - true)}}) + (->> filter-value + (some #{(:repo-owner bounty)}) + boolean))}}) (def bounty-filter-types (keys bounty-filter-types-def))