Matt's Roof Garden

Powered by 🌱Roam Garden

roam/render

This is an "Orphan" page. Its core content has not been shared: what you see below is a loose collection of pages and page snippets that mention this page, as well as snippets of this page that were quoted elsewhere.

Shopping list sum price August 30th, 2021

searches all children for prices and sums everything up

\$\d+(?:\.\d+)?
.*(\$\d+)(?:\.\d+)?
.*\$(\d+)(?:\.\d+)?

could also check for DONE and skip those

v2

ui

code

(ns shopping-sum-v2
  (:require
   [reagent.core :as r]
   [datascript.core :as d]
   [roam.datascript.reactive :as dr]
   [clojure.pprint :as pp]))


(defn flatten-block 
  "Flattens a blocks children into a flat list"
  [acc block]
  (reduce flatten-block
          (conj acc (dissoc block :block/children))
          (:block/children block)))

(defn find-child-refs
  "Returns all _refs for children blocks given a parent block uid"
  [block-uid]
  (flatten-block []
             @(dr/q '[:find (pull ?e [:block/string :block/uid {:block/children ...}]) .
                      :in $ ?uid
                      :where
                      [?e :block/uid ?uid]
                      ]
                    block-uid)))

(defn filter-content [content]
  "finds blocks that contain a price eg. $40. Not acutally used just useful"
  (map 
    #(re-seq #".*\$(\d+)(?:\.\d+)?" (:block/string %))
    (filter #(re-seq #".*\$(\d+)(?:\.\d+)?" (:block/string %)) content))
    

  )


(def log (.-log js/console))

(defn sum-string [content]
  (->> content
    (re-seq #"\$\d+(?:\.\d+)?" )
    (map #(subs % 1) )
    (map int )
    (reduce +)
    )
  )

(defn main [{:keys [block-uid]} & args]
  [:div {:style{:margin-left "10px"}} "Total Spent: " 
   [:div {:style{
                 :display "inline-block"
                :border "2px solid #CD3838"
                  :padding "2px 4px"
                :color "#CD3838"
                :font-weight "bold"
                }}
    "$"(reduce + (map #(sum-string (:block/string %)) (find-child-refs block-uid)))
    ]
        
     ]
  )