137 lines
4.7 KiB
Go
137 lines
4.7 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"slices"
|
|
|
|
"github.com/egoist/mygo/ui"
|
|
mujica "mujicaui"
|
|
)
|
|
|
|
func channelListDemo(c *ui.Context, log func(string)) {
|
|
type state struct {
|
|
selected string
|
|
disabled bool
|
|
revision int
|
|
groups []mujica.ChannelGroup
|
|
}
|
|
s := ui.Local(c.Root(), "401", func() state {
|
|
return state{groups: []mujica.ChannelGroup{
|
|
{ID: "channels", Title: "Channels", Channels: []mujica.Channel{
|
|
{ID: "general", Name: "general", Unread: 3}, {ID: "rehearsal", Name: "rehearsal", Pinned: true},
|
|
{ID: "random", Name: "random", Unread: 120, Muted: true},
|
|
}},
|
|
{ID: "direct", Title: "Direct messages", Channels: []mujica.Channel{{ID: "uika", Name: "Uika", Direct: true, Presence: mujica.PresenceOnline}}},
|
|
}}
|
|
})
|
|
mediaCheck(c, log, &s.disabled, "Disabled")
|
|
before := s.groups[0].Channels[0]
|
|
mediaCheck(c, log, &s.groups[0].Channels[0].Muted, "Mute general")
|
|
mediaCheck(c, log, &s.groups[0].Channels[0].Pinned, "Pin general")
|
|
if before != s.groups[0].Channels[0] {
|
|
s.revision++
|
|
}
|
|
if mujica.ChannelList(c, &s.selected, s.groups, mujica.ChannelListOptions{Disabled: s.disabled, Revision: s.revision}).Changed() {
|
|
log("channel " + s.selected)
|
|
}
|
|
ui.Text(c, "Selected: "+s.selected)
|
|
}
|
|
|
|
func memberListDemo(c *ui.Context, log func(string)) {
|
|
type state struct {
|
|
list mujica.MemberListState
|
|
disabled, empty bool
|
|
members []mujica.Member
|
|
}
|
|
s := ui.Local(c.Root(), "405", func() state {
|
|
return state{members: []mujica.Member{
|
|
{ID: "1", Name: "Sakiko", Presence: mujica.PresenceOnline, Role: "Leader"},
|
|
{ID: "2", Name: "Uika", Presence: mujica.PresenceBusy, Role: "Vocal"},
|
|
{ID: "3", Name: "Mutsumi", Presence: mujica.PresenceAway}, {ID: "4", Name: "Umiri", Presence: mujica.PresenceOffline},
|
|
}}
|
|
})
|
|
mediaCheck(c, log, &s.disabled, "Disabled")
|
|
mediaCheck(c, log, &s.empty, "Empty")
|
|
if mujica.Button(c, "Toggle Uika presence", mujica.ButtonOptions{Variant: mujica.Secondary}).Clicked() {
|
|
s.members = slices.Clone(s.members)
|
|
if s.members[1].Presence == mujica.PresenceOffline {
|
|
s.members[1].Presence = mujica.PresenceOnline
|
|
} else {
|
|
s.members[1].Presence = mujica.PresenceOffline
|
|
}
|
|
log("Uika presence changed")
|
|
}
|
|
members := s.members
|
|
if s.empty {
|
|
members = nil
|
|
}
|
|
r := mujica.MemberList(c, &s.list, members, mujica.MemberListOptions{Disabled: s.disabled, Height: 240})
|
|
if r.Changed() {
|
|
log("member " + s.list.Selected)
|
|
}
|
|
if r.Opened != "" {
|
|
log("profile " + r.Opened)
|
|
}
|
|
}
|
|
|
|
func userProfileCardDemo(c *ui.Context, log func(string)) {
|
|
type state struct {
|
|
presence mujica.PresenceStatus
|
|
actions, disabled bool
|
|
}
|
|
s := ui.Local(c.Root(), "406", func() state { return state{actions: true, presence: mujica.PresenceOnline} })
|
|
mediaCheck(c, log, &s.actions, "Actions")
|
|
mediaCheck(c, log, &s.disabled, "Disable actions")
|
|
messagingPresence(c, log, &s.presence)
|
|
opts := mujica.UserProfileCardOptions{}
|
|
if s.actions {
|
|
opts.Actions = func() {
|
|
for _, action := range []string{"Message", "Call"} {
|
|
if mujica.Button(c, action, mujica.ButtonOptions{Disabled: s.disabled}).Clicked() {
|
|
log(action)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
mujica.UserProfileCard(c, mujica.UserProfile{Name: "Sakiko Togawa", Presence: s.presence, Role: "Keyboard", Status: "In rehearsal", About: "Founder of the masquerade."}, opts)
|
|
}
|
|
|
|
func onlineStatusDemo(c *ui.Context, log func(string)) {
|
|
type state struct {
|
|
presence mujica.PresenceStatus
|
|
hidden bool
|
|
}
|
|
s := ui.Local(c.Root(), "407", func() state { return state{presence: mujica.PresenceOnline} })
|
|
mediaCheck(c, log, &s.hidden, "Hide text")
|
|
messagingPresence(c, log, &s.presence)
|
|
mujica.OnlineStatus(c, s.presence, mujica.OnlineStatusOptions{HideText: s.hidden})
|
|
inputSection(c, "States", func() {
|
|
for p := mujica.PresenceOffline; p <= mujica.PresenceBusy; p++ {
|
|
mujica.OnlineStatus(c, p, mujica.OnlineStatusOptions{})
|
|
}
|
|
})
|
|
}
|
|
|
|
func statusSetterDemo(c *ui.Context, log func(string)) {
|
|
type state struct {
|
|
status mujica.CustomStatus
|
|
disabled bool
|
|
}
|
|
s := ui.Local(c.Root(), "408", func() state { return state{} })
|
|
mediaCheck(c, log, &s.disabled, "Disabled")
|
|
if mujica.StatusSetter(c, &s.status, mujica.StatusSetterOptions{Disabled: s.disabled}).Changed() {
|
|
log("status changed")
|
|
}
|
|
ui.Text(c, fmt.Sprintf("Text: %s; expires: %v", s.status.Text, s.status.Until))
|
|
}
|
|
|
|
func messagingPresence(c *ui.Context, log func(string), value *mujica.PresenceStatus) {
|
|
items := []mujica.SelectOption[mujica.PresenceStatus]{
|
|
{Value: mujica.PresenceOnline, Label: "Online"}, {Value: mujica.PresenceAway, Label: "Away"},
|
|
{Value: mujica.PresenceBusy, Label: "Busy"}, {Value: mujica.PresenceOffline, Label: "Offline"},
|
|
}
|
|
if mujica.Select(c, value, items, mujica.SelectOptions{Label: "Presence"}).Changed() {
|
|
log(fmt.Sprintf("presence %d", *value))
|
|
}
|
|
}
|