From 9058e192ba3cef3ac1583f68015593a410309ec5 Mon Sep 17 00:00:00 2001 From: Max Richter Date: Thu, 10 Aug 2023 18:59:23 +0200 Subject: [PATCH] feat: create new series command --- fresh.gen.ts | 10 +-- islands/KMenu/commands.ts | 2 + islands/KMenu/commands/create_series.ts | 81 +++++++++++++++++++++++++ 3 files changed, 89 insertions(+), 4 deletions(-) create mode 100644 islands/KMenu/commands/create_series.ts diff --git a/fresh.gen.ts b/fresh.gen.ts index 93d662f..0b3ff63 100644 --- a/fresh.gen.ts +++ b/fresh.gen.ts @@ -44,8 +44,9 @@ import * as $$4 from "./islands/KMenu/commands/add_movie_infos.ts"; import * as $$5 from "./islands/KMenu/commands/add_series_infos.ts"; import * as $$6 from "./islands/KMenu/commands/create_article.ts"; import * as $$7 from "./islands/KMenu/commands/create_movie.ts"; -import * as $$8 from "./islands/KMenu/types.ts"; -import * as $$9 from "./islands/Search.tsx"; +import * as $$8 from "./islands/KMenu/commands/create_series.ts"; +import * as $$9 from "./islands/KMenu/types.ts"; +import * as $$10 from "./islands/Search.tsx"; const manifest = { routes: { @@ -93,8 +94,9 @@ const manifest = { "./islands/KMenu/commands/add_series_infos.ts": $$5, "./islands/KMenu/commands/create_article.ts": $$6, "./islands/KMenu/commands/create_movie.ts": $$7, - "./islands/KMenu/types.ts": $$8, - "./islands/Search.tsx": $$9, + "./islands/KMenu/commands/create_series.ts": $$8, + "./islands/KMenu/types.ts": $$9, + "./islands/Search.tsx": $$10, }, baseUrl: import.meta.url, }; diff --git a/islands/KMenu/commands.ts b/islands/KMenu/commands.ts index 9e9756c..cd8fa6f 100644 --- a/islands/KMenu/commands.ts +++ b/islands/KMenu/commands.ts @@ -4,6 +4,7 @@ import { createNewMovie } from "@islands/KMenu/commands/create_movie.ts"; import { createNewArticle } from "@islands/KMenu/commands/create_article.ts"; import { getCookie } from "@lib/string.ts"; import { addSeriesInfo } from "@islands/KMenu/commands/add_series_infos.ts"; +import { createNewSeries } from "@islands/KMenu/commands/create_series.ts"; export const menus: Record = { main: { @@ -70,6 +71,7 @@ export const menus: Record = { addSeriesInfo, createNewArticle, createNewMovie, + createNewSeries, addMovieInfos, ], }, diff --git a/islands/KMenu/commands/create_series.ts b/islands/KMenu/commands/create_series.ts new file mode 100644 index 0000000..51f5725 --- /dev/null +++ b/islands/KMenu/commands/create_series.ts @@ -0,0 +1,81 @@ +import { MenuEntry } from "@islands/KMenu/types.ts"; +import { TMDBSeries } from "@lib/types.ts"; +import { debounce } from "@lib/helpers.ts"; +import { Series } from "@lib/resource/series.ts"; +import { getCookie } from "@lib/string.ts"; + +export const createNewSeries: MenuEntry = { + title: "Create new series", + meta: "", + icon: "IconSquareRoundedPlus", + cb: (state) => { + state.menus["input_link"] = { + title: "Search", + entries: [], + }; + + state.menus["loading"] = { + title: "Search", + entries: [ + { + title: "Loading", + icon: "IconLoader2", + cb() { + }, + }, + ], + }; + + state.activeMenu.value = "input_link"; + state.activeState.value = "normal"; + + let currentQuery: string; + const search = debounce(async function search(query: string) { + currentQuery = query; + if (query.length < 2) { + return; + } + + const response = await fetch( + "/api/tmdb/query?q=" + query + "&type=series", + ); + + const series = await response.json() as TMDBSeries[]; + + if (query !== currentQuery) return; + + state.menus["input_link"] = { + title: "Search", + entries: series.map((r) => { + return { + title: `${r.name} - ${r.first_air_date}`, + cb: async () => { + state.activeState.value = "loading"; + const response = await fetch("/api/series/" + r.id, { + method: "POST", + }); + const series = await response.json() as Series; + unsub(); + window.location.href = "/series/" + series.name; + }, + }; + }), + }; + state.commandInput.value = ""; + state.activeMenu.value = "input_link"; + }, 500); + + const unsub = state.commandInput.subscribe((value) => { + state.activeMenu.value = "loading"; + search(value); + }); + }, + visible: () => { + if (!getCookie("session_cookie")) return false; + if ( + !globalThis?.location?.pathname?.includes("series") && + globalThis?.location?.pathname !== "/" + ) return false; + return true; + }, +};