From 990657707b7a8cf490262e9a67fce40590a72505 Mon Sep 17 00:00:00 2001 From: Szedann <65607498+Szedann@users.noreply.github.com> Date: Sat, 4 Oct 2025 15:46:39 +0200 Subject: [PATCH] feat: improve the settings page --- apps/oneclient/frontend/src/bindings.gen.ts | 16 ++-- .../src/routes/app/settings/appearance.tsx | 2 +- .../src/routes/app/settings/developer.tsx | 4 +- .../src/routes/app/settings/index.tsx | 2 +- .../src/routes/app/settings/minecraft.tsx | 2 +- .../src/routes/app/settings/route.tsx | 86 ++++++++++++------- 6 files changed, 69 insertions(+), 43 deletions(-) diff --git a/apps/oneclient/frontend/src/bindings.gen.ts b/apps/oneclient/frontend/src/bindings.gen.ts index da8e80f8..80ee1724 100644 --- a/apps/oneclient/frontend/src/bindings.gen.ts +++ b/apps/oneclient/frontend/src/bindings.gen.ts @@ -254,10 +254,8 @@ export type VersionType = */ "old_beta" -const ARGS_MAP = { 'oneclient':'{"openDevTools":[],"getClustersGroupedByMajor":[],"getBundlesFor":["cluster_id"]}', 'events':'{"process":["event"],"ingress":["event"],"message":["event"]}', 'core':'{"updateClusterById":["id","request"],"getRunningProcesses":[],"readSettings":[],"changeSkin":["access_token","skin_url","skin_variant"],"fetchMinecraftProfile":["uuid"],"uploadSkinBytes":["access_token","skin_data","image_format","skin_variant"],"searchPackages":["provider","query"],"getClusters":[],"getPackageBody":["provider","body"],"killProcess":["pid"],"createSettingsProfile":["name"],"installModpack":["modpack","cluster_id"],"getMultiplePackages":["provider","slugs"],"getUsers":[],"open":["input"],"getUsersFromAuthor":["provider","author"],"getUser":["uuid"],"launchCluster":["id","uuid"],"removeUser":["uuid"],"getLogByName":["id","name"],"getPackage":["provider","slug"],"downloadPackage":["provider","package_id","version_id","cluster_id","skip_compatibility"],"removeCape":["access_token"],"writeSettings":["setting"],"getClusterById":["id"],"getLoadersForVersion":["mc_version"],"openMsaLogin":[],"updateClusterProfile":["name","profile"],"isClusterRunning":["cluster_id"],"getScreenshots":["id"],"getGlobalProfile":[],"createCluster":["options"],"getLogs":["id"],"getRunningProcessesByClusterId":["cluster_id"],"getProfileOrDefault":["name"],"getGameVersions":[],"getWorlds":["id"],"getDefaultUser":["fallback"],"setDefaultUser":["uuid"],"getPackageVersions":["provider","slug","mc_version","loader","offset","limit"],"fetchLoggedInProfile":["access_token"],"changeCape":["access_token","cape_uuid"],"removeCluster":["id"],"convertUsernameUUID":["username_uuid"]}', 'folders':'{"fromCluster":["folder_name"],"openCluster":["folder_name"]}' } -export type Router = { 'folders': { fromCluster: (folderName: string) => Promise, -openCluster: (folderName: string) => Promise }, -'core': { getClusters: () => Promise, +const ARGS_MAP = { 'events':'{"message":["event"],"ingress":["event"],"process":["event"]}', 'oneclient':'{"openDevTools":[],"getBundlesFor":["cluster_id"],"getClustersGroupedByMajor":[]}', 'folders':'{"openCluster":["folder_name"],"fromCluster":["folder_name"]}', 'core':'{"getWorlds":["id"],"fetchMinecraftProfile":["uuid"],"getProfileOrDefault":["name"],"removeCluster":["id"],"uploadSkinBytes":["access_token","skin_data","image_format","skin_variant"],"getLogByName":["id","name"],"searchPackages":["provider","query"],"getClusterById":["id"],"fetchLoggedInProfile":["access_token"],"changeCape":["access_token","cape_uuid"],"getRunningProcessesByClusterId":["cluster_id"],"getScreenshots":["id"],"createSettingsProfile":["name"],"launchCluster":["id","uuid"],"createCluster":["options"],"getLogs":["id"],"getRunningProcesses":[],"getPackage":["provider","slug"],"getUser":["uuid"],"getPackageBody":["provider","body"],"getDefaultUser":["fallback"],"isClusterRunning":["cluster_id"],"getGlobalProfile":[],"openMsaLogin":[],"getGameVersions":[],"getUsersFromAuthor":["provider","author"],"writeSettings":["setting"],"getPackageVersions":["provider","slug","mc_version","loader","offset","limit"],"getClusters":[],"removeUser":["uuid"],"killProcess":["pid"],"updateClusterById":["id","request"],"getLoadersForVersion":["mc_version"],"convertUsernameUUID":["username_uuid"],"getMultiplePackages":["provider","slugs"],"installModpack":["modpack","cluster_id"],"open":["input"],"readSettings":[],"downloadPackage":["provider","package_id","version_id","cluster_id","skip_compatibility"],"removeCape":["access_token"],"updateClusterProfile":["name","profile"],"setDefaultUser":["uuid"],"getUsers":[],"changeSkin":["access_token","skin_url","skin_variant"]}' } +export type Router = { 'core': { getClusters: () => Promise, getClusterById: (id: number) => Promise, removeCluster: (id: number) => Promise, createCluster: (options: CreateCluster) => Promise, @@ -301,12 +299,14 @@ changeCape: (accessToken: string, capeUuid: string) => Promise Promise, convertUsernameUUID: (usernameUuid: string) => Promise, open: (input: string) => Promise }, -'oneclient': { openDevTools: () => Promise, -getClustersGroupedByMajor: () => Promise>, -getBundlesFor: (clusterId: number) => Promise }, 'events': { ingress: (event: IngressPayload) => Promise, message: (event: MessagePayload) => Promise, -process: (event: ProcessPayload) => Promise } }; +process: (event: ProcessPayload) => Promise }, +'folders': { fromCluster: (folderName: string) => Promise, +openCluster: (folderName: string) => Promise }, +'oneclient': { openDevTools: () => Promise, +getClustersGroupedByMajor: () => Promise>, +getBundlesFor: (clusterId: number) => Promise } }; export type { InferCommandOutput } diff --git a/apps/oneclient/frontend/src/routes/app/settings/appearance.tsx b/apps/oneclient/frontend/src/routes/app/settings/appearance.tsx index 9512bcfe..abe484df 100644 --- a/apps/oneclient/frontend/src/routes/app/settings/appearance.tsx +++ b/apps/oneclient/frontend/src/routes/app/settings/appearance.tsx @@ -18,7 +18,7 @@ function RouteComponent() { {/* */}
-

Appearance

+

Appearance

diff --git a/apps/oneclient/frontend/src/routes/app/settings/developer.tsx b/apps/oneclient/frontend/src/routes/app/settings/developer.tsx index ad624c96..5590031d 100644 --- a/apps/oneclient/frontend/src/routes/app/settings/developer.tsx +++ b/apps/oneclient/frontend/src/routes/app/settings/developer.tsx @@ -16,7 +16,9 @@ function RouteComponent() { return (
-

Onboarding

+

Developer Options

+ + Onboarding
-

General

+

General

{/* */}
-

Minecraft Settings

+

Minecraft Settings

diff --git a/apps/oneclient/frontend/src/routes/app/settings/route.tsx b/apps/oneclient/frontend/src/routes/app/settings/route.tsx index 8cfbe893..481c1583 100644 --- a/apps/oneclient/frontend/src/routes/app/settings/route.tsx +++ b/apps/oneclient/frontend/src/routes/app/settings/route.tsx @@ -1,4 +1,5 @@ import type { JSX } from 'react'; +import { SheetPage } from '@/components'; import { createFileRoute, Outlet, useNavigate, useRouterState } from '@tanstack/react-router'; import { Brush01Icon, CodeSnippet02Icon, MessageTextSquare01Icon, RefreshCcw02Icon, Rocket02Icon, Sliders04Icon } from '@untitled-theme/icons-react'; import { useEffect } from 'react'; @@ -7,46 +8,67 @@ export const Route = createFileRoute('/app/settings')({ component: RouteComponent, }); -function RouteComponent() { +function HeaderLarge() { return ( -
-
- , 'General', '/'], - [, 'Appearance', '/appearance'], - // [, 'APIs', '/apis'], - // [, 'Language', '/language'], - ], - 'Game Settings': [ - [, 'Minecraft settings', '/minecraft'], - ], - 'About': [ - [, 'Changelog', '/changelog'], - [, 'Feedback', '/feedback'], - [, 'Developer Options', '/developer'], - ], - }} - /> - {/* */} -
- -
- +
+
+

Settings

+

Adjust the Launcher Settings

); } +function HeaderSmall() { + return

Settings

; +} + +function RouteComponent() { + return ( + } headerSmall={}> + +
+
+ , 'General', '/'], + [, 'Appearance', '/appearance'], + // [, 'APIs', '/apis'], + // [, 'Language', '/language'], + ], + 'Game Settings': [ + [, 'Minecraft settings', '/minecraft'], + ], + 'About': [ + [, 'Changelog', '/changelog'], + [, 'Feedback', '/feedback'], + [, 'Developer Options', '/developer'], + ], + }} + + /> + {/* */} +
+ +
+ +
+
+
+ ); +} + interface SidebarProps { base: string; links: Record>; + exact?: boolean; } function Sidebar(props: SidebarProps) { - const { base, links } = props; + const { base, links, exact } = props; const navigate = useNavigate(); const routerState = useRouterState(); @@ -68,9 +90,11 @@ function Sidebar(props: SidebarProps) { navigate({ to: url }); } - function isActive(link: string, params: URLSearchParams | undefined) { + function isActive(link: string, params: URLSearchParams | undefined, exact: boolean = false) { const fullBasePath = `${base}${link}`; - const pathnameMatch = location.startsWith(fullBasePath) || `${location}/`.startsWith(fullBasePath); + const pathnameMatch = exact + ? location === fullBasePath || `${location}/` === fullBasePath + : location.startsWith(fullBasePath) || `${location}/`.startsWith(fullBasePath); if (!params) return pathnameMatch; @@ -99,7 +123,7 @@ function Sidebar(props: SidebarProps) { return ( goto(link, params)}