GithubHelp home page GithubHelp logo

flexsurfer / re-frisk Goto Github PK

View Code? Open in Web Editor NEW
456.0 15.0 29.0 10.12 MB

Take full control of re-frame app

Home Page: https://flexsurfer.github.io/conduit-re-frisk-demo/

Clojure 100.00%
re-frisk re-frame frisk debugger reagent tools clj frisk-debugger watch-events electron

re-frisk's Introduction

re-frisk

Take full control of re-frame application.

Latest stable version: Clojars Clojars Clojars Clojars

DEMO

https://flexsurfer.github.io/conduit-re-frisk-demo/

Features

Current state for app-db and subscriptions sorted by keys
Watching keys from app-db
History for key in app-db
Events with app-db difference for each event

re-frame tracing (Important: trace should be enabled)

(Note: With lots of events and high zoom might be slow, pause or clear events when working with timeline)

Events and timeline
Subscriptions
Views sorted by mount order with subscripions
re-frame handlres statistics
Graph for an epoch

(Note: with lots of subscriptions rendering might be slow!)

Graph accumulated for an app life with weights

Usage

[re-frisk "1.6.0"] [re-frisk-remote "1.6.0"]

Important: Please note the following compatibility table:

re-frisk Version React Version Reagent Versions
^1.3.4 React 16.13.0 1.x.x
1.1.0-1.3.3 React 16.13.0 0.10.x
1.0.0 React 16.9.0 0.9.x
0.5.3 React 16 - 16.8.6 0.8.x

Web application

Clojars

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

  1. Add re-frisk as a dev dependency [re-frisk "1.6.0"]

  2. Enable re-frisk

    :preloads [re-frisk.preload]

    OR if you want a hidden UI and open tool with Ctrl+H

    :preloads [re-frisk.preload-hidden]

    OR

    (:require [re-frisk.core :as re-frisk])

    (re-frisk/enable)

React Native, Electron or Web applications

Clojars

  1. Add re-frisk as a dev dependency [re-frisk-remote "1.6.0"]

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

    :preloads [re-frisk-remote.preload]

    OR

    (:require [re-frisk-remote.core :as re-frisk-remote])

    (re-frisk-remote/enable)

  3. Start re-frisk on default port (4567):

    shadow-cljs run re-frisk-remote.core/start

    OR

    add in deps.edn

    :aliases {:dev {:extra-deps {re-frisk-remote {:mvn/version "1.6.0"}}}}}

    create re_frisk.clj

    (ns re-frisk
     (:require [re-frisk-remote.core :as re-frisk-remote]))
    
    (re-frisk-remote/start)

    clj -R:dev re_frisk.clj

Open re-frisk in a browser at http://localhost:4567

When remote debugging on an Android device you might need to enable reverse socket connections on port 4567:

adb reverse tcp:4567 tcp:4567

Enable traces

shadow-cljs

:compiler-options {:closure-defines {"re_frame.trace.trace_enabled_QMARK_" true}}

OR

:compiler         {:closure-defines {"re_frame.trace.trace_enabled_QMARK_" true}}

Settings

External window dimensions

(re-frisk/enable {:ext_height 1000 :ext_width 1200})

Hidden UI, you can open and close tool by Ctrl+H

(re-frisk/enable {:hidden true})

If you don't need to watch events you can disable them

(re-frisk/enable {:events? false})

or exclude specific events

(re-frisk/enable {:ignore-events #{::timer-db}})

Using custom IP or port

(re-frisk-remote/enable {:host "192.168.0.2:7890"})

(re-frisk-remote/start {"7890"})

Normalize app-db before send to re-frisk

(re-frisk-remote/enable {:normalize-db-fn (fn [app-db] (reduce ...))})

bonus re-frame 6-domino cascade

re-frisk's People

Contributors

codeasone avatar cristibalan avatar dottedmag avatar flexsurfer avatar jkorpelin avatar liquidz avatar lsenjov avatar maacl avatar samstiles avatar stigi avatar stumitchell avatar yogthos avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

re-frisk's Issues

Display not updating when adding new data in separate browser window using `add-in-data`

I think there's an issue when adding new data with add-in-data after expanding the re-frisk content to a separate browser window.

If I expand re-frisk to the separate window, then add more data to a new key using add-in-data it doesn't update the re-frisk display with the new data. If I perform the same action without expanding to the separate window it updates properly, including if I have expanded the data the same way but kept it in the original window.

Update to app-db are working fine for me in both situations. It also refreshes the data if I close the separate window and re-open it.

Sort active subscriptions

The app-db is sorted, making it very easy to find keys.
However the active subscriptions are unsorted.

It would make finding subscriptions super easy if the active subscriptions were sorted too -
especially when there are lots of subscriptions.

Failed to compile `re-frisk-remote` with Figwheel

I try to add re-frisk-remote to my re-frame project following re-frisk guide but for any reason isn't working, can someone help me to resolve that or re-frisk works just with shadow clsj?

#dev.cljs.edn
...
:preloads        [devtools.preload
                        re-frisk-remote.preload]
...
#project.clj
...
  :profiles {:dev    {:dependencies [[com.bhauman/figwheel-main "0.2.3"]
                                     [re-frisk-remote "1.2.0"]]
...

When starting the application we got this error
Screen Shot 2020-04-28 at 12 46 33

We try to run re-frisk but isn't work as well

Better support for apps with lots of events

I'm working on a app where we receive WS event every 200 ms and these are handled in a re-frame event handler.

This pretty much breaks the Re-frisk event list, as it will have some many events it is impossible to navigate.

Re-frisk will also get quite slow when the event list grows.

In this case, I'd be happy to set up filter to skip these events. Not sure if this is possible to implement in Re-frisk or would this need support in Re-frame tracing?

Not sure if re-frisk keeps track of the app-db history, but if so, that will also probably grow quite big if old versions aren't dropped at some point.

React warning: re_frisk.ui.re_frisk_shell was passed a numeric string value

I get this warning enabling re-frisk

Warning: a `div` tag (owner: `re_frisk.ui.re_frisk_shell`) was passed a numeric string value for CSS property `borderBottomLeftRadius` (value: `0`) which will be treated as a unitless number in a future version of React.

Using:

[reagent "0.6.0-rc"]
[re-frame "0.8.0"]

Kind of “watch" sub-tree of `db`

sandbags [11:14 AM]
@motor4ik i can think of one instance in which the panel approach could be very useful: if you could “focus” the panel on a specific sub-tree of db and turn it into a kind of “watch"

[11:15]
then you just have the value you are interested in, right in your visual focus where you want it

motor4ik [11:19 AM]
@sandbags so , there are alot of data that changing, but you want only watch some current value?

sandbags [11:19 AM]
yes

motor4ik [11:19 AM]
ok, understand

new messages
sandbags [11:20 AM]
for example i track both date and a day delta. When I was testing the code that updated them together i would have loved to be able to focus on the matching part(s) of the data structure

Make it possible to use re-frame-10x (re-frame-trace) in react native project

re-frame-10x lib should be incorporated into re-frisk-remote it should be possible to switch in re-frisk-shell between re-frisk and re-frame-trace

So the idea is to initialize re-frame-trace and patch reagent in re-frisk-remote, listen traces and send it via sockets to re-frisk-sidecar and render re-frame-trace form in re-frisk-shell

Changes should be done in next repos
https://github.com/flexsurfer/re-frisk-remote
https://github.com/flexsurfer/re-frisk-shell
https://github.com/flexsurfer/lein-re-frisk/tree/master/re-frisk-sidecar
https://github.com/status-im/re-frame

Bounty issue:
flexsurfer/re-frisk-remote#7

Enhancement: Scrolling

Is it possible to make the widget "scrollable"? I find that with larger app-dbs large parts of the tree is outside the visible area.

kind->id->handler

(defn get-registry []
(let [registry @re-frame.registrar/kind->id->handler
registry-keys (keys registry)
fx (:fx registry)
cofx (:cofx registry)
subs (:subs registry)]

{:fx fx
:cofx cofx
:subs subs}))`

show the registered fx and cofx (doubt need the subs, unless it helps get rid of the macro)
it would be nice to see all the registered :fx and :cofx and possibly the chains of :before and :after.

document `enable-re-frisk!`

put this fn in your documentation as it seems a better way to get the app-db view, without changing your code

re-frame changes incoming

This is advanced warning that we are planning to make two changes in re-frame, probably to be released in the next week to 10 days:

  • dispatch can be given a map, not just a vector
  • subscribe can be given a map, not just a vector

For further details, please see day8/re-frame#644

Replace `[Object Object]` with something shorter it would help

sandbags [11:01 AM]
one suggestion though, if you’ve a moment, if you can replace [Object Object] (I’m going from memory here) with something shorter it would help (edited)

[11:02]
I have some cases where i have maps with a lot of keys that are Clojure records that end up being represented [Object Object] and it takes up a lot of space visually when some short-hand would be better

console error "Cannot add item: item with id XXX already exists" with subs graph view

when subs graph is shown only

[Error] Error thrown from trace cb (4) {ns: null, name: "re-frisk-trace", fqn: "re-frisk-trace", _hash: 912949928, cljs$lang$protocol_mask$partition0$: 2153775105, …} "while storing" {meta: null, cnt: 54, shift: 5, root: Object, tail: Array, …} Error: Cannot add item: item with id rx201 already exists — 127.0.0.1:61:141619 error (anonymous function) (cljs.core.js:13306) (anonymous function) (cljs.core.js:13288) (anonymous function) (cljs.core.js:13276) (anonymous function) (cljs.core.js:13264) (anonymous function) (cljs.core.js:13252) (anonymous function) (cljs.core.js:13534) (anonymous function) (re_frame.loggers.js:37) re_frame$trace$tracing_cb_debounced (re_frame.trace.js:111) (anonymous function) (goog.functions.functions.js:156)

unfortunately, I didn't find which special type of sub causes this

Error: Cannot write (on export)

Sorry for this rather scarce error report, I don't know where to gather further data.

When I click on "export" button I get this error
screen shot 2017-02-21 at 00 42 54

I've tried on Firefox 53.0a2 (2017-02-02) (64-bit) and Chrome Version 58.0.3011.0 (Official Build) canary (64-bit). I use [re-frisk "0.3.2"], [re-frame "0.9.1"], [org.clojure/clojurescript "1.9.293"] and (ifneedsbe) [org.clojure/clojure "1.8.0"].

My platform is:

$ uname -a # (macOS)
Darwin … 16.3.0 Darwin Kernel Version 16.3.0

The pop-out window doesn't work if app-db contains composite keys

I just tried to use https://github.com/vimsical/subgraph and it appears to be working, but it creates keys like [:score/id 17]. The in-app re-frisk window works fine:

image
But trying to invoke the pop-out window leads to

Error rendering component (in re_frisk_shell.re_com.views.main > re_com.box.v_box > re_frisk_shell.re_com.splits.h_split > re_frisk_shell.re_com.views.main_view > re_com.box.v_box > re_frisk_shell.re_com.splits.v_split > re_com.box.v_box > re_frisk_shell.re_com.splits.v_split > re_com.box.v_box > re_frisk_shell.re_com.ui.scroller > re_frisk_shell.frisk.main_frisk)

in the JS console.

Monorepo for re-frisk-*

re-frisk would be easier to develop if it weren't scattered through 4 (5 if one counts a test application) repositories.

Maybe a monorepo would be more convenient? lein-re-frisk already contains two projects.

Console error expanding app-db when it contains a datascript connection

Hi. I'm storing a datascript connection object in my app-db in a re-frame project, and when I try to expand the app-db key in re-frisk, I get the following console errors (see below).

A datascript connection is arguably not the sort of thing one should properly store in the app-db, since it's more of a stateful component than pure data. Nonetheless, it would be nice if re-frisk didn't throw an error when trying to display it. I could imagine two potential workarounds. The best behavior might be for the re-frisk bits that render a string for each key in the app-db to catch exceptions, log them to the browser, and emit like "##ERROR##" as the value in the shell.

The quicker workaround would maybe be for the library user to pass in a list of keys to skip over in the app-db via the :re-frisk config key or the config map passed to (enable-re-frisk!).

My project is in a bit of a messy state right now, but let me know if providing sample code to reproduce would be helpful. Thanks!

component.cljs?rel=1480015918251:123 Error rendering component (in re_frisk.ui.re_frisk_shell 
> re_frisk.core.frisk_inline > datafrisk.core.FriskInline > datafrisk.core.Root 
> datafrisk.core.DataFrisk > datafrisk.core.MapNode > datafrisk.core.KeyValNode 
> datafrisk.core.DataFrisk > datafrisk.core.DataFrisk > datafrisk.core.MapNode 
> datafrisk.core.KeyValNode > datafrisk.core.DataFrisk > datafrisk.core.DataFrisk 
> datafrisk.core.MapNode > datafrisk.core.KeySet)
core.cljs:8199
 Uncaught TypeError: me.cljs$core$IMapEntry$_key$arity$1 is not a function(…)cljs.core.KeySeq.cljs$core$ISeq$_first$arity$1 @ core.cljs:8199
cljs$core$first @ core.cljs:1133
(anonymous function) @ core.cljs:4190
cljs.core.map_indexed.cljs$core$IFn$_invoke$arity$2.mapi @ core.cljs:4190
cljs.core.LazySeq.sval @ core.cljs:3256
cljs.core.LazySeq.cljs$core$ISeqable$_seq$arity$1 @ core.cljs:3310
cljs$core$seq @ core.cljs:1112
cljs.core.interleave.cljs$core$IFn$_invoke$arity$2 @ core.cljs:4648
cljs.core.LazySeq.sval @ core.cljs:3256
cljs.core.LazySeq.cljs$core$ISeqable$_seq$arity$1 @ core.cljs:3310
cljs$core$seq @ core.cljs:1112
step @ core.cljs:4566
cljs.core.drop.cljs$core$IFn$_invoke$arity$2 @ core.cljs:4570
cljs.core.LazySeq.sval @ core.cljs:3256
cljs.core.LazySeq.cljs$core$ISeqable$_seq$arity$1 @ core.cljs:3310
cljs$core$seq @ core.cljs:1112
cljs.core.seq_reduce.cljs$core$IFn$_invoke$arity$3 @ core.cljs:2336
cljs.core.LazySeq.cljs$core$IReduce$_reduce$arity$3 @ core.cljs:3320
cljs.core.reduce.cljs$core$IFn$_invoke$arity$3 @ core.cljs:2382
cljs.core.into_array.cljs$core$IFn$_invoke$arity$2 @ core.cljs:430
cljs.core.into_array.cljs$core$IFn$_invoke$arity$1 @ core.cljs:428
cljs$core$into_array @ core.cljs:424
reagent$impl$template$expand_seq_dev @ template.cljs?rel=1480015918423:336
(anonymous function) @ template.cljs?rel=1480015918423:347
reagent$ratom$in_context @ ratom.cljs?rel=1480015918083:37
reagent$ratom$check_derefs @ ratom.cljs?rel=1480015918083:512
reagent$impl$template$expand_seq_check @ template.cljs?rel=1480015918423:347
reagent$impl$template$as_element @ template.cljs?rel=1480015918423:321
reagent$impl$template$make_element @ template.cljs?rel=1480015918423:388
reagent$impl$template$native_element @ template.cljs?rel=1480015918423:275
reagent$impl$template$vec_to_elem @ template.cljs?rel=1480015918423:298
reagent$impl$template$as_element @ template.cljs?rel=1480015918423:319
reagent$impl$component$wrap_render @ component.cljs?rel=1480015918251:101
reagent$impl$component$do_render @ component.cljs?rel=1480015918251:118
(anonymous function) @ component.cljs?rel=1480015918251:140
reagent$ratom$in_context @ ratom.cljs?rel=1480015918083:37
reagent$ratom$deref_capture @ ratom.cljs?rel=1480015918083:43
reagent$ratom$run_in_reaction @ ratom.cljs?rel=1480015918083:501
datafrisk.core.KeySet_render @ component.cljs?rel=1480015918251:140
_renderValidatedComponentWithoutOwnerOrContext @ react.inc.js:6466
_renderValidatedComponent @ react.inc.js:6492
performInitialMount @ react.inc.js:6034
mountComponent @ react.inc.js:5922
mountComponent @ react.inc.js:13488
mountChildren @ react.inc.js:12333
_createInitialChildren @ react.inc.js:7438
mountComponent @ react.inc.js:7263
mountComponent @ react.inc.js:13488
mountChildren @ react.inc.js:12333
_createInitialChildren @ react.inc.js:7438
mountComponent @ react.inc.js:7263
mountComponent @ react.inc.js:13488
performInitialMount @ react.inc.js:6048
mountComponent @ react.inc.js:5922
mountComponent @ react.inc.js:13488
performInitialMount @ react.inc.js:6048
mountComponent @ react.inc.js:5922
mountComponent @ react.inc.js:13488
performInitialMount @ react.inc.js:6048
mountComponent @ react.inc.js:5922
mountComponent @ react.inc.js:13488
mountChildren @ react.inc.js:12333
_createInitialChildren @ react.inc.js:7438
mountComponent @ react.inc.js:7263
mountComponent @ react.inc.js:13488
mountChildren @ react.inc.js:12333
_createInitialChildren @ react.inc.js:7438
mountComponent @ react.inc.js:7263
mountComponent @ react.inc.js:13488
performInitialMount @ react.inc.js:6048
mountComponent @ react.inc.js:5922
mountComponent @ react.inc.js:13488
_mountChildAtIndex @ react.inc.js:12518
_updateChildren @ react.inc.js:12434
updateChildren @ react.inc.js:12394
_updateDOMChildren @ react.inc.js:7672
updateComponent @ react.inc.js:7501
receiveComponent @ react.inc.js:7457
receiveComponent @ react.inc.js:13570
updateChildren @ react.inc.js:4290
_reconcilerUpdateChildren @ react.inc.js:12304
_updateChildren @ react.inc.js:12406
updateChildren @ react.inc.js:12394
_updateDOMChildren @ react.inc.js:7672
updateComponent @ react.inc.js:7501
receiveComponent @ react.inc.js:7457
receiveComponent @ react.inc.js:13570
_updateRenderedComponent @ react.inc.js:6418
_performComponentUpdate @ react.inc.js:6396
updateComponent @ react.inc.js:6315
receiveComponent @ react.inc.js:6215
receiveComponent @ react.inc.js:13570
_updateRenderedComponent @ react.inc.js:6418
_performComponentUpdate @ react.inc.js:6396
updateComponent @ react.inc.js:6315
receiveComponent @ react.inc.js:6215
receiveComponent @ react.inc.js:13570
_updateRenderedComponent @ react.inc.js:6418
_performComponentUpdate @ react.inc.js:6396
updateComponent @ react.inc.js:6315
receiveComponent @ react.inc.js:6215
receiveComponent @ react.inc.js:13570
updateChildren @ react.inc.js:4290
_reconcilerUpdateChildren @ react.inc.js:12304
_updateChildren @ react.inc.js:12406
updateChildren @ react.inc.js:12394
_updateDOMChildren @ react.inc.js:7672
updateComponent @ react.inc.js:7501
receiveComponent @ react.inc.js:7457
receiveComponent @ react.inc.js:13570
updateChildren @ react.inc.js:4290
_reconcilerUpdateChildren @ react.inc.js:12304
_updateChildren @ react.inc.js:12406
updateChildren @ react.inc.js:12394
_updateDOMChildren @ react.inc.js:7672
updateComponent @ react.inc.js:7501
receiveComponent @ react.inc.js:7457
receiveComponent @ react.inc.js:13570
_updateRenderedComponent @ react.inc.js:6418
_performComponentUpdate @ react.inc.js:6396
updateComponent @ react.inc.js:6315
receiveComponent @ react.inc.js:6215
receiveComponent @ react.inc.js:13570
updateChildren @ react.inc.js:4290
_reconcilerUpdateChildren @ react.inc.js:12304
_updateChildren @ react.inc.js:12406
updateChildren @ react.inc.js:12394
_updateDOMChildren @ react.inc.js:7672
updateComponent @ react.inc.js:7501
receiveComponent @ react.inc.js:7457
receiveComponent @ react.inc.js:13570
updateChildren @ react.inc.js:4290
_reconcilerUpdateChildren @ react.inc.js:12304
_updateChildren @ react.inc.js:12406
updateChildren @ react.inc.js:12394
_updateDOMChildren @ react.inc.js:7672
updateComponent @ react.inc.js:7501
receiveComponent @ react.inc.js:7457
receiveComponent @ react.inc.js:13570
_updateRenderedComponent @ react.inc.js:6418
_performComponentUpdate @ react.inc.js:6396
updateComponent @ react.inc.js:6315
receiveComponent @ react.inc.js:6215
receiveComponent @ react.inc.js:13570
_updateRenderedComponent @ react.inc.js:6418
_performComponentUpdate @ react.inc.js:6396
updateComponent @ react.inc.js:6315
receiveComponent @ react.inc.js:6215
receiveComponent @ react.inc.js:13570
updateChildren @ react.inc.js:4290
_reconcilerUpdateChildren @ react.inc.js:12304
_updateChildren @ react.inc.js:12406
updateChildren @ react.inc.js:12394
_updateDOMChildren @ react.inc.js:7672
updateComponent @ react.inc.js:7501
receiveComponent @ react.inc.js:7457
receiveComponent @ react.inc.js:13570
_updateRenderedComponent @ react.inc.js:6418
_performComponentUpdate @ react.inc.js:6396
updateComponent @ react.inc.js:6315
performUpdateIfNecessary @ react.inc.js:6229
performUpdateIfNecessary @ react.inc.js:13604
runBatchedUpdates @ react.inc.js:14438
perform @ react.inc.js:16668
perform @ react.inc.js:16668
perform @ react.inc.js:14377
flushBatchedUpdates @ react.inc.js:14460
closeAll @ react.inc.js:16734
perform @ react.inc.js:16681
batchedUpdates @ react.inc.js:10161
enqueueUpdate @ react.inc.js:14488
enqueueUpdate @ react.inc.js:14086
enqueueForceUpdate @ react.inc.js:14218
ReactComponent.forceUpdate @ react.inc.js:5334
reagent$impl$batching$run_queue @ batching.cljs?rel=1480015917617:39
reagent.impl.batching.RenderQueue.flush_queues @ batching.cljs?rel=1480015917617:86
reagent.impl.batching.RenderQueue.run_queues @ batching.cljs?rel=1480015917617:76
(anonymous function) @ batching.cljs?rel=1480015917617:63

Errors & incompatibility with re-frame-datatable

Hi.

If I try and use re-frisk with re-frame-database then I get two errors (repeated) during enable-re-frisk!

It appears to relate to the re-frisk.help:47 somehow k is unexpectedly "" or nil.

The re-frame-datatable code is doing some tricky subscribes so it could be that. But I didn't just want to patch in a test for nil and ignore the error.

m/

core.cljs:3782 re-frame: expected a vector, but got: null
cljs.core.apply_to_simple.cljs$core$IFn$_invoke$arity$4 @ core.cljs:3782
cljs.core.apply_to_simple.cljs$core$IFn$_invoke$arity$3 @ core.cljs:3777
cljs.core.apply_to_simple.cljs$core$IFn$_invoke$arity$2 @ core.cljs:3771
cljs.core.apply.cljs$core$IFn$_invoke$arity$2 @ core.cljs:3806
cljs$core$apply @ core.cljs:3797
re_frame.loggers.console.cljs$core$IFn$_invoke$arity$variadic @ loggers.cljc?rel=1503182097748:38
re_frame$loggers$console @ loggers.cljc?rel=1503182097748:35
re_frame$utils$first_in_vector @ utils.cljc?rel=1503182097936:24
re_frame.subs.subscribe.cljs$core$IFn$_invoke$arity$1 @ subs.cljc?rel=1503182098502:81
re_frame$subs$subscribe @ subs.cljc?rel=1503182098502:69
re_frame.core.reg_sub.call.vec__45860 @ core.cljs?rel=1503182416807:234
re_frame$subs$subs_handler_fn__2 @ subs.cljc?rel=1503182098502:207
re_frame$subs$subs_handler_fn @ subs.cljc?rel=1503182098502:217
re_frame.subs.subscribe.cljs$core$IFn$_invoke$arity$1 @ subs.cljc?rel=1503182098502:87
re_frame$subs$subscribe @ subs.cljc?rel=1503182098502:69
(anonymous) @ help.cljs?rel=1503182111802:47
(anonymous) @ core.cljs:4567
cljs.core.map.cljs$core$IFn$_invoke$arity$2 @ core.cljs:4567
cljs.core.LazySeq.sval @ core.cljs:3308
cljs.core.LazySeq.cljs$core$ISeqable$_seq$arity$1 @ core.cljs:3362
cljs$core$seq @ core.cljs:1125
cljs.core.Cons.cljs$core$INext$_next$arity$1 @ core.cljs:3141
cljs$core$next @ core.cljs:1170
cljs.core.seq_reduce.cljs$core$IFn$_invoke$arity$3 @ core.cljs:2364
cljs.core.LazySeq.cljs$core$IReduce$_reduce$arity$3 @ core.cljs:3372
cljs.core.reduce.cljs$core$IFn$_invoke$arity$3 @ core.cljs:2431
cljs.core.into.cljs$core$IFn$_invoke$arity$2 @ core.cljs:4842
cljs$core$into @ core.cljs:4834
re_frisk$help$re_frame_sub @ help.cljs?rel=1503182111802:46
(anonymous) @ help.cljs?rel=1503182111802:59
reagent.ratom.Reaction.cljs$core$IDeref$_deref$arity$1 @ ratom.cljs?rel=1503182091618:447
cljs$core$deref @ core.cljs:588
cljs$core$deref @ core.cljs:1364
re_frisk$help$re_frame_handlers @ help.cljs?rel=1503182111802:61
re_frisk.core.enable_re_frisk_BANG
.cljs$core$IFn$invoke$arity$variadic @ core.cljs?rel=1503182111856:30
re_frisk$core$enable_re_frisk_BANG
@ core.cljs?rel=1503182111856:25
dtrh$core$dev_setup @ core.cljs?rel=1503182416902:34
dtrh$core$init @ core.cljs?rel=1503182416902:43
(anonymous) @ (index):17

followed by

core.cljs:3776 re-frame: no subscription handler registered for: "". Returning a nil subscription.
cljs.core.apply_to_simple.cljs$core$IFn$_invoke$arity$3 @ core.cljs:3776
cljs.core.apply_to_simple.cljs$core$IFn$_invoke$arity$2 @ core.cljs:3771
cljs.core.apply.cljs$core$IFn$_invoke$arity$2 @ core.cljs:3806
cljs$core$apply @ core.cljs:3797
re_frame.loggers.console.cljs$core$IFn$_invoke$arity$variadic @ loggers.cljc?rel=1503182097748:38
re_frame$loggers$console @ loggers.cljc?rel=1503182097748:35
re_frame.subs.subscribe.cljs$core$IFn$_invoke$arity$1 @ subs.cljc?rel=1503182098502:86
re_frame$subs$subscribe @ subs.cljc?rel=1503182098502:69
re_frame.core.reg_sub.call.vec__45860 @ core.cljs?rel=1503182416807:234
re_frame$subs$subs_handler_fn__2 @ subs.cljc?rel=1503182098502:207
re_frame$subs$subs_handler_fn @ subs.cljc?rel=1503182098502:217
re_frame.subs.subscribe.cljs$core$IFn$_invoke$arity$1 @ subs.cljc?rel=1503182098502:87
re_frame$subs$subscribe @ subs.cljc?rel=1503182098502:69
(anonymous) @ help.cljs?rel=1503182111802:47
(anonymous) @ core.cljs:4567
cljs.core.map.cljs$core$IFn$_invoke$arity$2 @ core.cljs:4567
cljs.core.LazySeq.sval @ core.cljs:3308
cljs.core.LazySeq.cljs$core$ISeqable$_seq$arity$1 @ core.cljs:3362
cljs$core$seq @ core.cljs:1125
cljs.core.Cons.cljs$core$INext$_next$arity$1 @ core.cljs:3141
cljs$core$next @ core.cljs:1170
cljs.core.seq_reduce.cljs$core$IFn$_invoke$arity$3 @ core.cljs:2364
cljs.core.LazySeq.cljs$core$IReduce$_reduce$arity$3 @ core.cljs:3372
cljs.core.reduce.cljs$core$IFn$_invoke$arity$3 @ core.cljs:2431
cljs.core.into.cljs$core$IFn$_invoke$arity$2 @ core.cljs:4842
cljs$core$into @ core.cljs:4834
re_frisk$help$re_frame_sub @ help.cljs?rel=1503182111802:46
(anonymous) @ help.cljs?rel=1503182111802:59
reagent.ratom.Reaction.cljs$core$IDeref$_deref$arity$1 @ ratom.cljs?rel=1503182091618:447
cljs$core$deref @ core.cljs:588
cljs$core$deref @ core.cljs:1364
re_frisk$help$re_frame_handlers @ help.cljs?rel=1503182111802:61
re_frisk.core.enable_re_frisk_BANG
.cljs$core$IFn$invoke$arity$variadic @ core.cljs?rel=1503182111856:30
re_frisk$core$enable_re_frisk_BANG
@ core.cljs?rel=1503182111856:25
dtrh$core$dev_setup @ core.cljs?rel=1503182416902:34
dtrh$core$init @ core.cljs?rel=1503182416902:43
(anonymous) @ (index):17
core.cljs:3782 re-frame: expected a vector, but got: null
cljs.core.apply_to_simple.cljs$core$IFn$_invoke$arity$4 @ core.cljs:3782
cljs.core.apply_to_simple.cljs$core$IFn$_invoke$arity$3 @ core.cljs:3777
cljs.core.apply_to_simple.cljs$core$IFn$_invoke$arity$2 @ core.cljs:3771
cljs.core.apply.cljs$core$IFn$_invoke$arity$2 @ core.cljs:3806
cljs$core$apply @ core.cljs:3797
re_frame.loggers.console.cljs$core$IFn$_invoke$arity$variadic @ loggers.cljc?rel=1503182097748:38
re_frame$loggers$console @ loggers.cljc?rel=1503182097748:35
re_frame$utils$first_in_vector @ utils.cljc?rel=1503182097936:24
re_frame.subs.subscribe.cljs$core$IFn$_invoke$arity$1 @ subs.cljc?rel=1503182098502:81
re_frame$subs$subscribe @ subs.cljc?rel=1503182098502:69
re_frame.core.reg_sub.call.vec__45848 @ core.cljs?rel=1503182416807:214
re_frame$subs$subs_handler_fn__2 @ subs.cljc?rel=1503182098502:207
re_frame$subs$subs_handler_fn @ subs.cljc?rel=1503182098502:217
re_frame.subs.subscribe.cljs$core$IFn$_invoke$arity$1 @ subs.cljc?rel=1503182098502:87
re_frame$subs$subscribe @ subs.cljc?rel=1503182098502:69
(anonymous) @ help.cljs?rel=1503182111802:47
(anonymous) @ core.cljs:4567
cljs.core.map.cljs$core$IFn$_invoke$arity$2 @ core.cljs:4567
cljs.core.LazySeq.sval @ core.cljs:3308
cljs.core.LazySeq.cljs$core$ISeqable$_seq$arity$1 @ core.cljs:3362
cljs$core$seq @ core.cljs:1125
cljs.core.Cons.cljs$core$INext$_next$arity$1 @ core.cljs:3141
cljs$core$next @ core.cljs:1170
cljs.core.seq_reduce.cljs$core$IFn$_invoke$arity$3 @ core.cljs:2364
cljs.core.LazySeq.cljs$core$IReduce$_reduce$arity$3 @ core.cljs:3372
cljs.core.reduce.cljs$core$IFn$_invoke$arity$3 @ core.cljs:2431
cljs.core.into.cljs$core$IFn$_invoke$arity$2 @ core.cljs:4842
cljs$core$into @ core.cljs:4834
re_frisk$help$re_frame_sub @ help.cljs?rel=1503182111802:46
(anonymous) @ help.cljs?rel=1503182111802:59
reagent.ratom.Reaction.cljs$core$IDeref$_deref$arity$1 @ ratom.cljs?rel=1503182091618:447
cljs$core$deref @ core.cljs:588
cljs$core$deref @ core.cljs:1364
re_frisk$help$re_frame_handlers @ help.cljs?rel=1503182111802:61
re_frisk.core.enable_re_frisk_BANG
.cljs$core$IFn$invoke$arity$variadic @ core.cljs?rel=1503182111856:30
re_frisk$core$enable_re_frisk_BANG
@ core.cljs?rel=1503182111856:25
dtrh$core$dev_setup @ core.cljs?rel=1503182416902:34
dtrh$core$init @ core.cljs?rel=1503182416902:43
(anonymous) @ (index):17

error in def-view

I am getting this error with your def-view macro

(def-view app-footer
     ^--- Don't know how to create ISeq from: clojure.lang.Keyword

Don't use (.alert) when window is refreshed

It would be nice if the external-window version of re-frisk didn't fire a window.alert() when the main window is refreshed - it winds up stealing focus and making the user click a button right when the user is trying to interact with the main window. I'd suggest maybe a (.warn js/console) instead, or possibly changing the external window so that it displays a prominent message telling the user that the debugger is not connected to the main app.

I could probably slap together a PR for this in a few days if you agree. Thanks!

Free text search

Sometimes finding data buried in our ever growing app-db can be tedious. I think it would be great if we could filter the app state using free text search. We had something very similar in our app before we swapped in favour of re-frisk, and we found it very useful.

Happy to discuss further and/or submit a PR :)

Luke

Jump to state after a past event

Don't know if I'm just missing this functionality or if it's not implemented. I would like to set the state of my re-frame app back to a previous state by clicking on an event. I see the events on the left hand side but clicking on them doesn't change my current state. Is this possible or planed for future versions?

re-frisk warning with latest reagent version.

Use re-frisk with reagent 1.0.0-alpha2

Get the following error

------ WARNING #1 - :fn-arity --------------------------------------------------
 Resource: re_frisk/trace.cljs:27:11
--------------------------------------------------------------------------------
  24 |         {:op-type   :render
  25 |          :operation (operation-name c)}
  26 |         (if util/*non-reactive*
  27 |           (reagent.impl.component/do-render c)
-----------------^--------------------------------------------------------------
 Wrong number of args (1) passed to reagent.impl.component/do-render
--------------------------------------------------------------------------------
  28 |           (let [rat        (gob/get c "cljsRatom")
  29 |                 _          (batch/mark-rendered c)
  30 |                 res        (if (nil? rat)
  31 |                              (ratom/run-in-reaction #(reagent.impl.component/do-render c) c "cljsRatom"
--------------------------------------------------------------------------------

------ WARNING #2 - :fn-arity --------------------------------------------------
 Resource: re_frisk/trace.cljs:31:54
--------------------------------------------------------------------------------
  28 |           (let [rat        (gob/get c "cljsRatom")
  29 |                 _          (batch/mark-rendered c)
  30 |                 res        (if (nil? rat)
  31 |                              (ratom/run-in-reaction #(reagent.impl.component/do-render c) c "cljsRatom"
------------------------------------------------------------^-------------------
 Wrong number of args (1) passed to reagent.impl.component/do-render
--------------------------------------------------------------------------------
  32 |                                                     batch/queue-render reagent.impl.component/rat-opts)
  33 |                              (._run rat false))
  34 |                 cljs-ratom (gob/get c "cljsRatom")]         ;; actually a reaction
  35 |             (re-frame.trace/merge-trace!
--------------------------------------------------------------------------------

Use cljs preloads

Hi :-) I use re-frisk on a daily basis and find it utmost useful (many thanks for sorted-app-db btw)

I've been thinking a tiny yet useful feature may be missing:

https://github.com/clojure/clojurescript/wiki/Compiler-Options#preloads

It would be nice to have. Moreover preloads aren't included in advanced builds, which is on par with re-frisk readme advices.

It looks so very easy to do, I would volunteer to do it if you agree to.

Shorten fully qualified keywords that belong to app's namespace

I use namespace-qualified keywords everywhere in my app-db, and when re-frisk renders them completely, I have to make its window width very wide to be able to see anything. Do you think it would be possible to treat this somehow? I see one possible solution: allow to specify a prefix of your app when initializing re-frisk, like (enable-re-frisk! {:common-ns-prefix "com.example.myapp"}), so that later the keywords are rendered like :.core/foo.

Debugger doesn't work in electron

The debugger window is just completely blank when it is triggered from electron (from the renderer process). Devtools in the window show that there's nothing; it's completely blank.

lein re-frisk -> Could not find artifact org.clojure:clojure:jar:1.8.0

% lein re-frisk
Could not find artifact org.clojure:clojure:jar:1.8.0
This could be due to a typo in :dependencies or network issues.
If you are behind a proxy, try setting the 'http_proxy' environment variable.
command failed with status: 1

I confirmed it's not a network issue, I could install a number of other dependencies no problem.

Show app-db changes which was made by selected event

In current implementation if you click on event in the left panel list, you can see event vector in separate panel, it would be good also to see the app-db data which was changed by this event, for example, if we had app-db

{:a 1 :b 3}

and selected event changed :b key on 4 we should see

{:b 4}

so it should be a difference of app-db before this event and after

This task should be done for both re-frisk and re-frisk-remote (flexsurfer/re-frisk-remote#4)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.