From fb2705d84fc0d319e57a9ecd2848a20811ad4571 Mon Sep 17 00:00:00 2001 From: Matias Date: Thu, 12 Dec 2024 19:13:20 -0300 Subject: [PATCH 01/14] feat: upgrade getCommunity query --- pkg/subgraph/.graphclient/index.d.ts | 2 +- pkg/subgraph/.graphclient/index.js | 1767 ++++++++--------- .../.graphclient/persisted_operations.json | 2 +- pkg/subgraph/.graphclientrc.yml | 2 +- pkg/subgraph/src/query/queries.graphql | 8 +- pkg/subgraph/subgraph.yaml | 28 +- 6 files changed, 856 insertions(+), 953 deletions(-) diff --git a/pkg/subgraph/.graphclient/index.d.ts b/pkg/subgraph/.graphclient/index.d.ts index 8df9bbea3..970b006bb 100644 --- a/pkg/subgraph/.graphclient/index.d.ts +++ b/pkg/subgraph/.graphclient/index.d.ts @@ -3691,7 +3691,7 @@ export type getCommunityQueryVariables = Exact<{ }>; export type getCommunityQuery = { registryCommunity?: Maybe<(Pick & { - members?: Maybe>>; + members?: Maybe>>; strategies?: Maybe & { proposals: Array>; config: Pick; diff --git a/pkg/subgraph/.graphclient/index.js b/pkg/subgraph/.graphclient/index.js index be34218bd..d47e37a2c 100644 --- a/pkg/subgraph/.graphclient/index.js +++ b/pkg/subgraph/.graphclient/index.js @@ -1,896 +1,821 @@ -import { gql } from "@graphql-mesh/utils"; -import { PubSub } from "@graphql-mesh/utils"; -import { DefaultLogger } from "@graphql-mesh/utils"; +import { gql } from '@graphql-mesh/utils'; +import { PubSub } from '@graphql-mesh/utils'; +import { DefaultLogger } from '@graphql-mesh/utils'; import MeshCache from "@graphql-mesh/cache-localforage"; -import { fetch as fetchFn } from "@whatwg-node/fetch"; +import { fetch as fetchFn } from '@whatwg-node/fetch'; import GraphqlHandler from "@graphql-mesh/graphql"; import BareMerger from "@graphql-mesh/merger-bare"; -import { printWithCache } from "@graphql-mesh/utils"; -import { usePersistedOperations } from "@graphql-yoga/plugin-persisted-operations"; -import { createMeshHTTPHandler } from "@graphql-mesh/http"; -import { getMesh } from "@graphql-mesh/runtime"; -import { MeshStore, FsStoreStorageAdapter } from "@graphql-mesh/store"; -import { path as pathModule } from "@graphql-mesh/cross-helpers"; +import { printWithCache } from '@graphql-mesh/utils'; +import { usePersistedOperations } from '@graphql-yoga/plugin-persisted-operations'; +import { createMeshHTTPHandler } from '@graphql-mesh/http'; +import { getMesh } from '@graphql-mesh/runtime'; +import { MeshStore, FsStoreStorageAdapter } from '@graphql-mesh/store'; +import { path as pathModule } from '@graphql-mesh/cross-helpers'; import * as importedModule$0 from "./sources/gv2/introspectionSchema.js"; -import { fileURLToPath } from "@graphql-mesh/utils"; -const baseDir = pathModule.join( - pathModule.dirname(fileURLToPath(import.meta.url)), - "..", -); +import { fileURLToPath } from '@graphql-mesh/utils'; +const baseDir = pathModule.join(pathModule.dirname(fileURLToPath(import.meta.url)), '..'); const importFn = (moduleId) => { - const relativeModuleId = ( - pathModule.isAbsolute(moduleId) - ? pathModule.relative(baseDir, moduleId) - : moduleId - ) - .split("\\") - .join("/") - .replace(baseDir + "/", ""); - switch (relativeModuleId) { - case ".graphclient/sources/gv2/introspectionSchema.js": - return Promise.resolve(importedModule$0); - default: - return Promise.reject( - new Error(`Cannot find module '${relativeModuleId}'.`), - ); - } + const relativeModuleId = (pathModule.isAbsolute(moduleId) ? pathModule.relative(baseDir, moduleId) : moduleId).split('\\').join('/').replace(baseDir + '/', ''); + switch (relativeModuleId) { + case ".graphclient/sources/gv2/introspectionSchema.js": + return Promise.resolve(importedModule$0); + default: + return Promise.reject(new Error(`Cannot find module '${relativeModuleId}'.`)); + } }; -const rootStore = new MeshStore( - ".graphclient", - new FsStoreStorageAdapter({ +const rootStore = new MeshStore('.graphclient', new FsStoreStorageAdapter({ cwd: baseDir, importFn, fileType: "js", - }), - { +}), { readonly: true, - validate: false, - }, -); + validate: false +}); export const rawServeConfig = undefined; export async function getMeshOptions() { - const pubsub = new PubSub(); - const sourcesStore = rootStore.child("sources"); - const logger = new DefaultLogger("GraphClient"); - const cache = new MeshCache({ - ...{}, - importFn, - store: rootStore.child("cache"), - pubsub, - logger, - }); - const sources = []; - const transforms = []; - const additionalEnvelopPlugins = []; - const gv2Transforms = []; - const additionalTypeDefs = []; - const gv2Handler = new GraphqlHandler({ - name: "gv2", - config: { - endpoint: - "https://api.studio.thegraph.com/query/40931/gardens-v2---arbitrum-sepolia/0.2.0", - }, - baseDir, - cache, - pubsub, - store: sourcesStore.child("gv2"), - logger: logger.child("gv2"), - importFn, - }); - sources[0] = { - name: "gv2", - handler: gv2Handler, - transforms: gv2Transforms, - }; - const additionalResolvers = []; - const merger = new BareMerger({ - cache, - pubsub, - logger: logger.child("bareMerger"), - store: rootStore.child("bareMerger"), - }); - const documentHashMap = { - "21229f9d4b89789bd890d0c0bb2110cff569de8fcc57bc021b4610c3e7397bfa": - GetFactoriesDocument, - "21229f9d4b89789bd890d0c0bb2110cff569de8fcc57bc021b4610c3e7397bfa": - GetTokenGardensDocument, - "21229f9d4b89789bd890d0c0bb2110cff569de8fcc57bc021b4610c3e7397bfa": - GetMemberStrategyDocument, - "21229f9d4b89789bd890d0c0bb2110cff569de8fcc57bc021b4610c3e7397bfa": - IsMemberDocument, - "21229f9d4b89789bd890d0c0bb2110cff569de8fcc57bc021b4610c3e7397bfa": - GetMemberDocument, - "21229f9d4b89789bd890d0c0bb2110cff569de8fcc57bc021b4610c3e7397bfa": - GetPoolCreationDataDocument, - "21229f9d4b89789bd890d0c0bb2110cff569de8fcc57bc021b4610c3e7397bfa": - GetGardenCommunitiesDocument, - "21229f9d4b89789bd890d0c0bb2110cff569de8fcc57bc021b4610c3e7397bfa": - GetCommunityDocument, - "21229f9d4b89789bd890d0c0bb2110cff569de8fcc57bc021b4610c3e7397bfa": - GetCommunityCreationDataDocument, - "21229f9d4b89789bd890d0c0bb2110cff569de8fcc57bc021b4610c3e7397bfa": - GetPoolDataDocument, - "21229f9d4b89789bd890d0c0bb2110cff569de8fcc57bc021b4610c3e7397bfa": - GetProposalDataDocument, - "21229f9d4b89789bd890d0c0bb2110cff569de8fcc57bc021b4610c3e7397bfa": - GetAlloDocument, - "21229f9d4b89789bd890d0c0bb2110cff569de8fcc57bc021b4610c3e7397bfa": - GetStrategyByPoolDocument, - "21229f9d4b89789bd890d0c0bb2110cff569de8fcc57bc021b4610c3e7397bfa": - GetTokenTitleDocument, - "21229f9d4b89789bd890d0c0bb2110cff569de8fcc57bc021b4610c3e7397bfa": - GetCommunityTitlesDocument, - "21229f9d4b89789bd890d0c0bb2110cff569de8fcc57bc021b4610c3e7397bfa": - GetPoolTitlesDocument, - "21229f9d4b89789bd890d0c0bb2110cff569de8fcc57bc021b4610c3e7397bfa": - GetProposalTitlesDocument, - "21229f9d4b89789bd890d0c0bb2110cff569de8fcc57bc021b4610c3e7397bfa": - GetPassportScorerDocument, - "21229f9d4b89789bd890d0c0bb2110cff569de8fcc57bc021b4610c3e7397bfa": - GetPassportStrategyDocument, - "21229f9d4b89789bd890d0c0bb2110cff569de8fcc57bc021b4610c3e7397bfa": - GetPassportUserDocument, - "21229f9d4b89789bd890d0c0bb2110cff569de8fcc57bc021b4610c3e7397bfa": - GetProposalDisputesDocument, - "21229f9d4b89789bd890d0c0bb2110cff569de8fcc57bc021b4610c3e7397bfa": - GetArbitrableConfigsDocument, - "21229f9d4b89789bd890d0c0bb2110cff569de8fcc57bc021b4610c3e7397bfa": - GetMemberPassportAndCommunitiesDocument, - }; - additionalEnvelopPlugins.push( - usePersistedOperations({ - getPersistedOperation(key) { - return documentHashMap[key]; - }, - ...{}, - }), - ); - return { - sources, - transforms, - additionalTypeDefs, - additionalResolvers, - cache, - pubsub, - merger, - logger, - additionalEnvelopPlugins, - get documents() { - return [ - { - document: GetFactoriesDocument, - get rawSDL() { - return printWithCache(GetFactoriesDocument); - }, - location: "GetFactoriesDocument.graphql", - sha256Hash: - "21229f9d4b89789bd890d0c0bb2110cff569de8fcc57bc021b4610c3e7397bfa", - }, - { - document: GetTokenGardensDocument, - get rawSDL() { - return printWithCache(GetTokenGardensDocument); - }, - location: "GetTokenGardensDocument.graphql", - sha256Hash: - "21229f9d4b89789bd890d0c0bb2110cff569de8fcc57bc021b4610c3e7397bfa", - }, - { - document: GetMemberStrategyDocument, - get rawSDL() { - return printWithCache(GetMemberStrategyDocument); - }, - location: "GetMemberStrategyDocument.graphql", - sha256Hash: - "21229f9d4b89789bd890d0c0bb2110cff569de8fcc57bc021b4610c3e7397bfa", - }, - { - document: IsMemberDocument, - get rawSDL() { - return printWithCache(IsMemberDocument); - }, - location: "IsMemberDocument.graphql", - sha256Hash: - "21229f9d4b89789bd890d0c0bb2110cff569de8fcc57bc021b4610c3e7397bfa", - }, - { - document: GetMemberDocument, - get rawSDL() { - return printWithCache(GetMemberDocument); - }, - location: "GetMemberDocument.graphql", - sha256Hash: - "67f63761732b211149e54c0edb8712b2a2cddd1ab68a30429d5263de6b11e8ec", - }, - { - document: GetPoolCreationDataDocument, - get rawSDL() { - return printWithCache(GetPoolCreationDataDocument); - }, - location: "GetPoolCreationDataDocument.graphql", - sha256Hash: - "67f63761732b211149e54c0edb8712b2a2cddd1ab68a30429d5263de6b11e8ec", - }, - { - document: GetGardenCommunitiesDocument, - get rawSDL() { - return printWithCache(GetGardenCommunitiesDocument); - }, - location: "GetGardenCommunitiesDocument.graphql", - sha256Hash: - "67f63761732b211149e54c0edb8712b2a2cddd1ab68a30429d5263de6b11e8ec", - }, - { - document: GetCommunityDocument, - get rawSDL() { - return printWithCache(GetCommunityDocument); - }, - location: "GetCommunityDocument.graphql", - sha256Hash: - "67f63761732b211149e54c0edb8712b2a2cddd1ab68a30429d5263de6b11e8ec", - }, - { - document: GetCommunityCreationDataDocument, - get rawSDL() { - return printWithCache(GetCommunityCreationDataDocument); - }, - location: "GetCommunityCreationDataDocument.graphql", - sha256Hash: - "67f63761732b211149e54c0edb8712b2a2cddd1ab68a30429d5263de6b11e8ec", - }, - { - document: GetPoolDataDocument, - get rawSDL() { - return printWithCache(GetPoolDataDocument); - }, - location: "GetPoolDataDocument.graphql", - sha256Hash: - "67f63761732b211149e54c0edb8712b2a2cddd1ab68a30429d5263de6b11e8ec", - }, - { - document: GetProposalDataDocument, - get rawSDL() { - return printWithCache(GetProposalDataDocument); - }, - location: "GetProposalDataDocument.graphql", - sha256Hash: - "67f63761732b211149e54c0edb8712b2a2cddd1ab68a30429d5263de6b11e8ec", - }, - { - document: GetAlloDocument, - get rawSDL() { - return printWithCache(GetAlloDocument); - }, - location: "GetAlloDocument.graphql", - sha256Hash: - "67f63761732b211149e54c0edb8712b2a2cddd1ab68a30429d5263de6b11e8ec", - }, - { - document: GetStrategyByPoolDocument, - get rawSDL() { - return printWithCache(GetStrategyByPoolDocument); - }, - location: "GetStrategyByPoolDocument.graphql", - sha256Hash: - "67f63761732b211149e54c0edb8712b2a2cddd1ab68a30429d5263de6b11e8ec", - }, - { - document: GetTokenTitleDocument, - get rawSDL() { - return printWithCache(GetTokenTitleDocument); - }, - location: "GetTokenTitleDocument.graphql", - sha256Hash: - "67f63761732b211149e54c0edb8712b2a2cddd1ab68a30429d5263de6b11e8ec", - }, - { - document: GetCommunityTitlesDocument, - get rawSDL() { - return printWithCache(GetCommunityTitlesDocument); - }, - location: "GetCommunityTitlesDocument.graphql", - sha256Hash: - "67f63761732b211149e54c0edb8712b2a2cddd1ab68a30429d5263de6b11e8ec", - }, - { - document: GetPoolTitlesDocument, - get rawSDL() { - return printWithCache(GetPoolTitlesDocument); - }, - location: "GetPoolTitlesDocument.graphql", - sha256Hash: - "67f63761732b211149e54c0edb8712b2a2cddd1ab68a30429d5263de6b11e8ec", - }, - { - document: GetProposalTitlesDocument, - get rawSDL() { - return printWithCache(GetProposalTitlesDocument); - }, - location: "GetProposalTitlesDocument.graphql", - sha256Hash: - "67f63761732b211149e54c0edb8712b2a2cddd1ab68a30429d5263de6b11e8ec", - }, - { - document: GetPassportScorerDocument, - get rawSDL() { - return printWithCache(GetPassportScorerDocument); - }, - location: "GetPassportScorerDocument.graphql", - sha256Hash: - "67f63761732b211149e54c0edb8712b2a2cddd1ab68a30429d5263de6b11e8ec", - }, - { - document: GetPassportStrategyDocument, - get rawSDL() { - return printWithCache(GetPassportStrategyDocument); - }, - location: "GetPassportStrategyDocument.graphql", - sha256Hash: - "21229f9d4b89789bd890d0c0bb2110cff569de8fcc57bc021b4610c3e7397bfa", - }, - { - document: GetPassportUserDocument, - get rawSDL() { - return printWithCache(GetPassportUserDocument); - }, - location: "GetPassportUserDocument.graphql", - sha256Hash: - "21229f9d4b89789bd890d0c0bb2110cff569de8fcc57bc021b4610c3e7397bfa", - }, - { - document: GetProposalDisputesDocument, - get rawSDL() { - return printWithCache(GetProposalDisputesDocument); - }, - location: "GetProposalDisputesDocument.graphql", - sha256Hash: - "21229f9d4b89789bd890d0c0bb2110cff569de8fcc57bc021b4610c3e7397bfa", + const pubsub = new PubSub(); + const sourcesStore = rootStore.child('sources'); + const logger = new DefaultLogger("GraphClient"); + const cache = new MeshCache({ + ...{}, + importFn, + store: rootStore.child('cache'), + pubsub, + logger, + }); + const sources = []; + const transforms = []; + const additionalEnvelopPlugins = []; + const gv2Transforms = []; + const additionalTypeDefs = []; + const gv2Handler = new GraphqlHandler({ + name: "gv2", + config: { "endpoint": "https://api.studio.thegraph.com/query/70985/gardens-v2---arbitrum-sepolia/0.3.0" }, + baseDir, + cache, + pubsub, + store: sourcesStore.child("gv2"), + logger: logger.child("gv2"), + importFn, + }); + sources[0] = { + name: 'gv2', + handler: gv2Handler, + transforms: gv2Transforms + }; + const additionalResolvers = []; + const merger = new BareMerger({ + cache, + pubsub, + logger: logger.child('bareMerger'), + store: rootStore.child('bareMerger') + }); + const documentHashMap = { + "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetFactoriesDocument, + "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetTokenGardensDocument, + "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetMemberStrategyDocument, + "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": IsMemberDocument, + "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetMemberDocument, + "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetPoolCreationDataDocument, + "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetProposalSupportersDocument, + "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetGardenCommunitiesDocument, + "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetCommunityDocument, + "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetCommunityCreationDataDocument, + "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetPoolDataDocument, + "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetProposalDataDocument, + "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetAlloDocument, + "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetStrategyByPoolDocument, + "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetTokenTitleDocument, + "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetCommunityTitlesDocument, + "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetPoolTitlesDocument, + "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetProposalTitlesDocument, + "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetPassportScorerDocument, + "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetPassportStrategyDocument, + "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetPassportUserDocument, + "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetProposalDisputesDocument, + "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetArbitrableConfigsDocument, + "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetMemberPassportAndCommunitiesDocument + }; + additionalEnvelopPlugins.push(usePersistedOperations({ + getPersistedOperation(key) { + return documentHashMap[key]; }, - { - document: GetArbitrableConfigsDocument, - get rawSDL() { - return printWithCache(GetArbitrableConfigsDocument); - }, - location: "GetArbitrableConfigsDocument.graphql", - sha256Hash: - "21229f9d4b89789bd890d0c0bb2110cff569de8fcc57bc021b4610c3e7397bfa", + ...{} + })); + return { + sources, + transforms, + additionalTypeDefs, + additionalResolvers, + cache, + pubsub, + merger, + logger, + additionalEnvelopPlugins, + get documents() { + return [ + { + document: GetFactoriesDocument, + get rawSDL() { + return printWithCache(GetFactoriesDocument); + }, + location: 'GetFactoriesDocument.graphql', + sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + }, { + document: GetTokenGardensDocument, + get rawSDL() { + return printWithCache(GetTokenGardensDocument); + }, + location: 'GetTokenGardensDocument.graphql', + sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + }, { + document: GetMemberStrategyDocument, + get rawSDL() { + return printWithCache(GetMemberStrategyDocument); + }, + location: 'GetMemberStrategyDocument.graphql', + sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + }, { + document: IsMemberDocument, + get rawSDL() { + return printWithCache(IsMemberDocument); + }, + location: 'IsMemberDocument.graphql', + sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + }, { + document: GetMemberDocument, + get rawSDL() { + return printWithCache(GetMemberDocument); + }, + location: 'GetMemberDocument.graphql', + sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + }, { + document: GetPoolCreationDataDocument, + get rawSDL() { + return printWithCache(GetPoolCreationDataDocument); + }, + location: 'GetPoolCreationDataDocument.graphql', + sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + }, { + document: GetProposalSupportersDocument, + get rawSDL() { + return printWithCache(GetProposalSupportersDocument); + }, + location: 'GetProposalSupportersDocument.graphql', + sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + }, { + document: GetGardenCommunitiesDocument, + get rawSDL() { + return printWithCache(GetGardenCommunitiesDocument); + }, + location: 'GetGardenCommunitiesDocument.graphql', + sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + }, { + document: GetCommunityDocument, + get rawSDL() { + return printWithCache(GetCommunityDocument); + }, + location: 'GetCommunityDocument.graphql', + sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + }, { + document: GetCommunityCreationDataDocument, + get rawSDL() { + return printWithCache(GetCommunityCreationDataDocument); + }, + location: 'GetCommunityCreationDataDocument.graphql', + sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + }, { + document: GetPoolDataDocument, + get rawSDL() { + return printWithCache(GetPoolDataDocument); + }, + location: 'GetPoolDataDocument.graphql', + sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + }, { + document: GetProposalDataDocument, + get rawSDL() { + return printWithCache(GetProposalDataDocument); + }, + location: 'GetProposalDataDocument.graphql', + sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + }, { + document: GetAlloDocument, + get rawSDL() { + return printWithCache(GetAlloDocument); + }, + location: 'GetAlloDocument.graphql', + sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + }, { + document: GetStrategyByPoolDocument, + get rawSDL() { + return printWithCache(GetStrategyByPoolDocument); + }, + location: 'GetStrategyByPoolDocument.graphql', + sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + }, { + document: GetTokenTitleDocument, + get rawSDL() { + return printWithCache(GetTokenTitleDocument); + }, + location: 'GetTokenTitleDocument.graphql', + sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + }, { + document: GetCommunityTitlesDocument, + get rawSDL() { + return printWithCache(GetCommunityTitlesDocument); + }, + location: 'GetCommunityTitlesDocument.graphql', + sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + }, { + document: GetPoolTitlesDocument, + get rawSDL() { + return printWithCache(GetPoolTitlesDocument); + }, + location: 'GetPoolTitlesDocument.graphql', + sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + }, { + document: GetProposalTitlesDocument, + get rawSDL() { + return printWithCache(GetProposalTitlesDocument); + }, + location: 'GetProposalTitlesDocument.graphql', + sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + }, { + document: GetPassportScorerDocument, + get rawSDL() { + return printWithCache(GetPassportScorerDocument); + }, + location: 'GetPassportScorerDocument.graphql', + sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + }, { + document: GetPassportStrategyDocument, + get rawSDL() { + return printWithCache(GetPassportStrategyDocument); + }, + location: 'GetPassportStrategyDocument.graphql', + sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + }, { + document: GetPassportUserDocument, + get rawSDL() { + return printWithCache(GetPassportUserDocument); + }, + location: 'GetPassportUserDocument.graphql', + sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + }, { + document: GetProposalDisputesDocument, + get rawSDL() { + return printWithCache(GetProposalDisputesDocument); + }, + location: 'GetProposalDisputesDocument.graphql', + sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + }, { + document: GetArbitrableConfigsDocument, + get rawSDL() { + return printWithCache(GetArbitrableConfigsDocument); + }, + location: 'GetArbitrableConfigsDocument.graphql', + sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + }, { + document: GetMemberPassportAndCommunitiesDocument, + get rawSDL() { + return printWithCache(GetMemberPassportAndCommunitiesDocument); + }, + location: 'GetMemberPassportAndCommunitiesDocument.graphql', + sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + } + ]; }, - { - document: GetMemberPassportAndCommunitiesDocument, - get rawSDL() { - return printWithCache(GetMemberPassportAndCommunitiesDocument); - }, - location: "GetMemberPassportAndCommunitiesDocument.graphql", - sha256Hash: - "21229f9d4b89789bd890d0c0bb2110cff569de8fcc57bc021b4610c3e7397bfa", - }, - ]; - }, - fetchFn, - }; + fetchFn, + }; } export function createBuiltMeshHTTPHandler() { - return createMeshHTTPHandler({ - baseDir, - getBuiltMesh: getBuiltGraphClient, - rawServeConfig: undefined, - }); + return createMeshHTTPHandler({ + baseDir, + getBuiltMesh: getBuiltGraphClient, + rawServeConfig: undefined, + }); } let meshInstance$; export const pollingInterval = null; export function getBuiltGraphClient() { - if (meshInstance$ == null) { - if (pollingInterval) { - setInterval(() => { - getMeshOptions() - .then((meshOptions) => getMesh(meshOptions)) - .then((newMesh) => - meshInstance$.then((oldMesh) => { - oldMesh.destroy(); - meshInstance$ = Promise.resolve(newMesh); - }), - ) - .catch((err) => { - console.error( - "Mesh polling failed so the existing version will be used:", - err, - ); - }); - }, pollingInterval); - } - meshInstance$ = getMeshOptions() - .then((meshOptions) => getMesh(meshOptions)) - .then((mesh) => { - const id = mesh.pubsub.subscribe("destroy", () => { - meshInstance$ = undefined; - mesh.pubsub.unsubscribe(id); + if (meshInstance$ == null) { + if (pollingInterval) { + setInterval(() => { + getMeshOptions() + .then(meshOptions => getMesh(meshOptions)) + .then(newMesh => meshInstance$.then(oldMesh => { + oldMesh.destroy(); + meshInstance$ = Promise.resolve(newMesh); + })).catch(err => { + console.error("Mesh polling failed so the existing version will be used:", err); + }); + }, pollingInterval); + } + meshInstance$ = getMeshOptions().then(meshOptions => getMesh(meshOptions)).then(mesh => { + const id = mesh.pubsub.subscribe('destroy', () => { + meshInstance$ = undefined; + mesh.pubsub.unsubscribe(id); + }); + return mesh; }); - return mesh; - }); - } - return meshInstance$; + } + return meshInstance$; } -export const execute = (...args) => - getBuiltGraphClient().then(({ execute }) => execute(...args)); -export const subscribe = (...args) => - getBuiltGraphClient().then(({ subscribe }) => subscribe(...args)); +export const execute = (...args) => getBuiltGraphClient().then(({ execute }) => execute(...args)); +export const subscribe = (...args) => getBuiltGraphClient().then(({ subscribe }) => subscribe(...args)); export function getBuiltGraphSDK(globalContext) { - const sdkRequester$ = getBuiltGraphClient().then(({ sdkRequesterFactory }) => - sdkRequesterFactory(globalContext), - ); - return getSdk((...args) => - sdkRequester$.then((sdkRequester) => sdkRequester(...args)), - ); + const sdkRequester$ = getBuiltGraphClient().then(({ sdkRequesterFactory }) => sdkRequesterFactory(globalContext)); + return getSdk((...args) => sdkRequester$.then(sdkRequester => sdkRequester(...args))); } -export const getFactoriesDocument = gql` - query getFactories { - registryFactories { +export const getFactoriesDocument = gql ` + query getFactories { + registryFactories { + id + registryCommunities { id - registryCommunities { + chainId + isValid + communityName + covenantIpfsHash + registerToken + alloAddress + members { + memberAddress + } + strategies { id - chainId - isValid - communityName - covenantIpfsHash - registerToken - alloAddress - members { - memberAddress - } - strategies { + poolId + isEnabled + config { id - poolId - isEnabled - config { - id - decay - maxRatio - weight - minThresholdPoints - } + decay + maxRatio + weight + minThresholdPoints } } } } -`; -export const getTokenGardensDocument = gql` - query getTokenGardens { - tokenGardens { +} + `; +export const getTokenGardensDocument = gql ` + query getTokenGardens { + tokenGardens { + id + chainId + name + symbol + decimals + totalBalance + communities { id chainId - name - symbol - decimals - totalBalance - communities { + covenantIpfsHash + communityFee + isValid + communityName + strategies { id - chainId - covenantIpfsHash - communityFee - isValid - communityName - strategies { - id - } - members { - id - memberAddress - } + } + members { + id + memberAddress } } } -`; -export const getMemberStrategyDocument = gql` - query getMemberStrategy($member_strategy: ID!) { - memberStrategy(id: $member_strategy) { +} + `; +export const getMemberStrategyDocument = gql ` + query getMemberStrategy($member_strategy: ID!) { + memberStrategy(id: $member_strategy) { + id + totalStakedPoints + activatedPoints + strategy { + id + } + member { id - totalStakedPoints - activatedPoints - strategy { - id - } - member { - id - } } } -`; -export const isMemberDocument = gql` - query isMember($me: ID!, $comm: String!) { - member(id: $me) { +} + `; +export const isMemberDocument = gql ` + query isMember($me: ID!, $comm: String!) { + member(id: $me) { + id + stakes { id - stakes { + amount + proposal { id - amount - proposal { + proposalNumber + stakedAmount + strategy { id - proposalNumber - stakedAmount - strategy { + poolId + registryCommunity { id - poolId - registryCommunity { + isValid + garden { id - isValid - garden { - id - symbol - decimals - } + symbol + decimals } } } } - memberCommunity(where: { registryCommunity_contains: $comm }) { - stakedTokens - isRegistered - registryCommunity { - id - } + } + memberCommunity(where: {registryCommunity_contains: $comm}) { + stakedTokens + isRegistered + registryCommunity { + id } } } -`; -export const getMemberDocument = gql` - query getMember($me: ID!) { - member(id: $me) { +} + `; +export const getMemberDocument = gql ` + query getMember($me: ID!) { + member(id: $me) { + id + memberCommunity { id - memberCommunity { + stakedTokens + isRegistered + registryCommunity { id - stakedTokens - isRegistered - registryCommunity { - id - isValid - } + isValid } - stakes { + } + stakes { + id + proposal { + proposalNumber id - proposal { - proposalNumber - id - } - amount - createdAt } + amount + createdAt } } -`; -export const getPoolCreationDataDocument = gql` - query getPoolCreationData($communityAddr: ID!, $tokenAddr: ID!) { - tokenGarden(id: $tokenAddr) { - decimals - id - symbol - } - allos { - id - } - registryCommunity(id: $communityAddr) { - communityName - isValid - } +} + `; +export const getPoolCreationDataDocument = gql ` + query getPoolCreationData($communityAddr: ID!, $tokenAddr: ID!) { + tokenGarden(id: $tokenAddr) { + decimals + id + symbol } -`; -export const getProposalSupportersDocument = gql` - query getProposalSupporters($proposalId: String!) { - members { - id - stakes(where: { proposal: $proposalId }) { - amount - proposal { - proposalNumber - id - } - } - } + allos { + id } -`; -export const getGardenCommunitiesDocument = gql` - query getGardenCommunities($chainId: BigInt!, $tokenGarden: ID!) { - registryCommunities( - where: { chainId: $chainId, garden_: { id: $tokenGarden } } - ) { - id - garden { - id - } - chainId - isValid - covenantIpfsHash - communityName - protocolFee - communityFee - registerToken - registerStakeAmount - alloAddress - members(where: { stakedTokens_gt: "0" }) { - id - memberAddress - } - strategies(where: { isEnabled: true }) { + registryCommunity(id: $communityAddr) { + communityName + isValid + } +} + `; +export const getProposalSupportersDocument = gql ` + query getProposalSupporters($proposalId: String!) { + members { + id + stakes(where: {proposal: $proposalId}) { + amount + proposal { + proposalNumber id - totalEffectiveActivePoints - poolId - poolAmount } } } -`; -export const getCommunityDocument = gql` - query getCommunity($communityAddr: ID!, $tokenAddr: ID!) { - registryCommunity(id: $communityAddr) { - communityName +} + `; +export const getGardenCommunitiesDocument = gql ` + query getGardenCommunities($chainId: BigInt!, $tokenGarden: ID!) { + registryCommunities(where: {chainId: $chainId, garden_: {id: $tokenGarden}}) { + id + garden { id - members(where: { stakedTokens_gt: "0" }) { - id - stakedTokens - } - strategies( - orderBy: poolId - orderDirection: desc - where: { archived: false } - ) { - id - proposals { - id - } - isEnabled - poolAmount - poolId - token - metadata - config { - proposalType - pointSystem - } - proposals { - id - } - } - covenantIpfsHash - communityFee - protocolFee - registerStakeAmount - registerToken } - tokenGarden(id: $tokenAddr) { - symbol - decimals + chainId + isValid + covenantIpfsHash + communityName + protocolFee + communityFee + registerToken + registerStakeAmount + alloAddress + members(where: {stakedTokens_gt: "0"}) { id + memberAddress } - } -`; -export const getCommunityCreationDataDocument = gql` - query getCommunityCreationData { - registryFactories { + strategies(where: {isEnabled: true}) { id + totalEffectiveActivePoints + poolId + poolAmount } } -`; -export const getPoolDataDocument = gql` - query getPoolData($garden: ID!, $poolId: BigInt!) { - allos { - id - chainId - tokenNative - } - tokenGarden(id: $garden) { - address - name - symbol - description - totalBalance - ipfsCovenant - decimals +} + `; +export const getCommunityDocument = gql ` + query getCommunity($communityAddr: ID!, $tokenAddr: ID!) { + registryCommunity(id: $communityAddr) { + communityName + id + members( + where: {stakedTokens_gt: "0"} + orderBy: stakedTokens + orderDirection: desc + ) { + memberAddress + stakedTokens } - cvstrategies(where: { poolId: $poolId }) { - token - poolAmount - metadata + strategies(orderBy: poolId, orderDirection: desc, where: {archived: false}) { id - poolId - totalEffectiveActivePoints - isEnabled - maxCVSupply - archived - sybilScorer { - id - } - memberActive { + proposals { id } + isEnabled + poolAmount + poolId + token + metadata config { - id - weight - decay - maxAmount - maxRatio - minThresholdPoints - pointSystem proposalType - allowlist - } - registryCommunity { - id - councilSafe - isValid - garden { - id - symbol - decimals - } + pointSystem } - proposals(orderBy: createdAt, orderDirection: desc) { + proposals { id - proposalNumber - metadata { - title - description - } - metadataHash - beneficiary - requestedAmount - requestedToken - proposalStatus - stakedAmount - convictionLast - createdAt - blockLast - threshold - strategy { - id - maxCVSupply - totalEffectiveActivePoints - } } } - arbitrableConfigs( - first: 1 - orderBy: version - orderDirection: desc - where: { strategy_: { poolId: $poolId } } - ) { - submitterCollateralAmount - challengerCollateralAmount - arbitrator - defaultRuling - defaultRulingTimeout - tribunalSafe - } + covenantIpfsHash + communityFee + protocolFee + registerStakeAmount + registerToken + } + tokenGarden(id: $tokenAddr) { + symbol + decimals + id + } +} + `; +export const getCommunityCreationDataDocument = gql ` + query getCommunityCreationData { + registryFactories { + id + } +} + `; +export const getPoolDataDocument = gql ` + query getPoolData($garden: ID!, $poolId: BigInt!) { + allos { + id + chainId + tokenNative } -`; -export const getProposalDataDocument = gql` - query getProposalData($garden: ID!, $proposalId: ID!, $communityId: ID!) { - allos { + tokenGarden(id: $garden) { + address + name + symbol + description + totalBalance + ipfsCovenant + decimals + } + cvstrategies(where: {poolId: $poolId}) { + token + poolAmount + metadata + id + poolId + totalEffectiveActivePoints + isEnabled + maxCVSupply + archived + sybilScorer { id - chainId - tokenNative } - tokenGarden(id: $garden) { - name - symbol - decimals + memberActive { + id } - registryCommunity(id: $communityId) { + config { + id + weight + decay + maxAmount + maxRatio + minThresholdPoints + pointSystem + proposalType + allowlist + } + registryCommunity { + id councilSafe + isValid + garden { + id + symbol + decimals + } } - cvproposal(id: $proposalId) { + proposals(orderBy: createdAt, orderDirection: desc) { id proposalNumber - beneficiary - blockLast - convictionLast - createdAt metadata { title description } metadataHash - proposalStatus + beneficiary requestedAmount requestedToken + proposalStatus stakedAmount - submitter + convictionLast + createdAt + blockLast threshold - updatedAt - version strategy { id - token maxCVSupply totalEffectiveActivePoints - poolId - config { - proposalType - pointSystem - minThresholdPoints - decay - } - } - arbitrableConfig { - arbitrator - defaultRuling - defaultRulingTimeout - challengerCollateralAmount - submitterCollateralAmount - tribunalSafe } } } -`; -export const getAlloDocument = gql` - query getAllo { - allos { - id - chainId - tokenNative - } + arbitrableConfigs( + first: 1 + orderBy: version + orderDirection: desc + where: {strategy_: {poolId: $poolId}} + ) { + submitterCollateralAmount + challengerCollateralAmount + arbitrator + defaultRuling + defaultRulingTimeout + tribunalSafe } -`; -export const getStrategyByPoolDocument = gql` - query getStrategyByPool($poolId: BigInt!) { - cvstrategies(where: { poolId: $poolId }) { +} + `; +export const getProposalDataDocument = gql ` + query getProposalData($garden: ID!, $proposalId: ID!, $communityId: ID!) { + allos { + id + chainId + tokenNative + } + tokenGarden(id: $garden) { + name + symbol + decimals + } + registryCommunity(id: $communityId) { + councilSafe + } + cvproposal(id: $proposalId) { + id + proposalNumber + beneficiary + blockLast + convictionLast + createdAt + metadata { + title + description + } + metadataHash + proposalStatus + requestedAmount + requestedToken + stakedAmount + submitter + threshold + updatedAt + version + strategy { id - poolId + token + maxCVSupply totalEffectiveActivePoints - isEnabled - archived + poolId config { - id proposalType pointSystem minThresholdPoints + decay } - memberActive { - id - } - registryCommunity { + } + arbitrableConfig { + arbitrator + defaultRuling + defaultRulingTimeout + challengerCollateralAmount + submitterCollateralAmount + tribunalSafe + } + } +} + `; +export const getAlloDocument = gql ` + query getAllo { + allos { + id + chainId + tokenNative + } +} + `; +export const getStrategyByPoolDocument = gql ` + query getStrategyByPool($poolId: BigInt!) { + cvstrategies(where: {poolId: $poolId}) { + id + poolId + totalEffectiveActivePoints + isEnabled + archived + config { + id + proposalType + pointSystem + minThresholdPoints + } + memberActive { + id + } + registryCommunity { + id + isValid + garden { id - isValid - garden { - id - symbol - decimals - } + symbol + decimals } - proposals { - id - proposalNumber - metadata { - title - description - } - metadataHash - beneficiary - requestedAmount - requestedToken - proposalStatus - stakedAmount + } + proposals { + id + proposalNumber + metadata { + title + description } + metadataHash + beneficiary + requestedAmount + requestedToken + proposalStatus + stakedAmount } } -`; -export const getTokenTitleDocument = gql` - query getTokenTitle($tokenAddr: ID!) { - tokenGarden(id: $tokenAddr) { +} + `; +export const getTokenTitleDocument = gql ` + query getTokenTitle($tokenAddr: ID!) { + tokenGarden(id: $tokenAddr) { + name + } +} + `; +export const getCommunityTitlesDocument = gql ` + query getCommunityTitles($communityAddr: ID!) { + registryCommunity(id: $communityAddr) { + communityName + garden { name } } -`; -export const getCommunityTitlesDocument = gql` - query getCommunityTitles($communityAddr: ID!) { - registryCommunity(id: $communityAddr) { +} + `; +export const getPoolTitlesDocument = gql ` + query getPoolTitles($poolId: BigInt!) { + cvstrategies(where: {poolId: $poolId}) { + poolId + metadata + registryCommunity { communityName garden { name } } + metadata } -`; -export const getPoolTitlesDocument = gql` - query getPoolTitles($poolId: BigInt!) { - cvstrategies(where: { poolId: $poolId }) { +} + `; +export const getProposalTitlesDocument = gql ` + query getProposalTitles($proposalId: ID!) { + cvproposal(id: $proposalId) { + proposalNumber + metadata { + title + description + } + metadataHash + strategy { poolId metadata registryCommunity { @@ -899,57 +824,15 @@ export const getPoolTitlesDocument = gql` name } } - metadata } } -`; -export const getProposalTitlesDocument = gql` - query getProposalTitles($proposalId: ID!) { - cvproposal(id: $proposalId) { - proposalNumber - metadata { - title - description - } - metadataHash - strategy { - poolId - metadata - registryCommunity { - communityName - garden { - name - } - } - } - } - } -`; -export const getPassportScorerDocument = gql` - query getPassportScorer($scorerId: ID!) { - passportScorer(id: $scorerId) { - id - strategies { - id - strategy { - id - } - threshold - councilSafe - active - } - users { - id - userAddress - score - lastUpdated - } - } - } -`; -export const getPassportStrategyDocument = gql` - query getPassportStrategy($strategyId: ID!) { - passportStrategy(id: $strategyId) { +} + `; +export const getPassportScorerDocument = gql ` + query getPassportScorer($scorerId: ID!) { + passportScorer(id: $scorerId) { + id + strategies { id strategy { id @@ -958,137 +841,153 @@ export const getPassportStrategyDocument = gql` councilSafe active } - } -`; -export const getPassportUserDocument = gql` - query getPassportUser($userId: ID!) { - passportUser(id: $userId) { + users { id userAddress score lastUpdated } } -`; -export const getProposalDisputesDocument = gql` - query getProposalDisputes($proposalId: ID!) { - proposalDisputes(where: { proposal_: { id: $proposalId } }) { +} + `; +export const getPassportStrategyDocument = gql ` + query getPassportStrategy($strategyId: ID!) { + passportStrategy(id: $strategyId) { + id + strategy { id - disputeId - status - challenger - context - metadata { - reason - } - createdAt - ruledAt - rulingOutcome } + threshold + councilSafe + active } -`; -export const getArbitrableConfigsDocument = gql` - query getArbitrableConfigs($strategyId: String!) { - arbitrableConfigs(where: { strategy: $strategyId }) { - arbitrator - challengerCollateralAmount - submitterCollateralAmount - tribunalSafe - defaultRuling - defaultRulingTimeout - } +} + `; +export const getPassportUserDocument = gql ` + query getPassportUser($userId: ID!) { + passportUser(id: $userId) { + id + userAddress + score + lastUpdated } -`; -export const getMemberPassportAndCommunitiesDocument = gql` - query getMemberPassportAndCommunities($memberId: ID!) { - member(id: $memberId) { - memberCommunity { - id - } - } - passportUser(id: $memberId) { - lastUpdated - score +} + `; +export const getProposalDisputesDocument = gql ` + query getProposalDisputes($proposalId: ID!) { + proposalDisputes(where: {proposal_: {id: $proposalId}}) { + id + disputeId + status + challenger + context + metadata { + reason + } + createdAt + ruledAt + rulingOutcome + } +} + `; +export const getArbitrableConfigsDocument = gql ` + query getArbitrableConfigs($strategyId: String!) { + arbitrableConfigs(where: {strategy: $strategyId}) { + arbitrator + challengerCollateralAmount + submitterCollateralAmount + tribunalSafe + defaultRuling + defaultRulingTimeout + } +} + `; +export const getMemberPassportAndCommunitiesDocument = gql ` + query getMemberPassportAndCommunities($memberId: ID!) { + member(id: $memberId) { + memberCommunity { + id } } -`; + passportUser(id: $memberId) { + lastUpdated + score + } +} + `; export function getSdk(requester) { - return { - getFactories(variables, options) { - return requester(getFactoriesDocument, variables, options); - }, - getTokenGardens(variables, options) { - return requester(getTokenGardensDocument, variables, options); - }, - getMemberStrategy(variables, options) { - return requester(getMemberStrategyDocument, variables, options); - }, - isMember(variables, options) { - return requester(isMemberDocument, variables, options); - }, - getMember(variables, options) { - return requester(getMemberDocument, variables, options); - }, - getPoolCreationData(variables, options) { - return requester(getPoolCreationDataDocument, variables, options); - }, - getProposalSupporters(variables, options) { - return requester(getProposalSupportersDocument, variables, options); - }, - getGardenCommunities(variables, options) { - return requester(getGardenCommunitiesDocument, variables, options); - }, - getCommunity(variables, options) { - return requester(getCommunityDocument, variables, options); - }, - getCommunityCreationData(variables, options) { - return requester(getCommunityCreationDataDocument, variables, options); - }, - getPoolData(variables, options) { - return requester(getPoolDataDocument, variables, options); - }, - getProposalData(variables, options) { - return requester(getProposalDataDocument, variables, options); - }, - getAllo(variables, options) { - return requester(getAlloDocument, variables, options); - }, - getStrategyByPool(variables, options) { - return requester(getStrategyByPoolDocument, variables, options); - }, - getTokenTitle(variables, options) { - return requester(getTokenTitleDocument, variables, options); - }, - getCommunityTitles(variables, options) { - return requester(getCommunityTitlesDocument, variables, options); - }, - getPoolTitles(variables, options) { - return requester(getPoolTitlesDocument, variables, options); - }, - getProposalTitles(variables, options) { - return requester(getProposalTitlesDocument, variables, options); - }, - getPassportScorer(variables, options) { - return requester(getPassportScorerDocument, variables, options); - }, - getPassportStrategy(variables, options) { - return requester(getPassportStrategyDocument, variables, options); - }, - getPassportUser(variables, options) { - return requester(getPassportUserDocument, variables, options); - }, - getProposalDisputes(variables, options) { - return requester(getProposalDisputesDocument, variables, options); - }, - getArbitrableConfigs(variables, options) { - return requester(getArbitrableConfigsDocument, variables, options); - }, - getMemberPassportAndCommunities(variables, options) { - return requester( - getMemberPassportAndCommunitiesDocument, - variables, - options, - ); - }, - }; + return { + getFactories(variables, options) { + return requester(getFactoriesDocument, variables, options); + }, + getTokenGardens(variables, options) { + return requester(getTokenGardensDocument, variables, options); + }, + getMemberStrategy(variables, options) { + return requester(getMemberStrategyDocument, variables, options); + }, + isMember(variables, options) { + return requester(isMemberDocument, variables, options); + }, + getMember(variables, options) { + return requester(getMemberDocument, variables, options); + }, + getPoolCreationData(variables, options) { + return requester(getPoolCreationDataDocument, variables, options); + }, + getProposalSupporters(variables, options) { + return requester(getProposalSupportersDocument, variables, options); + }, + getGardenCommunities(variables, options) { + return requester(getGardenCommunitiesDocument, variables, options); + }, + getCommunity(variables, options) { + return requester(getCommunityDocument, variables, options); + }, + getCommunityCreationData(variables, options) { + return requester(getCommunityCreationDataDocument, variables, options); + }, + getPoolData(variables, options) { + return requester(getPoolDataDocument, variables, options); + }, + getProposalData(variables, options) { + return requester(getProposalDataDocument, variables, options); + }, + getAllo(variables, options) { + return requester(getAlloDocument, variables, options); + }, + getStrategyByPool(variables, options) { + return requester(getStrategyByPoolDocument, variables, options); + }, + getTokenTitle(variables, options) { + return requester(getTokenTitleDocument, variables, options); + }, + getCommunityTitles(variables, options) { + return requester(getCommunityTitlesDocument, variables, options); + }, + getPoolTitles(variables, options) { + return requester(getPoolTitlesDocument, variables, options); + }, + getProposalTitles(variables, options) { + return requester(getProposalTitlesDocument, variables, options); + }, + getPassportScorer(variables, options) { + return requester(getPassportScorerDocument, variables, options); + }, + getPassportStrategy(variables, options) { + return requester(getPassportStrategyDocument, variables, options); + }, + getPassportUser(variables, options) { + return requester(getPassportUserDocument, variables, options); + }, + getProposalDisputes(variables, options) { + return requester(getProposalDisputesDocument, variables, options); + }, + getArbitrableConfigs(variables, options) { + return requester(getArbitrableConfigsDocument, variables, options); + }, + getMemberPassportAndCommunities(variables, options) { + return requester(getMemberPassportAndCommunitiesDocument, variables, options); + } + }; } diff --git a/pkg/subgraph/.graphclient/persisted_operations.json b/pkg/subgraph/.graphclient/persisted_operations.json index 48ae65257..f45d8cafe 100644 --- a/pkg/subgraph/.graphclient/persisted_operations.json +++ b/pkg/subgraph/.graphclient/persisted_operations.json @@ -1,3 +1,3 @@ { - "67f63761732b211149e54c0edb8712b2a2cddd1ab68a30429d5263de6b11e8ec": "query getFactories {\n registryFactories {\n id\n registryCommunities {\n id\n chainId\n isValid\n communityName\n covenantIpfsHash\n registerToken\n alloAddress\n members {\n memberAddress\n }\n strategies {\n id\n poolId\n isEnabled\n config {\n id\n decay\n maxRatio\n weight\n minThresholdPoints\n }\n }\n }\n }\n}\n\nquery getTokenGardens {\n tokenGardens {\n id\n chainId\n name\n symbol\n decimals\n totalBalance\n communities {\n id\n chainId\n covenantIpfsHash\n communityFee\n isValid\n communityName\n strategies {\n id\n }\n members {\n id\n memberAddress\n }\n }\n }\n}\n\nquery getMemberStrategy($member_strategy: ID!) {\n memberStrategy(id: $member_strategy) {\n id\n totalStakedPoints\n activatedPoints\n strategy {\n id\n }\n member {\n id\n }\n }\n}\n\nquery isMember($me: ID!, $comm: String!) {\n member(id: $me) {\n id\n stakes {\n id\n amount\n proposal {\n id\n proposalNumber\n stakedAmount\n strategy {\n id\n poolId\n registryCommunity {\n id\n isValid\n garden {\n id\n symbol\n decimals\n }\n }\n }\n }\n }\n memberCommunity(where: {registryCommunity_contains: $comm}) {\n stakedTokens\n isRegistered\n registryCommunity {\n id\n }\n }\n }\n}\n\nquery getMember($me: ID!) {\n member(id: $me) {\n id\n memberCommunity {\n id\n stakedTokens\n isRegistered\n registryCommunity {\n id\n isValid\n }\n }\n stakes {\n id\n proposal {\n proposalNumber\n id\n }\n amount\n createdAt\n }\n }\n}\n\nquery getPoolCreationData($communityAddr: ID!, $tokenAddr: ID!) {\n tokenGarden(id: $tokenAddr) {\n decimals\n id\n symbol\n }\n allos {\n id\n }\n registryCommunity(id: $communityAddr) {\n communityName\n isValid\n }\n}\n\nquery getGardenCommunities($chainId: BigInt!, $tokenGarden: ID!) {\n registryCommunities(where: {chainId: $chainId, garden_: {id: $tokenGarden}}) {\n id\n garden {\n id\n }\n chainId\n isValid\n covenantIpfsHash\n communityName\n protocolFee\n communityFee\n registerToken\n registerStakeAmount\n alloAddress\n members(where: {stakedTokens_gt: \"0\"}) {\n id\n memberAddress\n }\n strategies(where: {isEnabled: true}) {\n id\n totalEffectiveActivePoints\n poolId\n poolAmount\n }\n }\n}\n\nquery getCommunity($communityAddr: ID!, $tokenAddr: ID!) {\n registryCommunity(id: $communityAddr) {\n communityName\n id\n members(where: {stakedTokens_gt: \"0\"}) {\n id\n stakedTokens\n }\n strategies(orderBy: poolId, orderDirection: desc, where: {archived: false}) {\n id\n proposals {\n id\n }\n isEnabled\n poolAmount\n poolId\n token\n metadata\n config {\n proposalType\n pointSystem\n }\n proposals {\n id\n }\n }\n covenantIpfsHash\n communityFee\n protocolFee\n registerStakeAmount\n registerToken\n }\n tokenGarden(id: $tokenAddr) {\n symbol\n decimals\n id\n }\n}\n\nquery getCommunityCreationData {\n registryFactories {\n id\n }\n}\n\nquery getPoolData($garden: ID!, $poolId: BigInt!) {\n allos {\n id\n chainId\n tokenNative\n }\n tokenGarden(id: $garden) {\n address\n name\n symbol\n description\n totalBalance\n ipfsCovenant\n decimals\n }\n cvstrategies(where: {poolId: $poolId}) {\n token\n poolAmount\n metadata\n id\n poolId\n totalEffectiveActivePoints\n isEnabled\n maxCVSupply\n archived\n sybilScorer {\n id\n }\n memberActive {\n id\n }\n config {\n id\n weight\n decay\n maxAmount\n maxRatio\n minThresholdPoints\n pointSystem\n proposalType\n allowlist\n }\n registryCommunity {\n id\n councilSafe\n isValid\n garden {\n id\n symbol\n decimals\n }\n }\n proposals(orderBy: createdAt, orderDirection: desc) {\n id\n proposalNumber\n metadata {\n title\n description\n }\n metadataHash\n beneficiary\n requestedAmount\n requestedToken\n proposalStatus\n stakedAmount\n convictionLast\n createdAt\n blockLast\n threshold\n strategy {\n id\n maxCVSupply\n totalEffectiveActivePoints\n }\n }\n }\n arbitrableConfigs(\n first: 1\n orderBy: version\n orderDirection: desc\n where: {strategy_: {poolId: $poolId}}\n ) {\n submitterCollateralAmount\n challengerCollateralAmount\n arbitrator\n defaultRuling\n defaultRulingTimeout\n tribunalSafe\n }\n}\n\nquery getProposalData($garden: ID!, $proposalId: ID!) {\n allos {\n id\n chainId\n tokenNative\n }\n tokenGarden(id: $garden) {\n name\n symbol\n decimals\n }\n cvproposal(id: $proposalId) {\n id\n proposalNumber\n beneficiary\n blockLast\n convictionLast\n createdAt\n metadata {\n title\n description\n }\n metadataHash\n proposalStatus\n requestedAmount\n requestedToken\n stakedAmount\n submitter\n threshold\n updatedAt\n version\n strategy {\n id\n token\n maxCVSupply\n totalEffectiveActivePoints\n poolId\n config {\n proposalType\n pointSystem\n minThresholdPoints\n decay\n }\n }\n arbitrableConfig {\n arbitrator\n defaultRuling\n defaultRulingTimeout\n challengerCollateralAmount\n submitterCollateralAmount\n tribunalSafe\n }\n }\n}\n\nquery getAllo {\n allos {\n id\n chainId\n tokenNative\n }\n}\n\nquery getStrategyByPool($poolId: BigInt!) {\n cvstrategies(where: {poolId: $poolId}) {\n id\n poolId\n totalEffectiveActivePoints\n isEnabled\n archived\n config {\n id\n proposalType\n pointSystem\n minThresholdPoints\n }\n memberActive {\n id\n }\n registryCommunity {\n id\n isValid\n garden {\n id\n symbol\n decimals\n }\n }\n proposals {\n id\n proposalNumber\n metadata {\n title\n description\n }\n metadataHash\n beneficiary\n requestedAmount\n requestedToken\n proposalStatus\n stakedAmount\n }\n }\n}\n\nquery getTokenTitle($tokenAddr: ID!) {\n tokenGarden(id: $tokenAddr) {\n name\n }\n}\n\nquery getCommunityTitles($communityAddr: ID!) {\n registryCommunity(id: $communityAddr) {\n communityName\n garden {\n name\n }\n }\n}\n\nquery getPoolTitles($poolId: BigInt!) {\n cvstrategies(where: {poolId: $poolId}) {\n poolId\n metadata\n registryCommunity {\n communityName\n garden {\n name\n }\n }\n metadata\n }\n}\n\nquery getProposalTitles($proposalId: ID!) {\n cvproposal(id: $proposalId) {\n proposalNumber\n metadata {\n title\n description\n }\n metadataHash\n strategy {\n poolId\n metadata\n registryCommunity {\n communityName\n garden {\n name\n }\n }\n }\n }\n}\n\nquery getPassportScorer($scorerId: ID!) {\n passportScorer(id: $scorerId) {\n id\n strategies {\n id\n strategy {\n id\n }\n threshold\n councilSafe\n active\n }\n users {\n id\n userAddress\n score\n lastUpdated\n }\n }\n}\n\nquery getPassportStrategy($strategyId: ID!) {\n passportStrategy(id: $strategyId) {\n id\n strategy {\n id\n }\n threshold\n councilSafe\n active\n }\n}\n\nquery getPassportUser($userId: ID!) {\n passportUser(id: $userId) {\n id\n userAddress\n score\n lastUpdated\n }\n}\n\nquery getProposalDisputes($proposalId: ID!) {\n proposalDisputes(where: {proposal_: {id: $proposalId}}) {\n id\n disputeId\n status\n challenger\n context\n metadata {\n reason\n }\n createdAt\n ruledAt\n rulingOutcome\n }\n}\n\nquery getArbitrableConfigs($strategyId: String!) {\n arbitrableConfigs(where: {strategy: $strategyId}) {\n arbitrator\n challengerCollateralAmount\n submitterCollateralAmount\n tribunalSafe\n defaultRuling\n defaultRulingTimeout\n }\n}\n\nquery getMemberPassportAndCommunities($memberId: ID!) {\n member(id: $memberId) {\n memberCommunity {\n id\n }\n }\n passportUser(id: $memberId) {\n lastUpdated\n score\n }\n}" + "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": "query getFactories {\n registryFactories {\n id\n registryCommunities {\n id\n chainId\n isValid\n communityName\n covenantIpfsHash\n registerToken\n alloAddress\n members {\n memberAddress\n }\n strategies {\n id\n poolId\n isEnabled\n config {\n id\n decay\n maxRatio\n weight\n minThresholdPoints\n }\n }\n }\n }\n}\n\nquery getTokenGardens {\n tokenGardens {\n id\n chainId\n name\n symbol\n decimals\n totalBalance\n communities {\n id\n chainId\n covenantIpfsHash\n communityFee\n isValid\n communityName\n strategies {\n id\n }\n members {\n id\n memberAddress\n }\n }\n }\n}\n\nquery getMemberStrategy($member_strategy: ID!) {\n memberStrategy(id: $member_strategy) {\n id\n totalStakedPoints\n activatedPoints\n strategy {\n id\n }\n member {\n id\n }\n }\n}\n\nquery isMember($me: ID!, $comm: String!) {\n member(id: $me) {\n id\n stakes {\n id\n amount\n proposal {\n id\n proposalNumber\n stakedAmount\n strategy {\n id\n poolId\n registryCommunity {\n id\n isValid\n garden {\n id\n symbol\n decimals\n }\n }\n }\n }\n }\n memberCommunity(where: {registryCommunity_contains: $comm}) {\n stakedTokens\n isRegistered\n registryCommunity {\n id\n }\n }\n }\n}\n\nquery getMember($me: ID!) {\n member(id: $me) {\n id\n memberCommunity {\n id\n stakedTokens\n isRegistered\n registryCommunity {\n id\n isValid\n }\n }\n stakes {\n id\n proposal {\n proposalNumber\n id\n }\n amount\n createdAt\n }\n }\n}\n\nquery getPoolCreationData($communityAddr: ID!, $tokenAddr: ID!) {\n tokenGarden(id: $tokenAddr) {\n decimals\n id\n symbol\n }\n allos {\n id\n }\n registryCommunity(id: $communityAddr) {\n communityName\n isValid\n }\n}\n\nquery getProposalSupporters($proposalId: String!) {\n members {\n id\n stakes(where: {proposal: $proposalId}) {\n amount\n proposal {\n proposalNumber\n id\n }\n }\n }\n}\n\nquery getGardenCommunities($chainId: BigInt!, $tokenGarden: ID!) {\n registryCommunities(where: {chainId: $chainId, garden_: {id: $tokenGarden}}) {\n id\n garden {\n id\n }\n chainId\n isValid\n covenantIpfsHash\n communityName\n protocolFee\n communityFee\n registerToken\n registerStakeAmount\n alloAddress\n members(where: {stakedTokens_gt: \"0\"}) {\n id\n memberAddress\n }\n strategies(where: {isEnabled: true}) {\n id\n totalEffectiveActivePoints\n poolId\n poolAmount\n }\n }\n}\n\nquery getCommunity($communityAddr: ID!, $tokenAddr: ID!) {\n registryCommunity(id: $communityAddr) {\n communityName\n id\n members(\n where: {stakedTokens_gt: \"0\"}\n orderBy: stakedTokens\n orderDirection: desc\n ) {\n memberAddress\n stakedTokens\n }\n strategies(orderBy: poolId, orderDirection: desc, where: {archived: false}) {\n id\n proposals {\n id\n }\n isEnabled\n poolAmount\n poolId\n token\n metadata\n config {\n proposalType\n pointSystem\n }\n proposals {\n id\n }\n }\n covenantIpfsHash\n communityFee\n protocolFee\n registerStakeAmount\n registerToken\n }\n tokenGarden(id: $tokenAddr) {\n symbol\n decimals\n id\n }\n}\n\nquery getCommunityCreationData {\n registryFactories {\n id\n }\n}\n\nquery getPoolData($garden: ID!, $poolId: BigInt!) {\n allos {\n id\n chainId\n tokenNative\n }\n tokenGarden(id: $garden) {\n address\n name\n symbol\n description\n totalBalance\n ipfsCovenant\n decimals\n }\n cvstrategies(where: {poolId: $poolId}) {\n token\n poolAmount\n metadata\n id\n poolId\n totalEffectiveActivePoints\n isEnabled\n maxCVSupply\n archived\n sybilScorer {\n id\n }\n memberActive {\n id\n }\n config {\n id\n weight\n decay\n maxAmount\n maxRatio\n minThresholdPoints\n pointSystem\n proposalType\n allowlist\n }\n registryCommunity {\n id\n councilSafe\n isValid\n garden {\n id\n symbol\n decimals\n }\n }\n proposals(orderBy: createdAt, orderDirection: desc) {\n id\n proposalNumber\n metadata {\n title\n description\n }\n metadataHash\n beneficiary\n requestedAmount\n requestedToken\n proposalStatus\n stakedAmount\n convictionLast\n createdAt\n blockLast\n threshold\n strategy {\n id\n maxCVSupply\n totalEffectiveActivePoints\n }\n }\n }\n arbitrableConfigs(\n first: 1\n orderBy: version\n orderDirection: desc\n where: {strategy_: {poolId: $poolId}}\n ) {\n submitterCollateralAmount\n challengerCollateralAmount\n arbitrator\n defaultRuling\n defaultRulingTimeout\n tribunalSafe\n }\n}\n\nquery getProposalData($garden: ID!, $proposalId: ID!, $communityId: ID!) {\n allos {\n id\n chainId\n tokenNative\n }\n tokenGarden(id: $garden) {\n name\n symbol\n decimals\n }\n registryCommunity(id: $communityId) {\n councilSafe\n }\n cvproposal(id: $proposalId) {\n id\n proposalNumber\n beneficiary\n blockLast\n convictionLast\n createdAt\n metadata {\n title\n description\n }\n metadataHash\n proposalStatus\n requestedAmount\n requestedToken\n stakedAmount\n submitter\n threshold\n updatedAt\n version\n strategy {\n id\n token\n maxCVSupply\n totalEffectiveActivePoints\n poolId\n config {\n proposalType\n pointSystem\n minThresholdPoints\n decay\n }\n }\n arbitrableConfig {\n arbitrator\n defaultRuling\n defaultRulingTimeout\n challengerCollateralAmount\n submitterCollateralAmount\n tribunalSafe\n }\n }\n}\n\nquery getAllo {\n allos {\n id\n chainId\n tokenNative\n }\n}\n\nquery getStrategyByPool($poolId: BigInt!) {\n cvstrategies(where: {poolId: $poolId}) {\n id\n poolId\n totalEffectiveActivePoints\n isEnabled\n archived\n config {\n id\n proposalType\n pointSystem\n minThresholdPoints\n }\n memberActive {\n id\n }\n registryCommunity {\n id\n isValid\n garden {\n id\n symbol\n decimals\n }\n }\n proposals {\n id\n proposalNumber\n metadata {\n title\n description\n }\n metadataHash\n beneficiary\n requestedAmount\n requestedToken\n proposalStatus\n stakedAmount\n }\n }\n}\n\nquery getTokenTitle($tokenAddr: ID!) {\n tokenGarden(id: $tokenAddr) {\n name\n }\n}\n\nquery getCommunityTitles($communityAddr: ID!) {\n registryCommunity(id: $communityAddr) {\n communityName\n garden {\n name\n }\n }\n}\n\nquery getPoolTitles($poolId: BigInt!) {\n cvstrategies(where: {poolId: $poolId}) {\n poolId\n metadata\n registryCommunity {\n communityName\n garden {\n name\n }\n }\n metadata\n }\n}\n\nquery getProposalTitles($proposalId: ID!) {\n cvproposal(id: $proposalId) {\n proposalNumber\n metadata {\n title\n description\n }\n metadataHash\n strategy {\n poolId\n metadata\n registryCommunity {\n communityName\n garden {\n name\n }\n }\n }\n }\n}\n\nquery getPassportScorer($scorerId: ID!) {\n passportScorer(id: $scorerId) {\n id\n strategies {\n id\n strategy {\n id\n }\n threshold\n councilSafe\n active\n }\n users {\n id\n userAddress\n score\n lastUpdated\n }\n }\n}\n\nquery getPassportStrategy($strategyId: ID!) {\n passportStrategy(id: $strategyId) {\n id\n strategy {\n id\n }\n threshold\n councilSafe\n active\n }\n}\n\nquery getPassportUser($userId: ID!) {\n passportUser(id: $userId) {\n id\n userAddress\n score\n lastUpdated\n }\n}\n\nquery getProposalDisputes($proposalId: ID!) {\n proposalDisputes(where: {proposal_: {id: $proposalId}}) {\n id\n disputeId\n status\n challenger\n context\n metadata {\n reason\n }\n createdAt\n ruledAt\n rulingOutcome\n }\n}\n\nquery getArbitrableConfigs($strategyId: String!) {\n arbitrableConfigs(where: {strategy: $strategyId}) {\n arbitrator\n challengerCollateralAmount\n submitterCollateralAmount\n tribunalSafe\n defaultRuling\n defaultRulingTimeout\n }\n}\n\nquery getMemberPassportAndCommunities($memberId: ID!) {\n member(id: $memberId) {\n memberCommunity {\n id\n }\n }\n passportUser(id: $memberId) {\n lastUpdated\n score\n }\n}" } \ No newline at end of file diff --git a/pkg/subgraph/.graphclientrc.yml b/pkg/subgraph/.graphclientrc.yml index 50ee8dddc..6f0a94047 100644 --- a/pkg/subgraph/.graphclientrc.yml +++ b/pkg/subgraph/.graphclientrc.yml @@ -2,6 +2,6 @@ sources: - name: gv2 handler: graphql: - endpoint: https://api.studio.thegraph.com/query/70985/gardens-v2---arbitrum-sepolia/0.2.4 + endpoint: https://api.studio.thegraph.com/query/70985/gardens-v2---arbitrum-sepolia/0.3.0 documents: - ./src/query/queries.graphql diff --git a/pkg/subgraph/src/query/queries.graphql b/pkg/subgraph/src/query/queries.graphql index e33776a44..6a078752f 100644 --- a/pkg/subgraph/src/query/queries.graphql +++ b/pkg/subgraph/src/query/queries.graphql @@ -189,8 +189,12 @@ query getCommunity($communityAddr: ID!, $tokenAddr: ID!) { registryCommunity(id: $communityAddr) { communityName id - members(where: { stakedTokens_gt: "0" }) { - id + members( + where: { stakedTokens_gt: "0" } + orderBy: stakedTokens + orderDirection: desc + ) { + memberAddress stakedTokens } strategies( diff --git a/pkg/subgraph/subgraph.yaml b/pkg/subgraph/subgraph.yaml index a09b50b7f..5d54395bc 100644 --- a/pkg/subgraph/subgraph.yaml +++ b/pkg/subgraph/subgraph.yaml @@ -8,13 +8,13 @@ dataSources: name: RegistryFactoryV0_0 network: localhost context: - chainId: + chainId: type: Int data: 1337 source: - address: "0x2d5b61124DFf3c3bEDe39620b591b10325f629a2" + address: "0xb7f8bc63bbcad18155201308c8f3540b07f84f5e" abi: RegistryFactoryV0_0 - startBlock: 105896653 + startBlock: 0 mapping: kind: ethereum/events apiVersion: 0.0.7 @@ -33,22 +33,22 @@ dataSources: - event: CommunityValiditySet(address,bool) handler: handleCommunityValiditySet - event: ProtocolFeeSet(address,uint256) - handler: handleProtocolFeeSet + handler: handleProtocolFeeSet - event: Initialized(uint8) - handler: handleRegistryInitialized + handler: handleRegistryInitialized file: ./src/mappings/registry-factory.ts - kind: ethereum/contract name: PassportScorer network: localhost context: - chainId: + chainId: type: Int data: 1337 source: - address: "0xD5a38e558582D32FfdC3b3a1A9f4D0D56e8b3115" + address: "0x0165878a594ca255338adfa4d48449f69242eb8f" abi: PassportScorer - startBlock: 105896653 + startBlock: 0 mapping: kind: ethereum/events apiVersion: 0.0.7 @@ -100,7 +100,7 @@ templates: file: ../contracts/out/CVStrategyV0_0.sol/CVStrategyV0_0.json - name: RegistryFactoryV0_0 file: ../contracts/out/RegistryFactoryV0_0.sol/RegistryFactoryV0_0.json - + eventHandlers: - event: RegistryInitialized(bytes32,string,(uint256,string)) handler: handleInitialized @@ -204,7 +204,7 @@ templates: handler: handleAllowlistMembersRemoved - event: SybilScorerUpdated(address) handler: handleSybilScorerUpdated - + file: ./src/mappings/cv-strategy.ts - kind: ethereum/contract @@ -229,8 +229,8 @@ templates: handler: handleCollateralWithdrawnFor - event: CollateralWithdrawn(uint256,indexed address,uint256,bool) handler: handleCollateralWithdrawn - file: ./src/mappings/cv-strategy.ts - + file: ./src/mappings/cv-strategy.ts + - name: ProposalDisputeMetadata kind: file/ipfs mapping: @@ -243,7 +243,7 @@ templates: abis: - name: CVStrategyV0_0 file: ../contracts/out/CVStrategyV0_0.sol/CVStrategyV0_0.json - + - name: ProposalMetadata kind: file/ipfs mapping: @@ -255,4 +255,4 @@ templates: - ProposalMetadata abis: - name: CVStrategyV0_0 - file: ../contracts/out/CVStrategyV0_0.sol/CVStrategyV0_0.json + file: ../contracts/out/CVStrategyV0_0.sol/CVStrategyV0_0.json \ No newline at end of file From e68937d9f7d2b1b37fcd58522bd67b869f4a58aa Mon Sep 17 00:00:00 2001 From: Matias Date: Fri, 13 Dec 2024 18:39:15 -0300 Subject: [PATCH 02/14] feat: add new query `getMembersStrategy` --- apps/web/components/Proposals.tsx | 21 +++ pkg/subgraph/.graphclient/index.d.ts | 15 +++ pkg/subgraph/.graphclient/index.js | 122 +++++++++++------- .../.graphclient/persisted_operations.json | 2 +- pkg/subgraph/src/query/queries.graphql | 14 ++ 5 files changed, 125 insertions(+), 49 deletions(-) diff --git a/apps/web/components/Proposals.tsx b/apps/web/components/Proposals.tsx index 4d57995db..3d17283c0 100644 --- a/apps/web/components/Proposals.tsx +++ b/apps/web/components/Proposals.tsx @@ -19,6 +19,8 @@ import { isMemberQuery, CVStrategy, RegistryCommunity, + getMembersStrategyQuery, + getMembersStrategyDocument, } from "#/subgraph/.graphclient"; import { LoadingSpinner } from "./LoadingSpinner"; import { PoolGovernanceProps } from "./PoolGovernance"; @@ -157,6 +159,25 @@ export function Proposals({ }, ); + const { data: membersStrategyData } = + useSubgraphQuery({ + query: getMembersStrategyDocument, + variables: { + strategyId: `${strategy.id.toLowerCase()}`, + }, + changeScope: [ + { + topic: "proposal", + containerId: strategy.poolId, + type: "update", + }, + { topic: "member", id: wallet, containerId: strategy.poolId }, + ], + enabled: !!wallet, + }); + + console.log(membersStrategyData); + const memberActivatedPoints: bigint = BigInt( memberStrategyData?.memberStrategy?.activatedPoints ?? 0, ); diff --git a/pkg/subgraph/.graphclient/index.d.ts b/pkg/subgraph/.graphclient/index.d.ts index 970b006bb..2de039ca1 100644 --- a/pkg/subgraph/.graphclient/index.d.ts +++ b/pkg/subgraph/.graphclient/index.d.ts @@ -3515,6 +3515,9 @@ export declare function getBuiltGraphSDK, options?: TOperationContext): Promise; + getMembersStrategy(variables: Exact<{ + strategyId: Scalars["String"]["input"]; + }>, options?: TOperationContext): Promise; getMemberStrategy(variables: Exact<{ member_strategy: Scalars["ID"]["input"]; }>, options?: TOperationContext): Promise; @@ -3613,6 +3616,16 @@ export type getTokenGardensQuery = { })>>; })>; }; +export type getMembersStrategyQueryVariables = Exact<{ + strategyId: Scalars['String']['input']; +}>; +export type getMembersStrategyQuery = { + memberStrategies: Array<(Pick & { + member: { + memberCommunity?: Maybe>>; + }; + })>; +}; export type getMemberStrategyQueryVariables = Exact<{ member_strategy: Scalars['ID']['input']; }>; @@ -3851,6 +3864,7 @@ export type getMemberPassportAndCommunitiesQuery = { }; export declare const getFactoriesDocument: DocumentNode; export declare const getTokenGardensDocument: DocumentNode; +export declare const getMembersStrategyDocument: DocumentNode; export declare const getMemberStrategyDocument: DocumentNode; export declare const isMemberDocument: DocumentNode; export declare const getMemberDocument: DocumentNode; @@ -3877,6 +3891,7 @@ export type Requester = (doc: DocumentNode, vars?: V, export declare function getSdk(requester: Requester): { getFactories(variables?: getFactoriesQueryVariables, options?: C): Promise; getTokenGardens(variables?: getTokenGardensQueryVariables, options?: C): Promise; + getMembersStrategy(variables: getMembersStrategyQueryVariables, options?: C): Promise; getMemberStrategy(variables: getMemberStrategyQueryVariables, options?: C): Promise; isMember(variables: isMemberQueryVariables, options?: C): Promise; getMember(variables: getMemberQueryVariables, options?: C): Promise; diff --git a/pkg/subgraph/.graphclient/index.js b/pkg/subgraph/.graphclient/index.js index d47e37a2c..7faf9027f 100644 --- a/pkg/subgraph/.graphclient/index.js +++ b/pkg/subgraph/.graphclient/index.js @@ -71,30 +71,31 @@ export async function getMeshOptions() { store: rootStore.child('bareMerger') }); const documentHashMap = { - "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetFactoriesDocument, - "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetTokenGardensDocument, - "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetMemberStrategyDocument, - "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": IsMemberDocument, - "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetMemberDocument, - "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetPoolCreationDataDocument, - "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetProposalSupportersDocument, - "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetGardenCommunitiesDocument, - "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetCommunityDocument, - "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetCommunityCreationDataDocument, - "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetPoolDataDocument, - "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetProposalDataDocument, - "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetAlloDocument, - "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetStrategyByPoolDocument, - "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetTokenTitleDocument, - "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetCommunityTitlesDocument, - "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetPoolTitlesDocument, - "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetProposalTitlesDocument, - "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetPassportScorerDocument, - "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetPassportStrategyDocument, - "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetPassportUserDocument, - "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetProposalDisputesDocument, - "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetArbitrableConfigsDocument, - "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": GetMemberPassportAndCommunitiesDocument + "e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2": GetFactoriesDocument, + "e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2": GetTokenGardensDocument, + "e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2": GetMembersStrategyDocument, + "e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2": GetMemberStrategyDocument, + "e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2": IsMemberDocument, + "e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2": GetMemberDocument, + "e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2": GetPoolCreationDataDocument, + "e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2": GetProposalSupportersDocument, + "e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2": GetGardenCommunitiesDocument, + "e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2": GetCommunityDocument, + "e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2": GetCommunityCreationDataDocument, + "e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2": GetPoolDataDocument, + "e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2": GetProposalDataDocument, + "e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2": GetAlloDocument, + "e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2": GetStrategyByPoolDocument, + "e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2": GetTokenTitleDocument, + "e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2": GetCommunityTitlesDocument, + "e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2": GetPoolTitlesDocument, + "e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2": GetProposalTitlesDocument, + "e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2": GetPassportScorerDocument, + "e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2": GetPassportStrategyDocument, + "e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2": GetPassportUserDocument, + "e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2": GetProposalDisputesDocument, + "e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2": GetArbitrableConfigsDocument, + "e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2": GetMemberPassportAndCommunitiesDocument }; additionalEnvelopPlugins.push(usePersistedOperations({ getPersistedOperation(key) { @@ -120,168 +121,175 @@ export async function getMeshOptions() { return printWithCache(GetFactoriesDocument); }, location: 'GetFactoriesDocument.graphql', - sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + sha256Hash: 'e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2' }, { document: GetTokenGardensDocument, get rawSDL() { return printWithCache(GetTokenGardensDocument); }, location: 'GetTokenGardensDocument.graphql', - sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + sha256Hash: 'e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2' + }, { + document: GetMembersStrategyDocument, + get rawSDL() { + return printWithCache(GetMembersStrategyDocument); + }, + location: 'GetMembersStrategyDocument.graphql', + sha256Hash: 'e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2' }, { document: GetMemberStrategyDocument, get rawSDL() { return printWithCache(GetMemberStrategyDocument); }, location: 'GetMemberStrategyDocument.graphql', - sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + sha256Hash: 'e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2' }, { document: IsMemberDocument, get rawSDL() { return printWithCache(IsMemberDocument); }, location: 'IsMemberDocument.graphql', - sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + sha256Hash: 'e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2' }, { document: GetMemberDocument, get rawSDL() { return printWithCache(GetMemberDocument); }, location: 'GetMemberDocument.graphql', - sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + sha256Hash: 'e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2' }, { document: GetPoolCreationDataDocument, get rawSDL() { return printWithCache(GetPoolCreationDataDocument); }, location: 'GetPoolCreationDataDocument.graphql', - sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + sha256Hash: 'e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2' }, { document: GetProposalSupportersDocument, get rawSDL() { return printWithCache(GetProposalSupportersDocument); }, location: 'GetProposalSupportersDocument.graphql', - sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + sha256Hash: 'e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2' }, { document: GetGardenCommunitiesDocument, get rawSDL() { return printWithCache(GetGardenCommunitiesDocument); }, location: 'GetGardenCommunitiesDocument.graphql', - sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + sha256Hash: 'e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2' }, { document: GetCommunityDocument, get rawSDL() { return printWithCache(GetCommunityDocument); }, location: 'GetCommunityDocument.graphql', - sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + sha256Hash: 'e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2' }, { document: GetCommunityCreationDataDocument, get rawSDL() { return printWithCache(GetCommunityCreationDataDocument); }, location: 'GetCommunityCreationDataDocument.graphql', - sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + sha256Hash: 'e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2' }, { document: GetPoolDataDocument, get rawSDL() { return printWithCache(GetPoolDataDocument); }, location: 'GetPoolDataDocument.graphql', - sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + sha256Hash: 'e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2' }, { document: GetProposalDataDocument, get rawSDL() { return printWithCache(GetProposalDataDocument); }, location: 'GetProposalDataDocument.graphql', - sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + sha256Hash: 'e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2' }, { document: GetAlloDocument, get rawSDL() { return printWithCache(GetAlloDocument); }, location: 'GetAlloDocument.graphql', - sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + sha256Hash: 'e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2' }, { document: GetStrategyByPoolDocument, get rawSDL() { return printWithCache(GetStrategyByPoolDocument); }, location: 'GetStrategyByPoolDocument.graphql', - sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + sha256Hash: 'e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2' }, { document: GetTokenTitleDocument, get rawSDL() { return printWithCache(GetTokenTitleDocument); }, location: 'GetTokenTitleDocument.graphql', - sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + sha256Hash: 'e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2' }, { document: GetCommunityTitlesDocument, get rawSDL() { return printWithCache(GetCommunityTitlesDocument); }, location: 'GetCommunityTitlesDocument.graphql', - sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + sha256Hash: 'e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2' }, { document: GetPoolTitlesDocument, get rawSDL() { return printWithCache(GetPoolTitlesDocument); }, location: 'GetPoolTitlesDocument.graphql', - sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + sha256Hash: 'e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2' }, { document: GetProposalTitlesDocument, get rawSDL() { return printWithCache(GetProposalTitlesDocument); }, location: 'GetProposalTitlesDocument.graphql', - sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + sha256Hash: 'e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2' }, { document: GetPassportScorerDocument, get rawSDL() { return printWithCache(GetPassportScorerDocument); }, location: 'GetPassportScorerDocument.graphql', - sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + sha256Hash: 'e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2' }, { document: GetPassportStrategyDocument, get rawSDL() { return printWithCache(GetPassportStrategyDocument); }, location: 'GetPassportStrategyDocument.graphql', - sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + sha256Hash: 'e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2' }, { document: GetPassportUserDocument, get rawSDL() { return printWithCache(GetPassportUserDocument); }, location: 'GetPassportUserDocument.graphql', - sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + sha256Hash: 'e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2' }, { document: GetProposalDisputesDocument, get rawSDL() { return printWithCache(GetProposalDisputesDocument); }, location: 'GetProposalDisputesDocument.graphql', - sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + sha256Hash: 'e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2' }, { document: GetArbitrableConfigsDocument, get rawSDL() { return printWithCache(GetArbitrableConfigsDocument); }, location: 'GetArbitrableConfigsDocument.graphql', - sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + sha256Hash: 'e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2' }, { document: GetMemberPassportAndCommunitiesDocument, get rawSDL() { return printWithCache(GetMemberPassportAndCommunitiesDocument); }, location: 'GetMemberPassportAndCommunitiesDocument.graphql', - sha256Hash: '974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe' + sha256Hash: 'e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2' } ]; }, @@ -385,6 +393,21 @@ export const getTokenGardensDocument = gql ` } } `; +export const getMembersStrategyDocument = gql ` + query getMembersStrategy($strategyId: String!) { + memberStrategies(where: {strategy: $strategyId}) { + activatedPoints + member { + memberCommunity { + memberAddress + isRegistered + } + } + totalStakedPoints + id + } +} + `; export const getMemberStrategyDocument = gql ` query getMemberStrategy($member_strategy: ID!) { memberStrategy(id: $member_strategy) { @@ -923,6 +946,9 @@ export function getSdk(requester) { getTokenGardens(variables, options) { return requester(getTokenGardensDocument, variables, options); }, + getMembersStrategy(variables, options) { + return requester(getMembersStrategyDocument, variables, options); + }, getMemberStrategy(variables, options) { return requester(getMemberStrategyDocument, variables, options); }, diff --git a/pkg/subgraph/.graphclient/persisted_operations.json b/pkg/subgraph/.graphclient/persisted_operations.json index f45d8cafe..b3814ba47 100644 --- a/pkg/subgraph/.graphclient/persisted_operations.json +++ b/pkg/subgraph/.graphclient/persisted_operations.json @@ -1,3 +1,3 @@ { - "974950368f68fa9e70ad32ade353fe5ad72e3c89602659acbda27da63a59c2fe": "query getFactories {\n registryFactories {\n id\n registryCommunities {\n id\n chainId\n isValid\n communityName\n covenantIpfsHash\n registerToken\n alloAddress\n members {\n memberAddress\n }\n strategies {\n id\n poolId\n isEnabled\n config {\n id\n decay\n maxRatio\n weight\n minThresholdPoints\n }\n }\n }\n }\n}\n\nquery getTokenGardens {\n tokenGardens {\n id\n chainId\n name\n symbol\n decimals\n totalBalance\n communities {\n id\n chainId\n covenantIpfsHash\n communityFee\n isValid\n communityName\n strategies {\n id\n }\n members {\n id\n memberAddress\n }\n }\n }\n}\n\nquery getMemberStrategy($member_strategy: ID!) {\n memberStrategy(id: $member_strategy) {\n id\n totalStakedPoints\n activatedPoints\n strategy {\n id\n }\n member {\n id\n }\n }\n}\n\nquery isMember($me: ID!, $comm: String!) {\n member(id: $me) {\n id\n stakes {\n id\n amount\n proposal {\n id\n proposalNumber\n stakedAmount\n strategy {\n id\n poolId\n registryCommunity {\n id\n isValid\n garden {\n id\n symbol\n decimals\n }\n }\n }\n }\n }\n memberCommunity(where: {registryCommunity_contains: $comm}) {\n stakedTokens\n isRegistered\n registryCommunity {\n id\n }\n }\n }\n}\n\nquery getMember($me: ID!) {\n member(id: $me) {\n id\n memberCommunity {\n id\n stakedTokens\n isRegistered\n registryCommunity {\n id\n isValid\n }\n }\n stakes {\n id\n proposal {\n proposalNumber\n id\n }\n amount\n createdAt\n }\n }\n}\n\nquery getPoolCreationData($communityAddr: ID!, $tokenAddr: ID!) {\n tokenGarden(id: $tokenAddr) {\n decimals\n id\n symbol\n }\n allos {\n id\n }\n registryCommunity(id: $communityAddr) {\n communityName\n isValid\n }\n}\n\nquery getProposalSupporters($proposalId: String!) {\n members {\n id\n stakes(where: {proposal: $proposalId}) {\n amount\n proposal {\n proposalNumber\n id\n }\n }\n }\n}\n\nquery getGardenCommunities($chainId: BigInt!, $tokenGarden: ID!) {\n registryCommunities(where: {chainId: $chainId, garden_: {id: $tokenGarden}}) {\n id\n garden {\n id\n }\n chainId\n isValid\n covenantIpfsHash\n communityName\n protocolFee\n communityFee\n registerToken\n registerStakeAmount\n alloAddress\n members(where: {stakedTokens_gt: \"0\"}) {\n id\n memberAddress\n }\n strategies(where: {isEnabled: true}) {\n id\n totalEffectiveActivePoints\n poolId\n poolAmount\n }\n }\n}\n\nquery getCommunity($communityAddr: ID!, $tokenAddr: ID!) {\n registryCommunity(id: $communityAddr) {\n communityName\n id\n members(\n where: {stakedTokens_gt: \"0\"}\n orderBy: stakedTokens\n orderDirection: desc\n ) {\n memberAddress\n stakedTokens\n }\n strategies(orderBy: poolId, orderDirection: desc, where: {archived: false}) {\n id\n proposals {\n id\n }\n isEnabled\n poolAmount\n poolId\n token\n metadata\n config {\n proposalType\n pointSystem\n }\n proposals {\n id\n }\n }\n covenantIpfsHash\n communityFee\n protocolFee\n registerStakeAmount\n registerToken\n }\n tokenGarden(id: $tokenAddr) {\n symbol\n decimals\n id\n }\n}\n\nquery getCommunityCreationData {\n registryFactories {\n id\n }\n}\n\nquery getPoolData($garden: ID!, $poolId: BigInt!) {\n allos {\n id\n chainId\n tokenNative\n }\n tokenGarden(id: $garden) {\n address\n name\n symbol\n description\n totalBalance\n ipfsCovenant\n decimals\n }\n cvstrategies(where: {poolId: $poolId}) {\n token\n poolAmount\n metadata\n id\n poolId\n totalEffectiveActivePoints\n isEnabled\n maxCVSupply\n archived\n sybilScorer {\n id\n }\n memberActive {\n id\n }\n config {\n id\n weight\n decay\n maxAmount\n maxRatio\n minThresholdPoints\n pointSystem\n proposalType\n allowlist\n }\n registryCommunity {\n id\n councilSafe\n isValid\n garden {\n id\n symbol\n decimals\n }\n }\n proposals(orderBy: createdAt, orderDirection: desc) {\n id\n proposalNumber\n metadata {\n title\n description\n }\n metadataHash\n beneficiary\n requestedAmount\n requestedToken\n proposalStatus\n stakedAmount\n convictionLast\n createdAt\n blockLast\n threshold\n strategy {\n id\n maxCVSupply\n totalEffectiveActivePoints\n }\n }\n }\n arbitrableConfigs(\n first: 1\n orderBy: version\n orderDirection: desc\n where: {strategy_: {poolId: $poolId}}\n ) {\n submitterCollateralAmount\n challengerCollateralAmount\n arbitrator\n defaultRuling\n defaultRulingTimeout\n tribunalSafe\n }\n}\n\nquery getProposalData($garden: ID!, $proposalId: ID!, $communityId: ID!) {\n allos {\n id\n chainId\n tokenNative\n }\n tokenGarden(id: $garden) {\n name\n symbol\n decimals\n }\n registryCommunity(id: $communityId) {\n councilSafe\n }\n cvproposal(id: $proposalId) {\n id\n proposalNumber\n beneficiary\n blockLast\n convictionLast\n createdAt\n metadata {\n title\n description\n }\n metadataHash\n proposalStatus\n requestedAmount\n requestedToken\n stakedAmount\n submitter\n threshold\n updatedAt\n version\n strategy {\n id\n token\n maxCVSupply\n totalEffectiveActivePoints\n poolId\n config {\n proposalType\n pointSystem\n minThresholdPoints\n decay\n }\n }\n arbitrableConfig {\n arbitrator\n defaultRuling\n defaultRulingTimeout\n challengerCollateralAmount\n submitterCollateralAmount\n tribunalSafe\n }\n }\n}\n\nquery getAllo {\n allos {\n id\n chainId\n tokenNative\n }\n}\n\nquery getStrategyByPool($poolId: BigInt!) {\n cvstrategies(where: {poolId: $poolId}) {\n id\n poolId\n totalEffectiveActivePoints\n isEnabled\n archived\n config {\n id\n proposalType\n pointSystem\n minThresholdPoints\n }\n memberActive {\n id\n }\n registryCommunity {\n id\n isValid\n garden {\n id\n symbol\n decimals\n }\n }\n proposals {\n id\n proposalNumber\n metadata {\n title\n description\n }\n metadataHash\n beneficiary\n requestedAmount\n requestedToken\n proposalStatus\n stakedAmount\n }\n }\n}\n\nquery getTokenTitle($tokenAddr: ID!) {\n tokenGarden(id: $tokenAddr) {\n name\n }\n}\n\nquery getCommunityTitles($communityAddr: ID!) {\n registryCommunity(id: $communityAddr) {\n communityName\n garden {\n name\n }\n }\n}\n\nquery getPoolTitles($poolId: BigInt!) {\n cvstrategies(where: {poolId: $poolId}) {\n poolId\n metadata\n registryCommunity {\n communityName\n garden {\n name\n }\n }\n metadata\n }\n}\n\nquery getProposalTitles($proposalId: ID!) {\n cvproposal(id: $proposalId) {\n proposalNumber\n metadata {\n title\n description\n }\n metadataHash\n strategy {\n poolId\n metadata\n registryCommunity {\n communityName\n garden {\n name\n }\n }\n }\n }\n}\n\nquery getPassportScorer($scorerId: ID!) {\n passportScorer(id: $scorerId) {\n id\n strategies {\n id\n strategy {\n id\n }\n threshold\n councilSafe\n active\n }\n users {\n id\n userAddress\n score\n lastUpdated\n }\n }\n}\n\nquery getPassportStrategy($strategyId: ID!) {\n passportStrategy(id: $strategyId) {\n id\n strategy {\n id\n }\n threshold\n councilSafe\n active\n }\n}\n\nquery getPassportUser($userId: ID!) {\n passportUser(id: $userId) {\n id\n userAddress\n score\n lastUpdated\n }\n}\n\nquery getProposalDisputes($proposalId: ID!) {\n proposalDisputes(where: {proposal_: {id: $proposalId}}) {\n id\n disputeId\n status\n challenger\n context\n metadata {\n reason\n }\n createdAt\n ruledAt\n rulingOutcome\n }\n}\n\nquery getArbitrableConfigs($strategyId: String!) {\n arbitrableConfigs(where: {strategy: $strategyId}) {\n arbitrator\n challengerCollateralAmount\n submitterCollateralAmount\n tribunalSafe\n defaultRuling\n defaultRulingTimeout\n }\n}\n\nquery getMemberPassportAndCommunities($memberId: ID!) {\n member(id: $memberId) {\n memberCommunity {\n id\n }\n }\n passportUser(id: $memberId) {\n lastUpdated\n score\n }\n}" + "e2a2c42ee04cf5dee75a7583c1f1b444a0c51e2d12801f4498ba7cf6d3830aa2": "query getFactories {\n registryFactories {\n id\n registryCommunities {\n id\n chainId\n isValid\n communityName\n covenantIpfsHash\n registerToken\n alloAddress\n members {\n memberAddress\n }\n strategies {\n id\n poolId\n isEnabled\n config {\n id\n decay\n maxRatio\n weight\n minThresholdPoints\n }\n }\n }\n }\n}\n\nquery getTokenGardens {\n tokenGardens {\n id\n chainId\n name\n symbol\n decimals\n totalBalance\n communities {\n id\n chainId\n covenantIpfsHash\n communityFee\n isValid\n communityName\n strategies {\n id\n }\n members {\n id\n memberAddress\n }\n }\n }\n}\n\nquery getMembersStrategy($strategyId: String!) {\n memberStrategies(where: {strategy: $strategyId}) {\n activatedPoints\n member {\n memberCommunity {\n memberAddress\n isRegistered\n }\n }\n totalStakedPoints\n id\n }\n}\n\nquery getMemberStrategy($member_strategy: ID!) {\n memberStrategy(id: $member_strategy) {\n id\n totalStakedPoints\n activatedPoints\n strategy {\n id\n }\n member {\n id\n }\n }\n}\n\nquery isMember($me: ID!, $comm: String!) {\n member(id: $me) {\n id\n stakes {\n id\n amount\n proposal {\n id\n proposalNumber\n stakedAmount\n strategy {\n id\n poolId\n registryCommunity {\n id\n isValid\n garden {\n id\n symbol\n decimals\n }\n }\n }\n }\n }\n memberCommunity(where: {registryCommunity_contains: $comm}) {\n stakedTokens\n isRegistered\n registryCommunity {\n id\n }\n }\n }\n}\n\nquery getMember($me: ID!) {\n member(id: $me) {\n id\n memberCommunity {\n id\n stakedTokens\n isRegistered\n registryCommunity {\n id\n isValid\n }\n }\n stakes {\n id\n proposal {\n proposalNumber\n id\n }\n amount\n createdAt\n }\n }\n}\n\nquery getPoolCreationData($communityAddr: ID!, $tokenAddr: ID!) {\n tokenGarden(id: $tokenAddr) {\n decimals\n id\n symbol\n }\n allos {\n id\n }\n registryCommunity(id: $communityAddr) {\n communityName\n isValid\n }\n}\n\nquery getProposalSupporters($proposalId: String!) {\n members {\n id\n stakes(where: {proposal: $proposalId}) {\n amount\n proposal {\n proposalNumber\n id\n }\n }\n }\n}\n\nquery getGardenCommunities($chainId: BigInt!, $tokenGarden: ID!) {\n registryCommunities(where: {chainId: $chainId, garden_: {id: $tokenGarden}}) {\n id\n garden {\n id\n }\n chainId\n isValid\n covenantIpfsHash\n communityName\n protocolFee\n communityFee\n registerToken\n registerStakeAmount\n alloAddress\n members(where: {stakedTokens_gt: \"0\"}) {\n id\n memberAddress\n }\n strategies(where: {isEnabled: true}) {\n id\n totalEffectiveActivePoints\n poolId\n poolAmount\n }\n }\n}\n\nquery getCommunity($communityAddr: ID!, $tokenAddr: ID!) {\n registryCommunity(id: $communityAddr) {\n communityName\n id\n members(\n where: {stakedTokens_gt: \"0\"}\n orderBy: stakedTokens\n orderDirection: desc\n ) {\n memberAddress\n stakedTokens\n }\n strategies(orderBy: poolId, orderDirection: desc, where: {archived: false}) {\n id\n proposals {\n id\n }\n isEnabled\n poolAmount\n poolId\n token\n metadata\n config {\n proposalType\n pointSystem\n }\n proposals {\n id\n }\n }\n covenantIpfsHash\n communityFee\n protocolFee\n registerStakeAmount\n registerToken\n }\n tokenGarden(id: $tokenAddr) {\n symbol\n decimals\n id\n }\n}\n\nquery getCommunityCreationData {\n registryFactories {\n id\n }\n}\n\nquery getPoolData($garden: ID!, $poolId: BigInt!) {\n allos {\n id\n chainId\n tokenNative\n }\n tokenGarden(id: $garden) {\n address\n name\n symbol\n description\n totalBalance\n ipfsCovenant\n decimals\n }\n cvstrategies(where: {poolId: $poolId}) {\n token\n poolAmount\n metadata\n id\n poolId\n totalEffectiveActivePoints\n isEnabled\n maxCVSupply\n archived\n sybilScorer {\n id\n }\n memberActive {\n id\n }\n config {\n id\n weight\n decay\n maxAmount\n maxRatio\n minThresholdPoints\n pointSystem\n proposalType\n allowlist\n }\n registryCommunity {\n id\n councilSafe\n isValid\n garden {\n id\n symbol\n decimals\n }\n }\n proposals(orderBy: createdAt, orderDirection: desc) {\n id\n proposalNumber\n metadata {\n title\n description\n }\n metadataHash\n beneficiary\n requestedAmount\n requestedToken\n proposalStatus\n stakedAmount\n convictionLast\n createdAt\n blockLast\n threshold\n strategy {\n id\n maxCVSupply\n totalEffectiveActivePoints\n }\n }\n }\n arbitrableConfigs(\n first: 1\n orderBy: version\n orderDirection: desc\n where: {strategy_: {poolId: $poolId}}\n ) {\n submitterCollateralAmount\n challengerCollateralAmount\n arbitrator\n defaultRuling\n defaultRulingTimeout\n tribunalSafe\n }\n}\n\nquery getProposalData($garden: ID!, $proposalId: ID!, $communityId: ID!) {\n allos {\n id\n chainId\n tokenNative\n }\n tokenGarden(id: $garden) {\n name\n symbol\n decimals\n }\n registryCommunity(id: $communityId) {\n councilSafe\n }\n cvproposal(id: $proposalId) {\n id\n proposalNumber\n beneficiary\n blockLast\n convictionLast\n createdAt\n metadata {\n title\n description\n }\n metadataHash\n proposalStatus\n requestedAmount\n requestedToken\n stakedAmount\n submitter\n threshold\n updatedAt\n version\n strategy {\n id\n token\n maxCVSupply\n totalEffectiveActivePoints\n poolId\n config {\n proposalType\n pointSystem\n minThresholdPoints\n decay\n }\n }\n arbitrableConfig {\n arbitrator\n defaultRuling\n defaultRulingTimeout\n challengerCollateralAmount\n submitterCollateralAmount\n tribunalSafe\n }\n }\n}\n\nquery getAllo {\n allos {\n id\n chainId\n tokenNative\n }\n}\n\nquery getStrategyByPool($poolId: BigInt!) {\n cvstrategies(where: {poolId: $poolId}) {\n id\n poolId\n totalEffectiveActivePoints\n isEnabled\n archived\n config {\n id\n proposalType\n pointSystem\n minThresholdPoints\n }\n memberActive {\n id\n }\n registryCommunity {\n id\n isValid\n garden {\n id\n symbol\n decimals\n }\n }\n proposals {\n id\n proposalNumber\n metadata {\n title\n description\n }\n metadataHash\n beneficiary\n requestedAmount\n requestedToken\n proposalStatus\n stakedAmount\n }\n }\n}\n\nquery getTokenTitle($tokenAddr: ID!) {\n tokenGarden(id: $tokenAddr) {\n name\n }\n}\n\nquery getCommunityTitles($communityAddr: ID!) {\n registryCommunity(id: $communityAddr) {\n communityName\n garden {\n name\n }\n }\n}\n\nquery getPoolTitles($poolId: BigInt!) {\n cvstrategies(where: {poolId: $poolId}) {\n poolId\n metadata\n registryCommunity {\n communityName\n garden {\n name\n }\n }\n metadata\n }\n}\n\nquery getProposalTitles($proposalId: ID!) {\n cvproposal(id: $proposalId) {\n proposalNumber\n metadata {\n title\n description\n }\n metadataHash\n strategy {\n poolId\n metadata\n registryCommunity {\n communityName\n garden {\n name\n }\n }\n }\n }\n}\n\nquery getPassportScorer($scorerId: ID!) {\n passportScorer(id: $scorerId) {\n id\n strategies {\n id\n strategy {\n id\n }\n threshold\n councilSafe\n active\n }\n users {\n id\n userAddress\n score\n lastUpdated\n }\n }\n}\n\nquery getPassportStrategy($strategyId: ID!) {\n passportStrategy(id: $strategyId) {\n id\n strategy {\n id\n }\n threshold\n councilSafe\n active\n }\n}\n\nquery getPassportUser($userId: ID!) {\n passportUser(id: $userId) {\n id\n userAddress\n score\n lastUpdated\n }\n}\n\nquery getProposalDisputes($proposalId: ID!) {\n proposalDisputes(where: {proposal_: {id: $proposalId}}) {\n id\n disputeId\n status\n challenger\n context\n metadata {\n reason\n }\n createdAt\n ruledAt\n rulingOutcome\n }\n}\n\nquery getArbitrableConfigs($strategyId: String!) {\n arbitrableConfigs(where: {strategy: $strategyId}) {\n arbitrator\n challengerCollateralAmount\n submitterCollateralAmount\n tribunalSafe\n defaultRuling\n defaultRulingTimeout\n }\n}\n\nquery getMemberPassportAndCommunities($memberId: ID!) {\n member(id: $memberId) {\n memberCommunity {\n id\n }\n }\n passportUser(id: $memberId) {\n lastUpdated\n score\n }\n}" } \ No newline at end of file diff --git a/pkg/subgraph/src/query/queries.graphql b/pkg/subgraph/src/query/queries.graphql index 6a078752f..c463cd757 100644 --- a/pkg/subgraph/src/query/queries.graphql +++ b/pkg/subgraph/src/query/queries.graphql @@ -54,6 +54,20 @@ query getTokenGardens { } } +query getMembersStrategy($strategyId: String!) { + memberStrategies(where: { strategy: $strategyId }) { + activatedPoints + member { + memberCommunity { + memberAddress + isRegistered + } + } + totalStakedPoints + id + } +} + query getMemberStrategy($member_strategy: ID!) { memberStrategy(id: $member_strategy) { id From de9835aacfe89f73a4cd4ca52b1cf180533411aa Mon Sep 17 00:00:00 2001 From: Matias Date: Wed, 18 Dec 2024 16:03:26 -0300 Subject: [PATCH 03/14] feat: new `Metrics`component in community page --- .../[chain]/[garden]/[community]/page.tsx | 2 ++ apps/web/components/Metrics.tsx | 32 +++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 apps/web/components/Metrics.tsx diff --git a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx index cbdab57ad..b935c6652 100644 --- a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx +++ b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx @@ -31,6 +31,7 @@ import { } from "@/components"; import { LoadingSpinner } from "@/components/LoadingSpinner"; import MarkdownWrapper from "@/components/MarkdownWrapper"; +import { Metrics } from "@/components/Metrics"; import { Skeleton } from "@/components/Skeleton"; import { TokenGardenFaucet } from "@/components/TokenGardenFaucet"; import { isProd } from "@/configs/isProd"; @@ -312,6 +313,7 @@ export default function Page({ /> + (null); + + const handleButtonClick = () => { + setIsOpen(true); + if (isOpen) { + panelRef.current?.scrollIntoView({ behavior: "smooth", block: "start" }); + } + }; + return ( + <> + + {isOpen && ( +
+
+

Community metrics

+
+
+ )} + + ); +} From 61c3127fc7730ea035b5ddc7c40b929c8880cb72 Mon Sep 17 00:00:00 2001 From: Matias Date: Fri, 20 Dec 2024 15:33:21 -0300 Subject: [PATCH 04/14] feat: reusable `DataTable` component to show metrics --- .../[poolId]/[proposalId]/page.tsx | 185 +++++++----------- apps/web/components/DataTable.tsx | 88 +++++++++ apps/web/components/index.ts | 1 + 3 files changed, 164 insertions(+), 110 deletions(-) create mode 100644 apps/web/components/DataTable.tsx diff --git a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/[poolId]/[proposalId]/page.tsx b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/[poolId]/[proposalId]/page.tsx index 3e314d1f4..c3a15292f 100644 --- a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/[poolId]/[proposalId]/page.tsx +++ b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/[poolId]/[proposalId]/page.tsx @@ -24,6 +24,7 @@ import { DisplayNumber, EthAddress, Statistic, + DataTable, } from "@/components"; import CancelButton from "@/components/CancelButton"; import { ConvictionBarChart } from "@/components/Charts/ConvictionBarChart"; @@ -110,10 +111,14 @@ export default function Page({ const proposalData = data?.cvproposal; const proposalSupporters = supportersData?.members; - const filteredAndSortedProposalSupporters = + const filteredAndSortedProposalSupporters: ProposalSupporter[] = proposalSupporters ? proposalSupporters .filter((item) => item.stakes && item.stakes.length > 0) + .map((item) => ({ + id: item.id, + stakes: item.stakes?.map((stake) => ({ amount: stake.amount })) ?? [], + })) .sort((a, b) => { const maxStakeA = Math.max( ...(a.stakes ?? []).map((stake) => stake.amount), @@ -404,123 +409,83 @@ export default function Page({ {filteredAndSortedProposalSupporters.length > 0 && ( )} ); } -function ProposalSupportersTable({ - _proposalSupporters, - _totalActivePoints, - _totalStakedAmount, - _beneficiary, - _submitter, +const ProposalSupportersTable = ({ + supporters, + beneficiary, + submitter, + totalActivePoints, + totalStakedAmount, }: { - _proposalSupporters: ProposalSupporter[]; - _totalActivePoints: number; - _totalStakedAmount: number; - _beneficiary: string | undefined; - _submitter: string | undefined; -}) { + supporters: ProposalSupporter[]; + beneficiary: string | undefined; + submitter: string | undefined; + totalActivePoints: number; + totalStakedAmount: number; +}) => { + interface Column { + header: string | React.ReactNode; + render: (supporter: ProposalSupporter) => React.ReactNode; + className?: string; + } + + const columns: Column[] = [ + { + header: supporters.length > 1 ? "Supporters" : "Supporter", + render: (supporter: ProposalSupporter) => ( + + ), + }, + { + header: "Role", + render: (supporter: ProposalSupporter) => + supporter.id === beneficiary ? "Beneficiary" + : supporter.id === submitter ? "Submitter" + : "Member", + }, + { + header: "Support", + render: (supporter: ProposalSupporter) => + totalActivePoints > 0 ? + `${calculatePercentageBigInt( + BigInt(supporter?.stakes[0]?.amount), + BigInt(totalActivePoints), + )} %` + : undefined, + className: "text-center", + }, + ]; + return ( -
-
-
-

Supported By

-

- A list of all the community members that are supporting this - proposal. + +

Total Support:

+

+ {totalStakedAmount} %

-
-
-
-
- - - - - - - - - - {_proposalSupporters.map((supporter: ProposalSupporter) => ( - - - {/* members role */} - - {/* members support */} - - - ))} - - - - - - - - -
-
- {_proposalSupporters.length > 1 ? - "Supporters" - : "Supporter"} -
-
-
Role
-
-
Support
-
-
-
- -
-
-
-

- {supporter.id === _beneficiary ? - "Beneficiary" - : supporter.id === _submitter ? - "Submitter" - : "Member"} -

-
-

- {(_totalActivePoints ?? 0) > 0 ? - calculatePercentageBigInt( - BigInt(supporter?.stakes[0]?.amount), - BigInt(_totalActivePoints ?? 0), - ) - : undefined}{" "} - % -

{" "} -
-

Total Support:

-
-

{_totalStakedAmount} %

-
-
-
-
-
+ } + /> ); -} +}; diff --git a/apps/web/components/DataTable.tsx b/apps/web/components/DataTable.tsx new file mode 100644 index 000000000..10e1a7306 --- /dev/null +++ b/apps/web/components/DataTable.tsx @@ -0,0 +1,88 @@ +import React from "react"; + +interface DataTableProps { + title: string; + description?: string; + data: any[]; + columns: TableColumn[]; + footer?: React.ReactNode; + className?: string; +} + +interface TableColumn { + header: string | React.ReactNode; + render: (item: any) => React.ReactNode; + className?: string; +} + +export const DataTable: React.FC = ({ + title, + description, + data, + columns, + footer, + className = "", +}) => { + return ( +
+
+
+

{title}

+ {description && ( +

+ {description} +

+ )} +
+
+
+
+
+ + + + {/* */} + {columns.map((col) => ( + + ))} + + + + {data.map((item) => ( + + {columns.map((col) => ( + + ))} + + ))} + + {footer && ( + + + + + + )} +
+
{col.header}
+
+

{col.render(item)}

+
+ {footer} +
+
+
+
+
+ ); +}; diff --git a/apps/web/components/index.ts b/apps/web/components/index.ts index 3a60f3ee9..6b433f817 100644 --- a/apps/web/components/index.ts +++ b/apps/web/components/index.ts @@ -32,3 +32,4 @@ export { CheckPassport } from "./CheckPassport"; export { Modal } from "./Modal"; export { InfoBox } from "./InfoBox"; export { InfoWrapper } from "./InfoWrapper"; +export { DataTable } from "./DataTable"; From f7a3987e4fbd679d26f2be6129df27650a76ee7d Mon Sep 17 00:00:00 2001 From: Matias Date: Fri, 20 Dec 2024 16:01:46 -0300 Subject: [PATCH 05/14] feat: start integrating `Metrics` in community page --- .../[chain]/[garden]/[community]/page.tsx | 35 ++++++++++++++++++- apps/web/components/Metrics.tsx | 3 +- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx index b935c6652..b94a4ee7f 100644 --- a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx +++ b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx @@ -7,6 +7,7 @@ import { RectangleGroupIcon, UserGroupIcon, } from "@heroicons/react/24/outline"; + import { Dnum, multiply } from "dnum"; import Image from "next/image"; import Link from "next/link"; @@ -28,6 +29,7 @@ import { RegisterMember, Statistic, InfoWrapper, + DataTable, } from "@/components"; import { LoadingSpinner } from "@/components/LoadingSpinner"; import MarkdownWrapper from "@/components/MarkdownWrapper"; @@ -201,6 +203,8 @@ export default function Page({ } }, [covenantSectionRef.current, searchParams]); + console.log(registryCommunity?.members); + if (!tokenGarden || !registryCommunity) { return (
@@ -313,7 +317,9 @@ export default function Page({ />
- + + + ); } + +type CommunityMetricsProps = { + data: any; +}; + +const CommuityMetrics = ({ data }: CommunityMetricsProps) => { + const columns = [ + { + header: "Member", + render: (member: any) => ( + + ), + }, + ]; + + return ( + <> +

test

+ + // + ); +}; diff --git a/apps/web/components/Metrics.tsx b/apps/web/components/Metrics.tsx index c5964efe2..849b0ab10 100644 --- a/apps/web/components/Metrics.tsx +++ b/apps/web/components/Metrics.tsx @@ -1,7 +1,7 @@ import React, { useRef, useState } from "react"; import { ChartBarSquareIcon } from "@heroicons/react/24/outline"; -export function Metrics() { +export function Metrics({ children }: { children: React.ReactNode }) { const [isOpen, setIsOpen] = useState(false); const panelRef = useRef(null); @@ -24,6 +24,7 @@ export function Metrics() {

Community metrics

+ {children}
)} From e290a25a51cc9eba3b4e5053125b09440a52bfbe Mon Sep 17 00:00:00 2001 From: Matias Date: Mon, 23 Dec 2024 15:22:28 -0300 Subject: [PATCH 06/14] feat: delete unused `Metrics` component and add `CommunityDetailsTable` that render members staked with `See details` button in community page --- .../[chain]/[garden]/[community]/page.tsx | 78 +++++++++++++++---- apps/web/components/Metrics.tsx | 33 -------- 2 files changed, 64 insertions(+), 47 deletions(-) delete mode 100644 apps/web/components/Metrics.tsx diff --git a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx index b94a4ee7f..a24e29a02 100644 --- a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx +++ b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx @@ -33,7 +33,6 @@ import { } from "@/components"; import { LoadingSpinner } from "@/components/LoadingSpinner"; import MarkdownWrapper from "@/components/MarkdownWrapper"; -import { Metrics } from "@/components/Metrics"; import { Skeleton } from "@/components/Skeleton"; import { TokenGardenFaucet } from "@/components/TokenGardenFaucet"; import { isProd } from "@/configs/isProd"; @@ -57,6 +56,8 @@ export default function Page({ const searchParams = useCollectQueryParams(); const { address: accountAddress } = useAccount(); const [covenant, setCovenant] = useState(); + const [openMetrics, setOpenMetrics] = useState(false); + const covenantSectionRef = useRef(null); const { data: tokenGarden } = useToken({ address: tokenAddr as Address, @@ -264,6 +265,13 @@ export default function Page({ height={180} width={180} /> +
@@ -317,9 +325,16 @@ export default function Page({ />
- - - + + {/* */} + {openMetrics && ( + + )} + { - const columns = [ +// interface Column { +// header: string | React.ReactNode; +// render: (supporter: ProposalSupporter) => React.ReactNode; +// className?: string; +// } + +const CommunityDetailsTable = ({ + membersStaked, + tokenGarden, + communityStakedTokens, +}: CommunityMetricsProps) => { + const columns: any = [ { - header: "Member", - render: (member: any) => ( + header: "Members", + render: (memberData: any) => ( ), }, + { + header: "Staked tokens", + render: (memberData: any) => ( + + ), + className: "text-right", + }, ]; return ( - <> -

test

- - // + +

Total Staked:

+ +
+ } + /> ); }; diff --git a/apps/web/components/Metrics.tsx b/apps/web/components/Metrics.tsx deleted file mode 100644 index 849b0ab10..000000000 --- a/apps/web/components/Metrics.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import React, { useRef, useState } from "react"; -import { ChartBarSquareIcon } from "@heroicons/react/24/outline"; - -export function Metrics({ children }: { children: React.ReactNode }) { - const [isOpen, setIsOpen] = useState(false); - const panelRef = useRef(null); - - const handleButtonClick = () => { - setIsOpen(true); - if (isOpen) { - panelRef.current?.scrollIntoView({ behavior: "smooth", block: "start" }); - } - }; - return ( - <> - - {isOpen && ( -
-
-

Community metrics

- {children} -
-
- )} - - ); -} From 7205e87a9f8d5557a13d0b5bc8f00f9b8c72e707 Mon Sep 17 00:00:00 2001 From: Matias Date: Mon, 23 Dec 2024 16:09:07 -0300 Subject: [PATCH 07/14] upgrade components --- .../[chain]/[garden]/[community]/page.tsx | 33 +++++++++++-------- apps/web/components/DataTable.tsx | 13 ++++---- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx index a24e29a02..bddbc2576 100644 --- a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx +++ b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx @@ -47,6 +47,7 @@ import { SCALE_PRECISION, SCALE_PRECISION_DECIMALS, } from "@/utils/numbers"; +import { FetchTokenResult } from "@wagmi/core"; export default function Page({ params: { chain, garden: tokenAddr, community: communityAddr }, @@ -329,7 +330,7 @@ export default function Page({ {/* */} {openMetrics && ( @@ -422,27 +423,32 @@ export default function Page({ ); } +type MembersStaked = { + memberAddress: string; + stakedTokens: string; +}; + type CommunityMetricsProps = { - membersStaked: any; - tokenGarden: any; + membersStaked: MembersStaked[] | undefined; + tokenGarden: FetchTokenResult; communityStakedTokens: number | bigint; }; -// interface Column { -// header: string | React.ReactNode; -// render: (supporter: ProposalSupporter) => React.ReactNode; -// className?: string; -// } +interface Column { + header: string | React.ReactNode; + render: (supporter: MembersStaked) => React.ReactNode; + className?: string; +} const CommunityDetailsTable = ({ membersStaked, tokenGarden, communityStakedTokens, }: CommunityMetricsProps) => { - const columns: any = [ + const columns: Column[] = [ { header: "Members", - render: (memberData: any) => ( + render: (memberData: MembersStaked) => ( ( + render: (memberData: MembersStaked) => (

Total Staked:

diff --git a/apps/web/components/DataTable.tsx b/apps/web/components/DataTable.tsx index 10e1a7306..56741c610 100644 --- a/apps/web/components/DataTable.tsx +++ b/apps/web/components/DataTable.tsx @@ -38,10 +38,9 @@ export const DataTable: React.FC = ({
- +
- {/* */} {columns.map((col) => ( - - {data.map((item) => ( - + + {data.map((item, idx) => ( + {columns.map((col) => ( From e5bd5304041f470e75c82a927389379d4914a4a3 Mon Sep 17 00:00:00 2001 From: Matias Date: Thu, 26 Dec 2024 14:28:52 -0300 Subject: [PATCH 08/14] upgrade --- .../gardens/[chain]/[garden]/[community]/page.tsx | 12 ++++++------ apps/web/components/DataTable.tsx | 8 ++++---- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx index bddbc2576..2470ddf37 100644 --- a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx +++ b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx @@ -8,6 +8,7 @@ import { UserGroupIcon, } from "@heroicons/react/24/outline"; +import { FetchTokenResult } from "@wagmi/core"; import { Dnum, multiply } from "dnum"; import Image from "next/image"; import Link from "next/link"; @@ -47,7 +48,6 @@ import { SCALE_PRECISION, SCALE_PRECISION_DECIMALS, } from "@/utils/numbers"; -import { FetchTokenResult } from "@wagmi/core"; export default function Page({ params: { chain, garden: tokenAddr, community: communityAddr }, @@ -57,7 +57,7 @@ export default function Page({ const searchParams = useCollectQueryParams(); const { address: accountAddress } = useAccount(); const [covenant, setCovenant] = useState(); - const [openMetrics, setOpenMetrics] = useState(false); + const [openDetails, setOpenDetails] = useState(false); const covenantSectionRef = useRef(null); const { data: tokenGarden } = useToken({ @@ -267,7 +267,7 @@ export default function Page({ width={180} />
= ({ ))}

{col.render(item)}

+
{columns.map((col) => ( @@ -53,11 +53,11 @@ export const DataTable: React.FC = ({ - {data.map((item, idx) => ( - + {data.map((item) => ( + {columns.map((col) => ( - {data.map((item) => ( - - {columns.map((col) => ( - - ))} - - ))} + {data && + data.map((item) => ( + + {columns.map((col) => ( + + ))} + + ))} {footer && ( diff --git a/apps/web/components/PoolGovernance.tsx b/apps/web/components/PoolGovernance.tsx index c4d02d0c5..6123443b9 100644 --- a/apps/web/components/PoolGovernance.tsx +++ b/apps/web/components/PoolGovernance.tsx @@ -8,6 +8,7 @@ import { CVStrategyConfig, TokenGarden, } from "#/subgraph/.graphclient"; +import { MemberStrategyData } from "./Proposals"; import { ActivatePoints, Badge, @@ -18,6 +19,7 @@ import { EthAddress, DataTable, } from "@/components/"; +import { Column } from "@/types"; export type PoolGovernanceProps = { memberPoolWeight: number | undefined; @@ -123,48 +125,58 @@ export const PoolGovernance: React.FC = ({ ); }; -interface MemberStrategyData { - id: string; - memberStrategies?: { - member?: { - memberCommunity?: { - memberAddress: string; - }; - }; - }; -} - -interface PoolGovernanceDetailsProps { - membersStrategyData: MemberStrategyData[]; -} +type MemberColumn = Column; const PoolGovernanceDetails: React.FC<{ - membersStrategyData: MemberStrategyData[]; + membersStrategyData: { + id: string; + activatedPoints: string; + totalStakedPoints: string; + member: { + memberCommunity: { + memberAddress: string; + }[]; + }; + }[]; }> = ({ membersStrategyData }) => { - console.log("membersStrData", membersStrategyData); - - const columns = [ + const columns: MemberColumn[] = [ { header: "Member", - render: (row: any) => ( + render: (member) => ( ), }, + { + header: "Registration Status", + render: (member) => ( + + {( + member.member?.memberCommunity && + Array.isArray(member.member.memberCommunity) && + member.member.memberCommunity[0]?.isRegistered + ) ? + "Registered" + : "Not Registered"} + + ), + }, ]; return ( - <> - - + ); }; diff --git a/apps/web/components/Proposals.tsx b/apps/web/components/Proposals.tsx index 6fe10c32e..ce14734bd 100644 --- a/apps/web/components/Proposals.tsx +++ b/apps/web/components/Proposals.tsx @@ -53,6 +53,17 @@ export type ProposalInputItem = { value: bigint; }; +export type MemberStrategyData = { + activatedPoints: string; + id: string; + member?: { + memberCommunity?: { + isRegistered: boolean; + memberAddress: string; + }; + }; +}; + // export type Strategy = getStrategyByPoolQuery["cvstrategies"][number]; // export type Proposal = CVStrategy["proposals"][number]; export type StakesMemberType = NonNullable["stakes"]; @@ -466,6 +477,8 @@ export function Proposals({ (x) => stakedFilters[x.id]?.value, ); + const membersStrategies = membersStrategyData?.memberStrategies; + // Render return ( <> @@ -477,7 +490,7 @@ export function Proposals({ memberTokensInCommunity={memberTokensInCommunity} isMemberCommunity={isMemberCommunity} memberActivatedStrategy={memberActivatedStrategy} - membersStrategyData={membersStrategyData} + membersStrategyData={membersStrategies} />
diff --git a/apps/web/types/index.ts b/apps/web/types/index.ts index 4226c0112..c0387b1b6 100644 --- a/apps/web/types/index.ts +++ b/apps/web/types/index.ts @@ -56,3 +56,9 @@ export type SybilResistanceType = | "noSybilResist" | "gitcoinPassport" | "allowList"; + +export type Column = { + header: string | React.ReactNode; + render: (item: T) => React.ReactNode; + className?: string; +}; From cc744f1d260f77a86ca35c01a86ed6ef353b749f Mon Sep 17 00:00:00 2001 From: Matias Date: Wed, 8 Jan 2025 21:06:19 -0300 Subject: [PATCH 11/14] add voting weigth calculaton in `PoolGovDetails` + small tweakes --- apps/web/components/PoolGovernance.tsx | 21 ++++++++++++--------- apps/web/components/Proposals.tsx | 1 + 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/apps/web/components/PoolGovernance.tsx b/apps/web/components/PoolGovernance.tsx index 6123443b9..68267f8a9 100644 --- a/apps/web/components/PoolGovernance.tsx +++ b/apps/web/components/PoolGovernance.tsx @@ -20,6 +20,7 @@ import { DataTable, } from "@/components/"; import { Column } from "@/types"; +import { calculatePercentageBigInt } from "@/utils/numbers"; export type PoolGovernanceProps = { memberPoolWeight: number | undefined; @@ -62,7 +63,7 @@ export const PoolGovernance: React.FC = ({ return ( <> -
+

Pool Governance

@@ -114,6 +115,9 @@ export const PoolGovernance: React.FC = ({ @@ -156,18 +160,17 @@ const PoolGovernanceDetails: React.FC<{ ), }, { - header: "Registration Status", + header: "Voting weight used", render: (member) => ( - {( - member.member?.memberCommunity && - Array.isArray(member.member.memberCommunity) && - member.member.memberCommunity[0]?.isRegistered - ) ? - "Registered" - : "Not Registered"} + {calculatePercentageBigInt( + BigInt(member.totalStakedPoints), + BigInt(member.activatedPoints), + )}{" "} + % ), + className: "flex justify-end pr-4", }, ]; diff --git a/apps/web/components/Proposals.tsx b/apps/web/components/Proposals.tsx index ce14734bd..d13a71587 100644 --- a/apps/web/components/Proposals.tsx +++ b/apps/web/components/Proposals.tsx @@ -62,6 +62,7 @@ export type MemberStrategyData = { memberAddress: string; }; }; + totalStakedPoints: string; }; // export type Strategy = getStrategyByPoolQuery["cvstrategies"][number]; From bb46cabd3509681fb122861fe88cbe9e35810855 Mon Sep 17 00:00:00 2001 From: Matias Date: Wed, 8 Jan 2025 21:13:56 -0300 Subject: [PATCH 12/14] fix type --- apps/web/components/PoolGovernance.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/components/PoolGovernance.tsx b/apps/web/components/PoolGovernance.tsx index 68267f8a9..9c47fb923 100644 --- a/apps/web/components/PoolGovernance.tsx +++ b/apps/web/components/PoolGovernance.tsx @@ -150,7 +150,7 @@ const PoolGovernanceDetails: React.FC<{ Date: Mon, 13 Jan 2025 15:18:28 -0300 Subject: [PATCH 13/14] upgrade and fixes --- .../[chain]/[garden]/[community]/page.tsx | 22 +++++++++---------- apps/web/components/PoolGovernance.tsx | 8 +++---- apps/web/components/Proposals.tsx | 22 ++++++++++--------- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx index 223d86388..8dd05e714 100644 --- a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx +++ b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx @@ -297,9 +297,9 @@ export default function Page({
@@ -353,17 +353,15 @@ export default function Page({ registryCommunity={registryCommunity} />
+ {openCommDetails && ( + + )}
- {/* */} - {openCommDetails && ( - - )} - = ({ tooltip="No activity in this pool yet." className="w-full" > - {openGovDetails ? "Close" : "See"} Details + {openGovDetails ? "Close" : "Open"} Governance Details + {openGovDetails && ( + + )}
- {openGovDetails && ( - - )} ); }; diff --git a/apps/web/components/Proposals.tsx b/apps/web/components/Proposals.tsx index a58df3be5..44fa53950 100644 --- a/apps/web/components/Proposals.tsx +++ b/apps/web/components/Proposals.tsx @@ -483,16 +483,18 @@ export function Proposals({ // Render return ( <> - + {strategy.isEnabled && ( + + )}
From 92b0138e1078590f7c7eede61ec08ca8a74aa4cc Mon Sep 17 00:00:00 2001 From: Matias Date: Mon, 20 Jan 2025 15:30:54 -0300 Subject: [PATCH 14/14] update --- .../app/(app)/gardens/[chain]/[garden]/[community]/page.tsx | 4 ++-- apps/web/components/PoolGovernance.tsx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx index 50a59de91..3fd761632 100644 --- a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx +++ b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx @@ -501,9 +501,9 @@ const CommunityDetailsTable = ({

Total Staked:

diff --git a/apps/web/components/PoolGovernance.tsx b/apps/web/components/PoolGovernance.tsx index 7fe7a5e71..384e7a62b 100644 --- a/apps/web/components/PoolGovernance.tsx +++ b/apps/web/components/PoolGovernance.tsx @@ -119,7 +119,7 @@ export const PoolGovernance: React.FC = ({ tooltip="No activity in this pool yet." className="w-full" > - {openGovDetails ? "Close" : "Open"} Governance Details + {openGovDetails ? "Close" : "View"} Governance Details {openGovDetails && (

{col.render(item)}

From 39ad1af1d299b808205dc659b73231c61aca26d0 Mon Sep 17 00:00:00 2001 From: Matias Date: Fri, 27 Dec 2024 17:15:24 -0300 Subject: [PATCH 09/14] feat: Add `PoolGovernanceDetails` component --- .../[chain]/[garden]/[community]/page.tsx | 42 ++--- apps/web/components/PoolGovernance.tsx | 153 ++++++++++++------ apps/web/components/Proposals.tsx | 3 +- 3 files changed, 130 insertions(+), 68 deletions(-) diff --git a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx index 2470ddf37..af999fff0 100644 --- a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx +++ b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx @@ -49,6 +49,23 @@ import { SCALE_PRECISION_DECIMALS, } from "@/utils/numbers"; +type MembersStaked = { + memberAddress: string; + stakedTokens: string; +}; + +type CommunityMetricsProps = { + membersStaked: MembersStaked[] | undefined; + tokenGarden: FetchTokenResult; + communityStakedTokens: number | bigint; +}; + +interface Column { + header: string | React.ReactNode; + render: (supporter: MembersStaked) => React.ReactNode; + className?: string; +} + export default function Page({ params: { chain, garden: tokenAddr, community: communityAddr }, }: { @@ -57,7 +74,7 @@ export default function Page({ const searchParams = useCollectQueryParams(); const { address: accountAddress } = useAccount(); const [covenant, setCovenant] = useState(); - const [openDetails, setOpenDetails] = useState(false); + const [openCommDetails, setOpenCommDetails] = useState(false); const covenantSectionRef = useRef(null); const { data: tokenGarden } = useToken({ @@ -267,11 +284,11 @@ export default function Page({ width={180} />
@@ -328,7 +345,7 @@ export default function Page({ {/* */} - {openDetails && ( + {openCommDetails && ( React.ReactNode; - className?: string; -} - const CommunityDetailsTable = ({ membersStaked, tokenGarden, diff --git a/apps/web/components/PoolGovernance.tsx b/apps/web/components/PoolGovernance.tsx index 17fe7218d..c4d02d0c5 100644 --- a/apps/web/components/PoolGovernance.tsx +++ b/apps/web/components/PoolGovernance.tsx @@ -1,6 +1,6 @@ "use client"; -import React from "react"; +import React, { useState } from "react"; import { Dnum } from "dnum"; import { Address, useAccount } from "wagmi"; import { @@ -14,6 +14,9 @@ import { DisplayNumber, CheckPassport, InfoBox, + Button, + EthAddress, + DataTable, } from "@/components/"; export type PoolGovernanceProps = { @@ -27,6 +30,7 @@ export type PoolGovernanceProps = { memberTokensInCommunity: bigint; isMemberCommunity: boolean; memberActivatedStrategy: boolean; + membersStrategyData: any; }; export const PoolGovernance: React.FC = ({ @@ -37,9 +41,11 @@ export const PoolGovernance: React.FC = ({ memberTokensInCommunity, isMemberCommunity, memberActivatedStrategy, + membersStrategyData, }) => { const showPoolGovernanceData = isMemberCommunity && memberActivatedStrategy; const poolSystem = strategy.config.pointSystem; + const [openGovDetails, setOpenGovDetails] = useState(false); const { address } = useAccount(); const poolSystemDefinition: { [key: number]: string } = { @@ -53,55 +59,112 @@ export const PoolGovernance: React.FC = ({ }; return ( -
-
-

Pool Governance

-
- - +
+
+

Pool Governance

+
+ - -
-
- {address && ( -
-
-
-
-

Your stake in the community:

- - -
- {showPoolGovernanceData && ( -
-

Your voting weight:

-

- {memberPoolWeight?.toFixed(2)} % -

+ enableCheck={!memberActivatedStrategy} + > + + +
+
+ {address && ( +
+
+
+
+

Your stake in the community:

+ +
- )} + {showPoolGovernanceData && ( +
+

Your voting weight:

+

+ {memberPoolWeight?.toFixed(2)} % +

+
+ )} +
-
+ )} + + + + {openGovDetails && ( + )} - + ); +}; + +interface MemberStrategyData { + id: string; + memberStrategies?: { + member?: { + memberCommunity?: { + memberAddress: string; + }; + }; + }; +} + +interface PoolGovernanceDetailsProps { + membersStrategyData: MemberStrategyData[]; +} + +const PoolGovernanceDetails: React.FC<{ + membersStrategyData: MemberStrategyData[]; +}> = ({ membersStrategyData }) => { + console.log("membersStrData", membersStrategyData); + + const columns = [ + { + header: "Member", + render: (row: any) => ( + + ), + }, + ]; + + return ( + <> + - + ); }; diff --git a/apps/web/components/Proposals.tsx b/apps/web/components/Proposals.tsx index 3d17283c0..6fe10c32e 100644 --- a/apps/web/components/Proposals.tsx +++ b/apps/web/components/Proposals.tsx @@ -176,8 +176,6 @@ export function Proposals({ enabled: !!wallet, }); - console.log(membersStrategyData); - const memberActivatedPoints: bigint = BigInt( memberStrategyData?.memberStrategy?.activatedPoints ?? 0, ); @@ -479,6 +477,7 @@ export function Proposals({ memberTokensInCommunity={memberTokensInCommunity} isMemberCommunity={isMemberCommunity} memberActivatedStrategy={memberActivatedStrategy} + membersStrategyData={membersStrategyData} />
From 0e528fab3f870d7ec7136291dc18ee85de88cd2d Mon Sep 17 00:00:00 2001 From: Matias Date: Wed, 8 Jan 2025 20:16:35 -0300 Subject: [PATCH 10/14] latest update --- .../[poolId]/[proposalId]/page.tsx | 13 ++-- .../[chain]/[garden]/[community]/page.tsx | 14 ++-- apps/web/components/DataTable.tsx | 25 +++---- apps/web/components/PoolGovernance.tsx | 68 +++++++++++-------- apps/web/components/Proposals.tsx | 15 +++- apps/web/types/index.ts | 6 ++ 6 files changed, 81 insertions(+), 60 deletions(-) diff --git a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/[poolId]/[proposalId]/page.tsx b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/[poolId]/[proposalId]/page.tsx index c3a15292f..915ab8648 100644 --- a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/[poolId]/[proposalId]/page.tsx +++ b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/[poolId]/[proposalId]/page.tsx @@ -40,8 +40,8 @@ import { useConvictionRead } from "@/hooks/useConvictionRead"; import { ConditionObject, useDisableButtons } from "@/hooks/useDisableButtons"; import { useMetadataIpfsFetch } from "@/hooks/useIpfsFetch"; import { useSubgraphQuery } from "@/hooks/useSubgraphQuery"; -import { alloABI, safeABI } from "@/src/generated"; -import { PoolTypes, ProposalStatus } from "@/types"; +import { alloABI } from "@/src/generated"; +import { PoolTypes, ProposalStatus, Column } from "@/types"; import { useErrorDetails } from "@/utils/getErrorName"; import { calculatePercentageBigInt } from "@/utils/numbers"; @@ -51,6 +51,7 @@ type ProposalSupporter = { id: string; stakes: { amount: number }[]; }; +type SupporterColumn = Column; export default function Page({ params: { proposalId, garden, community: communityAddr, poolId }, @@ -433,13 +434,7 @@ const ProposalSupportersTable = ({ totalActivePoints: number; totalStakedAmount: number; }) => { - interface Column { - header: string | React.ReactNode; - render: (supporter: ProposalSupporter) => React.ReactNode; - className?: string; - } - - const columns: Column[] = [ + const columns: SupporterColumn[] = [ { header: supporters.length > 1 ? "Supporters" : "Supporter", render: (supporter: ProposalSupporter) => ( diff --git a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx index af999fff0..da5d1eb0c 100644 --- a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx +++ b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/page.tsx @@ -41,7 +41,7 @@ import { QUERY_PARAMS } from "@/constants/query-params"; import { useCollectQueryParams } from "@/contexts/collectQueryParams.context"; import { useDisableButtons } from "@/hooks/useDisableButtons"; import { useSubgraphQuery } from "@/hooks/useSubgraphQuery"; -import { PoolTypes } from "@/types"; +import { PoolTypes, Column } from "@/types"; import { fetchIpfs } from "@/utils/ipfsUtils"; import { parseToken, @@ -60,11 +60,7 @@ type CommunityMetricsProps = { communityStakedTokens: number | bigint; }; -interface Column { - header: string | React.ReactNode; - render: (supporter: MembersStaked) => React.ReactNode; - className?: string; -} +type MemberColumn = Column; export default function Page({ params: { chain, garden: tokenAddr, community: communityAddr }, @@ -222,8 +218,6 @@ export default function Page({ } }, [covenantSectionRef.current, searchParams]); - console.log(registryCommunity?.members); - if (!tokenGarden || !registryCommunity) { return (
@@ -445,9 +439,9 @@ const CommunityDetailsTable = ({ tokenGarden, communityStakedTokens, }: CommunityMetricsProps) => { - const columns: Column[] = [ + const columns: MemberColumn[] = [ { - header: "Members", + header: `Members (${membersStaked?.length})`, render: (memberData: MembersStaked) => ( = ({
-

{col.render(item)}

-
+

{col.render(item)}

+