Skip to content

Commit d2012e4

Browse files
committed
added viewport
1 parent 29bd535 commit d2012e4

2 files changed

Lines changed: 43 additions & 22 deletions

File tree

app/app.go

Lines changed: 42 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"time"
1414

1515
"github.com/charmbracelet/bubbles/key"
16+
"github.com/charmbracelet/bubbles/viewport"
1617
tea "github.com/charmbracelet/bubbletea"
1718
"github.com/charmbracelet/lipgloss"
1819
"github.com/charmbracelet/lipgloss/table"
@@ -55,6 +56,7 @@ type model struct {
5556
expandedFields map[string]struct{}
5657
ongoingUserAction bool
5758
currentTime time.Time
59+
viewport viewport.Model
5860
addDeviceModal AddDeviceModel
5961
confirmRevertLocalChangesModal ConfirmRevertLocalAdditions
6062
putConfig PutConfig
@@ -161,7 +163,7 @@ var quitKeys = key.NewBinding(
161163
key.WithHelp("", "press q to quit"),
162164
)
163165

164-
func NewModel(appVersion string) model {
166+
func New(appVersion string) model {
165167
var dump *os.File
166168
if _, ok := os.LookupEnv("DEBUG"); ok {
167169
var err error
@@ -198,6 +200,7 @@ func NewModel(appVersion string) model {
198200
dump: dump,
199201
appVersion: appVersion,
200202
err: err,
203+
viewport: viewport.New(0, 0),
201204
expandedFields: make(map[string]struct{}),
202205
pendingDevices: make(map[string]PendingDevice),
203206
currentTime: time.Now(),
@@ -287,6 +290,12 @@ type FetchedPendingDevices struct {
287290
}
288291

289292
func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
293+
m, cmd := Update(m, msg)
294+
m.viewport.SetContent(m.ViewPortContent())
295+
return m, cmd
296+
}
297+
298+
func Update(m model, msg tea.Msg) (model, tea.Cmd) {
290299
if m.dump != nil {
291300
spew.Fdump(m.dump, msg)
292301
}
@@ -307,7 +316,9 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
307316
case key.Matches(msg, quitKeys):
308317
return m, tea.Quit
309318
default:
310-
return m, nil
319+
var cmd tea.Cmd
320+
m.viewport, cmd = m.viewport.Update(msg)
321+
return m, cmd
311322
}
312323
case tea.MouseMsg:
313324
if m.addDeviceModal.Show {
@@ -323,10 +334,14 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
323334
return handleMouseLeftClick(m, msg)
324335
}
325336

326-
return m, nil
337+
var cmd tea.Cmd
338+
m.viewport, cmd = m.viewport.Update(msg)
339+
return m, cmd
327340
case tea.WindowSizeMsg:
328341
m.width = msg.Width
329342
m.height = msg.Height
343+
m.viewport.Height = msg.Height
344+
m.viewport.Width = msg.Width
330345
return m, nil
331346
case FetchedEventsMsg:
332347
if msg.err != nil {
@@ -814,24 +829,7 @@ func (m model) View() string {
814829
return m.err.Error()
815830
}
816831

817-
pendingDevices := lo.Values(m.pendingDevices)
818-
sort.Sort(PendingDeviceList(pendingDevices))
819-
820-
main := lipgloss.NewStyle().MaxHeight(m.height).Render(
821-
lipgloss.JoinVertical(lipgloss.Center,
822-
viewPendingDevices(pendingDevices),
823-
lipgloss.JoinHorizontal(lipgloss.Top,
824-
viewFolders(m.folders, m.expandedFields),
825-
lipgloss.JoinVertical(lipgloss.Left,
826-
viewStatus(
827-
m.thisDeviceStatus,
828-
m.folders,
829-
m.version,
830-
m.appVersion,
831-
),
832-
833-
viewDevices(m.devices, m.currentTime, m.expandedFields),
834-
))))
832+
main := m.viewport.View()
835833

836834
if m.addDeviceModal.Show {
837835
modal := m.addDeviceModal.View()
@@ -854,6 +852,29 @@ func (m model) View() string {
854852
return zone.Scan(main)
855853
}
856854

855+
func (m model) ViewPortContent() string {
856+
pendingDevices := lo.Values(m.pendingDevices)
857+
sort.Sort(PendingDeviceList(pendingDevices))
858+
859+
main := lipgloss.NewStyle().Render(
860+
lipgloss.JoinVertical(lipgloss.Center,
861+
viewPendingDevices(pendingDevices),
862+
lipgloss.JoinHorizontal(lipgloss.Top,
863+
viewFolders(m.folders, m.expandedFields),
864+
lipgloss.JoinVertical(lipgloss.Left,
865+
viewStatus(
866+
m.thisDeviceStatus,
867+
m.folders,
868+
m.version,
869+
m.appVersion,
870+
),
871+
872+
viewDevices(m.devices, m.currentTime, m.expandedFields),
873+
))))
874+
875+
return main
876+
}
877+
857878
func viewConfirmRevertLocalChangesFolder() string {
858879
width := 60 // TODO VERIFY MODAL WIDTH
859880
header := lipgloss.NewStyle().

main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ var VERSION = "unknown"
1313

1414
func main() {
1515
zone.NewGlobal()
16-
p := tea.NewProgram(app.NewModel(VERSION), tea.WithAltScreen(), tea.WithMouseCellMotion())
16+
p := tea.NewProgram(app.New(VERSION), tea.WithAltScreen(), tea.WithMouseCellMotion())
1717

1818
if _, err := p.Run(); err != nil {
1919
fmt.Println(err)

0 commit comments

Comments
 (0)