6.17.0: Счётчик подзадач с учётом драфта
Some checks failed
Build and Push Docker Image / build-and-push (push) Has been cancelled

This commit is contained in:
poignatov
2026-03-15 17:41:46 +03:00
parent 95985f97f2
commit d42535f36e
5 changed files with 17 additions and 5 deletions

View File

@@ -1 +1 @@
6.16.5 6.17.0

View File

@@ -353,6 +353,7 @@ type Task struct {
HasProgression bool `json:"has_progression"` HasProgression bool `json:"has_progression"`
AutoComplete bool `json:"auto_complete"` AutoComplete bool `json:"auto_complete"`
DraftProgressionValue *float64 `json:"draft_progression_value,omitempty"` DraftProgressionValue *float64 `json:"draft_progression_value,omitempty"`
DraftSubtasksCount *int `json:"draft_subtasks_count,omitempty"`
} }
type Reward struct { type Reward struct {
@@ -8492,7 +8493,8 @@ func (a *App) fetchTasksForUser(userID int) ([]Task, error) {
ARRAY[]::text[] ARRAY[]::text[]
) as subtask_project_names, ) as subtask_project_names,
COALESCE(td.auto_complete, FALSE) as auto_complete, COALESCE(td.auto_complete, FALSE) as auto_complete,
td.progression_value as draft_progression_value td.progression_value as draft_progression_value,
CASE WHEN td.id IS NOT NULL THEN (SELECT COUNT(*) FROM task_draft_subtasks tds WHERE tds.task_draft_id = td.id) ELSE NULL END as draft_subtasks_count
FROM tasks t FROM tasks t
LEFT JOIN task_drafts td ON td.task_id = t.id AND td.user_id = $1 LEFT JOIN task_drafts td ON td.task_id = t.id AND td.user_id = $1
WHERE t.user_id = $1 AND t.parent_task_id IS NULL AND t.deleted = FALSE WHERE t.user_id = $1 AND t.parent_task_id IS NULL AND t.deleted = FALSE
@@ -8533,6 +8535,7 @@ func (a *App) fetchTasksForUser(userID int) ([]Task, error) {
var subtaskProjectNames pq.StringArray var subtaskProjectNames pq.StringArray
var autoComplete bool var autoComplete bool
var draftProgressionValue sql.NullFloat64 var draftProgressionValue sql.NullFloat64
var draftSubtasksCount sql.NullInt64
err := rows.Scan( err := rows.Scan(
&task.ID, &task.ID,
@@ -8553,6 +8556,7 @@ func (a *App) fetchTasksForUser(userID int) ([]Task, error) {
&subtaskProjectNames, &subtaskProjectNames,
&autoComplete, &autoComplete,
&draftProgressionValue, &draftProgressionValue,
&draftSubtasksCount,
) )
if err != nil { if err != nil {
log.Printf("Error scanning task: %v", err) log.Printf("Error scanning task: %v", err)
@@ -8600,6 +8604,10 @@ func (a *App) fetchTasksForUser(userID int) ([]Task, error) {
if draftProgressionValue.Valid { if draftProgressionValue.Valid {
task.DraftProgressionValue = &draftProgressionValue.Float64 task.DraftProgressionValue = &draftProgressionValue.Float64
} }
if draftSubtasksCount.Valid {
count := int(draftSubtasksCount.Int64)
task.DraftSubtasksCount = &count
}
// Объединяем проекты из основной задачи и подзадач // Объединяем проекты из основной задачи и подзадач
allProjects := make(map[string]bool) allProjects := make(map[string]bool)

View File

@@ -1,6 +1,6 @@
{ {
"name": "play-life-web", "name": "play-life-web",
"version": "6.16.5", "version": "6.17.0",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",

View File

@@ -391,7 +391,7 @@ function TaskForm({ onNavigate, taskId, wishlistId, returnTo, returnWishlistId }
if (data.task.reward_policy) { if (data.task.reward_policy) {
setRewardPolicy(data.task.reward_policy) setRewardPolicy(data.task.reward_policy)
} else { } else {
setRewardPolicy('personal') // Значение по умолчанию setRewardPolicy('general') // Значение по умолчанию
} }
} else { } else {
setCurrentWishlistId(null) setCurrentWishlistId(null)

View File

@@ -924,7 +924,11 @@ function TaskList({ onNavigate, data, loading, backgroundLoading, error, onRetry
<div className="task-name"> <div className="task-name">
{task.name} {task.name}
{hasSubtasks && ( {hasSubtasks && (
<span className="task-subtasks-count">(+{task.subtasks_count})</span> <span className="task-subtasks-count">
{task.draft_subtasks_count != null
? `(${task.draft_subtasks_count}/${task.subtasks_count})`
: `(${task.subtasks_count})`}
</span>
)} )}
<span className="task-badge-bar"> <span className="task-badge-bar">
{!isOneTime && !isInfinite && !isWishlist && ( {!isOneTime && !isInfinite && !isWishlist && (