diff --git a/src/lib/content/WatchedDeleteBtn.svelte b/src/lib/content/WatchedDeleteBtn.svelte new file mode 100644 index 00000000..9d14dbeb --- /dev/null +++ b/src/lib/content/WatchedDeleteBtn.svelte @@ -0,0 +1,65 @@ + + + + +{#if showConfirmDeleteModalCallback !== undefined} + { + if (!showConfirmDeleteModalCallback) { + notify({ + type: "error", + text: "Somehow the deletion callback doesn't exist anymore so we couldn't delete! Please try again", + time: 5000, + }); + return; + } + if (confirmed) { + showConfirmDeleteModalCallback(); + } + showConfirmDeleteModalCallback = undefined; + }} + /> +{/if} + + diff --git a/src/lib/poster/Poster.svelte b/src/lib/poster/Poster.svelte index 310b09f4..4c74f5e1 100644 --- a/src/lib/poster/Poster.svelte +++ b/src/lib/poster/Poster.svelte @@ -20,6 +20,7 @@ import ExtraDetails from "./ExtraDetails.svelte"; import { buildExtraDetails } from "./lib"; import { decode } from "blurhash"; + import WatchedDeleteModal from "../watched/WatchedDeleteModal.svelte"; interface Props { media: Media; @@ -75,6 +76,10 @@ let containerEl: HTMLDivElement | undefined = $state(); let bhCanvas: HTMLCanvasElement | undefined = $state(); + // If confirm delete modal should be shown, then this will be + // set to a callback. + let showConfirmDeleteModalCallback: (() => void) | undefined = $state(); + const meta: | { id: number | undefined; @@ -162,11 +167,13 @@ }); return; } - removeWatched(watched.id).then((removed) => { - if (removed) { - watched = undefined; - } - }); + showConfirmDeleteModalCallback = () => { + removeWatched(watched.id).then((removed) => { + if (removed) { + watched = undefined; + } + }); + }; return; } if (type == watched?.status || !meta?.id) return; @@ -381,6 +388,26 @@ +{#if showConfirmDeleteModalCallback !== undefined} + { + if (!showConfirmDeleteModalCallback) { + notify({ + type: "error", + text: "Somehow the deletion callback doesn't exist anymore so we couldn't delete! Please try again", + time: 5000, + }); + return; + } + if (confirmed) { + showConfirmDeleteModalCallback(); + } + showConfirmDeleteModalCallback = undefined; + }} + /> +{/if} + diff --git a/src/routes/(app)/game/[id]/+page.svelte b/src/routes/(app)/game/[id]/+page.svelte index b087e0a6..93ec6004 100644 --- a/src/routes/(app)/game/[id]/+page.svelte +++ b/src/routes/(app)/game/[id]/+page.svelte @@ -18,6 +18,7 @@ import PosterImage from "@/lib/content/PosterImage.svelte"; import Poster from "@/lib/poster/Poster.svelte"; import ExpandableText from "@/lib/content/ExpandableText.svelte"; + import WatchedDeleteBtn from "@/lib/content/WatchedDeleteBtn.svelte"; let { data } = $props(); @@ -78,16 +79,6 @@ return false; } } - - async function deleteWatched() { - if (game?.watched) { - if (await removeWatched(game.watched.id)) { - game.watched = undefined; - } - return; - } - console.error("deleteWatched: no wlistItem.. can't delete"); - } @@ -173,13 +164,15 @@ > - + { + if (game) { + game.watched = undefined; + } + }} + /> {/if} @@ -277,12 +270,6 @@ margin-left: auto; } } - - .delete-btn { - &:hover { - color: $error; - } - } } } } diff --git a/src/routes/(app)/movie/[id]/+page.svelte b/src/routes/(app)/movie/[id]/+page.svelte index 096cb1ab..115fefbc 100644 --- a/src/routes/(app)/movie/[id]/+page.svelte +++ b/src/routes/(app)/movie/[id]/+page.svelte @@ -32,6 +32,7 @@ import ViewTrailerButton from "@/lib/content/ViewTrailerButton.svelte"; import PosterImage from "@/lib/content/PosterImage.svelte"; import ExpandableText from "@/lib/content/ExpandableText.svelte"; + import WatchedDeleteBtn from "@/lib/content/WatchedDeleteBtn.svelte"; let { data } = $props(); @@ -112,16 +113,6 @@ return false; } } - - async function deleteWatched() { - if (movie?.watched) { - if (await removeWatched(movie.watched.id)) { - movie.watched = undefined; - } - return; - } - console.error("deleteWatched: no wlistItem.. can't delete"); - } @@ -214,13 +205,15 @@ > - + { + if (movie) { + movie.watched = undefined; + } + }} + /> {/if} @@ -359,12 +352,6 @@ margin-left: auto; } } - - .delete-btn { - &:hover { - color: $error; - } - } } } } diff --git a/src/routes/(app)/tv/[id]/+page.svelte b/src/routes/(app)/tv/[id]/+page.svelte index 2edc6db6..159f27a7 100644 --- a/src/routes/(app)/tv/[id]/+page.svelte +++ b/src/routes/(app)/tv/[id]/+page.svelte @@ -33,6 +33,7 @@ import ViewTrailerButton from "@/lib/content/ViewTrailerButton.svelte"; import PosterImage from "@/lib/content/PosterImage.svelte"; import ExpandableText from "@/lib/content/ExpandableText.svelte"; + import WatchedDeleteBtn from "@/lib/content/WatchedDeleteBtn.svelte"; let { data } = $props(); @@ -113,16 +114,6 @@ return false; } } - - async function deleteWatched() { - if (show?.watched) { - if (await removeWatched(show.watched.id)) { - show.watched = undefined; - } - return; - } - console.error("deleteWatched: no wlistItem.. can't delete"); - } @@ -213,13 +204,15 @@ > - + { + if (show) { + show.watched = undefined; + } + }} + /> {/if} @@ -371,12 +364,6 @@ margin-left: auto; } } - - .delete-btn { - &:hover { - color: $error; - } - } } } }