From 7a24bdc1e875143b65234251fe7b66147b7deb8f Mon Sep 17 00:00:00 2001
From: Moe Shehab <52987806+mhmdksh@users.noreply.github.com>
Date: Thu, 19 Dec 2024 20:40:46 +0400
Subject: [PATCH 01/20] Update README.md
Deploying build
From 97fecc4945af57253dc21426d815b9f2de508f2b Mon Sep 17 00:00:00 2001
From: Kilter
Date: Thu, 19 Dec 2024 16:43:39 -0500
Subject: [PATCH 02/20] feat: recurring donation setup on creation
---
src/apollo/types/types.ts | 7 +
.../views/create/AddressInterface.tsx | 115 ++++++++-----
.../create/AlloProtocol/AlloProtocolModal.tsx | 151 +++++++++---------
src/components/views/create/CreateProject.tsx | 24 +--
src/components/views/create/types.tsx | 10 +-
5 files changed, 177 insertions(+), 130 deletions(-)
diff --git a/src/apollo/types/types.ts b/src/apollo/types/types.ts
index 582960c8e9..3524bbfbd7 100644
--- a/src/apollo/types/types.ts
+++ b/src/apollo/types/types.ts
@@ -35,6 +35,13 @@ export interface IAnchorContractData {
networkId: number;
}
+export interface IAnchorContractBasicData {
+ contractAddress?: Address;
+ recipientAddress: Address;
+ hash?: string;
+ enabled?: boolean;
+}
+
export interface IProject {
id: string;
title?: string;
diff --git a/src/components/views/create/AddressInterface.tsx b/src/components/views/create/AddressInterface.tsx
index 2e6da5a77e..65571d33aa 100644
--- a/src/components/views/create/AddressInterface.tsx
+++ b/src/components/views/create/AddressInterface.tsx
@@ -25,11 +25,14 @@ import { getChainName } from '@/lib/network';
import { IChainType } from '@/types/config';
import { findAddressByChain } from '@/lib/helpers';
import { useGeneralWallet } from '@/providers/generalWalletProvider';
-import { IAnchorContractData, IProject } from '@/apollo/types/types';
+import {
+ IAnchorContractBasicData,
+ IAnchorContractData,
+ IProject,
+} from '@/apollo/types/types';
import { IconWithTooltip } from '@/components/IconWithToolTip';
import { EInputs } from './types';
import links from '@/lib/constants/links';
-import { STOP_RECURRING_SETUP_ON_CREATION } from './CreateProject';
import { saveAnchorContract } from './AlloProtocol/AlloProtocolModal';
interface IAddressInterfaceProps extends IChainType {
@@ -58,6 +61,8 @@ const AddressInterface = ({
const { formatMessage } = useIntl();
const { isOnEVM } = useGeneralWallet();
+ const DO_RECURRING_SETUP_ON_ENABLE = isEditMode;
+
const [hasAnchorContract, setHasAnchorContract] = useState(
anchorContractData?.isActive || false,
);
@@ -68,13 +73,18 @@ const AddressInterface = ({
const isOnBase = chain ? chain.id === config.BASE_NETWORK_NUMBER : false;
const inputName = EInputs.addresses;
- const alloProtocolRegistry = watch(EInputs.alloProtocolRegistry) as boolean;
-
const value = watch(inputName);
const isOptimism = networkId === config.OPTIMISM_NETWORK_NUMBER;
const isBase = networkId === config.BASE_NETWORK_NUMBER;
+ const alloContract = isBase
+ ? EInputs.baseAnchorContract
+ : EInputs.opAnchorContract;
+ const alloProtocolRegistry = watch(
+ alloContract,
+ ) as IAnchorContractBasicData;
+
const addressObj = findAddressByChain(value, networkId, chainType);
const walletAddress = addressObj?.address;
@@ -168,12 +178,7 @@ const AddressInterface = ({
1,
);
setValue(inputName, _addresses);
- if (isOptimism) {
- setValue(
- EInputs.alloProtocolRegistry,
- false,
- );
- }
+ setValue(alloContract, false);
}}
>
@@ -219,7 +224,7 @@ const AddressInterface = ({
- ) : STOP_RECURRING_SETUP_ON_CREATION ? (
+ ) : DO_RECURRING_SETUP_ON_ENABLE ? (
) : (
{
if (!isRecurringDonationsReady) return;
- setValue(
- EInputs.alloProtocolRegistry,
- !alloProtocolRegistry,
- );
+ setValue(alloContract, {
+ recipientAddress:
+ walletAddress || value,
+ enabled:
+ !alloProtocolRegistry?.enabled,
+ });
}}
label=''
disabled={!isRecurringDonationsReady}
diff --git a/src/components/views/create/AlloProtocol/AlloProtocolModal.tsx b/src/components/views/create/AlloProtocol/AlloProtocolModal.tsx
index 532c2e14c7..6b34c34d3f 100644
--- a/src/components/views/create/AlloProtocol/AlloProtocolModal.tsx
+++ b/src/components/views/create/AlloProtocol/AlloProtocolModal.tsx
@@ -6,7 +6,7 @@ import {
P,
brandColors,
} from '@giveth/ui-design-system';
-import { useAccount, useSwitchChain } from 'wagmi';
+import { useSwitchChain } from 'wagmi';
import { useIntl } from 'react-intl';
import { useRouter } from 'next/router';
import { writeContract, waitForTransactionReceipt } from '@wagmi/core';
@@ -15,10 +15,13 @@ import { IModal } from '@/types/common';
import { Modal } from '@/components/modals/Modal';
import { useModalAnimation } from '@/hooks/useModalAnimation';
import config from '@/configuration';
-import { IProject, IProjectEdition } from '@/apollo/types/types';
+import {
+ IAnchorContractBasicData,
+ IProject,
+ IProjectEdition,
+} from '@/apollo/types/types';
import StorageLabel from '@/lib/localStorage';
import { slugToSuccessView, slugToProjectView } from '@/lib/routeCreators';
-import { EProjectStatus } from '@/apollo/types/gqlEnums';
import { CREATE_ANCHOR_CONTRACT_ADDRESS_QUERY } from '@/apollo/gql/gqlSuperfluid';
import { client } from '@/apollo/apolloClient';
import { extractContractAddressFromString } from '../../donate/Recurring/AlloProtocolFirstDonationModal';
@@ -29,18 +32,36 @@ import { generateRandomNonce } from '@/lib/helpers';
interface IAlloProtocolModal extends IModal {
project?: IProjectEdition; //If undefined, it means we are in create mode
addedProjectState: IProject;
+ baseAnchorContract?: IAnchorContractBasicData;
+ opAnchorContract?: IAnchorContractBasicData;
}
export const saveAnchorContract = async ({
addedProjectState,
chainId,
recipientAddress,
+ isDraft,
+ anchorContract,
}: {
addedProjectState: IProject;
chainId: number;
recipientAddress?: string;
+ isDraft?: boolean;
+ anchorContract?: IAnchorContractBasicData;
}) => {
try {
+ if (anchorContract) {
+ return await client.mutate({
+ mutation: CREATE_ANCHOR_CONTRACT_ADDRESS_QUERY,
+ variables: {
+ projectId: Number(addedProjectState.id),
+ networkId: chainId,
+ address: anchorContract.contractAddress,
+ recipientAddress,
+ txHash: anchorContract.hash,
+ },
+ });
+ }
const isOptimism = chainId === config.OPTIMISM_NETWORK_NUMBER;
const hash = await writeContract(wagmiConfig, {
address: isOptimism
@@ -70,17 +91,21 @@ export const saveAnchorContract = async ({
data.logs[0].data,
);
- //Call backend to update project
- await client.mutate({
- mutation: CREATE_ANCHOR_CONTRACT_ADDRESS_QUERY,
- variables: {
- projectId: Number(addedProjectState.id),
- networkId: chainId,
- address: contractAddress,
- recipientAddress,
- txHash: hash,
- },
- });
+ if (isDraft) {
+ return { contractAddress, hash };
+ } else {
+ //Call backend to update project
+ await client.mutate({
+ mutation: CREATE_ANCHOR_CONTRACT_ADDRESS_QUERY,
+ variables: {
+ projectId: Number(addedProjectState.id),
+ networkId: chainId,
+ address: contractAddress,
+ recipientAddress,
+ txHash: hash,
+ },
+ });
+ }
}
} catch (error) {
console.error('Error Contract', error);
@@ -91,17 +116,15 @@ const AlloProtocolModal: FC = ({
setShowModal,
addedProjectState,
project,
+ baseAnchorContract,
+ opAnchorContract,
}) => {
+ const { switchChain } = useSwitchChain();
const { isAnimating, closeModal } = useModalAnimation(setShowModal);
- const { chain } = useAccount();
const [isLoading, setIsLoading] = useState(false);
const [txResult, setTxResult] = useState();
const router = useRouter();
- const { switchChain } = useSwitchChain();
const { formatMessage } = useIntl();
- const isDraft =
- project?.status.name === EProjectStatus.DRAFT ||
- addedProjectState.status?.name === EProjectStatus.DRAFT;
const isEditMode = !!project;
@@ -118,70 +141,37 @@ const AlloProtocolModal: FC = ({
closeModal();
};
- const isOnOptimism = chain
- ? chain.id === config.OPTIMISM_NETWORK_NUMBER
- : false;
-
- const isOnBase = chain ? chain.id === config.BASE_NETWORK_NUMBER : false;
-
const handleButtonClick = async () => {
try {
+ if (!addedProjectState) return;
setIsLoading(true);
- const hash = await writeContract(wagmiConfig, {
- address: isOnOptimism
- ? config.OPTIMISM_CONFIG.anchorRegistryAddress
- : config.BASE_CONFIG.anchorRegistryAddress,
- functionName: 'createProfile',
- abi: createProfileABI.abi,
- chainId: isOnOptimism
- ? config.OPTIMISM_NETWORK_NUMBER
- : config.BASE_NETWORK_NUMBER,
- args: [
- generateRandomNonce(), //nonce
- addedProjectState?.id!,
- {
- protocol: 1,
- pointer: '',
- },
- addedProjectState?.adminUser?.walletAddress, //admin user wallet address
- [],
- ],
- });
- setTxResult(hash);
- if (hash) {
- const data = await waitForTransactionReceipt(wagmiConfig, {
- hash: hash,
- chainId: isOnOptimism
- ? config.OPTIMISM_NETWORK_NUMBER
- : config.BASE_NETWORK_NUMBER,
+
+ // Handle Base anchor contract
+
+ if (baseAnchorContract?.recipientAddress) {
+ switchChain?.({
+ chainId: config.BASE_NETWORK_NUMBER,
+ });
+ await saveAnchorContract({
+ addedProjectState,
+ chainId: config.BASE_NETWORK_NUMBER,
+ recipientAddress: baseAnchorContract.recipientAddress,
});
+ }
- const contractAddress = extractContractAddressFromString(
- data.logs[0].data,
- );
- //Call backend to update project
- await client.mutate({
- mutation: CREATE_ANCHOR_CONTRACT_ADDRESS_QUERY,
- variables: {
- projectId: Number(addedProjectState.id),
- networkId: isOnOptimism
- ? config.OPTIMISM_NETWORK_NUMBER
- : config.BASE_NETWORK_NUMBER,
- address: contractAddress,
- txHash: hash,
- },
+ // Handle Optimism anchor contract
+ if (opAnchorContract?.recipientAddress) {
+ switchChain?.({
+ chainId: config.OPTIMISM_NETWORK_NUMBER,
+ });
+ await saveAnchorContract({
+ addedProjectState,
+ chainId: config.OPTIMISM_NETWORK_NUMBER,
+ recipientAddress: opAnchorContract.recipientAddress,
});
- if (!isEditMode || (isEditMode && isDraft)) {
- await router.push(
- slugToSuccessView(addedProjectState.slug),
- );
- } else {
- await router.push(
- slugToProjectView(addedProjectState.slug),
- );
- }
}
setShowModal(false); // Close the modal
+ await router.push(slugToProjectView(addedProjectState.slug));
} catch (error) {
console.error('Error Contract', error);
} finally {
@@ -193,6 +183,9 @@ const AlloProtocolModal: FC = ({
localStorage.removeItem(StorageLabel.CREATE_PROJECT_FORM);
}, []);
+ const opAnchorReady = opAnchorContract?.recipientAddress;
+ const baseAnchorReady = baseAnchorContract?.recipientAddress;
+
return (
= ({
id: 'label.recurring_donation_setup_2',
})}
- Optimism
+ {opAnchorReady && baseAnchorReady
+ ? 'Base & Optimsim'
+ : opAnchorReady
+ ? 'Optimism'
+ : baseAnchorReady && 'Base'}
.
= ({ project }) => {
const [activeProjectSection, setActiveProjectSection] =
useState(ECreateProjectSections.default);
const [showLowScoreModal, setShowLowScoreModal] = useState(false);
-
const { formatMessage } = useIntl();
const [addProjectMutation] = useMutation(CREATE_PROJECT);
const [editProjectMutation] = useMutation(UPDATE_PROJECT);
@@ -96,6 +94,7 @@ const CreateProject: FC = ({ project }) => {
}, [dispatch]);
const isEditMode = !!project;
+ const DO_RECURRING_SETUP_ON_CREATION = !isEditMode;
let storageProjectData: TInputs | undefined;
@@ -248,6 +247,8 @@ const CreateProject: FC = ({ project }) => {
draft: watchDraft,
telegram: watchTelegram,
github: watchGithub,
+ baseAnchorContract,
+ opAnchorContract,
} = data;
useEffect(() => {
@@ -277,16 +278,13 @@ const CreateProject: FC = ({ project }) => {
watchTelegram,
watchGithub,
]);
- const hasOptimismAddress = watchAddresses.some(
- address => config.OPTIMISM_NETWORK_NUMBER === address.networkId,
- );
+
const onError = (errors: FieldErrors) => {
if (errors[EInputs.description]) {
document?.getElementById('project_description')?.scrollIntoView();
}
setIsLoading(false);
};
-
const onSubmit = async (formData: TInputs) => {
if (
!watchDraft &&
@@ -319,6 +317,8 @@ const CreateProject: FC = ({ project }) => {
website,
telegram,
github,
+ baseAnchorContract,
+ opAnchorContract,
} = formData;
//Only set loading to true if it is not a draft
setIsLoading(!draft);
@@ -387,7 +387,9 @@ const CreateProject: FC = ({ project }) => {
},
});
- if (watchAlloProtocolRegistry && hasOptimismAddress) {
+ const doAlloProtocolRegistry =
+ baseAnchorContract || opAnchorContract;
+ if (doAlloProtocolRegistry) {
!isEditMode
? setAddedProjectState(addedProject.data?.createProject)
: setAddedProjectState(addedProject.data?.updateProject);
@@ -406,11 +408,9 @@ const CreateProject: FC = ({ project }) => {
if (addedProject) {
// Success
-
if (
- !STOP_RECURRING_SETUP_ON_CREATION &&
- watchAlloProtocolRegistry &&
- hasOptimismAddress &&
+ DO_RECURRING_SETUP_ON_CREATION &&
+ doAlloProtocolRegistry &&
!draft
) {
setShowAlloProtocolModal(true);
@@ -691,6 +691,8 @@ const CreateProject: FC = ({ project }) => {
setShowModal={setShowAlloProtocolModal}
addedProjectState={addedProjectState}
project={project}
+ baseAnchorContract={baseAnchorContract}
+ opAnchorContract={opAnchorContract}
/>
)}
{showLowScoreModal && (
diff --git a/src/components/views/create/types.tsx b/src/components/views/create/types.tsx
index 3d5cd6673a..0f9cf28b19 100644
--- a/src/components/views/create/types.tsx
+++ b/src/components/views/create/types.tsx
@@ -1,4 +1,8 @@
-import { ICategory, IWalletAddress } from '@/apollo/types/types';
+import {
+ IAnchorContractBasicData,
+ ICategory,
+ IWalletAddress,
+} from '@/apollo/types/types';
export enum EInputs {
name = 'name',
@@ -21,6 +25,8 @@ export enum EInputs {
website = 'website',
telegram = 'telegram',
github = 'github',
+ baseAnchorContract = 'baseAnchorContract',
+ opAnchorContract = 'opAnchorContract',
}
export enum ECreateProjectSections {
@@ -55,4 +61,6 @@ export type TInputs = {
[EInputs.website]?: string;
[EInputs.telegram]?: string;
[EInputs.github]?: string;
+ [EInputs.baseAnchorContract]?: IAnchorContractBasicData;
+ [EInputs.opAnchorContract]?: IAnchorContractBasicData;
};
From ae732a822152be1735dfe5d29fc160cbd243f737 Mon Sep 17 00:00:00 2001
From: mhmdksh
Date: Fri, 20 Dec 2024 10:47:16 +0400
Subject: [PATCH 03/20] adding a test base route
---
src/config/development.tsx | 2 +-
src/config/production.tsx | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/config/development.tsx b/src/config/development.tsx
index f51bbbf90e..05f8147752 100644
--- a/src/config/development.tsx
+++ b/src/config/development.tsx
@@ -33,7 +33,7 @@ import IconStellar from '@/components/Icons/Stellar';
import { IconClassic } from '@/components/Icons/Classic';
const BASE_ROUTE =
- process.env.NEXT_PUBLIC_BASE_ROUTE ||
+ process.env.NEXT_PUBLIC_BASE_ROUTE_test ||
'https://impact-graph.serve.giveth.io';
const BACKEND_LINK =
process.env.NEXT_PUBLIC_BACKEND_LINK || `${BASE_ROUTE}/graphql`;
diff --git a/src/config/production.tsx b/src/config/production.tsx
index 4e940d3aca..efc24bf064 100644
--- a/src/config/production.tsx
+++ b/src/config/production.tsx
@@ -97,7 +97,7 @@ const EVM_CHAINS = [
const NON_EVM_CHAINS: NonEVMChain[] = [STELLAR_NETWORK, SOLANA_NETWORK];
const BASE_ROUTE =
- process.env.NEXT_PUBLIC_BASE_ROUTE || 'https://mainnet.serve.giveth.io';
+ process.env.NEXT_PUBLIC_BASE_ROUTE_test || 'https://mainnet.serve.giveth.io';
const BACKEND_LINK =
process.env.NEXT_PUBLIC_BACKEND_LINK || `${BASE_ROUTE}/graphql`;
const FRONTEND_LINK =
From 042afd530bcc0c61d24fbf3f94d98cea62806425 Mon Sep 17 00:00:00 2001
From: mhmdksh
Date: Fri, 20 Dec 2024 10:57:34 +0400
Subject: [PATCH 04/20] fixing test base route
---
.../OneTime/SelectTokenModal/QRCodeDonation/QRDonationCard.tsx | 2 +-
src/components/views/transaction/Transaction.view.tsx | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/components/views/donate/OneTime/SelectTokenModal/QRCodeDonation/QRDonationCard.tsx b/src/components/views/donate/OneTime/SelectTokenModal/QRCodeDonation/QRDonationCard.tsx
index 2097c19547..9423d8589e 100644
--- a/src/components/views/donate/OneTime/SelectTokenModal/QRCodeDonation/QRDonationCard.tsx
+++ b/src/components/views/donate/OneTime/SelectTokenModal/QRCodeDonation/QRDonationCard.tsx
@@ -129,7 +129,7 @@ export const QRDonationCard: FC = ({
useEffect(() => {
const eventSource = new EventSource(
- `${process.env.NEXT_PUBLIC_BASE_ROUTE}/events`,
+ `${process.env.NEXT_PUBLIC_BASE_ROUTE_test}/events`,
);
const handleFetchDraftDonation = async (draftDonationId: number) => {
diff --git a/src/components/views/transaction/Transaction.view.tsx b/src/components/views/transaction/Transaction.view.tsx
index dede88389d..28fc26778d 100644
--- a/src/components/views/transaction/Transaction.view.tsx
+++ b/src/components/views/transaction/Transaction.view.tsx
@@ -111,7 +111,7 @@ const TransactionView = () => {
if (!id) return;
const eventSource = new EventSource(
- `${process.env.NEXT_PUBLIC_BASE_ROUTE}/events`,
+ `${process.env.NEXT_PUBLIC_BASE_ROUTE_test}/events`,
);
eventSource.onmessage = (event: MessageEvent) => {
From 63ad33b7c34fc4812e2b6a71a23730874452cdbf Mon Sep 17 00:00:00 2001
From: mhmdksh
Date: Fri, 20 Dec 2024 11:03:33 +0400
Subject: [PATCH 05/20] Reverting test base route changes
---
.../OneTime/SelectTokenModal/QRCodeDonation/QRDonationCard.tsx | 2 +-
src/components/views/transaction/Transaction.view.tsx | 2 +-
src/config/development.tsx | 2 +-
src/config/production.tsx | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/components/views/donate/OneTime/SelectTokenModal/QRCodeDonation/QRDonationCard.tsx b/src/components/views/donate/OneTime/SelectTokenModal/QRCodeDonation/QRDonationCard.tsx
index 9423d8589e..2097c19547 100644
--- a/src/components/views/donate/OneTime/SelectTokenModal/QRCodeDonation/QRDonationCard.tsx
+++ b/src/components/views/donate/OneTime/SelectTokenModal/QRCodeDonation/QRDonationCard.tsx
@@ -129,7 +129,7 @@ export const QRDonationCard: FC = ({
useEffect(() => {
const eventSource = new EventSource(
- `${process.env.NEXT_PUBLIC_BASE_ROUTE_test}/events`,
+ `${process.env.NEXT_PUBLIC_BASE_ROUTE}/events`,
);
const handleFetchDraftDonation = async (draftDonationId: number) => {
diff --git a/src/components/views/transaction/Transaction.view.tsx b/src/components/views/transaction/Transaction.view.tsx
index 28fc26778d..dede88389d 100644
--- a/src/components/views/transaction/Transaction.view.tsx
+++ b/src/components/views/transaction/Transaction.view.tsx
@@ -111,7 +111,7 @@ const TransactionView = () => {
if (!id) return;
const eventSource = new EventSource(
- `${process.env.NEXT_PUBLIC_BASE_ROUTE_test}/events`,
+ `${process.env.NEXT_PUBLIC_BASE_ROUTE}/events`,
);
eventSource.onmessage = (event: MessageEvent) => {
diff --git a/src/config/development.tsx b/src/config/development.tsx
index 05f8147752..f51bbbf90e 100644
--- a/src/config/development.tsx
+++ b/src/config/development.tsx
@@ -33,7 +33,7 @@ import IconStellar from '@/components/Icons/Stellar';
import { IconClassic } from '@/components/Icons/Classic';
const BASE_ROUTE =
- process.env.NEXT_PUBLIC_BASE_ROUTE_test ||
+ process.env.NEXT_PUBLIC_BASE_ROUTE ||
'https://impact-graph.serve.giveth.io';
const BACKEND_LINK =
process.env.NEXT_PUBLIC_BACKEND_LINK || `${BASE_ROUTE}/graphql`;
diff --git a/src/config/production.tsx b/src/config/production.tsx
index efc24bf064..4e940d3aca 100644
--- a/src/config/production.tsx
+++ b/src/config/production.tsx
@@ -97,7 +97,7 @@ const EVM_CHAINS = [
const NON_EVM_CHAINS: NonEVMChain[] = [STELLAR_NETWORK, SOLANA_NETWORK];
const BASE_ROUTE =
- process.env.NEXT_PUBLIC_BASE_ROUTE_test || 'https://mainnet.serve.giveth.io';
+ process.env.NEXT_PUBLIC_BASE_ROUTE || 'https://mainnet.serve.giveth.io';
const BACKEND_LINK =
process.env.NEXT_PUBLIC_BACKEND_LINK || `${BASE_ROUTE}/graphql`;
const FRONTEND_LINK =
From 602eb710784e842f4fd99c8db4cb9389ad94607a Mon Sep 17 00:00:00 2001
From: Kilter
Date: Fri, 20 Dec 2024 11:28:24 -0500
Subject: [PATCH 06/20] feat: updating enable button
---
.../views/create/AddressInterface.tsx | 88 ++++++++++---------
.../create/AlloProtocol/AlloProtocolModal.tsx | 25 ++++--
src/components/views/create/CreateProject.tsx | 48 ++++++++--
3 files changed, 107 insertions(+), 54 deletions(-)
diff --git a/src/components/views/create/AddressInterface.tsx b/src/components/views/create/AddressInterface.tsx
index 65571d33aa..3979a9e092 100644
--- a/src/components/views/create/AddressInterface.tsx
+++ b/src/components/views/create/AddressInterface.tsx
@@ -34,6 +34,7 @@ import { IconWithTooltip } from '@/components/IconWithToolTip';
import { EInputs } from './types';
import links from '@/lib/constants/links';
import { saveAnchorContract } from './AlloProtocol/AlloProtocolModal';
+import { useAppSelector } from '@/features/hooks';
interface IAddressInterfaceProps extends IChainType {
networkId: number;
@@ -56,12 +57,13 @@ const AddressInterface = ({
isEditMode,
}: IAddressInterfaceProps) => {
const { chain } = useAccount();
+ const { userData } = useAppSelector(state => state.user);
const { switchChain } = useSwitchChain();
const { setValue, watch } = useFormContext();
const { formatMessage } = useIntl();
const { isOnEVM } = useGeneralWallet();
- const DO_RECURRING_SETUP_ON_ENABLE = isEditMode;
+ const DO_RECURRING_SETUP_ON_ENABLE = true;
const [hasAnchorContract, setHasAnchorContract] = useState(
anchorContractData?.isActive || false,
@@ -238,25 +240,25 @@ const AddressInterface = ({
hasAnchorContract
}
onClick={async () => {
- if (project) {
- if (
- isRecurringOnOptimismReady &&
- !isOnOptimism
- ) {
- switchChain?.({
- chainId:
- config.OPTIMISM_NETWORK_NUMBER,
- });
- } else if (
- isRecurringOnBaseReady &&
- !isOnBase
- ) {
- switchChain?.({
- chainId:
- config.BASE_NETWORK_NUMBER,
- });
- }
+ if (
+ isRecurringOnOptimismReady &&
+ !isOnOptimism
+ ) {
+ switchChain?.({
+ chainId:
+ config.OPTIMISM_NETWORK_NUMBER,
+ });
+ } else if (
+ isRecurringOnBaseReady &&
+ !isOnBase
+ ) {
+ switchChain?.({
+ chainId:
+ config.BASE_NETWORK_NUMBER,
+ });
+ }
+ if (project) {
await saveAnchorContract({
addedProjectState: project,
chainId: networkId,
@@ -265,27 +267,33 @@ const AddressInterface = ({
});
setHasAnchorContract(true);
} else {
- if (isOptimism) {
- setValue(
- EInputs.opAnchorContract,
- {
- recipientAddress:
- walletAddress ||
- value,
- },
- );
- setHasAnchorContract(true);
- } else if (isBase) {
- setValue(
- EInputs.baseAnchorContract,
- {
- recipientAddress:
- walletAddress ||
- value,
- },
- );
- setHasAnchorContract(true);
- }
+ const alloContract =
+ (await saveAnchorContract({
+ chainId: networkId,
+ recipientAddress:
+ walletAddress ||
+ value,
+ isDraft: true,
+ userId: userData?.id,
+ ownerAddres:
+ userData?.walletAddress,
+ })) as IAnchorContractBasicData;
+
+ setValue(
+ isOptimism
+ ? EInputs.opAnchorContract
+ : EInputs.baseAnchorContract,
+ {
+ recipientAddress:
+ walletAddress ||
+ value,
+ enabled: true,
+ contractAddress:
+ alloContract.contractAddress,
+ hash: alloContract.hash,
+ },
+ );
+ setHasAnchorContract(true);
}
}}
/>
diff --git a/src/components/views/create/AlloProtocol/AlloProtocolModal.tsx b/src/components/views/create/AlloProtocol/AlloProtocolModal.tsx
index 6b34c34d3f..e898fc3a42 100644
--- a/src/components/views/create/AlloProtocol/AlloProtocolModal.tsx
+++ b/src/components/views/create/AlloProtocol/AlloProtocolModal.tsx
@@ -40,17 +40,22 @@ export const saveAnchorContract = async ({
addedProjectState,
chainId,
recipientAddress,
+ ownerAddres,
isDraft,
anchorContract,
+ userId,
}: {
- addedProjectState: IProject;
+ addedProjectState?: IProject;
chainId: number;
recipientAddress?: string;
+ ownerAddres?: string;
isDraft?: boolean;
anchorContract?: IAnchorContractBasicData;
+ userId?: string;
}) => {
try {
- if (anchorContract) {
+ if (anchorContract && addedProjectState) {
+ // Used on creation when there's already an anchor contract saved
return await client.mutate({
mutation: CREATE_ANCHOR_CONTRACT_ADDRESS_QUERY,
variables: {
@@ -72,12 +77,16 @@ export const saveAnchorContract = async ({
chainId,
args: [
generateRandomNonce(), //nonce
- addedProjectState?.id!,
+ addedProjectState
+ ? `giveth_project:${addedProjectState?.id!}`
+ : `giveth_user:${userId || 'unknown'}`,
{
protocol: 1,
pointer: '',
},
- addedProjectState?.adminUser?.walletAddress, //admin user wallet address
+ addedProjectState
+ ? addedProjectState?.adminUser?.walletAddress
+ : ownerAddres, //admin user wallet address
[],
],
});
@@ -91,9 +100,9 @@ export const saveAnchorContract = async ({
data.logs[0].data,
);
- if (isDraft) {
+ if (isDraft || !addedProjectState) {
return { contractAddress, hash };
- } else {
+ } else if (addedProjectState) {
//Call backend to update project
await client.mutate({
mutation: CREATE_ANCHOR_CONTRACT_ADDRESS_QUERY,
@@ -145,9 +154,7 @@ const AlloProtocolModal: FC = ({
try {
if (!addedProjectState) return;
setIsLoading(true);
-
// Handle Base anchor contract
-
if (baseAnchorContract?.recipientAddress) {
switchChain?.({
chainId: config.BASE_NETWORK_NUMBER,
@@ -156,6 +163,7 @@ const AlloProtocolModal: FC = ({
addedProjectState,
chainId: config.BASE_NETWORK_NUMBER,
recipientAddress: baseAnchorContract.recipientAddress,
+ anchorContract: baseAnchorContract,
});
}
@@ -168,6 +176,7 @@ const AlloProtocolModal: FC = ({
addedProjectState,
chainId: config.OPTIMISM_NETWORK_NUMBER,
recipientAddress: opAnchorContract.recipientAddress,
+ anchorContract: opAnchorContract,
});
}
setShowModal(false); // Close the modal
diff --git a/src/components/views/create/CreateProject.tsx b/src/components/views/create/CreateProject.tsx
index 09aaad9739..47137ad959 100644
--- a/src/components/views/create/CreateProject.tsx
+++ b/src/components/views/create/CreateProject.tsx
@@ -1,5 +1,6 @@
import React, { FC, useEffect, useRef, useState } from 'react';
import { useIntl } from 'react-intl';
+import { useSwitchChain } from 'wagmi';
import {
brandColors,
Button,
@@ -50,7 +51,9 @@ import CreateProjectAddAddressModal from './CreateProjectAddAddressModal';
import AddressInterface from './AddressInterface';
import { ChainType, NonEVMChain } from '@/types/config';
import StorageLabel from '@/lib/localStorage';
-import AlloProtocolModal from './AlloProtocol/AlloProtocolModal';
+import AlloProtocolModal, {
+ saveAnchorContract,
+} from './AlloProtocol/AlloProtocolModal';
import { ECreateProjectSections, TInputs, EInputs } from './types';
import { ProGuide } from './proGuide/ProGuide';
import { EQualityState } from './proGuide/score/scoreHelpers';
@@ -66,6 +69,7 @@ interface ICreateProjectProps {
}
const CreateProject: FC = ({ project }) => {
+ const { switchChain } = useSwitchChain();
const [quality, setQuality] = useState(EQualityState.LOW);
const [isLoading, setIsLoading] = useState(false);
const [isLoadingPreview, setIsLoadingPreview] = useState(false);
@@ -389,10 +393,12 @@ const CreateProject: FC = ({ project }) => {
const doAlloProtocolRegistry =
baseAnchorContract || opAnchorContract;
+ let _addedProject;
if (doAlloProtocolRegistry) {
- !isEditMode
- ? setAddedProjectState(addedProject.data?.createProject)
- : setAddedProjectState(addedProject.data?.updateProject);
+ _addedProject = !isEditMode
+ ? addedProject.data?.createProject
+ : addedProject.data?.updateProject;
+ setAddedProjectState(_addedProject);
setIsLoading(false);
setIsLoadingPreview(false);
}
@@ -405,7 +411,6 @@ const CreateProject: FC = ({ project }) => {
}
//handle Anchor contract modal here.
-
if (addedProject) {
// Success
if (
@@ -413,8 +418,39 @@ const CreateProject: FC = ({ project }) => {
doAlloProtocolRegistry &&
!draft
) {
- setShowAlloProtocolModal(true);
+ if (!_addedProject) return;
+ console.log('processing anchor contracts', {
+ baseAnchorContract,
+ opAnchorContract,
+ });
+ setIsLoading(true);
+ // Handle Base anchor contract
+ if (baseAnchorContract?.recipientAddress) {
+ switchChain?.({
+ chainId: config.BASE_NETWORK_NUMBER,
+ });
+ await saveAnchorContract({
+ addedProjectState: _addedProject,
+ chainId: config.BASE_NETWORK_NUMBER,
+ recipientAddress:
+ baseAnchorContract.recipientAddress,
+ anchorContract: baseAnchorContract,
+ });
+ }
+ // Handle Optimism anchor contract
+ if (opAnchorContract?.recipientAddress) {
+ switchChain?.({
+ chainId: config.OPTIMISM_NETWORK_NUMBER,
+ });
+ await saveAnchorContract({
+ addedProjectState: _addedProject,
+ chainId: config.OPTIMISM_NETWORK_NUMBER,
+ recipientAddress: opAnchorContract.recipientAddress,
+ anchorContract: opAnchorContract,
+ });
+ }
localStorage.removeItem(StorageLabel.CREATE_PROJECT_FORM);
+ await router.push(slugToProjectView(_addedProject.slug));
} else {
setIsLoading(false);
if (!isEditMode) {
From 359d2485f18c1ee6ee20571d023154d72c240aa8 Mon Sep 17 00:00:00 2001
From: Kilter
Date: Fri, 20 Dec 2024 11:40:44 -0500
Subject: [PATCH 07/20] Update AlloProtocolModal.tsx
---
src/components/views/create/AlloProtocol/AlloProtocolModal.tsx | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/components/views/create/AlloProtocol/AlloProtocolModal.tsx b/src/components/views/create/AlloProtocol/AlloProtocolModal.tsx
index e898fc3a42..d310175428 100644
--- a/src/components/views/create/AlloProtocol/AlloProtocolModal.tsx
+++ b/src/components/views/create/AlloProtocol/AlloProtocolModal.tsx
@@ -118,6 +118,7 @@ export const saveAnchorContract = async ({
}
} catch (error) {
console.error('Error Contract', error);
+ throw error;
}
};
From 737d36c15a954935ea8e4ccebc09b2f4122b27ef Mon Sep 17 00:00:00 2001
From: kkatusic
Date: Thu, 26 Dec 2024 15:01:14 +0100
Subject: [PATCH 08/20] Trigger rebuild
From 1ada0b3f1edb4a8b566dfeb6d22669974fe0563f Mon Sep 17 00:00:00 2001
From: kkatusic
Date: Thu, 26 Dec 2024 17:45:22 +0100
Subject: [PATCH 09/20] added console.logs for testing purpose
---
src/services/donation.ts | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/src/services/donation.ts b/src/services/donation.ts
index 412d572e58..5aeea831e2 100644
--- a/src/services/donation.ts
+++ b/src/services/donation.ts
@@ -112,6 +112,7 @@ const createDonation = async (props: IOnTxHash) => {
};
export const fetchUserStreams = async (address: Address) => {
+ console.log(config.BASE_CONFIG.superFluidSubgraph);
const { data: baseData } = await gqlRequest(
config.BASE_CONFIG.superFluidSubgraph,
undefined,
@@ -130,6 +131,9 @@ export const fetchUserStreams = async (address: Address) => {
baseTokenStreams[stream.token.id].push(stream);
});
+ console.log('baseTokenStreams', baseTokenStreams);
+
+ console.log(config.OPTIMISM_CONFIG.superFluidSubgraph);
const { data: optimismData } = await gqlRequest(
config.OPTIMISM_CONFIG.superFluidSubgraph,
undefined,
@@ -138,6 +142,8 @@ export const fetchUserStreams = async (address: Address) => {
);
const optimismStreams: ISuperfluidStream[] = optimismData?.streams;
+ console.log('optimismStreams', optimismStreams);
+
// Categorize streams by token for Optimism config
const optimismTokenStreams: ITokenStreams = {};
optimismStreams.forEach(stream => {
@@ -173,6 +179,8 @@ export const fetchUserStreams = async (address: Address) => {
return acc;
}, {} as ITokenStreams);
+ console.log('sortedTokenStreams', sortedTokenStreams);
+
return sortedTokenStreams;
};
From e0c7da08c632ceb48122c5fb97f68e98a187dda7 Mon Sep 17 00:00:00 2001
From: kkatusic
Date: Thu, 26 Dec 2024 18:00:54 +0100
Subject: [PATCH 10/20] added right env variable
---
src/config/production.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/config/production.tsx b/src/config/production.tsx
index 02cf7470fe..9cae082500 100644
--- a/src/config/production.tsx
+++ b/src/config/production.tsx
@@ -605,7 +605,7 @@ const config: EnvConfig = {
GIVETH_ANCHOR_CONTRACT_ADDRESS:
'0x5430757bc19c87ec562e4660e56af6cac324b50a',
superFluidSubgraph:
- process.env.NEXT_PUBLIC_SUBGRAPH_SUPER_FLUID ||
+ process.env.NEXT_PUBLIC_SUBGRAPH_BASE_SUPER_FLUID ||
'https://subgraph-endpoints.superfluid.dev/base-mainnet/protocol-v1',
SUPER_FLUID_TOKENS: [
{
From 9d33c7fd3bc3e8fb55152c92f1d8d9ebb1f00b7a Mon Sep 17 00:00:00 2001
From: kkatusic
Date: Thu, 26 Dec 2024 18:30:40 +0100
Subject: [PATCH 11/20] remove console logs adding new ones
---
.../userProfile/donationsTab/recurringTab/StreamRow.tsx | 4 ++++
src/services/donation.ts | 8 --------
2 files changed, 4 insertions(+), 8 deletions(-)
diff --git a/src/components/views/userProfile/donationsTab/recurringTab/StreamRow.tsx b/src/components/views/userProfile/donationsTab/recurringTab/StreamRow.tsx
index c931aeb179..b8f0bf5e57 100644
--- a/src/components/views/userProfile/donationsTab/recurringTab/StreamRow.tsx
+++ b/src/components/views/userProfile/donationsTab/recurringTab/StreamRow.tsx
@@ -73,6 +73,10 @@ export const StreamRow: FC = ({ tokenStream }) => {
: 0n;
const activeStreamCount = countActiveStreams(tokenStream);
+ console.log('token', token);
+ console.log('token', token?.underlyingToken);
+ console.log('balance', balance?.value);
+
return (
diff --git a/src/services/donation.ts b/src/services/donation.ts
index 5aeea831e2..412d572e58 100644
--- a/src/services/donation.ts
+++ b/src/services/donation.ts
@@ -112,7 +112,6 @@ const createDonation = async (props: IOnTxHash) => {
};
export const fetchUserStreams = async (address: Address) => {
- console.log(config.BASE_CONFIG.superFluidSubgraph);
const { data: baseData } = await gqlRequest(
config.BASE_CONFIG.superFluidSubgraph,
undefined,
@@ -131,9 +130,6 @@ export const fetchUserStreams = async (address: Address) => {
baseTokenStreams[stream.token.id].push(stream);
});
- console.log('baseTokenStreams', baseTokenStreams);
-
- console.log(config.OPTIMISM_CONFIG.superFluidSubgraph);
const { data: optimismData } = await gqlRequest(
config.OPTIMISM_CONFIG.superFluidSubgraph,
undefined,
@@ -142,8 +138,6 @@ export const fetchUserStreams = async (address: Address) => {
);
const optimismStreams: ISuperfluidStream[] = optimismData?.streams;
- console.log('optimismStreams', optimismStreams);
-
// Categorize streams by token for Optimism config
const optimismTokenStreams: ITokenStreams = {};
optimismStreams.forEach(stream => {
@@ -179,8 +173,6 @@ export const fetchUserStreams = async (address: Address) => {
return acc;
}, {} as ITokenStreams);
- console.log('sortedTokenStreams', sortedTokenStreams);
-
return sortedTokenStreams;
};
From 8e79c4b8e4a9e75bc22d10f512472d18bdd01954 Mon Sep 17 00:00:00 2001
From: kkatusic
Date: Thu, 26 Dec 2024 18:37:05 +0100
Subject: [PATCH 12/20] update stremarow
---
.../views/userProfile/donationsTab/recurringTab/StreamRow.tsx | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/components/views/userProfile/donationsTab/recurringTab/StreamRow.tsx b/src/components/views/userProfile/donationsTab/recurringTab/StreamRow.tsx
index b8f0bf5e57..96a8002dc6 100644
--- a/src/components/views/userProfile/donationsTab/recurringTab/StreamRow.tsx
+++ b/src/components/views/userProfile/donationsTab/recurringTab/StreamRow.tsx
@@ -97,6 +97,7 @@ export const StreamRow: FC = ({ tokenStream }) => {
)}
{underlyingSymbol}
+ {token?.symbol}
monthly
From 002a39c9e45fbe0b6e39e218450544ef5485fa84 Mon Sep 17 00:00:00 2001
From: kkatusic
Date: Thu, 26 Dec 2024 18:45:52 +0100
Subject: [PATCH 13/20] remove console logs
---
.../userProfile/donationsTab/recurringTab/StreamRow.tsx | 5 -----
1 file changed, 5 deletions(-)
diff --git a/src/components/views/userProfile/donationsTab/recurringTab/StreamRow.tsx b/src/components/views/userProfile/donationsTab/recurringTab/StreamRow.tsx
index 96a8002dc6..c931aeb179 100644
--- a/src/components/views/userProfile/donationsTab/recurringTab/StreamRow.tsx
+++ b/src/components/views/userProfile/donationsTab/recurringTab/StreamRow.tsx
@@ -73,10 +73,6 @@ export const StreamRow: FC = ({ tokenStream }) => {
: 0n;
const activeStreamCount = countActiveStreams(tokenStream);
- console.log('token', token);
- console.log('token', token?.underlyingToken);
- console.log('balance', balance?.value);
-
return (
@@ -97,7 +93,6 @@ export const StreamRow: FC = ({ tokenStream }) => {
)}
{underlyingSymbol}
- {token?.symbol}
monthly
From 6f57b14eaf9a9eb2f7f07eb49f3a56decaf7df21 Mon Sep 17 00:00:00 2001
From: kkatusic
Date: Thu, 26 Dec 2024 19:13:22 +0100
Subject: [PATCH 14/20] udpate
---
.../views/userProfile/donationsTab/recurringTab/StreamRow.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/components/views/userProfile/donationsTab/recurringTab/StreamRow.tsx b/src/components/views/userProfile/donationsTab/recurringTab/StreamRow.tsx
index c931aeb179..dd7ffd32f7 100644
--- a/src/components/views/userProfile/donationsTab/recurringTab/StreamRow.tsx
+++ b/src/components/views/userProfile/donationsTab/recurringTab/StreamRow.tsx
@@ -44,7 +44,7 @@ export const StreamRow: FC = ({ tokenStream }) => {
const [showModifyModal, setShowModifyModal] = useState(false);
const { address, chain } = useAccount();
const { switchChain } = useSwitchChain();
- const { formatMessage } = useIntl();
+ const { formatMessage } = useIntl();
const recurringNetworkId = tokenStream[0].networkId;
From 9ce84b6a9b3df58fed8e151e7d4fe77de0560cc7 Mon Sep 17 00:00:00 2001
From: kkatusic
Date: Thu, 26 Dec 2024 19:13:33 +0100
Subject: [PATCH 15/20] resolve empty space
---
.../views/userProfile/donationsTab/recurringTab/StreamRow.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/components/views/userProfile/donationsTab/recurringTab/StreamRow.tsx b/src/components/views/userProfile/donationsTab/recurringTab/StreamRow.tsx
index dd7ffd32f7..c931aeb179 100644
--- a/src/components/views/userProfile/donationsTab/recurringTab/StreamRow.tsx
+++ b/src/components/views/userProfile/donationsTab/recurringTab/StreamRow.tsx
@@ -44,7 +44,7 @@ export const StreamRow: FC = ({ tokenStream }) => {
const [showModifyModal, setShowModifyModal] = useState(false);
const { address, chain } = useAccount();
const { switchChain } = useSwitchChain();
- const { formatMessage } = useIntl();
+ const { formatMessage } = useIntl();
const recurringNetworkId = tokenStream[0].networkId;
From 27a6a9fb2d647bdfff74c1d96ebefa888667cc0a Mon Sep 17 00:00:00 2001
From: kkatusic
Date: Mon, 30 Dec 2024 11:06:06 +0100
Subject: [PATCH 16/20] fixing close archive modal
---
.../donationsTab/recurringTab/ArchiveStreamModal.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/components/views/userProfile/donationsTab/recurringTab/ArchiveStreamModal.tsx b/src/components/views/userProfile/donationsTab/recurringTab/ArchiveStreamModal.tsx
index 5b83bf2d6a..b6bd1c0d8a 100644
--- a/src/components/views/userProfile/donationsTab/recurringTab/ArchiveStreamModal.tsx
+++ b/src/components/views/userProfile/donationsTab/recurringTab/ArchiveStreamModal.tsx
@@ -105,7 +105,7 @@ const ArchiveStreamInnerModal: FC = ({
closeModal}
+ onClick={() => closeModal()}
buttonType='texty-gray'
disabled={step === EArchiveStreamSteps.ARCHIVING}
/>
From b1482fbf4c00519ecb5afcf74d9645668ddba045 Mon Sep 17 00:00:00 2001
From: kkatusic
Date: Mon, 30 Dec 2024 12:33:24 +0100
Subject: [PATCH 17/20] fixing archiving donation reload list
---
lang/ca.json | 1 +
lang/en.json | 1 +
lang/es.json | 1 +
.../recurringTab/ActiveProjectsSection.tsx | 21 +++++++++++++++++--
4 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/lang/ca.json b/lang/ca.json
index 27b4fbedbd..60ec19c690 100644
--- a/lang/ca.json
+++ b/lang/ca.json
@@ -181,6 +181,7 @@
"label.archived_rounds": "Rondes arxivades",
"label.archive_donation": "Arxivar donació",
"label.archive_stream": "Arxiva el Stream",
+ "label.archive_switch": "Canvia a donacions arxivades",
"label.are_eligible_to_be_matched": "són elegibles per ser aparellats.",
"label.are_you_sure": "Estàs segur?",
"label.ask_us_a_question": "Fes-nos una pregunta",
diff --git a/lang/en.json b/lang/en.json
index 1168f7cc31..db789f2207 100644
--- a/lang/en.json
+++ b/lang/en.json
@@ -181,6 +181,7 @@
"label.archived_rounds": "Archived Rounds",
"label.archive_donation": "Archive donation",
"label.archive_stream": "Archive Stream",
+ "label.archive_switch": "Switch to Archive Donations",
"label.are_eligible_to_be_matched": "are eligible to be matched.",
"label.are_you_sure": "Are you sure?",
"label.ask_us_a_question": "Ask us a Question",
diff --git a/lang/es.json b/lang/es.json
index 173e238938..09f14cb543 100644
--- a/lang/es.json
+++ b/lang/es.json
@@ -179,6 +179,7 @@
"label.archived_rounds": "Rondas Archivadas",
"label.archive_donation": "Archivar donación",
"label.archive_stream": "Archivar Transmisión",
+ "label.archive_switch": "Cambiar a donaciones archivadas",
"label.are_eligible_to_be_matched": "son elegibles para ser complementadas.",
"label.are_you_sure": "¿Estás seguro?",
"label.ask_us_a_question": "Haznos una pregunta",
diff --git a/src/components/views/userProfile/donationsTab/recurringTab/ActiveProjectsSection.tsx b/src/components/views/userProfile/donationsTab/recurringTab/ActiveProjectsSection.tsx
index 5bac17b9b4..c7e86b6534 100644
--- a/src/components/views/userProfile/donationsTab/recurringTab/ActiveProjectsSection.tsx
+++ b/src/components/views/userProfile/donationsTab/recurringTab/ActiveProjectsSection.tsx
@@ -1,6 +1,6 @@
import { H5, neutralColors, Flex } from '@giveth/ui-design-system';
import styled from 'styled-components';
-import { useEffect, useState } from 'react';
+import { useEffect, useState, useRef } from 'react';
import { useIntl } from 'react-intl';
import ToggleSwitch from '@/components/ToggleSwitch';
import { RecurringDonationFiltersButton } from './RecurringDonationFiltersButton';
@@ -34,6 +34,10 @@ export interface IFinishStatus {
export const ActiveProjectsSection = () => {
const [trigger, setTrigger] = useState(false);
+ // this is used to trigger refetch data, but avoid loading from cache
+ const depsRef = useRef({
+ trigger: trigger,
+ });
const [showArchive, setShowArchive] = useState(false);
const [loading, setLoading] = useState(false);
const [donations, setDonations] = useState([]);
@@ -70,6 +74,11 @@ export const ActiveProjectsSection = () => {
};
useEffect(() => {
+ // this is used to trigger refetch data, but avoid loading from cache
+ const prevDeps = depsRef.current;
+ const fetchPolicy =
+ prevDeps.trigger !== trigger ? 'network-only' : 'cache-first';
+
if (!user) return;
const fetchUserDonations = async () => {
setLoading(true);
@@ -85,6 +94,7 @@ export const ActiveProjectsSection = () => {
includeArchived: myAccount ? showArchive : true,
networkId: networkIds.length === 1 ? networkIds[0] : 0,
},
+ fetchPolicy: fetchPolicy,
});
setLoading(false);
if (userDonations?.recurringDonationsByUserId) {
@@ -93,6 +103,11 @@ export const ActiveProjectsSection = () => {
setDonations(recurringDonationsByUserId.recurringDonations);
setTotalDonations(recurringDonationsByUserId.totalCount);
}
+
+ // update deps object
+ depsRef.current = {
+ trigger,
+ };
};
fetchUserDonations().then();
}, [
@@ -116,7 +131,9 @@ export const ActiveProjectsSection = () => {
setShowArchive(archive => !archive)
}
From 093e851491a901cc1ece0cb407436ddd8fd0e658 Mon Sep 17 00:00:00 2001
From: Mitch Oz
Date: Mon, 30 Dec 2024 12:28:16 -0600
Subject: [PATCH 18/20] improve text for show archived donations
---
lang/ca.json | 2 +-
lang/en.json | 2 +-
lang/es.json | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/lang/ca.json b/lang/ca.json
index 60ec19c690..7dc27cf8a1 100644
--- a/lang/ca.json
+++ b/lang/ca.json
@@ -181,7 +181,7 @@
"label.archived_rounds": "Rondes arxivades",
"label.archive_donation": "Arxivar donació",
"label.archive_stream": "Arxiva el Stream",
- "label.archive_switch": "Canvia a donacions arxivades",
+ "label.archive_switch": "Mostrar Donacions Arxivades",
"label.are_eligible_to_be_matched": "són elegibles per ser aparellats.",
"label.are_you_sure": "Estàs segur?",
"label.ask_us_a_question": "Fes-nos una pregunta",
diff --git a/lang/en.json b/lang/en.json
index db789f2207..c9897abf76 100644
--- a/lang/en.json
+++ b/lang/en.json
@@ -181,7 +181,7 @@
"label.archived_rounds": "Archived Rounds",
"label.archive_donation": "Archive donation",
"label.archive_stream": "Archive Stream",
- "label.archive_switch": "Switch to Archive Donations",
+ "label.archive_switch": "Show Archived Donations",
"label.are_eligible_to_be_matched": "are eligible to be matched.",
"label.are_you_sure": "Are you sure?",
"label.ask_us_a_question": "Ask us a Question",
diff --git a/lang/es.json b/lang/es.json
index 09f14cb543..8cc733dd2e 100644
--- a/lang/es.json
+++ b/lang/es.json
@@ -179,7 +179,7 @@
"label.archived_rounds": "Rondas Archivadas",
"label.archive_donation": "Archivar donación",
"label.archive_stream": "Archivar Transmisión",
- "label.archive_switch": "Cambiar a donaciones archivadas",
+ "label.archive_switch": "Mostrar Donaciones Archivadas",
"label.are_eligible_to_be_matched": "son elegibles para ser complementadas.",
"label.are_you_sure": "¿Estás seguro?",
"label.ask_us_a_question": "Haznos una pregunta",
From d3b8f69b03680594988f73b1cc1f31a3b4dc06f6 Mon Sep 17 00:00:00 2001
From: kkatusic
Date: Tue, 31 Dec 2024 13:55:34 +0100
Subject: [PATCH 19/20] fixing clear all filters
---
.../userProfile/donationsTab/recurringTab/FilterMenu.tsx | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/components/views/userProfile/donationsTab/recurringTab/FilterMenu.tsx b/src/components/views/userProfile/donationsTab/recurringTab/FilterMenu.tsx
index f5b5924d4f..507c1e3b40 100644
--- a/src/components/views/userProfile/donationsTab/recurringTab/FilterMenu.tsx
+++ b/src/components/views/userProfile/donationsTab/recurringTab/FilterMenu.tsx
@@ -42,7 +42,8 @@ export const FilterMenu = forwardRef(
const { formatMessage } = useIntl();
const count =
tokenFilters.length +
- Object.values(statusFilters).filter(Boolean).length;
+ Object.values(statusFilters).filter(Boolean).length +
+ networkIds.length;
const handleSelectFilter = (e: boolean, filter: ISuperToken) => {
if (e) {
@@ -63,6 +64,7 @@ export const FilterMenu = forwardRef(
const clearFilters = () => {
setTokenFilters([]);
setStatusFilters({ active: false, ended: false });
+ setNetworkIds([]);
handleClose();
};
From eae760c0b1195bfdf8b775e14a93beec94c36b30 Mon Sep 17 00:00:00 2001
From: Kilter
Date: Thu, 2 Jan 2025 07:36:24 -0500
Subject: [PATCH 20/20] feat: updating copy for enabled anchor contracts
---
lang/ca.json | 5 +++--
lang/en.json | 1 +
lang/es.json | 5 +++--
.../views/create/AddressInterface.tsx | 19 +++++++++++++++----
4 files changed, 22 insertions(+), 8 deletions(-)
diff --git a/lang/ca.json b/lang/ca.json
index 7dc27cf8a1..b798215e6a 100644
--- a/lang/ca.json
+++ b/lang/ca.json
@@ -387,8 +387,8 @@
"label.email": "correu electrònic",
"label.email_address": "Adreça electrònica",
"label.email_verified": "Correu electrònic verificat",
- "label.email_verify": "Verifica el correu electrònic",
- "label.email_already_verified": "El teu correu electrònic ha estat verificat. Ara pots desar la informació del teu perfil.",
+ "label.email_verify": "Verifica el correu electrònic",
+ "label.email_already_verified": "El teu correu electrònic ha estat verificat. Ara pots desar la informació del teu perfil.",
"label.email_used": "Aquesta adreça de correu electrònic s'utilitzarà per enviar-te comunicacions importants.",
"label.email_used_another": "Aquest correu electrònic ja ha estat verificat en un altre perfil!",
"label.email_sent_to": "Codi de verificació enviat a {email}",
@@ -1298,6 +1298,7 @@
"label.your_project_is_now_submitted": "El teu projecte ha estat enviat, el nostre equip revisarà la teva sol·licitud.",
"label.your_project_is_now_verified_so_the_donors_may_have_givbacks": "El teu projecte ara és elegible per a GIVbacks, per la qual cosa els donants poden rebre GIVbacks per les seves donacions al teu projecte.",
"label.your_project_is_set_up_to_receive_recurring_donations": "Aquest projecte ja està configurat per rebre donacions recurrents.",
+ "label.this_project_is_now_set_up_publish_and_finalize_it": "Aquest projecte ara està configurat per rebre donacions recurrents a {network}. Publica el projecte per finalitzar la integració. ",
"label.your_project_is_verified_now": "El teu projecte ara és elegible per a GIVbacks",
"label.your_stream_balance": "El teu Saldo de Transmissió de",
"label.your_tokens_will_be_locked_for_the_remainder": "Els teus tokens estaran bloquejats pel que queda de la ronda actual +",
diff --git a/lang/en.json b/lang/en.json
index c9897abf76..5a0d395709 100644
--- a/lang/en.json
+++ b/lang/en.json
@@ -613,6 +613,7 @@
"label.learn_more": "Learn more",
"label.learn_more_about": "Learn more about the benefits.",
"label.learn_more_about_donating_on_giveth": "Learn more about donating on Giveth",
+ "label.this_project_is_now_set_up_publish_and_finalize_it": "This project is now set up to receive recurring donations on {network}. Publish the project to finalize the integration. ",
"label.learn_more_about_giv": "Learn more about GIV",
"label.learn_more_recurring_donations": "Learn more about recurring donations on Giveth",
"label.learn_the_basics": "Learn the basics",
diff --git a/lang/es.json b/lang/es.json
index 8cc733dd2e..004713cc82 100644
--- a/lang/es.json
+++ b/lang/es.json
@@ -385,8 +385,8 @@
"label.email": "Email",
"label.email_address": "Dirección de Email",
"label.email_verified": "Correo electrónico verificado",
- "label.email_verify": "Verificar correo electrónico",
- "label.email_already_verified": "Tu correo electrónico ha sido verificado. Ahora puedes guardar la información de tu perfil.",
+ "label.email_verify": "Verificar correo electrónico",
+ "label.email_already_verified": "Tu correo electrónico ha sido verificado. Ahora puedes guardar la información de tu perfil.",
"label.email_used": "Esta dirección de correo electrónico se utilizará para enviarte comunicaciones importantes.",
"label.email_used_another": "¡Este correo electrónico ya ha sido verificado en otro perfil!",
"label.email_sent_to": "Código de verificación enviado a {email}",
@@ -1298,6 +1298,7 @@
"label.your_project_is_now_submitted": "Tu proyecto ha sido enviado, nuestro equipo revisará tu solicitud.",
"label.your_project_is_now_verified_so_the_donors_may_have_givbacks": "Tu proyecto ahora es elegible para GIVbacks, por lo que los donantes pueden recibir GIVbacks por sus donaciones a tu proyecto.",
"label.your_project_is_set_up_to_receive_recurring_donations": "Este proyecto ya está configurado para recibir donaciones recurrentes.",
+ "label.this_project_is_now_set_up_publish_and_finalize_it": "Este proyecto ahora está configurado para recibir donaciones recurrentes en {network}. Publica el proyecto para finalizar la integración. ",
"label.your_project_is_verified_now": "Tu proyecto ahora es elegible para GIVbacks",
"label.your_stream_balance": "Tu Saldo de Transmisión de ",
"label.your_tokens_will_be_locked_for_the_remainder": "Tus tokens estarán bloqueados por el restante de la ronda actual +",
diff --git a/src/components/views/create/AddressInterface.tsx b/src/components/views/create/AddressInterface.tsx
index 3979a9e092..a78be92d33 100644
--- a/src/components/views/create/AddressInterface.tsx
+++ b/src/components/views/create/AddressInterface.tsx
@@ -207,9 +207,20 @@ const AddressInterface = ({
? formatMessage({
id: 'label.your_project_is_set_up_to_receive_recurring_donations',
})
- : formatMessage({
- id: 'label.do_you_want_this_project_to_be_setup_to_receive_recurring_donations',
- })}
+ : hasAnchorContract
+ ? formatMessage(
+ {
+ id: 'label.this_project_is_now_set_up_publish_and_finalize_it',
+ },
+ {
+ network: isOptimism
+ ? 'Optimism'
+ : 'Base',
+ },
+ )
+ : formatMessage({
+ id: 'label.do_you_want_this_project_to_be_setup_to_receive_recurring_donations',
+ })}
- {hasAnchorContract && isEditMode ? (
+ {hasAnchorContract ? (