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"
|
"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
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue