баг при смене страницы
This commit is contained in:
@@ -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
|
||||
}, [])
|
||||
|
||||
|
||||
Reference in New Issue
Block a user