Add details editing

This commit is contained in:
Martin
2024-06-09 21:46:39 +02:00
parent bafd8958d4
commit 98d2d041d6
5 changed files with 92 additions and 46 deletions

View File

@ -11,9 +11,9 @@ import (
"github.com/charmbracelet/bubbles/key"
"github.com/charmbracelet/bubbles/list"
"github.com/charmbracelet/bubbles/textarea"
"github.com/charmbracelet/bubbles/viewport"
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/glamour"
"github.com/charmbracelet/huh"
"github.com/charmbracelet/lipgloss"
)
@ -215,8 +215,11 @@ func (p *TaskEditorPage) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
}
case key.Matches(msg, p.common.Keymap.Ok):
model, cmd := p.areas[p.area].Update(msg)
p.areas[p.area] = model.(area)
return p, tea.Batch(cmd, nextField())
if p.area != 3 {
p.areas[p.area] = model.(area)
return p, tea.Batch(cmd, nextField())
}
return p, cmd
}
}
@ -732,27 +735,38 @@ func (t *timeEdit) View() string {
}
type detailsEdit struct {
com *common.Common
renderer *glamour.TermRenderer
vp viewport.Model
com *common.Common
vp viewport.Model
ta textarea.Model
details string
// renderer *glamour.TermRenderer
}
func NewDetailsEdit(com *common.Common, task *taskwarrior.Task) *detailsEdit {
renderer, err := glamour.NewTermRenderer(
// glamour.WithStandardStyle("light"),
glamour.WithAutoStyle(),
glamour.WithWordWrap(40),
)
if err != nil {
slog.Error(err.Error())
return nil
}
// renderer, err := glamour.NewTermRenderer(
// // glamour.WithStandardStyle("light"),
// glamour.WithAutoStyle(),
// glamour.WithWordWrap(40),
// )
// if err != nil {
// slog.Error(err.Error())
// return nil
// }
vp := viewport.New(40, 30)
ta := textarea.New()
ta.SetWidth(40)
ta.SetHeight(30)
ta.ShowLineNumbers = false
ta.Focus()
if task.Udas["details"] != nil {
ta.SetValue(task.Udas["details"].(string))
}
d := detailsEdit{
com: com,
renderer: renderer,
vp: vp,
com: com,
// renderer: renderer,
vp: vp,
ta: ta,
}
return &d
@ -762,7 +776,7 @@ func (d *detailsEdit) SetCursor(c int) {
}
func (d *detailsEdit) Init() tea.Cmd {
return nil
return textarea.Blink
}
func (d *detailsEdit) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
@ -772,32 +786,34 @@ func (d *detailsEdit) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
case prevFieldMsg:
return d, prevArea()
default:
var cmd tea.Cmd
d.vp, cmd = d.vp.Update(msg)
return d, cmd
var vpCmd, taCmd tea.Cmd
d.vp, vpCmd = d.vp.Update(msg)
d.ta, taCmd = d.ta.Update(msg)
return d, tea.Batch(vpCmd, taCmd)
}
}
func (d *detailsEdit) View() string {
dtls := `
# Cool Details!
## Things I need
- [ ] A thing
- [x] Done thing
## People
- pe1
- pe2
`
return d.ta.View()
// dtls := `
// # Cool Details!
// ## Things I need
// - [ ] A thing
// - [x] Done thing
details, err := d.renderer.Render(dtls)
if err != nil {
slog.Error(err.Error())
return "Could not parse markdown"
}
// ## People
// - pe1
// - pe2
// `
d.vp.SetContent(details)
return d.vp.View()
// details, err := d.renderer.Render(dtls)
// if err != nil {
// slog.Error(err.Error())
// return "Could not parse markdown"
// }
// d.vp.SetContent(details)
// return d.vp.View()
}
// func (p *TaskEditorPage) SetSize(width, height int) {
@ -956,6 +972,10 @@ func (p *TaskEditorPage) updateTasksCmd() tea.Msg {
// p.common.TW.AddTaskAnnotation(p.task.Uuid, *p.areas[0].(*taskEdit).newAnnotation)
}
if _, ok := p.task.Udas["details"]; ok || p.areas[3].(*detailsEdit).ta.Value() != "" {
p.task.Udas["details"] = p.areas[3].(*detailsEdit).ta.Value()
}
p.common.TW.ImportTask(&p.task)
return UpdatedTasksMsg{}
}