diff --git a/.gitignore b/.gitignore index d2ac76d14..342c0b258 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ .flashrank_cache* -podcasts/ +./surfsense_backend/podcasts/ .env node_modules/ .ruff_cache/ \ No newline at end of file diff --git a/surfsense_web/atoms/podcasts/podcast-mutation.atoms.ts b/surfsense_web/atoms/podcasts/podcast-mutation.atoms.ts new file mode 100644 index 000000000..c86c38391 --- /dev/null +++ b/surfsense_web/atoms/podcasts/podcast-mutation.atoms.ts @@ -0,0 +1,27 @@ +import { atomWithMutation } from "jotai-tanstack-query"; +import { toast } from "sonner"; +import { activeSearchSpaceIdAtom } from "@/atoms/seach-spaces/seach-space-queries.atom"; +import type { DeletePodcastRequest, Podcast } from "@/contracts/types/podcast.types"; +import { podcastsApiService } from "@/lib/apis/podcasts-api.service"; +import { cacheKeys } from "@/lib/query-client/cache-keys"; +import { queryClient } from "@/lib/query-client/client"; + +export const deletePodcastMutationAtom = atomWithMutation((get) => { + const searchSpaceId = get(activeSearchSpaceIdAtom); + const authToken = localStorage.getItem("surfsense_bearer_token"); + + return { + mutationKey: cacheKeys.podcasts(), + enabled: !!searchSpaceId && !!authToken, + mutationFn: async (request: DeletePodcastRequest) => { + return podcastsApiService.deletePodcast(request); + }, + + onSuccess: (_, request: DeletePodcastRequest) => { + toast.success("Podcast deleted successfully"); + queryClient.setQueryData(cacheKeys.podcasts(), (oldData: Podcast[]) => { + return oldData.filter((podcast) => podcast.id !== request.id); + }); + }, + }; +});