diff --git a/src/portal/api.cljc b/src/portal/api.cljc index 85394bce..0f13dec4 100644 --- a/src/portal/api.cljc +++ b/src/portal/api.cljc @@ -182,3 +182,15 @@ (docs nil)) ([options] (open (assoc options :window-title "portal-docs" :value (get-docs))))) + +(defn inspect + "Open a new portal window to inspect a particular value." + {:command true + :added "0.38.0" + :see-also ["open"]} + ([value] + (inspect value (:options rt/*session*))) + ([value options] + (open (assoc options :value value)))) + +(register! #'inspect) diff --git a/src/portal/extensions/vs_code_notebook.cljs b/src/portal/extensions/vs_code_notebook.cljs index cfc1571a..843228ef 100644 --- a/src/portal/extensions/vs_code_notebook.cljs +++ b/src/portal/extensions/vs_code_notebook.cljs @@ -12,17 +12,25 @@ (defonce context (atom nil)) (defonce component (r/atom embed/app)) +(defn inspect + "Open a new portal window to inspect a particular value." + {:command true} + ([value] + (inspect value)) + ([value _] + (.postMessage + ^js @context + #js {:type "open-editor" + :data (binding [*print-meta* true] + (pr-str value))}))) + +(rt/register! #'inspect {:name `portal.api/inspect}) + (defn app [id value] [@component {:id id :value value - :on-open - (fn [value] - (.postMessage - ^js @context - #js {:type "open-editor" - :data (binding [*print-meta* true] - (pr-str value))}))}]) + :on-open #(rpc/call `portal.api/inspect % {:launcher :vs-code})}]) (defonce functional-compiler (r/create-compiler {:function-components true})) @@ -43,8 +51,7 @@ (if-not (:portal.nrepl/eval conn) value (a/do - (rpc/connect - (assoc conn :session session)) + (rpc/connect (assoc conn :session session)) (reset! state/sender rpc/request) (apply rpc/call value)))))