Add project tracking picker

This commit is contained in:
Martin
2026-02-03 20:59:47 +01:00
parent 1ffcf42773
commit 474bb3dc07
4 changed files with 31 additions and 2 deletions

View File

@ -24,6 +24,7 @@ type Keymap struct {
SetReport key.Binding SetReport key.Binding
SetContext key.Binding SetContext key.Binding
SetProject key.Binding SetProject key.Binding
PickProjectTask key.Binding
Select key.Binding Select key.Binding
Insert key.Binding Insert key.Binding
Tag key.Binding Tag key.Binding
@ -127,6 +128,11 @@ func NewKeymap() *Keymap {
key.WithHelp("p", "Set project"), key.WithHelp("p", "Set project"),
), ),
PickProjectTask: key.NewBinding(
key.WithKeys("P"),
key.WithHelp("P", "Pick project task"),
),
Select: key.NewBinding( Select: key.NewBinding(
key.WithKeys(" "), key.WithKeys(" "),
key.WithHelp("space", "Select"), key.WithHelp("space", "Select"),

View File

@ -82,6 +82,12 @@ func (p *ReportPage) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
case UpdateProjectMsg: case UpdateProjectMsg:
p.activeProject = string(msg) p.activeProject = string(msg)
cmds = append(cmds, p.getTasks()) cmds = append(cmds, p.getTasks())
case TaskPickedMsg:
if msg.Task != nil && msg.Task.Status == "pending" {
p.common.TW.StopActiveTasks()
p.common.TW.StartTask(msg.Task)
}
cmds = append(cmds, p.getTasks())
case UpdatedTasksMsg: case UpdatedTasksMsg:
cmds = append(cmds, p.getTasks()) cmds = append(cmds, p.getTasks())
case tea.KeyMsg: case tea.KeyMsg:
@ -119,6 +125,11 @@ func (p *ReportPage) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
cmd := p.subpage.Init() cmd := p.subpage.Init()
p.common.PushPage(p) p.common.PushPage(p)
return p.subpage, cmd return p.subpage, cmd
case key.Matches(msg, p.common.Keymap.PickProjectTask):
p.subpage = NewProjectTaskPickerPage(p.common)
cmd := p.subpage.Init()
p.common.PushPage(p)
return p.subpage, cmd
case key.Matches(msg, p.common.Keymap.Tag): case key.Matches(msg, p.common.Keymap.Tag):
if p.selectedTask != nil { if p.selectedTask != nil {
tag := p.common.TW.GetConfig().Get("uda.tasksquire.tag.default") tag := p.common.TW.GetConfig().Get("uda.tasksquire.tag.default")

View File

@ -172,6 +172,13 @@ func (p *TimePage) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
p.pendingSyncAction = "" p.pendingSyncAction = ""
cmds = append(cmds, p.syncActiveIntervalAfterRefresh(action)) cmds = append(cmds, p.syncActiveIntervalAfterRefresh(action))
} }
case TaskPickedMsg:
if msg.Task != nil && msg.Task.Status == "pending" {
p.common.TW.StopActiveTasks()
p.common.TW.StartTask(msg.Task)
cmds = append(cmds, p.getIntervals())
cmds = append(cmds, doTick())
}
case RefreshIntervalsMsg: case RefreshIntervalsMsg:
cmds = append(cmds, p.getIntervals()) cmds = append(cmds, p.getIntervals())
cmds = append(cmds, doTick()) cmds = append(cmds, doTick())
@ -191,6 +198,11 @@ func (p *TimePage) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
cmd := p.subpage.Init() cmd := p.subpage.Init()
p.common.PushPage(p) p.common.PushPage(p)
return p.subpage, cmd return p.subpage, cmd
case key.Matches(msg, p.common.Keymap.PickProjectTask):
p.subpage = NewProjectTaskPickerPage(p.common)
cmd := p.subpage.Init()
p.common.PushPage(p)
return p.subpage, cmd
case key.Matches(msg, p.common.Keymap.StartStop): case key.Matches(msg, p.common.Keymap.StartStop):
row := p.intervals.SelectedRow() row := p.intervals.SelectedRow()
if row != nil { if row != nil {

View File

@ -147,7 +147,7 @@ func (ts *TaskSquire) GetTasks(report *Report, filter ...string) Tasks {
args := ts.defaultArgs args := ts.defaultArgs
if report.Context { if report != nil && report.Context {
for _, context := range ts.contexts { for _, context := range ts.contexts {
if context.Active && context.Name != "none" { if context.Active && context.Name != "none" {
args = append(args, context.ReadFilter) args = append(args, context.ReadFilter)
@ -161,7 +161,7 @@ func (ts *TaskSquire) GetTasks(report *Report, filter ...string) Tasks {
} }
exportArgs := []string{"export"} exportArgs := []string{"export"}
if report.Name != "" { if report != nil && report.Name != "" {
exportArgs = append(exportArgs, report.Name) exportArgs = append(exportArgs, report.Name)
} }