From 5e884273688bbd58de452c6201cd6958736bf7fb Mon Sep 17 00:00:00 2001 From: dosai Date: Sat, 1 Nov 2025 20:23:06 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20chat=5Fid=20=D1=81=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5?= =?UTF-8?q?=D1=80=D0=B6=D0=BA=D0=BE=D0=B9=20sessionStorage=20=D0=B8=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B7=D0=BD=D1=8B=D1=85=20=D1=84=D0=BE=D1=80=D0=BC?= =?UTF-8?q?=D0=B0=D1=82=D0=BE=D0=B2=20URL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/components/DynamicCalculator.tsx | 66 +++++++++++++++-------- 1 file changed, 43 insertions(+), 23 deletions(-) diff --git a/frontend/components/DynamicCalculator.tsx b/frontend/components/DynamicCalculator.tsx index f8dae88..85c2b9c 100644 --- a/frontend/components/DynamicCalculator.tsx +++ b/frontend/components/DynamicCalculator.tsx @@ -56,35 +56,55 @@ export default function DynamicCalculator({ calculatorType }: DynamicCalculatorP setFormData(initialData); }, [calculator]); - // Получаем chat_id из URL (для статического экспорта используем window.location) + // Получаем chat_id из URL (для статического экспорта используем window.location напрямую) useEffect(() => { if (typeof window === 'undefined') return; - // Получаем chat_id из query параметров URL - const params = new URLSearchParams(window.location.search); - let id = params.get('chat_id'); - - // Если не найден в search params, проверяем hash - if (!id && window.location.hash) { - const hashParams = new URLSearchParams(window.location.hash.replace('#', '')); - id = hashParams.get('chat_id'); - } - - if (id) { - setChatId(id); - } - - // Также слушаем изменения URL (для навигации через кнопки) - const handleLocationChange = () => { - const newParams = new URLSearchParams(window.location.search); - const newId = newParams.get('chat_id'); - if (newId && newId !== chatId) { - setChatId(newId); + const updateChatId = () => { + // Получаем chat_id из query параметров URL + const params = new URLSearchParams(window.location.search); + let id = params.get('chat_id'); + + // Если не найден в search params, проверяем hash + if (!id && window.location.hash) { + const hashParams = new URLSearchParams(window.location.hash.replace('#', '')); + id = hashParams.get('chat_id'); + } + + // Если всё ещё не найден, проверяем весь URL строку + if (!id) { + const fullUrl = window.location.href; + const chatIdMatch = fullUrl.match(/[?&#]chat_id=([^&#]+)/); + if (chatIdMatch) { + id = decodeURIComponent(chatIdMatch[1]); + } + } + + if (id) { + setChatId(id); + // Сохраняем в sessionStorage для сохранения при переходах + if (typeof Storage !== 'undefined') { + sessionStorage.setItem('chat_id', id); + } + } else { + // Пробуем восстановить из sessionStorage + if (typeof Storage !== 'undefined') { + const savedChatId = sessionStorage.getItem('chat_id'); + if (savedChatId) { + setChatId(savedChatId); + } + } } }; - // Проверяем при монтировании и при изменении calculatorType - handleLocationChange(); + updateChatId(); + + // Слушаем изменения URL (popstate для навигации назад/вперёд) + window.addEventListener('popstate', updateChatId); + + return () => { + window.removeEventListener('popstate', updateChatId); + }; }, [calculatorType]); // Преобразование строки в число