feat(react): typescriptify everything

This commit is contained in:
neoapps-dev
2026-05-23 18:31:49 +03:00
parent 043d8445f2
commit 736376dc04
33 changed files with 223 additions and 150 deletions
+12 -10
View File
@@ -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
+9 -1
View File
@@ -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("");
+15 -6
View File
@@ -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 -1
View File
@@ -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 = [