feat: template for all room participants

This commit is contained in:
efim 2023-11-16 06:22:09 +00:00
parent f8db7c14c8
commit 384afa0e00
2 changed files with 95 additions and 9 deletions

View File

@ -31,6 +31,42 @@ var brickColors = map[rooms.HandGesture]template.CSS{
rooms.ChangeTopic: "--change-topic-color", rooms.ChangeTopic: "--change-topic-color",
} }
func personsFromRoom(room rooms.Room) []personData {
// TODO start from the 'logged in person'
result := make([]personData, 0, len(room.Paricipants))
for _, pId := range room.Paricipants {
result = append(result, personDataFromRoom(room, pId))
}
return result
}
func personDataFromRoom(room rooms.Room, pId rooms.PersonId) personData {
person, exists := room.AllKnownPeople[pId]
if !exists || !slices.Contains(room.Paricipants, pId) {
return personData{}
}
hand, handExists := room.ParticipantHands[pId]
var mark rooms.HandGesture
var markExists bool
for gesture := rooms.ChangeTopic; gesture <= rooms.Meta; gesture++ {
if room.Marks[gesture] == pId {
markExists = true
mark = gesture
}
}
isSpeaker := room.CurrentSpeaker == pId
return personData{
Name: person.Name,
IsSpeaker: isSpeaker,
IsRaised: handExists,
Raised: hand,
IsMark: markExists,
Mark: mark,
}
}
func bricksForPerson(pData personData) []brickState { func bricksForPerson(pData personData) []brickState {
var result = make([]brickState, 5) var result = make([]brickState, 5)
for gesture := rooms.ChangeTopic; gesture <= rooms.Meta; gesture++ { for gesture := rooms.ChangeTopic; gesture <= rooms.Meta; gesture++ {
@ -75,11 +111,46 @@ func roomTemplatesPreview(
Mark: rooms.ProbingQ, Mark: rooms.ProbingQ,
} }
var person1 = rooms.Person{
Id: rooms.PersonId(100),
Name: "test person 1",
}
var person2 = rooms.Person{
Id: rooms.PersonId(200),
Name: "test person 2",
}
var person3 = rooms.Person{
Id: rooms.PersonId(300),
Name: "test person 3",
}
aRoom := rooms.Room{
Name: "test",
CurrentSpeaker: person3.Id,
AllKnownPeople: map[rooms.PersonId]rooms.Person{
person1.Id: person1,
person2.Id: person2,
person3.Id: person3,
},
Paricipants: []rooms.PersonId{
person1.Id,
person2.Id,
person3.Id,
},
ParticipantHands: map[rooms.PersonId]rooms.HandGesture{
person3.Id: rooms.ClarifyingQ,
person2.Id: rooms.Meta,
},
Marks: map[rooms.HandGesture]rooms.PersonId{
rooms.Expand: person1.Id,
},
}
contentData := struct { contentData := struct {
DefaultColor template.CSS DefaultColor template.CSS
Bricks []SingleBrickData Bricks []SingleBrickData
ABrick brickState ABrick brickState
TestPerson personData TestPerson personData
ARoom rooms.Room
}{ }{
DefaultColor: "--expand-color", DefaultColor: "--expand-color",
ABrick: brickState{ ABrick: brickState{
@ -109,6 +180,7 @@ func roomTemplatesPreview(
}, },
}, },
TestPerson: testPersonData, TestPerson: testPersonData,
ARoom: aRoom,
} }
pageData := pageData{ pageData := pageData{
@ -119,6 +191,7 @@ func roomTemplatesPreview(
baseFile := "templates/base.gohtml" baseFile := "templates/base.gohtml"
tmpl := template.Must(template.New("").Funcs(template.FuncMap{ tmpl := template.Must(template.New("").Funcs(template.FuncMap{
"bricksForPerson": bricksForPerson, "bricksForPerson": bricksForPerson,
"personsFromRoom": personsFromRoom,
}).ParseFS(templateFs, baseFile, "templates/tableTemplates.gohtml")) }).ParseFS(templateFs, baseFile, "templates/tableTemplates.gohtml"))
err := tmpl.ExecuteTemplate(w, "full-page", pageData) err := tmpl.ExecuteTemplate(w, "full-page", pageData)

View File

@ -82,16 +82,29 @@
<div class="border p-3"> <div class="border p-3">
{{ block "personBlocks" .TestPerson }} {{ block "personBlocks" .TestPerson }}
{{ range (bricksForPerson .) }} <div>
{{ template "brick" . }} {{ range (bricksForPerson .) }}
{{ end }} {{ template "brick" . }}
<p>{{ .Name }}</p> {{ end }}
<p>{{ .Name }}</p>
</div>
{{ end }} {{ end }}
</div> </div>
<h2>And now i'll want to get all persons for a room</h2> <h2>And now i'll want to get all persons for a room</h2>
<div class="grid place-content-center">
{{ block "roomPeople" .ARoom }}
<div
class="flex flex-row"
>
{{ range (personsFromRoom .) }}
{{ template "personBlocks" . }}
{{ end }}
</div>
{{end}}
</div>
{{end}} {{end}}