fix: Fixed tests

feat: Added RClone integration
feat: Implemented plugin settings
feat: Updated minimal store version
test: Fixed tests
feat: Moved store and igdb and es-de to their own plugins
This commit is contained in:
Simeon Radivoev 2026-04-17 21:21:14 +03:00
parent 444d8c4c27
commit c09fbd3dc8
Signed by: simeonradivoev
GPG key ID: 7611A451D2A5D37A
115 changed files with 4139 additions and 1502 deletions

View file

@ -8,7 +8,9 @@ import
Outlet,
createFileRoute,
useMatch,
useMatchRoute,
useRouter,
useRouterState,
} from "@tanstack/react-router";
import { ViewTransitionOptions } from "@tanstack/router-core";
import classNames from "classnames";
@ -22,7 +24,7 @@ import
MonitorCog,
Puzzle,
} from "lucide-react";
import { JSX } from "react";
import { JSX, useMemo } from "react";
import { twMerge } from "tailwind-merge";
import z from "zod";
import { SettingsSchema } from "../../../shared/constants";
@ -45,17 +47,23 @@ export const Route = createFileRoute("/settings")({
function MenuItem (data: {
route: string;
matchRoutes?: string[];
return?: boolean;
viewTransition?: boolean | ViewTransitionOptions;
icon: JSX.Element;
focusSelect?: boolean;
className?: string;
linkClassName?: string;
active?: boolean;
label: string;
})
{
const router = useRouter();
const acitve = !!useMatch({ from: data.route as any, shouldThrow: false });;
const routerState = useRouterState();
const matchRoute = useMatchRoute();
const acitve = useMemo(() => data.matchRoutes ? data.matchRoutes.some(r => !!matchRoute({ to: r })) : !!router.matchRoute({ to: data.route }),
[routerState, matchRoute, data.matchRoutes, data.route]);
const handleNonFocusSelect = (e?: Event) =>
{
if (data.return)
@ -114,10 +122,11 @@ function MenuItem (data: {
function SettingsMenu (data: {})
{
const router = useRouter();
const { ref, focusKey } = useFocusable({
focusable: true,
focusKey: 'settings-menu',
preferredChildFocusKey: `menu-item-${location.hash.replaceAll(/#|(\?.+)/g, '')}`
preferredChildFocusKey: `menu-item-${router.history.location.pathname}`
});
return <ul
@ -146,16 +155,17 @@ function SettingsMenu (data: {})
/>
<MenuItem
focusSelect
route="/settings/directories"
label="Directories"
icon={<HardDrive />}
/>
<MenuItem
focusSelect
matchRoutes={["/settings/plugin/$source", "/settings/plugins"]}
route="/settings/plugins"
label="Plugins"
icon={<Puzzle />}
/>
<MenuItem
focusSelect
route="/settings/directories"
label="Directories"
icon={<HardDrive />}
/>
<MenuItem
focusSelect
route="/settings/about"