mirror of
https://github.com/logseq/logseq.git
synced 2026-05-05 03:16:37 +00:00
feat(plugin): support configurable UI api for toolbar action items
This commit is contained in:
@@ -23,8 +23,8 @@
|
||||
(for [opt themes]
|
||||
(let [current-selected (= selected (:url opt))]
|
||||
[:div.it.flex.px-3.py-2.mb-2.rounded-sm.justify-between
|
||||
{:key (:url opt)
|
||||
:class [(if current-selected "is-selected")]
|
||||
{:key (:url opt)
|
||||
:class [(if current-selected "is-selected")]
|
||||
:on-click #(do (js/LSPluginCore.selectTheme (if current-selected nil (clj->js opt)))
|
||||
(state/set-modal! nil))}
|
||||
[:section
|
||||
@@ -173,3 +173,36 @@
|
||||
[])
|
||||
[:div.lsp-hook-ui-slot
|
||||
(merge opts {:id id})])))
|
||||
|
||||
(rum/defc ui-item-renderer
|
||||
[pid type {:keys [key template]}]
|
||||
(let [*el (rum/use-ref nil)
|
||||
uni #(str "injected-ui-item-" %)
|
||||
^js pl (js/LSPluginCore.registeredPlugins.get (name pid))]
|
||||
|
||||
(rum/use-effect!
|
||||
(fn []
|
||||
(when-let [^js el (rum/deref *el)]
|
||||
(js/LSPlugin.pluginHelpers.setupInjectedUI.call
|
||||
pl #js {:slot (.-id el) :key key :template template} #js {})))
|
||||
[])
|
||||
|
||||
(if-not (nil? pl)
|
||||
[:div {:id (uni (str (name key) "-" (name pid)))
|
||||
:class (uni (name type))
|
||||
:ref *el}]
|
||||
[:span])))
|
||||
|
||||
(rum/defcs hook-ui-items < rum/reactive
|
||||
"type
|
||||
- :toolbar
|
||||
- :page
|
||||
"
|
||||
[state type]
|
||||
(when (state/sub [:plugin/installed-ui-items])
|
||||
(let [items (state/get-plugins-ui-items-with-type type)]
|
||||
(when (seq items)
|
||||
[:div {:class (str "ui-items-container")
|
||||
:data-type (name type)}
|
||||
(for [[_ {:keys [key template] :as opts} pid] items]
|
||||
(rum/with-key (ui-item-renderer pid type opts) key))]))))
|
||||
|
||||
Reference in New Issue
Block a user