diff --git a/apps/oneclient/frontend/src/bindings.gen.ts b/apps/oneclient/frontend/src/bindings.gen.ts index d9c742d8..9e4e7439 100644 --- a/apps/oneclient/frontend/src/bindings.gen.ts +++ b/apps/oneclient/frontend/src/bindings.gen.ts @@ -181,7 +181,7 @@ export type SettingProfileModel = { name: string; java_id: number | null; res: R export type Settings = { global_game_settings: SettingProfileModel; allow_parallel_running_clusters: boolean; enable_gamemode: boolean; discord_enabled: boolean; max_concurrent_requests: number; settings_version: number; native_window_frame: boolean } -export type SettingsOsExtra = { enable_gamemode: boolean | null } +export type SettingsOsExtra = Record export type Sort = "Relevance" | "Downloads" | "Newest" | "Updated" @@ -244,8 +244,11 @@ export type VersionType = */ "old_beta" -const ARGS_MAP = { 'core':'{"open":["input"],"setDefaultUser":["uuid"],"getScreenshots":["id"],"getClusters":[],"getClusterById":["id"],"getDefaultUser":["fallback"],"removeCluster":["id"],"getProfileOrDefault":["name"],"getRunningProcessesByClusterId":["cluster_id"],"getWorlds":["id"],"fetchMinecraftProfile":["uuid"],"getUser":["uuid"],"getLogByName":["id","name"],"writeSettings":["setting"],"installModpack":["modpack","cluster_id"],"killProcess":["pid"],"updateClusterProfile":["name","profile"],"getUsersFromAuthor":["provider","author"],"getUsers":[],"readSettings":[],"getPackageVersions":["provider","slug","mc_version","loader","offset","limit"],"getPackage":["provider","slug"],"updateClusterById":["id","request"],"getLogs":["id"],"getGameVersions":[],"getGlobalProfile":[],"searchPackages":["provider","query"],"getRunningProcesses":[],"isClusterRunning":["cluster_id"],"getMultiplePackages":["provider","slugs"],"getLoadersForVersion":["mc_version"],"openMsaLogin":[],"removeUser":["uuid"],"createCluster":["options"],"getPackageBody":["provider","body"],"launchCluster":["id","uuid"],"downloadPackage":["provider","package_id","version_id","cluster_id","skip_compatibility"]}', 'oneclient':'{"openDevTools":[],"getClustersGroupedByMajor":[],"getBundlesFor":["cluster_id"]}', 'folders':'{"fromCluster":["folder_name"],"openCluster":["folder_name"]}', 'events':'{"ingress":["event"],"process":["event"],"message":["event"]}' } -export type Router = { 'core': { getClusters: () => Promise, +const ARGS_MAP = { 'core':'{"getLogs":["id"],"getMultiplePackages":["provider","slugs"],"installModpack":["modpack","cluster_id"],"removeUser":["uuid"],"createCluster":["options"],"getGlobalProfile":[],"getRunningProcesses":[],"getDefaultUser":["fallback"],"updateClusterProfile":["name","profile"],"setDefaultUser":["uuid"],"getPackage":["provider","slug"],"downloadPackage":["provider","package_id","version_id","cluster_id","skip_compatibility"],"removeCluster":["id"],"getLogByName":["id","name"],"getProfileOrDefault":["name"],"getWorlds":["id"],"open":["input"],"getLoadersForVersion":["mc_version"],"readSettings":[],"writeSettings":["setting"],"fetchMinecraftProfile":["uuid"],"getGameVersions":[],"updateClusterById":["id","request"],"openMsaLogin":[],"getPackageVersions":["provider","slug","mc_version","loader","offset","limit"],"getUser":["uuid"],"getScreenshots":["id"],"getClusters":[],"killProcess":["pid"],"getPackageBody":["provider","body"],"getRunningProcessesByClusterId":["cluster_id"],"isClusterRunning":["cluster_id"],"launchCluster":["id","uuid"],"searchPackages":["provider","query"],"getUsers":[],"getUsersFromAuthor":["provider","author"],"getClusterById":["id"]}', 'oneclient':'{"getClustersGroupedByMajor":[],"getBundlesFor":["cluster_id"],"openDevTools":[]}', 'events':'{"message":["event"],"ingress":["event"],"process":["event"]}', 'folders':'{"openCluster":["folder_name"],"fromCluster":["folder_name"]}' } +export type Router = { 'oneclient': { openDevTools: () => Promise, +getClustersGroupedByMajor: () => Promise>, +getBundlesFor: (clusterId: number) => Promise }, +'core': { getClusters: () => Promise, getClusterById: (id: number) => Promise, removeCluster: (id: number) => Promise, createCluster: (options: CreateCluster) => Promise, @@ -282,14 +285,11 @@ getUsersFromAuthor: (provider: Provider, author: PackageAuthor) => Promise Promise, fetchMinecraftProfile: (uuid: string) => Promise, open: (input: string) => Promise }, -'oneclient': { openDevTools: () => Promise, -getClustersGroupedByMajor: () => Promise>, -getBundlesFor: (clusterId: number) => Promise }, -'folders': { fromCluster: (folderName: string) => Promise, -openCluster: (folderName: string) => 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 } }; export type { InferCommandOutput } diff --git a/apps/oneclient/frontend/src/components/overlay/RemoveAccountModal.tsx b/apps/oneclient/frontend/src/components/overlay/RemoveAccountModal.tsx new file mode 100644 index 00000000..a9439b1b --- /dev/null +++ b/apps/oneclient/frontend/src/components/overlay/RemoveAccountModal.tsx @@ -0,0 +1,49 @@ +import type { MinecraftCredentials } from '@/bindings.gen'; +import { AccountAvatar } from '@/components/AccountAvatar'; +import { Button } from '@onelauncher/common/components'; +import { Overlay } from './Overlay'; + +export function RemoveAccountModal({ + profile, + onPress, +}: { + profile: MinecraftCredentials; + onPress: () => void; +}) { + return ( + + Are you sure? + +

Do you want to remove {profile.username} from you're accounts?

+

This cannot be undone

+ + + +
+ ); +} + +function AccountRow({ + profile, +}: { + profile: MinecraftCredentials; +}) { + return ( +
+ + +
+

{profile.username}

+

{profile.id}

+
+
+ ); +} diff --git a/apps/oneclient/frontend/src/components/overlay/index.ts b/apps/oneclient/frontend/src/components/overlay/index.ts index c0ccba68..913737fa 100644 --- a/apps/oneclient/frontend/src/components/overlay/index.ts +++ b/apps/oneclient/frontend/src/components/overlay/index.ts @@ -2,4 +2,5 @@ export * from './AccountPopup'; export * from './AddAccountModal'; export * from './Overlay'; export * from './Popup'; +export * from './RemoveAccountModal'; export * from './Toasts'; diff --git a/apps/oneclient/frontend/src/routes/app/accounts.tsx b/apps/oneclient/frontend/src/routes/app/accounts.tsx index 9bcad5de..07e3114d 100644 --- a/apps/oneclient/frontend/src/routes/app/accounts.tsx +++ b/apps/oneclient/frontend/src/routes/app/accounts.tsx @@ -3,12 +3,14 @@ import type { ButtonProps } from '@onelauncher/common/components'; import { AccountAvatar, SheetPage, SkinViewer } from '@/components'; import { AddAccountModal } from '@/components/overlay'; import { Overlay } from '@/components/overlay/Overlay'; +import { RemoveAccountModal } from '@/components/overlay/RemoveAccountModal'; import { usePlayerProfile } from '@/hooks/usePlayerProfile'; import { bindings } from '@/main'; import { useCommandMut, useCommandSuspense } from '@onelauncher/common'; import { Button } from '@onelauncher/common/components'; import { useQueryClient } from '@tanstack/react-query'; import { createFileRoute } from '@tanstack/react-router'; +import { Trash01Icon } from '@untitled-theme/icons-react'; import { Button as AriaButton, DialogTrigger } from 'react-aria-components'; import { twMerge } from 'tailwind-merge'; @@ -85,12 +87,23 @@ function AccountList() { }); }, }); + const { mutate: removeUser } = useCommandMut(bindings.core.removeUser, { + onSuccess() { + queryClient.invalidateQueries({ + queryKey: ['getDefaultUser'], + }); + queryClient.invalidateQueries({ + queryKey: ['getUsers'], + }); + }, + }); return (
{accounts.map(account => ( removeUser(account.id)} onPress={() => setDefaultUser(account.id)} profile={account} selected={currentAccount?.id === account.id} @@ -108,10 +121,12 @@ function AccountRow({ selected = false, profile, onPress, + onDelete, }: { selected?: boolean; profile: MinecraftCredentials; onPress: () => void; + onDelete: () => void; }) { const { isError } = usePlayerProfile(profile.id); @@ -125,19 +140,31 @@ function AccountRow({ )} onPress={onPress} > - +
+
+ -
-

- {profile.username} - {isError && (Error fetching online profile)} -

-

{profile.id}

+
+

+ {profile.username} + {isError && (Error fetching online profile)} +

+

{profile.id}

+
+
+ +
+ + + + + + + +
- - {/* */} ); }