import {useStore} from "../store/store.ts"; import {useEffect, useState} from "react"; import {InstalledPlugin, PluginDef, SearchParams} from "./Plugin.ts"; import {useDebounce} from "../utils/useDebounce.ts"; export const HomePage = () => { const pluginsSocket = useStore(state=>state.pluginsSocket) const [plugins,setPlugins] = useState([]) const [installedPlugins, setInstalledPlugins] = useState([]) const [searchParams, setSearchParams] = useState({ offset: 0, limit: 99999, sortBy: 'name', sortDir: 'asc', searchTerm: '' }) const [searchTerm, setSearchTerm] = useState('') useEffect(() => { if(!pluginsSocket){ return } pluginsSocket.on('results:installed', (data:{ installed: InstalledPlugin[] })=>{ setInstalledPlugins(data.installed) }) pluginsSocket.on('results:updatable', () => { console.log("Finished install") }) pluginsSocket.on('finished:install', () => { pluginsSocket!.emit('getInstalled'); }) pluginsSocket.on('finished:uninstall', () => { console.log("Finished uninstall") }) // Reload on reconnect pluginsSocket.on('connect', ()=>{ // Initial retrieval of installed plugins pluginsSocket.emit('getInstalled'); pluginsSocket.emit('search', searchParams) }) pluginsSocket.emit('getInstalled'); // check for updates every 5mins const interval = setInterval(() => { pluginsSocket.emit('checkUpdates'); }, 1000 * 60 * 5); return ()=>{ clearInterval(interval) } }, [pluginsSocket]); useEffect(() => { if (!pluginsSocket) { return } pluginsSocket?.emit('search', searchParams) pluginsSocket!.on('results:search', (data: { results: PluginDef[] }) => { setPlugins(data.results) }) }, [searchParams, pluginsSocket]); const uninstallPlugin = (pluginName: string)=>{ pluginsSocket!.emit('uninstall', pluginName); // Remove plugin setInstalledPlugins(installedPlugins.filter(i=>i.name !== pluginName)) } const installPlugin = (pluginName: string)=>{ pluginsSocket!.emit('install', pluginName); setPlugins(plugins.filter(plugin=>plugin.name !== pluginName)) } useDebounce(()=>{ setSearchParams({ ...searchParams, offset: 0, searchTerm: searchTerm }) }, 500, [searchTerm]) return

Home Page

Installierte Plugins

{installedPlugins.map((plugin, index) => { return })}
Name Version
{plugin.name} {plugin.version} { }}>

Verfügbare Plugins

{ setSearchTerm(v.target.value) }}/> {plugins.map((plugin, index) => { return })}
Name Description Version Last updated
{plugin.name} {plugin.description} {plugin.version} {plugin.time}
}