баг при смене страницы

This commit is contained in:
2025-07-24 15:39:44 +03:00
parent a13bbc7a68
commit f9e7905d55
16 changed files with 2356 additions and 9 deletions

View File

@@ -64,11 +64,45 @@ export function useMultiSheetEngine({
}
}, [sheets])
// Ссылка для отслеживания уже загруженных данных
const loadedDataRef = useRef<string>('')
// Отдельный useEffect для перезагрузки данных при изменении initialData
useEffect(() => {
if (!workbookRef.current) return
// Предотвращаем случайную очистку данных при смене вкладки
if (document.hidden) {
if (process.env.NODE_ENV !== 'production') {
console.log(
'⚠️ useMultiSheetEngine: предотвращаем загрузку данных когда страница скрыта'
)
}
return
}
// Создаем ключ для проверки изменений данных
const dataKey = JSON.stringify(initialData)
// Если данные уже загружены, не перезагружаем их
if (
loadedDataRef.current === dataKey &&
Object.keys(initialData).length > 0
) {
if (process.env.NODE_ENV !== 'production') {
console.log('⏭️ useMultiSheetEngine: данные уже загружены, пропускаем')
}
return
}
if (Object.keys(initialData).length > 0) {
if (process.env.NODE_ENV !== 'production') {
console.log(
'🔄 useMultiSheetEngine: загрузка initialData:',
Object.keys(initialData)
)
}
// Очищаем только те листы, для которых есть новые данные
for (const sheetName of Object.keys(initialData)) {
const sheet = workbookRef.current.getSheet(sheetName)
@@ -78,6 +112,7 @@ export function useMultiSheetEngine({
}
workbookRef.current.fromJSON(initialData)
loadedDataRef.current = dataKey // Сохраняем ключ загруженных данных
safeRecalc()
} else {
// Если данных нет, просто обновляем ревизию
@@ -244,7 +279,15 @@ export function useMultiSheetEngine({
const setTemplateData = useCallback(
(data: Record<string, Record<string, any>>) => {
templateDataRef.current = JSON.parse(JSON.stringify(data)) // Глубокая копия
// console.log('📋 Установлены данные шаблона:', templateDataRef.current)
if (process.env.NODE_ENV !== 'production') {
console.log('📋 Установлены базовые данные шаблона:', {
sheets: Object.keys(templateDataRef.current),
cellCount: Object.values(templateDataRef.current).reduce(
(total, sheet) => total + Object.keys(sheet).length,
0
),
})
}
},
[]
)
@@ -293,14 +336,16 @@ export function useMultiSheetEngine({
if (normalizedCurrent !== normalizedTemplate) {
// Если текущего значения нет (ячейка очищена), отправляем ''
modifiedSheet[cellAddress] = currentVal
// console.log(
// `🔧 Пользовательское изменение ${sheetName}:${cellAddress}:`,
// {
// template: normalizedTemplate,
// current: normalizedCurrent,
// value: currentVal,
// }
// )
if (process.env.NODE_ENV !== 'production') {
console.log(
`🔧 Пользовательское изменение ${sheetName}:${cellAddress}:`,
{
template: normalizedTemplate,
current: normalizedCurrent,
value: currentVal,
}
)
}
}
})
@@ -309,6 +354,22 @@ export function useMultiSheetEngine({
}
})
if (process.env.NODE_ENV !== 'production') {
const totalModified = Object.values(modifiedData).reduce(
(total, sheet) => total + Object.keys(sheet).length,
0
)
console.log(`📊 Найдено ${totalModified} измененных ячеек:`, {
sheets: Object.keys(modifiedData),
details: Object.fromEntries(
Object.entries(modifiedData).map(([sheetName, cells]) => [
sheetName,
Object.keys(cells).length,
])
),
})
}
return modifiedData
}, [])