sqs-browse: started moving things around
This commit is contained in:
parent
5d1f4c78f4
commit
2c03f5160a
|
@ -5,13 +5,17 @@ import (
|
|||
"github.com/charmbracelet/bubbles/viewport"
|
||||
tea "github.com/charmbracelet/bubbletea"
|
||||
"github.com/charmbracelet/lipgloss"
|
||||
"log"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type uiModel struct {
|
||||
table table.Model
|
||||
viewport viewport.Model
|
||||
|
||||
ready bool
|
||||
tableRows []table.Row
|
||||
message string
|
||||
}
|
||||
|
||||
func NewModel() tea.Model {
|
||||
|
@ -19,12 +23,10 @@ func NewModel() tea.Model {
|
|||
rows := make([]table.Row, 0)
|
||||
tbl.SetRows(rows)
|
||||
|
||||
vprt := viewport.New(100, 15)
|
||||
|
||||
model := uiModel{
|
||||
table: tbl,
|
||||
viewport: vprt,
|
||||
tableRows: rows,
|
||||
message: "",
|
||||
}
|
||||
|
||||
return model
|
||||
|
@ -35,6 +37,14 @@ func (m uiModel) Init() tea.Cmd {
|
|||
}
|
||||
|
||||
func (m *uiModel) updateViewportToSelectedMessage() {
|
||||
if !m.ready {
|
||||
return
|
||||
}
|
||||
|
||||
if len(m.tableRows) == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
if message, ok := m.table.SelectedRow().(messageTableRow); ok {
|
||||
m.viewport.SetContent(message.Data)
|
||||
} else {
|
||||
|
@ -51,6 +61,26 @@ func (m uiModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|||
m.table.SetRows(m.tableRows)
|
||||
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:
|
||||
|
||||
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)
|
||||
|
||||
m.table = updatedTable
|
||||
|
@ -76,5 +106,24 @@ func (m uiModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue