Skip to content

Commit 29e3e5d

Browse files
committed
Properly override clerk/table-viewers
Previously it would use the table-viewers from clerk since clerk-table-stats table-viewers now were `assoc` on the clerk table-viewers and therefore had the same name.
1 parent 89eefa0 commit 29e3e5d

File tree

1 file changed

+55
-49
lines changed

1 file changed

+55
-49
lines changed

src/nextjournal/clerk_table_stats.cljc

+55-49
Original file line numberDiff line numberDiff line change
@@ -502,56 +502,62 @@
502502
::clerk/page-size 5
503503
::clerk/width :full} wv)))))
504504

505+
(def table-viewers [table-head-viewer
506+
table-body-viewer
507+
table-markup-viewer
508+
table-row-viewer])
509+
505510
(def viewer
506-
(assoc viewer/table-viewer
507-
:transform-fn
508-
(fn transform-fn [{:as wrapped-value :nextjournal/keys [applied-viewer render-opts]}]
509-
(let [#?@(:clj [id (or (:id wrapped-value)
510-
(symbol (str (ns-name *ns*)) (str (gensym))))
511-
var-name (symbol (namespace id) (str (name id) "-table"))])
512-
_ #?(:clj (when-not (resolve var-name)
513-
(when-some [ns' (find-ns (symbol (namespace var-name)))]
514-
(intern ns' (symbol (name var-name)) (doto (atom {:active-filters {}})
515-
(add-watch ::recompute
516-
(fn [_ _ _ _]
517-
(nextjournal.clerk/recompute!)))))))
518-
:cljs nil)
519-
table-state #?(:clj @@(resolve var-name)
520-
:cljs nil)]
521-
522-
(if-let [{:keys [head rows summary filter-data autocomplete-data state]}
523-
(normalize-table-data (merge render-opts table-state)
524-
(viewer/->value wrapped-value))]
525-
(-> wrapped-value
526-
(assoc :nextjournal/viewer table-markup-viewer)
527-
(update :nextjournal/width #(or % :wide))
528-
(update :nextjournal/render-opts merge {:num-cols (count (or head (first rows)))
529-
#?@(:clj [:sync-var (viewer/->viewer-eval
530-
(list 'nextjournal.clerk.render/intern-atom!
531-
(list 'quote var-name) table-state))])
532-
:number-col? (into #{}
533-
(comp (map-indexed vector)
534-
(keep #(when (number? (second %)) (first %))))
535-
(not-empty (first rows)))
536-
:summary summary
537-
:initial-table-state table-state
538-
:filter-data filter-data
539-
:autocomplete-data autocomplete-data
540-
:state state})
541-
(update :nextjournal/render-opts dissoc :computed-columns :pre-process-stats)
542-
(assoc :nextjournal/value (cond->> [(viewer/with-viewer table-body-viewer (merge (-> applied-viewer
543-
(select-keys [:page-size])
544-
(set/rename-keys {:page-size :nextjournal/page-size}))
545-
(select-keys wrapped-value [:nextjournal/page-size]))
546-
(if (seq rows)
547-
(map (partial viewer/with-viewer table-row-viewer) rows)
548-
[(viewer/html [:span.italic "this table has no rows"])]))]
549-
head (cons (viewer/with-viewer (:name table-head-viewer table-head-viewer) head)))))
550-
(-> wrapped-value
551-
viewer/mark-presented
552-
(assoc :nextjournal/width :wide)
553-
(assoc :nextjournal/value [(viewer/present wrapped-value)])
554-
(assoc :nextjournal/viewer {:render-fn 'nextjournal.clerk.render/render-table-error})))))))
511+
(-> viewer/table-viewer
512+
(assoc :transform-fn
513+
(fn transform-fn [{:as wrapped-value :nextjournal/keys [applied-viewer render-opts]}]
514+
(let [#?@(:clj [id (or (:id wrapped-value)
515+
(symbol (str (ns-name *ns*)) (str (gensym))))
516+
var-name (symbol (namespace id) (str (name id) "-table"))
517+
_ (when-not (resolve var-name)
518+
(when-some [ns' (find-ns (symbol (namespace var-name)))]
519+
(intern ns' (symbol (name var-name)) (doto (atom {:active-filters {}})
520+
(add-watch ::recompute
521+
(fn [_ _ _ _]
522+
(nextjournal.clerk/recompute!)))))))])
523+
table-state #?(:clj @@(resolve var-name)
524+
:cljs nil)]
525+
526+
(if-let [{:keys [head rows summary filter-data autocomplete-data state]}
527+
(normalize-table-data (merge render-opts table-state)
528+
(viewer/->value wrapped-value))]
529+
(-> wrapped-value
530+
(assoc :nextjournal/viewer table-markup-viewer)
531+
(update :nextjournal/width #(or % :wide))
532+
(update :nextjournal/render-opts merge {:num-cols (count (or head (first rows)))
533+
#?@(:clj [:sync-var (viewer/->viewer-eval
534+
(list 'nextjournal.clerk.render/intern-atom!
535+
(list 'quote var-name) table-state))])
536+
:number-col? (into #{}
537+
(comp (map-indexed vector)
538+
(keep #(when (number? (second %)) (first %))))
539+
(not-empty (first rows)))
540+
:summary summary
541+
:initial-table-state table-state
542+
:filter-data filter-data
543+
:autocomplete-data autocomplete-data
544+
:state state})
545+
(update :nextjournal/render-opts dissoc :computed-columns :pre-process-stats)
546+
(assoc :nextjournal/value (cond->> [(viewer/with-viewer table-body-viewer (merge (-> applied-viewer
547+
(select-keys [:page-size])
548+
(set/rename-keys {:page-size :nextjournal/page-size}))
549+
(select-keys wrapped-value [:nextjournal/page-size]))
550+
(if (seq rows)
551+
(map (partial viewer/with-viewer table-row-viewer) rows)
552+
[(viewer/html [:span.italic "this table has no rows"])]))]
553+
head (cons (viewer/with-viewer (:name table-head-viewer table-head-viewer) head)))))
554+
(-> wrapped-value
555+
viewer/mark-presented
556+
(assoc :nextjournal/width :wide)
557+
(assoc :nextjournal/value [(viewer/present wrapped-value)])
558+
(assoc :nextjournal/viewer {:render-fn 'nextjournal.clerk.render/render-table-error}))))))
559+
(update :add-viewers (fn [v] (concat (filter (fn [{:keys [name]}] (not (contains? (set (map :name table-viewers)) name))) v)
560+
table-viewers)))))
555561

556562
#_(viewer/reset-viewers! :default
557563
(viewer/add-viewers (viewer/get-default-viewers)

0 commit comments

Comments
 (0)