import { Button } from '@/mainview/components/options/Button'; import { OptionInput } from '@/mainview/components/options/OptionInput'; import { OptionSpace } from '@/mainview/components/options/OptionSpace'; import { enablePluginMutation, getAllPluginsQuery } from '@/mainview/scripts/queries/plugins'; import { useMutation, useQuery } from '@tanstack/react-query'; import { createFileRoute } from '@tanstack/react-router'; import { Puzzle, Search } from 'lucide-react'; export const Route = createFileRoute('/settings/plugins')({ component: RouteComponent, loader (ctx) { ctx.context.queryClient.prefetchQuery(getAllPluginsQuery); }, }); function Plugin (data: { plugin: FrontendPlugin, setEnabled: (enabled: boolean) => void; }) { return
{data.plugin.icon ? : }
{data.plugin.displayName}
{data.plugin.name} ({data.plugin.version})
} className='flex p-4 bg-base-200 rounded-3xl'>
; } function RouteComponent () { const { data: plugins, refetch: refetchPlugins } = useQuery(getAllPluginsQuery); const pluginMutation = useMutation({ ...enablePluginMutation, onSuccess (data, variables, onMutateResult, context) { refetchPlugins(); }, }); return <> {!!plugins && Object.entries(Object.groupBy(plugins, p => p.source)).map(([source, plugins]) => { return <>
{source === 'builtin' ? "Built In" : "Store"}
{plugins.map(p => pluginMutation.mutate({ id: p.name, enabled: v })} />)} ; })} ; }