feat(web): route season and episode release decks
This commit is contained in:
+30
-1
@@ -9,7 +9,9 @@ export type Route =
|
||||
| { kind: "settings" }
|
||||
| { kind: "search"; query: string }
|
||||
| { kind: "releases"; movieId: number }
|
||||
| { kind: "series"; seriesId: number };
|
||||
| { kind: "series"; seriesId: number }
|
||||
| { kind: "seasonReleases"; seriesId: number; seasonNumber: number }
|
||||
| { kind: "episodeReleases"; episodeId: number };
|
||||
|
||||
export function parseRoute(url: URL): Route {
|
||||
const segments = url.pathname.split("/").filter(Boolean);
|
||||
@@ -38,6 +40,29 @@ export function parseRoute(url: URL): Route {
|
||||
return { kind: "series", seriesId };
|
||||
}
|
||||
}
|
||||
if (
|
||||
segments.length === 5 &&
|
||||
segments[0] === "series" &&
|
||||
segments[2] === "seasons" &&
|
||||
segments[4] === "releases"
|
||||
) {
|
||||
const seriesId = Number(segments[1]);
|
||||
const seasonNumber = Number(segments[3]);
|
||||
if (
|
||||
Number.isInteger(seriesId) &&
|
||||
seriesId > 0 &&
|
||||
Number.isInteger(seasonNumber) &&
|
||||
seasonNumber >= 0
|
||||
) {
|
||||
return { kind: "seasonReleases", seriesId, seasonNumber };
|
||||
}
|
||||
}
|
||||
if (segments.length === 3 && segments[0] === "episodes" && segments[2] === "releases") {
|
||||
const episodeId = Number(segments[1]);
|
||||
if (Number.isInteger(episodeId) && episodeId > 0) {
|
||||
return { kind: "episodeReleases", episodeId };
|
||||
}
|
||||
}
|
||||
return { kind: "board" };
|
||||
}
|
||||
|
||||
@@ -57,6 +82,10 @@ export function routePath(route: Route): string {
|
||||
return `/movies/${route.movieId}/releases`;
|
||||
case "series":
|
||||
return `/series/${route.seriesId}`;
|
||||
case "seasonReleases":
|
||||
return `/series/${route.seriesId}/seasons/${route.seasonNumber}/releases`;
|
||||
case "episodeReleases":
|
||||
return `/episodes/${route.episodeId}/releases`;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user