diff --git a/assets/styles/components/_proposals.scss b/assets/styles/components/_proposals.scss
index 05462b4..5eb88b0 100644
--- a/assets/styles/components/_proposals.scss
+++ b/assets/styles/components/_proposals.scss
@@ -207,6 +207,7 @@
.description {
p {
line-height: 1.7;
+ white-space: pre-wrap;
&:not(:last-child) {
margin-bottom: 2rem;
diff --git a/components/governance/Proposal.vue b/components/governance/Proposal.vue
index 410619a..1c66e79 100644
--- a/components/governance/Proposal.vue
+++ b/components/governance/Proposal.vue
@@ -4,9 +4,7 @@
{{ data.title }}
-
- {{ data.description }}
-
+
{{ data.description }}
diff --git a/store/governance/gov.js b/store/governance/gov.js
index d2f12e3..603a3ea 100644
--- a/store/governance/gov.js
+++ b/store/governance/gov.js
@@ -612,7 +612,7 @@ const actions = {
}
},
async fetchProposals({ rootGetters, getters, commit }, { requestId }) {
- let proposals
+ let proposals = []
try {
commit('SAVE_FETCHING_PROPOSALS', true)
@@ -624,68 +624,70 @@ const actions = {
return
}
- proposals = await govInstance.getPastEvents('ProposalCreated', {
- fromBlock: 0,
- toBlock: 'latest'
- })
- let title, description, rest
- proposals = proposals.map((e) => {
+ const [events, statuses] = await Promise.all([
+ govInstance.getPastEvents('ProposalCreated', {
+ fromBlock: 0,
+ toBlock: 'latest'
+ }),
+ aggregatorContract.methods.getAllProposals(govInstance._address).call()
+ ])
+
+ const parseDescription = ({ id, text }) => {
+ console.log('text', text)
+ if (netId === 1) {
+ switch (id) {
+ case 1:
+ return {
+ title: text,
+ description: 'See: https://torn.community/t/proposal-1-enable-torn-transfers/38'
+ }
+ case 10:
+ text = text.replace('\n', '\\n\\n')
+ break
+ case 11:
+ text = text.replace('"description"', ',"description"')
+ break
+ case 13:
+ text = text.replace(/\\\\n\\\\n(\s)?(\\n)?/g, '\\n')
+ }
+ }
+
+ let title, description, rest
try {
- ;({ title, description } = JSON.parse(e.returnValues.description))
- } catch (err) {
- ;[title, ...rest] = e.returnValues.description.split('\n', 2)
+ ;({ title, description } = JSON.parse(text))
+ } catch {
+ ;[title, ...rest] = text.split('\n', 2)
description = rest.join('\n')
}
- const netId = rootGetters['metamask/netId']
- if (netId === 1) {
- switch (Number(e.returnValues.id)) {
- case 1:
- description = 'See: https://torn.community/t/proposal-1-enable-torn-transfers/38'
- break
- case 10:
- ;({ title, description } = JSON.parse(e.returnValues.description.replaceAll('\n', '')))
- break
- case 11:
- ;({ title, description } = JSON.parse(
- e.returnValues.description.replace('"description"', ',"description"')
- ))
- }
- }
+ return { title, description }
+ }
- return {
- id: Number(e.returnValues.id),
- title,
- description,
- endTime: Number(e.returnValues.endTime),
- startTime: Number(e.returnValues.startTime),
- proposer: e.returnValues.proposer,
- target: e.returnValues.target,
- results: {
- for: '0',
- against: '0'
- }
- }
- })
- const statuses = await aggregatorContract.methods.getAllProposals(govInstance._address).call()
- proposals = proposals
- .map((p) => {
- const proposal = statuses[Number(p.id) - 1]
+ proposals = events
+ .map(({ returnValues }, index) => {
+ const id = Number(returnValues.id)
+ const { state, startTime, endTime, forVotes, againstVotes } = statuses[index]
+ const { title, description } = parseDescription({ id, text: returnValues.description })
- if (proposal.extended) {
- p.endTime = Number(proposal.endTime)
+ return {
+ id,
+ title,
+ description,
+ target: returnValues.target,
+ proposer: returnValues.proposer,
+ endTime: Number(endTime),
+ startTime: Number(startTime),
+ status: ProposalState[Number(state)],
+ results: {
+ for: fromWei(forVotes),
+ against: fromWei(againstVotes)
+ }
}
-
- p.status = ProposalState[Number(proposal.state)]
- p.results = {
- for: fromWei(proposal.forVotes),
- against: fromWei(proposal.againstVotes)
- }
- return p
})
.sort((a, b) => {
return a.id - b.id
})
+
if (requestId) {
return proposals[requestId]
}