File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 11{
22 "name" : " @logseq/libs" ,
3- "version" : " 0.2.12 " ,
3+ "version" : " 0.3.1 " ,
44 "description" : " Logseq SDK libraries" ,
55 "main" : " dist/lsplugin.user.js" ,
66 "typings" : " index.d.ts" ,
Original file line number Diff line number Diff line change @@ -95,6 +95,37 @@ export class LSPluginExperiments {
9595 )
9696 }
9797
98+ registerHostedRenderer (
99+ key : string ,
100+ opts : {
101+ title ?: string ,
102+ subs ?: Array < string >
103+ type ?: string ,
104+ render : ( props : { } ) => any
105+ }
106+ ) {
107+ return this . invokeExperMethod (
108+ 'registerHostedRenderer' ,
109+ this . ctx . baseInfo . id ,
110+ key ,
111+ opts
112+ )
113+ }
114+
115+ registerSidebarRenderer (
116+ key : string ,
117+ opts : {
118+ title ?: string ,
119+ subs ?: Array < string >
120+ render : ( props : { } ) => any ,
121+ [ k : string ] : any
122+ }
123+ ) {
124+ key = `_sidebar.${ key } `
125+ opts . type = 'sidebar'
126+ return this . registerHostedRenderer ( key , opts )
127+ }
128+
98129 registerRouteRenderer (
99130 key : string ,
100131 opts : {
Original file line number Diff line number Diff line change 15911591(rum/defc renderer-resolver < rum /static
15921592 [key']
15931593 (when-let [[pid key] (some-> key' (string/split " ." ))]
1594- ; ; TODO: resolve pid renderer from registered plugins
1595- (let [pid (or pid " UnknownPlugin" )
1596- render (if (not (string/blank? key))
1597- (fn [opts]
1598- [:div.p-6
1599- [:h2.bold.text-lg " Renderer for key: " key]
1600- [:p " Plugin ID: " pid]
1601- [:pre (pr-str opts)]])
1602- #(do [:div " No renderer found for key: " key]))]
1603- (renderer-container {:key key :pid pid :render render}))))
1594+ (let [[renderer set-renderer!] (rum/use-state nil )]
1595+
1596+ (hooks/use-effect!
1597+ (fn []
1598+ (try
1599+ (when-let [renderer (plugin-handler/resolve-hosted-render pid key :sidebar )]
1600+ (let [r (bean/->clj renderer)
1601+ title (:title r)]
1602+ (when-let [^js dom (and title (js/document.getElementById key'))]
1603+ (set! (. dom -textContent) title))
1604+ (set-renderer! r)))
1605+ (catch js/Error e (js/console.error " Failed to resolve renderer:" key' e))))
1606+ [pid key])
1607+
1608+ (when renderer
1609+ (renderer-container renderer)))))
16041610
16051611(defn hook-custom-routes
16061612 [routes]
Original file line number Diff line number Diff line change @@ -975,3 +975,7 @@ body[data-page=plugins] {
975975 padding-right : 30px ;
976976 }
977977}
978+
979+ .lsp-host-renderer-container {
980+ user-select : text;
981+ }
Original file line number Diff line number Diff line change 138138 :plugin
139139 [[:.flex.items-center.page-title
140140 (ui/icon " puzzle" {:class " text-md mr-2" })
141- (str db-id)]
141+ [ :h3 { :id db-id} (str db-id)] ]
142142 (plugins/renderer-resolver db-id)]
143143
144144 :search
Original file line number Diff line number Diff line change 495495 (create-local-renderer-getter
496496 :daemon-renderers *daemon-renderer-providers true ))
497497
498+ (defonce *hosted-renderer-providers (atom #{}))
499+ (def register-hosted-renderer
500+ ; ; [pid key payload]
501+ (create-local-renderer-register
502+ :hosted-renderers *hosted-renderer-providers))
503+ (def get-hosted-renderers
504+ ; ; [key]
505+ (create-local-renderer-getter
506+ :hosted-renderers *hosted-renderer-providers true ))
507+
508+ (defn resolve-hosted-render
509+ [pid key type]
510+ (some->> (get-hosted-renderers )
511+ (medley/find-first #(and (some-> (:pid %) (name ) (= pid))
512+ (or (some-> (:key %) (name ) (= key))
513+ (some-> (:key %) (str ) (string/includes? (str " ." key))))
514+ (some->> type (name ) (= (:type %)))))))
515+
498516(defn select-a-plugin-theme
499517 [pid]
500518 (when-let [themes (get (group-by :pid (:plugin/installed-themes @state/state)) pid)]
Original file line number Diff line number Diff line change 3939 (keyword pid) key (reduce #(assoc %1 %2 (aget opts (name %2 ))) {}
4040 [:before :subs :render ]))))
4141
42+ (defn ^:export register_hosted_renderer
43+ [pid key ^js opts]
44+ (when-let [^js _pl (plugin-handler/get-plugin-inst pid)]
45+ (plugin-handler/register-hosted-renderer
46+ (keyword pid) key (reduce #(assoc %1 %2 (aget opts (name %2 ))) {}
47+ [:title :type :mode :subs :render ]))))
48+
4249(defn ^:export register_extensions_enhancer
4350 [pid type enhancer]
4451 (when-let [^js _pl (and (fn? enhancer) (plugin-handler/get-plugin-inst pid))]
You can’t perform that action at this time.
0 commit comments