Skip to content

Commit 2d4dae8

Browse files
committed
1.3.12 fixed input, render trace is back in remote
1 parent f78e216 commit 2d4dae8

File tree

11 files changed

+283
-147
lines changed

11 files changed

+283
-147
lines changed

README.md

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ https://flexsurfer.github.io/conduit-re-frisk-demo/
2424

2525
#### Subscriptions
2626

27+
Render trace is supported only in the re-frisk-remote
28+
2729
<img src="/img/feature-subs.png" height="300">
2830

2931
#### Graph for an epoch
@@ -38,8 +40,8 @@ https://flexsurfer.github.io/conduit-re-frisk-demo/
3840

3941
Latest stable version: [![Clojars](https://img.shields.io/clojars/v/re-frisk.svg)](https://clojars.org/re-frisk) [![Clojars](https://img.shields.io/clojars/v/re-frisk-remote.svg)](https://clojars.org/re-frisk-remote)
4042

41-
`[re-frisk "1.3.10"]`
42-
`[re-frisk-remote "1.3.11"]`
43+
`[re-frisk "1.3.12"]`
44+
`[re-frisk-remote "1.3.12"]`
4345

4446
**Important**: Please note the following compatibility table:
4547

@@ -56,7 +58,7 @@ re-frisk Version | React Version | Reagent Versions
5658

5759
re-frisk will be embedded in the DOM of your application. So my suggestion is to use re-frisk-remote, it doesn't affect your application and has more features
5860

59-
1. Add re-frisk as a dev dependency `[re-frisk "1.3.10"]`
61+
1. Add re-frisk as a dev dependency `[re-frisk "1.3.12"]`
6062

6163
2. Enable re-frisk
6264

@@ -73,7 +75,7 @@ re-frisk will be embedded in the DOM of your application. So my suggestion is to
7375

7476
[![Clojars](https://img.shields.io/clojars/v/re-frisk-remote.svg)](https://clojars.org/re-frisk-remote)
7577

76-
1. Add re-frisk as a dev dependency `[re-frisk-remote "1.3.11"]`
78+
1. Add re-frisk as a dev dependency `[re-frisk-remote "1.3.12"]`
7779

7880
2. Enable re-frisk on default port (4567):
7981

@@ -93,7 +95,7 @@ re-frisk will be embedded in the DOM of your application. So my suggestion is to
9395

9496
add in `deps.edn`
9597

96-
`:aliases {:dev {:extra-deps {re-frisk-remote {:mvn/version "1.3.5"}}}}}`
98+
`:aliases {:dev {:extra-deps {re-frisk-remote {:mvn/version "1.3.12"}}}}}`
9799

98100
create `re_frisk.clj`
99101

project.clj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
(defproject re-frisk-remote "1.3.11"
1+
(defproject re-frisk-remote "1.3.12"
22
:description "Take full control of re-frame app"
33
:url "https://github.com/flexsurfer/re-frisk"
44
:license {:name "MIT"
55
:url "https://opensource.org/licenses/MIT"}
66
:source-paths ["src" "dev" "re-frisk/src"]
77
:dependencies [[org.clojure/clojure "1.10.1"]
88
[org.clojure/clojurescript "1.10.597"]
9-
[reagent "0.10.0"]
10-
[re-frame "0.12.0"]
9+
[reagent "1.0.0"]
10+
[re-frame "1.2.0"]
1111
;; handlerForForeign
1212
[com.cognitect/transit-cljs "0.8.256"]
1313
;; web communications (fork is used because of https://github.com/ptaoussanis/sente/pull/357)

re-frisk/project.clj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
(defproject re-frisk "1.3.10"
1+
(defproject re-frisk "1.3.12"
22
:description "Take full control of re-frame app"
33
:url "https://github.com/flexsurfer/re-frisk"
44
:license {:name "MIT"
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
(ns day8.reagent.impl.batching
2+
(:require
3+
[reagent.impl.batching :as batching]
4+
[re-frame.trace :as trace :include-macros true]))
5+
6+
(defonce original-next-tick reagent.impl.batching/next-tick)
7+
8+
(defn next-tick
9+
[f]
10+
;; Schedule a trace to be emitted after a render if there is nothing else scheduled after that render.
11+
;; This signals the end of the epoch.
12+
13+
(original-next-tick
14+
(fn []
15+
(trace/with-trace
16+
{:op-type :raf}
17+
(f)
18+
(trace/with-trace {:op-type :raf-end})
19+
(when (false? (.-scheduled? reagent.impl.batching/render-queue))
20+
(trace/with-trace {:op-type :reagent/quiescent}))))))
21+
22+
(defn patch-next-tick
23+
[]
24+
(set! reagent.impl.batching/next-tick next-tick))
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
(ns day8.reagent.impl.component
2+
(:require
3+
[goog.object :as gobj]
4+
[clojure.string :as string]
5+
[re-frame.trace :as trace :include-macros true]
6+
[re-frame.interop :as interop]
7+
[reagent.impl.component :as component]
8+
[reagent.impl.batching :as batch]
9+
[reagent.impl.util :as util]
10+
[reagent.ratom :as ratom]
11+
[reagent.debug :refer-macros [dev? warn error warn-unless assert-callable]]))
12+
13+
(def operation-name (memoize (fn [c] (last (string/split (component/component-name c) #" > ")))))
14+
15+
;; Monkey patched reagent.impl.component/wrap-funs to hook into render
16+
(defn wrap-funs [fmap compiler]
17+
(when (dev?)
18+
(let [renders (select-keys fmap [:render :reagentRender])
19+
render-fun (-> renders vals first)]
20+
(assert (not (:componentFunction fmap)) ":component-function is no longer supported, use :reagent-render instead.")
21+
(assert (pos? (count renders)) "Missing reagent-render")
22+
(assert (== 1 (count renders)) "Too many render functions supplied")
23+
(assert-callable render-fun)))
24+
(let [render-fun (or (:reagentRender fmap)
25+
(:render fmap))
26+
legacy-render (nil? (:reagentRender fmap))
27+
name (or (:displayName fmap)
28+
(util/fun-name render-fun)
29+
(str (gensym "reagent")))
30+
fmap (reduce-kv (fn [m k v]
31+
(assoc m k (component/get-wrapper k v)))
32+
{} fmap)]
33+
(assoc fmap
34+
:displayName name
35+
:cljsLegacyRender legacy-render
36+
:reagentRender render-fun
37+
:render (fn render []
38+
(this-as c
39+
(trace/with-trace
40+
{:op-type :render
41+
:tags (if-let [component-name (component/component-name c)]
42+
{:component-name component-name}
43+
{})
44+
:operation (operation-name c)})
45+
(if util/*non-reactive*
46+
(component/do-render c compiler)
47+
(let [^clj rat (gobj/get c "cljsRatom")
48+
_ (batch/mark-rendered c)
49+
res (if (nil? rat)
50+
(ratom/run-in-reaction #(component/do-render c compiler) c "cljsRatom"
51+
batch/queue-render component/rat-opts)
52+
(._run rat false))
53+
cljs-ratom (gobj/get c "cljsRatom")]
54+
(trace/merge-trace!
55+
{:tags {:reaction (interop/reagent-id cljs-ratom)
56+
:input-signals (when cljs-ratom
57+
(map interop/reagent-id (gobj/get cljs-ratom "watching" :none)))}})
58+
res)))))))
59+
60+
(defn patch-wrap-funs
61+
[]
62+
(set! reagent.impl.component/wrap-funs wrap-funs))
63+
64+
(defonce original-custom-wrapper reagent.impl.component/custom-wrapper)
65+
66+
(defn custom-wrapper
67+
[key f]
68+
(case key
69+
:componentWillUnmount
70+
(fn componentWillUnmount []
71+
(this-as c
72+
(trace/with-trace
73+
{:op-type key
74+
:operation (last (string/split (component/component-name c) #" > "))
75+
:tags {:component-name (component/component-name c)
76+
:reaction (interop/reagent-id (gobj/get c "cljsRatom"))}})
77+
(.call (original-custom-wrapper key f) c c)))
78+
(original-custom-wrapper key f)))
79+
80+
(defn patch-custom-wrapper
81+
[]
82+
(set! reagent.impl.component/custom-wrapper custom-wrapper))

re-frisk/src/re_frisk/core.cljs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,9 @@
8888
(swap! data/tool-state assoc :opts opts)
8989
#_(register-exception-handler)
9090
(if (re-frame.trace/is-trace-enabled?)
91-
(re-frame.trace/register-trace-cb :re-frisk-trace trace-cb)
91+
(do
92+
#_(patch-reagent!)
93+
(re-frame.trace/register-trace-cb :re-frisk-trace trace-cb))
9294
(when-not (= (:events? opts) false)
9395
(reset! prev-event {:app-db @db/app-db})
9496
(re-frame/add-post-event-callback post-event-callback)))

re-frisk/src/re_frisk/ui/components/frisk.cljs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@
262262
(let [filter (filter-parser/parse value)]
263263
(assoc-in state [:data-frisk id :filter] filter)))
264264

265-
(defn emit-fn-factory [state-atom id swappable filter-refs]
265+
(defn emit-fn-factory [state-atom id swappable filter-refs inp-val]
266266
(fn [event & args]
267267
(case event
268268
:expand (swap! state-atom update-in [:data-frisk id :expanded-paths] conj-to-set (first args))
@@ -273,7 +273,9 @@
273273
(assoc % (first args) (second args))
274274
(dissoc % (first args))))
275275
:filter-change
276-
(debounce :filter-change 400 #(swap! state-atom apply-filter id (first args)))
276+
(do
277+
(reset! inp-val (first args))
278+
(debounce :filter-change 400 #(swap! state-atom apply-filter id (first args))))
277279
:changed (let [[path value] args]
278280
(if (seq path)
279281
(swap! swappable assoc-in path value)
@@ -341,7 +343,7 @@
341343
filter (or (get-in data-frisk [id :filter]) [])
342344
matching (matching-paths data filter)
343345
expanded-matching (expanded-matching-paths matching)
344-
emit-fn (emit-fn-factory state-atom id swappable filter-refs)]
346+
emit-fn (emit-fn-factory state-atom id swappable filter-refs inp-val)]
345347
[re-com/v-box :style {:background-color "#f3f3f3" :color "#444444"}
346348
:size "1"
347349
:children

re-frisk/src/re_frisk/ui/events.cljs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939

4040
(defn events-scroller [filtered-events tool-state]
4141
(reagent/create-class
42-
{:display-name "debugger-messages"
42+
{:display-name "re_frisk.debugger-messages"
4343
:component-did-update
4444
(fn [this]
4545
(let [n (rdom/dom-node this)]

0 commit comments

Comments
 (0)