Add green gradient background for the 8 cheapest hours

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-14 14:45:43 +01:00
co-authored by Claude Opus 4.6
parent 9844803882
commit feef551fc6
+11 -7
View File
@@ -58,11 +58,15 @@
["bg-red-50" "bg-red-100" "bg-red-200" "bg-red-300" ["bg-red-50" "bg-red-100" "bg-red-200" "bg-red-300"
"bg-red-400" "bg-red-500" "bg-red-600" "bg-red-700"]) "bg-red-400" "bg-red-500" "bg-red-600" "bg-red-700"])
(def ^:private green-gradient
["bg-green-700" "bg-green-600" "bg-green-500" "bg-green-400"
"bg-green-300" "bg-green-200" "bg-green-100" "bg-green-50"])
(defn- rank-bg [rank total] (defn- rank-bg [rank total]
(let [top-start (inc (- total 8)) (cond
pos (- rank top-start)] (<= rank 8) (get green-gradient (dec rank))
(when (>= pos 0) (> rank (- total 8)) (get red-gradient (- rank (- total 7)))
(get red-gradient pos)))) :else nil))
(defn- hour-block [hour quarters rank total-hours] (defn- hour-block [hour quarters rank total-hours]
(let [sorted (sort-by #(.getMinute (->ldt (:time_dk %))) quarters) (let [sorted (sort-by #(.getMinute (->ldt (:time_dk %))) quarters)
@@ -70,16 +74,16 @@
month (.getMonthValue (->ldt (:time_dk (first quarters)))) month (.getMonthValue (->ldt (:time_dk (first quarters))))
tariff (tariffs/tariff-for-hour month hour) tariff (tariffs/tariff-for-hour month hour)
bg (rank-bg rank total-hours) bg (rank-bg rank total-hours)
dark? (and bg (>= rank (- total-hours 3)))] dark? (and bg (or (<= rank 4) (>= rank (- total-hours 3))))]
[:details {:class (str "border-2 border-blue-400 rounded-lg mb-2 " bg)} [:details {:class (str "border-2 border-blue-400 rounded-lg mb-2 " bg)}
[:summary {:class (str "flex justify-between py-2 px-3 cursor-pointer font-medium " [:summary {:class (str "flex justify-between py-2 px-3 cursor-pointer font-medium "
(if dark? "text-white" "text-gray-900"))} (if dark? "text-white" "text-gray-900"))}
[:span (format "%02d:00" hour)] [:span (format "%02d:00" hour)]
[:span {:class (str "text-sm " (if dark? "text-red-100" "text-gray-500"))} (str "#" rank)] [:span {:class (str "text-sm " (if dark? "text-white/80" "text-gray-500"))} (str "#" rank)]
[:span {:class "font-mono"} [:span {:class "font-mono"}
(if avg (format "%.1f(%.1f)" (+ avg tariff) avg) "-")]] (if avg (format "%.1f(%.1f)" (+ avg tariff) avg) "-")]]
[:div {:class (str "border-t-2 border-blue-400 px-3 pb-2 " [:div {:class (str "border-t-2 border-blue-400 px-3 pb-2 "
(if dark? "text-red-100" "text-gray-500"))} (if dark? "text-white/80" "text-gray-500"))}
(for [q sorted] (for [q sorted]
[:div {:class "flex justify-between py-1 ml-4"} [:div {:class "flex justify-between py-1 ml-4"}
[:span (format "%02d:%02d" hour (.getMinute (->ldt (:time_dk q))))] [:span (format "%02d:%02d" hour (.getMinute (->ldt (:time_dk q))))]