From 18fcdecae839e22ffbac24d0d729325d10ac6239 Mon Sep 17 00:00:00 2001 From: Fedor Date: Tue, 25 Nov 2025 23:36:32 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D0=B4=D1=83=D0=B1=D0=BB=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B1=D0=BB=D0=BE=D0=BA=D0=BE?= =?UTF-8?q?=D0=B2=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=BE?= =?UTF-8?q?=D0=B2=20(ref=20=D0=B4=D0=BB=D1=8F=20=D0=BE=D1=82=D1=81=D0=BB?= =?UTF-8?q?=D0=B5=D0=B6=D0=B8=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D1=81=D0=BE?= =?UTF-8?q?=D0=B7=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/form/StepWizardPlan.tsx | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/ticket_form/frontend/src/components/form/StepWizardPlan.tsx b/ticket_form/frontend/src/components/form/StepWizardPlan.tsx index f3a21733..e415f2d4 100644 --- a/ticket_form/frontend/src/components/form/StepWizardPlan.tsx +++ b/ticket_form/frontend/src/components/form/StepWizardPlan.tsx @@ -339,21 +339,29 @@ export default function StepWizardPlan({ }, [formValues, questions]); // Автоматически создаём блоки для ВСЕХ документов из плана при загрузке + // Используем ref чтобы отслеживать какие блоки уже созданы + const createdDocBlocksRef = React.useRef>(new Set()); + useEffect(() => { if (!plan || !documents || documents.length === 0) return; documents.forEach((doc) => { - const docKey = doc.id || doc.name || `doc_${Math.random()}`; + const docKey = doc.id || doc.name || `doc_unknown`; + + // Не создаём блок, если уже создавали + if (createdDocBlocksRef.current.has(docKey)) return; // Не создаём блок, если документ пропущен if (skippedDocuments.has(docKey)) return; - const existingBlocks = questionFileBlocks[docKey] || []; + // Помечаем как созданный + createdDocBlocksRef.current.add(docKey); - // Если блока ещё нет, создаём его автоматически - if (existingBlocks.length === 0) { - const category = doc.id && !doc.id.includes('_exist') ? doc.id : docKey; - handleDocumentBlocksChange(docKey, (blocks) => [ + const category = doc.id && !doc.id.includes('_exist') ? doc.id : docKey; + handleDocumentBlocksChange(docKey, (blocks) => { + // Проверяем ещё раз внутри callback + if (blocks.length > 0) return blocks; + return [ ...blocks, { id: generateBlockId(docKey), @@ -363,10 +371,10 @@ export default function StepWizardPlan({ docLabel: doc.name, files: [], }, - ]); - } + ]; + }); }); - }, [plan, documents, questionFileBlocks, handleDocumentBlocksChange, skippedDocuments]); + }, [plan, documents, handleDocumentBlocksChange, skippedDocuments]); useEffect(() => { if (!isWaiting || !formData.session_id || plan) {