sqs-browse: started moving things around

This commit is contained in:
Leon Mika 2022-03-23 09:23:31 +11:00
parent 5d1f4c78f4
commit 2c03f5160a

View file

@ -5,13 +5,17 @@ import (
"github.com/charmbracelet/bubbles/viewport" "github.com/charmbracelet/bubbles/viewport"
tea "github.com/charmbracelet/bubbletea" tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss" "github.com/charmbracelet/lipgloss"
"log"
"strings"
) )
type uiModel struct { type uiModel struct {
table table.Model table table.Model
viewport viewport.Model viewport viewport.Model
ready bool
tableRows []table.Row tableRows []table.Row
message string
} }
func NewModel() tea.Model { func NewModel() tea.Model {
@ -19,12 +23,10 @@ func NewModel() tea.Model {
rows := make([]table.Row, 0) rows := make([]table.Row, 0)
tbl.SetRows(rows) tbl.SetRows(rows)
vprt := viewport.New(100, 15)
model := uiModel{ model := uiModel{
table: tbl, table: tbl,
viewport: vprt,
tableRows: rows, tableRows: rows,
message: "",
} }
return model return model
@ -35,6 +37,14 @@ func (m uiModel) Init() tea.Cmd {
} }
func (m *uiModel) updateViewportToSelectedMessage() { func (m *uiModel) updateViewportToSelectedMessage() {
if !m.ready {
return
}
if len(m.tableRows) == 0 {
return
}
if message, ok := m.table.SelectedRow().(messageTableRow); ok { if message, ok := m.table.SelectedRow().(messageTableRow); ok {
m.viewport.SetContent(message.Data) m.viewport.SetContent(message.Data)
} else { } else {
@ -51,6 +61,26 @@ func (m uiModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
m.table.SetRows(m.tableRows) m.table.SetRows(m.tableRows)
m.updateViewportToSelectedMessage() m.updateViewportToSelectedMessage()
case tea.WindowSizeMsg:
footerHeight := lipgloss.Height(m.footerView())
if !m.ready {
tableHeight := msg.Height / 2
m.table.SetSize(msg.Width, tableHeight)
m.viewport = viewport.New(msg.Width, msg.Height-tableHeight-footerHeight)
m.viewport.SetContent("(no message selected)")
m.ready = true
log.Println("Viewport is now ready")
} else {
tableHeight := msg.Height / 2
m.table.SetSize(msg.Width, tableHeight)
m.viewport.Width = msg.Width
m.viewport.Height = msg.Height - tableHeight - footerHeight
//m.viewport.YPosition = tableHeight
}
case tea.KeyMsg: case tea.KeyMsg:
switch msg.String() { switch msg.String() {
@ -66,7 +96,7 @@ func (m uiModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
} }
} }
updatedTable, tableMsgs := m.table.Update(nil) updatedTable, tableMsgs := m.table.Update(msg)
updatedViewport, viewportMsgs := m.viewport.Update(msg) updatedViewport, viewportMsgs := m.viewport.Update(msg)
m.table = updatedTable m.table = updatedTable
@ -76,5 +106,24 @@ func (m uiModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
} }
func (m uiModel) View() string { func (m uiModel) View() string {
return lipgloss.JoinVertical(lipgloss.Top, m.table.View(), m.viewport.View()) if !m.ready {
return "Initializing"
}
log.Println("Returning full view")
return lipgloss.JoinVertical(lipgloss.Top, m.table.View(), m.viewport.View(), m.footerView())
//return lipgloss.JoinVertical(lipgloss.Top, m.table.View(), m.footerView())
}
func (m uiModel) footerView() string {
title := m.message
line := strings.Repeat(" ", max(0, m.viewport.Width-lipgloss.Width(title)))
return lipgloss.JoinHorizontal(lipgloss.Left, title, line)
}
func max(a, b int) int {
if a > b {
return a
}
return b
} }