Skip to content

Commit

Permalink
viewer2 with effects
Browse files Browse the repository at this point in the history
  • Loading branch information
awb99 committed Oct 28, 2024
1 parent af66241 commit 9543f75
Showing 1 changed file with 30 additions and 32 deletions.
62 changes: 30 additions & 32 deletions src/dali/viewer.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
[taoensso.timbre :refer-macros [info warn error]]
[promesa.core :as p]
[reagent.core :as r]
["react" :as react]
[dali.util.resolve :refer [resolve-symbol]]))

(defn transform-data [transform-fn data]
Expand Down Expand Up @@ -51,36 +52,33 @@
:else
[viewer data])))))

(defn viewer-impl [dali-spec]
(let [[data set-data] (react/useState nil)
[error set-error] (react/useState false)]
(react/useEffect
(fn []
(let [ignore false]
(set-data nil)
(println "processing dali-spec..")
(-> (process dali-spec)
(p/then (fn [result]
(println "processing dali-spec success!")
(when-not ignore
(set-data result))))
(p/catch (fn [err]
(println "processing dali-spec error!")
(set-error err)))
(= ignore true))))
[dali-spec])
(cond
data
[viewer data]
error
[:p "error!"]
:else
[:p "loading.."])))


(defn viewer2 [dali-spec]
[:f> viewer-impl dali-spec])

(defn viewer2
[{:keys [viewer-fn transform-fn data] :as dali-spec}]
(let [a (r/atom nil)
load-spec (fn [dali-spec]
(-> (process dali-spec)
(p/then (fn [r]
(info "load and transform complete!")
(reset! a r)))
(p/catch (fn [err]
(error "load and transform error: " err)
(reset! a {:error err})))))]
; https://github.com/reagent-project/reagent/blob/master/doc/CreatingReagentComponents.md
(r/create-class
{:display-name "dali-viewer"
:reagent-render (fn [{:keys [viewer-fn transform-fn data]}]
(let [{:keys [viewer data error] :as aval} @a]
(cond
(nil? aval)
[:p "loading.."]
error
[:p "error!"]
:else
[viewer data])))
:component-did-mount (fn [this] ; oldprops oldstate snapshot
(let [new-argv (rest (r/argv this))
[dali-spec] new-argv]
(load-spec dali-spec)))
:component-did-update (fn [this old-argv]
(let [new-argv (rest (r/argv this))
[dali-spec] new-argv]
;(println "component did update: " this "argv: " new-argv)
(load-spec dali-spec)))})))

0 comments on commit 9543f75

Please sign in to comment.