import {useStore} from "../store/store.ts"; import {useEffect, useState} from "react"; import {InstalledPlugin, PluginDef, SearchParams} from "./Plugin.ts"; import {useDebounce} from "../utils/useDebounce.ts"; import {Trans, useTranslation} from "react-i18next"; 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('') const {t} = useTranslation() useEffect(() => { if(!pluginsSocket){ return } pluginsSocket.on('results:installed', (data:{ installed: InstalledPlugin[] })=>{ setInstalledPlugins(data.installed) }) pluginsSocket.on('results:updatable', (data) => { data.updatable.forEach((pluginName: string) => { setInstalledPlugins(installedPlugins.map(plugin => { if (plugin.name === pluginName) { return { ...plugin, updatable: true } } return plugin })) }) }) 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

{installedPlugins.map((plugin, index) => { return })}
{plugin.name} {plugin.version} { plugin.updatable ? : }

{ setSearchTerm(v.target.value) }}/> {plugins.map((plugin) => { return })}
{plugin.name} {plugin.description} {plugin.version} {plugin.time}
}