-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* feat: add proposalsByGroupPolicyAddress query * fix: modify ProposalFragment * WIP: graphql-request and react-query * feat: use react-query and graphql-request * feat: add useGraphQLClient and useGroupHistoricalProposals * fix: use provider for graphql client * chore: add overwrite flag in codegen config * chore: tiny formatting change for graphql query * fix: parse historical proposals into UIProposal[] * feat: add historical proposals on groups-proposals-table * fix: rename fragment masking helper function * fix: add eslintignore to lint command and ignore src/gql/ * fix: apply linter on some files * chore: fix lint problems in hooks/use-query * chore: remove sort * fix: do not show execute button for historical proposals * fix: use better implementation with simpler type for useGroupHistoricalProposals * feat: render historical proposal on proposal page * fix: react key warning * feat: add proposal final tally table * chore: configure netlify with indexer api urls * fix: typo in final tally results table title Co-authored-by: Marie Gauthier <[email protected]> * fix: remove console.log statement Co-authored-by: Marie Gauthier <[email protected]> * refactor: is inline conditionals for rendering the proposal page * fix: make onVote optional in ProposalSummary * chore: remove unused AllProposals query * refactor: follow hyphenated naming convention * refactor: dedupe conversion of historical proposal into UIProposals * fix: use an index for proposal messages list * refactor: add helper function for converting executor result to code * fix: show final tally result table if voting period is closed * chore: rename historicalProposal to historical-proposal --------- Co-authored-by: Marie Gauthier <[email protected]> Co-authored-by: Ryan Christoffersen <[email protected]>
- Loading branch information
1 parent
dad0e76
commit d04c72f
Showing
27 changed files
with
5,131 additions
and
93 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,4 @@ | ||
VITE_LOCAL_HOSTNAME=http://127.0.0.1 | ||
VITE_PROXY_URL_REGEN_MAINNET=http://api.registry.regen.network | ||
VITE_PROXY_URL_REGEN_TESTNET=http://api-staging.registry.regen.network | ||
VITE_INDEXER_GRAPHQL_API=http://localhost:5000/indexer/graphql |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -3,4 +3,5 @@ node_modules | |
dist | ||
dist-ssr | ||
*.local | ||
node_modules/* | ||
node_modules/* | ||
src/gql/* |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -3,4 +3,5 @@ node_modules | |
dist | ||
dist-ssr | ||
*.local | ||
node_modules/* | ||
node_modules/* | ||
src/gql/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
import { CodegenConfig } from '@graphql-codegen/cli' | ||
|
||
const config: CodegenConfig = { | ||
overwrite: true, | ||
schema: 'http://localhost:5000/indexer/graphql', | ||
documents: ['src/graphql/indexer/**/*.graphql'], | ||
generates: { | ||
'./src/gql/': { | ||
preset: 'client', | ||
presetConfig: { fragmentMasking: { unmaskFunctionName: 'getFragmentData' } }, | ||
}, | ||
}, | ||
} | ||
|
||
export default config |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
import { TallyResult } from '@regen-network/api/types/codegen/cosmos/group/v1/types' | ||
|
||
import { Table, TableContainer, Tbody, Td, Th, Thead, Tr } from '@/atoms' | ||
import { TableTitlebar } from '@/molecules/table-titlebar' | ||
|
||
export const ProposalFinalTallyTable = ({ | ||
finalTallyResult, | ||
}: { | ||
finalTallyResult: TallyResult | ||
}) => { | ||
return ( | ||
<TableContainer> | ||
<TableTitlebar title="Final Tally Results" /> | ||
<Table variant="striped" size="lg"> | ||
<Thead> | ||
<Tr> | ||
<Th>Yes</Th> | ||
<Th>No</Th> | ||
<Th>Abstain</Th> | ||
<Th>No with veto</Th> | ||
</Tr> | ||
</Thead> | ||
<Tbody> | ||
<Tr> | ||
<Td>{finalTallyResult.yesCount}</Td> | ||
<Td>{finalTallyResult.noCount}</Td> | ||
<Td>{finalTallyResult.abstainCount}</Td> | ||
<Td>{finalTallyResult.noWithVetoCount}</Td> | ||
</Tr> | ||
</Tbody> | ||
</Table> | ||
</TableContainer> | ||
) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
import { ResultOf, DocumentTypeDecoration, TypedDocumentNode } from '@graphql-typed-document-node/core'; | ||
import { FragmentDefinitionNode } from 'graphql'; | ||
import { Incremental } from './graphql'; | ||
|
||
|
||
export type FragmentType<TDocumentType extends DocumentTypeDecoration<any, any>> = TDocumentType extends DocumentTypeDecoration< | ||
infer TType, | ||
any | ||
> | ||
? [TType] extends [{ ' $fragmentName'?: infer TKey }] | ||
? TKey extends string | ||
? { ' $fragmentRefs'?: { [key in TKey]: TType } } | ||
: never | ||
: never | ||
: never; | ||
|
||
// return non-nullable if `fragmentType` is non-nullable | ||
export function getFragmentData<TType>( | ||
_documentNode: DocumentTypeDecoration<TType, any>, | ||
fragmentType: FragmentType<DocumentTypeDecoration<TType, any>> | ||
): TType; | ||
// return nullable if `fragmentType` is nullable | ||
export function getFragmentData<TType>( | ||
_documentNode: DocumentTypeDecoration<TType, any>, | ||
fragmentType: FragmentType<DocumentTypeDecoration<TType, any>> | null | undefined | ||
): TType | null | undefined; | ||
// return array of non-nullable if `fragmentType` is array of non-nullable | ||
export function getFragmentData<TType>( | ||
_documentNode: DocumentTypeDecoration<TType, any>, | ||
fragmentType: ReadonlyArray<FragmentType<DocumentTypeDecoration<TType, any>>> | ||
): ReadonlyArray<TType>; | ||
// return array of nullable if `fragmentType` is array of nullable | ||
export function getFragmentData<TType>( | ||
_documentNode: DocumentTypeDecoration<TType, any>, | ||
fragmentType: ReadonlyArray<FragmentType<DocumentTypeDecoration<TType, any>>> | null | undefined | ||
): ReadonlyArray<TType> | null | undefined; | ||
export function getFragmentData<TType>( | ||
_documentNode: DocumentTypeDecoration<TType, any>, | ||
fragmentType: FragmentType<DocumentTypeDecoration<TType, any>> | ReadonlyArray<FragmentType<DocumentTypeDecoration<TType, any>>> | null | undefined | ||
): TType | ReadonlyArray<TType> | null | undefined { | ||
return fragmentType as any; | ||
} | ||
|
||
|
||
export function makeFragmentData< | ||
F extends DocumentTypeDecoration<any, any>, | ||
FT extends ResultOf<F> | ||
>(data: FT, _fragment: F): FragmentType<F> { | ||
return data as FragmentType<F>; | ||
} | ||
export function isFragmentReady<TQuery, TFrag>( | ||
queryNode: DocumentTypeDecoration<TQuery, any>, | ||
fragmentNode: TypedDocumentNode<TFrag>, | ||
data: FragmentType<TypedDocumentNode<Incremental<TFrag>, any>> | null | undefined | ||
): data is FragmentType<typeof fragmentNode> { | ||
const deferredFields = (queryNode as { __meta__?: { deferredFields: Record<string, (keyof TFrag)[]> } }).__meta__ | ||
?.deferredFields; | ||
|
||
if (!deferredFields) return true; | ||
|
||
const fragDef = fragmentNode.definitions[0] as FragmentDefinitionNode | undefined; | ||
const fragName = fragDef?.name?.value; | ||
|
||
const fields = (fragName && deferredFields[fragName]) || []; | ||
return fields.length > 0 && fields.every(field => data && field in data); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
/* eslint-disable */ | ||
import * as types from './graphql'; | ||
import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/core'; | ||
|
||
/** | ||
* Map of all GraphQL operations in the project. | ||
* | ||
* This map has several performance disadvantages: | ||
* 1. It is not tree-shakeable, so it will include all operations in the project. | ||
* 2. It is not minifiable, so the string of a GraphQL query will be multiple times inside the bundle. | ||
* 3. It does not support dead code elimination, so it will add unused operations. | ||
* | ||
* Therefore it is highly recommended to use the babel or swc plugin for production. | ||
*/ | ||
const documents = { | ||
"fragment ProposalItem on Proposal {\n type\n blockHeight\n txIdx\n msgIdx\n chainNum\n timestamp\n txHash\n id: proposalId\n status\n groupPolicyAddress\n groupPolicyVersion\n metadata\n proposers\n submitTime\n groupVersion\n groupPolicyAddress\n finalTallyResult\n votingPeriodEnd\n executorResult\n messages\n}": types.ProposalItemFragmentDoc, | ||
"query ProposalsByGroupPolicyAddress($groupPolicyAddress: String!) {\n allProposals(condition: {groupPolicyAddress: $groupPolicyAddress}) {\n nodes {\n ...ProposalItem\n }\n }\n}": types.ProposalsByGroupPolicyAddressDocument, | ||
"query ProposalsByProposalId($proposalId: BigInt!) {\n allProposals(condition: {proposalId: $proposalId}) {\n nodes {\n ...ProposalItem\n }\n }\n}": types.ProposalsByProposalIdDocument, | ||
}; | ||
|
||
/** | ||
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. | ||
* | ||
* | ||
* @example | ||
* ```ts | ||
* const query = graphql(`query GetUser($id: ID!) { user(id: $id) { name } }`); | ||
* ``` | ||
* | ||
* The query argument is unknown! | ||
* Please regenerate the types. | ||
*/ | ||
export function graphql(source: string): unknown; | ||
|
||
/** | ||
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. | ||
*/ | ||
export function graphql(source: "fragment ProposalItem on Proposal {\n type\n blockHeight\n txIdx\n msgIdx\n chainNum\n timestamp\n txHash\n id: proposalId\n status\n groupPolicyAddress\n groupPolicyVersion\n metadata\n proposers\n submitTime\n groupVersion\n groupPolicyAddress\n finalTallyResult\n votingPeriodEnd\n executorResult\n messages\n}"): (typeof documents)["fragment ProposalItem on Proposal {\n type\n blockHeight\n txIdx\n msgIdx\n chainNum\n timestamp\n txHash\n id: proposalId\n status\n groupPolicyAddress\n groupPolicyVersion\n metadata\n proposers\n submitTime\n groupVersion\n groupPolicyAddress\n finalTallyResult\n votingPeriodEnd\n executorResult\n messages\n}"]; | ||
/** | ||
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. | ||
*/ | ||
export function graphql(source: "query ProposalsByGroupPolicyAddress($groupPolicyAddress: String!) {\n allProposals(condition: {groupPolicyAddress: $groupPolicyAddress}) {\n nodes {\n ...ProposalItem\n }\n }\n}"): (typeof documents)["query ProposalsByGroupPolicyAddress($groupPolicyAddress: String!) {\n allProposals(condition: {groupPolicyAddress: $groupPolicyAddress}) {\n nodes {\n ...ProposalItem\n }\n }\n}"]; | ||
/** | ||
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. | ||
*/ | ||
export function graphql(source: "query ProposalsByProposalId($proposalId: BigInt!) {\n allProposals(condition: {proposalId: $proposalId}) {\n nodes {\n ...ProposalItem\n }\n }\n}"): (typeof documents)["query ProposalsByProposalId($proposalId: BigInt!) {\n allProposals(condition: {proposalId: $proposalId}) {\n nodes {\n ...ProposalItem\n }\n }\n}"]; | ||
|
||
export function graphql(source: string) { | ||
return (documents as any)[source] ?? {}; | ||
} | ||
|
||
export type DocumentType<TDocumentNode extends DocumentNode<any, any>> = TDocumentNode extends DocumentNode< infer TType, any> ? TType : never; |
Oops, something went wrong.