rendercharts.gno
1.15 Kb ยท 48 lines
1package memberstore
2
3import (
4 "strings"
5
6 "gno.land/p/samcrew/piechart"
7)
8
9// RenderCharts generates two pie charts for member tiers:
10// 1) distribution of member counts per tier
11// 2) distribution of power per tier
12func RenderCharts(members MembersByTier) string {
13 var sb strings.Builder
14
15 tierNames := []string{T1, T2, T3}
16 pieSlicesTs := make([]piechart.PieSlice, 0, len(tierNames))
17 pieSlicesTp := make([]piechart.PieSlice, 0, len(tierNames))
18
19 for _, tn := range tierNames {
20 tier, ok := Tiers.GetTier(tn)
21 if !ok {
22 return ""
23 }
24
25 ts := float64(members.GetTierSize(tn))
26 tp := tier.PowerHandler(members, Tiers) * ts
27
28 pieSlicesTs = append(pieSlicesTs, piechart.PieSlice{
29 Value: ts,
30 Color: tierColor(tn),
31 Label: tn,
32 })
33 pieSlicesTp = append(pieSlicesTp, piechart.PieSlice{
34 Value: tp,
35 Color: tierColor(tn),
36 Label: tn,
37 })
38 }
39
40 // Render pie charts for members count and power distribution
41 resultPieChartTs := piechart.Render(pieSlicesTs, "Members distribution:")
42 resultPieChartTp := piechart.Render(pieSlicesTp, "Power distribution:")
43
44 sb.WriteString(resultPieChartTs + "\n")
45 sb.WriteString(resultPieChartTp + "\n")
46
47 return sb.String()
48}