Выдение ячеек по клику

This commit is contained in:
2025-07-22 05:55:43 +03:00
parent faad68cdc0
commit 1b17638565
6 changed files with 215 additions and 9 deletions

View File

@@ -18,6 +18,8 @@ export const Cell = memo(
onCellClick,
onCellDoubleClick,
onCellValueChange,
onCellReferenceClick,
isInEditMode,
stopEditing,
setActiveSheet,
activeCellRef,
@@ -105,20 +107,89 @@ export const Cell = memo(
// Используем обычное значение displayValue для всех ячеек, включая объединенные
const cellDisplayValue = displayValue
const handleClick = useCallback(() => {
setActiveSheet(sheetType)
onCellClick(rowIndex, colIndex)
}, [setActiveSheet, sheetType, onCellClick, rowIndex, colIndex])
const handleClick = useCallback(
(e: React.MouseEvent) => {
console.log('🖱️ Cell клик:', {
rowIndex,
colIndex,
sheetType,
isInEditMode,
isSelected,
hasReferenceHandler: !!onCellReferenceClick,
})
// Если мы в режиме редактирования, вставка была обработана на mousedown.
// Останавливаем всплытие, чтобы родительский Spreadsheet не сменил активный лист.
if (isInEditMode) {
e.preventDefault()
e.stopPropagation()
return
}
// Обычная логика клика (выделение ячейки)
console.log('📍 Обычный клик - выбираем ячейку:', {
rowIndex,
colIndex,
sheetType,
})
// Подсказка для пользователя
if (!isInEditMode) {
console.log(
'💡 Чтобы вставить ссылку на ячейку: 1) Выберите ячейку 2) Нажмите F2 или Enter для редактирования 3) Кликните на нужную ячейку'
)
}
setActiveSheet(sheetType)
onCellClick(rowIndex, colIndex)
},
[
setActiveSheet,
sheetType,
onCellClick,
onCellReferenceClick,
rowIndex,
colIndex,
isInEditMode,
isSelected,
]
)
const handleDoubleClick = useCallback(
() => onCellDoubleClick(rowIndex, colIndex),
[onCellDoubleClick, rowIndex, colIndex]
)
const handleMouseDown = useCallback(
(e: React.MouseEvent) => {
// Используем mousedown, чтобы сработать раньше blur FormulaBar
if (isInEditMode && onCellReferenceClick && !isSelected) {
e.preventDefault()
e.stopPropagation()
console.log('🖱️ mousedown вставка ссылки до blur:', {
rowIndex,
colIndex,
sheetType,
})
onCellReferenceClick(sheetType, rowIndex, colIndex)
return
}
},
[
isInEditMode,
onCellReferenceClick,
isSelected,
sheetType,
rowIndex,
colIndex,
]
)
return (
<div
className={className}
style={cellStyle}
onMouseDown={handleMouseDown}
onClick={handleClick}
onDoubleClick={handleDoubleClick}
>

View File

@@ -22,6 +22,8 @@ export const CellRenderer = ({
handleCellClick,
handleCellDoubleClick,
handleCellChange,
handleCellReferenceClick,
isInEditMode,
stopEditing,
setActiveSheet,
activeCellInputRef,
@@ -99,6 +101,8 @@ export const CellRenderer = ({
onCellClick={handleCellClick}
onCellDoubleClick={handleCellDoubleClick}
onCellValueChange={handleCellChange}
onCellReferenceClick={handleCellReferenceClick}
isInEditMode={isEditing}
stopEditing={stopEditing}
setActiveSheet={setActiveSheet}
activeCellRef={activeCellInputRef}

View File

@@ -18,6 +18,8 @@ export const Spreadsheet = ({
handleCellClick,
handleCellDoubleClick,
handleCellChange,
handleCellReferenceClick,
isInEditMode,
stopEditing,
setActiveSheet,
activeCellInputRef,
@@ -46,11 +48,22 @@ export const Spreadsheet = ({
handleCellClick,
handleCellDoubleClick,
handleCellChange,
handleCellReferenceClick,
isInEditMode,
stopEditing,
setActiveSheet,
activeCellInputRef,
}
// Отладочное логирование для проверки состояния
console.log(`📊 Spreadsheet ${sheetType} состояние:`, {
isEditing,
isInEditMode,
selectedCell,
activeSheet,
isActiveSheet: activeSheet === sheetType,
})
const parentRef = useRef<HTMLDivElement>(null)
const [gridSize, setGridSize] = useState({ width: 0, height: 0 })