feat: more user friendly toasts (#365)

This commit is contained in:
Szedann 2025-09-15 22:37:29 +02:00
parent 4de4d2cad6
commit eafc8db786
2 changed files with 22 additions and 8 deletions

View file

@ -232,12 +232,8 @@ export type VersionType =
*/
"old_beta"
const ARGS_MAP = { 'events':'{"ingress":["event"],"message":["event"],"process":["event"]}', 'folders':'{"fromCluster":["folder_name"],"openCluster":["folder_name"]}', 'core':'{"open":["input"],"removeUser":["uuid"],"getUsersFromAuthor":["provider","author"],"getWorlds":["id"],"getClusterById":["id"],"setDefaultUser":["uuid"],"openMsaLogin":[],"getPackageVersions":["provider","slug","mc_version","loader","offset","limit"],"getClusters":[],"updateClusterProfile":["name","profile"],"fetchMinecraftProfile":["uuid"],"getMultiplePackages":["provider","slugs"],"updateClusterById":["id","request"],"writeSettings":["setting"],"searchPackages":["provider","query"],"getGameVersions":[],"killProcess":["pid"],"getProfileOrDefault":["name"],"getRunningProcessesByClusterId":["cluster_id"],"getPackageBody":["provider","body"],"downloadPackage":["provider","package_id","version_id","cluster_id","skip_compatibility"],"getGlobalProfile":[],"createCluster":["options"],"readSettings":[],"launchCluster":["id","uuid"],"getDefaultUser":["fallback"],"getUsers":[],"isClusterRunning":["cluster_id"],"getLoadersForVersion":["mc_version"],"getLogs":["id"],"getUser":["uuid"],"removeCluster":["id"],"getPackage":["provider","slug"],"getRunningProcesses":[],"getScreenshots":["id"],"getLogByName":["id","name"]}', 'oneclient':'{"getClustersGroupedByMajor":[],"openDevTools":[]}' }
export type Router = { 'folders': { fromCluster: (folderName: string) => Promise<string>,
openCluster: (folderName: string) => Promise<null> },
'oneclient': { openDevTools: () => Promise<void>,
getClustersGroupedByMajor: () => Promise<Partial<{ [key in number]: ClusterModel[] }>> },
'events': { ingress: (event: IngressPayload) => Promise<void>,
const ARGS_MAP = { 'oneclient':'{"getClustersGroupedByMajor":[],"openDevTools":[]}', 'folders':'{"fromCluster":["folder_name"],"openCluster":["folder_name"]}', 'events':'{"ingress":["event"],"message":["event"],"process":["event"]}', 'core':'{"open":["input"],"removeUser":["uuid"],"getUsersFromAuthor":["provider","author"],"getWorlds":["id"],"getClusterById":["id"],"setDefaultUser":["uuid"],"openMsaLogin":[],"getPackageVersions":["provider","slug","mc_version","loader","offset","limit"],"getClusters":[],"updateClusterProfile":["name","profile"],"fetchMinecraftProfile":["uuid"],"getMultiplePackages":["provider","slugs"],"updateClusterById":["id","request"],"writeSettings":["setting"],"searchPackages":["provider","query"],"getGameVersions":[],"killProcess":["pid"],"getProfileOrDefault":["name"],"getRunningProcessesByClusterId":["cluster_id"],"getPackageBody":["provider","body"],"downloadPackage":["provider","package_id","version_id","cluster_id","skip_compatibility"],"getGlobalProfile":[],"createCluster":["options"],"readSettings":[],"launchCluster":["id","uuid"],"getDefaultUser":["fallback"],"getUsers":[],"isClusterRunning":["cluster_id"],"getLoadersForVersion":["mc_version"],"getLogs":["id"],"getUser":["uuid"],"removeCluster":["id"],"getPackage":["provider","slug"],"getRunningProcesses":[],"getScreenshots":["id"],"getLogByName":["id","name"]}' }
export type Router = { 'events': { ingress: (event: IngressPayload) => Promise<void>,
message: (event: MessagePayload) => Promise<void>,
process: (event: ProcessPayload) => Promise<void> },
'core': { getClusters: () => Promise<ClusterModel[]>,
@ -275,7 +271,11 @@ getPackageVersions: (provider: Provider, slug: string, mcVersion: string | null,
downloadPackage: (provider: Provider, packageId: string, versionId: string, clusterId: number, skipCompatibility: boolean | null) => Promise<PackageModel>,
getUsersFromAuthor: (provider: Provider, author: PackageAuthor) => Promise<ManagedUser[]>,
fetchMinecraftProfile: (uuid: string) => Promise<MojangPlayerProfile>,
open: (input: string) => Promise<null> } };
open: (input: string) => Promise<null> },
'folders': { fromCluster: (folderName: string) => Promise<string>,
openCluster: (folderName: string) => Promise<null> },
'oneclient': { openDevTools: () => Promise<void>,
getClustersGroupedByMajor: () => Promise<Partial<{ [key in number]: ClusterModel[] }>> } };
export type { InferCommandOutput }

View file

@ -1,3 +1,4 @@
import type { IngressType } from '@/bindings.gen';
import type { ToastData, ToastId } from '@/utils/toast';
import type { HTMLAttributes } from 'react';
import type { ToastContentProps, ToastOptions } from 'react-toastify';
@ -112,6 +113,18 @@ function ToastProgressBar({
);
}
type UnionToIntersection<T> =
(T extends any ? (x: T) => void : never) extends ((x: infer I) => void) ? I : never;
const ingressNames: Record<(IngressType & string) | (keyof UnionToIntersection<IngressType & object>), string> = {
JavaPrepare: 'Preparing Java',
JavaCheck: 'Checking Java',
JavaLocate: 'Locating Java',
MinecraftDownload: 'Downloading Minecraft',
Download: 'Downloading',
PrepareCluster: 'Preparing Cluster',
};
export function Toasts() {
// runs twice in dev mode because of react strict mode
// the double notifications are NOT a bug!!!
@ -120,7 +133,8 @@ export function Toasts() {
const toastIngressMap: Map<string, ToastId> = new Map();
bindings.events.ingress.on((e) => {
const title = typeof e.ingress_type === 'string' ? e.ingress_type : Object.keys(e.ingress_type).at(0) ?? 'Info';
const ingressType = typeof e.ingress_type === 'string' ? e.ingress_type : Object.keys(e.ingress_type).at(0) ?? 'Info';
const title = ingressNames[ingressType as keyof typeof ingressNames] ?? ingressType;
const existingToastId = toastIngressMap.get(e.id);