6.17.0: Счётчик подзадач с учётом драфта
Some checks failed
Build and Push Docker Image / build-and-push (push) Has been cancelled
Some checks failed
Build and Push Docker Image / build-and-push (push) Has been cancelled
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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 && (
|
||||||
|
|||||||
Reference in New Issue
Block a user