mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-10 03:51:25 +00:00
fix: guard handleGenerate with useRef to close double-submit race
This commit is contained in:
1 parent
4cb5a713a8
commit
7f35eec2b4
1 file changed
+13
-5
@@ -208,6 +208,7 @@ export default function CreateVideo() {
|
||||
[setUi],
|
||||
);
|
||||
const [isGenerating, setIsGenerating] = useState(false);
|
||||
const isGeneratingRef = useRef(false);
|
||||
|
||||
// Reference media (persisted in store so refs survive navigation)
|
||||
const refs = useCreateVideoStore((s) => s.refs);
|
||||
@@ -625,9 +626,8 @@ export default function CreateVideo() {
|
||||
|
||||
const imagePickerMax = Math.max(
|
||||
1,
|
||||
(isReferenceMode
|
||||
? (selectedModel?.image_references_max ?? 3)
|
||||
: 1) - referenceImages.length,
|
||||
(isReferenceMode ? (selectedModel?.image_references_max ?? 3) : 1) -
|
||||
referenceImages.length,
|
||||
);
|
||||
|
||||
const handlePickerSelect = useCallback(
|
||||
@@ -684,7 +684,15 @@ export default function CreateVideo() {
|
||||
}, []);
|
||||
|
||||
const handleGenerate = useCallback(async () => {
|
||||
if (!prompt.trim() || isGenerating || needsImage || !selectedModel) return;
|
||||
if (
|
||||
!prompt.trim() ||
|
||||
isGeneratingRef.current ||
|
||||
needsImage ||
|
||||
!selectedModel
|
||||
) {
|
||||
return;
|
||||
}
|
||||
isGeneratingRef.current = true;
|
||||
setIsGenerating(true);
|
||||
|
||||
const startFrameToken =
|
||||
@@ -799,9 +807,9 @@ export default function CreateVideo() {
|
||||
window.dispatchEvent(new Event("credits-change"));
|
||||
window.dispatchEvent(new Event("task-queue-update"));
|
||||
setIsGenerating(false);
|
||||
isGeneratingRef.current = false;
|
||||
}, [
|
||||
prompt,
|
||||
isGenerating,
|
||||
needsImage,
|
||||
isReferenceMode,
|
||||
selectedModel,
|
||||
|
||||
Reference in new issue
Block a user