making the enter/details key switch focus between issues and details; using the v key for switching between kanban and list view; making the footer stay at the buttom of the screen in kanban view

This commit is contained in:
viljarb
2026-03-04 21:16:55 +01:00
parent 9473e1c40a
commit aa203e901d
4 changed files with 20 additions and 17 deletions

View File

@@ -9,8 +9,8 @@ import (
type DashboardKeyMap struct {
components.CommonKeyMap
SwitchWindow key.Binding
SwitchToKanbanBoard key.Binding
SwitchWindow key.Binding
SwitchToKanbanBoard key.Binding
}
var defaultDashboardKeyMap = DashboardKeyMap{
@@ -20,8 +20,8 @@ var defaultDashboardKeyMap = DashboardKeyMap{
key.WithHelp("tab", "switch window"),
),
SwitchToKanbanBoard: key.NewBinding(
key.WithKeys("k"),
key.WithHelp("k", "switch to kanban"),
key.WithKeys("v"),
key.WithHelp("v", "switch to kanban"),
),
}
@@ -39,7 +39,7 @@ func (d *Model) handleKeyMsg(msg tea.KeyMsg) tea.Cmd {
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):
case d.IsFocusedOnDetail() && (key.Matches(msg, d.keyMap.BackToList) || key.Matches(msg, d.keyMap.SelectIssue)):
d.FocusList()
case d.IsFocusedOnDetail() && key.Matches(msg, d.keyMap.ScrollUp):
d.issueDetail.ScrollUp(1)

View File

@@ -19,8 +19,8 @@ type KanbanKeyMap struct {
var defaultKanbanKeyMap = KanbanKeyMap{
CommonKeyMap: components.DefaultCommonKeyMap(),
SwitchToDashboard: key.NewBinding(
key.WithKeys("1"),
key.WithHelp("1", "dashboard 1"),
key.WithKeys("v"),
key.WithHelp("v", "dashboard 1"),
),
MoveColumnLeft: key.NewBinding(
key.WithKeys("h"),
@@ -68,7 +68,7 @@ func (d *Model) handleKeyMsg(msg tea.KeyMsg) tea.Cmd {
cmd = d.moveIssue(-1)
case d.IsFocusedOnList() && key.Matches(msg, d.keyMap.SelectIssue):
d.FocusDetail()
case d.IsFocusedOnDetail() && key.Matches(msg, d.keyMap.BackToList):
case d.IsFocusedOnDetail() && (key.Matches(msg, d.keyMap.BackToList) || key.Matches(msg, d.keyMap.SelectIssue)):
d.FocusList()
case d.IsFocusedOnDetail() && key.Matches(msg, d.keyMap.ScrollUp):
d.issueDetail.ScrollUp(1)

View File

@@ -66,7 +66,15 @@ func (m *Model) View() string {
board := lipgloss.JoinHorizontal(lipgloss.Left, todoCol, inProgCol, doneCol)
content := lipgloss.JoinVertical(lipgloss.Left, board, m.issueDetail.View())
// Add spacer to lock footer to bottom of screen when content is shorter than available space
// This is to avoid having the footer floating above the bottom of the screen
mainView := lipgloss.JoinVertical(lipgloss.Left, header, content, footer)
mainViewHeight := lipgloss.Height(mainView)
if mainViewHeight < m.height {
spacerHeight := m.height - mainViewHeight
spacer := lipgloss.NewStyle().Height(spacerHeight).Width(m.width).Render("")
mainView = lipgloss.JoinVertical(lipgloss.Left, header, content, spacer, footer)
}
return components.RenderModals(
m.width,