From ea9301684bf838109b50c77e53547328c11fb6d3 Mon Sep 17 00:00:00 2001 From: 0xKurt Date: Thu, 25 Jan 2024 15:58:35 +0100 Subject: [PATCH] dispatch owner --- .../builder/src/actions/grantsMetadata.ts | 9 +++- .../common/src/allo/backends/test-utils.ts | 42 +++++++++++++++++++ packages/data-layer/src/data-layer.test.ts | 6 +++ packages/data-layer/src/data.types.ts | 6 +++ packages/data-layer/src/queries.ts | 4 ++ 5 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 packages/common/src/allo/backends/test-utils.ts diff --git a/packages/builder/src/actions/grantsMetadata.ts b/packages/builder/src/actions/grantsMetadata.ts index 6560ed9cb3..5d6cf570e6 100644 --- a/packages/builder/src/actions/grantsMetadata.ts +++ b/packages/builder/src/actions/grantsMetadata.ts @@ -1,9 +1,10 @@ import { datadogRum } from "@datadog/browser-rum"; import { getConfig } from "common/src/config"; -import { DataLayer } from "data-layer"; +import { AddressAndRole, DataLayer } from "data-layer"; import { Dispatch } from "redux"; import { Metadata } from "../types"; import { getProjectURIComponents, getV1HashedProjectId } from "../utils/utils"; +import { projectOwnersLoaded } from "./projects"; export const GRANT_METADATA_LOADING_URI = "GRANT_METADATA_LOADING_URI"; export interface GrantMetadataLoadingURI { @@ -126,6 +127,12 @@ export const fetchGrantData = throw new Error("metadata is null"); } + const ownerAddresses = project.roles + .filter((role: AddressAndRole) => role.role === "OWNER") + .map((role) => role.address); + + dispatch(projectOwnersLoaded(id, ownerAddresses)); + dispatch(grantMetadataFetched(item)); } catch (e) { datadogRum.addError(e); diff --git a/packages/common/src/allo/backends/test-utils.ts b/packages/common/src/allo/backends/test-utils.ts new file mode 100644 index 0000000000..efe914e4fc --- /dev/null +++ b/packages/common/src/allo/backends/test-utils.ts @@ -0,0 +1,42 @@ +import { vi } from "vitest"; +import { AlloV1 } from "./allo-v1"; +import { zeroAddress, Hex } from "viem"; +import { createMockTransactionSender } from "../transaction-sender"; +import { success } from "../common"; +import { Allo } from "../allo"; +import { AlloV2 } from "./allo-v2"; + +const ipfsUploader = vi.fn().mockResolvedValue(success("ipfsHash")); +const waitUntilIndexerSynced = vi.fn().mockResolvedValue(success(null)); +const projectRegistryAddress = zeroAddress; +const chainId = 1; + +const transactionSender = createMockTransactionSender(); +export const zeroTxHash = ("0x" + "0".repeat(64)) as Hex; + +export const alloV1: Allo = new AlloV1({ + chainId, + projectRegistryAddress, + ipfsUploader, + transactionSender, + waitUntilIndexerSynced, +}); + +export const alloV2: Allo = new AlloV2({ + chainId, + projectRegistryAddress, // todo: not used + ipfsUploader, + transactionSender, + waitUntilIndexerSynced, +}); + +export const getAllo = (version: string): Allo => { + switch (version) { + case "allo-v1": + return alloV1; + case "allo-v2": + return alloV2; + default: + throw new Error(`Unknown Allo version: ${version}`); + } +}; diff --git a/packages/data-layer/src/data-layer.test.ts b/packages/data-layer/src/data-layer.test.ts index b047470f2b..12cf894930 100644 --- a/packages/data-layer/src/data-layer.test.ts +++ b/packages/data-layer/src/data-layer.test.ts @@ -30,6 +30,12 @@ const mockProjects: v2Project[] = [ projectNumber: null, registryAddress: "0x4aacca72145e1df2aec137e1f3c5e3d75db8b5f3", tags: ["allo-v2"], + roles: [ + { + address: "0x8a79249b63395c25bd121ba6ff280198c399d4fb", + role: "OWNER", + }, + ], }, ]; diff --git a/packages/data-layer/src/data.types.ts b/packages/data-layer/src/data.types.ts index d1e7d17660..85ff788b9c 100644 --- a/packages/data-layer/src/data.types.ts +++ b/packages/data-layer/src/data.types.ts @@ -41,6 +41,11 @@ export type ProjectMetadata = { createdAt?: number; }; +export type AddressAndRole = { + address: string; + role: string; +}; + /** * The project type for v1 * @@ -157,6 +162,7 @@ export type v2Project = { * The block the project was updated at */ updatedAtBlock: number; + roles: AddressAndRole[]; }; export type ProjectEvents = { diff --git a/packages/data-layer/src/queries.ts b/packages/data-layer/src/queries.ts index 95644f5dee..9b7216842a 100644 --- a/packages/data-layer/src/queries.ts +++ b/packages/data-layer/src/queries.ts @@ -26,6 +26,10 @@ export const getProjectById = gql` projectNumber registryAddress tags + roles { + address + role + } } } `;