From 57225807ed3673e11ebe4912c7dcbae7719e9ec7 Mon Sep 17 00:00:00 2001 From: efim Date: Sun, 12 Apr 2026 20:35:46 +0300 Subject: [PATCH 01/17] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=81=D0=BE=D1=81=D1=82=D0=BE=D1=8F=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=BD=D1=83=D0=B6=D0=BD=D1=8B=D0=B5=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B4=D0=B0=D0=BA=D1=82=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B7=D0=B0=D0=B4=D0=B0=D1=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/pages/TaskDetails.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/frontend/src/pages/TaskDetails.tsx b/frontend/src/pages/TaskDetails.tsx index e29b697..356ab81 100644 --- a/frontend/src/pages/TaskDetails.tsx +++ b/frontend/src/pages/TaskDetails.tsx @@ -21,6 +21,11 @@ export default function TaskDetails() { const [isUpdatingStatus, setIsUpdatingStatus] = useState(false); const [isDeletingTask, setIsDeletingTask] = useState(false); + const [isEditing, setIsEditing] = useState(false); + const [editTitle, setEditTitle] = useState(''); + const [editDescription, setEditDescription] = useState(''); + const [isSavingTask, setIsSavingTask] = useState(false); + useEffect(() => { const fetchTask = async () => { if (!id) { From 227c2889ba52b83c47d34ac21029d9a8a48bbcfb Mon Sep 17 00:00:00 2001 From: efim Date: Sun, 12 Apr 2026 20:41:09 +0300 Subject: [PATCH 02/17] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B8=20=D1=80?= =?UTF-8?q?=D0=B5=D0=B4=D0=B0=D0=BA=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/pages/TaskDetails.tsx | 54 ++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/frontend/src/pages/TaskDetails.tsx b/frontend/src/pages/TaskDetails.tsx index 356ab81..4ddda50 100644 --- a/frontend/src/pages/TaskDetails.tsx +++ b/frontend/src/pages/TaskDetails.tsx @@ -49,6 +49,8 @@ export default function TaskDetails() { setTask(null); } else { setTask(data); + setEditTitle(data.title || ''); + setEditDescription(data.description || ''); } setLoading(false); @@ -97,6 +99,58 @@ export default function TaskDetails() { setIsUpdatingStatus(false); }; + const startEditing = () => { + if (!task) return; + + setEditTitle(task.title || ''); + setEditDescription(task.description || ''); + setErrorMessage(''); + setIsEditing(true); + }; + + const cancelEditing = () => { + if (!task) return; + + setEditTitle(task.title || ''); + setEditDescription(task.description || ''); + setErrorMessage(''); + setIsEditing(false); + }; + + const saveTaskChanges = async () => { + if (!task || isSavingTask) return; + + if (!editTitle.trim()) { + setErrorMessage('Введите название задачи.'); + return; + } + + setErrorMessage(''); + setIsSavingTask(true); + + const { data, error } = await supabase + .from('tasks') + .update({ + title: editTitle.trim(), + description: editDescription.trim() || null, + }) + .eq('id', task.id) + .select() + .single(); + + if (error) { + setErrorMessage('Ошибка сохранения задачи: ' + error.message); + setIsSavingTask(false); + return; + } + + setTask(data); + setEditTitle(data.title || ''); + setEditDescription(data.description || ''); + setIsEditing(false); + setIsSavingTask(false); + }; + const deleteTask = async () => { if (!task || isDeletingTask) return; From 078083425a74f04652d96b0bd15fa61496ef90f9 Mon Sep 17 00:00:00 2001 From: efim Date: Sun, 12 Apr 2026 20:52:43 +0300 Subject: [PATCH 03/17] =?UTF-8?q?=D0=B2=D0=BA=D0=BB=D1=8E=D1=87=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA=D1=83=20=D1=80=D0=B5?= =?UTF-8?q?=D0=B4=D0=B0=D0=BA=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=B8=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA=D1=83=20=D0=BE=D1=82?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D0=B8=D1=82=D1=8C=20=D1=80=D0=B5=D0=B4=D0=B0?= =?UTF-8?q?=D0=BA=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=B2=20=D1=80=D0=B5=D0=B6=D0=B8=D0=BC=D0=B5=20=D1=80=D0=B5?= =?UTF-8?q?=D0=B4=D0=B0=D0=BA=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/pages/TaskDetails.tsx | 44 ++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/frontend/src/pages/TaskDetails.tsx b/frontend/src/pages/TaskDetails.tsx index 4ddda50..37c1379 100644 --- a/frontend/src/pages/TaskDetails.tsx +++ b/frontend/src/pages/TaskDetails.tsx @@ -327,14 +327,41 @@ export default function TaskDetails() {
- - + {isEditing ? ( + <> + + + + + ) : ( + + )} + {!isEditing && + }
From ef3e05ba4fe39cf02e34420fc6507d936746ba77 Mon Sep 17 00:00:00 2001 From: efim Date: Sun, 12 Apr 2026 20:53:16 +0300 Subject: [PATCH 04/17] =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B2?= =?UTF-8?q?=D0=B8=D0=BD=D1=83=D0=BB=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA=D1=83?= =?UTF-8?q?=20=D1=83=D0=B4=D0=B0=D0=BB=D0=B8=D1=82=D1=8C=20=D0=B2=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D1=8B=D0=B9=20=D1=83=D0=B3=D0=BE=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/pages/TaskDetails.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/pages/TaskDetails.tsx b/frontend/src/pages/TaskDetails.tsx index 37c1379..179f83f 100644 --- a/frontend/src/pages/TaskDetails.tsx +++ b/frontend/src/pages/TaskDetails.tsx @@ -371,6 +371,7 @@ export default function TaskDetails() { borderColor: '#ffcdd2', opacity: isDeletingTask ? 0.6 : 1, cursor: isDeletingTask ? 'not-allowed' : 'pointer', + marginLeft: 'auto' }} > {isDeletingTask ? 'Удаление...' : 'Удалить задачу'} From 097378870abb1e52902612b3888980bbe576d084 Mon Sep 17 00:00:00 2001 From: efim Date: Sun, 12 Apr 2026 20:57:51 +0300 Subject: [PATCH 05/17] =?UTF-8?q?=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B3=D0=BE=D0=BB=D0=BE=D0=B2=D0=BE=D0=BA=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=B4=D0=B0=D1=87=D0=B8=20(title)=20=D1=80=D0=B5=D0=B4?= =?UTF-8?q?=D0=B0=D0=BA=D1=82=D0=B8=D1=80=D1=83=D0=B5=D0=BC=D1=8B=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/pages/TaskDetails.tsx | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/frontend/src/pages/TaskDetails.tsx b/frontend/src/pages/TaskDetails.tsx index 179f83f..d992997 100644 --- a/frontend/src/pages/TaskDetails.tsx +++ b/frontend/src/pages/TaskDetails.tsx @@ -242,9 +242,31 @@ export default function TaskDetails() {
-

- {task.title} -

+ {isEditing ? ( + setEditTitle(e.target.value)} + placeholder="Название задачи" + disabled={isSavingTask} + style={{ + width: '100%', + padding: '10px 12px', + borderRadius: '10px', + border: '1px solid var(--color-border)', + background: 'var(--color-bg-secondary)', + color: 'var(--color-text-main)', + fontSize: '24px', + fontWeight: 700, + marginBottom: '10px', + opacity: isSavingTask ? 0.7 : 1, + }} + /> + ) : ( +

+ {task.title} +

+ )}
From a885821f5aff83a9bd9d056610d43766518c9027 Mon Sep 17 00:00:00 2001 From: efim Date: Sun, 12 Apr 2026 20:58:05 +0300 Subject: [PATCH 06/17] =?UTF-8?q?=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=B4=D0=B0=D1=87=D0=B8=20(description)=20=D1=80=D0=B5=D0=B4?= =?UTF-8?q?=D0=B0=D0=BA=D1=82=D0=B8=D1=80=D1=83=D0=B5=D0=BC=D1=8B=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/pages/TaskDetails.tsx | 55 ++++++++++++++++++++++++------ 1 file changed, 45 insertions(+), 10 deletions(-) diff --git a/frontend/src/pages/TaskDetails.tsx b/frontend/src/pages/TaskDetails.tsx index d992997..621159b 100644 --- a/frontend/src/pages/TaskDetails.tsx +++ b/frontend/src/pages/TaskDetails.tsx @@ -312,16 +312,51 @@ export default function TaskDetails() { )}
-

- {task.description?.trim() - ? task.description - : '[Здесь будет подробное описание задачи.]'} -

- {!task.description?.trim() && ( -

- [Например: Необходимо подготовить презентацию для защиты проекта. Текст для слайдов - должен быть написан до вечера пятницы, чтобы успеть собрать дизайн.] -

+ {isEditing ? ( + <> + + +