Skip to content

Commit

Permalink
Merge pull request #4916 from Giveth/test-recurring-donations
Browse files Browse the repository at this point in the history
feat:dev Recurring donations
  • Loading branch information
mateodaza authored Jan 2, 2025
2 parents 2da914c + 7fbcb4a commit 56b53fc
Show file tree
Hide file tree
Showing 12 changed files with 273 additions and 136 deletions.
6 changes: 4 additions & 2 deletions lang/ca.json
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,7 @@
"label.archived_rounds": "Rondes arxivades",
"label.archive_donation": "Arxivar donació",
"label.archive_stream": "Arxiva el Stream",
"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",
Expand Down Expand Up @@ -386,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}",
Expand Down Expand Up @@ -1297,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 +",
Expand Down
2 changes: 2 additions & 0 deletions lang/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,7 @@
"label.archived_rounds": "Archived Rounds",
"label.archive_donation": "Archive donation",
"label.archive_stream": "Archive Stream",
"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",
Expand Down Expand Up @@ -612,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",
Expand Down
6 changes: 4 additions & 2 deletions lang/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,7 @@
"label.archived_rounds": "Rondas Archivadas",
"label.archive_donation": "Archivar donación",
"label.archive_stream": "Archivar Transmisión",
"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",
Expand Down Expand Up @@ -384,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}",
Expand Down Expand Up @@ -1297,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 +",
Expand Down
7 changes: 7 additions & 0 deletions src/apollo/types/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
110 changes: 81 additions & 29 deletions src/components/views/create/AddressInterface.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,16 @@ 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';
import { useAppSelector } from '@/features/hooks';

interface IAddressInterfaceProps extends IChainType {
networkId: number;
Expand All @@ -53,11 +57,14 @@ 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 = true;

const [hasAnchorContract, setHasAnchorContract] = useState(
anchorContractData?.isActive || false,
);
Expand All @@ -68,13 +75,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;

Expand Down Expand Up @@ -168,12 +180,7 @@ const AddressInterface = ({
1,
);
setValue(inputName, _addresses);
if (isOptimism) {
setValue(
EInputs.alloProtocolRegistry,
false,
);
}
setValue(alloContract, false);
}}
>
<IconTrash24 />
Expand All @@ -200,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',
})}
</CustomP>
<CustomLink
href={links.RECURRING_DONATION_DOCS}
Expand All @@ -215,11 +233,11 @@ const AddressInterface = ({
.
</div>
</div>
{hasAnchorContract && isEditMode ? (
{hasAnchorContract ? (
<IconCheckContainer>
<IconCheck16 color={brandColors.giv[100]} />
</IconCheckContainer>
) : STOP_RECURRING_SETUP_ON_CREATION ? (
) : DO_RECURRING_SETUP_ON_ENABLE ? (
<EnableBtn>
<Button
buttonType={
Expand All @@ -228,9 +246,11 @@ const AddressInterface = ({
: 'texty-secondary'
}
label={'Enable'}
disabled={!isRecurringDonationsReady}
disabled={
!isRecurringDonationsReady ||
hasAnchorContract
}
onClick={async () => {
if (!project) return;
if (
isRecurringOnOptimismReady &&
!isOnOptimism
Expand All @@ -249,25 +269,57 @@ const AddressInterface = ({
});
}

await saveAnchorContract({
addedProjectState: project,
chainId: networkId,
recipientAddress:
walletAddress || value,
});
setHasAnchorContract(true);
if (project) {
await saveAnchorContract({
addedProjectState: project,
chainId: networkId,
recipientAddress:
walletAddress || value,
});
setHasAnchorContract(true);
} else {
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);
}
}}
/>
</EnableBtn>
) : (
<ToggleSwitch
isOn={alloProtocolRegistry}
isOn={!!alloProtocolRegistry?.enabled}
toggleOnOff={() => {
if (!isRecurringDonationsReady) return;
setValue(
EInputs.alloProtocolRegistry,
!alloProtocolRegistry,
);
setValue(alloContract, {
recipientAddress:
walletAddress || value,
enabled:
!alloProtocolRegistry?.enabled,
});
}}
label=''
disabled={!isRecurringDonationsReady}
Expand Down
Loading

0 comments on commit 56b53fc

Please sign in to comment.