aboutsummaryrefslogtreecommitdiff
path: root/apps/web/hooks/use-project-mutations.ts
diff options
context:
space:
mode:
Diffstat (limited to 'apps/web/hooks/use-project-mutations.ts')
-rw-r--r--apps/web/hooks/use-project-mutations.ts69
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,
- };
+ }
}