Выдение ячеек по клику
This commit is contained in:
@@ -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}
|
||||
>
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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 })
|
||||
|
||||
|
||||
Reference in New Issue
Block a user