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}