From 441f872f33628042064691396b739584411f3bf6 Mon Sep 17 00:00:00 2001 From: poignatov Date: Tue, 13 Jan 2026 16:58:03 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BE=D1=80=D1=82=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=BA=D0=B0=20=D0=B3=D1=80=D1=83=D0=BF=D0=BF=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=B4=D0=B0=D1=87=20=D0=B8=20=D1=81=D0=B5=D1=80=D1=8B?= =?UTF-8?q?=D0=B9=20=D0=B7=D0=B0=D0=B3=D0=BE=D0=BB=D0=BE=D0=B2=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VERSION | 2 +- play-life-web/package.json | 2 +- play-life-web/src/components/TaskList.css | 4 ++++ play-life-web/src/components/TaskList.jsx | 23 ++++++++++++++++++++--- 4 files changed, 26 insertions(+), 5 deletions(-) diff --git a/VERSION b/VERSION index 7d4ef04..8d7f852 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.10.3 +3.10.4 diff --git a/play-life-web/package.json b/play-life-web/package.json index cd2a8d2..41d8059 100644 --- a/play-life-web/package.json +++ b/play-life-web/package.json @@ -1,6 +1,6 @@ { "name": "play-life-web", - "version": "3.10.3", + "version": "3.10.4", "type": "module", "scripts": { "dev": "vite", diff --git a/play-life-web/src/components/TaskList.css b/play-life-web/src/components/TaskList.css index 97612a4..8e06156 100644 --- a/play-life-web/src/components/TaskList.css +++ b/play-life-web/src/components/TaskList.css @@ -461,6 +461,10 @@ border-bottom: 2px solid #e5e7eb; } +.project-group-title-empty { + color: #9ca3af; +} + .completed-section { margin-top: 1rem; } diff --git a/play-life-web/src/components/TaskList.jsx b/play-life-web/src/components/TaskList.jsx index 29936b0..639a228 100644 --- a/play-life-web/src/components/TaskList.jsx +++ b/play-life-web/src/components/TaskList.jsx @@ -468,6 +468,24 @@ function TaskList({ onNavigate, data, loading, backgroundLoading, error, onRetry return groups }, [tasks]) + // Сортируем проекты: сначала с невыполненными задачами, потом без них + const projectNames = useMemo(() => { + const sorted = Object.keys(groupedTasks).sort((a, b) => { + const groupA = groupedTasks[a] + const groupB = groupedTasks[b] + const hasNotCompletedA = groupA.notCompleted.length > 0 + const hasNotCompletedB = groupB.notCompleted.length > 0 + + // Если у одной группы есть невыполненные, а у другой нет - сортируем по этому признаку + if (hasNotCompletedA && !hasNotCompletedB) return -1 + if (!hasNotCompletedA && hasNotCompletedB) return 1 + + // Если обе группы в одной категории - сортируем по алфавиту + return a.localeCompare(b) + }) + return sorted + }, [groupedTasks]) + const renderTaskItem = (task, isCompleted = false) => { const hasProgression = task.has_progression || task.progression_base != null const hasSubtasks = task.subtasks_count > 0 @@ -647,8 +665,6 @@ function TaskList({ onNavigate, data, loading, backgroundLoading, error, onRetry ) } - const projectNames = Object.keys(groupedTasks).sort() - return (
{toast && ( @@ -671,12 +687,13 @@ function TaskList({ onNavigate, data, loading, backgroundLoading, error, onRetry {projectNames.map(projectName => { const group = groupedTasks[projectName] const hasCompleted = group.completed.length > 0 + const hasNotCompleted = group.notCompleted.length > 0 const isCompletedExpanded = expandedCompleted[projectName] return (
-

{projectName}

+

{projectName}

{/* Обычные задачи (включая бесконечные) */}