Skip to content

Commit 1af51e5

Browse files
committed
refactor: use message-driven navigation
- Add NavigateToView message type - Views emit navigation messages, app handles routing
1 parent 00dc5d7 commit 1af51e5

2 files changed

Lines changed: 24 additions & 4 deletions

File tree

internal/tui/app/model.go

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,27 @@ func (a AppModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
5858
case messages.ChooseItem[optionsProvider.Option]:
5959
switch msg.Source {
6060
case "collections":
61-
err := a.Views[Endpoints].SetState(msg.Item)
61+
return a, func() tea.Msg {
62+
return messages.NavigateToView{
63+
ViewName: string(Endpoints),
64+
Data: msg.Item,
65+
}
66+
}
67+
}
68+
case messages.NavigateToView:
69+
a.Views[a.focusedView].OnBlur()
70+
71+
if msg.Data != nil {
72+
err := a.Views[ViewName(msg.ViewName)].SetState(msg.Data)
6273
if err != nil {
63-
log.Error(err.Error())
74+
log.Error("failed to set view state during navigation", "target_view", msg.ViewName, "error", err)
75+
return a, nil
6476
}
65-
a.focusedView = Endpoints
66-
return a, tea.Batch(cmds...)
6777
}
78+
79+
a.focusedView = ViewName(msg.ViewName)
80+
a.Views[a.focusedView].OnFocus()
81+
return a, nil
6882
case tea.KeyMsg:
6983
switch {
7084
case key.Matches(msg, keybinds.Keys.Quit):
@@ -154,3 +168,4 @@ func NewAppModel(ctx *Context) AppModel {
154168
}
155169
return model
156170
}
171+

internal/tui/messages/messages.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,8 @@ type ChooseItem[T any] struct {
1818
}
1919

2020
type DeactivateView struct{}
21+
22+
type NavigateToView struct {
23+
ViewName string
24+
Data interface{}
25+
}

0 commit comments

Comments
 (0)