Исправлены проблемы с сохранением и убраны console.logs
This commit is contained in:
@@ -153,22 +153,22 @@ const DualSpreadsheet: FC<DualSpreadsheetProps> = ({
|
||||
initialTemplateValues.current[cellAddress] = String(value || '')
|
||||
})
|
||||
})
|
||||
console.log(
|
||||
'✅ Загружено значений baseFileData для сравнения (приоритет):',
|
||||
Object.keys(initialTemplateValues.current).length
|
||||
)
|
||||
// console.log(
|
||||
// '✅ Загружено значений baseFileData для сравнения (приоритет):',
|
||||
// Object.keys(initialTemplateValues.current).length
|
||||
//)
|
||||
} else if (hasTemplateData) {
|
||||
Object.entries(templateData).forEach(([sheetName, sheetData]) => {
|
||||
Object.entries(sheetData).forEach(([cellAddress, value]) => {
|
||||
initialTemplateValues.current[cellAddress] = String(value || '')
|
||||
})
|
||||
})
|
||||
console.log(
|
||||
'✅ Загружено значений templateData для сравнения (fallback):',
|
||||
Object.keys(initialTemplateValues.current).length
|
||||
)
|
||||
// console.log(
|
||||
// '✅ Загружено значений templateData для сравнения (fallback):',
|
||||
// Object.keys(initialTemplateValues.current).length
|
||||
// )
|
||||
} else {
|
||||
console.log('⚠️ DualSpreadsheet: Нет базовых данных для сравнения')
|
||||
// console.log('⚠️ DualSpreadsheet: Нет базовых данных для сравнения')
|
||||
}
|
||||
}, [baseFileData, templateData])
|
||||
|
||||
@@ -250,11 +250,11 @@ const DualSpreadsheet: FC<DualSpreadsheetProps> = ({
|
||||
baseFileValue &&
|
||||
rawValue !== baseFileValue
|
||||
) {
|
||||
console.log(`🔧 Измененная ячейка ${cellName}:`, {
|
||||
baseFileValue,
|
||||
rawValue,
|
||||
isModified: true,
|
||||
})
|
||||
// console.log(`🔧 Измененная ячейка ${cellName}:`, {
|
||||
// baseFileValue,
|
||||
// rawValue,
|
||||
// isModified: true,
|
||||
// })
|
||||
}
|
||||
|
||||
// Нормализуем значения для сравнения
|
||||
@@ -274,11 +274,11 @@ const DualSpreadsheet: FC<DualSpreadsheetProps> = ({
|
||||
|
||||
// Отладка только для измененных ячеек
|
||||
if (sheetType === 'report' && isModified) {
|
||||
console.log(`🔍 Измененная ячейка ${cellName}:`, {
|
||||
baseFileValue,
|
||||
rawValue,
|
||||
isModified,
|
||||
})
|
||||
// console.log(`🔍 Измененная ячейка ${cellName}:`, {
|
||||
// baseFileValue,
|
||||
// rawValue,
|
||||
// isModified,
|
||||
// })
|
||||
}
|
||||
|
||||
cachedData[cellKey] = {
|
||||
@@ -326,10 +326,10 @@ const DualSpreadsheet: FC<DualSpreadsheetProps> = ({
|
||||
|
||||
setHighlightedCells(highlights)
|
||||
|
||||
console.log('🎨 Подсветка ячеек для формулы:', formula, {
|
||||
references,
|
||||
highlights,
|
||||
})
|
||||
// console.log('🎨 Подсветка ячеек для формулы:', formula, {
|
||||
// references,
|
||||
// highlights,
|
||||
// })
|
||||
} catch (error) {
|
||||
console.error('Ошибка при обновлении подсветки ячеек:', error)
|
||||
setHighlightedCells([])
|
||||
@@ -411,14 +411,14 @@ const DualSpreadsheet: FC<DualSpreadsheetProps> = ({
|
||||
)
|
||||
const baseFileValue = initialTemplateValues.current[cellName] ?? '' // Базовое значение из файла
|
||||
|
||||
console.log('💾 Сохранение ячейки:', {
|
||||
cellName,
|
||||
oldValue,
|
||||
newValue: editingValue,
|
||||
baseFileValue,
|
||||
isChanged: oldValue !== editingValue,
|
||||
isModifiedFromBaseFile: baseFileValue !== editingValue,
|
||||
})
|
||||
// console.log('💾 Сохранение ячейки:', {
|
||||
//cellName,
|
||||
//oldValue,
|
||||
//newValue: editingValue,
|
||||
//baseFileValue,
|
||||
//isChanged: oldValue !== editingValue,
|
||||
//isModifiedFromBaseFile: baseFileValue !== editingValue,
|
||||
//})
|
||||
|
||||
multiSheetEngine.setCellValueWithoutRecalc(
|
||||
sheetName,
|
||||
@@ -529,12 +529,12 @@ const DualSpreadsheet: FC<DualSpreadsheetProps> = ({
|
||||
|
||||
const handleCellClick = useCallback(
|
||||
(row: number, col: number) => {
|
||||
console.log('🖱️ Обычный клик по ячейке:', {
|
||||
row,
|
||||
col,
|
||||
isEditing,
|
||||
activeSheet,
|
||||
})
|
||||
// console.log('🖱️ Обычный клик по ячейке:', {
|
||||
// row,
|
||||
//col,
|
||||
//isEditing,
|
||||
//activeSheet,
|
||||
//})
|
||||
|
||||
if (isEditing) {
|
||||
stopEditing(true)
|
||||
@@ -548,20 +548,20 @@ const DualSpreadsheet: FC<DualSpreadsheetProps> = ({
|
||||
// Новый обработчик для кликов в режиме редактирования - вставляет ссылку
|
||||
const handleCellReferenceClick = useCallback(
|
||||
(targetSheetType: SheetType, row: number, col: number) => {
|
||||
console.log('🔗 Клик для вставки ссылки:', {
|
||||
targetSheetType,
|
||||
row,
|
||||
col,
|
||||
isEditing,
|
||||
selectedCell,
|
||||
editingValue,
|
||||
})
|
||||
// console.log('🔗 Клик для вставки ссылки:', {
|
||||
//targetSheetType,
|
||||
//row,
|
||||
//col,
|
||||
//isEditing,
|
||||
//selectedCell,
|
||||
//editingValue,
|
||||
//})
|
||||
|
||||
// Проверяем, что мы в режиме редактирования
|
||||
if (!isEditing || !selectedCell) {
|
||||
console.log(
|
||||
'⚠️ Игнорируем клик ссылки: не в режиме редактирования или нет выбранной ячейки'
|
||||
)
|
||||
// console.log(
|
||||
// '⚠️ Игнорируем клик ссылки: не в режиме редактирования или нет выбранной ячейки'
|
||||
//)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -571,19 +571,19 @@ const DualSpreadsheet: FC<DualSpreadsheetProps> = ({
|
||||
// Если это другой лист, делаем квалифицированную ссылку
|
||||
if (targetSheetType !== activeSheet) {
|
||||
cellReference = createQualifiedCellReference(targetSheetType, row, col)
|
||||
console.log('📋 Создана межлистовая ссылка:', cellReference)
|
||||
// console.log('📋 Создана межлистовая ссылка:', cellReference)
|
||||
} else {
|
||||
// Если это тот же лист, делаем локальную ссылку
|
||||
cellReference = createCellAddress(row, col)
|
||||
console.log('📋 Создана локальная ссылка:', cellReference)
|
||||
// console.log('📋 Создана локальная ссылка:', cellReference)
|
||||
}
|
||||
|
||||
// Добавляем ссылку к текущему значению редактирования
|
||||
const newValue = editingValue + cellReference
|
||||
console.log('✏️ Новое значение формулы:', {
|
||||
oldValue: editingValue,
|
||||
newValue,
|
||||
})
|
||||
// console.log('✏️ Новое значение формулы:', {
|
||||
//oldValue: editingValue,
|
||||
//newValue,
|
||||
//})
|
||||
|
||||
setEditingValue(newValue)
|
||||
|
||||
@@ -739,15 +739,15 @@ const DualSpreadsheet: FC<DualSpreadsheetProps> = ({
|
||||
|
||||
// Отладка templateId
|
||||
useEffect(() => {
|
||||
console.log('🆔 Текущий templateId в DualSpreadsheet:', {
|
||||
templateId,
|
||||
type: typeof templateId,
|
||||
isValid: templateId
|
||||
? /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(
|
||||
templateId
|
||||
)
|
||||
: false,
|
||||
})
|
||||
// console.log('🆔 Текущий templateId в DualSpreadsheet:', {
|
||||
//templateId,
|
||||
//type: typeof templateId,
|
||||
//isValid: templateId
|
||||
// ? /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(
|
||||
// templateId
|
||||
// )
|
||||
// : false,
|
||||
//})
|
||||
}, [templateId])
|
||||
|
||||
// Используем хук для перетаскивания разделителя
|
||||
@@ -774,7 +774,7 @@ const DualSpreadsheet: FC<DualSpreadsheetProps> = ({
|
||||
try {
|
||||
const latestFile = await getLatestFileForTemplate(templateId)
|
||||
if (latestFile) {
|
||||
console.log('📁 Найден последний файл для шаблона:', latestFile.name)
|
||||
// console.log('📁 Найден последний файл для шаблона:', latestFile.name)
|
||||
const fileData = await getFileData(latestFile.id)
|
||||
|
||||
// TODO: Пока getFileData возвращает пустые данные, используем templateData
|
||||
@@ -784,14 +784,14 @@ const DualSpreadsheet: FC<DualSpreadsheetProps> = ({
|
||||
setBaseFileData(finalBaseData)
|
||||
// Сохраняем baseline, чтобы в L попадали только пользовательские изменения
|
||||
setTemplateData(finalBaseData)
|
||||
console.log('📄 Загружены базовые данные файла:', finalBaseData)
|
||||
// console.log('📄 Загружены базовые данные файла:', finalBaseData)
|
||||
} else {
|
||||
console.log(
|
||||
'⚠️ getFileData вернул пустые данные, используем templateData'
|
||||
)
|
||||
// console.log(
|
||||
// '⚠️ getFileData вернул пустые данные, используем templateData'
|
||||
//)
|
||||
}
|
||||
} else {
|
||||
console.log('⚠️ Файл не найден для templateId:', templateId)
|
||||
// console.log('⚠️ Файл не найден для templateId:', templateId)
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('❌ Ошибка при загрузке данных файла:', error)
|
||||
@@ -806,16 +806,16 @@ const DualSpreadsheet: FC<DualSpreadsheetProps> = ({
|
||||
if (hasTemplateData && Object.keys(finalBaseData).length === 0) {
|
||||
finalBaseData = templateData
|
||||
setBaseFileData(finalBaseData)
|
||||
console.log(
|
||||
'📄 Используем templateData как базовые данные:',
|
||||
finalBaseData
|
||||
)
|
||||
// console.log(
|
||||
// '📄 Используем templateData как базовые данные:',
|
||||
// finalBaseData
|
||||
//)
|
||||
setTemplateData(templateData)
|
||||
}
|
||||
|
||||
// 3. ЗАГРУЖАЕМ ПОЛЬЗОВАТЕЛЬСКИЕ ИЗМЕНЕНИЯ ИЗ API
|
||||
try {
|
||||
console.log('🔍 Загружаем пользовательские изменения из API...')
|
||||
// console.log('🔍 Загружаем пользовательские изменения из API...')
|
||||
const apiSheets = await loadSheets()
|
||||
|
||||
// Преобразуем листы API в формат данных
|
||||
@@ -840,16 +840,16 @@ const DualSpreadsheet: FC<DualSpreadsheetProps> = ({
|
||||
}
|
||||
})
|
||||
|
||||
console.log(
|
||||
'📂 Загружены пользовательские изменения:',
|
||||
Object.keys(userChanges)
|
||||
)
|
||||
// console.log(
|
||||
// '📂 Загружены пользовательские изменения:',
|
||||
// Object.keys(userChanges)
|
||||
//)
|
||||
|
||||
// 4. ОБЪЕДИНЯЕМ БАЗОВЫЕ ДАННЫЕ С ПОЛЬЗОВАТЕЛЬСКИМИ ИЗМЕНЕНИЯМИ
|
||||
if (Object.keys(userChanges).length > 0) {
|
||||
console.log(
|
||||
'🔄 Объединяем базовые данные с пользовательскими изменениями'
|
||||
)
|
||||
// console.log(
|
||||
// '🔄 Объединяем базовые данные с пользовательскими изменениями'
|
||||
//)
|
||||
|
||||
// Создаем объединенные данные: базовые данные файла + пользовательские изменения
|
||||
const mergedData: Record<string, Record<string, any>> = {}
|
||||
@@ -869,24 +869,24 @@ const DualSpreadsheet: FC<DualSpreadsheetProps> = ({
|
||||
})
|
||||
})
|
||||
|
||||
console.log(
|
||||
'📊 Загружаем объединенные данные (базовые + пользовательские)'
|
||||
)
|
||||
// console.log(
|
||||
// '📊 Загружаем объединенные данные (базовые + пользовательские)'
|
||||
//)
|
||||
multiSheetEngine.loadData(mergedData)
|
||||
} else if (Object.keys(finalBaseData).length > 0) {
|
||||
console.log(
|
||||
'📋 Используем только базовые данные (нет пользовательских изменений)'
|
||||
)
|
||||
// console.log(
|
||||
// '📋 Используем только базовые данные (нет пользовательских изменений)'
|
||||
//)
|
||||
multiSheetEngine.loadData(finalBaseData)
|
||||
} else {
|
||||
console.log('⚠️ Нет данных для загрузки')
|
||||
// console.log('⚠️ Нет данных для загрузки')
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('❌ Ошибка при загрузке пользовательских изменений:', error)
|
||||
|
||||
// В случае ошибки используем только базовые данные
|
||||
if (Object.keys(finalBaseData).length > 0) {
|
||||
console.log('📋 Ошибка API, используем только базовые данные')
|
||||
// console.log('📋 Ошибка API, используем только базовые данные')
|
||||
multiSheetEngine.loadData(finalBaseData)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,13 +44,13 @@ export const Cell = memo(
|
||||
|
||||
// Отладка стилей для измененных ячеек
|
||||
if (isModified) {
|
||||
console.log(`🎨 Стили для измененной ячейки ${rowIndex},${colIndex}:`, {
|
||||
className,
|
||||
isModified,
|
||||
isSelected,
|
||||
displayValue,
|
||||
highlightColor,
|
||||
})
|
||||
// console.log(`🎨 Стили для измененной ячейки ${rowIndex},${colIndex}:`, //{
|
||||
// className,
|
||||
// isModified,
|
||||
// isSelected,
|
||||
// displayValue,
|
||||
// highlightColor,
|
||||
//})
|
||||
}
|
||||
|
||||
// Для объединенных ячеек нужно рассчитать правильные размеры
|
||||
@@ -109,14 +109,14 @@ export const Cell = memo(
|
||||
|
||||
const handleClick = useCallback(
|
||||
(e: React.MouseEvent) => {
|
||||
console.log('🖱️ Cell клик:', {
|
||||
rowIndex,
|
||||
colIndex,
|
||||
sheetType,
|
||||
isInEditMode,
|
||||
isSelected,
|
||||
hasReferenceHandler: !!onCellReferenceClick,
|
||||
})
|
||||
// console.log('🖱️ Cell клик:', {
|
||||
// rowIndex,
|
||||
// colIndex,
|
||||
// sheetType,
|
||||
// isInEditMode,
|
||||
// isSelected,
|
||||
//hasReferenceHandler: !!onCellReferenceClick,
|
||||
//})
|
||||
|
||||
// Если мы в режиме редактирования, вставка была обработана на mousedown.
|
||||
// Останавливаем всплытие, чтобы родительский Spreadsheet не сменил активный лист.
|
||||
@@ -127,17 +127,17 @@ export const Cell = memo(
|
||||
}
|
||||
|
||||
// Обычная логика клика (выделение ячейки)
|
||||
console.log('📍 Обычный клик - выбираем ячейку:', {
|
||||
rowIndex,
|
||||
colIndex,
|
||||
sheetType,
|
||||
})
|
||||
// console.log('📍 Обычный клик - выбираем ячейку:', {
|
||||
// rowIndex,
|
||||
// colIndex,
|
||||
// sheetType,
|
||||
//})
|
||||
|
||||
// Подсказка для пользователя
|
||||
if (!isInEditMode) {
|
||||
console.log(
|
||||
'💡 Чтобы вставить ссылку на ячейку: 1) Выберите ячейку 2) Нажмите F2 или Enter для редактирования 3) Кликните на нужную ячейку'
|
||||
)
|
||||
// console.log(
|
||||
// '💡 Чтобы вставить ссылку на ячейку: 1) Выберите ячейку 2) Нажмите F2 или Enter для редактирования 3) Кликните на нужную ячейку'
|
||||
//)
|
||||
}
|
||||
|
||||
setActiveSheet(sheetType)
|
||||
@@ -166,11 +166,11 @@ export const Cell = memo(
|
||||
if (isInEditMode && onCellReferenceClick && !isSelected) {
|
||||
e.preventDefault()
|
||||
e.stopPropagation()
|
||||
console.log('🖱️ mousedown – вставка ссылки до blur:', {
|
||||
rowIndex,
|
||||
colIndex,
|
||||
sheetType,
|
||||
})
|
||||
// console.log('🖱️ mousedown – вставка ссылки до blur:', {
|
||||
// rowIndex,
|
||||
// colIndex,
|
||||
// sheetType,
|
||||
//})
|
||||
onCellReferenceClick(sheetType, rowIndex, colIndex)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -55,16 +55,16 @@ export const CellRenderer = ({
|
||||
|
||||
// Отладка для измененных ячеек
|
||||
if (cellData?.isModified) {
|
||||
console.log(
|
||||
`🔍 CellRenderer: Измененная ячейка ${rowIndex},${columnIndex}:`,
|
||||
{
|
||||
cellKey,
|
||||
isModified: cellData.isModified,
|
||||
displayValue,
|
||||
rawValue,
|
||||
highlightColor,
|
||||
}
|
||||
)
|
||||
// console.log(
|
||||
// `🔍 CellRenderer: Измененная ячейка ${rowIndex},${columnIndex}:`,
|
||||
// {
|
||||
// cellKey,
|
||||
// isModified: cellData.isModified,
|
||||
// displayValue,
|
||||
// rawValue,
|
||||
// highlightColor,
|
||||
// }
|
||||
// )
|
||||
}
|
||||
|
||||
// Получаем информацию об объединенных ячейках только для листа отчета
|
||||
|
||||
@@ -56,13 +56,13 @@ export const Spreadsheet = ({
|
||||
}
|
||||
|
||||
// Отладочное логирование для проверки состояния
|
||||
console.log(`📊 Spreadsheet ${sheetType} состояние:`, {
|
||||
isEditing,
|
||||
isInEditMode,
|
||||
selectedCell,
|
||||
activeSheet,
|
||||
isActiveSheet: activeSheet === sheetType,
|
||||
})
|
||||
// console.log(`📊 Spreadsheet ${sheetType} состояние:`, {
|
||||
// isEditing,
|
||||
// isInEditMode,
|
||||
// selectedCell,
|
||||
// activeSheet,
|
||||
// isActiveSheet: activeSheet === sheetType,
|
||||
//})
|
||||
|
||||
const parentRef = useRef<HTMLDivElement>(null)
|
||||
const [gridSize, setGridSize] = useState({ width: 0, height: 0 })
|
||||
|
||||
@@ -395,7 +395,7 @@ const ElementForm: React.FC<ElementFormProps> = ({ formData, setFormData }) => {
|
||||
value={formData.type}
|
||||
onValueChange={value => {
|
||||
const newType = value as ElementType
|
||||
console.log('Element type changed to:', newType)
|
||||
// console.log('Element type changed to:', newType)
|
||||
|
||||
setFormData(prev => {
|
||||
const updates: Partial<TemplateElement> = { type: newType }
|
||||
@@ -405,24 +405,24 @@ const ElementForm: React.FC<ElementFormProps> = ({ formData, setFormData }) => {
|
||||
newType === 'standards' ||
|
||||
newType === 'calibration-conditions'
|
||||
) {
|
||||
console.log(
|
||||
`${newType} type selected, getting element definition`
|
||||
)
|
||||
// console.log(
|
||||
// `${newType} type selected, getting element definition`
|
||||
// )
|
||||
const elementDefinition = getElementDefinition(newType)
|
||||
console.log('Element definition:', elementDefinition)
|
||||
// console.log('Element definition:', elementDefinition)
|
||||
|
||||
if (elementDefinition && elementDefinition.defaultConfig) {
|
||||
const defaultConfig =
|
||||
elementDefinition.defaultConfig as any
|
||||
console.log('Default config:', defaultConfig)
|
||||
// console.log('Default config:', defaultConfig)
|
||||
updates.targetCells =
|
||||
elementDefinition.mapToCells?.(defaultConfig) || []
|
||||
console.log('Generated targetCells:', updates.targetCells)
|
||||
// console.log('Generated targetCells:', updates.targetCells)
|
||||
}
|
||||
}
|
||||
|
||||
const newFormData = { ...prev, ...updates }
|
||||
console.log('New form data:', newFormData)
|
||||
// console.log('New form data:', newFormData)
|
||||
return newFormData
|
||||
})
|
||||
}}
|
||||
@@ -520,7 +520,7 @@ const ElementForm: React.FC<ElementFormProps> = ({ formData, setFormData }) => {
|
||||
value={formData.type}
|
||||
onValueChange={value => {
|
||||
const newType = value as ElementType
|
||||
console.log('Element type changed to (fallback):', newType)
|
||||
// console.log('Element type changed to (fallback):', newType)
|
||||
|
||||
setFormData(prev => {
|
||||
const updates: Partial<TemplateElement> = { type: newType }
|
||||
@@ -530,29 +530,29 @@ const ElementForm: React.FC<ElementFormProps> = ({ formData, setFormData }) => {
|
||||
newType === 'standards' ||
|
||||
newType === 'calibration-conditions'
|
||||
) {
|
||||
console.log(
|
||||
`${newType} type selected (fallback), getting element definition`
|
||||
)
|
||||
// console.log(
|
||||
// `${newType} type selected (fallback), getting element definition`
|
||||
// )
|
||||
const elementDefinition = getElementDefinition(newType)
|
||||
console.log(
|
||||
'Element definition (fallback):',
|
||||
elementDefinition
|
||||
)
|
||||
// console.log(
|
||||
// 'Element definition (fallback):',
|
||||
// elementDefinition
|
||||
// )
|
||||
|
||||
if (elementDefinition && elementDefinition.defaultConfig) {
|
||||
const defaultConfig = elementDefinition.defaultConfig as any
|
||||
console.log('Default config (fallback):', defaultConfig)
|
||||
// console.log('Default config (fallback):', defaultConfig)
|
||||
updates.targetCells =
|
||||
elementDefinition.mapToCells?.(defaultConfig) || []
|
||||
console.log(
|
||||
'Generated targetCells (fallback):',
|
||||
updates.targetCells
|
||||
)
|
||||
// console.log(
|
||||
// 'Generated targetCells (fallback):',
|
||||
// updates.targetCells
|
||||
// )
|
||||
}
|
||||
}
|
||||
|
||||
const newFormData = { ...prev, ...updates }
|
||||
console.log('New form data (fallback):', newFormData)
|
||||
// console.log('New form data (fallback):', newFormData)
|
||||
return newFormData
|
||||
})
|
||||
}}
|
||||
@@ -746,10 +746,10 @@ export const ElementConstructor: React.FC<ElementConstructorProps> = ({
|
||||
}
|
||||
|
||||
const handleAddElement = () => {
|
||||
console.log('handleAddElement called with formData:', formData)
|
||||
// console.log('handleAddElement called with formData:', formData)
|
||||
|
||||
if (!formData.label) {
|
||||
console.log('Validation failed: missing label')
|
||||
// console.log('Validation failed: missing label')
|
||||
return
|
||||
}
|
||||
|
||||
@@ -760,9 +760,9 @@ export const ElementConstructor: React.FC<ElementConstructorProps> = ({
|
||||
formData.type !== 'button-group' &&
|
||||
!formData.targetCells?.length
|
||||
) {
|
||||
console.log(
|
||||
'Validation failed: missing targetCells for element that requires manual targetCells'
|
||||
)
|
||||
// console.log(
|
||||
// 'Validation failed: missing targetCells for element that requires manual targetCells'
|
||||
// )
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -101,7 +101,7 @@ export const TemplateEditor: React.FC<TemplateEditorProps> = ({
|
||||
})
|
||||
setDataVersion(v => v + 1)
|
||||
|
||||
console.log('✅ Файл загружен с ID:', fileId)
|
||||
// console.log('✅ Файл загружен с ID:', fileId)
|
||||
} catch (err) {
|
||||
console.error(err)
|
||||
alert('Ошибка при загрузке Excel файла на сервер')
|
||||
|
||||
@@ -398,7 +398,7 @@ export const VisualLayoutEditor: React.FC<VisualLayoutEditorProps> = ({
|
||||
onLayoutSettingsChange,
|
||||
onElementEdit,
|
||||
}) => {
|
||||
console.log('VisualLayoutEditor render with elements:', elements)
|
||||
// console.log('VisualLayoutEditor render with elements:', elements)
|
||||
const [selectedElementId, setSelectedElementId] = useState<string | null>(
|
||||
null
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user