Обновлен компонент NoteItem для улучшения пользовательского опыта редактирования заметок. Добавлен флаг для установки курсора в конец текста при входе в режим редактирования. Упрощены зависимости в useEffect для повышения производительности.

This commit is contained in:
Fovway 2025-11-03 22:25:09 +07:00
parent 7de8872f40
commit 2ec0fd4496
2 changed files with 12 additions and 5 deletions

View File

@ -85,7 +85,7 @@ define(['./workbox-8cfb3eb5'], (function (workbox) { 'use strict';
"revision": "3ca0b8505b4bec776b69afdba2768812"
}, {
"url": "index.html",
"revision": "0.8irmmrfvp3g"
"revision": "0.cbp336fi3v8"
}], {});
workbox.cleanupOutdatedCaches();
workbox.registerRoute(new workbox.NavigationRoute(workbox.createHandlerBoundToURL("index.html"), {

View File

@ -59,6 +59,7 @@ export const NoteItem: React.FC<NoteItemProps> = ({
const imageInputRef = useRef<HTMLInputElement>(null);
const fileInputRef = useRef<HTMLInputElement>(null);
const textNoteRef = useRef<HTMLDivElement>(null);
const shouldSetCursorToEndRef = useRef(false);
const searchQuery = useAppSelector((state) => state.notes.searchQuery);
const isPreviewMode = useAppSelector((state) => state.ui.isPreviewMode);
const aiEnabled = useAppSelector((state) => state.profile.aiEnabled);
@ -77,6 +78,7 @@ export const NoteItem: React.FC<NoteItemProps> = ({
setShowFloatingToolbar(false);
setActiveFormats({ bold: false, italic: false, strikethrough: false });
setLocalPreviewMode(false);
shouldSetCursorToEndRef.current = true; // Устанавливаем флаг для установки курсора в конец
};
const toggleLocalPreviewMode = () => {
@ -760,15 +762,20 @@ export const NoteItem: React.FC<NoteItemProps> = ({
useEffect(() => {
if (isEditing && editTextareaRef.current && !localPreviewMode) {
setTimeout(() => {
editTextareaRef.current?.focus();
// Устанавливаем курсор в конец текста
const textarea = editTextareaRef.current;
if (textarea) {
textarea.setSelectionRange(editContent.length, editContent.length);
textarea.focus();
// Устанавливаем курсор в конец текста только при первом входе в режим редактирования
if (shouldSetCursorToEndRef.current) {
// Используем актуальное значение из textarea, а не из состояния
const contentLength = textarea.value.length;
textarea.setSelectionRange(contentLength, contentLength);
shouldSetCursorToEndRef.current = false; // Сбрасываем флаг после установки
}
}
}, 100);
}
}, [isEditing, localPreviewMode, editContent]);
}, [isEditing, localPreviewMode]); // Убрали все зависимости от editContent
// Отслеживание выделения текста
useEffect(() => {