feat(client): coordinated broadcast listening with form/menu flow; improved loading UX
This commit is contained in:
parent
76215f14bd
commit
c93b38e8ec
27
main.go
27
main.go
@ -133,12 +133,18 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|||||||
return m, submitOrderCmd(m.conn, *ord, m.reader)
|
return m, submitOrderCmd(m.conn, *ord, m.reader)
|
||||||
}
|
}
|
||||||
m.status = "Order canceled."
|
m.status = "Order canceled."
|
||||||
|
if m.broadcastListening {
|
||||||
|
return m, listenForBroadcastsCmd(m.conn, m.reader)
|
||||||
|
}
|
||||||
return m, cmd
|
return m, cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
if m.form.State == huh.StateAborted {
|
if m.form.State == huh.StateAborted {
|
||||||
m.status = "Order form aborted."
|
m.status = "Order form aborted."
|
||||||
m.form = nil
|
m.form = nil
|
||||||
|
if m.broadcastListening {
|
||||||
|
return m, listenForBroadcastsCmd(m.conn, m.reader)
|
||||||
|
}
|
||||||
return m, cmd
|
return m, cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,13 +165,18 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|||||||
}
|
}
|
||||||
_ = m.conn.SetReadDeadline(time.Time{})
|
_ = m.conn.SetReadDeadline(time.Time{})
|
||||||
|
|
||||||
return m, nil
|
m.broadcastListening = true
|
||||||
|
return m, listenForBroadcastsCmd(m.conn, m.reader)
|
||||||
|
|
||||||
case menuLoadedMsg:
|
case menuLoadedMsg:
|
||||||
m.loading = false
|
m.loading = false
|
||||||
|
m.pauseBroadcast = false
|
||||||
if msg.err != nil {
|
if msg.err != nil {
|
||||||
m.err = msg.err
|
m.err = msg.err
|
||||||
m.status = "Failed to load menu."
|
m.status = "Failed to load menu."
|
||||||
|
if m.broadcastListening {
|
||||||
|
return m, listenForBroadcastsCmd(m.conn, m.reader)
|
||||||
|
}
|
||||||
return m, nil
|
return m, nil
|
||||||
}
|
}
|
||||||
m.err = nil
|
m.err = nil
|
||||||
@ -173,6 +184,9 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|||||||
m.status = "Menu loaded."
|
m.status = "Menu loaded."
|
||||||
|
|
||||||
m.form = m.buildForm()
|
m.form = m.buildForm()
|
||||||
|
if m.broadcastListening {
|
||||||
|
return m, tea.Batch(m.form.Init(), listenForBroadcastsCmd(m.conn, m.reader))
|
||||||
|
}
|
||||||
return m, m.form.Init()
|
return m, m.form.Init()
|
||||||
|
|
||||||
case orderSubmittedMsg:
|
case orderSubmittedMsg:
|
||||||
@ -212,7 +226,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if m.pauseBroadcast {
|
if m.pauseBroadcast {
|
||||||
time.Sleep(50 * time.Millisecond)
|
return m, nil
|
||||||
}
|
}
|
||||||
return m, listenForBroadcastsCmd(m.conn, m.reader)
|
return m, listenForBroadcastsCmd(m.conn, m.reader)
|
||||||
case statusMsg:
|
case statusMsg:
|
||||||
@ -259,6 +273,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|||||||
return m, m.form.Init()
|
return m, m.form.Init()
|
||||||
}
|
}
|
||||||
m.loading = true
|
m.loading = true
|
||||||
|
m.pauseBroadcast = true
|
||||||
m.status = "Loading menu..."
|
m.status = "Loading menu..."
|
||||||
return m, fetchMenuCmd(m.conn, m.reader)
|
return m, fetchMenuCmd(m.conn, m.reader)
|
||||||
}
|
}
|
||||||
@ -286,7 +301,11 @@ func (m model) renderLeftColumn() string {
|
|||||||
lines := []string{}
|
lines := []string{}
|
||||||
|
|
||||||
if m.loading {
|
if m.loading {
|
||||||
lines = append(lines, "Status: "+lipgloss.NewStyle().Foreground(lipgloss.Color("178")).Render("Loading..."))
|
loadingText := "Loading..."
|
||||||
|
if m.status != "" {
|
||||||
|
loadingText = m.status
|
||||||
|
}
|
||||||
|
lines = append(lines, "Status: "+lipgloss.NewStyle().Foreground(lipgloss.Color("178")).Render(loadingText))
|
||||||
} else if m.status != "" {
|
} else if m.status != "" {
|
||||||
lines = append(lines, "Status: "+m.status)
|
lines = append(lines, "Status: "+m.status)
|
||||||
}
|
}
|
||||||
@ -520,6 +539,8 @@ func fetchMenuCmd(conn net.Conn, reader *bufio.Reader) tea.Cmd {
|
|||||||
return menuLoadedMsg{err: errors.New("not connected")}
|
return menuLoadedMsg{err: errors.New("not connected")}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
time.Sleep(150 * time.Millisecond)
|
||||||
|
|
||||||
if _, err := fmt.Fprintln(conn, "MENU"); err != nil {
|
if _, err := fmt.Fprintln(conn, "MENU"); err != nil {
|
||||||
return menuLoadedMsg{err: fmt.Errorf("send MENU: %w", err)}
|
return menuLoadedMsg{err: fmt.Errorf("send MENU: %w", err)}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user