cleaned up the source file and got both tables to show
This commit is contained in:
parent
9f7105f6b8
commit
b43be7554f
139
main.go
139
main.go
|
@ -40,73 +40,59 @@ func Tasks() []Task {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
return tasks
|
|
||||||
}
|
|
||||||
|
|
||||||
var baseStyle = lipgloss.NewStyle().
|
|
||||||
BorderStyle(lipgloss.NormalBorder()).
|
|
||||||
BorderForeground(lipgloss.Color("240"))
|
|
||||||
|
|
||||||
type model struct {
|
|
||||||
table table.Model
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m model) Init() tea.Cmd { return nil }
|
|
||||||
|
|
||||||
func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|
||||||
var cmd tea.Cmd
|
|
||||||
switch msg := msg.(type) {
|
|
||||||
case tea.KeyMsg:
|
|
||||||
switch msg.String() {
|
|
||||||
case "esc":
|
|
||||||
if m.table.Focused() {
|
|
||||||
m.table.Blur()
|
|
||||||
} else {
|
|
||||||
m.table.Focus()
|
|
||||||
}
|
|
||||||
case "q", "ctrl+c":
|
|
||||||
return m, tea.Quit
|
|
||||||
case "enter":
|
|
||||||
return m, tea.Batch(
|
|
||||||
tea.Printf("Let's go to %s!", m.table.SelectedRow()[1]),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
m.table, cmd = m.table.Update(msg)
|
|
||||||
return m, cmd
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m model) View() string {
|
|
||||||
return baseStyle.Render(m.table.View()) + "\n"
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
tasks := Tasks()
|
|
||||||
sort.Slice(tasks, func(i, j int) bool {
|
sort.Slice(tasks, func(i, j int) bool {
|
||||||
return tasks[i].Urgency > tasks[j].Urgency
|
return tasks[i].Urgency > tasks[j].Urgency
|
||||||
})
|
})
|
||||||
|
return tasks
|
||||||
|
}
|
||||||
|
|
||||||
columns := []table.Column{
|
var (
|
||||||
|
tasks = Tasks()
|
||||||
|
columns = []table.Column{
|
||||||
{Title: "ID", Width: 4},
|
{Title: "ID", Width: 4},
|
||||||
{Title: "Project", Width: 10},
|
{Title: "Project", Width: 10},
|
||||||
{Title: "Tags", Width: 10},
|
{Title: "Tags", Width: 10},
|
||||||
{Title: "Description", Width: 50},
|
{Title: "Description", Width: 20},
|
||||||
// {Title: "Urgency", Width: 10},
|
// {Title: "Urgency", Width: 10},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
baseStyle = lipgloss.NewStyle().
|
||||||
|
BorderStyle(lipgloss.NormalBorder()).
|
||||||
|
BorderForeground(lipgloss.Color("240"))
|
||||||
|
)
|
||||||
|
|
||||||
|
type model struct {
|
||||||
|
all table.Model
|
||||||
|
active table.Model
|
||||||
|
}
|
||||||
|
|
||||||
|
func TasksToRows(tasks []Task) []table.Row {
|
||||||
rows := make([]table.Row, len(tasks))
|
rows := make([]table.Row, len(tasks))
|
||||||
for i := 0; i < len(tasks); i++ {
|
for i := 0; i < len(tasks); i++ {
|
||||||
t := tasks[i]
|
t := tasks[i]
|
||||||
rows[i] = []string{strconv.Itoa(t.Id), t.Project, strings.Join(t.Tags[:], " "), t.Description} // fmt.Sprintf("%f", t.Urgency)
|
rows[i] = []string{strconv.Itoa(t.Id), t.Project, strings.Join(t.Tags[:], " "), t.Description} // fmt.Sprintf("%f", t.Urgency)
|
||||||
}
|
}
|
||||||
|
return rows
|
||||||
|
}
|
||||||
|
|
||||||
t := table.New(
|
func CreateTable(WithTasks bool) table.Model {
|
||||||
table.WithColumns(columns),
|
var t table.Model
|
||||||
table.WithRows(rows),
|
if WithTasks {
|
||||||
table.WithFocused(true),
|
rows := TasksToRows(tasks)
|
||||||
table.WithHeight(20),
|
t = table.New(
|
||||||
)
|
table.WithColumns(columns),
|
||||||
|
table.WithRows(rows),
|
||||||
|
table.WithFocused(true),
|
||||||
|
table.WithHeight(15),
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
t = table.New(
|
||||||
|
table.WithColumns(columns),
|
||||||
|
table.WithRows(make([]table.Row, len(tasks))),
|
||||||
|
table.WithFocused(true),
|
||||||
|
table.WithHeight(15),
|
||||||
|
)
|
||||||
|
}
|
||||||
s := table.DefaultStyles()
|
s := table.DefaultStyles()
|
||||||
s.Header = s.Header.
|
s.Header = s.Header.
|
||||||
BorderStyle(lipgloss.NormalBorder()).
|
BorderStyle(lipgloss.NormalBorder()).
|
||||||
|
@ -118,8 +104,57 @@ func main() {
|
||||||
Background(lipgloss.Color("57")).
|
Background(lipgloss.Color("57")).
|
||||||
Bold(false)
|
Bold(false)
|
||||||
t.SetStyles(s)
|
t.SetStyles(s)
|
||||||
|
return t
|
||||||
|
}
|
||||||
|
|
||||||
m := model{t}
|
func (m model) SwitchRow() {
|
||||||
|
selectedRowIndex := m.all.Cursor()
|
||||||
|
allRows := m.all.Rows()
|
||||||
|
allRows = append(allRows[:selectedRowIndex], allRows[selectedRowIndex+1:]...)
|
||||||
|
|
||||||
|
selectedRow := m.all.SelectedRow()
|
||||||
|
activeRows := m.active.Rows()
|
||||||
|
activeRows = append(activeRows, selectedRow)
|
||||||
|
|
||||||
|
m.all.SetRows(allRows)
|
||||||
|
m.active.SetRows(activeRows)
|
||||||
|
|
||||||
|
m.all.UpdateViewport()
|
||||||
|
m.active.UpdateViewport()
|
||||||
|
// TODO broken
|
||||||
|
// m.all doesn't update until keypress (up down left right)
|
||||||
|
// m.active doesn't ever get updated
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m model) Init() tea.Cmd { return nil }
|
||||||
|
|
||||||
|
func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||||
|
var cmd tea.Cmd
|
||||||
|
switch msg := msg.(type) {
|
||||||
|
case tea.KeyMsg:
|
||||||
|
switch msg.String() {
|
||||||
|
case "esc":
|
||||||
|
if m.all.Focused() {
|
||||||
|
m.all.Blur()
|
||||||
|
} else {
|
||||||
|
m.all.Focus()
|
||||||
|
}
|
||||||
|
case "q", "ctrl+c":
|
||||||
|
return m, tea.Quit
|
||||||
|
case "enter", "space":
|
||||||
|
m.SwitchRow()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m.all, cmd = m.all.Update(msg)
|
||||||
|
return m, cmd
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m model) View() string {
|
||||||
|
return lipgloss.JoinVertical(lipgloss.Center, baseStyle.Render(m.all.View()), baseStyle.Render(m.active.View()))
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
m := model{CreateTable(true), CreateTable(false)}
|
||||||
if _, err := tea.NewProgram(m).Run(); err != nil {
|
if _, err := tea.NewProgram(m).Run(); err != nil {
|
||||||
fmt.Println("Error running program:", err)
|
fmt.Println("Error running program:", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
|
|
Loading…
Reference in a new issue