fix: Улучшено получение chat_id с поддержкой sessionStorage и разных форматов URL
This commit is contained in:
parent
cc6b5d10ad
commit
5e88427368
@ -56,35 +56,55 @@ export default function DynamicCalculator({ calculatorType }: DynamicCalculatorP
|
|||||||
setFormData(initialData);
|
setFormData(initialData);
|
||||||
}, [calculator]);
|
}, [calculator]);
|
||||||
|
|
||||||
// Получаем chat_id из URL (для статического экспорта используем window.location)
|
// Получаем chat_id из URL (для статического экспорта используем window.location напрямую)
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (typeof window === 'undefined') return;
|
if (typeof window === 'undefined') return;
|
||||||
|
|
||||||
// Получаем chat_id из query параметров URL
|
const updateChatId = () => {
|
||||||
const params = new URLSearchParams(window.location.search);
|
// Получаем chat_id из query параметров URL
|
||||||
let id = params.get('chat_id');
|
const params = new URLSearchParams(window.location.search);
|
||||||
|
let id = params.get('chat_id');
|
||||||
|
|
||||||
// Если не найден в search params, проверяем hash
|
// Если не найден в search params, проверяем hash
|
||||||
if (!id && window.location.hash) {
|
if (!id && window.location.hash) {
|
||||||
const hashParams = new URLSearchParams(window.location.hash.replace('#', ''));
|
const hashParams = new URLSearchParams(window.location.hash.replace('#', ''));
|
||||||
id = hashParams.get('chat_id');
|
id = hashParams.get('chat_id');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (id) {
|
// Если всё ещё не найден, проверяем весь URL строку
|
||||||
setChatId(id);
|
if (!id) {
|
||||||
}
|
const fullUrl = window.location.href;
|
||||||
|
const chatIdMatch = fullUrl.match(/[?&#]chat_id=([^&#]+)/);
|
||||||
|
if (chatIdMatch) {
|
||||||
|
id = decodeURIComponent(chatIdMatch[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Также слушаем изменения URL (для навигации через кнопки)
|
if (id) {
|
||||||
const handleLocationChange = () => {
|
setChatId(id);
|
||||||
const newParams = new URLSearchParams(window.location.search);
|
// Сохраняем в sessionStorage для сохранения при переходах
|
||||||
const newId = newParams.get('chat_id');
|
if (typeof Storage !== 'undefined') {
|
||||||
if (newId && newId !== chatId) {
|
sessionStorage.setItem('chat_id', id);
|
||||||
setChatId(newId);
|
}
|
||||||
|
} else {
|
||||||
|
// Пробуем восстановить из sessionStorage
|
||||||
|
if (typeof Storage !== 'undefined') {
|
||||||
|
const savedChatId = sessionStorage.getItem('chat_id');
|
||||||
|
if (savedChatId) {
|
||||||
|
setChatId(savedChatId);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Проверяем при монтировании и при изменении calculatorType
|
updateChatId();
|
||||||
handleLocationChange();
|
|
||||||
|
// Слушаем изменения URL (popstate для навигации назад/вперёд)
|
||||||
|
window.addEventListener('popstate', updateChatId);
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
window.removeEventListener('popstate', updateChatId);
|
||||||
|
};
|
||||||
}, [calculatorType]);
|
}, [calculatorType]);
|
||||||
|
|
||||||
// Преобразование строки в число
|
// Преобразование строки в число
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user