работает

This commit is contained in:
2025-07-21 19:22:22 +03:00
parent 47e0c7f81c
commit 555505e09e
5 changed files with 146 additions and 30 deletions

View File

@@ -79,10 +79,38 @@ export const useSheetAutoSave = (
setIsLoading(true)
try {
const response = await getSheetsByTemplate(cleanTemplateId)
/*
* В API могут существовать листы как с «сырым» именем (Report/Calculations),
* так и уже нормализованные (L/R). Чтобы случайный порядок ответов не
* приводил к потере данных (один объект перезаписывал другой), собираем
* листы в map с объединением ячеек, а не простым overwrite.
*/
const sheetsMap = response.sheets.reduce(
(acc, sheet) => {
const normalizedName = sheet.name === 'Report' ? 'L' : sheet.name
acc[normalizedName] = { ...sheet, name: normalizedName }
// Приводим названия к единым «L»/«R»
const normalizedName =
sheet.name === 'Report'
? 'L'
: sheet.name === 'Calculations'
? 'R'
: sheet.name
if (acc[normalizedName]) {
// Уже есть лист с таким именем — мерджим данные, приоритет у более
// свежего объекта (sheet), но оставляем существующие ячейки если их
// нет в новом
acc[normalizedName] = {
...sheet,
name: normalizedName,
cells: {
...acc[normalizedName].cells,
...sheet.cells,
},
}
} else {
acc[normalizedName] = { ...sheet, name: normalizedName }
}
return acc
},
{} as Record<string, ApiSheet>