mirror of
https://github.com/LCE-Hub/LCE-Emerald-Launcher.git
synced 2026-09-25 09:31:05 +00:00
feat(react): typescriptify everything
This commit is contained in:
@@ -2,6 +2,7 @@ import { useState, useEffect } from "react";
|
||||
import { motion } from "framer-motion";
|
||||
import { TauriService } from "../../services/TauriService";
|
||||
import { lceLiveService, GameInvite } from "../../services/LceLiveService";
|
||||
import type { Edition } from "../../types/edition";
|
||||
|
||||
export default function ChooseInstanceModal({
|
||||
isOpen,
|
||||
@@ -16,7 +17,7 @@ export default function ChooseInstanceModal({
|
||||
onClose: () => void;
|
||||
playPressSound: (s?: string) => void;
|
||||
playBackSound: (s?: string) => void;
|
||||
editions: any[];
|
||||
editions: Edition[];
|
||||
installs: string[];
|
||||
invite: GameInvite | null;
|
||||
}) {
|
||||
@@ -26,7 +27,7 @@ export default function ChooseInstanceModal({
|
||||
const [isJoining, setIsJoining] = useState(false);
|
||||
const [focusIndex, setFocusIndex] = useState(0);
|
||||
|
||||
const validInstances = editions.filter((e: any) =>
|
||||
const validInstances = editions.filter((e: Edition) =>
|
||||
installs.includes(e.instanceId)
|
||||
);
|
||||
|
||||
@@ -53,10 +54,11 @@ export default function ChooseInstanceModal({
|
||||
setError("");
|
||||
setStatus("Accepting invite...");
|
||||
try {
|
||||
const inviteData = await lceLiveService.acceptGameInvite(invite.inviteId);
|
||||
const hostIp = inviteData.hostIp || (typeof invite.from !== 'string' && (invite as any).from?.hostIp);
|
||||
const hostPort = inviteData.hostPort || invite.hostPort;
|
||||
const sessionId = inviteData.signalingSessionId || invite.signalingSessionId || "";
|
||||
const inviteData = await lceLiveService.acceptGameInvite(invite.inviteId) as Record<string, unknown>;
|
||||
const fromIp = typeof invite.from !== 'string' ? (invite.from as unknown as Record<string, string>).hostIp : undefined;
|
||||
const hostIp: string = (inviteData.hostIp as string) || fromIp || invite.hostIp;
|
||||
const hostPort: number = (inviteData.hostPort as number) || invite.hostPort;
|
||||
const sessionId = (inviteData.signalingSessionId as string) || invite.signalingSessionId || "";
|
||||
|
||||
if (sessionId) {
|
||||
setStatus("Connecting via relay...");
|
||||
@@ -77,8 +79,8 @@ export default function ChooseInstanceModal({
|
||||
]);
|
||||
}
|
||||
onClose();
|
||||
} catch (e: any) {
|
||||
setError(e.toString());
|
||||
} catch (e: unknown) {
|
||||
setError(e instanceof Error ? e.message : String(e));
|
||||
setStatus("");
|
||||
setIsJoining(false);
|
||||
}
|
||||
@@ -101,7 +103,7 @@ export default function ChooseInstanceModal({
|
||||
setFocusIndex((prev) => (prev - 1 + max) % max);
|
||||
} else if (e.key === "Enter") {
|
||||
if (focusIndex === 0 && validInstances.length > 0) {
|
||||
const currentIdx = validInstances.findIndex((i: any) => i.instanceId === selectedInstance);
|
||||
const currentIdx = validInstances.findIndex((i: Edition) => i.instanceId === selectedInstance);
|
||||
const next = (currentIdx + 1) % validInstances.length;
|
||||
setSelectedInstance(validInstances[next].instanceId);
|
||||
playPressSound();
|
||||
@@ -147,7 +149,7 @@ export default function ChooseInstanceModal({
|
||||
{validInstances.length > 0 ? (
|
||||
<div className="w-full mb-4 flex flex-col gap-2 max-h-[300px] overflow-y-auto"
|
||||
style={{ scrollbarWidth: "thin", scrollbarColor: "#373737 transparent" }}>
|
||||
{validInstances.map((inst: any) => {
|
||||
{validInstances.map((inst: Edition) => {
|
||||
const isSelected = selectedInstance === inst.instanceId;
|
||||
return (
|
||||
<div
|
||||
|
||||
@@ -41,7 +41,15 @@ export default function CustomTUModal({
|
||||
playBackSound,
|
||||
editingEdition = null,
|
||||
initialPath = "",
|
||||
}: any) {
|
||||
}: {
|
||||
isOpen: boolean;
|
||||
onClose: () => void;
|
||||
onImport: (ed: { name: string; desc: string; url: string; path?: string }) => void;
|
||||
playPressSound: (sound?: string) => void;
|
||||
playBackSound: (sound?: string) => void;
|
||||
editingEdition?: { name: string; desc: string; url: string; path?: string } | null;
|
||||
initialPath?: string;
|
||||
}) {
|
||||
const [name, setName] = useState("");
|
||||
const [desc, setDesc] = useState("");
|
||||
const [url, setUrl] = useState("");
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { useState, useEffect } from "react";
|
||||
import { motion } from "framer-motion";
|
||||
import { TauriService } from "../../services/TauriService";
|
||||
import type { Edition } from "../../types/edition";
|
||||
|
||||
export default function SetUidModal({
|
||||
isOpen,
|
||||
@@ -10,7 +11,15 @@ export default function SetUidModal({
|
||||
instances,
|
||||
installedVersions,
|
||||
targetInstanceId,
|
||||
}: any) {
|
||||
}: {
|
||||
isOpen: boolean;
|
||||
onClose: () => void;
|
||||
playPressSound: (s?: string) => void;
|
||||
playBackSound: (s?: string) => void;
|
||||
instances: Edition[];
|
||||
installedVersions: string[];
|
||||
targetInstanceId: string;
|
||||
}) {
|
||||
const [mode, setMode] = useState<"manual" | "copy">("manual");
|
||||
const [uid, setUid] = useState("0xFF02F0C87E8AC1F2");
|
||||
const [selectedInstance, setSelectedInstance] = useState("");
|
||||
@@ -44,7 +53,7 @@ export default function SetUidModal({
|
||||
}
|
||||
}, [isOpen, targetInstanceId]);
|
||||
|
||||
const validInstances = instances.filter((i: any) => installedVersions.includes(i.instanceId) && i.instanceId !== targetInstanceId);
|
||||
const validInstances = instances.filter((i: Edition) => installedVersions.includes(i.instanceId) && i.instanceId !== targetInstanceId);
|
||||
const handleSave = async () => {
|
||||
playPressSound("save_click.wav");
|
||||
try {
|
||||
@@ -74,8 +83,8 @@ export default function SetUidModal({
|
||||
await TauriService.writeBinaryFile(`${targetPath}/uid.dat`, encodedUid);
|
||||
|
||||
onClose();
|
||||
} catch (e: any) {
|
||||
setError(e.toString());
|
||||
} catch (e: unknown) {
|
||||
setError(e instanceof Error ? e.message : String(e));
|
||||
}
|
||||
};
|
||||
|
||||
@@ -198,7 +207,7 @@ export default function SetUidModal({
|
||||
<span className="truncate">
|
||||
{selectedInstance
|
||||
? (() => {
|
||||
const i = validInstances.find((inst: any) => inst.instanceId === selectedInstance);
|
||||
const i = validInstances.find((inst: Edition) => inst.instanceId === selectedInstance);
|
||||
return i ? `${i.name} ${i.selectedBranch ? `(${i.selectedBranch})` : ""}` : "-- Select an Instance --";
|
||||
})()
|
||||
: "-- Select an Instance --"}
|
||||
@@ -208,7 +217,7 @@ export default function SetUidModal({
|
||||
|
||||
{isDropdownOpen && validInstances.length > 0 && (
|
||||
<div className="absolute top-[60px] left-0 w-full max-h-40 overflow-y-auto bg-black/90 border-2 border-[#373737] z-50 flex flex-col custom-scrollbar shadow-xl" style={{ imageRendering: "pixelated" }}>
|
||||
{validInstances.map((i: any) => (
|
||||
{validInstances.map((i: Edition) => (
|
||||
<div
|
||||
key={i.instanceId}
|
||||
onClick={() => {
|
||||
|
||||
@@ -6,7 +6,12 @@ export default function TeamModal({
|
||||
onClose,
|
||||
playPressSound,
|
||||
playSfx,
|
||||
}: any) {
|
||||
}: {
|
||||
isOpen: boolean;
|
||||
onClose: () => void;
|
||||
playPressSound: () => void;
|
||||
playSfx: (sound: string) => void;
|
||||
}) {
|
||||
const [focusIndex, setFocusIndex] = useState(0);
|
||||
|
||||
const team = [
|
||||
|
||||
Reference in New Issue
Block a user