feat: oneclient no account popup (#381)
* feat: oneclient no account popup Prompts the user for a login when they don't have an account added and are trying to start the game * fix: formatting * fix: account popup text color
This commit is contained in:
parent
8a2939597b
commit
59e7cde8df
4 changed files with 64 additions and 20 deletions
|
|
@ -254,16 +254,8 @@ export type VersionType =
|
|||
*/
|
||||
"old_beta"
|
||||
|
||||
const ARGS_MAP = { 'events':'{"process":["event"],"ingress":["event"],"message":["event"]}', 'oneclient':'{"openDevTools":[],"getClustersGroupedByMajor":[],"getBundlesFor":["cluster_id"]}', '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 = { 'oneclient': { openDevTools: () => Promise<void>,
|
||||
getClustersGroupedByMajor: () => Promise<Partial<{ [key in number]: ClusterModel[] }>>,
|
||||
getBundlesFor: (clusterId: number) => Promise<ModpackArchive[]> },
|
||||
'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> },
|
||||
'core': { getClusters: () => Promise<ClusterModel[]>,
|
||||
const ARGS_MAP = { 'folders':'{"fromCluster":["folder_name"],"openCluster":["folder_name"]}', 'events':'{"process":["event"],"ingress":["event"],"message":["event"]}', 'oneclient':'{"openDevTools":[],"getClustersGroupedByMajor":[],"getBundlesFor":["cluster_id"]}', '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"]}' }
|
||||
export type Router = { 'core': { getClusters: () => Promise<ClusterModel[]>,
|
||||
getClusterById: (id: number) => Promise<ClusterModel | null>,
|
||||
removeCluster: (id: number) => Promise<null>,
|
||||
createCluster: (options: CreateCluster) => Promise<ClusterModel>,
|
||||
|
|
@ -306,7 +298,15 @@ changeSkin: (accessToken: string, skinUrl: string, skinVariant: SkinVariant) =>
|
|||
changeCape: (accessToken: string, capeUuid: string) => Promise<MojangFullPlayerProfile>,
|
||||
removeCape: (accessToken: string) => Promise<MojangFullPlayerProfile>,
|
||||
convertUsernameUUID: (usernameUuid: string) => Promise<MowojangProfile>,
|
||||
open: (input: string) => Promise<null> } };
|
||||
open: (input: string) => Promise<null> },
|
||||
'oneclient': { openDevTools: () => Promise<void>,
|
||||
getClustersGroupedByMajor: () => Promise<Partial<{ [key in number]: ClusterModel[] }>>,
|
||||
getBundlesFor: (clusterId: number) => Promise<ModpackArchive[]> },
|
||||
'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> } };
|
||||
|
||||
|
||||
export type { InferCommandOutput }
|
||||
|
|
|
|||
|
|
@ -1,8 +1,13 @@
|
|||
import type { ButtonProps } from '@onelauncher/common/components';
|
||||
import { useIsRunning } from '@/hooks/useClusters';
|
||||
import { useLaunchCluster } from '@/hooks/useLaunchCluster';
|
||||
import { bindings } from '@/main';
|
||||
import { useCommandSuspense } from '@onelauncher/common';
|
||||
import { Button } from '@onelauncher/common/components';
|
||||
import { useState } from 'react';
|
||||
import { DialogTrigger } from 'react-aria-components';
|
||||
import { tv } from 'tailwind-variants';
|
||||
import { NoAccountPopup, Overlay } from './overlay';
|
||||
|
||||
export type LaunchButtonProps = Omit<ButtonProps, 'children' | 'onClick'> & {
|
||||
clusterId: number | undefined | null;
|
||||
|
|
@ -22,17 +27,32 @@ export function LaunchButton({
|
|||
className,
|
||||
...rest
|
||||
}: LaunchButtonProps) {
|
||||
const launch = useLaunchCluster(clusterId);
|
||||
const { data: currentAccount } = useCommandSuspense(['getDefaultUser'], () => bindings.core.getDefaultUser(true));
|
||||
const launchCluster = useLaunchCluster(clusterId);
|
||||
const isRunning = useIsRunning(clusterId);
|
||||
const [open, setOpen] = useState<boolean>(false);
|
||||
|
||||
const launch = () => {
|
||||
if (currentAccount === null)
|
||||
setOpen(true);
|
||||
else
|
||||
launchCluster();
|
||||
};
|
||||
|
||||
return (
|
||||
<Button
|
||||
className={launchButtonVariants({ isRunning, className })}
|
||||
isDisabled={isDisabled || isRunning}
|
||||
onClick={launch}
|
||||
{...rest}
|
||||
>
|
||||
{isRunning ? 'Running' : 'Launch'}
|
||||
</Button>
|
||||
<DialogTrigger isOpen={open} onOpenChange={setOpen}>
|
||||
<Button
|
||||
className={launchButtonVariants({ isRunning, className })}
|
||||
isDisabled={isDisabled || isRunning}
|
||||
onPress={launch}
|
||||
{...rest}
|
||||
>
|
||||
{isRunning ? 'Running' : 'Launch'}
|
||||
</Button>
|
||||
|
||||
<Overlay>
|
||||
<NoAccountPopup />
|
||||
</Overlay>
|
||||
</DialogTrigger>
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,23 @@
|
|||
import { Button } from '@onelauncher/common/components';
|
||||
import { DialogTrigger } from 'react-aria-components';
|
||||
import { AddAccountModal } from './AddAccountModal';
|
||||
import { Overlay } from './Overlay';
|
||||
|
||||
export function NoAccountPopup() {
|
||||
return (
|
||||
<Overlay.Dialog>
|
||||
<Overlay.Title>No Account</Overlay.Title>
|
||||
<p className="max-w-sm text-fg-secondary">Please add an account before you start minecraft</p>
|
||||
|
||||
<DialogTrigger>
|
||||
<Button className="w-full" size="large">
|
||||
Add Account
|
||||
</Button>
|
||||
|
||||
<Overlay>
|
||||
<AddAccountModal />
|
||||
</Overlay>
|
||||
</DialogTrigger>
|
||||
</Overlay.Dialog>
|
||||
);
|
||||
}
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
export * from './AccountPopup';
|
||||
export * from './AddAccountModal';
|
||||
export * from './ImportSkinModal';
|
||||
export * from './NoAccountPopup';
|
||||
export * from './Overlay';
|
||||
export * from './Popup';
|
||||
export * from './RemoveAccountModal';
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue