Files
LazyPM/pkg/tui/views/dashboard/keys.go

82 lines
2.6 KiB
Go

package dashboard
import (
"github.com/LazyBachelor/LazyPM/pkg/tui/components"
"github.com/LazyBachelor/LazyPM/pkg/tui/msgs"
"github.com/charmbracelet/bubbles/key"
tea "github.com/charmbracelet/bubbletea"
)
type DashboardKeyMap struct {
components.CommonKeyMap
SwitchWindow key.Binding
SwitchToKanbanBoard key.Binding
}
var defaultDashboardKeyMap = DashboardKeyMap{
CommonKeyMap: components.DefaultCommonKeyMap(),
SwitchWindow: key.NewBinding(
key.WithKeys("tab"),
key.WithHelp("tab", "switch window"),
),
SwitchToKanbanBoard: key.NewBinding(
key.WithKeys("k"),
key.WithHelp("k", "switch to kanban"),
),
}
func (d *Model) handleKeyMsg(msg tea.KeyMsg) tea.Cmd {
var cmd tea.Cmd
switch {
case key.Matches(msg, d.keyMap.Help):
d.helpBar.ToggleHelp()
case key.Matches(msg, d.keyMap.Quit):
return tea.Quit
case key.Matches(msg, d.keyMap.SwitchWindow):
d.ToggleFocusedWindow()
case !d.IsInModal() && key.Matches(msg, d.keyMap.SwitchToKanbanBoard):
return func() tea.Msg { return msgs.SwitchToKanbanBoardMsg{} }
case d.IsFocusedOnList() && key.Matches(msg, d.keyMap.SelectIssue):
d.FocusDetail()
case d.IsFocusedOnDetail() && key.Matches(msg, d.keyMap.BackToList):
d.FocusList()
case d.IsFocusedOnDetail() && key.Matches(msg, d.keyMap.ScrollUp):
d.issueDetail.ScrollUp(1)
case d.IsFocusedOnDetail() && key.Matches(msg, d.keyMap.ScrollDown):
d.issueDetail.ScrollDown(1)
case !d.IsInModal() && key.Matches(msg, d.keyMap.EditTitle):
if selected := d.FocusedIssueList().SelectedItem(); selected.ID != "" {
d.startEditTitle(selected)
cmd = d.titleInput.Focus()
}
case !d.IsInModal() && key.Matches(msg, d.keyMap.EditDescription):
if selected := d.FocusedIssueList().SelectedItem(); selected.ID != "" {
d.startEditDescription(selected)
cmd = d.descriptionInput.Focus()
}
case !d.IsInModal() && key.Matches(msg, d.keyMap.ChangeStatus):
if selected := d.FocusedIssueList().SelectedItem(); selected.ID != "" {
d.startChooseStatus(selected)
}
case !d.IsInModal() && key.Matches(msg, d.keyMap.ChangePriority):
if selected := d.FocusedIssueList().SelectedItem(); selected.ID != "" {
d.startChoosePriority(selected)
}
case !d.IsInModal() && key.Matches(msg, d.keyMap.ChangeType):
if selected := d.FocusedIssueList().SelectedItem(); selected.ID != "" {
d.startChooseType(selected)
}
case !d.IsInModal() && key.Matches(msg, d.keyMap.AddIssue):
d.startCreateIssue()
cmd = d.createTitleInput.Focus()
case !d.IsInModal() && key.Matches(msg, d.keyMap.DeleteIssue):
fl := d.FocusedIssueList()
if selected := fl.SelectedItem(); selected.ID != "" {
d.startConfirmDelete(selected.ID, fl.Index())
}
}
return cmd
}