Summary of what you need to know
(ns starting-point-for-custom-roam
(:require
[reagent.core :as r]
[datascript.core :as d]
[roam.datascript.reactive :as dr]))
(defn *page-with-children-by-node-title [name]
(dr/pull '[{:block/children ...}
:block/string
:block/uid
:block/props
]
[:node/title name])
)
(defn block-with-children-by-uid [name]
(dr/pull '[
{:block/children ...}
{:block/path ...}
:block/string
:block/uid
:block/props
]
[:block/uid name])
)
(defn all-children [ent]
(:block/children ent)
)
(defn controlled-input [my-local-string]
[:div
"My local string is controlled by the input"
[:li @my-local-string]
[:input {:value @my-local-string
:on-change
(fn [event]
(reset! my-local-string
(.. event -target -value)))}]
]
)
(declare color)
(defn counter [my-local-number]
[:div "I have been clicked"
[:button {:on-click
(fn [e] (swap! my-local-number inc))}
@my-local-number]
" times"]
)
(def color ["#2EE115" "rgb(0,244,255)" "#F44336"])
``` [*](((oYL_2lm6B)))
(defn all-descendents-as-cards [block-entity]
[:div
(doall (for [block (rest (tree-seq :block/uid :block/children block-entity))]
[:button.bp3-card
{:style {:background-color (rand-nth color)}
:on-click (fn [e] (js/alert (:block/uid block)))}
(:block/string block)]))
]
)
``` [*](((Fv9oJp3HV)))
(defn test [{:keys [block-uid]} & args]
(let [*my-children (dr/pull '[{:block/children ...}
:block/string
:block/uid]
[:block/uid block-uid])]
(js/console.log args)
(fn [& args]
[:div
(doall (for [block (rest (tree-seq :block/uid :block/children @*my-children))]
[:button.bp3-card
{:style {:background-color (rand-nth color)}
:on-click (fn [e] (js/alert (:block/uid block)))}
(:block/string block)]))
])))
(defn test2 [{:keys [block-uid]} & args]
(let [*my-children (dr/pull '[{:block/_refs ...}
{:block/children ...}
:block/string
:block/uid]
[:node/title "TODO"])]
(js/console.log args)
(fn [& args]
[:div
(doall (for [block (rest (tree-seq :block/uid :block/_refs @*my-children))]
[:button.bp3-card.green
{:style {:background-color (rand-nth color)}
:on-click (fn [e] (js/alert (:block/uid block)))}
(:block/string block)]))
])))
(defn page-by-node-title [name]
(dr/pull '[{:block/_refs ...}
{:block/refs ...}
{:block/children ...}
{:block/path ...}
:block/string
:block/uid
:block/props
]
[:node/title name])
)
``` [*](((N5iOmzEp3)))
(defn my-view [{:keys [:block/uid] :as this-block}]
(let [my-local-string (r/atom "hello")
my-local-number (r/atom 0)]
(fn [this-block]
[:div.bp3-card
"I am a div"
""
(pr-str color)
(for [x (range 2)]
[counter my-local-number])
[controlled-input my-local-string]
[controlled-input my-local-string]])))
(defn last-render [{:keys [:block/uid] :as this-block}]
(let [my-local-string (r/atom "hello")
my-local-number (r/atom 0)]
(fn [this-block]
[:div.bp3-card
"I am a div"
""
[all-descendents-as-cards
@(*page-with-children-by-node-title "roamhacker")]
])))
(defn random-n-refs [n ent]
(take n (set (:block/_refs ent))
))
(defn *pull-refs [block-uid]
(dr/pull '[{:block/_refs ...}
:node/title
:block/string
:block/uid]
block-uid)
)
(defn show-refs [component n x]
[:div
(doall (for [y (take @n (:block/_refs @x))]
[component y]))]
)
(defn my-item [data]
[:div.bp3-card (:block/string data)]
)
(defn my-random-generator [{:keys [:block/uid] :as this-block} n v]
(let [my-local-string (r/atom v)
my-local-number (r/atom (js/parseInt n))]
(fn [this-block n v]
[:div.bp3-card
"I am a div"
""
(pr-str v)
[counter my-local-number]
[controlled-input my-local-string]
[show-refs my-item
my-local-number
(*pull-refs [:node/title @my-local-string])]
])))
r/atom
gives you a local variableroam-render
(defn my-view [{:keys [:block/uid] :as this-block}]
(let [my-local-string (r/atom "hello")
my-local-number (r/atom 0)]
(fn [this-block]
[:div.bp3-card
"I am a div"
""
(pr-str color)
(for [x (range 2)]
[counter my-local-number])
[controlled-input my-local-string]
[controlled-input my-local-string]])))
(defn last-render [{:keys [:block/uid] :as this-block}]
(let [my-local-string (r/atom "hello")
my-local-number (r/atom 0)]
(fn [this-block]
[:div.bp3-card
"I am a div"
""
[all-descendents-as-cards
@(*page-with-children-by-node-title "roamhacker")]
])))