|
3 | 3 | [nextjournal.clerk.viewer :as v]
|
4 | 4 | [nextjournal.clerk.webserver :as webserver]))
|
5 | 5 |
|
| 6 | +(declare open!) |
| 7 | +(defonce !taps-view (atom :stream)) |
| 8 | +(defn set-view! [x] (reset! !taps-view x) (open! ::taps)) |
| 9 | + |
6 | 10 | (def taps-viewer
|
7 |
| - {:render-fn '(fn [taps opts] |
8 |
| - (let [!view (nextjournal.clerk.render.hooks/use-state :stream)] |
9 |
| - [:div |
10 |
| - [:div.flex.justify-between.items-center |
11 |
| - (into [:div.flex.items-center.font-sans.text-xs.mb-3 [:span.text-slate-500.mr-2 "View-as:"]] |
12 |
| - (map (fn [choice] |
13 |
| - [:button.px-3.py-1.font-medium.hover:bg-indigo-50.rounded-full.hover:text-indigo-600.transition |
14 |
| - {:class (if (= @!view choice) "bg-indigo-100 text-indigo-600" "text-slate-500") |
15 |
| - :on-click #(reset! !view choice)} |
16 |
| - choice]) [:stream :latest])) |
17 |
| - [:button.text-xs.rounded-full.px-3.py-1.border-2.font-sans.hover:bg-slate-100.cursor-pointer |
18 |
| - {:on-click #(nextjournal.clerk.render/clerk-eval `(tap/reset-taps!))} "Clear"]] |
19 |
| - (into [:div] |
20 |
| - (nextjournal.clerk.viewer/inspect-children opts) |
21 |
| - (cond->> taps (= :latest @!view) (take 1)))]))}) |
| 11 | + {:render-fn '(fn [taps {:as opts :keys [taps-view]}] |
| 12 | + [:div |
| 13 | + [:div.flex.justify-between.items-center |
| 14 | + (into [:div.flex.items-center.font-sans.text-xs.mb-3 [:span.text-slate-500.mr-2 "View-as:"]] |
| 15 | + (map (fn [choice] |
| 16 | + [:button.px-3.py-1.font-medium.hover:bg-indigo-50.rounded-full.hover:text-indigo-600.transition |
| 17 | + {:class (if (= taps-view choice) "bg-indigo-100 text-indigo-600" "text-slate-500") |
| 18 | + :on-click #(nextjournal.clerk.render/clerk-eval `(set-view! ~choice))} |
| 19 | + choice]) [:stream :latest])) |
| 20 | + [:button.text-xs.rounded-full.px-3.py-1.border-2.font-sans.hover:bg-slate-100.cursor-pointer |
| 21 | + {:on-click #(nextjournal.clerk.render/clerk-eval `(tap/reset-taps!))} "Clear"]] |
| 22 | + (into [:div] |
| 23 | + (nextjournal.clerk.viewer/inspect-children opts) |
| 24 | + (cond->> taps (= :latest taps-view) (take 1)))])}) |
22 | 25 |
|
23 | 26 | (defn open!
|
24 | 27 | ([id]
|
25 | 28 | (case id
|
26 | 29 | ::taps (open! id {:title "🚰 Taps" :css-class "p-0"}
|
27 | 30 | (v/with-viewers (v/add-viewers [tap/tap-viewer])
|
28 |
| - (v/with-viewer taps-viewer @tap/!taps))))) |
| 31 | + (v/with-viewer taps-viewer {:nextjournal/opts {:taps-view @!taps-view}} |
| 32 | + @tap/!taps))))) |
29 | 33 | ([id content] (open! id {} content))
|
30 | 34 | ([id opts content]
|
31 | 35 | ;; TODO: consider calling v/transform-result
|
|
44 | 48 |
|
45 | 49 | #_(open! ::taps)
|
46 | 50 | #_(doseq [f @@(resolve 'clojure.core/tapset)] (remove-tap f))
|
47 |
| -#_(reset! !taps ()) |
48 | 51 | #_(tap> (range 30))
|
49 | 52 | #_(destroy! ::taps)
|
50 |
| -#_(tap> (v/html [:h1 "Ahoi"])) |
| 53 | +#_(tap> (v/plotly {:data [{:y [1 2 3]}]})) |
51 | 54 | #_(tap> (v/table [[1 2] [3 4]]))
|
52 | 55 | #_(open! ::my-window {:title "🔭 Rear Window"} (v/table [[1 2] [3 4]]))
|
53 | 56 | #_(open! ::my-window {:title "🔭 Rear Window"} (range 30))
|
|
0 commit comments