refactor(ui): вынести панель «Список задач» (TaskListPanel) из монолита окна
Спеца 12.10: интерфейс + Nil + TaskTitle в internal/ui/task_list_panel.go, Fyne-реализация в internal/ui/desktop/task_list_panel.go. Состояние выбора живёт в окне; выбранная строка подсвечивается (Select/Unselect).
This commit is contained in:
40
internal/ui/task_list_panel.go
Normal file
40
internal/ui/task_list_panel.go
Normal file
@@ -0,0 +1,40 @@
|
||||
package ui
|
||||
|
||||
import (
|
||||
"github.com/kamelion/ratatoskr-go/internal/storage"
|
||||
)
|
||||
|
||||
// TaskListPanel — панель «Список задач» (спец 12.10): все задачи строками.
|
||||
//
|
||||
// Данные — снимки-копии из Store (спец 12.5), заменяются через SetTasks.
|
||||
// Состояние выбора живёт в окне: окно зовёт Select, чтобы подсветить строку.
|
||||
// Контейнер виджета отдаётся окну — реализация (Fyne) сама владеет виджетом.
|
||||
type TaskListPanel interface {
|
||||
// SetTasks заменяет снимок списка и перерисовывает виджет.
|
||||
SetTasks(tasks []storage.Task)
|
||||
// Select подсвечивает строку задачи id (управляется окном).
|
||||
Select(id int64)
|
||||
// OnSelect регистрирует колбэк клика по строке (окно грузит детали).
|
||||
OnSelect(fn func(id int64))
|
||||
}
|
||||
|
||||
// NilTaskListPanel — no-op реализация TaskListPanel для headless-режима и тестов.
|
||||
type NilTaskListPanel struct {
|
||||
onSelect func(id int64)
|
||||
}
|
||||
|
||||
// NewNilTaskListPanel создаёт NilTaskListPanel.
|
||||
func NewNilTaskListPanel() *NilTaskListPanel { return &NilTaskListPanel{} }
|
||||
|
||||
func (p *NilTaskListPanel) SetTasks([]storage.Task) {}
|
||||
func (p *NilTaskListPanel) Select(int64) {}
|
||||
func (p *NilTaskListPanel) OnSelect(fn func(int64)) { p.onSelect = fn }
|
||||
|
||||
// TaskTitle — строка задачи в списке (pure-функция, спец 12.10).
|
||||
func TaskTitle(t storage.Task) string {
|
||||
title := t.Title
|
||||
if title == "" {
|
||||
title = "(без названия)"
|
||||
}
|
||||
return title + "\n" + string(t.Status)
|
||||
}
|
||||
Reference in New Issue
Block a user