работает
This commit is contained in:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user