feat: oneclient mini accounts delete (#376)
This commit is contained in:
parent
c90c41ce45
commit
c2ad51017b
3 changed files with 43 additions and 16 deletions
|
|
@ -252,8 +252,13 @@ export type VersionType =
|
|||
*/
|
||||
"old_beta"
|
||||
|
||||
const ARGS_MAP = { 'oneclient':'{"getClustersGroupedByMajor":[],"openDevTools":[],"getBundlesFor":["cluster_id"]}', 'events':'{"process":["event"],"ingress":["event"],"message":["event"]}', 'core':'{"getGameVersions":[],"getUsers":[],"getWorlds":["id"],"getGlobalProfile":[],"removeCluster":["id"],"updateClusterById":["id","request"],"getScreenshots":["id"],"getLoadersForVersion":["mc_version"],"getPackageBody":["provider","body"],"installModpack":["modpack","cluster_id"],"fetchMinecraftProfile":["uuid"],"getProfileOrDefault":["name"],"changeSkin":["access_token","skin_url","skin_variant"],"uploadSkinBytes":["access_token","skin_data","image_format","skin_variant"],"getRunningProcessesByClusterId":["cluster_id"],"searchPackages":["provider","query"],"openMsaLogin":[],"updateClusterProfile":["name","profile"],"getClusterById":["id"],"createCluster":["options"],"removeUser":["uuid"],"getRunningProcesses":[],"getClusters":[],"getLogByName":["id","name"],"getUser":["uuid"],"writeSettings":["setting"],"fetchLoggedInProfile":["access_token"],"killProcess":["pid"],"getMultiplePackages":["provider","slugs"],"getLogs":["id"],"launchCluster":["id","uuid"],"getDefaultUser":["fallback"],"readSettings":[],"getPackage":["provider","slug"],"getPackageVersions":["provider","slug","mc_version","loader","offset","limit"],"downloadPackage":["provider","package_id","version_id","cluster_id","skip_compatibility"],"getUsersFromAuthor":["provider","author"],"open":["input"],"setDefaultUser":["uuid"],"isClusterRunning":["cluster_id"]}', 'folders':'{"fromCluster":["folder_name"],"openCluster":["folder_name"]}' }
|
||||
export type Router = { 'oneclient': { openDevTools: () => Promise<void>,
|
||||
const ARGS_MAP = { 'events':'{"process":["event"],"ingress":["event"],"message":["event"]}', 'folders':'{"fromCluster":["folder_name"],"openCluster":["folder_name"]}', 'oneclient':'{"getClustersGroupedByMajor":[],"openDevTools":[],"getBundlesFor":["cluster_id"]}', 'core':'{"getGameVersions":[],"getUsers":[],"getWorlds":["id"],"getGlobalProfile":[],"removeCluster":["id"],"updateClusterById":["id","request"],"getScreenshots":["id"],"getLoadersForVersion":["mc_version"],"getPackageBody":["provider","body"],"installModpack":["modpack","cluster_id"],"fetchMinecraftProfile":["uuid"],"getProfileOrDefault":["name"],"changeSkin":["access_token","skin_url","skin_variant"],"uploadSkinBytes":["access_token","skin_data","image_format","skin_variant"],"getRunningProcessesByClusterId":["cluster_id"],"searchPackages":["provider","query"],"openMsaLogin":[],"updateClusterProfile":["name","profile"],"getClusterById":["id"],"createCluster":["options"],"removeUser":["uuid"],"getRunningProcesses":[],"getClusters":[],"getLogByName":["id","name"],"getUser":["uuid"],"writeSettings":["setting"],"fetchLoggedInProfile":["access_token"],"killProcess":["pid"],"getMultiplePackages":["provider","slugs"],"getLogs":["id"],"launchCluster":["id","uuid"],"getDefaultUser":["fallback"],"readSettings":[],"getPackage":["provider","slug"],"getPackageVersions":["provider","slug","mc_version","loader","offset","limit"],"downloadPackage":["provider","package_id","version_id","cluster_id","skip_compatibility"],"getUsersFromAuthor":["provider","author"],"open":["input"],"setDefaultUser":["uuid"],"isClusterRunning":["cluster_id"]}' }
|
||||
export type Router = { 'events': { ingress: (event: IngressPayload) => Promise<void>,
|
||||
message: (event: MessagePayload) => Promise<void>,
|
||||
process: (event: ProcessPayload) => Promise<void> },
|
||||
'folders': { fromCluster: (folderName: string) => Promise<string>,
|
||||
openCluster: (folderName: string) => Promise<null> },
|
||||
'oneclient': { openDevTools: () => Promise<void>,
|
||||
getClustersGroupedByMajor: () => Promise<Partial<{ [key in number]: ClusterModel[] }>>,
|
||||
getBundlesFor: (clusterId: number) => Promise<ModpackArchive[]> },
|
||||
'core': { getClusters: () => Promise<ClusterModel[]>,
|
||||
|
|
@ -295,12 +300,7 @@ fetchMinecraftProfile: (uuid: string) => Promise<MojangPlayerProfile>,
|
|||
fetchLoggedInProfile: (accessToken: string) => Promise<MojangFullPlayerProfile>,
|
||||
uploadSkinBytes: (accessToken: string, skinData: number[], imageFormat: string, skinVariant: SkinVariant) => Promise<MojangSkin>,
|
||||
changeSkin: (accessToken: string, skinUrl: string, skinVariant: SkinVariant) => Promise<MojangSkin>,
|
||||
open: (input: string) => Promise<null> },
|
||||
'events': { ingress: (event: IngressPayload) => Promise<void>,
|
||||
message: (event: MessagePayload) => Promise<void>,
|
||||
process: (event: ProcessPayload) => Promise<void> },
|
||||
'folders': { fromCluster: (folderName: string) => Promise<string>,
|
||||
openCluster: (folderName: string) => Promise<null> } };
|
||||
open: (input: string) => Promise<null> } };
|
||||
|
||||
|
||||
export type { InferCommandOutput }
|
||||
|
|
|
|||
|
|
@ -3,13 +3,14 @@ import { bindings } from '@/main';
|
|||
import { useCommand, useCommandMut } from '@onelauncher/common';
|
||||
import { Button } from '@onelauncher/common/components';
|
||||
import { Link } from '@tanstack/react-router';
|
||||
import { PlusIcon, Settings01Icon } from '@untitled-theme/icons-react';
|
||||
import { PlusIcon, Settings01Icon, Trash01Icon } from '@untitled-theme/icons-react';
|
||||
import { DialogTrigger } from 'react-aria-components';
|
||||
import { twMerge } from 'tailwind-merge';
|
||||
import { AccountAvatar } from '../AccountAvatar';
|
||||
import { AddAccountModal } from './AddAccountModal';
|
||||
import { Overlay } from './Overlay';
|
||||
import { Popup } from './Popup';
|
||||
import { RemoveAccountModal } from './RemoveAccountModal';
|
||||
|
||||
export function AccountPopup() {
|
||||
const users = useCommand(['getUsers'], bindings.core.getUsers);
|
||||
|
|
@ -21,6 +22,17 @@ export function AccountPopup() {
|
|||
defaultUser.refetch();
|
||||
};
|
||||
|
||||
const deleteUser = async (user: MinecraftCredentials) => {
|
||||
await bindings.core.removeUser(user.id);
|
||||
users.refetch();
|
||||
defaultUser.refetch();
|
||||
|
||||
if (defaultUser.data && defaultUser.data.id === user.id && users.data && users.data.length > 1) {
|
||||
const filtered = users.data.filter((userData) => userData.id !== user.id)
|
||||
if (filtered.length > 0) setDefaultUser(filtered[0]);
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<Popup placement="top left">
|
||||
|
||||
|
|
@ -30,6 +42,7 @@ export function AccountPopup() {
|
|||
<AccountEntry
|
||||
loggedIn
|
||||
onClick={() => { }}
|
||||
onDelete={() => deleteUser(defaultUser.data)}
|
||||
user={defaultUser.data}
|
||||
/>
|
||||
</div>
|
||||
|
|
@ -39,6 +52,7 @@ export function AccountPopup() {
|
|||
<div key={user.id}>
|
||||
<AccountEntry
|
||||
onClick={() => setDefaultUser(user)}
|
||||
onDelete={() => deleteUser(user)}
|
||||
user={user}
|
||||
/>
|
||||
</div>
|
||||
|
|
@ -75,10 +89,12 @@ export default AccountPopup;
|
|||
|
||||
function AccountEntry({
|
||||
onClick,
|
||||
onDelete,
|
||||
user,
|
||||
loggedIn = false,
|
||||
}: {
|
||||
onClick: () => void;
|
||||
onDelete: () => void;
|
||||
user: MinecraftCredentials;
|
||||
loggedIn?: boolean;
|
||||
}) {
|
||||
|
|
@ -88,13 +104,25 @@ function AccountEntry({
|
|||
onClick={onClick}
|
||||
>
|
||||
<div className="flex flex-1 flex-row justify-start gap-x-3">
|
||||
<AccountAvatar className="h-8 w-8 rounded-md" uuid={user.id} />
|
||||
<div className="flex flex-col items-center justify-center">
|
||||
<div className="flex flex-col items-start justify-between">
|
||||
<p className="h-[18px] font-semibold">{user.username}</p>
|
||||
{loggedIn && <p className="text-xs">Logged in</p>}
|
||||
<div className="flex flex-1 flex-row justify-start gap-x-3">
|
||||
<AccountAvatar className="h-8 w-8 rounded-md" uuid={user.id} />
|
||||
<div className="flex flex-col items-center justify-center">
|
||||
<div className="flex flex-col items-start justify-between">
|
||||
<p className="h-[18px] font-semibold">{user.username}</p>
|
||||
{loggedIn && <p className="text-xs">Logged in</p>}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<DialogTrigger>
|
||||
<Button className="group w-8 h-8" color="ghost" size="icon">
|
||||
<Trash01Icon className="group-hover:stroke-danger" />
|
||||
</Button>
|
||||
|
||||
<Overlay>
|
||||
<RemoveAccountModal onPress={onDelete} profile={user} />
|
||||
</Overlay>
|
||||
</DialogTrigger>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -1,9 +1,8 @@
|
|||
import type { MinecraftCredentials } from '@/bindings.gen';
|
||||
import type { ButtonProps } from '@onelauncher/common/components';
|
||||
import { AccountAvatar, SheetPage, SkinViewer } from '@/components';
|
||||
import { AddAccountModal } from '@/components/overlay';
|
||||
import { AddAccountModal, RemoveAccountModal } 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';
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue