I'm working on a custom viewer and I'm hitting an issue.
Here's the custom viewer:
(ns data-viewer
(:require [portal.ui.api :as p]))
(defn data?
[v]
(and (map? v)
(contains? v :duration)))
(defn view-data []
(fn [data]
[:<>
[:h1 "Duration"]
[:portal.viewer/inspector
{:portal.viewer/default :portal.viewer/duration-ms}
(:duration data)]]))
(p/register-viewer!
{:name ::viewer
:predicate data?
:component view-data})
When I tap this:
(tap> (with-meta {:duration 39847} {:portal.viewer/default :data-viewer/viewer}))Ohh, yeah, when migrating hiccup to reagent, the viewers do need to be resolved manually.
ah
You can pull in [portal.ui.inspector :as ins] and wrap the value with the ins/inspector component.
heh, you beat me to the screen shot
that did it!
Ohh, wait, it's still not wrapping the value with the duration-ms viewer?
related issue, I tried to require portal.viewer in my custom viewer and it threw Could not resolve symbol: implements? when I ran (p/eval-str (slurp "data_viewer.cljs"))
Ohh, I might need to expose it in sci 👌
I'm using HEAD on master, not the released version
if that helps
oh, right
I forgot that sci was the runtime
https://github.com/djblue/portal/blob/master/src/portal/ui/sci/libs.cljs#L62 if you want to edit it locally
trying that
diff --git a/src/portal/ui/sci/libs.cljs b/src/portal/ui/sci/libs.cljs
index a4c7e77..12d2bf3 100644
--- a/src/portal/ui/sci/libs.cljs
+++ b/src/portal/ui/sci/libs.cljs
@@ -96,6 +96,7 @@ (def namespaces
portal.ui.viewer.vega-lite)
(sci-import/import
cljs.core/random-uuid
+ cljs.core/implements?
cljs.core/tap>
cljs.reader/read-string)
{'reagent.core
hm, didn't seem to like that:
❯ clojure -X:build prep
=> Generating docs
=> clojure -M:cljs:shadow -m shadow.cljs.devtools.cli release client
[:client] Compiling ...
------ ERROR ------------------------------------------------------------------- File: /home/nate/projects/portal/src/portal/ui/sci/libs.cljs:98:4
--------------------------------------------------------------------------------
95 | portal.ui.viewer.tree
96 | portal.ui.viewer.vega
97 | portal.ui.viewer.vega-lite)
98 | (sci-import/import
----------^---------------------------------------------------------------------
null
Unable to resolve var: implements? in this context at line 98 portal/ui/sci/libs.cljs
--------------------------------------------------------------------------------
99 | cljs.core/random-uuid
100 | cljs.core/implements?
101 | cljs.core/tap>
102 | cljs.reader/read-string)
--------------------------------------------------------------------------------
-> 17.783 seconds (exit: 1)
Execution error (ExceptionInfo) at tasks.tools/sh* (tools.clj:58).
Non-zero exit code: clojure -M:cljs:shadow -m shadow.cljs.devtools.cli release client
Full report at:
/tmp/clojure-17926749571961529956.edn
perhaps because it's a macro?Maybe https://cljs.github.io/api/cljs.core/satisfiesQMARK instead?
if I add another function (like update-keys), the prep works
something about it being a macro
tried a (:require-macros cljs.core) at the top too, no work
When working with portal and devcontainers, I keep running into issues with the config file missing. (vs-code.edn file). But it seems to be complicated by the difference between normal operation and working in a devcontainer, and it seems to be intermittent. Has anyone else run into this?
Thank you. I'll take another look. This seems to be a slightly different issue, I want to say the container creation process is copying the directory, but not the contents. It is certainly related, though. I think I'll have to set up a controlled experiment to narrow down what's going wrong.
Oh, in my repo, someone accidentally merged a change that set portal to an old version. That'll probably be it. Sorry for the confusion.
Yes, and Chris showed me how to solve it... just a sec...
https://github.com/seancorfield/vscode-calva-setup/blob/develop/joyride/src/remote_repl.cljs -- this is how I connect to QA/production REPLs -- in particular, see https://github.com/seancorfield/vscode-calva-setup/blob/develop/joyride/src/remote_repl.cljs#L33 which takes the current Portal config (host/port etc) and sends it to the server to write out locally so that you can open Portal (in my case, into my local VS Code)