import { useJsonRpc } from "@/hooks/useJsonRpc"; import { Button } from "@components/Button"; import { PluginStatus, usePluginStore, useUiStore } from "@/hooks/stores"; import { useCallback, useEffect, useState } from "react"; import UploadPluginModal from "@components/UploadPluginDialog"; import PluginConfigureModal from "@components/PluginConfigureDialog"; import { PluginStatusIcon } from "./PluginStatusIcon"; export default function PluginList() { const [send] = useJsonRpc(); const [error, setError] = useState(null); const { isPluginUploadModalOpen, setIsPluginUploadModalOpen, setPluginUploadModalView, plugins, setPlugins, pluginConfigureModalOpen, setPluginConfigureModalOpen, configuringPlugin, setConfiguringPlugin, } = usePluginStore(); const sidebarView = useUiStore(state => state.sidebarView); const updatePlugins = useCallback(() => { setError(null); send("pluginList", {}, resp => { if ("error" in resp) { setError(resp.error.message); return } console.log('pluginList', resp.result); setPlugins(resp.result as PluginStatus[]); }); }, [send, setPlugins]) useEffect(() => { // Only update plugins when the sidebar view is the settings view if (sidebarView !== "system" && !pluginConfigureModalOpen) return; updatePlugins(); const updateInterval = setInterval(() => { updatePlugins(); }, 10_000); return () => clearInterval(updateInterval); }, [updatePlugins, sidebarView, pluginConfigureModalOpen]) return ( <>
{ setPluginConfigureModalOpen(open); if (!open) { updatePlugins(); } }} plugin={plugins.find(p => p.name == configuringPlugin) ?? null} />
); }