Skip to content

Commit

Permalink
Merge pull request #4711 from Giveth/fix_issue_4449_network_modal
Browse files Browse the repository at this point in the history
fix: network modal showing while the page is loading
  • Loading branch information
HrithikSampson authored Sep 26, 2024
2 parents db71b97 + 3b90b81 commit 2feb18e
Show file tree
Hide file tree
Showing 9 changed files with 214 additions and 77 deletions.
8 changes: 0 additions & 8 deletions lang/ca.json
Original file line number Diff line number Diff line change
Expand Up @@ -824,7 +824,6 @@
"label.qf_eligibility": "Actualment en ronda de QF",
"label.qf_no_donations": "No hi ha hagut donacions en aquesta ronda.",
"label.qf_round_projects": "Projectes de la ronda QF",
"label.qr_code_error": "S'ha produït un error en generar el codi QR. Torneu-ho a provar.",
"label.qr_code_expired": "El codi QR ha caducat, sol·licita un nou codi QR!",
"label.quadratic_funding": "Finançament quadràtic",
"label.questions_contact_support": "Preguntes? Contacta amb el Suport",
Expand Down Expand Up @@ -1135,7 +1134,6 @@
"label.to_participate_for_real_claim_your_giv": "Per participar de veritat, reclama el teu GIV.",
"label.to_see_your_givpower_please_connect": "Per veure el teu GIVpower, si us plau connecta la teva cartera.",
"label.traceable_project": "Projecte Traçable",
"label.transaction_detail": "Detall de la transacció",
"label.transaction_link": "Enllaç de la transacció",
"label.transaction_status": "Estat de la transacció",
"label.trust_that_your_donations_will_make": "Confia que les teves donacions en cripto tindran un impacte amb el nostre sistema de verificació.",
Expand Down Expand Up @@ -1358,14 +1356,10 @@
"page.donate.passport_toast.description.not_connected": "Obtén el teu emparellament de donació amb finançament quadràtic!\nVerifica el teu Gitcoin Passport abans de",
"page.donate.passport_toast.title.eligible": "Finançament Quadràtic",
"page.donate.passport_toast.title.non_eligible": "No et perdis l'emparellament!",
"page.donate.title": "Donar",
"page.donate.zero_fees": "Sense Comissions",
"page.donate.makes_you_eligible_for_givbacks": "${value} et fan elegible per a GIVbacks",
"page.donate.unlocks_matching_funds": "${value} desbloquegen fons coincidents",
"page.donate.donations_will_be_matched": "La donació serà igualada",
"page.donate.project_not_eligible_for_qf": "El projecte no és elegible per a la concordança QF.",
"page.donate.network_not_eligible_for_qf": "Les donacions de {network} no són aptes per coincidir",
"page.donate.givbacks_eligible": "GIVbacks elegibles",
"page.donate.project_not_givbacks_eligible": "El projecte no és elegible per a GIVbacks",
"page.donate.title": "Donar",
"page.donate.token_not_givbacks_eligible": "{token} no és apte per a GIVbacks",
Expand Down Expand Up @@ -1669,9 +1663,7 @@
"project.givback_toast.description.non_verified_public": "Actualment, els GIVbacks només s'atorguen per donacions fetes a projectes elegibles per a GIVbacks a Ethereum. La teva contribució segueix sent important, fins i tot si no genera GIVbacks!",
"project.givback_toast.description.verified_owner": "Potencia el teu projecte per augmentar el seu percentatge de GIVbacks i ajudar-lo a aparèixer més amunt a la pàgina de projectes!",
"project.givback_toast.description.verified_public": "Les donacions a Ethereum a projectes elegibles per a GIVbacks són recompensades amb GIV. Impulsa aquest projecte per augmentar el seu percentatge de recompenses i fer-lo més visible a la pàgina de projectes!", "project.givback_toast.title.non_verified_owner": "El teu projecte està creant o donant suport a béns públics?",
"project.givback_toast.description.verified_public": "Les donacions de ${value} o més són elegibles per a GIVback. Potencia aquest projecte per augmentar el seu percentatge de recompenses i la seva visibilitat a la pàgina de projectes!",
"project.givback_toast.description.verified_owner_not_eligible": "El teu projecte ha estat avalat pels Verificadors de Giveth i ara pot beneficiar-se de GIVpower. Fes stake i bloqueja els teus tokens GIV per impulsar aquest projecte i fer-lo més visible a la pàgina de projectes. No obstant això, donar a aquest projecte no generarà GIVbacks per als donants.",
"project.givback_toast.title.non_verified_owner": "El teu projecte està creant o donant suport a béns públics?",
"project.givback_toast.title.non_verified_owner_cancelled": "Estat Cancel·lat",
"project.givback_toast.title.non_verified_owner_deactive": "Mode Desactivat",
"project.givback_toast.title.non_verified_owner_draft": "Publica el teu projecte avui!",
Expand Down
8 changes: 0 additions & 8 deletions lang/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -890,9 +890,6 @@
"label.runout_info": "Stream Balance will run out funds on ",
"label.runout_info_topup": "Top-up before then!",
"label.runs_out_in": "Runs out in",
"label.sanctioned_wallet": "Sanctioned Address Detected !!",
"label.sanctioned_wallet_message_part1": "This address has been found on the USA",
"label.sanctioned_wallet_message_part2": "sanctioned list.\nUnfortunately, Endaoment does not permit addresses on the\nOFAC sanction list to donate to projects delivered by\nEndaoment. Check out another project to donate to. ",
"label.save": "Save",
"label.save_changes": "Save Changes",
"label.save_on_gas_fees": "Save on gas fees, switch network.",
Expand Down Expand Up @@ -1188,7 +1185,6 @@
"label.verify_your_project.modal.three": "GIVbacks eligibility process ",
"label.verify_your_project.modal.two": "This simple ",
"label.view": "View",
"label.view_all_projects": "View all projects",
"label.view_details": "View details",
"label.view_more": "View more",
"label.view_on_block_explorer": "View on block explorer",
Expand Down Expand Up @@ -1349,8 +1345,6 @@
"page.donate.bank_fees": "Bank Fees",
"page.donate.donate_$_to_be_eligible": "Donate ${value} to be eligible for GIVbacks",
"page.donate.donate_$_to_get_matched": "Donate ${value} to get your donation matched",
"page.donate.donations_will_be_matched": "Donation will be matched",
"page.donate.givbacks_eligible": "GIVbacks eligible",
"page.donate.matching_toast.bottom_invalid_p1": "Only donations more than",
"page.donate.matching_toast.bottom_invalid_p2": "are eligible for matching.",
"page.donate.matching_toast.bottom_valid": "Matching funds will be sent to the selected project after the round ends. Donate to more projects to receive higher matching!",
Expand All @@ -1360,8 +1354,6 @@
"page.donate.passport_toast.description.not_connected": "Get your donation matched with quadratic funding!\nVerify your Gitcoin Passport before",
"page.donate.passport_toast.title.eligible": "Quadratic Funding",
"page.donate.passport_toast.title.non_eligible": "Don’t miss out on matching!",
"page.donate.title": "Donate",
"page.donate.zero_fees": "Zero Fees",
"page.donate.makes_you_eligible_for_givbacks": "${value} makes you eligible for GIVbacks",
"page.donate.unlocks_matching_funds": "${value} unlocks matching funds",
"page.donate.donations_will_be_matched": "Donation will be matched",
Expand Down
4 changes: 0 additions & 4 deletions lang/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -1345,8 +1345,6 @@
"page.donate.bank_fees": "Comisiones Bancarias",
"page.donate.donate_$_to_be_eligible": "Dona ${value} para ser elegible para GIVbacks",
"page.donate.donate_$_to_get_matched": "Dona ${value} para que tu donación sea igualada",
"page.donate.donations_will_be_matched": "La donación será igualada",
"page.donate.givbacks_eligible": "Elegibles para GIVbacks",
"page.donate.matching_toast.bottom_invalid_p1": "Sólo las donaciones superiores a",
"page.donate.matching_toast.bottom_invalid_p2": "son subvencionables.",
"page.donate.matching_toast.bottom_valid": "Los fondos de emparejamiento se enviarán al proyecto seleccionado después de que termine la ronda. ¡Dona a más proyectos para recibir un mayor emparejamiento!",
Expand All @@ -1356,9 +1354,7 @@
"page.donate.passport_toast.description.not_connected": "¡Haz que tu donación sea complementada con financiamiento cuadrático! Verifica tu Gitcoin Passport antes de",
"page.donate.passport_toast.title.eligible": "Financiamiento Cuadrático",
"page.donate.passport_toast.title.non_eligible": "¡No te pierdas la oportunidad!",
"page.donate.project_not_givbacks_eligible": "El proyecto no es elegible para GIVbacks",
"page.donate.title": "Donar",
"page.donate.token_not_givbacks_eligible": "{token} no es elegible para GIVbacks",
"page.donate.zero_fees": "Sin Comisiones",
"page.donate.makes_you_eligible_for_givbacks": "${value} te hacen elegible para recibir GIVbacks",
"page.donate.unlocks_matching_funds": "${value} desbloquean fondos equivalentes",
Expand Down
26 changes: 18 additions & 8 deletions src/components/modals/DonationByProjectOwner.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React from 'react';
import React, { useEffect, useState } from 'react';
import {
brandColors,
Button,
Expand All @@ -12,27 +12,37 @@ import { useRouter } from 'next/router';
import { Modal } from '@/components/modals/Modal';
import Routes from '@/lib/constants/Routes';
import { mediaQueries } from '@/lib/constants/constants';
import { useModalAnimation } from '@/hooks/useModalAnimation';

// Define the props interface
interface DonationByProjectOwnerProps {
setShowDonationByProjectOwner: (
showDonationByProjectOwner: boolean,
) => void;
closeModal: () => void;
}

export const DonationByProjectOwner: React.FC<DonationByProjectOwnerProps> = ({
setShowDonationByProjectOwner,
closeModal,
}) => {
const { formatMessage } = useIntl();
const router = useRouter();
const { closeModal } = useModalAnimation(setShowDonationByProjectOwner);
const [isRedirecting, setIsRedirecting] = useState(false);

const navigateToAllProjects = () => {
setIsRedirecting(true);
router.push(Routes.AllProjects);
closeModal();
};

useEffect(() => {
const handleRouteChangeComplete = () => {
closeModal();
setIsRedirecting(false);
};
if (isRedirecting) {
router.events.on('routeChangeComplete', handleRouteChangeComplete);
}
return () => {
router.events.off('routeChangeComplete', handleRouteChangeComplete);
};
}, [isRedirecting]);

return (
<Modal
closeModal={closeModal}
Expand Down
18 changes: 16 additions & 2 deletions src/components/modals/SanctionedModal.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React from 'react';
import React, { useEffect, useState } from 'react';
import {
brandColors,
Button,
Expand All @@ -21,12 +21,26 @@ interface SanctionModalProps {

export const SanctionModal: React.FC<SanctionModalProps> = ({ closeModal }) => {
const { formatMessage } = useIntl();
const [isRedirecting, setIsRedirecting] = useState(false);
const router = useRouter();
const navigateToAllProjects = () => {
setIsRedirecting(true);
router.push(Routes.AllProjects);
closeModal();
};

useEffect(() => {
const handleRouteChangeComplete = () => {
closeModal();
setIsRedirecting(false);
};
if (isRedirecting) {
router.events.on('routeChangeComplete', handleRouteChangeComplete);
}
return () => {
router.events.off('routeChangeComplete', handleRouteChangeComplete);
};
}, [isRedirecting]);

return (
<Modal
closeModal={closeModal}
Expand Down
89 changes: 71 additions & 18 deletions src/components/views/donate/DonateIndex.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React, { FC, useEffect, useState } from 'react';
import React, { FC, useEffect } from 'react';
import styled from 'styled-components';
import {
Col,
Expand All @@ -20,7 +20,10 @@ import SocialBox from '../../DonateSocialBox';
import NiceBanner from './NiceBanner';
import useDetectDevice from '@/hooks/useDetectDevice';
import { useIsSafeEnvironment } from '@/hooks/useSafeAutoConnect';
import { useDonateData } from '@/context/donate.context';
import {
DonateModalPriorityValues,
useDonateData,
} from '@/context/donate.context';
import { EContentType } from '@/lib/constants/shareContent';
import { useAlreadyDonatedToProject } from '@/hooks/useAlreadyDonatedToProject';
import { Shadow } from '@/components/styled-components/Shadow';
Expand All @@ -45,6 +48,8 @@ import EndaomentProjectsInfo from '@/components/views/project/EndaomentProjectsI
import { IDraftDonation } from '@/apollo/types/gqlTypes';
import StorageLabel from '@/lib/localStorage';
import DonationByProjectOwner from '@/components/modals/DonationByProjectOwner';
import { isWalletSanctioned } from '@/services/donation';
import SanctionModal from '@/components/modals/SanctionedModal';
import { PassportBanner } from '@/components/PassportBanner';
import QFEligibleNetworks from '@/components/views/donate/QFEligibleNetworks';
import { GIVBACKS_DONATION_QUALIFICATION_VALUE_USD } from '@/lib/constants/constants';
Expand All @@ -58,21 +63,23 @@ const DonateIndex: FC = () => {
qrDonationStatus,
draftDonationData,
hasActiveQFRound,
shouldRenderModal,
setSuccessDonation,
setQRDonationStatus,
setDraftDonationData,
setPendingDonationExists,
activeStartedRound,
startTimer,
setDonateModalByPriority,
setIsModalPriorityChecked,
} = useDonateData();
const { renewExpirationDate, retrieveDraftDonation } =
useQRCodeDonation(project);
const { isSignedIn, isEnabled } = useAppSelector(state => state.user);

const alreadyDonated = useAlreadyDonatedToProject(project);
const { userData } = useAppSelector(state => state.user);
const [showDonationByProjectOwner, setShowDonationByProjectOwner] =
useState<boolean | undefined>(false);

const dispatch = useAppDispatch();
const isSafeEnv = useIsSafeEnvironment();
const { isOnSolana } = useGeneralWallet();
Expand All @@ -81,6 +88,7 @@ const DonateIndex: FC = () => {
const [showQRCode, setShowQRCode] = React.useState(
!!router.query.draft_donation,
);
const { walletAddress: address } = useGeneralWallet();
const [stopTimer, setStopTimer] = React.useState<void | (() => void)>();

const isQRDonation = router.query.chain === ChainType.STELLAR.toLowerCase();
Expand All @@ -96,9 +104,37 @@ const DonateIndex: FC = () => {
};
}, [dispatch]);

const validateSanctions = async () => {
if (project.organization?.label === 'endaoment' && address) {
// We just need to check if the wallet is sanctioned for endaoment projects
const sanctioned = await isWalletSanctioned(address);
if (sanctioned) {
setDonateModalByPriority(
DonateModalPriorityValues.OFACSanctionListModal,
);
return;
}
}
setIsModalPriorityChecked(
DonateModalPriorityValues.OFACSanctionListModal,
);
};

useEffect(() => {
validateSanctions();
}, [project, address]);

useEffect(() => {
setShowDonationByProjectOwner(
userData?.id !== undefined && userData?.id === project.adminUser.id,
if (
userData?.id !== undefined &&
userData?.id === project.adminUser.id
) {
setDonateModalByPriority(
DonateModalPriorityValues.DonationByProjectOwner,
);
}
setIsModalPriorityChecked(
DonateModalPriorityValues.DonationByProjectOwner,
);
}, [userData?.id, project.adminUser]);

Expand Down Expand Up @@ -136,7 +172,7 @@ const DonateIndex: FC = () => {
excludeFromQF: !includeInQF,
givBackEligible:
isTokenEligibleForGivback &&
project.isGivbackEligible &&
project.verified &&
isSignedIn &&
isEnabled &&
getDonationById.amount >=
Expand Down Expand Up @@ -239,21 +275,31 @@ const DonateIndex: FC = () => {
<>
<DonateHeader />
<Wrapper>
{!isSafeEnv &&
hasActiveQFRound &&
!isOnSolana &&
(!isQRDonation ||
(isQRDonation && isStellarIncludedInQF)) && (
<PassportBanner />
)}
<DonateContainer>
{showDonationByProjectOwner && (
{shouldRenderModal(
DonateModalPriorityValues.DonationByProjectOwner,
) && (
<DonationByProjectOwner
setShowDonationByProjectOwner={
setShowDonationByProjectOwner
}
closeModal={() => {
setDonateModalByPriority(
DonateModalPriorityValues.None,
);
}}
/>
)}

{shouldRenderModal(
DonateModalPriorityValues.OFACSanctionListModal,
) && (
<SanctionModal
closeModal={() => {
setDonateModalByPriority(
DonateModalPriorityValues.None,
);
}}
/>
)}

{showAlreadyDonatedWrapper && (
<AlreadyDonatedWrapper>
<IconDonation24 />
Expand All @@ -264,6 +310,13 @@ const DonateIndex: FC = () => {
</SublineBold>
</AlreadyDonatedWrapper>
)}
{!isSafeEnv &&
hasActiveQFRound &&
!isOnSolana &&
(!isQRDonation ||
(isQRDonation && isStellarIncludedInQF)) && (
<PassportBanner />
)}
<NiceBanner />
<Row>
<Col xs={12} lg={6}>
Expand Down
1 change: 0 additions & 1 deletion src/components/views/donate/DonationCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,6 @@ export const DonationCard: FC<IDonationCardProps> = ({
address.networkId === config.OPTIMISM_NETWORK_NUMBER,
);
const isEndaomentProject = project?.organization?.label === 'endaoment';

const isOwnerOnEVM =
project?.adminUser?.walletAddress &&
isAddress(project.adminUser?.walletAddress);
Expand Down
Loading

0 comments on commit 2feb18e

Please sign in to comment.