返回 presentation-ai
useBlankPresentationCreator.ts
根目录 / src / hooks / presentation / useBlankPresentationCreator.ts
1 import { createBlankPresentation } from "@/app/_actions/notebook/presentation/presentationActions";
2 import { usePresentationState } from "@/states/presentation-state";
3 import { useTheme } from "next-themes";
4 import { useRouter } from "next/navigation";
5 import { useCallback, useState } from "react";
6 import { toast } from "sonner";
7
8 export function useBlankPresentationCreator() {
9 const router = useRouter();
10 const { resolvedTheme } = useTheme();
11 const [isCreating, setIsCreating] = useState(false);
12 const { language, setCurrentPresentation, setTheme } = usePresentationState();
13
14 const createBlank = useCallback(async () => {
15 if (isCreating) return;
16
17 setIsCreating(true);
18 try {
19 const theme = resolvedTheme === "dark" ? "ebony" : "mystique";
20
21 const result = await createBlankPresentation(
22 "Untitled Presentation",
23 theme,
24 language,
25 );
26
27 if (result.success && result.presentation) {
28 setTheme(theme);
29 setCurrentPresentation(
30 result.presentation.id,
31 result.presentation.title,
32 );
33 router.push(`/presentation/${result.presentation.id}`);
34 } else {
35 toast.error(result.message || "Failed to create presentation");
36 }
37 } catch (error) {
38 console.error("Error creating blank presentation:", error);
39 toast.error("Failed to create presentation");
40 } finally {
41 setIsCreating(false);
42 }
43 }, [
44 isCreating,
45 language,
46 resolvedTheme,
47 router,
48 setCurrentPresentation,
49 setTheme,
50 ]);
51
52 return {
53 createBlank,
54 isCreating,
55 };
56 }
57
57 lines TYPESCRIPT