discordo/internal/ui/chat/memberstree/msg.go

43 lines
1.1 KiB
Go

package memberstree
import (
"github.com/ayn2op/ningen/v3/states/member"
"github.com/ayn2op/tview"
"github.com/ayn2op/tview/tree"
)
// Msg makes a node of the tree the current one.
type Msg struct {
current *tree.Node
}
// SelectedMsg is sent when the user selects a node.
type SelectedMsg struct {
Node *tree.Node
}
// requestSelectedMembers requests the chunk of the member list after the selected member, so that the members below it load before they are reached.
func (m Model) requestSelectedMembers() tview.Cmd {
node := m.current
if node == nil {
return nil
}
ref, ok := node.Reference().(memberRef)
if !ok || ref.index < 0 {
return nil
}
return m.requestMembers(member.ChunkFromIndex(ref.index) + 1)
}
// requestMembers requests the member list of the selected guild channel up to chunk.
func (m Model) requestMembers(chunk int) tview.Cmd {
channel := m.channel
if !m.Shown() || !channel.GuildID.IsValid() {
return nil
}
state := m.state
return func() tview.Msg {
state.MemberState.RequestMemberList(channel.GuildID, channel.ID, chunk)
return nil
}
}