SurfSense/surfsense_web/atoms/podcasts/podcast-mutation.atoms.ts

52 lines
1.8 KiB
TypeScript
Raw Normal View History

2025-11-19 08:12:42 +02:00
import { atomWithMutation } from "jotai-tanstack-query";
import { toast } from "sonner";
import { activeSearchSpaceIdAtom } from "@/atoms/search-spaces/search-space-query.atoms";
2025-11-19 09:40:23 +02:00
import type {
DeletePodcastRequest,
GeneratePodcastRequest,
Podcast,
} from "@/contracts/types/podcast.types";
2025-11-19 08:12:42 +02:00
import { podcastsApiService } from "@/lib/apis/podcasts-api.service";
import { getBearerToken } from "@/lib/auth-utils";
2025-11-19 08:12:42 +02:00
import { cacheKeys } from "@/lib/query-client/cache-keys";
import { queryClient } from "@/lib/query-client/client";
2025-11-19 08:29:33 +02:00
import { globalPodcastsQueryParamsAtom } from "./ui.atoms";
2025-11-19 08:12:42 +02:00
export const deletePodcastMutationAtom = atomWithMutation((get) => {
const searchSpaceId = get(activeSearchSpaceIdAtom);
const authToken = getBearerToken();
2025-11-19 08:29:33 +02:00
const podcastsQueryParams = get(globalPodcastsQueryParamsAtom);
2025-11-19 08:12:42 +02:00
return {
2025-11-19 08:29:33 +02:00
mutationKey: cacheKeys.podcasts.globalQueryParams(podcastsQueryParams),
2025-11-19 08:12:42 +02:00
enabled: !!searchSpaceId && !!authToken,
mutationFn: async (request: DeletePodcastRequest) => {
return podcastsApiService.deletePodcast(request);
},
onSuccess: (_, request: DeletePodcastRequest) => {
toast.success("Podcast deleted successfully");
2025-11-19 08:29:33 +02:00
queryClient.setQueryData(
cacheKeys.podcasts.globalQueryParams(podcastsQueryParams),
(oldData: Podcast[]) => {
return oldData.filter((podcast) => podcast.id !== request.id);
}
);
2025-11-19 08:12:42 +02:00
},
};
});
2025-11-19 09:40:23 +02:00
export const generatePodcastMutationAtom = atomWithMutation((get) => {
const searchSpaceId = get(activeSearchSpaceIdAtom);
const authToken = getBearerToken();
2025-11-19 09:40:23 +02:00
const podcastsQueryParams = get(globalPodcastsQueryParamsAtom);
return {
mutationKey: cacheKeys.podcasts.globalQueryParams(podcastsQueryParams),
enabled: !!searchSpaceId && !!authToken,
mutationFn: async (request: GeneratePodcastRequest) => {
return podcastsApiService.generatePodcast(request);
},
};
});