enhance(ui): refactor classic dropdown menu with the shui popup dropdown

feat/tables
charlie 2024-07-03 17:52:50 +08:00
parent 98d0d10929
commit dee3fdb774
1 changed files with 42 additions and 33 deletions

View File

@ -144,41 +144,50 @@
[error])
[:div.cp__server-indicator
;; settings menus
(ui/dropdown-with-links
(fn [{:keys [toggle-fn]}]
[:button.button.icon
{:on-click #(toggle-fn)}
(ui/icon (if running? "api" "api-off") {:size 22})])
[:button.button.icon
{:on-click (fn [^js e]
(shui/popup-show!
(.-target e)
(fn [{:keys [_close]}]
(let [items [{:hr? true}
;; items
(->> [{:hr true}
(cond
running?
{:title "Stop server"
:options {:on-click #(ipc/ipc :server/do :stop)}
:icon [:span.text-red-500.flex.items-center (ui/icon "player-stop")]}
(cond
running?
{:title "Stop server"
:options {:on-click #(ipc/ipc :server/do :stop)}
:icon [:span.text-red-500.flex.items-center (ui/icon "player-stop")]}
:else
{:title "Start server"
:options {:on-click #(ipc/ipc :server/do :restart)}
:icon [:span.text-green-500.flex.items-center (ui/icon "player-play")]})
:else
{:title "Start server"
:options {:on-click #(ipc/ipc :server/do :restart)}
:icon [:span.text-green-500.flex.items-center (ui/icon "player-play")]})
{:title "Authorization tokens"
:options {:on-click #(shui/dialog-open!
(fn []
(panel-of-tokens shui/dialog-close!)))}
:icon (ui/icon "key")}
{:title "Authorization tokens"
:options {:on-click #(shui/dialog-open!
(fn []
(panel-of-tokens shui/dialog-close!)))}
:icon (ui/icon "key")}
{:title "Server configurations"
:options {:on-click #(shui/dialog-open!
(fn []
(panel-of-configs shui/dialog-close!)))}
:icon (ui/icon "server-cog")}]]
{:title "Server configurations"
:options {:on-click #(shui/dialog-open!
(fn []
(panel-of-configs shui/dialog-close!)))}
:icon (ui/icon "server-cog")}])
{:links-header
[:div.links-header.flex.justify-center.py-2
[:span.ml-1.text-sm
(if-not running?
(string/upper-case (or (:status server-state) "stopped"))
[:a.hover:underline {:href href} href])]]})]))
(cons
[:div.links-header.flex.justify-center.py-2
[:span.ml-1.text-sm.opacity-70
(if-not running?
(string/upper-case (or (:status server-state) "stopped"))
[:a.hover:underline {:href href} href])]]
(for [{:keys [hr? title options icon]} items]
(cond
hr?
(shui/dropdown-menu-separator)
:else
(shui/dropdown-menu-item options
[:span.flex.items-center icon [:span.pl-1 title]]))))))
{:as-dropdown? true
:content-props {:onClick #(shui/popup-hide!)}}))}
(ui/icon (if running? "api" "api-off") {:size 22})]]))