From 958e5fbcba91e410b9e267fd49aded3bdf01868a Mon Sep 17 00:00:00 2001 From: Sam Chau Date: Fri, 7 Feb 2025 16:13:20 +1030 Subject: [PATCH] fix: race condition in use format modal state - no longer uses stale condition types before loading real state --- frontend/src/hooks/useFormatModal.js | 39 ++++++++++++++++------------ 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/frontend/src/hooks/useFormatModal.js b/frontend/src/hooks/useFormatModal.js index 6e42174..894d1d3 100644 --- a/frontend/src/hooks/useFormatModal.js +++ b/frontend/src/hooks/useFormatModal.js @@ -67,25 +67,30 @@ export const useFormatModal = (initialFormat, onSuccess) => { }; const initializeForm = useCallback((format, cloning) => { - setIsCloning(cloning || false); - if (format) { - const initialName = cloning ? `${format.name}` : format.name; - setName(initialName); - setOriginalName(cloning ? '' : format.name); - setDescription(format.description || ''); - setTags(format.tags || []); - setConditions(format.conditions || []); - setTests(format.tests || []); - } else { - setName(''); - setOriginalName(''); - setDescription(''); - setTags([]); - setConditions([]); - setTests([]); - } + // First, reset all state + setName(''); + setOriginalName(''); + setDescription(''); + setTags([]); + setConditions([]); + setTests([]); setFormErrors({name: '', conditions: '', tests: '', general: ''}); setIsDeleting(false); + setIsCloning(false); + + // Then set new values in a separate tick + if (format) { + setTimeout(() => { + const initialName = cloning ? `${format.name}` : format.name; + setName(initialName); + setOriginalName(cloning ? '' : format.name); + setDescription(format.description || ''); + setTags(format.tags || []); + setConditions(format.conditions || []); + setTests(format.tests || []); + setIsCloning(cloning || false); + }, 0); + } }, []); const handleSave = async () => {