Skip to content

Commit

Permalink
reflow ui working
Browse files Browse the repository at this point in the history
  • Loading branch information
awb99 committed Jul 15, 2024
1 parent 29f751f commit d87d308
Show file tree
Hide file tree
Showing 5 changed files with 100 additions and 6 deletions.
13 changes: 10 additions & 3 deletions demo/src/demo/page.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
[reagent.core :as r]
[promesa.core :as p]
[missionary.core :as m]
[re-flow.core :refer [re-flow]]))
[re-flow.core :refer [re-flow flow-ui]]))

(defn a-flow-demo []
(let [flow (re-flow 'demo.service/a-seed)
Expand All @@ -17,13 +17,20 @@
#(println "crash: " %))]
nil))



(defn show-page []
[:div
[:p.text-big.text-blue-900.text-bold "re-flow demo .."]

[:div.bg-green-500.m-5.p-5
[:button.bg-blue-500 {:on-click #(a-flow-demo)} "a-flow"]
]
[:button.bg-blue-500 {:on-click #(a-flow-demo)} "a-flow"]]

[:div.bg-blue-500 "flow-ui"
[flow-ui {:clj 'demo.service/a-seed
:args []
:render 'demo.ui/a-flow-ui}]]

])

(defn page [_route]
Expand Down
7 changes: 7 additions & 0 deletions demo/src/demo/ui.cljs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
(ns demo.ui)


(defn a-flow-ui [v]
[:div
"current a-flow value: "
(pr-str v)])
3 changes: 2 additions & 1 deletion resources/ext/re-flow.edn
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,6 @@
; build
:lazy false
:cljs-namespace [re-flow.core]
:cljs-ns-bindings {'re-flow.core {'re-flow re-flow.core/re-flow}
:cljs-ns-bindings {'re-flow.core {'re-flow re-flow.core/re-flow
'flow-ui re-flow.core/flow-ui}
}}
27 changes: 25 additions & 2 deletions src/re_flow/core.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,11 @@
[taoensso.timbre :refer [info error]]
[missionary.core :as m]
[re-frame.core :as rf]
[reagent.core :as r]
[modular.ws.core :refer [send!]]
[modular.ws.msg-handler :refer [-event-msg-handler]]))
[modular.ws.msg-handler :refer [-event-msg-handler]]
[re-flow.ui :refer [show-data]]
))

(defonce subscriptions (atom {}))

Expand Down Expand Up @@ -48,4 +51,24 @@
))))



(defn flow-ui [{:keys [clj
args
render]}]
(let [a (r/atom nil)
flow (apply re-flow clj args)
task (m/reduce (fn [_ v]
(println "processing value: " v)
(reset! a v))
nil
flow)
_ (println "a-flow-demo starting..")
dispose! (task
#(println "success: " %)
#(println "crash: " %))]
(fn [{:keys [clj
args
render]}]
[show-data render @a]
)

))
56 changes: 56 additions & 0 deletions src/re_flow/ui.cljs
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
(ns re-flow.ui
(:require
[reagent.core :as r]
[promesa.core :as p]
[webly.spa.resolve :refer [get-resolver]]))

(defn log [& args]
(.log js/console (apply str args)))

(defn loading-ui [s]
[:p "loading: " (pr-str s)])

(defn load-error-ui [s]
[:p "render load error: " (pr-str s)])

(defn create-loader-ui [load-atom s]
(fn [& args]
(fn [& args]
(let [{:keys [status fun]} @load-atom]
(case status
:loading [loading-ui s]
:error [load-error-ui s]
:loaded (into [fun] args)
[loading-ui s])))))

(defn update-atom [load-a p]
(-> p
(.then (fn [f]
(log "get-render-fn resolved fun: " f)
(if f
(swap! load-a assoc :status :loaded :fun f)
(swap! load-a assoc :status :error))))
(.catch (fn [d]
(log "get-render-fn: require result failure!")
(swap! load-a assoc :status :error)))))

(defn get-render-fn [s]
(let [load-a (r/atom {:status :loading})
resolve-fn (get-resolver)
fun (resolve-fn s)]
(if (p/promise? fun)
(update-atom load-a fun)
(swap! load-a assoc :status :loaded :fun fun))
(create-loader-ui load-a s)))


(defn show-data [s v]
(fn [s v]
(log "show-data symbol: " s " val: " v)
(let [render-fn (get-render-fn s)]
(if render-fn
[render-fn v]
[:p "unknown render-fn: " (str s)]))))



0 comments on commit d87d308

Please sign in to comment.