diff --git a/apps/web/src/pages/generate/hooks/useGenerateFormState/useTitleCoverSync.ts b/apps/web/src/pages/generate/hooks/useGenerateFormState/useTitleCoverSync.ts deleted file mode 100755 index 787db90f5..000000000 --- a/apps/web/src/pages/generate/hooks/useGenerateFormState/useTitleCoverSync.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { useEffect, useRef } from "react" -import type { TitleSettings } from "../../types" -import type { CoverConfig } from "../../types/cover" -import type { EditingTemplate } from "@/api/editing-planner" - -interface UseTitleCoverSyncOptions { - selectedTemplate: string - userTemplates: EditingTemplate[] - setTitleSettings: (settings: TitleSettings | ((prev: TitleSettings) => TitleSettings)) => void - setCoverSettings: (settings: CoverConfig | ((prev: CoverConfig) => CoverConfig)) => void -} - -/** - * 当选中模板变化时,自动同步标题和封面配置。 - * - * #1789 修复:userTemplates 用 ref 持有最新值,不放入依赖数组。 - * 否则每次渲染 .filter() 创建的新数组引用都会触发 effect, - * 从模板 title_config 覆盖用户手动修改(如字号滑块拖动),导致回弹。 - */ -export function useTitleCoverSync({ - selectedTemplate, - userTemplates, - setTitleSettings, - setCoverSettings, -}: UseTitleCoverSyncOptions) { - // 用 ref 持有最新 userTemplates,避免数组引用变化导致 effect 反复触发 - const templatesRef = useRef(userTemplates) - templatesRef.current = userTemplates - - useEffect(() => { - const tpl = templatesRef.current.find((t) => t.id === selectedTemplate) - if (tpl?.title_config) { - setTitleSettings((prev: TitleSettings) => ({ - ...prev, - aiAutoSelect: tpl.title_config!.ai_auto_select, - title: tpl.title_config!.content || prev.title, - position: prev.position, // 强制保留默认/用户选择,不从模板同步位置 - font: tpl.title_config!.font_preset || prev.font, - size: tpl.title_config!.font_size || prev.size, - color: tpl.title_config!.font_color || prev.color, - })) - } - if (tpl?.cover_config) { - setCoverSettings((prev: CoverConfig) => ({ - ...prev, - enabled: tpl.cover_config!.enabled ?? prev.enabled, - mode: (tpl.cover_config!.mode as CoverConfig["mode"]) || prev.mode, - frame_time: tpl.cover_config!.frame_time ?? prev.frame_time, - upload_url: tpl.cover_config!.upload_url || prev.upload_url, - ai_suggested_time: tpl.cover_config!.ai_suggested_time ?? prev.ai_suggested_time, - thumbnail_url: tpl.cover_config!.thumbnail_url || prev.thumbnail_url, - })) - } - }, [selectedTemplate, setTitleSettings, setCoverSettings]) - // ↑ 移除 userTemplates,只在 selectedTemplate 真正变化时触发 -}