@@ -321,7 +328,17 @@ const FormulaBar = memo(
value={formulaBarValue}
onChange={(e) => onValueChange(e.target.value)}
onFocus={onFocus}
- onBlur={onBlur}
+ onBlur={(e) => {
+ // Проверяем, не переходит ли фокус в ячейку редактирования
+ const relatedTarget = e.relatedTarget as HTMLElement
+ if (
+ relatedTarget &&
+ relatedTarget.closest('input[type="text"]')
+ ) {
+ return // Не завершаем редактирование
+ }
+ onBlur(e)
+ }}
onKeyDown={onKeyDown}
/>
{isCalculating && (
@@ -848,6 +865,13 @@ const DualSpreadsheet: FC = ({
}
}, [isEditing])
+ // Синхронизация между formula bar и ячейкой при редактировании
+ useEffect(() => {
+ if (isEditing && formulaBarRef.current) {
+ formulaBarRef.current.value = editingValue
+ }
+ }, [editingValue, isEditing])
+
const startEditing = useCallback(() => {
if (!selectedCell) return
const sheetName = SHEET_NAMES[activeSheet]
@@ -1015,11 +1039,20 @@ const DualSpreadsheet: FC = ({
}
}, [selectedCell, isEditing, startEditing])
- const handleFormulaBarBlur = useCallback(() => {
- if (isEditing) {
- stopEditing(true)
- }
- }, [isEditing, stopEditing])
+ const handleFormulaBarBlur = useCallback(
+ (e: React.FocusEvent) => {
+ // Проверяем, не переходит ли фокус в ячейку редактирования
+ const relatedTarget = e.relatedTarget as HTMLElement
+ if (relatedTarget && relatedTarget.closest('input[type="text"]')) {
+ return // Не завершаем редактирование
+ }
+ // Завершаем редактирование только если фокус ушел полностью
+ if (isEditing) {
+ stopEditing(true)
+ }
+ },
+ [isEditing, stopEditing],
+ )
const handleFormulaBarKeyDown = useCallback(
(e: React.KeyboardEvent) => {