Search Apps Documentation Source Content File Folder Download Copy Actions Download

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}