diff options
Diffstat (limited to 'apps/web/hooks/use-project-mutations.ts')
| -rw-r--r-- | apps/web/hooks/use-project-mutations.ts | 69 |
1 files changed, 36 insertions, 33 deletions
diff --git a/apps/web/hooks/use-project-mutations.ts b/apps/web/hooks/use-project-mutations.ts index a6766f4e..3ec24176 100644 --- a/apps/web/hooks/use-project-mutations.ts +++ b/apps/web/hooks/use-project-mutations.ts @@ -1,41 +1,44 @@ -"use client"; +"use client" -import { $fetch } from "@lib/api"; -import { useMutation, useQueryClient } from "@tanstack/react-query"; -import { toast } from "sonner"; -import { useProject } from "@/stores"; +import { $fetch } from "@lib/api" +import { useMutation, useQueryClient } from "@tanstack/react-query" +import { toast } from "sonner" +import { useProject } from "@/stores" export function useProjectMutations() { - const queryClient = useQueryClient(); - const { selectedProject, setSelectedProject } = useProject(); + const queryClient = useQueryClient() + const { selectedProject, setSelectedProject } = useProject() const createProjectMutation = useMutation({ - mutationFn: async (name: string) => { + mutationFn: async (input: string | { name: string; emoji?: string }) => { + const { name, emoji } = + typeof input === "string" ? { name: input, emoji: undefined } : input + const response = await $fetch("@post/projects", { - body: { name }, - }); + body: { name, emoji }, + }) if (response.error) { - throw new Error(response.error?.message || "Failed to create project"); + throw new Error(response.error?.message || "Failed to create project") } - return response.data; + return response.data }, onSuccess: (data) => { - toast.success("Project created successfully!"); - queryClient.invalidateQueries({ queryKey: ["projects"] }); + toast.success("Project created successfully!") + queryClient.invalidateQueries({ queryKey: ["projects"] }) // Automatically switch to the newly created project if (data?.containerTag) { - setSelectedProject(data.containerTag); + setSelectedProject(data.containerTag) } }, onError: (error) => { toast.error("Failed to create project", { description: error instanceof Error ? error.message : "Unknown error", - }); + }) }, - }); + }) const deleteProjectMutation = useMutation({ mutationFn: async ({ @@ -43,47 +46,47 @@ export function useProjectMutations() { action, targetProjectId, }: { - projectId: string; - action: "move" | "delete"; - targetProjectId?: string; + projectId: string + action: "move" | "delete" + targetProjectId?: string }) => { const response = await $fetch(`@delete/projects/${projectId}`, { body: { action, targetProjectId }, - }); + }) if (response.error) { - throw new Error(response.error?.message || "Failed to delete project"); + throw new Error(response.error?.message || "Failed to delete project") } - return response.data; + return response.data }, onSuccess: (_, variables) => { - toast.success("Project deleted successfully"); - queryClient.invalidateQueries({ queryKey: ["projects"] }); + toast.success("Project deleted successfully") + queryClient.invalidateQueries({ queryKey: ["projects"] }) // If we deleted the selected project, switch to default const deletedProject = queryClient .getQueryData<any[]>(["projects"]) - ?.find((p) => p.id === variables.projectId); + ?.find((p) => p.id === variables.projectId) if (deletedProject?.containerTag === selectedProject) { - setSelectedProject("sm_project_default"); + setSelectedProject("sm_project_default") } }, onError: (error) => { toast.error("Failed to delete project", { description: error instanceof Error ? error.message : "Unknown error", - }); + }) }, - }); + }) const switchProject = (containerTag: string) => { - setSelectedProject(containerTag); - toast.success("Project switched successfully"); - }; + setSelectedProject(containerTag) + toast.success("Project switched successfully") + } return { createProjectMutation, deleteProjectMutation, switchProject, - }; + } } |