No explicit any

This commit is contained in:
2025-12-17 20:10:00 +00:00
parent 18cf0cc140
commit 89001f53da
18 changed files with 257 additions and 205 deletions

View File

@@ -139,7 +139,7 @@ export default function ZxdbExplorer({
<button className="btn btn-primary" type="submit" disabled={loading}>Search</button>
</div>
<div className="col-auto">
<select className="form-select" value={genreId as any} onChange={(e) => setGenreId(e.target.value === "" ? "" : Number(e.target.value))}>
<select className="form-select" value={genreId} onChange={(e) => setGenreId(e.target.value === "" ? "" : Number(e.target.value))}>
<option value="">Genre</option>
{genres.map((g) => (
<option key={g.id} value={g.id}>{g.name}</option>
@@ -147,7 +147,7 @@ export default function ZxdbExplorer({
</select>
</div>
<div className="col-auto">
<select className="form-select" value={languageId as any} onChange={(e) => setLanguageId(e.target.value)}>
<select className="form-select" value={languageId} onChange={(e) => setLanguageId(e.target.value)}>
<option value="">Language</option>
{languages.map((l) => (
<option key={l.id} value={l.id}>{l.name}</option>
@@ -155,7 +155,7 @@ export default function ZxdbExplorer({
</select>
</div>
<div className="col-auto">
<select className="form-select" value={machinetypeId as any} onChange={(e) => setMachinetypeId(e.target.value === "" ? "" : Number(e.target.value))}>
<select className="form-select" value={machinetypeId} onChange={(e) => setMachinetypeId(e.target.value === "" ? "" : Number(e.target.value))}>
<option value="">Machine</option>
{machines.map((m) => (
<option key={m.id} value={m.id}>{m.name}</option>
@@ -163,7 +163,7 @@ export default function ZxdbExplorer({
</select>
</div>
<div className="col-auto">
<select className="form-select" value={sort} onChange={(e) => setSort(e.target.value as any)}>
<select className="form-select" value={sort} onChange={(e) => setSort(e.target.value as "title" | "id_desc")}>
<option value="title">Sort: Title</option>
<option value="id_desc">Sort: Newest</option>
</select>

View File

@@ -194,7 +194,7 @@ export default function EntriesExplorer({
<button className="btn btn-primary" type="submit" disabled={loading}>Search</button>
</div>
<div className="col-auto">
<select className="form-select" value={genreId as any} onChange={(e) => { setGenreId(e.target.value === "" ? "" : Number(e.target.value)); setPage(1); }}>
<select className="form-select" value={genreId} onChange={(e) => { setGenreId(e.target.value === "" ? "" : Number(e.target.value)); setPage(1); }}>
<option value="">Genre</option>
{genres.map((g) => (
<option key={g.id} value={g.id}>{g.name}</option>
@@ -202,7 +202,7 @@ export default function EntriesExplorer({
</select>
</div>
<div className="col-auto">
<select className="form-select" value={languageId as any} onChange={(e) => { setLanguageId(e.target.value); setPage(1); }}>
<select className="form-select" value={languageId} onChange={(e) => { setLanguageId(e.target.value); setPage(1); }}>
<option value="">Language</option>
{languages.map((l) => (
<option key={l.id} value={l.id}>{l.name}</option>
@@ -210,7 +210,7 @@ export default function EntriesExplorer({
</select>
</div>
<div className="col-auto">
<select className="form-select" value={machinetypeId as any} onChange={(e) => { setMachinetypeId(e.target.value === "" ? "" : Number(e.target.value)); setPage(1); }}>
<select className="form-select" value={machinetypeId} onChange={(e) => { setMachinetypeId(e.target.value === "" ? "" : Number(e.target.value)); setPage(1); }}>
<option value="">Machine</option>
{machines.map((m) => (
<option key={m.id} value={m.id}>{m.name}</option>
@@ -218,7 +218,7 @@ export default function EntriesExplorer({
</select>
</div>
<div className="col-auto">
<select className="form-select" value={sort} onChange={(e) => { setSort(e.target.value as any); setPage(1); }}>
<select className="form-select" value={sort} onChange={(e) => { setSort(e.target.value as "title" | "id_desc"); setPage(1); }}>
<option value="title">Sort: Title</option>
<option value="id_desc">Sort: Newest</option>
</select>

View File

@@ -12,5 +12,5 @@ export default async function Page({ params }: { params: Promise<{ id: string }>
const numericId = Number(id);
const data = await getEntryById(numericId);
// For simplicity, let the client render a Not Found state if null
return <EntryDetailClient data={data as any} />;
return <EntryDetailClient data={data} />;
}

View File

@@ -13,7 +13,7 @@ export default async function Page({ searchParams }: { searchParams: Promise<{ [
const genreId = (Array.isArray(sp.genreId) ? sp.genreId[0] : sp.genreId) ?? "";
const languageId = (Array.isArray(sp.languageId) ? sp.languageId[0] : sp.languageId) ?? "";
const machinetypeId = (Array.isArray(sp.machinetypeId) ? sp.machinetypeId[0] : sp.machinetypeId) ?? "";
const sort = ((Array.isArray(sp.sort) ? sp.sort[0] : sp.sort) as any) ?? "id_desc";
const sort = ((Array.isArray(sp.sort) ? sp.sort[0] : sp.sort) ?? "id_desc") as "title" | "id_desc";
const q = (Array.isArray(sp.q) ? sp.q[0] : sp.q) ?? "";
const [initial, genres, langs, machines] = await Promise.all([
@@ -33,10 +33,10 @@ export default async function Page({ searchParams }: { searchParams: Promise<{ [
return (
<EntriesExplorer
initial={initial as any}
initialGenres={genres as any}
initialLanguages={langs as any}
initialMachines={machines as any}
initial={initial}
initialGenres={genres}
initialLanguages={langs}
initialMachines={machines}
initialUrlState={{ q, page, genreId, languageId, machinetypeId, sort }}
/>
);

View File

@@ -12,5 +12,5 @@ export default async function Page({ params, searchParams }: { params: Promise<{
const page = Math.max(1, Number(Array.isArray(sp.page) ? sp.page[0] : sp.page) || 1);
const q = (Array.isArray(sp.q) ? sp.q[0] : sp.q) ?? "";
const initial = await entriesByGenre(numericId, page, 20, q || undefined);
return <GenreDetailClient id={numericId} initial={initial as any} initialQ={q} />;
return <GenreDetailClient id={numericId} initial={initial} initialQ={q} />;
}

View File

@@ -10,5 +10,5 @@ export default async function Page({ searchParams }: { searchParams: Promise<{ [
const q = (Array.isArray(sp.q) ? sp.q[0] : sp.q) ?? "";
const page = Math.max(1, Number(Array.isArray(sp.page) ? sp.page[0] : sp.page) || 1);
const initial = await searchGenres({ q, page, pageSize: 20 });
return <GenresSearch initial={initial as any} initialQ={q} />;
return <GenresSearch initial={initial} initialQ={q} />;
}

View File

@@ -20,5 +20,5 @@ export default async function Page({ params, searchParams }: { params: Promise<{
]);
// Let the client component handle the "not found" simple state
return <LabelDetailClient id={numericId} initial={{ label: label as any, authored: authored as any, published: published as any }} initialTab={tab} initialQ={q} />;
return <LabelDetailClient id={numericId} initial={{ label: label, authored: authored, published: published }} initialTab={tab} initialQ={q} />;
}

View File

@@ -11,5 +11,5 @@ export default async function Page({ searchParams }: { searchParams: Promise<{ [
const q = (Array.isArray(sp.q) ? sp.q[0] : sp.q) ?? "";
const page = Math.max(1, Number(Array.isArray(sp.page) ? sp.page[0] : sp.page) || 1);
const initial = await searchLabels({ q, page, pageSize: 20 });
return <LabelsSearch initial={initial as any} initialQ={q} />;
return <LabelsSearch initial={initial} initialQ={q} />;
}

View File

@@ -11,5 +11,5 @@ export default async function Page({ params, searchParams }: { params: Promise<{
const page = Math.max(1, Number(Array.isArray(sp.page) ? sp.page[0] : sp.page) || 1);
const q = (Array.isArray(sp.q) ? sp.q[0] : sp.q) ?? "";
const initial = await entriesByLanguage(id, page, 20, q || undefined);
return <LanguageDetailClient id={id} initial={initial as any} initialQ={q} />;
return <LanguageDetailClient id={id} initial={initial} initialQ={q} />;
}

View File

@@ -11,5 +11,5 @@ export default async function Page({ searchParams }: { searchParams: Promise<{ [
const q = (Array.isArray(sp.q) ? sp.q[0] : sp.q) ?? "";
const page = Math.max(1, Number(Array.isArray(sp.page) ? sp.page[0] : sp.page) || 1);
const initial = await searchLanguages({ q, page, pageSize: 20 });
return <LanguagesSearch initial={initial as any} initialQ={q} />;
return <LanguagesSearch initial={initial} initialQ={q} />;
}

View File

@@ -11,5 +11,5 @@ export default async function Page({ params, searchParams }: { params: Promise<{
const page = Math.max(1, Number(Array.isArray(sp.page) ? sp.page[0] : sp.page) || 1);
const q = (Array.isArray(sp.q) ? sp.q[0] : sp.q) ?? "";
const initial = await entriesByMachinetype(numericId, page, 20, q || undefined);
return <MachineTypeDetailClient id={numericId} initial={initial as any} initialQ={q} />;
return <MachineTypeDetailClient id={numericId} initial={initial} initialQ={q} />;
}

View File

@@ -10,5 +10,5 @@ export default async function Page({ searchParams }: { searchParams: Promise<{ [
const q = (Array.isArray(sp.q) ? sp.q[0] : sp.q) ?? "";
const page = Math.max(1, Number(Array.isArray(sp.page) ? sp.page[0] : sp.page) || 1);
const initial = await searchMachinetypes({ q, page, pageSize: 20 });
return <MachineTypesSearch initial={initial as any} initialQ={q} />;
return <MachineTypesSearch initial={initial} initialQ={q} />;
}

View File

@@ -286,7 +286,7 @@ export default function ReleasesExplorer({
<label className="form-check-label" htmlFor="demoCheck">Demo only</label>
</div>
<div className="col-auto">
<select className="form-select" value={sort} onChange={(e) => { setSort(e.target.value as any); setPage(1); }}>
<select className="form-select" value={sort} onChange={(e) => { setSort(e.target.value); setPage(1); }}>
<option value="year_desc">Sort: Newest</option>
<option value="year_asc">Sort: Oldest</option>
<option value="title">Sort: Title</option>

View File

@@ -13,7 +13,7 @@ export default async function Page({ searchParams }: { searchParams: Promise<{ [
const q = (Array.isArray(sp.q) ? sp.q[0] : sp.q) ?? "";
const yearStr = (Array.isArray(sp.year) ? sp.year[0] : sp.year) ?? "";
const year = yearStr ? Number(yearStr) : undefined;
const sort = ((Array.isArray(sp.sort) ? sp.sort[0] : sp.sort) as any) ?? "year_desc";
const sort = ((Array.isArray(sp.sort) ? sp.sort[0] : sp.sort) ?? "year_desc") as "year_desc" | "year_asc" | "title" | "entry_id_desc";
const dLanguageId = (Array.isArray(sp.dLanguageId) ? sp.dLanguageId[0] : sp.dLanguageId) ?? "";
const dMachinetypeIdStr = (Array.isArray(sp.dMachinetypeId) ? sp.dMachinetypeId[0] : sp.dMachinetypeId) ?? "";
const dMachinetypeId = dMachinetypeIdStr ? Number(dMachinetypeIdStr) : undefined;
@@ -34,7 +34,7 @@ export default async function Page({ searchParams }: { searchParams: Promise<{ [
return (
<ReleasesExplorer
initial={initialPlain as any}
initial={initialPlain}
initialUrlState={{ q, page, year: yearStr, sort, dLanguageId, dMachinetypeId: dMachinetypeIdStr, filetypeId: filetypeIdStr, schemetypeId, sourcetypeId, casetypeId, isDemo: isDemoStr }}
/>
);