Skip to content Search Apps Documentation Source Content File Folder Download Copy Actions State String Boolean Number Struct Map Slice Pointer Function Closure Reference Nil Package Type Interface Unknown

rendercharts.gno

1.15 Kb · 48 lines
 1package memberstore
 2
 3import (
 4	"strings"
 5
 6	"gno.land/p/samcrew/piechart/v0"
 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}