From 7b303a334dd17b0cec61be0b4f7928276e1b6fb6 Mon Sep 17 00:00:00 2001 From: eagle Date: Thu, 15 Feb 2024 16:32:46 +0530 Subject: [PATCH] fetch Allo V2 programs from the indexer (#2871) * feat: add getProfilesByUser query * feat: update getProgramsByUser * fix: build issues * feat: update getProgramsByUser * fix: address feedback --- packages/data-layer/src/data-layer.ts | 45 ++++++++++++++++++++++----- packages/data-layer/src/queries.ts | 10 +++--- 2 files changed, 43 insertions(+), 12 deletions(-) diff --git a/packages/data-layer/src/data-layer.ts b/packages/data-layer/src/data-layer.ts index 9dc4b4120f..1f308fd561 100644 --- a/packages/data-layer/src/data-layer.ts +++ b/packages/data-layer/src/data-layer.ts @@ -16,6 +16,7 @@ import { Round, RoundOverview, SearchBasedProjectCategory, + Tags, TimestampVariables, V2RoundWithRoles, v2Project, @@ -31,10 +32,10 @@ import { getApplication, getApplicationsByProjectId, getProgramName, - getProgramsByUser, getProjectById, getProjects, getProjectsAndRolesByAddress, + getProgramByUserAndTag, getRoundByIdAndChainId, getRoundsByProgramIdAndUserAddress, } from "./queries"; @@ -145,19 +146,49 @@ export class DataLayer { chainId: number; alloVersion: AlloVersion; }): Promise<{ programs: Program[] } | null> { + const filterByTag = alloVersion === "allo-v1" ? "program" : "allo-v2"; const requestVariables = { alloVersion, address, chainId, + filterByTag, }; - const response: { projects: Program[] } = await request( - this.gsIndexerEndpoint, - getProgramsByUser, - requestVariables, - ); + let programs: Program[] = []; + + if (alloVersion === "allo-v1") { + let response: { projects: Program[] } = { projects: [] }; + + response = await request( + this.gsIndexerEndpoint, + getProgramByUserAndTag, + requestVariables, + ); - const programs = response.projects; + programs = response.projects; + } else if (alloVersion === "allo-v2") { + let response: { projects: v2Project[] } = { projects: [] }; + + response = await request( + this.gsIndexerEndpoint, + getProgramByUserAndTag, + requestVariables, + ); + + const projects = response.projects; + + programs = projects.map((project) => { + return { + id: project.id, + chainId: project.chainId, + metadata: { + name: project.metadata?.title, + }, + tags: project.tags as Tags[], + roles: project.roles, + }; + }); + } if (!programs) return null; diff --git a/packages/data-layer/src/queries.ts b/packages/data-layer/src/queries.ts index 0bd3f677a6..5f4b09bd2e 100644 --- a/packages/data-layer/src/queries.ts +++ b/packages/data-layer/src/queries.ts @@ -1,18 +1,18 @@ import { gql } from "graphql-request"; /** - * Get all the programs that a user is a part of - * @param $alloVersion - The version of Allo + * Manager: Get all the programs that a user is a part of * @param $address - The address of the user * @param $chainId - The network ID of the chain + * @param $tag - The tag of the program * * @returns The programs */ -export const getProgramsByUser = gql` - query ($address: String!, $chainId: Int!) { +export const getProgramByUserAndTag = gql` + query ($address: String!, $chainId: Int!, $filterByTag: String!) { projects( filter: { - tags: { contains: "program" } + tags: { contains: [$filterByTag] } roles: { some: { address: { equalTo: $address } } } and: { chainId: { equalTo: $chainId } } }