Skip to content

Commit dff4e8a

Browse files
authored
Merge pull request #354 from ourzora/proposal-number-nav
Update proposal page to work with proposal numbers
2 parents 905ee17 + cb8d16d commit dff4e8a

File tree

6 files changed

+48
-27
lines changed

6 files changed

+48
-27
lines changed

apps/web/src/data/subgraph/queries/proposalOGMetadata.graphql

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1-
query proposalOGMetadata($proposalId: ID!) {
2-
proposal(id: $proposalId) {
1+
query proposalOGMetadata($where: Proposal_filter!, $first: Int!) {
2+
proposals(where: $where, first: $first) {
33
...Proposal
4+
votes {
5+
...ProposalVote
6+
}
47
dao {
58
name
69
contractImage

apps/web/src/data/subgraph/requests/proposalQuery.ts

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@ import {
77
import { SDK } from 'src/data/subgraph/client'
88
import {
99
ProposalFragment,
10-
ProposalOgMetadataQuery,
11-
ProposalQuery,
1210
ProposalVoteFragment as ProposalVote,
1311
} from 'src/data/subgraph/sdk.generated'
1412
import { CHAIN_ID } from 'src/typings'
@@ -22,14 +20,8 @@ export interface Proposal
2220
votes?: ProposalVote[]
2321
}
2422

25-
export type ProposalQueryLike = ProposalQuery | ProposalOgMetadataQuery
26-
27-
export const formatAndFetchState = async (chainId: CHAIN_ID, data: ProposalQueryLike) => {
28-
if (!data?.proposal) {
29-
return undefined
30-
}
31-
32-
const { executableFrom, expiresAt, calldatas, ...proposal } = data?.proposal
23+
export const formatAndFetchState = async (chainId: CHAIN_ID, data: ProposalFragment) => {
24+
const { executableFrom, expiresAt, calldatas, ...proposal } = data
3325

3426
const baseProposal = {
3527
...proposal,
@@ -61,7 +53,7 @@ export const getProposal = async (
6153
proposalId,
6254
})
6355

64-
return await formatAndFetchState(chainId, data)
56+
return await formatAndFetchState(chainId, data.proposal!)
6557
} catch (e) {
6658
console.log('err', e)
6759
Sentry.captureException(e)

apps/web/src/data/subgraph/sdk.generated.ts

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2118,12 +2118,13 @@ export type ProposalQuery = {
21182118
}
21192119

21202120
export type ProposalOgMetadataQueryVariables = Exact<{
2121-
proposalId: Scalars['ID']
2121+
where: Proposal_Filter
2122+
first: Scalars['Int']
21222123
}>
21232124

21242125
export type ProposalOgMetadataQuery = {
21252126
__typename?: 'Query'
2126-
proposal?: {
2127+
proposals: Array<{
21272128
__typename?: 'Proposal'
21282129
abstainVotes: number
21292130
againstVotes: number
@@ -2146,6 +2147,13 @@ export type ProposalOgMetadataQuery = {
21462147
voteStart: any
21472148
snapshotBlockNumber: any
21482149
transactionHash: any
2150+
votes: Array<{
2151+
__typename?: 'ProposalVote'
2152+
voter: any
2153+
support: ProposalVoteSupport
2154+
weight: number
2155+
reason?: string | null
2156+
}>
21492157
dao: {
21502158
__typename?: 'DAO'
21512159
name: string
@@ -2156,7 +2164,7 @@ export type ProposalOgMetadataQuery = {
21562164
treasuryAddress: any
21572165
governorAddress: any
21582166
}
2159-
} | null
2167+
}>
21602168
}
21612169

21622170
export type ProposalsQueryVariables = Exact<{
@@ -2514,9 +2522,12 @@ export const ProposalDocument = gql`
25142522
${ProposalVoteFragmentDoc}
25152523
`
25162524
export const ProposalOgMetadataDocument = gql`
2517-
query proposalOGMetadata($proposalId: ID!) {
2518-
proposal(id: $proposalId) {
2525+
query proposalOGMetadata($where: Proposal_filter!, $first: Int!) {
2526+
proposals(where: $where, first: $first) {
25192527
...Proposal
2528+
votes {
2529+
...ProposalVote
2530+
}
25202531
dao {
25212532
name
25222533
contractImage
@@ -2529,6 +2540,7 @@ export const ProposalOgMetadataDocument = gql`
25292540
}
25302541
}
25312542
${ProposalFragmentDoc}
2543+
${ProposalVoteFragmentDoc}
25322544
`
25332545
export const ProposalsDocument = gql`
25342546
query proposals($where: Proposal_filter, $first: Int!, $skip: Int) {

apps/web/src/modules/auction/components/AuctionPaused.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ export const AuctionPaused = () => {
7070
shallow={!pausedProposal?.proposalId}
7171
href={
7272
pausedProposal?.proposalId
73-
? `/dao/${query.network}/${query.token}/vote/${pausedProposal?.proposalId}`
73+
? `/dao/${query.network}/${query.token}/vote/${pausedProposal?.proposalNumber}`
7474
: `/dao/${query.network}/${query.token}?tab=activity`
7575
}
7676
>

apps/web/src/modules/proposal/components/ProposalCard.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,9 @@ export const ProposalCard: React.FC<ProposalCardProps> = ({
4141
return (
4242
<Link
4343
href={
44-
collection ? `/dao/${router?.query.network}/${collection}/vote/${proposalId}` : ''
44+
collection
45+
? `/dao/${router?.query.network}/${collection}/vote/${proposalNumber}`
46+
: ''
4547
}
4648
passHref
4749
>

apps/web/src/pages/dao/[network]/[token]/vote/[id].tsx

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {
1515
formatAndFetchState,
1616
getProposal,
1717
} from 'src/data/subgraph/requests/proposalQuery'
18+
import { Proposal_Filter } from 'src/data/subgraph/sdk.generated'
1819
import { getDaoLayout } from 'src/layouts/DaoLayout'
1920
import { DaoContractAddresses, SectionHandler } from 'src/modules/dao'
2021
import {
@@ -107,7 +108,7 @@ export default VotePage
107108

108109
export const getServerSideProps: GetServerSideProps = async ({ params, req, res }) => {
109110
const collection = params?.token as AddressType
110-
const proposalId = params?.id as `0x${string}`
111+
const proposalIdOrNumber = params?.id as `0x${string}`
111112
const network = params?.network as string
112113

113114
const chain = PUBLIC_DEFAULT_CHAINS.find((x) => x.slug === network)
@@ -121,11 +122,22 @@ export const getServerSideProps: GetServerSideProps = async ({ params, req, res
121122
const env = process.env.VERCEL_ENV || 'development'
122123
const protocol = env === 'development' ? 'http' : 'https'
123124

124-
const data = await SDK.connect(chain.id).proposalOGMetadata({
125-
proposalId,
126-
})
125+
let where: Proposal_Filter
127126

128-
if (!data.proposal) {
127+
where = proposalIdOrNumber.startsWith('0x')
128+
? {
129+
proposalId: proposalIdOrNumber,
130+
}
131+
: { proposalNumber: parseInt(proposalIdOrNumber), dao: collection.toLowerCase() }
132+
133+
const data = await SDK.connect(chain.id)
134+
.proposalOGMetadata({
135+
where,
136+
first: 1,
137+
})
138+
.then((x) => (x.proposals.length > 0 ? x.proposals[0] : undefined))
139+
140+
if (!data) {
129141
return {
130142
notFound: true,
131143
}
@@ -156,7 +168,7 @@ export const getServerSideProps: GetServerSideProps = async ({ params, req, res
156168
governorAddress,
157169
treasuryAddress,
158170
auctionAddress,
159-
} = data.proposal.dao
171+
} = data.dao
160172

161173
const ogMetadata: ProposalOgMetadata = {
162174
proposal: {
@@ -200,7 +212,7 @@ export const getServerSideProps: GetServerSideProps = async ({ params, req, res
200212
},
201213
daoName: name,
202214
ogImageURL,
203-
proposalId,
215+
proposalId: proposal.proposalId,
204216
addresses,
205217
},
206218
}

0 commit comments

Comments
 (0)