Make task details scrollable
This commit is contained in:
@ -41,6 +41,8 @@ type TaskEditorPage struct {
|
||||
area int
|
||||
areaPicker *areaPicker
|
||||
areas []area
|
||||
|
||||
infoViewport viewport.Model
|
||||
}
|
||||
|
||||
func NewTaskEditorPage(com *common.Common, task taskwarrior.Task) *TaskEditorPage {
|
||||
@ -68,6 +70,11 @@ func NewTaskEditorPage(com *common.Common, task taskwarrior.Task) *TaskEditorPag
|
||||
|
||||
p.areaPicker = NewAreaPicker(com, []string{"Task", "Tags", "Dates"})
|
||||
|
||||
p.infoViewport = viewport.New(0, 0)
|
||||
if p.task.Uuid != "" {
|
||||
p.infoViewport.SetContent(p.common.TW.GetInformation(&p.task))
|
||||
}
|
||||
|
||||
p.columnCursor = 1
|
||||
if p.task.Uuid == "" {
|
||||
p.mode = modeInsert
|
||||
@ -94,6 +101,12 @@ func (p *TaskEditorPage) SetSize(width, height int) {
|
||||
} else {
|
||||
p.colHeight = height - p.common.Styles.ColumnFocused.GetVerticalFrameSize()
|
||||
}
|
||||
|
||||
p.infoViewport.Width = width - p.colWidth - p.common.Styles.ColumnFocused.GetHorizontalFrameSize()*2 - 5
|
||||
if p.infoViewport.Width < 0 {
|
||||
p.infoViewport.Width = 0
|
||||
}
|
||||
p.infoViewport.Height = p.colHeight
|
||||
}
|
||||
|
||||
func (p *TaskEditorPage) Init() tea.Cmd {
|
||||
@ -110,12 +123,20 @@ func (p *TaskEditorPage) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||
p.mode = mode(msg)
|
||||
case prevColumnMsg:
|
||||
p.columnCursor--
|
||||
maxCols := 2
|
||||
if p.task.Uuid != "" {
|
||||
maxCols = 3
|
||||
}
|
||||
if p.columnCursor < 0 {
|
||||
p.columnCursor = len(p.areas) - 1
|
||||
p.columnCursor = maxCols - 1
|
||||
}
|
||||
case nextColumnMsg:
|
||||
p.columnCursor++
|
||||
if p.columnCursor > len(p.areas)-1 {
|
||||
maxCols := 2
|
||||
if p.task.Uuid != "" {
|
||||
maxCols = 3
|
||||
}
|
||||
if p.columnCursor >= maxCols {
|
||||
p.columnCursor = 0
|
||||
}
|
||||
case prevAreaMsg:
|
||||
@ -166,20 +187,26 @@ func (p *TaskEditorPage) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||
picker, cmd := p.areaPicker.Update(msg)
|
||||
p.areaPicker = picker.(*areaPicker)
|
||||
return p, cmd
|
||||
} else {
|
||||
} else if p.columnCursor == 1 {
|
||||
model, cmd := p.areas[p.area].Update(prevFieldMsg{})
|
||||
p.areas[p.area] = model.(area)
|
||||
return p, cmd
|
||||
} else if p.columnCursor == 2 {
|
||||
p.infoViewport.LineUp(1)
|
||||
return p, nil
|
||||
}
|
||||
case key.Matches(msg, p.common.Keymap.Down):
|
||||
if p.columnCursor == 0 {
|
||||
picker, cmd := p.areaPicker.Update(msg)
|
||||
p.areaPicker = picker.(*areaPicker)
|
||||
return p, cmd
|
||||
} else {
|
||||
} else if p.columnCursor == 1 {
|
||||
model, cmd := p.areas[p.area].Update(nextFieldMsg{})
|
||||
p.areas[p.area] = model.(area)
|
||||
return p, cmd
|
||||
} else if p.columnCursor == 2 {
|
||||
p.infoViewport.LineDown(1)
|
||||
return p, nil
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -212,21 +239,23 @@ func (p *TaskEditorPage) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||
picker, cmd := p.areaPicker.Update(msg)
|
||||
p.areaPicker = picker.(*areaPicker)
|
||||
return p, cmd
|
||||
} else {
|
||||
} else if p.columnCursor == 1 {
|
||||
model, cmd := p.areas[p.area].Update(prevFieldMsg{})
|
||||
p.areas[p.area] = model.(area)
|
||||
return p, cmd
|
||||
}
|
||||
return p, nil
|
||||
case key.Matches(msg, p.common.Keymap.Next):
|
||||
if p.columnCursor == 0 {
|
||||
picker, cmd := p.areaPicker.Update(msg)
|
||||
p.areaPicker = picker.(*areaPicker)
|
||||
return p, cmd
|
||||
} else {
|
||||
} else if p.columnCursor == 1 {
|
||||
model, cmd := p.areas[p.area].Update(nextFieldMsg{})
|
||||
p.areas[p.area] = model.(area)
|
||||
return p, cmd
|
||||
}
|
||||
return p, nil
|
||||
case key.Matches(msg, p.common.Keymap.Ok):
|
||||
model, cmd := p.areas[p.area].Update(msg)
|
||||
if p.area != 3 {
|
||||
@ -241,6 +270,10 @@ func (p *TaskEditorPage) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||
picker, cmd := p.areaPicker.Update(msg)
|
||||
p.areaPicker = picker.(*areaPicker)
|
||||
return p, cmd
|
||||
} else if p.columnCursor == 2 {
|
||||
var cmd tea.Cmd
|
||||
p.infoViewport, cmd = p.infoViewport.Update(msg)
|
||||
return p, cmd
|
||||
} else {
|
||||
model, cmd := p.areas[p.area].Update(msg)
|
||||
p.areas[p.area] = model.(area)
|
||||
@ -253,29 +286,31 @@ func (p *TaskEditorPage) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||
func (p *TaskEditorPage) View() string {
|
||||
var focusedStyle, blurredStyle lipgloss.Style
|
||||
if p.mode == modeInsert {
|
||||
focusedStyle = p.common.Styles.ColumnInsert.Width(p.colWidth).Height(p.colHeight)
|
||||
focusedStyle = p.common.Styles.ColumnInsert
|
||||
} else {
|
||||
focusedStyle = p.common.Styles.ColumnFocused.Width(p.colWidth).Height(p.colHeight)
|
||||
focusedStyle = p.common.Styles.ColumnFocused
|
||||
}
|
||||
blurredStyle = p.common.Styles.ColumnBlurred.Width(p.colWidth).Height(p.colHeight)
|
||||
// var picker, area string
|
||||
var area string
|
||||
if p.columnCursor == 0 {
|
||||
// picker = focusedStyle.Render(p.areaPicker.View())
|
||||
area = blurredStyle.Render(p.areas[p.area].View())
|
||||
} else {
|
||||
// picker = blurredStyle.Render(p.areaPicker.View())
|
||||
area = focusedStyle.Render(p.areas[p.area].View())
|
||||
blurredStyle = p.common.Styles.ColumnBlurred
|
||||
|
||||
var area string
|
||||
if p.columnCursor == 1 {
|
||||
area = focusedStyle.Copy().Width(p.colWidth).Height(p.colHeight).Render(p.areas[p.area].View())
|
||||
} else {
|
||||
area = blurredStyle.Copy().Width(p.colWidth).Height(p.colHeight).Render(p.areas[p.area].View())
|
||||
}
|
||||
|
||||
if p.task.Uuid != "" {
|
||||
var infoView string
|
||||
if p.columnCursor == 2 {
|
||||
infoView = focusedStyle.Copy().Width(p.infoViewport.Width).Height(p.infoViewport.Height).Render(p.infoViewport.View())
|
||||
} else {
|
||||
infoView = blurredStyle.Copy().Width(p.infoViewport.Width).Height(p.infoViewport.Height).Render(p.infoViewport.View())
|
||||
}
|
||||
area = lipgloss.JoinHorizontal(
|
||||
lipgloss.Top,
|
||||
area,
|
||||
p.common.Styles.ColumnFocused.Render(p.common.TW.GetInformation(&p.task)),
|
||||
infoView,
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
tabs := ""
|
||||
|
||||
Reference in New Issue
Block a user