diff --git a/surfsense_web/atoms/search-spaces/search-space-mutation.atoms.ts b/surfsense_web/atoms/search-spaces/search-space-mutation.atoms.ts index a97cc3379..ea1415869 100644 --- a/surfsense_web/atoms/search-spaces/search-space-mutation.atoms.ts +++ b/surfsense_web/atoms/search-spaces/search-space-mutation.atoms.ts @@ -3,6 +3,7 @@ import { toast } from "sonner"; import type { CreateSearchSpaceRequest, UpdateSearchSpaceRequest, + DeleteSearchSpaceRequest, } from "@/contracts/types/search-space.types"; import { activeSearchSpaceIdAtom } from "./search-space-query.atoms"; import { searchSpacesApiService } from "@/lib/apis/search-spaces-api.service"; @@ -48,3 +49,27 @@ export const updateSearchSpaceMutationAtom = atomWithMutation((get) => { }, }; }); + +export const deleteSearchSpaceMutationAtom = atomWithMutation((get) => { + const activeSearchSpaceId = get(activeSearchSpaceIdAtom); + + return { + mutationKey: ["delete-search-space", activeSearchSpaceId], + enabled: !!activeSearchSpaceId, + mutationFn: async (request: DeleteSearchSpaceRequest) => { + return searchSpacesApiService.deleteSearchSpace(request); + }, + + onSuccess: (_, request: DeleteSearchSpaceRequest) => { + toast.success("Search space deleted successfully"); + queryClient.invalidateQueries({ + queryKey: cacheKeys.searchSpaces.all, + }); + if (request.id) { + queryClient.removeQueries({ + queryKey: cacheKeys.searchSpaces.detail(String(request.id)), + }); + } + }, + }; +});