mirror of
https://github.com/marcusDenslow/terminalShop.git
synced 2026-10-25 02:52:20 +02:00
feat(tui): poll orders every 10 seconds so that the order status refreshes live in the tui without logging out and in
This commit is contained in:
@@ -77,14 +77,15 @@ type Model struct {
|
||||
authCmd tea.Cmd
|
||||
|
||||
// Shared data
|
||||
Username string
|
||||
Coffees []models.Coffee
|
||||
Cart map[uint]*models.CartItem
|
||||
SavedAddresses []models.Address
|
||||
SavedCards []models.Card
|
||||
Orders []models.Order
|
||||
OrdersLoaded bool
|
||||
FAQs []FAQ
|
||||
Username string
|
||||
Coffees []models.Coffee
|
||||
Cart map[uint]*models.CartItem
|
||||
SavedAddresses []models.Address
|
||||
SavedCards []models.Card
|
||||
Orders []models.Order
|
||||
OrdersLoaded bool
|
||||
ordersPollStarted bool
|
||||
FAQs []FAQ
|
||||
|
||||
// Page navigation
|
||||
currentPage page // currently active screen
|
||||
@@ -940,6 +941,16 @@ func (m Model) collectCardCmd() tea.Cmd {
|
||||
}
|
||||
}
|
||||
|
||||
const ordersPollInterval = 10 * time.Second
|
||||
|
||||
type OrdersPollTickMsg struct{}
|
||||
|
||||
func (m Model) pollOrderCmd() tea.Cmd {
|
||||
return tea.Tick(ordersPollInterval, func(_ time.Time) tea.Msg {
|
||||
return OrdersPollTickMsg{}
|
||||
})
|
||||
}
|
||||
|
||||
func (m Model) pollCardsCmd(cardCount int) tea.Cmd {
|
||||
return tea.Tick(time.Second, func(_ time.Time) tea.Msg {
|
||||
if m.APIClient == nil {
|
||||
|
||||
@@ -103,10 +103,13 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||
m.Orders = msg.Data.Orders
|
||||
m.OrdersLoaded = true
|
||||
m.splash.dataReady = true
|
||||
m.ordersPollStarted = true
|
||||
pollCmd := m.pollOrderCmd()
|
||||
if m.splash.delayDone {
|
||||
return m.ShopSwitch()
|
||||
nextM, switchCmd := m.ShopSwitch()
|
||||
return nextM, tea.Batch(switchCmd, pollCmd)
|
||||
}
|
||||
return m, nil
|
||||
return m, pollCmd
|
||||
case CartSyncedMsg:
|
||||
if msg.Err != nil {
|
||||
return m, m.fetchCartCmd
|
||||
@@ -130,8 +133,14 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||
if msg.Err == nil {
|
||||
m.Orders = msg.Orders
|
||||
m.OrdersLoaded = true
|
||||
if !m.ordersPollStarted {
|
||||
m.ordersPollStarted = true
|
||||
return m, m.pollOrderCmd()
|
||||
}
|
||||
}
|
||||
return m, nil
|
||||
case OrdersPollTickMsg:
|
||||
return m, tea.Batch(m.fetchOrdersCmd(), m.pollOrderCmd())
|
||||
case AddressDeletedMsg:
|
||||
if msg.Err != nil {
|
||||
m.error = &VisibleError{message: fmt.Sprintf("failed to delete address: %v", msg.Err)}
|
||||
|
||||
Reference in New Issue
Block a user