Search Apps Documentation Source Content File Folder Download Copy Actions Download

view_proposal_detail_page.gno

2.50 Kb Β· 64 lines
 1package basedao
 2
 3import (
 4	"strconv"
 5
 6	"gno.land/p/moul/md"
 7	"gno.land/p/moul/txlink"
 8	"gno.land/p/nt/seqid/v0"
 9	"gno.land/p/nt/ufmt/v0"
10	"gno.land/p/samcrew/daocond"
11	"gno.land/p/samcrew/daokit"
12)
13
14func (d *DAOPrivate) ProposalDetailPageView(idu uint64) string {
15	return d.ProposalDetailHeaderView() +
16		d.ProposalDetailView(idu)
17}
18
19func (d *DAOPrivate) ProposalDetailHeaderView() string {
20	pkgPath := d.Realm.PkgPath()
21	linkPath := getLinkPath(pkgPath)
22	name := d.GetProfileString(d.Realm.Address(), "DisplayName", "DAO")
23	s := ""
24	s += ufmt.Sprintf("# %s - Proposal Detail\n\n", name)
25	s += md.Link("> Go to Proposals", linkPath+":"+PROPOSALS_PATH) + "\n"
26	s += ufmt.Sprintf("\n--------------------------------\n")
27	return s
28}
29
30func (d *DAOPrivate) ProposalDetailView(idu uint64) string {
31	id := seqid.ID(idu)
32	proposal := d.Core.Proposals.GetProposal(uint64(id))
33	s := ""
34	s += ufmt.Sprintf("## Title - %s πŸ“œ\n\n", proposal.Title)
35	s += ufmt.Sprintf("## Description πŸ“\n\n%s\n\n", proposal.Description)
36	s += ufmt.Sprintf("## Resource - %s πŸ“¦\n\n", proposal.Action.Type())
37	resource := d.Core.Resources.Get(proposal.Action.Type())
38	s += ufmt.Sprintf("  - **Name:** %s\n", resource.DisplayName)
39	s += ufmt.Sprintf("  - **Description:** %s\n", resource.Description)
40	s += ufmt.Sprintf("  - **Condition:** %s\n\n", d.RenderWithRolesLinks(resource.Condition.Render()))
41	s += ("---\n\n")
42	s += proposal.Action.String() + "\n\n"
43	s += ("---\n\n")
44	proposal.UpdateStatus()
45	if proposal.Status == daokit.ProposalStatusOpen {
46		s += ufmt.Sprintf("## Status - Open 🟑\n\n")
47		s += md.Link("Approve this proposal πŸ—³οΈ", txlink.Call("Vote", "proposalID", strconv.FormatUint(idu, 10), "vote", daocond.VoteYes)) + "\n\n"
48	} else if proposal.Status == daokit.ProposalStatusPassed {
49		s += ufmt.Sprintf("## Status - Passed 🟒\n\n")
50		s += md.Link("Execute this proposal πŸ—³οΈ", txlink.Call("Execute", "proposalID", strconv.FormatUint(idu, 10))) + "\n\n"
51	} else if proposal.Status == daokit.ProposalStatusExecuted {
52		s += ufmt.Sprintf("## Status - Executed βœ…\n\n")
53	} else {
54		s += ufmt.Sprintf("## Status - Closed πŸ”΄\n\n")
55	}
56
57	signal := proposal.Condition.Signal(proposal.Ballot)
58	s += ufmt.Sprintf("%f", signal) + "\n"
59	s += ufmt.Sprintf("> proposed by %s πŸ‘€\n\n", proposal.ProposerID)
60	s += ufmt.Sprintf("\n--------------------------------\n")
61	s += ufmt.Sprintf("## Votes πŸ—³οΈ\n\n%s\n\n", d.RenderWithRolesLinks(proposal.Condition.RenderWithVotes(proposal.Ballot)))
62	s += ufmt.Sprintf("\n--------------------------------\n")
63	return s
64}