Files
MujicaUI/examples/gallery/pages_markets_3.go
T

120 lines
5.8 KiB
Go

package main
import (
"fmt"
"github.com/egoist/mygo/ui"
mujica "mujicaui"
"time"
)
func marketsMarketStatusDemo(c *ui.Context, log func(string)) {
disabled := ui.Local(c.Root(), "191.disabled", func() bool { return false })
if mujica.Checkbox(c, disabled, "Disabled", mujica.CheckboxOptions{}).Changed() {
log(fmt.Sprint("disabled ", *disabled))
}
now := time.Date(2026, 10, 5, 14, 30, 0, 0, time.UTC)
phase := ui.Local(c.Root(), "191.phase", func() mujica.MarketPhase { return mujica.MarketOpen })
if mujica.RadioGroup(c, phase, []mujica.RadioItem[mujica.MarketPhase]{{Value: mujica.MarketClosed, Label: "Closed"}, {Value: mujica.MarketPreMarket, Label: "Pre-market"}, {Value: mujica.MarketOpen, Label: "Open"}, {Value: mujica.MarketAfterHours, Label: "After hours"}, {Value: mujica.MarketHoliday, Label: "Holiday"}}, mujica.RadioGroupOptions{Horizontal: true}).Changed() {
log(fmt.Sprint(*phase))
}
ui.Column(c).Disabled(*disabled).MinHeight(0).Height(400).Children(func() {
mujica.MarketStatus(c, *phase, mujica.MarketStatusOptions{Market: "NYSE", Now: now, Next: now.Add(5 * time.Hour), NextPhase: mujica.MarketAfterHours})
})
}
func marketsTradingSessionClockDemo(c *ui.Context, log func(string)) {
disabled := ui.Local(c.Root(), "192.disabled", func() bool { return false })
if mujica.Checkbox(c, disabled, "Disabled", mujica.CheckboxOptions{}).Changed() {
log(fmt.Sprint("disabled ", *disabled))
}
now := time.Date(2026, 10, 5, 14, 30, 0, 0, time.UTC)
markets := *ui.Local(c.Root(), "markets.TradingSessionClock.markets.pages_markets_3", func() []mujica.SessionMarket {
return []mujica.SessionMarket{{Name: "NYSE", Location: time.FixedZone("EDT", -4*3600), Sessions: []mujica.TradingSession{{Phase: mujica.MarketOpen, Start: 570, End: 960}}}}
})
holiday := ui.Local(c.Root(), "192.holiday", func() bool { return false })
if mujica.Checkbox(c, holiday, "Holiday", mujica.CheckboxOptions{}).Changed() {
log(fmt.Sprint(*holiday))
}
markets[0].Holiday = *holiday
minute := ui.Local(c.Root(), "192.minute", func() float64 { return 870 })
if mujica.Slider(c, minute, mujica.SliderOptions{Min: 0, Max: 1439, Step: 1, Label: "UTC minute", ShowValue: true}).Changed() {
log(fmt.Sprint(*minute))
}
now = now.Truncate(24 * time.Hour).Add(time.Duration(*minute) * time.Minute)
ui.Column(c).Disabled(*disabled).MinHeight(0).Height(400).Children(func() {
mujica.TradingSessionClock(c, markets, mujica.TradingSessionClockOptions{Now: now})
})
}
func marketsEconomicCalendarDemo(c *ui.Context, log func(string)) {
disabled := ui.Local(c.Root(), "193.disabled", func() bool { return false })
if mujica.Checkbox(c, disabled, "Disabled", mujica.CheckboxOptions{}).Changed() {
log(fmt.Sprint("disabled ", *disabled))
}
state := ui.Local(c.Root(), "193.state", func() mujica.EconomicCalendarState { return mujica.EconomicCalendarState{} })
rows := *ui.Local(c.Root(), "markets.EconomicCalendar.rows.pages_markets_3", func() []mujica.EconomicEvent {
return []mujica.EconomicEvent{{ID: "jobs", Country: "US", Title: "Payrolls", Time: time.Date(2026, 10, 5, 14, 30, 0, 0, time.UTC), Importance: 3, Forecast: "150K", Previous: "142K", Actual: "254K"}}
})
status, empty, err := marketsDataState(c, "193", log)
if empty || status != mujica.DataReady {
rows = nil
}
beforeFilter := fmt.Sprint(state.Countries, state.MinImportance)
ui.Column(c).Disabled(*disabled).MinHeight(0).Height(400).Children(func() {
r := mujica.EconomicCalendar(c, state, rows, mujica.EconomicCalendarOptions{Status: status, Error: err})
if r.Changed() || r.Submitted() || r.SortChanged() || r.Retried() {
log(fmt.Sprint(state.Table.Selected()))
}
})
if fmt.Sprint(state.Countries, state.MinImportance) != beforeFilter {
log(fmt.Sprint("filter ", state.Countries, state.MinImportance))
}
}
func marketsEarningsCalendarDemo(c *ui.Context, log func(string)) {
disabled := ui.Local(c.Root(), "194.disabled", func() bool { return false })
if mujica.Checkbox(c, disabled, "Disabled", mujica.CheckboxOptions{}).Changed() {
log(fmt.Sprint("disabled ", *disabled))
}
state := ui.Local(c.Root(), "194.state", func() mujica.DataTableState[string] { return mujica.DataTableState[string]{} })
rows := *ui.Local(c.Root(), "markets.EarningsCalendar.rows.pages_markets_3", func() []mujica.EarningsEvent {
return []mujica.EarningsEvent{{ID: "a", Symbol: "AAPL", Name: "Apple", Date: mujica.Date{Year: 2026, Month: 10, Day: 30}, Timing: mujica.EarningsAfterClose, EPSEstimate: 1.6, EPSActual: 1.64}}
})
status, empty, err := marketsDataState(c, "194", log)
if empty || status != mujica.DataReady {
rows = nil
}
ui.Column(c).Disabled(*disabled).MinHeight(0).Height(400).Children(func() {
r := mujica.EarningsCalendar(c, state, rows, mujica.EarningsCalendarOptions{Status: status, Error: err})
if r.Changed() || r.Submitted() || r.SortChanged() || r.Retried() {
log(fmt.Sprint(state.Selected()))
}
})
}
func marketsNewsFeedDemo(c *ui.Context, log func(string)) {
disabled := ui.Local(c.Root(), "195.disabled", func() bool { return false })
if mujica.Checkbox(c, disabled, "Disabled", mujica.CheckboxOptions{}).Changed() {
log(fmt.Sprint("disabled ", *disabled))
}
state := ui.Local(c.Root(), "195.state", func() mujica.NewsFeedState { return mujica.NewsFeedState{} })
rows := *ui.Local(c.Root(), "markets.NewsFeed.rows.pages_markets_3", func() []mujica.NewsItem {
return []mujica.NewsItem{{ID: "a", Title: "Apple unveils new chips", Source: "Wire", Time: time.Date(2026, 10, 5, 14, 30, 0, 0, time.UTC), Symbols: []string{"AAPL"}}}
})
status, empty, err := marketsDataState(c, "195", log)
if empty || status != mujica.DataReady {
rows = nil
}
ui.Column(c).Disabled(*disabled).MinHeight(0).Height(400).Children(func() {
r := mujica.NewsFeed(c, state, rows, mujica.NewsFeedOptions{Status: status, Error: err})
if r.Opened != "" || r.Symbol != "" || r.Retry || r.ReadChanged {
log(fmt.Sprint(r.Opened, r.Symbol))
}
})
}