diff --git a/app/service/Interaction/ScriptService.ts b/app/service/Interaction/ScriptService.ts index a9d8519..9071141 100644 --- a/app/service/Interaction/ScriptService.ts +++ b/app/service/Interaction/ScriptService.ts @@ -90,7 +90,7 @@ export interface UseScriptService { language: string ) => Promise; /** 设置任何属性 */ - setAnyAttribute: (type: string, value: SetStateAction, tags?: string[]) => void; + setAnyAttribute: any; } /** @@ -389,41 +389,42 @@ export const useScriptService = (): UseScriptService => { ); const setAnyAttributeWrapper = useCallback( - (type: string, value: SetStateAction, tags?: string[]) => { + (type: string, value: string,callback: (old: string) => void=() => {}) => { + console.log('setAnyAttributeWrapper', type); if (type === 'synopsis') { setFieldOld(synopsis) - scriptEditUseCase.replaceScript(fieldOld,synopsis) + scriptEditUseCase.replaceScript(fieldOld,value ) setSynopsisWrapper(value); } else if (type === 'categories') { setFieldOld(categories.join(',')) - scriptEditUseCase.replaceScript(fieldOld,categories.join(',')) - setCategoriesWrapper(tags || []); + scriptEditUseCase.replaceScript(fieldOld,value) + setCategoriesWrapper(value.split(',') || []); } else if (type === 'protagonist') { setFieldOld(protagonist) - scriptEditUseCase.replaceScript(fieldOld,protagonist) + scriptEditUseCase.replaceScript(fieldOld,value) setProtagonistWrapper(value); } else if (type === 'incitingIncident') { setFieldOld(incitingIncident) - scriptEditUseCase.replaceScript(fieldOld,incitingIncident) + scriptEditUseCase.replaceScript(fieldOld,value) setIncitingIncidentWrapper(value); } else if (type === 'problem') { setFieldOld(problem) - scriptEditUseCase.replaceScript(fieldOld,problem) + scriptEditUseCase.replaceScript(fieldOld,value) setProblemWrapper(value); } else if (type === 'conflict') { setFieldOld(conflict) - scriptEditUseCase.replaceScript(fieldOld,conflict) + scriptEditUseCase.replaceScript(fieldOld,value) setConflictWrapper(value); } else if (type === 'stakes') { setFieldOld(stakes) - scriptEditUseCase.replaceScript(fieldOld,stakes) + scriptEditUseCase.replaceScript(fieldOld,value) setStakesWrapper(value); } else if (type === 'characterArc') { setFieldOld(characterArc) - scriptEditUseCase.replaceScript(fieldOld,characterArc) + scriptEditUseCase.replaceScript(fieldOld,value) setCharacterArcWrapper(value); } - + callback(fieldOld) }, [categories, characterArc, conflict, fieldOld, incitingIncident, problem, protagonist, scriptEditUseCase, setCategoriesWrapper, setCharacterArcWrapper, setConflictWrapper, setIncitingIncidentWrapper, setProblemWrapper, setProtagonistWrapper, setStakesWrapper, setSynopsisWrapper, stakes, synopsis] ); diff --git a/components/pages/work-flow.tsx b/components/pages/work-flow.tsx index b24e582..1f024ed 100644 --- a/components/pages/work-flow.tsx +++ b/components/pages/work-flow.tsx @@ -45,7 +45,8 @@ export default function WorkFlow() { isPauseWorkFlow, mode, setIsPauseWorkFlow, - setAnyAttribute + setAnyAttribute, + applyScript } = useWorkflowData(); const { @@ -193,6 +194,8 @@ export default function WorkFlow() { setIsPauseWorkFlow={setIsPauseWorkFlow} setAnyAttribute={setAnyAttribute} isPauseWorkFlow={isPauseWorkFlow} + applyScript={applyScript} + mode={mode} /> diff --git a/components/pages/work-flow/media-viewer.tsx b/components/pages/work-flow/media-viewer.tsx index 1adbacd..8ee3be3 100644 --- a/components/pages/work-flow/media-viewer.tsx +++ b/components/pages/work-flow/media-viewer.tsx @@ -26,8 +26,10 @@ interface MediaViewerProps { onTogglePlay: () => void; final?: any; setIsPauseWorkFlow: (isPause: boolean) => void; - setAnyAttribute: (type: string, value: SetStateAction, tags?: string[]) => void; + setAnyAttribute: any; isPauseWorkFlow: boolean; + applyScript: any; + mode: string; } export function MediaViewer({ @@ -48,7 +50,9 @@ export function MediaViewer({ final, setIsPauseWorkFlow, setAnyAttribute, - isPauseWorkFlow + isPauseWorkFlow, + applyScript, + mode }: MediaViewerProps) { const mainVideoRef = useRef(null); const finalVideoRef = useRef(null); @@ -812,7 +816,14 @@ export function MediaViewer({
{ scriptData ? ( - + ) : (
diff --git a/components/pages/work-flow/use-workflow-data.tsx b/components/pages/work-flow/use-workflow-data.tsx index ffb8a34..7871948 100644 --- a/components/pages/work-flow/use-workflow-data.tsx +++ b/components/pages/work-flow/use-workflow-data.tsx @@ -94,7 +94,11 @@ export function useWorkflowData() { // 初始化剧本 useEffect(() => { console.log('开始初始化剧本', originalText); - originalText && initializeFromProject(episodeId, originalText); + originalText && initializeFromProject(episodeId, originalText).then(() => { + console.log('应用剧本'); + // 默认模式下 应用剧本 + mode.includes('auto') && applyScript(); + }); }, [originalText]); // 监听剧本加载完毕 useEffect(() => { @@ -106,13 +110,8 @@ export function useWorkflowData() { }, [scriptBlocksMemo]); // 监听继续 请求更新数据 useEffect(() => { - // 应用剧本 自动模式 默认应用剧本 - console.log('isPauseWorkFlow', isPauseWorkFlow, currentStep, scriptBlocksMemo.length, mode); - if (!isPauseWorkFlow && currentStep === '0' && scriptBlocksMemo.length > 0 && mode.includes('auto')) { - console.log('应用剧本'); - applyScript(); - } - }, [isPauseWorkFlow, scriptBlocksMemo]); + + }, [isPauseWorkFlow]); // 自动开始播放一轮 const autoPlaySketch = useCallback(() => { @@ -615,6 +614,7 @@ export function useWorkflowData() { isPauseWorkFlow, mode, setIsPauseWorkFlow, - setAnyAttribute + setAnyAttribute, + applyScript }; } \ No newline at end of file diff --git a/components/script-renderer/ScriptRenderer.tsx b/components/script-renderer/ScriptRenderer.tsx index bfbb329..3ae72ad 100644 --- a/components/script-renderer/ScriptRenderer.tsx +++ b/components/script-renderer/ScriptRenderer.tsx @@ -10,11 +10,13 @@ import { TypewriterText } from '@/components/workflow/work-office/common/Typewri interface ScriptRendererProps { data: any[]; setIsPauseWorkFlow: (isPause: boolean) => void; - setAnyAttribute: (type: string, value: SetStateAction, tags?: string[]) => void; + setAnyAttribute: any; isPauseWorkFlow: boolean; + applyScript: any; + mode: string; } -export const ScriptRenderer: React.FC = ({ data, setIsPauseWorkFlow, setAnyAttribute, isPauseWorkFlow }) => { +export const ScriptRenderer: React.FC = ({ data, setIsPauseWorkFlow, setAnyAttribute, isPauseWorkFlow, applyScript, mode }) => { const [activeBlockId, setActiveBlockId] = useState(null); const [hoveredBlockId, setHoveredBlockId] = useState(null); const contentRefs = useRef<{ [key: string]: HTMLDivElement | null }>({}); @@ -111,7 +113,12 @@ export const ScriptRenderer: React.FC = ({ data, setIsPause if (contentEditableRef.current) { const text = contentEditableRef.current.innerText; console.log('contentEditableRef---text', text); - setAnyAttribute(block.id, text); + setAnyAttribute(block.id, text,(old: string)=>{ + if(old!==text){ + mode.includes('auto') && applyScript(); + setIsPauseWorkFlow(false); + } + }); } }; @@ -127,7 +134,12 @@ export const ScriptRenderer: React.FC = ({ data, setIsPause } setIsPauseWorkFlow(true); setAddThemeTag(value); - setAnyAttribute('categories', '', value); + setAnyAttribute('categories', value.join(','),(old: string)=>{ + if(old!==value.join(',')){ + mode.includes('auto') && applyScript(); + setIsPauseWorkFlow(false); + } + }); }; const handleEditBlock = (block: ScriptBlock) => { diff --git a/components/ui/edit-modal.tsx b/components/ui/edit-modal.tsx index 790e431..af5fe86 100644 --- a/components/ui/edit-modal.tsx +++ b/components/ui/edit-modal.tsx @@ -24,7 +24,7 @@ interface EditModalProps { roles?: any[]; music?: any; setIsPauseWorkFlow: (isPauseWorkFlow: boolean) => void; - setAnyAttribute: (type: string, value: SetStateAction, tags?: string[]) => void; + setAnyAttribute: any; isPauseWorkFlow: boolean; scriptData: any[] | null; } diff --git a/components/ui/script-tab-content.tsx b/components/ui/script-tab-content.tsx index 90bb3ba..a0218b7 100644 --- a/components/ui/script-tab-content.tsx +++ b/components/ui/script-tab-content.tsx @@ -7,7 +7,7 @@ import { ScriptRenderer } from '@/components/script-renderer/ScriptRenderer'; interface ScriptTabContentProps { scriptData: any[] | null; setIsPauseWorkFlow: (isPauseWorkFlow: boolean) => void; - setAnyAttribute: (type: string, value: SetStateAction, tags?: string[]) => void; + setAnyAttribute: any; isPauseWorkFlow: boolean; }