From 6a29150e451c891e3ff4f9fe177e71c82cf7ab25 Mon Sep 17 00:00:00 2001 From: kkatusic Date: Wed, 15 May 2024 16:45:57 +0200 Subject: [PATCH 01/90] starting custom input --- pages/test2.tsx | 54 +++++++++++++++++++ src/components/views/donate/InputBox.tsx | 2 + .../views/donate/RecurringDonationCard.tsx | 51 +++++++++++++++--- 3 files changed, 101 insertions(+), 6 deletions(-) diff --git a/pages/test2.tsx b/pages/test2.tsx index 9654e7ff06..2f6da45ba3 100644 --- a/pages/test2.tsx +++ b/pages/test2.tsx @@ -1,7 +1,11 @@ import { useState } from 'react'; +import { neutralColors } from '@giveth/ui-design-system'; +import styled from 'styled-components'; import FailedDonation, { EDonationFailedType, } from '@/components/modals/FailedDonation'; +import InputBox from '@/components/views/donate/InputBox'; +import { AmountInput } from '@/components/AmountInput/AmountInput'; const YourApp = () => { const [failedModalType, setFailedModalType] = @@ -20,8 +24,58 @@ const YourApp = () => { type={failedModalType} /> )} + {}} + onChange={() => {}} + disabled={false} + /> ); }; export default YourApp; + +const InputSlider = styled(InputBox)` + width: 100%; + height: 100%; + border-left: 20px solid ${neutralColors.gray[300]} !important; + background: red !important; + padding: 20px; + #amount-input { + border: none; + flex: 1; + font-family: Red Hat Text; + font-size: 16px; + font-style: normal; + font-weight: 500; + line-height: 150%; /* 24px */ + width: 100%; + border-left: 20px solid ${neutralColors.gray[500]}; + background-color: ${neutralColors.gray[100]}; + color: blue; + padding: 20px; + } +`; + +// const InputSlider = styled(AmountInput)` +// width: 100%; +// height: 100%; +// border-left: 20px solid ${neutralColors.gray[300]} !important; +// background: red !important; +// padding: 20px; +// #amount-input { +// border: none; +// flex: 1; +// font-family: Red Hat Text; +// font-size: 16px; +// font-style: normal; +// font-weight: 500; +// line-height: 150%; /* 24px */ +// width: 100%; +// border-left: 20px solid ${neutralColors.gray[500]}; +// background-color: ${neutralColors.gray[100]}; +// color: blue; +// padding: 20px; +// } +// `; diff --git a/src/components/views/donate/InputBox.tsx b/src/components/views/donate/InputBox.tsx index 8d9e3ecec4..b390dc2cf3 100644 --- a/src/components/views/donate/InputBox.tsx +++ b/src/components/views/donate/InputBox.tsx @@ -15,6 +15,7 @@ interface IInputBox { error?: boolean; onFocus: (i: boolean) => void; disabled?: boolean; + className?: string; } const InputBox: FC = ({ @@ -23,6 +24,7 @@ const InputBox: FC = ({ error, onFocus, disabled, + className, }) => { const { formatMessage } = useIntl(); const [inputRef, setFocus] = useFocus(); diff --git a/src/components/views/donate/RecurringDonationCard.tsx b/src/components/views/donate/RecurringDonationCard.tsx index 0315b75f34..76fc88959a 100644 --- a/src/components/views/donate/RecurringDonationCard.tsx +++ b/src/components/views/donate/RecurringDonationCard.tsx @@ -54,6 +54,7 @@ import Routes from '@/lib/constants/Routes'; import { useModalCallback } from '@/hooks/useModalCallback'; import { useAppSelector } from '@/features/hooks'; import { findAnchorContractAddress } from '@/helpers/superfluid'; +import InputBox from './InputBox'; // These two functions are used to make the slider more user friendly by mapping the slider's value to a new range. /** @@ -372,7 +373,7 @@ export const RecurringDonationCard = () => { id: 'label.amount_to_donate_monthly', })} - + { value={mapValueInverse(percentage)} disabled={amount === 0n} /> - + {}} + onChange={() => {}} + disabled={selectedToken === undefined} + /> + @@ -820,13 +839,33 @@ const GLinkStyled = styled(GLink)` } `; -const SliderWrapper = styled.div` - width: 100%; - position: relative; -`; +// const SliderWrapper = styled.div` +// width: 100%; +// position: relative; +// `; const StyledSlider = styled(Slider)``; +const InputSlider = styled(InputBox)` + width: 100%; + border-left: 20px solid ${neutralColors.gray[300]} !important; + background: red !important; + padding: 20px; + #input-box { + display: none; + border: none; + flex: 1; + font-family: Red Hat Text; + font-size: 16px; + font-style: normal; + font-weight: 500; + line-height: 150%; /* 24px */ + width: 100%; + border-left: 20px solid ${neutralColors.gray[500]}; + background-color: ${neutralColors.gray[100]}; + } +`; + const GivethSection = styled(Flex)` flex-direction: column; gap: 24px; From 51e6d6e142b71de4238c51103955c10d5428708d Mon Sep 17 00:00:00 2001 From: kkatusic Date: Wed, 15 May 2024 17:01:10 +0200 Subject: [PATCH 02/90] remove test code from test2 --- pages/test2.tsx | 56 +----------------------- src/components/views/donate/InputBox.tsx | 2 +- 2 files changed, 2 insertions(+), 56 deletions(-) diff --git a/pages/test2.tsx b/pages/test2.tsx index 2f6da45ba3..9fc1a1ebe2 100644 --- a/pages/test2.tsx +++ b/pages/test2.tsx @@ -1,11 +1,7 @@ import { useState } from 'react'; -import { neutralColors } from '@giveth/ui-design-system'; -import styled from 'styled-components'; import FailedDonation, { EDonationFailedType, } from '@/components/modals/FailedDonation'; -import InputBox from '@/components/views/donate/InputBox'; -import { AmountInput } from '@/components/AmountInput/AmountInput'; const YourApp = () => { const [failedModalType, setFailedModalType] = @@ -24,58 +20,8 @@ const YourApp = () => { type={failedModalType} /> )} - {}} - onChange={() => {}} - disabled={false} - /> ); }; -export default YourApp; - -const InputSlider = styled(InputBox)` - width: 100%; - height: 100%; - border-left: 20px solid ${neutralColors.gray[300]} !important; - background: red !important; - padding: 20px; - #amount-input { - border: none; - flex: 1; - font-family: Red Hat Text; - font-size: 16px; - font-style: normal; - font-weight: 500; - line-height: 150%; /* 24px */ - width: 100%; - border-left: 20px solid ${neutralColors.gray[500]}; - background-color: ${neutralColors.gray[100]}; - color: blue; - padding: 20px; - } -`; - -// const InputSlider = styled(AmountInput)` -// width: 100%; -// height: 100%; -// border-left: 20px solid ${neutralColors.gray[300]} !important; -// background: red !important; -// padding: 20px; -// #amount-input { -// border: none; -// flex: 1; -// font-family: Red Hat Text; -// font-size: 16px; -// font-style: normal; -// font-weight: 500; -// line-height: 150%; /* 24px */ -// width: 100%; -// border-left: 20px solid ${neutralColors.gray[500]}; -// background-color: ${neutralColors.gray[100]}; -// color: blue; -// padding: 20px; -// } -// `; +export default YourApp; \ No newline at end of file diff --git a/src/components/views/donate/InputBox.tsx b/src/components/views/donate/InputBox.tsx index b390dc2cf3..20e97d8498 100644 --- a/src/components/views/donate/InputBox.tsx +++ b/src/components/views/donate/InputBox.tsx @@ -34,7 +34,7 @@ const InputBox: FC = ({ }, []); return ( - + Date: Wed, 15 May 2024 17:21:44 +0200 Subject: [PATCH 03/90] Update test2.tsx --- pages/test2.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/test2.tsx b/pages/test2.tsx index 9fc1a1ebe2..9654e7ff06 100644 --- a/pages/test2.tsx +++ b/pages/test2.tsx @@ -24,4 +24,4 @@ const YourApp = () => { ); }; -export default YourApp; \ No newline at end of file +export default YourApp; From 131d30786893f9f8a906ac2f4111cefb2710dddf Mon Sep 17 00:00:00 2001 From: kkatusic Date: Fri, 17 May 2024 10:07:48 +0200 Subject: [PATCH 04/90] try with InputBox --- src/components/views/donate/InputBox.tsx | 4 +- .../views/donate/RecurringDonationCard.tsx | 116 +++++++++++++----- 2 files changed, 87 insertions(+), 33 deletions(-) diff --git a/src/components/views/donate/InputBox.tsx b/src/components/views/donate/InputBox.tsx index 20e97d8498..8d9e3ecec4 100644 --- a/src/components/views/donate/InputBox.tsx +++ b/src/components/views/donate/InputBox.tsx @@ -15,7 +15,6 @@ interface IInputBox { error?: boolean; onFocus: (i: boolean) => void; disabled?: boolean; - className?: string; } const InputBox: FC = ({ @@ -24,7 +23,6 @@ const InputBox: FC = ({ error, onFocus, disabled, - className, }) => { const { formatMessage } = useIntl(); const [inputRef, setFocus] = useFocus(); @@ -34,7 +32,7 @@ const InputBox: FC = ({ }, []); return ( - + { value={mapValueInverse(percentage)} disabled={amount === 0n} /> - + {}} + onChange={value => { + const numericValue = + value === null || + value === undefined + ? 0 + : parseFloat(value.toString()); + console.log(typeof value); + console.log({ value }); + console.log(typeof numericValue); + console.log({ numericValue }); + + const _value = parseUnits( + numericValue.toString(), + selectedToken?.token.decimals || 18, + ); + + console.log(typeof _value); + console.log( + Number( limitFraction( formatUnits( - totalPerMonth, + amount, selectedToken?.token .decimals || 18, ), ), - ) - : 0 - } - onFocus={() => {}} - onChange={() => {}} - disabled={selectedToken === undefined} - /> + ), + ); + + const percentage = + (numericValue / + Number( + limitFraction( + formatUnits( + amount, + selectedToken?.token + .decimals || 18, + ), + ), + )) * + 100; + + console.log({ _value }); + console.log({ percentage }); + + setPercentage(mapValue(percentage)); + + }} + disabled={selectedToken === undefined} + /> + +
Total per month: {totalPerMonth.toString()}
+
Total amount: {amount.toString()}
@@ -846,24 +897,29 @@ const GLinkStyled = styled(GLink)` const StyledSlider = styled(Slider)``; -const InputSlider = styled(InputBox)` - width: 100%; - border-left: 20px solid ${neutralColors.gray[300]} !important; - background: red !important; - padding: 20px; - #input-box { - display: none; - border: none; - flex: 1; - font-family: Red Hat Text; - font-size: 16px; - font-style: normal; - font-weight: 500; - line-height: 150%; /* 24px */ - width: 100%; - border-left: 20px solid ${neutralColors.gray[500]}; - background-color: ${neutralColors.gray[100]}; +const InputSlider = styled.div` + width: 27%; + border: 2px solid ${neutralColors.gray[300]} !important; + border-radius: 8px; + div { + padding: 5px; + height: auto; + } + div #input-box { + padding: 0px; } + // #input-box { + // border: none; + // flex: 1; + // font-family: Red Hat Text; + // font-size: 16px; + // font-style: normal; + // font-weight: 500; + // line-height: 150%; /* 24px */ + // width: 100%; + // border-left: 20px solid ${neutralColors.gray[500]}; + // background-color: ${neutralColors.gray[100]}; + // } `; const GivethSection = styled(Flex)` From a0d576adf0e712c5cf6e46bd8090d29d547dc851 Mon Sep 17 00:00:00 2001 From: kkatusic Date: Fri, 17 May 2024 11:58:01 +0200 Subject: [PATCH 05/90] added Amount Input and error handling --- lang/ca.json | 1 + lang/en.json | 1 + lang/es.json | 1 + .../views/donate/RecurringDonationCard.tsx | 138 ++++++------------ 4 files changed, 47 insertions(+), 94 deletions(-) diff --git a/lang/ca.json b/lang/ca.json index b205a7caa7..7fc2667cd6 100644 --- a/lang/ca.json +++ b/lang/ca.json @@ -789,6 +789,7 @@ "label.recurring_donation_card_subheader_1": "Transmeteu les vostres donacions al llarg del temps per proporcionar finançament continu.", "label.recurring_donation_card_subheader_2": "Decideix la quantitat de tokens a dipositar en el teu saldo de transmissió, o utilitza el/els teu(s) saldo(s) de transmissió existent(s). Estableix l'import de la donació mensual en tokens i comença a transmetre.", "label.recurring_donation_updated_hours": "Les quantitats de les donacions recurrents s'actualitzen cada 24 hores.", + "label.recurring_donation_maximum": "Aquest és el màxim que podeu donar mensualment, recarregueu el vostre saldo de reproducció per donar més!", "label.refer_a_friend": "Recomana un amic, guanya tokens $GIV per cada donació.", "label.refer_your_friends": "Recomana els teus amics", "label.refer_your_friends_and_earn_giv": "Recomana els teus amics i guanya GIV quan donin", diff --git a/lang/en.json b/lang/en.json index 7fe4796107..44d4a88230 100644 --- a/lang/en.json +++ b/lang/en.json @@ -790,6 +790,7 @@ "label.recurring_donation_card_subheader_1": "Stream your donations over time to provide continuous funding.", "label.recurring_donation_card_subheader_2": "Decide the number of tokens to deposit in your stream balance, or utilize your existing stream balance(s). Set the monthly donation amount in tokens and begin streaming.", "label.recurring_donation_updated_hours": "Recurring donation amounts are updated every 24 hours.", + "label.recurring_donation_maximum": "This is the maximum you can donate monthly, top-up your stream balance to donate more!", "label.refer_a_friend": "Refer a friend, earn $GIV tokens for every donation.", "label.refer_your_friends": "Refer your friends", "label.refer_your_friends_and_earn_giv": "Refer your friends and earn GIV when they donate", diff --git a/lang/es.json b/lang/es.json index cbfd59856a..6521833a84 100644 --- a/lang/es.json +++ b/lang/es.json @@ -789,6 +789,7 @@ "label.recurring_donation_card_subheader_1": "Transmite tus donaciones con el tiempo para proporcionar financiamiento continuo.", "label.recurring_donation_card_subheader_2": "Decide la cantidad de tokens a depositar en tu saldo de transmisión, o utiliza tu(s) saldo(s) de transmisión existente(s). Establece el monto de la donación mensual en tokens y comienza a transmitir.", "label.recurring_donation_updated_hours": "Las cantidades de las donaciones recurrentes se actualizan cada 24 horas.", + "label.recurring_donation_maximum": "Este es el máximo que puedes donar mensualmente. ¡Recarga tu saldo de transmisión para donar más!", "label.refer_a_friend": "Referir a un amigo, ganar tokens $GIV por cada donación.", "label.refer_your_friends": "Refiere a tus amigos", "label.refer_your_friends_and_earn_giv": "Refiere a tus amigos y gana GIV", diff --git a/src/components/views/donate/RecurringDonationCard.tsx b/src/components/views/donate/RecurringDonationCard.tsx index ffd81fb71d..29ed164150 100644 --- a/src/components/views/donate/RecurringDonationCard.tsx +++ b/src/components/views/donate/RecurringDonationCard.tsx @@ -54,7 +54,6 @@ import Routes from '@/lib/constants/Routes'; import { useModalCallback } from '@/hooks/useModalCallback'; import { useAppSelector } from '@/features/hooks'; import { findAnchorContractAddress } from '@/helpers/superfluid'; -import InputBox from './InputBox'; // These two functions are used to make the slider more user friendly by mapping the slider's value to a new range. /** @@ -398,76 +397,36 @@ export const RecurringDonationCard = () => { value={mapValueInverse(percentage)} disabled={amount === 0n} /> - - {}} - onChange={value => { - const numericValue = - value === null || - value === undefined - ? 0 - : parseFloat(value.toString()); - console.log(typeof value); - console.log({ value }); - console.log(typeof numericValue); - console.log({ numericValue }); - - const _value = parseUnits( - numericValue.toString(), - selectedToken?.token.decimals || 18, - ); - - console.log(typeof _value); - console.log( - Number( - limitFraction( - formatUnits( - amount, - selectedToken?.token - .decimals || 18, - ), - ), - ), - ); - - const percentage = - (numericValue / - Number( - limitFraction( - formatUnits( - amount, - selectedToken?.token - .decimals || 18, - ), - ), - )) * - 100; - - console.log({ _value }); - console.log({ percentage }); - - setPercentage(mapValue(percentage)); - - }} - disabled={selectedToken === undefined} - /> - + { + console.log({ value }); + console.log({ totalPerMonth }); + BigInt(totalPerMonth); + const percentage = + amount === 0n + ? 0 + : (BigInt(value.toString()) * + BigInt(100)) / + BigInt(amount); + console.log({ percentage }); + console.log(Number(percentage)); + setPercentage(mapValue(Number(percentage))); + }} + disabled={selectedToken === undefined} + className={percentage > 100 ? 'error' : ''} + /> -
Total per month: {totalPerMonth.toString()}
-
Total amount: {amount.toString()}
+ {percentage > 100 && ( + + {formatMessage({ + id: 'label.recurring_donation_maximum', + })} + + )} @@ -878,6 +837,14 @@ const Input = styled(AmountInput)` } `; +const RecurringMessage = styled(P)` + font-size: 12px; + font-style: normal; + font-weight: 400; + line-height: 18px; + color: #e6492d; +`; + export const IconWrapper = styled.div` cursor: pointer; color: ${brandColors.giv[500]}; @@ -890,36 +857,19 @@ const GLinkStyled = styled(GLink)` } `; -// const SliderWrapper = styled.div` -// width: 100%; -// position: relative; -// `; - const StyledSlider = styled(Slider)``; -const InputSlider = styled.div` +const InputSlider = styled(AmountInput)` width: 27%; - border: 2px solid ${neutralColors.gray[300]} !important; + border: 2px solid ${neutralColors.gray[300]}; border-radius: 8px; - div { - padding: 5px; - height: auto; + padding: 2px; + #amount-input { + width: 100%; } - div #input-box { - padding: 0px; + &&.error { + border-color: #e6492d; } - // #input-box { - // border: none; - // flex: 1; - // font-family: Red Hat Text; - // font-size: 16px; - // font-style: normal; - // font-weight: 500; - // line-height: 150%; /* 24px */ - // width: 100%; - // border-left: 20px solid ${neutralColors.gray[500]}; - // background-color: ${neutralColors.gray[100]}; - // } `; const GivethSection = styled(Flex)` From a3daea23f57717f6768f4dcfa2e3c6b68dde03e5 Mon Sep 17 00:00:00 2001 From: Ramin Date: Mon, 20 May 2024 00:00:28 +0330 Subject: [PATCH 06/90] remove giveth project from DonateRoute --- pages/donate/[slug].tsx | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/pages/donate/[slug].tsx b/pages/donate/[slug].tsx index fed026867a..efcb9d7bc8 100644 --- a/pages/donate/[slug].tsx +++ b/pages/donate/[slug].tsx @@ -3,22 +3,18 @@ import { GetServerSideProps } from 'next/types'; import Head from 'next/head'; import { captureException } from '@sentry/nextjs'; -import { IDonationProject } from '@/apollo/types/types'; -import { - FETCH_GIVETH_PROJECT_BY_ID, - FETCH_PROJECT_BY_SLUG_DONATION, -} from '@/apollo/gql/gqlProjects'; +import { IProject } from '@/apollo/types/types'; +import { FETCH_PROJECT_BY_SLUG_DONATION } from '@/apollo/gql/gqlProjects'; import { client } from '@/apollo/apolloClient'; import { ProjectMeta } from '@/components/Metatag'; import { transformGraphQLErrorsToStatusCode } from '@/helpers/requests'; -import config from '@/configuration'; import { DonateProvider } from '@/context/donate.context'; import DonateIndex from '@/components/views/donate/DonateIndex'; import { useAppDispatch } from '@/features/hooks'; import { setShowFooter } from '@/features/general/general.slice'; export interface IDonateRouteProps { - project: IDonationProject; + project: IProject; } const DonateRoute: FC = ({ project }) => { @@ -51,19 +47,9 @@ export const getServerSideProps: GetServerSideProps = async props => { variables: { slug }, fetchPolicy: 'no-cache', }); - const { data: givethProjectData } = await client.query({ - query: FETCH_GIVETH_PROJECT_BY_ID, - variables: { id: config.GIVETH_PROJECT_ID }, - fetchPolicy: 'no-cache', - }); - - const project = { - ...data.projectBySlug, - givethAddresses: givethProjectData.projectById.addresses, - }; return { props: { - project, + project: data.projectBySlug, }, }; } catch (error: any) { From ac9f70cfc2e4f8c2c844ec832189a9c44f2e40c3 Mon Sep 17 00:00:00 2001 From: Ramin Date: Mon, 20 May 2024 00:00:57 +0330 Subject: [PATCH 07/90] replace IDonationProject with IProject --- src/context/donate.context.tsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/context/donate.context.tsx b/src/context/donate.context.tsx index e4ce5886e2..a1dfa59b14 100644 --- a/src/context/donate.context.tsx +++ b/src/context/donate.context.tsx @@ -8,7 +8,7 @@ import { type Dispatch, } from 'react'; import { useCallback } from 'react'; -import { IDonationProject } from '@/apollo/types/types'; +import { IProject } from '@/apollo/types/types'; import { hasActiveRound } from '@/helpers/qf'; import { ISuperfluidStream, IToken } from '@/types/superFluid'; import { ChainType } from '@/types/config'; @@ -29,7 +29,7 @@ interface ISuccessDonation { interface IDonateContext { hasActiveQFRound?: boolean; - project: IDonationProject; + project: IProject; successDonation?: ISuccessDonation; tokenStreams: ITokenStreams; setSuccessDonation: (successDonation?: ISuccessDonation) => void; @@ -42,13 +42,13 @@ interface IDonateContext { interface IProviderProps { children: ReactNode; - project: IDonationProject; + project: IProject; } const DonateContext = createContext({ setSuccessDonation: () => {}, setSelectedToken: () => {}, - project: {} as IDonationProject, + project: {} as IProject, tokenStreams: {}, fetchProject: async () => {}, }); @@ -71,14 +71,14 @@ export const DonateProvider: FC = ({ children, project }) => { ISelectTokenWithBalance | undefined >(); const [successDonation, setSuccessDonation] = useState(); - const [projectData, setProjectData] = useState(project); + const [projectData, setProjectData] = useState(project); const fetchProject = useCallback(async () => { const { data } = (await client.query({ query: FETCH_PROJECT_BY_SLUG_DONATION, variables: { slug: project.slug }, fetchPolicy: 'no-cache', - })) as { data: { projectBySlug: IDonationProject } }; + })) as { data: { projectBySlug: IProject } }; setProjectData(data.projectBySlug); }, [project.slug]); From 5a825b7e0c835fdc6068d45bd4c6dcb50c6ef5fe Mon Sep 17 00:00:00 2001 From: Ramin Date: Mon, 20 May 2024 00:02:03 +0330 Subject: [PATCH 08/90] fetch giveth project in donate page client side --- src/components/views/donate/DonateModal.tsx | 50 +++++++++++++++++++-- 1 file changed, 47 insertions(+), 3 deletions(-) diff --git a/src/components/views/donate/DonateModal.tsx b/src/components/views/donate/DonateModal.tsx index 5a3a3a4966..531c68d54d 100644 --- a/src/components/views/donate/DonateModal.tsx +++ b/src/components/views/donate/DonateModal.tsx @@ -1,4 +1,4 @@ -import React, { FC, useState } from 'react'; +import React, { FC, useEffect, useState } from 'react'; import styled from 'styled-components'; import { brandColors, @@ -6,6 +6,7 @@ import { Lead, neutralColors, Button, + FlexCenter, } from '@giveth/ui-design-system'; import { useIntl } from 'react-intl'; import { Chain } from 'viem'; @@ -32,10 +33,12 @@ import { TxHashWithChainType, useDonateData } from '@/context/donate.context'; import { useCreateEvmDonation } from '@/hooks/useCreateEvmDonation'; import { useGeneralWallet } from '@/providers/generalWalletProvider'; import { ChainType } from '@/types/config'; -import { IWalletAddress } from '@/apollo/types/types'; +import { IProject, IWalletAddress } from '@/apollo/types/types'; import { useCreateSolanaDonation } from '@/hooks/useCreateSolanaDonation'; import { useTokenPrice } from '@/hooks/useTokenPrice'; import { calcDonationShare } from '@/components/views/donate/helpers'; +import { Spinner } from '@/components/Spinner'; +import { FETCH_GIVETH_PROJECT_BY_ID } from '@/apollo/gql/gqlProjects'; interface IDonateModalProps extends IModal { token: IProjectAcceptedToken; @@ -85,13 +88,35 @@ const DonateModal: FC = props => { const [donating, setDonating] = useState(false); const [secondTxStatus, setSecondTxStatus] = useState(); const [processFinished, setProcessFinished] = useState(false); + const [isLoadingGivethAddress, setIsLoadingGivethAddress] = + useState(isDonatingToGiveth); + const [givethProject, setGivethProject] = useState(); const [failedModalType, setFailedModalType] = useState(); + useEffect(() => { + const fetchGivethProject = async () => { + try { + const { data } = await client.query({ + query: FETCH_GIVETH_PROJECT_BY_ID, + variables: { id: config.GIVETH_PROJECT_ID }, + fetchPolicy: 'no-cache', + }); + setGivethProject(data.projectById); + setIsLoadingGivethAddress(false); + } catch (e) { + setIsLoadingGivethAddress(false); + showToastError('Failed to fetch Giveth wallet address'); + console.log('Failed to fetch Giveth wallet address', e); + } + }; + if (isLoadingGivethAddress) fetchGivethProject().then(); + }, []); + const tokenPrice = useTokenPrice(token); const chainvineReferred = getWithExpiry(StorageLabel.CHAINVINEREFERRED); - const { title, addresses, givethAddresses } = project || {}; + const { title, addresses } = project || {}; const projectWalletAddress = findMatchingWalletAddress( addresses, @@ -229,6 +254,13 @@ const DonateModal: FC = props => { }); }; + if (isLoadingGivethAddress) + return ( + + + + ); + return ( <> = props => { ); }; +const Loading = styled(FlexCenter)` + position: fixed; + top: 0; + left: 0; + z-index: 1000; + height: 100%; + width: 100%; + background-color: gray; + transition: opacity 0.3s ease-in-out; + opacity: 0.9; +`; + const findMatchingWalletAddress = ( addresses: IWalletAddress[] = [], chainId: number, From b381a87c042073c5e24205c064d885a01cfbd6a1 Mon Sep 17 00:00:00 2001 From: Ramin Date: Mon, 20 May 2024 00:02:43 +0330 Subject: [PATCH 09/90] replace IDonationProject with IProject --- src/components/views/donate/EstimatedMatchingToast.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/views/donate/EstimatedMatchingToast.tsx b/src/components/views/donate/EstimatedMatchingToast.tsx index 8a3de3ad76..2cce32a3b9 100644 --- a/src/components/views/donate/EstimatedMatchingToast.tsx +++ b/src/components/views/donate/EstimatedMatchingToast.tsx @@ -13,7 +13,7 @@ import { useIntl } from 'react-intl'; import Divider from '@/components/Divider'; import { TooltipContent } from '@/components/modals/HarvestAll.sc'; import { IconWithTooltip } from '@/components/IconWithToolTip'; -import { IDonationProject } from '@/apollo/types/types'; +import { IProject } from '@/apollo/types/types'; import { calculateEstimatedMatchingWithDonationAmount, getActiveRound, @@ -23,7 +23,7 @@ import { formatDonation } from '@/helpers/number'; import { useTokenPrice } from '@/hooks/useTokenPrice'; interface IEstimatedMatchingToast { - projectData: IDonationProject; + projectData: IProject; token?: IProjectAcceptedToken; amountTyped?: number; } From 7cdb2ffbb4bdb440618b03eaba57a8e4b5304e25 Mon Sep 17 00:00:00 2001 From: Ramin Date: Mon, 20 May 2024 00:03:36 +0330 Subject: [PATCH 10/90] remove IDonationProject --- src/apollo/types/types.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/apollo/types/types.ts b/src/apollo/types/types.ts index c56aea5271..d4464c8efc 100644 --- a/src/apollo/types/types.ts +++ b/src/apollo/types/types.ts @@ -85,10 +85,6 @@ export interface IProject { socialMedia: IProjectSocialMedia[]; } -export interface IDonationProject extends IProject { - givethAddresses: IWalletAddress[]; -} - export enum EProjectsFilter { ACCEPT_GIV = 'AcceptGiv', VERIFIED = 'Verified', From 90d83e77fe1737937fe79bc70003278824fa017f Mon Sep 17 00:00:00 2001 From: Cherik Date: Mon, 20 May 2024 20:57:58 +0330 Subject: [PATCH 11/90] handle on zero --- src/components/AmountInput/AmountInput.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/AmountInput/AmountInput.tsx b/src/components/AmountInput/AmountInput.tsx index 4289f312eb..fd5d1f60e8 100644 --- a/src/components/AmountInput/AmountInput.tsx +++ b/src/components/AmountInput/AmountInput.tsx @@ -47,7 +47,6 @@ export const AmountInput: FC = ({ const [displayAmount, setDisplayAmount] = useState(''); useEffect(() => { - if (!amount) return; const _displayAmount = truncateToDecimalPlaces( formatUnits(amount, decimals), decimals / 3, From 6da3989cb69c156eaf81d258d6c5c16a575db0bd Mon Sep 17 00:00:00 2001 From: Cherik Date: Mon, 20 May 2024 20:58:20 +0330 Subject: [PATCH 12/90] use perMonthAmount instead of percentage --- .../views/donate/RecurringDonationCard.tsx | 101 +++++++++--------- 1 file changed, 49 insertions(+), 52 deletions(-) diff --git a/src/components/views/donate/RecurringDonationCard.tsx b/src/components/views/donate/RecurringDonationCard.tsx index 29ed164150..8aceb377d8 100644 --- a/src/components/views/donate/RecurringDonationCard.tsx +++ b/src/components/views/donate/RecurringDonationCard.tsx @@ -17,7 +17,7 @@ import { } from '@giveth/ui-design-system'; import React, { useEffect, useMemo, useState } from 'react'; import styled from 'styled-components'; -import { formatUnits, parseUnits } from 'viem'; +import { formatUnits } from 'viem'; import { useAccount, useBalance } from 'wagmi'; import Slider from 'rc-slider'; import Image from 'next/image'; @@ -89,8 +89,8 @@ export const RecurringDonationCard = () => { const { project, selectedToken, tokenStreams } = useDonateData(); const isGivethProject = Number(project.id!) === config.GIVETH_PROJECT_ID; const [amount, setAmount] = useState(0n); + const [perMonthAmount, setPerMonthAmount] = useState(0n); const [isUpdating, setIsUpdating] = useState(false); - const [percentage, setPercentage] = useState(0); const [donationToGiveth, setDonationToGiveth] = useState( isGivethProject ? 0 : 5, ); @@ -135,18 +135,11 @@ export const RecurringDonationCard = () => { const underlyingToken = selectedToken?.token.underlyingToken; - const totalPerMonth = - BigInt( - new BigNumber((amount || 0n).toString()) - .multipliedBy(percentage) - .toFixed(0), - ) / 100n; - // total means project + giveth - const totalPerSec = totalPerMonth / ONE_MONTH_SECONDS; + const totalPerSec = perMonthAmount / ONE_MONTH_SECONDS; const projectPerMonth = - (totalPerMonth * BigInt(100 - donationToGiveth)) / 100n; - const givethPerMonth = totalPerMonth - projectPerMonth; + (perMonthAmount * BigInt(100 - donationToGiveth)) / 100n; + const givethPerMonth = perMonthAmount - projectPerMonth; const tokenBalance = balance?.value; const tokenStream = tokenStreams[selectedToken?.token.id || '']; @@ -209,14 +202,11 @@ export const RecurringDonationCard = () => { if (_userStreamOnSelectedToken) { setUserStreamOnSelectedToken(_userStreamOnSelectedToken); - const _percentage = BigNumber( - ( - BigInt(_userStreamOnSelectedToken.currentFlowRate) * - ONE_MONTH_SECONDS * - 100n - ).toString(), - ).dividedBy(selectedToken.balance.toString()); - setPercentage(parseFloat(_percentage.toString())); + // setPercentage(parseFloat(_percentage.toString())); + setPerMonthAmount( + BigInt(_userStreamOnSelectedToken.currentFlowRate) * + ONE_MONTH_SECONDS, + ); } else { setUserStreamOnSelectedToken(undefined); //Please don't make percentage zero here, it will reset the slider to 0 @@ -230,10 +220,14 @@ export const RecurringDonationCard = () => { selectedToken === undefined || tokenBalance === undefined || amount === 0n || - percentage === 0 || + perMonthAmount === 0n || isTotalStreamExceed || amount > tokenBalance; + const percentage = amount + ? Number((perMonthAmount * 1000n) / amount) / 10 + : 0; + return ( <> @@ -372,7 +366,7 @@ export const RecurringDonationCard = () => { id: 'label.amount_to_donate_monthly', })} </Caption> - <Flex gap='4px' $alignItems='center'> + <Flex gap='16px' $alignItems='center'> <StyledSlider min={0} max={100} @@ -389,38 +383,40 @@ export const RecurringDonationCard = () => { }, }} onChange={(value: any) => { - const _value = Array.isArray(value) - ? value[0] - : value; - setPercentage(mapValue(_value)); + const _value = value as number; + const _percentage = mapValue(_value); + const _perMonthAmount = + BigInt( + new BigNumber( + (amount || 0n).toString(), + ) + .multipliedBy(_percentage) + .toFixed(0), + ) / 100n; + console.log( + '_perMonthAmount', + _perMonthAmount, + _value, + _percentage, + ); + setPerMonthAmount(_perMonthAmount); + // setPercentage(mapValue(_value)); }} - value={mapValueInverse(percentage)} + value={mapValueInverse(percentage.valueOf())} disabled={amount === 0n} /> <InputSlider - amount={totalPerMonth} - // setAmount={setAmount} + amount={perMonthAmount} + setAmount={setPerMonthAmount} maxAmount={amount} decimals={selectedToken?.token.decimals || 18} - setAmount={value => { - console.log({ value }); - console.log({ totalPerMonth }); - BigInt(totalPerMonth); - const percentage = - amount === 0n - ? 0 - : (BigInt(value.toString()) * - BigInt(100)) / - BigInt(amount); - console.log({ percentage }); - console.log(Number(percentage)); - setPercentage(mapValue(Number(percentage))); - }} disabled={selectedToken === undefined} - className={percentage > 100 ? 'error' : ''} + className={ + perMonthAmount > amount ? 'error' : '' + } /> </Flex> - {percentage > 100 && ( + {perMonthAmount > amount && ( <RecurringMessage> {formatMessage({ id: 'label.recurring_donation_maximum', @@ -438,10 +434,10 @@ export const RecurringDonationCard = () => { </Flex> <Flex gap='4px'> <Caption $medium> - {amount !== 0n && percentage !== 0 + {amount !== 0n && perMonthAmount !== 0n ? limitFraction( formatUnits( - totalPerMonth, + perMonthAmount, selectedToken?.token .decimals || 18, ), @@ -615,7 +611,7 @@ export const RecurringDonationCard = () => { </Caption> <Flex gap='4px'> <Caption> - {amount !== 0n && percentage !== 0 + {amount !== 0n && perMonthAmount !== 0n ? limitFraction( formatUnits( projectPerMonth, @@ -650,7 +646,8 @@ export const RecurringDonationCard = () => { </Caption> <Flex gap='4px'> <Caption> - {amount !== 0n && percentage !== 0 + {amount !== 0n && + perMonthAmount !== 0n ? limitFraction( formatUnits( givethPerMonth, @@ -679,10 +676,10 @@ export const RecurringDonationCard = () => { </Caption> <Flex gap='4px'> <Caption $medium> - {amount !== 0n && percentage !== 0 + {amount !== 0n && perMonthAmount !== 0n ? limitFraction( formatUnits( - totalPerMonth, + perMonthAmount, selectedToken?.token .decimals || 18, ), @@ -743,7 +740,7 @@ export const RecurringDonationCard = () => { isGivethProject || isUpdating ? 0 : donationToGiveth } amount={amount} - percentage={percentage} + percentage={10} isUpdating={isUpdating} anonymous={anonymous} /> From f9a0a2e9f25e684b163a4c9cf759901f50aaa120 Mon Sep 17 00:00:00 2001 From: Cherik <Pourcheriki@gmail.com> Date: Mon, 20 May 2024 21:01:58 +0330 Subject: [PATCH 13/90] update RecurringDonationModal to use perMonthAmount instead of percentage --- .../views/donate/RecurringDonationCard.tsx | 5 +---- .../RecurringDonationModal.tsx | 21 +++++++------------ 2 files changed, 8 insertions(+), 18 deletions(-) diff --git a/src/components/views/donate/RecurringDonationCard.tsx b/src/components/views/donate/RecurringDonationCard.tsx index 8aceb377d8..9184141f47 100644 --- a/src/components/views/donate/RecurringDonationCard.tsx +++ b/src/components/views/donate/RecurringDonationCard.tsx @@ -202,14 +202,12 @@ export const RecurringDonationCard = () => { if (_userStreamOnSelectedToken) { setUserStreamOnSelectedToken(_userStreamOnSelectedToken); - // setPercentage(parseFloat(_percentage.toString())); setPerMonthAmount( BigInt(_userStreamOnSelectedToken.currentFlowRate) * ONE_MONTH_SECONDS, ); } else { setUserStreamOnSelectedToken(undefined); - //Please don't make percentage zero here, it will reset the slider to 0 } } catch (error) { showToastError(error); @@ -400,7 +398,6 @@ export const RecurringDonationCard = () => { _percentage, ); setPerMonthAmount(_perMonthAmount); - // setPercentage(mapValue(_value)); }} value={mapValueInverse(percentage.valueOf())} disabled={amount === 0n} @@ -740,7 +737,7 @@ export const RecurringDonationCard = () => { isGivethProject || isUpdating ? 0 : donationToGiveth } amount={amount} - percentage={10} + perMonthAmount={perMonthAmount} isUpdating={isUpdating} anonymous={anonymous} /> diff --git a/src/components/views/donate/RecurringDonationModal/RecurringDonationModal.tsx b/src/components/views/donate/RecurringDonationModal/RecurringDonationModal.tsx index 89623b0196..bdc5bf62d6 100644 --- a/src/components/views/donate/RecurringDonationModal/RecurringDonationModal.tsx +++ b/src/components/views/donate/RecurringDonationModal/RecurringDonationModal.tsx @@ -9,7 +9,6 @@ import styled from 'styled-components'; import { Framework, type Operation } from '@superfluid-finance/sdk-core'; import { useAccount } from 'wagmi'; import { useIntl } from 'react-intl'; -import BigNumber from 'bignumber.js'; import { formatUnits } from 'viem'; import { Modal } from '@/components/modals/Modal'; import { useModalAnimation } from '@/hooks/useModalAnimation'; @@ -44,7 +43,7 @@ import { ensureCorrectNetwork } from '@/helpers/network'; interface IRecurringDonationModalProps extends IModal { donationToGiveth: number; amount: bigint; - percentage: number; + perMonthAmount: bigint; isUpdating?: boolean; anonymous: boolean; } @@ -120,7 +119,7 @@ const RecurringDonationInnerModal: FC<IRecurringDonationInnerModalProps> = ({ step, setStep, amount, - percentage, + perMonthAmount, donationToGiveth, setShowModal, isUpdating, @@ -240,7 +239,7 @@ const RecurringDonationInnerModal: FC<IRecurringDonationInnerModalProps> = ({ } const _flowRate = - (totalPerMonth * BigInt(100 - donationToGiveth)) / + (perMonthAmount * BigInt(100 - donationToGiveth)) / 100n / ONE_MONTH_SECONDS; @@ -273,7 +272,7 @@ const RecurringDonationInnerModal: FC<IRecurringDonationInnerModalProps> = ({ } const _newFlowRate = - (totalPerMonth * BigInt(donationToGiveth)) / + (perMonthAmount * BigInt(donationToGiveth)) / 100n / ONE_MONTH_SECONDS; @@ -489,15 +488,9 @@ const RecurringDonationInnerModal: FC<IRecurringDonationInnerModalProps> = ({ } }; - const totalPerMonth = - BigInt( - new BigNumber((amount || 0n).toString()) - .multipliedBy(percentage) - .toFixed(0), - ) / 100n; const projectPerMonth = - (totalPerMonth * BigInt(100 - donationToGiveth)) / 100n; - const givethPerMonth = totalPerMonth - projectPerMonth; + (perMonthAmount * BigInt(100 - donationToGiveth)) / 100n; + const givethPerMonth = perMonthAmount - projectPerMonth; return ( <Wrapper> @@ -530,7 +523,7 @@ const RecurringDonationInnerModal: FC<IRecurringDonationInnerModalProps> = ({ </Items> <RunOutInfo superTokenBalance={amount} - streamFlowRatePerMonth={totalPerMonth} + streamFlowRatePerMonth={perMonthAmount} symbol={selectedToken?.token.symbol || ''} /> <ActionButton From ea6a80802ca0c9a9cd4e501344fea77f3328b994 Mon Sep 17 00:00:00 2001 From: Cherik <Pourcheriki@gmail.com> Date: Mon, 20 May 2024 21:03:42 +0330 Subject: [PATCH 14/90] update input styles --- src/components/views/donate/RecurringDonationCard.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/components/views/donate/RecurringDonationCard.tsx b/src/components/views/donate/RecurringDonationCard.tsx index 9184141f47..895ad7a428 100644 --- a/src/components/views/donate/RecurringDonationCard.tsx +++ b/src/components/views/donate/RecurringDonationCard.tsx @@ -857,8 +857,14 @@ const InputSlider = styled(AmountInput)` width: 27%; border: 2px solid ${neutralColors.gray[300]}; border-radius: 8px; - padding: 2px; + padding: 4px; #amount-input { + border: none; + flex: 1; + font-family: Red Hat Text; + font-size: 16px; + font-style: normal; + line-height: 150%; /* 24px */ width: 100%; } &&.error { From 0a12a49ced24b2c7918e7459422e6ffa09ff22fc Mon Sep 17 00:00:00 2001 From: kkatusic <kkatusic@gmail.com> Date: Tue, 21 May 2024 10:12:33 +0200 Subject: [PATCH 15/90] removing console.log functions --- src/components/views/donate/RecurringDonationCard.tsx | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/components/views/donate/RecurringDonationCard.tsx b/src/components/views/donate/RecurringDonationCard.tsx index 895ad7a428..67e3aec01b 100644 --- a/src/components/views/donate/RecurringDonationCard.tsx +++ b/src/components/views/donate/RecurringDonationCard.tsx @@ -167,7 +167,6 @@ export const RecurringDonationCard = () => { : brandColors.giv; const handleDonate = () => { - console.log('isSignedIn', isSignedIn); if (anchorContractAddress) { if (isSignedIn) { setShowRecurringDonationModal(true); @@ -391,12 +390,6 @@ export const RecurringDonationCard = () => { .multipliedBy(_percentage) .toFixed(0), ) / 100n; - console.log( - '_perMonthAmount', - _perMonthAmount, - _value, - _percentage, - ); setPerMonthAmount(_perMonthAmount); }} value={mapValueInverse(percentage.valueOf())} From 9b2b0a3826e446602d2337d3777a597addf96faa Mon Sep 17 00:00:00 2001 From: kkatusic <kkatusic@gmail.com> Date: Tue, 21 May 2024 15:42:34 +0200 Subject: [PATCH 16/90] Relovning default browser language started --- pages/_app.tsx | 3 +++ src/lib/helpers.ts | 7 ++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/pages/_app.tsx b/pages/_app.tsx index e1c298b711..e08f555893 100644 --- a/pages/_app.tsx +++ b/pages/_app.tsx @@ -66,6 +66,8 @@ export const IntlMessages = { const defaultLocale = process.env.defaultLocale; +console.log('defaultLocale', defaultLocale); + function renderSnippet() { const opts = { apiKey: @@ -134,6 +136,7 @@ function MyApp({ Component, pageProps }: AppProps) { const asyncFunc = async () => { const storageLocale = localStorage.getItem(StorageLabel.LOCALE); const navigatorLocale = getLocaleFromNavigator(); + console.log('navigatorLocale', navigatorLocale); let ipLocale; if (!storageLocale) { ipLocale = await getLocaleFromIP(); diff --git a/src/lib/helpers.ts b/src/lib/helpers.ts index 849dabd661..7f6bc82e1d 100644 --- a/src/lib/helpers.ts +++ b/src/lib/helpers.ts @@ -11,6 +11,7 @@ import { captureException } from '@sentry/nextjs'; // import { type Address, erc20Abi } from 'wagmi'; import { Address, Chain, parseEther, parseUnits, erc20Abi } from 'viem'; import { WalletAdapterNetwork } from '@solana/wallet-adapter-base'; +import getConfig from 'next/config'; import { giveconomyTabs } from '@/lib/constants/Tabs'; import { getRequest } from '@/helpers/requests'; import { IUser, IWalletAddress } from '@/apollo/types/types'; @@ -26,7 +27,8 @@ interface TransactionParams { value: string; } -const defaultLocale = process.env.defaultLocale; +const defaultLocale = process.env.i18n; +console.log('defaultLocale', defaultLocale); // 'en-US' const locales = process.env.locales; export const fullPath = (path: string) => `${config.FRONTEND_LINK}${path}`; @@ -636,9 +638,12 @@ export const matchLocaleToSystemLocals = (locale: string) => { 'do', ]; const lowercaseLocale = locale.toLowerCase(); + console.log('lowercaseLocale', lowercaseLocale); const isSpanish = spanishSpeakingCountryCodes.includes(lowercaseLocale); + console.log('isSpanish', isSpanish); const _locale = isSpanish ? 'es' : lowercaseLocale; const isValidLocale = locales?.includes(_locale); + console.log('isValidLocale', isValidLocale); return isValidLocale ? _locale : undefined; }; From fe50d0ff03f37180d411ca3869d84bf8a1a65fb9 Mon Sep 17 00:00:00 2001 From: Mitch Oz <divine_comedian@protonmail.com> Date: Tue, 21 May 2024 14:34:04 -0600 Subject: [PATCH 17/90] fix bug for showing empty rarible link --- .../views/userProfile/UserProfile.view.tsx | 39 +++++++++++-------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/src/components/views/userProfile/UserProfile.view.tsx b/src/components/views/userProfile/UserProfile.view.tsx index 39a3758322..f9de621c8f 100644 --- a/src/components/views/userProfile/UserProfile.view.tsx +++ b/src/components/views/userProfile/UserProfile.view.tsx @@ -125,7 +125,6 @@ const UserProfileView: FC<IUserProfileView> = () => { <H5>{formatMessage({ id: 'label.please_sign_in' })}</H5> </NoUserContainer> ); - return ( <> <ProfileHeader> @@ -194,22 +193,28 @@ const UserProfileView: FC<IUserProfileView> = () => { </GLink> </RaribleLinkContainer> ) : ( - <RaribleLinkContainer> - <a - href={ - config.RARIBLE_ADDRESS + - 'token/' + - pfpToken?.id.replace('-', ':') - } - target='_blank' - rel='noreferrer' - > - <GLink> - View this Givers PFP on Rarible{' '} - <IconExternalLink16 /> - </GLink> - </a> - </RaribleLinkContainer> + pfpToken && ( + <RaribleLinkContainer> + <a + href={ + config.RARIBLE_ADDRESS + + 'token/' + + pfpToken?.id.replace( + '-', + ':', + ) + } + target='_blank' + rel='noreferrer' + > + <GLink> + View this Givers PFP on + Rarible{' '} + <IconExternalLink16 /> + </GLink> + </a> + </RaribleLinkContainer> + ) ))} </UserInfoRow> </UserInfo> From b29e882f6070cc5b35503b721dea367db5f07e7b Mon Sep 17 00:00:00 2001 From: kkatusic <kkatusic@gmail.com> Date: Wed, 22 May 2024 09:26:00 +0200 Subject: [PATCH 18/90] adding missing env variables --- next.config.js | 4 ++++ src/lib/helpers.ts | 5 ----- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/next.config.js b/next.config.js index ff45bea733..d35f345841 100644 --- a/next.config.js +++ b/next.config.js @@ -139,6 +139,10 @@ const moduleExports = withBundleAnalyzer({ defaultLocale, localeDetection: false, }, + env: { + locales, + defaultLocale, + }, headers: () => { return [ { diff --git a/src/lib/helpers.ts b/src/lib/helpers.ts index 7f6bc82e1d..4b0b5b9b92 100644 --- a/src/lib/helpers.ts +++ b/src/lib/helpers.ts @@ -11,7 +11,6 @@ import { captureException } from '@sentry/nextjs'; // import { type Address, erc20Abi } from 'wagmi'; import { Address, Chain, parseEther, parseUnits, erc20Abi } from 'viem'; import { WalletAdapterNetwork } from '@solana/wallet-adapter-base'; -import getConfig from 'next/config'; import { giveconomyTabs } from '@/lib/constants/Tabs'; import { getRequest } from '@/helpers/requests'; import { IUser, IWalletAddress } from '@/apollo/types/types'; @@ -28,7 +27,6 @@ interface TransactionParams { } const defaultLocale = process.env.i18n; -console.log('defaultLocale', defaultLocale); // 'en-US' const locales = process.env.locales; export const fullPath = (path: string) => `${config.FRONTEND_LINK}${path}`; @@ -638,12 +636,9 @@ export const matchLocaleToSystemLocals = (locale: string) => { 'do', ]; const lowercaseLocale = locale.toLowerCase(); - console.log('lowercaseLocale', lowercaseLocale); const isSpanish = spanishSpeakingCountryCodes.includes(lowercaseLocale); - console.log('isSpanish', isSpanish); const _locale = isSpanish ? 'es' : lowercaseLocale; const isValidLocale = locales?.includes(_locale); - console.log('isValidLocale', isValidLocale); return isValidLocale ? _locale : undefined; }; From f3f33f4a475c8e803b48ebbceba821075d947290 Mon Sep 17 00:00:00 2001 From: Meriem-B <135605616+Meriem-B@users.noreply.github.com> Date: Wed, 22 May 2024 13:00:54 +0100 Subject: [PATCH 19/90] feat: add base net config for prod/dev enviroments --- src/config/development.tsx | 15 +++++++++++++++ src/config/production.tsx | 16 ++++++++++++++++ src/configuration.ts | 1 + src/types/config.ts | 2 ++ 4 files changed, 34 insertions(+) diff --git a/src/config/development.tsx b/src/config/development.tsx index dd588d7643..791f98e251 100644 --- a/src/config/development.tsx +++ b/src/config/development.tsx @@ -6,6 +6,7 @@ import { optimismSepolia, polygon, arbitrumSepolia, + baseSepolia, } from 'wagmi/chains'; import { WalletAdapterNetwork } from '@solana/wallet-adapter-base'; import { type Chain } from 'viem'; @@ -51,6 +52,7 @@ const OPTIMISM_NETWORK_NUMBER = 11155420; const CELO_NETWORK_NUMBER = 44787; const CLASSIC_NETWORK_NUMBER = 63; const ARBITRUM_NETWORK_NUMBER = 421614; +const BASE_NETWORK_NUMBER = 84532; const SOLANA_NETWORK: NonEVMChain = { id: 0, @@ -96,6 +98,7 @@ const EVM_CHAINS = [ optimismSepolia, celoAlfajores, arbitrumSepolia, + baseSepolia, classic, ] as readonly [Chain, ...Chain[]]; @@ -120,6 +123,7 @@ const config: EnvConfig = { CELO_NETWORK_NUMBER: CELO_NETWORK_NUMBER, ARBITRUM_NETWORK_NUMBER: ARBITRUM_NETWORK_NUMBER, CLASSIC_NETWORK_NUMBER: CLASSIC_NETWORK_NUMBER, + BASE_NETWORK_NUMBER: BASE_NETWORK_NUMBER, RARIBLE_ADDRESS: 'https://testnet.rarible.com/', MAINNET_CONFIG: { @@ -428,6 +432,17 @@ const config: EnvConfig = { chainLogo: (logoSize?: number) => <IconArbitrum size={logoSize} />, }, + BASE_CONFIG: { + ...baseSepolia, + chainType: ChainType.EVM, + coingeckoChainName: 'base', + gasPreference: { + // Keep it empty for automatic configuration + }, + //TODO: should change the icon + chainLogo: (logoSize?: number) => <IconUnknown size={logoSize} />, + }, + CLASSIC_CONFIG: { ...classic, //TODO: should change the icon diff --git a/src/config/production.tsx b/src/config/production.tsx index e9d0b352ca..e37ffe2236 100644 --- a/src/config/production.tsx +++ b/src/config/production.tsx @@ -6,6 +6,7 @@ import { optimism, polygon, arbitrum, + base, } from '@wagmi/core/chains'; import { WalletAdapterNetwork } from '@solana/wallet-adapter-base'; import React from 'react'; @@ -24,6 +25,7 @@ import { IconPolygon } from '@/components/Icons/Polygon'; import { IconOptimism } from '@/components/Icons/Optimism'; import { IconCelo } from '@/components/Icons/Celo'; import { IconClassic } from '@/components/Icons/Classic'; +import { IconUnknown } from '@/components/Icons/Unknown'; import IconSolana from '@/components/Icons/Solana'; import IconArbitrum from '@/components/Icons/Arbitrum'; @@ -37,6 +39,7 @@ const POLYGON_NETWORK_NUMBER = 137; const OPTIMISM_NETWORK_NUMBER = 10; const CELO_NETWORK_NUMBER = 42220; const ARBITRUM_NETWORK_NUMBER = 42161; +const BASE_NETWORK_NUMBER = 8453; const CLASSIC_NETWORK_NUMBER = 61; const SOLANA_NETWORK: NonEVMChain = { id: 0, @@ -60,6 +63,7 @@ const EVM_CHAINS = [ celo, arbitrum, classic, + base, ] as readonly [Chain, ...Chain[]]; const NON_EVM_CHAINS: NonEVMChain[] = [SOLANA_NETWORK]; @@ -93,6 +97,7 @@ const config: EnvConfig = { OPTIMISM_NETWORK_NUMBER: OPTIMISM_NETWORK_NUMBER, CELO_NETWORK_NUMBER: CELO_NETWORK_NUMBER, ARBITRUM_NETWORK_NUMBER: ARBITRUM_NETWORK_NUMBER, + BASE_NETWORK_NUMBER: BASE_NETWORK_NUMBER, CLASSIC_NETWORK_NUMBER: CLASSIC_NETWORK_NUMBER, RARIBLE_ADDRESS: 'https://rarible.com/', @@ -520,6 +525,17 @@ const config: EnvConfig = { coingeckoChainName: 'arbitrum', chainLogo: (logoSize = 24) => <IconArbitrum size={logoSize} />, }, + BASE_CONFIG: { + ...base, + chainType: ChainType.EVM, + gasPreference: { + // Keep it empty for automatic configuration + }, + subgraphAddress: '', + coingeckoChainName: 'base', + //TODO: should change the icon + chainLogo: (logoSize = 24) => <IconUnknown size={logoSize} />, + }, CLASSIC_CONFIG: { ...classic, chainType: ChainType.EVM, diff --git a/src/configuration.ts b/src/configuration.ts index 3afa1029c4..64c2db92b1 100644 --- a/src/configuration.ts +++ b/src/configuration.ts @@ -17,6 +17,7 @@ const EVM_NETWORKS_CONFIG = { [envConfig.OPTIMISM_NETWORK_NUMBER]: envConfig.OPTIMISM_CONFIG, [envConfig.CELO_NETWORK_NUMBER]: envConfig.CELO_CONFIG, [envConfig.ARBITRUM_NETWORK_NUMBER]: envConfig.ARBITRUM_CONFIG, + [envConfig.BASE_NETWORK_NUMBER]: envConfig.BASE_CONFIG, [envConfig.CLASSIC_NETWORK_NUMBER]: envConfig.CLASSIC_CONFIG, }; diff --git a/src/types/config.ts b/src/types/config.ts index e4662982ae..1bb20552a2 100644 --- a/src/types/config.ts +++ b/src/types/config.ts @@ -209,6 +209,7 @@ export interface EnvConfig { OPTIMISM_NETWORK_NUMBER: number; CELO_NETWORK_NUMBER: number; ARBITRUM_NETWORK_NUMBER: number; + BASE_NETWORK_NUMBER: number; CLASSIC_NETWORK_NUMBER: number; MAINNET_CONFIG: MainnetNetworkConfig; GNOSIS_CONFIG: GnosisNetworkConfig; @@ -216,6 +217,7 @@ export interface EnvConfig { OPTIMISM_CONFIG: OptimismNetworkConfig; CELO_CONFIG: NetworkConfig; ARBITRUM_CONFIG: NetworkConfig; + BASE_CONFIG: NetworkConfig; CLASSIC_CONFIG: NetworkConfig; BACKEND_LINK: string; FRONTEND_LINK: string; From b8eb1fd715ee922a4e06b5071355c4a6369c2028 Mon Sep 17 00:00:00 2001 From: kkatusic <kkatusic@gmail.com> Date: Wed, 22 May 2024 14:03:17 +0200 Subject: [PATCH 20/90] fixed testing code --- src/lib/helpers.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/helpers.ts b/src/lib/helpers.ts index 4b0b5b9b92..849dabd661 100644 --- a/src/lib/helpers.ts +++ b/src/lib/helpers.ts @@ -26,7 +26,7 @@ interface TransactionParams { value: string; } -const defaultLocale = process.env.i18n; +const defaultLocale = process.env.defaultLocale; const locales = process.env.locales; export const fullPath = (path: string) => `${config.FRONTEND_LINK}${path}`; From baaaeefdf46840cb8b38271292915ef88ae4470c Mon Sep 17 00:00:00 2001 From: kkatusic <kkatusic@gmail.com> Date: Wed, 22 May 2024 14:07:53 +0200 Subject: [PATCH 21/90] removing console log --- pages/_app.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/pages/_app.tsx b/pages/_app.tsx index e08f555893..836f47689c 100644 --- a/pages/_app.tsx +++ b/pages/_app.tsx @@ -136,7 +136,6 @@ function MyApp({ Component, pageProps }: AppProps) { const asyncFunc = async () => { const storageLocale = localStorage.getItem(StorageLabel.LOCALE); const navigatorLocale = getLocaleFromNavigator(); - console.log('navigatorLocale', navigatorLocale); let ipLocale; if (!storageLocale) { ipLocale = await getLocaleFromIP(); From c4a6aeb46b5ac684ba1a21e4acbaa78103f1f631 Mon Sep 17 00:00:00 2001 From: kkatusic <kkatusic@gmail.com> Date: Wed, 22 May 2024 14:14:24 +0200 Subject: [PATCH 22/90] remove more console logs --- pages/_app.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/pages/_app.tsx b/pages/_app.tsx index 836f47689c..e1c298b711 100644 --- a/pages/_app.tsx +++ b/pages/_app.tsx @@ -66,8 +66,6 @@ export const IntlMessages = { const defaultLocale = process.env.defaultLocale; -console.log('defaultLocale', defaultLocale); - function renderSnippet() { const opts = { apiKey: From 4e35fcae101bc1fd6773daac8174d288c86feda8 Mon Sep 17 00:00:00 2001 From: Meriem-B <135605616+Meriem-B@users.noreply.github.com> Date: Wed, 22 May 2024 17:28:12 +0100 Subject: [PATCH 23/90] fix: add base support to the project --- public/images/currencies/base/16.svg | 6 ++++++ src/apollo/types/types.ts | 2 ++ src/components/Icons/Base.tsx | 17 +++++++++++++++++ src/components/NetworkSelector.tsx | 1 + src/components/menu/FilterMenu.tsx | 4 ++++ src/components/modals/DonateWrongNetwork.tsx | 1 + src/config/development.tsx | 4 ++-- src/config/production.tsx | 5 ++--- src/helpers/url.tsx | 6 ++++++ 9 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 public/images/currencies/base/16.svg create mode 100644 src/components/Icons/Base.tsx diff --git a/public/images/currencies/base/16.svg b/public/images/currencies/base/16.svg new file mode 100644 index 0000000000..f0b162ffb2 --- /dev/null +++ b/public/images/currencies/base/16.svg @@ -0,0 +1,6 @@ +<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> + <path fill-rule="evenodd" clip-rule="evenodd" + d="M30.0375 16.0144C30.0375 23.7544 23.7501 30.0288 15.9943 30.0288C8.63601 30.0288 2.59951 24.3811 2 17.1924H20.5619V14.8364H2C2.59951 7.64771 8.63601 2 15.9943 2C23.7501 2 30.0375 8.27446 30.0375 16.0144Z" + fill="black" /> +</svg> + \ No newline at end of file diff --git a/src/apollo/types/types.ts b/src/apollo/types/types.ts index c56aea5271..2a4962105c 100644 --- a/src/apollo/types/types.ts +++ b/src/apollo/types/types.ts @@ -99,6 +99,7 @@ export enum EProjectsFilter { ACCEPT_FUND_ON_POLYGON = 'AcceptFundOnPolygon', ACCEPT_FUND_ON_CELO = 'AcceptFundOnCelo', ACCEPT_FUND_ON_ARBITRUM = 'AcceptFundOnArbitrum', + ACCEPT_FUND_ON_BASE = 'AcceptFundOnBase', ACCEPT_FUND_ON_OPTIMISM = 'AcceptFundOnOptimism', ACCEPT_FUND_ON_ETC = 'AcceptFundOnETC', ACCEPT_FUND_ON_SOLANA = 'AcceptFundOnSolana', @@ -122,6 +123,7 @@ export enum ECampaignFilterField { AcceptFundOnPolygon = 'acceptFundOnPolygon', AcceptFundOnCelo = 'acceptFundOnCelo', AcceptFundOnArbitrum = 'acceptFundOnArbitrum', + AcceptFundOnBase = 'acceptFundOnBase', AcceptFundOnOptimism = 'acceptFundOnOptimism', AcceptFundOnSolana = 'acceptFundOnSolana', } diff --git a/src/components/Icons/Base.tsx b/src/components/Icons/Base.tsx new file mode 100644 index 0000000000..626a83cc5d --- /dev/null +++ b/src/components/Icons/Base.tsx @@ -0,0 +1,17 @@ +import React, { FC } from 'react'; +import Image from 'next/image'; +import { ICurrencyIconProps } from './type'; + +const IconBase: FC<ICurrencyIconProps> = ({ size = 16 }) => { + return ( + <Image + src={'/images/currencies/base/16.svg'} + alt='Base icon' + width={size} + height={size} + loading='lazy' + /> + ); +}; + +export default IconBase; diff --git a/src/components/NetworkSelector.tsx b/src/components/NetworkSelector.tsx index cfa73de230..f8daeb41da 100644 --- a/src/components/NetworkSelector.tsx +++ b/src/components/NetworkSelector.tsx @@ -40,6 +40,7 @@ const _options = [ { network: config.CLASSIC_CONFIG, active: true }, { network: config.CELO_CONFIG, active: false }, { network: config.ARBITRUM_CONFIG, active: false }, + { network: config.BASE_CONFIG, active: false }, ]; const options = _options.map(o => ({ diff --git a/src/components/menu/FilterMenu.tsx b/src/components/menu/FilterMenu.tsx index 8056168b4f..ab4db28ba2 100644 --- a/src/components/menu/FilterMenu.tsx +++ b/src/components/menu/FilterMenu.tsx @@ -57,6 +57,10 @@ const fundsFilter = [ label: 'Arbitrum', value: EProjectsFilter.ACCEPT_FUND_ON_ARBITRUM, }, + { + label: 'Base', + value: EProjectsFilter.ACCEPT_FUND_ON_BASE, + }, ]; fundsFilter.push({ diff --git a/src/components/modals/DonateWrongNetwork.tsx b/src/components/modals/DonateWrongNetwork.tsx index ddca94ef1d..dc1fe16c77 100644 --- a/src/components/modals/DonateWrongNetwork.tsx +++ b/src/components/modals/DonateWrongNetwork.tsx @@ -44,6 +44,7 @@ const networks = [ config.OPTIMISM_CONFIG, config.CLASSIC_CONFIG, config.SOLANA_CONFIG, + config.BASE_CONFIG, ]; export const DonateWrongNetwork: FC<IDonateWrongNetwork> = props => { diff --git a/src/config/development.tsx b/src/config/development.tsx index 791f98e251..3445b100aa 100644 --- a/src/config/development.tsx +++ b/src/config/development.tsx @@ -24,6 +24,7 @@ import { IconOptimism } from '@/components/Icons/Optimism'; import { IconGnosisChain } from '@/components/Icons/GnosisChain'; import { IconEthereum } from '@/components/Icons/Eth'; import { IconUnknown } from '@/components/Icons/Unknown'; +import IconBase from '@/components/Icons/Base'; import IconSolana from '@/components/Icons/Solana'; import IconArbitrum from '@/components/Icons/Arbitrum'; @@ -439,8 +440,7 @@ const config: EnvConfig = { gasPreference: { // Keep it empty for automatic configuration }, - //TODO: should change the icon - chainLogo: (logoSize?: number) => <IconUnknown size={logoSize} />, + chainLogo: (logoSize?: number) => <IconBase size={logoSize} />, }, CLASSIC_CONFIG: { diff --git a/src/config/production.tsx b/src/config/production.tsx index e37ffe2236..b6c57ef6eb 100644 --- a/src/config/production.tsx +++ b/src/config/production.tsx @@ -25,7 +25,7 @@ import { IconPolygon } from '@/components/Icons/Polygon'; import { IconOptimism } from '@/components/Icons/Optimism'; import { IconCelo } from '@/components/Icons/Celo'; import { IconClassic } from '@/components/Icons/Classic'; -import { IconUnknown } from '@/components/Icons/Unknown'; +import IconBase from '@/components/Icons/Base'; import IconSolana from '@/components/Icons/Solana'; import IconArbitrum from '@/components/Icons/Arbitrum'; @@ -533,8 +533,7 @@ const config: EnvConfig = { }, subgraphAddress: '', coingeckoChainName: 'base', - //TODO: should change the icon - chainLogo: (logoSize = 24) => <IconUnknown size={logoSize} />, + chainLogo: (logoSize = 24) => <IconBase size={logoSize} />, }, CLASSIC_CONFIG: { ...classic, diff --git a/src/helpers/url.tsx b/src/helpers/url.tsx index 40d8f8dbbd..eb13a58626 100644 --- a/src/helpers/url.tsx +++ b/src/helpers/url.tsx @@ -66,6 +66,12 @@ export function campaignLinkGenerator(campaign: ICampaign) { EProjectsFilter.ACCEPT_FUND_ON_ARBITRUM, ); break; + case ECampaignFilterField.AcceptFundOnBase: + params.append( + 'filter', + EProjectsFilter.ACCEPT_FUND_ON_BASE, + ); + break; case ECampaignFilterField.AcceptFundOnOptimism: params.append( 'filter', From 8a5b5822f663216e25e2843f9e9930d9dac5c754 Mon Sep 17 00:00:00 2001 From: Cherik <Pourcheriki@gmail.com> Date: Sat, 25 May 2024 11:47:26 +0330 Subject: [PATCH 24/90] add className to GIVBackToast --- src/components/views/donate/GIVBackToast.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/components/views/donate/GIVBackToast.tsx b/src/components/views/donate/GIVBackToast.tsx index df20b0d142..0a5cf56175 100644 --- a/src/components/views/donate/GIVBackToast.tsx +++ b/src/components/views/donate/GIVBackToast.tsx @@ -9,8 +9,9 @@ const GIVBackToast = (props: { projectEligible?: boolean; tokenEligible?: boolean; userEligible?: boolean; + className?: string; }) => { - const { projectEligible, tokenEligible, userEligible } = props; + const { projectEligible, tokenEligible, userEligible, className } = props; const { formatMessage } = useIntl(); let message: JSX.Element | string, type = EToastType.Warning; @@ -43,7 +44,7 @@ const GIVBackToast = (props: { } return ( - <ToastContainer> + <ToastContainer className={className}> <InlineToast noIcon type={type} From 1d4aa5d9926ec39407f66d35b59a4d2a4ca503a7 Mon Sep 17 00:00:00 2001 From: Cherik <Pourcheriki@gmail.com> Date: Sat, 25 May 2024 11:51:43 +0330 Subject: [PATCH 25/90] add GIVBackToastStyled --- .../views/donate/RecurringDonationCard.tsx | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/components/views/donate/RecurringDonationCard.tsx b/src/components/views/donate/RecurringDonationCard.tsx index 67e3aec01b..4f8f670633 100644 --- a/src/components/views/donate/RecurringDonationCard.tsx +++ b/src/components/views/donate/RecurringDonationCard.tsx @@ -54,6 +54,8 @@ import Routes from '@/lib/constants/Routes'; import { useModalCallback } from '@/hooks/useModalCallback'; import { useAppSelector } from '@/features/hooks'; import { findAnchorContractAddress } from '@/helpers/superfluid'; +import GIVBackToast from './GIVBackToast'; +import usePurpleList from '@/hooks/usePurpleList'; // These two functions are used to make the slider more user friendly by mapping the slider's value to a new range. /** @@ -166,6 +168,9 @@ export const RecurringDonationCard = () => { ? semanticColors.punch : brandColors.giv; + const projectIsGivBackEligible = !!project.verified; + const isPurpleListed = usePurpleList(); + const handleDonate = () => { if (anchorContractAddress) { if (isSignedIn) { @@ -560,6 +565,13 @@ export const RecurringDonationCard = () => { </Flex> )} </RecurringSection> + {selectedToken && ( + <GIVBackToastStyled + projectEligible={projectIsGivBackEligible} + tokenEligible={true} + userEligible={!isPurpleListed} + /> + )} {userStreamOnSelectedToken ? ( isUpdating ? ( <ActionButton @@ -783,13 +795,6 @@ const RecurringSection = styled(Flex)` text-align: left; `; -// const RecurringSectionTitle = styled(B)` -// width: 100%; -// padding-bottom: 8px; -// border-bottom: 1px solid ${neutralColors.gray[300]}; -// text-align: left; -// `; - export const SelectTokenWrapper = styled(Flex)` cursor: pointer; gap: 16px; @@ -903,3 +908,11 @@ const TotalMonthlyStream = styled.b` const ManageCaption = styled(Caption)` color: ${brandColors.giv[500]}; `; + +const GIVBackToastStyled = styled(GIVBackToast)` + margin: 0; + width: 100%; + & > div { + margin: 0; + } +`; From 8222746312f7b8ab0547911d238dc917ca19d6d4 Mon Sep 17 00:00:00 2001 From: Cherik <Pourcheriki@gmail.com> Date: Sat, 25 May 2024 18:43:14 +0330 Subject: [PATCH 26/90] move isPurpleListed to component --- src/components/views/donate/CryptoDonation.tsx | 4 ---- src/components/views/donate/GIVBackToast.tsx | 7 ++++--- src/components/views/donate/RecurringDonationCard.tsx | 3 --- 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/components/views/donate/CryptoDonation.tsx b/src/components/views/donate/CryptoDonation.tsx index f64901bcb8..c9ded262db 100644 --- a/src/components/views/donate/CryptoDonation.tsx +++ b/src/components/views/donate/CryptoDonation.tsx @@ -47,7 +47,6 @@ import { getERC20Info } from '@/lib/contracts'; import GIVBackToast from '@/components/views/donate/GIVBackToast'; import { DonateWrongNetwork } from '@/components/modals/DonateWrongNetwork'; import { useAppDispatch, useAppSelector } from '@/features/hooks'; -import usePurpleList from '@/hooks/usePurpleList'; import DonateToGiveth from '@/components/views/donate/DonateToGiveth'; import TotalDonation from '@/components/views/donate/TotalDonation'; import SaveGasFees from '@/components/views/donate/SaveGasFees'; @@ -77,8 +76,6 @@ const CryptoDonation: FC = () => { const { formatMessage } = useIntl(); const { isSignedIn } = useAppSelector(state => state.user); - const isPurpleListed = usePurpleList(); - const { project, hasActiveQFRound } = useDonateData(); const dispatch = useAppDispatch(); @@ -518,7 +515,6 @@ const CryptoDonation: FC = () => { <GIVBackToast projectEligible={projectIsGivBackEligible} tokenEligible={tokenIsGivBackEligible} - userEligible={!isPurpleListed} /> )} {!noDonationSplit ? ( diff --git a/src/components/views/donate/GIVBackToast.tsx b/src/components/views/donate/GIVBackToast.tsx index 0a5cf56175..9a06e73322 100644 --- a/src/components/views/donate/GIVBackToast.tsx +++ b/src/components/views/donate/GIVBackToast.tsx @@ -4,18 +4,19 @@ import { useIntl } from 'react-intl'; import links from '@/lib/constants/links'; import ExternalLink from '@/components/ExternalLink'; import InlineToast, { EToastType } from '@/components/toasts/InlineToast'; +import usePurpleList from '@/hooks/usePurpleList'; const GIVBackToast = (props: { projectEligible?: boolean; tokenEligible?: boolean; - userEligible?: boolean; className?: string; }) => { - const { projectEligible, tokenEligible, userEligible, className } = props; + const { projectEligible, tokenEligible, className } = props; + const isPurpleListed = usePurpleList(); const { formatMessage } = useIntl(); let message: JSX.Element | string, type = EToastType.Warning; - if (!userEligible) { + if (isPurpleListed) { message = formatMessage({ id: 'label.your_current_wallet_is_associated_with_a_giveth_project', }); diff --git a/src/components/views/donate/RecurringDonationCard.tsx b/src/components/views/donate/RecurringDonationCard.tsx index 4f8f670633..1e914a1668 100644 --- a/src/components/views/donate/RecurringDonationCard.tsx +++ b/src/components/views/donate/RecurringDonationCard.tsx @@ -55,7 +55,6 @@ import { useModalCallback } from '@/hooks/useModalCallback'; import { useAppSelector } from '@/features/hooks'; import { findAnchorContractAddress } from '@/helpers/superfluid'; import GIVBackToast from './GIVBackToast'; -import usePurpleList from '@/hooks/usePurpleList'; // These two functions are used to make the slider more user friendly by mapping the slider's value to a new range. /** @@ -169,7 +168,6 @@ export const RecurringDonationCard = () => { : brandColors.giv; const projectIsGivBackEligible = !!project.verified; - const isPurpleListed = usePurpleList(); const handleDonate = () => { if (anchorContractAddress) { @@ -569,7 +567,6 @@ export const RecurringDonationCard = () => { <GIVBackToastStyled projectEligible={projectIsGivBackEligible} tokenEligible={true} - userEligible={!isPurpleListed} /> )} {userStreamOnSelectedToken ? ( From e2be96433154c7f6c8f59d89a6d01ea724eebf28 Mon Sep 17 00:00:00 2001 From: Ramin <raminramazanpour@gmail.com> Date: Sat, 25 May 2024 23:55:00 +0330 Subject: [PATCH 27/90] set Giveth wallet address client side --- src/components/views/donate/DonateModal.tsx | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/components/views/donate/DonateModal.tsx b/src/components/views/donate/DonateModal.tsx index 531c68d54d..5e6e90be63 100644 --- a/src/components/views/donate/DonateModal.tsx +++ b/src/components/views/donate/DonateModal.tsx @@ -123,11 +123,13 @@ const DonateModal: FC<IDonateModalProps> = props => { chainId, walletChainType, ); - const givethWalletAddress = findMatchingWalletAddress( - givethAddresses, - chainId, - walletChainType, - ); + const givethWalletAddress = () => { + return findMatchingWalletAddress( + givethProject?.addresses, + chainId, + walletChainType, + ); + }; const { projectDonation, givethDonation } = calcDonationShare( amount, @@ -191,7 +193,7 @@ const DonateModal: FC<IDonateModalProps> = props => { token, setFailedModalType, }; - if (!projectWalletAddress || !givethWalletAddress) { + if (!projectWalletAddress || !givethWalletAddress()) { setDonating(false); return showToastError( `${ @@ -217,7 +219,7 @@ const DonateModal: FC<IDonateModalProps> = props => { if (isDonatingToGiveth) { createSecondDonation({ ...txProps, - walletAddress: givethWalletAddress, + walletAddress: givethWalletAddress()!, amount: givethDonation, projectId: config.GIVETH_PROJECT_ID, setFailedModalType, From 0e75ce4c6c82e5c29d70aa752a943227abd5a811 Mon Sep 17 00:00:00 2001 From: Ramin <raminramazanpour@gmail.com> Date: Sun, 26 May 2024 00:04:17 +0330 Subject: [PATCH 28/90] replace isLoadingGivethAddress with isDonatingToGiveth --- src/components/views/donate/DonateModal.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/donate/DonateModal.tsx b/src/components/views/donate/DonateModal.tsx index 5e6e90be63..706715f74c 100644 --- a/src/components/views/donate/DonateModal.tsx +++ b/src/components/views/donate/DonateModal.tsx @@ -110,7 +110,7 @@ const DonateModal: FC<IDonateModalProps> = props => { console.log('Failed to fetch Giveth wallet address', e); } }; - if (isLoadingGivethAddress) fetchGivethProject().then(); + if (isDonatingToGiveth) fetchGivethProject().then(); }, []); const tokenPrice = useTokenPrice(token); From 3597666a0fa2c6fd6efb29e79c0948540b0bde7a Mon Sep 17 00:00:00 2001 From: Ramin <raminramazanpour@gmail.com> Date: Sun, 26 May 2024 00:36:25 +0330 Subject: [PATCH 29/90] add cache-first to giveth address --- src/components/views/donate/DonateModal.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/views/donate/DonateModal.tsx b/src/components/views/donate/DonateModal.tsx index 706715f74c..bd10fe85b0 100644 --- a/src/components/views/donate/DonateModal.tsx +++ b/src/components/views/donate/DonateModal.tsx @@ -100,7 +100,7 @@ const DonateModal: FC<IDonateModalProps> = props => { const { data } = await client.query({ query: FETCH_GIVETH_PROJECT_BY_ID, variables: { id: config.GIVETH_PROJECT_ID }, - fetchPolicy: 'no-cache', + fetchPolicy: 'cache-first', }); setGivethProject(data.projectById); setIsLoadingGivethAddress(false); @@ -108,6 +108,7 @@ const DonateModal: FC<IDonateModalProps> = props => { setIsLoadingGivethAddress(false); showToastError('Failed to fetch Giveth wallet address'); console.log('Failed to fetch Giveth wallet address', e); + closeModal(); } }; if (isDonatingToGiveth) fetchGivethProject().then(); From d0b75286d666776823b5b0ad123ca5de46cab368 Mon Sep 17 00:00:00 2001 From: Cherik <Pourcheriki@gmail.com> Date: Sun, 26 May 2024 12:32:10 +0330 Subject: [PATCH 30/90] make ProjectActions component stylable --- .../views/userProfile/projectsTab/ProjectActions.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/components/views/userProfile/projectsTab/ProjectActions.tsx b/src/components/views/userProfile/projectsTab/ProjectActions.tsx index 7c0ba09e84..8432d10593 100644 --- a/src/components/views/userProfile/projectsTab/ProjectActions.tsx +++ b/src/components/views/userProfile/projectsTab/ProjectActions.tsx @@ -25,6 +25,7 @@ interface IProjectActions { setSelectedProject: Dispatch<SetStateAction<IProject | undefined>>; setShowAddressModal: Dispatch<SetStateAction<boolean>>; setShowClaimModal?: Dispatch<SetStateAction<boolean>>; + className?: string; } const ProjectActions = (props: IProjectActions) => { @@ -33,6 +34,7 @@ const ProjectActions = (props: IProjectActions) => { setSelectedProject, setShowAddressModal, setShowClaimModal, + className, } = props; const status = project.status.name; const isCancelled = status === EProjectStatus.CANCEL; @@ -109,6 +111,7 @@ const ProjectActions = (props: IProjectActions) => { onMouseLeave={() => setIsHover(false)} $isOpen={isHover} $isCancelled={isCancelled} + className={className} > {isCancelled ? ( <CancelledWrapper>CANCELLED</CancelledWrapper> From ca46cdf23b2513a6b7b501434f1807788dd6b43b Mon Sep 17 00:00:00 2001 From: Cherik <Pourcheriki@gmail.com> Date: Sun, 26 May 2024 12:32:26 +0330 Subject: [PATCH 31/90] make project item responsive --- .../userProfile/projectsTab/ProjectItem.tsx | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/components/views/userProfile/projectsTab/ProjectItem.tsx b/src/components/views/userProfile/projectsTab/ProjectItem.tsx index 8d979c835c..df10f5df84 100644 --- a/src/components/views/userProfile/projectsTab/ProjectItem.tsx +++ b/src/components/views/userProfile/projectsTab/ProjectItem.tsx @@ -7,6 +7,7 @@ import { Subline, neutralColors, Flex, + mediaQueries, } from '@giveth/ui-design-system'; import React, { Dispatch, SetStateAction, useState } from 'react'; import styled from 'styled-components'; @@ -36,7 +37,11 @@ const ProjectItem = ({ project, setProjects }: IProjectItem) => { return ( <ProjectContainer> - <Flex $justifyContent='space-between' $alignItems='center'> + <ProjectInfoContainer + $justifyContent='space-between' + $alignItems='center' + gap='24px' + > <div> <Subline> <Flex $alignItems='center'> @@ -53,15 +58,15 @@ const ProjectItem = ({ project, setProjects }: IProjectItem) => { <H2>{project.title}</H2> </Link> </div> - <ProjectActions + <StyledProjectActions setSelectedProject={setSelectedProject} setShowAddressModal={setShowAddressModal} project={project} setShowClaimModal={setShowClaimModal} /> - </Flex> + </ProjectInfoContainer> <HorizontalDivider /> - <Flex $justifyContent='space-between' gap='8px'> + <ProjectInfoContainer $justifyContent='space-between' gap='8px'> <ProjectStatusesContainer $flexDirection='column' gap='16px'> <Flex $justifyContent='space-between'> <P>{formatMessage({ id: 'label.project_status' })}</P> @@ -125,7 +130,7 @@ const ProjectItem = ({ project, setProjects }: IProjectItem) => { )} </Flex> </ProjectStatusesContainer> - </Flex> + </ProjectInfoContainer> {showAddressModal && selectedProject && ( <ManageProjectAddressesModal project={selectedProject} @@ -148,11 +153,22 @@ const ProjectContainer = styled.div` background-color: ${neutralColors.gray[100]}; `; +const StyledProjectActions = styled(ProjectActions)` + width: 100%; +`; + const HorizontalDivider = styled.hr` border: 1px solid ${neutralColors.gray[300]}; margin: 24px 0; `; +const ProjectInfoContainer = styled(Flex)` + flex-direction: column; + ${mediaQueries.tablet} { + flex-direction: row; + } +`; + const ProjectStatusesContainer = styled(Flex)` width: 330px; `; From 0685b82bc1d7157c40720c8d494910f81f06414c Mon Sep 17 00:00:00 2001 From: Cherik <Pourcheriki@gmail.com> Date: Sun, 26 May 2024 12:51:15 +0330 Subject: [PATCH 32/90] add totalUsdStreamed to IWalletRecurringDonation --- src/apollo/types/types.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/apollo/types/types.ts b/src/apollo/types/types.ts index c56aea5271..b93eb601f1 100644 --- a/src/apollo/types/types.ts +++ b/src/apollo/types/types.ts @@ -282,6 +282,7 @@ export interface IWalletRecurringDonation { flowRate: string; currency: string; amountStreamed: string; + totalUsdStreamed: string; networkId: number; finished: boolean; anonymous: boolean; From cbb52e9ddf26bdc46b66161461b13655ff033e99 Mon Sep 17 00:00:00 2001 From: Cherik <Pourcheriki@gmail.com> Date: Sun, 26 May 2024 12:51:27 +0330 Subject: [PATCH 33/90] add totalUsdStreamed to FETCH_USER_RECURRING_DONATIONS --- src/apollo/gql/gqlUser.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/apollo/gql/gqlUser.ts b/src/apollo/gql/gqlUser.ts index c87d83ce0c..e4a357148b 100644 --- a/src/apollo/gql/gqlUser.ts +++ b/src/apollo/gql/gqlUser.ts @@ -144,6 +144,7 @@ export const FETCH_USER_RECURRING_DONATIONS = gql` status isArchived amountStreamed + totalUsdStreamed project { id title From 86a4769a67397f279b0776903ea53bb8ba1bd741 Mon Sep 17 00:00:00 2001 From: Cherik <Pourcheriki@gmail.com> Date: Sun, 26 May 2024 12:51:52 +0330 Subject: [PATCH 34/90] show total usd value --- .../recurringTab/RecurringDonationsTable.tsx | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/components/views/userProfile/donationsTab/recurringTab/RecurringDonationsTable.tsx b/src/components/views/userProfile/donationsTab/recurringTab/RecurringDonationsTable.tsx index 22a03d2f03..6d00a805a2 100644 --- a/src/components/views/userProfile/donationsTab/recurringTab/RecurringDonationsTable.tsx +++ b/src/components/views/userProfile/donationsTab/recurringTab/RecurringDonationsTable.tsx @@ -7,6 +7,7 @@ import { IconLink24, neutralColors, P, + semanticColors, } from '@giveth/ui-design-system'; import { useIntl } from 'react-intl'; import { formatUnits } from 'viem'; @@ -25,7 +26,7 @@ import { import { ONE_MONTH_SECONDS } from '@/lib/constants/constants'; import NetworkLogo from '@/components/NetworkLogo'; import SortIcon from '@/components/SortIcon'; -import { limitFraction } from '@/helpers/number'; +import { formatDonation, limitFraction } from '@/helpers/number'; import { StreamActionButton } from './StreamActionButton'; import RecurringDonationStatusBadge from '@/components/badges/RecurringDonationStatusBadge'; @@ -75,6 +76,9 @@ const RecurringDonationTable: FC<RecurringDonationTable> = ({ <TableHeader> {formatMessage({ id: 'label.total_donated' })} </TableHeader> + <TableHeader> + {formatMessage({ id: 'label.usd_value' })} + </TableHeader> {myAccount && ( <> @@ -117,7 +121,7 @@ const RecurringDonationTable: FC<RecurringDonationTable> = ({ </DonationTableCell> ) : ( <DonationTableCell> - <B> + <B color={semanticColors.jade[500]}> {limitFraction( formatUnits( BigInt(donation.flowRate) * @@ -130,9 +134,15 @@ const RecurringDonationTable: FC<RecurringDonationTable> = ({ </DonationTableCell> )} <DonationTableCell> - {limitFraction(donation.amountStreamed, 10, true) || 0} + <B> + {limitFraction(donation.amountStreamed, 10, true) || + 0} + </B> <Currency>{donation.currency}</Currency> </DonationTableCell> + <DonationTableCell> + {formatDonation(donation.totalUsdStreamed, '$') || 0} + </DonationTableCell> {myAccount && ( <> <DonationTableCell> @@ -183,8 +193,8 @@ const DonationTableContainer = styled.div<{ $myAccount?: boolean }>` display: grid; grid-template-columns: ${props => props.$myAccount - ? '1.5fr 2fr 1fr 1.7fr 1.2fr 1fr 1fr' - : '1fr 2fr .5fr 1fr 1fr'}; + ? '1.5fr 2fr 1fr 1.7fr 1.2fr 1fr 1fr 1fr' + : '1fr 2fr .5fr 1fr 1fr 1fr'}; overflow: auto; min-width: 900px; margin: 0 10px; From 407db8d0ac6d572fc24a7b41f2d0c9ed71d99b72 Mon Sep 17 00:00:00 2001 From: Cherik <Pourcheriki@gmail.com> Date: Sun, 26 May 2024 12:57:17 +0330 Subject: [PATCH 35/90] update cell width --- .../donationsTab/recurringTab/RecurringDonationsTable.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/userProfile/donationsTab/recurringTab/RecurringDonationsTable.tsx b/src/components/views/userProfile/donationsTab/recurringTab/RecurringDonationsTable.tsx index 6d00a805a2..ada4c3a5ed 100644 --- a/src/components/views/userProfile/donationsTab/recurringTab/RecurringDonationsTable.tsx +++ b/src/components/views/userProfile/donationsTab/recurringTab/RecurringDonationsTable.tsx @@ -193,7 +193,7 @@ const DonationTableContainer = styled.div<{ $myAccount?: boolean }>` display: grid; grid-template-columns: ${props => props.$myAccount - ? '1.5fr 2fr 1fr 1.7fr 1.2fr 1fr 1fr 1fr' + ? '1.2fr 2fr 0.6fr 1.3fr 1.5fr 1fr 0.5fr 0.6fr' : '1fr 2fr .5fr 1fr 1fr 1fr'}; overflow: auto; min-width: 900px; From 3430dad178381556bd386430f2b5a106c5dcaf93 Mon Sep 17 00:00:00 2001 From: Cherik <Pourcheriki@gmail.com> Date: Sun, 26 May 2024 13:06:55 +0330 Subject: [PATCH 36/90] update user metadata --- pages/user/[address].tsx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/pages/user/[address].tsx b/pages/user/[address].tsx index 5916902874..cfae371849 100644 --- a/pages/user/[address].tsx +++ b/pages/user/[address].tsx @@ -20,7 +20,6 @@ const UserRoute: FC<IUserRouteProps> = ({ user }) => { const { isSignedIn, userData } = useAppSelector(state => state.user); useReferral(); - // When user is not found, GQL doesn't return any error. After backend is fixed, this can be deleted. if (!user) { return <ErrorsIndex statusCode='404' />; } @@ -29,13 +28,16 @@ const UserRoute: FC<IUserRouteProps> = ({ user }) => { user.walletAddress?.toLowerCase() === userData?.walletAddress?.toLowerCase(); + const userName = + user.name || + `${user.firstName || ''} ${user.lastName || ''}`.trim() || + user.walletAddress?.substring(0, 8) + '...'; + return ( <> <GeneralMetatags info={{ - title: `Giveth | ${ - user.name || `${user.firstName} ${user.lastName}` - } User Profile`, + title: `Giveth | ${userName} User Profile`, desc: 'See the donations, projects & other public information about this user.', image: user.avatar || 'https://i.ibb.co/HTbdCdd/Thumbnail.png', From 773ebebd3cfedca88cad945d429e412a529f0b1b Mon Sep 17 00:00:00 2001 From: Cherik <Pourcheriki@gmail.com> Date: Sun, 26 May 2024 13:12:12 +0330 Subject: [PATCH 37/90] add getUserName helper --- src/helpers/user.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/helpers/user.ts b/src/helpers/user.ts index a241dfcd95..221e712be3 100644 --- a/src/helpers/user.ts +++ b/src/helpers/user.ts @@ -1,6 +1,16 @@ import StorageLabel from '@/lib/localStorage'; import { getLocalStorageData } from './localstorage'; +import { IUser } from '@/apollo/types/types'; export function getTokens() { return getLocalStorageData(StorageLabel.TOKENS); } + +export function getUserName(user?: IUser, short = false) { + if (!user) return 'Unknown'; + return user.name || + `${user.firstName || ''} ${user.lastName || ''}`.trim() || + short + ? user.walletAddress?.substring(0, 8) + '...' + : user.walletAddress; +} From 091684532cb638848950b9b1861d43cff854eb7b Mon Sep 17 00:00:00 2001 From: Cherik <Pourcheriki@gmail.com> Date: Sun, 26 May 2024 13:12:23 +0330 Subject: [PATCH 38/90] use getUserName --- pages/user/[address].tsx | 6 ++---- .../views/userProfile/donationsTab/ProfileDonationsTab.tsx | 3 ++- .../views/userProfile/projectsTab/ProfileProjectsTab.tsx | 3 ++- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pages/user/[address].tsx b/pages/user/[address].tsx index cfae371849..1dcb20ad1d 100644 --- a/pages/user/[address].tsx +++ b/pages/user/[address].tsx @@ -11,6 +11,7 @@ import ErrorsIndex from '@/components/views/Errors/ErrorsIndex'; import { ProfileProvider } from '@/context/profile.context'; import { useAppSelector } from '@/features/hooks'; import { useReferral } from '@/hooks/useReferral'; +import { getUserName } from '@/helpers/user'; interface IUserRouteProps { user?: IUser; @@ -28,10 +29,7 @@ const UserRoute: FC<IUserRouteProps> = ({ user }) => { user.walletAddress?.toLowerCase() === userData?.walletAddress?.toLowerCase(); - const userName = - user.name || - `${user.firstName || ''} ${user.lastName || ''}`.trim() || - user.walletAddress?.substring(0, 8) + '...'; + const userName = getUserName(user, true); return ( <> diff --git a/src/components/views/userProfile/donationsTab/ProfileDonationsTab.tsx b/src/components/views/userProfile/donationsTab/ProfileDonationsTab.tsx index 49cd54d653..56fb7da5ef 100644 --- a/src/components/views/userProfile/donationsTab/ProfileDonationsTab.tsx +++ b/src/components/views/userProfile/donationsTab/ProfileDonationsTab.tsx @@ -11,6 +11,7 @@ import { useProfileContext } from '@/context/profile.context'; import { OneTimeTab } from './oneTimeTab/OneTimeTab'; import { RecurringTab } from './recurringTab/RecurringTab'; import { ProfileDonateTabProvider } from './recurringTab/ProfileDonateTab.context'; +import { getUserName } from '@/helpers/user'; enum ETab { ONE_TIME, @@ -40,7 +41,7 @@ const ProfileDonationsTab: FC<IUserProfileView> = () => { const { myAccount, user } = useProfileContext(); const { formatMessage } = useIntl(); - const userName = user?.name || 'Unknown'; + const userName = getUserName(user); return ( <ProfileDonateTabProvider> diff --git a/src/components/views/userProfile/projectsTab/ProfileProjectsTab.tsx b/src/components/views/userProfile/projectsTab/ProfileProjectsTab.tsx index b8bace06fc..b10fc539c3 100644 --- a/src/components/views/userProfile/projectsTab/ProfileProjectsTab.tsx +++ b/src/components/views/userProfile/projectsTab/ProfileProjectsTab.tsx @@ -16,6 +16,7 @@ import { UserContributeTitle, UserProfileTab } from '../common.sc'; import { ProjectsContributeCard } from '@/components/ContributeCard'; import { useProfileContext } from '@/context/profile.context'; import ProjectItem from './ProjectItem'; +import { getUserName } from '@/helpers/user'; const itemPerPage = 10; @@ -30,7 +31,7 @@ const ProfileProjectsTab: FC<IUserProfileView> = () => { }); const { user, myAccount } = useProfileContext(); const { formatMessage } = useIntl(); - const userName = user?.name || 'Unknown'; + const userName = getUserName(user); const changeOrder = (orderBy: EOrderBy) => { if (orderBy === order.by) { From 4ed7f310b8bb59eb93a9a1e29fe89cc07d09da6b Mon Sep 17 00:00:00 2001 From: Ramin <raminramazanpour@gmail.com> Date: Sun, 26 May 2024 14:11:06 +0330 Subject: [PATCH 39/90] use cache to fetch giveth slug --- src/components/views/donate/SuccessView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/donate/SuccessView.tsx b/src/components/views/donate/SuccessView.tsx index 59d655a65e..b03df4b08b 100644 --- a/src/components/views/donate/SuccessView.tsx +++ b/src/components/views/donate/SuccessView.tsx @@ -77,7 +77,7 @@ export const SuccessView: FC = () => { .query({ query: FETCH_GIVETH_PROJECT_BY_ID, variables: { id: config.GIVETH_PROJECT_ID }, - fetchPolicy: 'no-cache', + fetchPolicy: 'cache-first', }) .then((res: IFetchGivethProjectGQL) => setGivethSlug(res.data.projectById.slug), From a1f952daf2037248f2a3eb655fd5c6204d0a4c9b Mon Sep 17 00:00:00 2001 From: Cherik <Pourcheriki@gmail.com> Date: Sun, 26 May 2024 14:14:01 +0330 Subject: [PATCH 40/90] update translations --- lang/ca.json | 24 +++++++++++++----------- lang/en.json | 26 ++++++++++++++------------ lang/es.json | 24 +++++++++++++----------- 3 files changed, 40 insertions(+), 34 deletions(-) diff --git a/lang/ca.json b/lang/ca.json index 1713e921a5..bd8ec3c9ac 100644 --- a/lang/ca.json +++ b/lang/ca.json @@ -9,6 +9,7 @@ "climate-action": "Acció climàtica", "component.already_donated.incorrect_estimate": "Ja has fet una donació a aquest projecte, per tant l'estimació de l'emparellament serà incorrecta.", "component.already_donated.once_more": "Ja has donat! Dona una vegada més", + "component.archived_qf_middle_banner.desc": "Explora les rondes passades de finançament quadràtic a Giveth! Consulta els projectes que hi han participat, els fons de coincidència, les donacions i més informació en aquesta pàgina.", "component.archive_cover.archived": "ARXIVAT", "component.archive_stream_modal.archived_title": "Heu arxivat amb èxit una donació recurrent", "component.archive_stream_modal.confirm_button": "Sí, Arxivar", @@ -143,7 +144,6 @@ "label.all_time_donations_received": "Donacions rebudes de tots els temps", "label.all_time_funding": "Finançament total rebut", "label.all_your_staked_giv_including_the_locked": "Tot el teu GIV en stake, incloent el GIV bloquejat.", - "label.to_know_next_givers_round": "per saber quan succeeix la pròxima ronda de Nominats pels Donants", "label.always": "Sempre", "label.amount": "Import", "label.amount_is_too_small": "L'import és massa petit", @@ -173,6 +173,7 @@ "label.approve_pending": "Aprovació pendent", "label.approving": "Aprovant", "label.archived": "Arxivat", + "label.archived_qf_rounds": "Rondes QF arxivades", "label.archived_rounds": "Rondes arxivades", "label.archive_donation": "Arxivar donació", "label.archive_stream": "Arxiva el Stream", @@ -193,6 +194,7 @@ "label.back_into_the": "de tornada al", "label.balance_runs_out_in": "El saldo s'esgota en", "label.become_a_liquidity_provider": "Converteix-te en un proveïdor de liquiditat i fes stake dels teus tokens a la GIVfarm per generar encara més GIV en recompenses.", + "label.become_project_nominator": "Converteix-te en un Nominador de Projectes", "label.before_you_start": "Abans de començar", "label.better_communicate_with_the_community": "Comunicar-se amb la comunitat.", "label.be_specific_about_your_projects_progress": "Sigues específic sobre el progrés i els objectius del teu projecte i estructura la informació perquè sigui fàcil de llegir, afegint capçaleres i paràgrafs.", @@ -365,6 +367,7 @@ "label.email": "correu electrònic", "label.email_address": "Adreça electrònica", "label.enable_change": "Habilita el canvi", + "label.enable_recurring_donations": "Habilitar Donacions Recurrents", "label.ends_on": "acaba el", "label.end_date": "Data de finalització", "label.end_recurring_donation": "Finalitzar Donació Recurrent", @@ -419,7 +422,6 @@ "label.get_rewarded_for_giving": "Obtén recompenses per donar a projectes de béns públics verificats amb donacions en cripto.", "label.get_started": "Començar", "label.get_your_donations_matched": "Aconsegueix les teves donacions igualades!", - "label.become_project_nominator": "Converteix-te en un Nominador de Projectes", "label.gitcoin_passport": "Gitcoin Passport", "label.git_and_get_giv": "Dona i obtén GIV", "label.givbacks": "GIVbacks", @@ -554,6 +556,7 @@ "label.just_launched": "Acabat de Llançar", "label.just_now": "Ara mateix", "label.keep_an_eye_on_the_projects_page": "Vigila la pàgina de projectes, la seva posició en l'ordenació per defecte canviarà en 5 minuts o menys.", + "label.keep_eye_on_twitter": "Mantingueu un ull al Twitter de Giveth ", "label.keep_it_short_and_impactful": "Mantén-ho breu i impactant: un títol concís captiva l'atenció.", "label.kyc_less_the_service_is_based_in_sw": " sense KYC: el servei està basat a Suïssa i és un intermediari financer autoritzat", "label.last_name": "Cognom", @@ -562,10 +565,10 @@ "label.learn": "Aprendre", "label.learn_how_to_become_an_active_part": "Aprèn com convertir-te en un agent actiu de la nostra xarxa de donacions.", "label.learn_more": "Aprèn-ne més", - "label.learn_more_recurring_donations": "Apreneu més sobre les donacions recurrents a Giveth", "label.learn_more_about": "Aprèn més sobre els beneficis.", "label.learn_more_about_donating_on_giveth": "Aprèn més sobre com donar a Giveth", "label.learn_more_about_giv": "Aprèn més sobre GIV", + "label.learn_more_recurring_donations": "Apreneu més sobre les donacions recurrents a Giveth", "label.learn_the_basics": "Aprèn els conceptes bàsics", "label.leave_feedback": "Deixa una valoració", "label.leave_feedback.caption": "Fes-nos saber com ha estat la teva experiència!\n Com podem millorar?", @@ -577,7 +580,6 @@ "label.liked_projects": "Projectes Favorits", "label.likes": "Favorits", "label.link_to_your_giveth_project": "Enllaç al teu projecte de Giveth a les teves xarxes socials", - "label.project_social_link": "Enllaç Social del Projecte", "label.liquid_giv_that_has_already_flowed": "GIV líquid que ja ha fluït del GIVstream", "label.liquid_reward_token_that_has_flowed": "{rewardTokenSymbol} líquid que ha fluït del {rewardTokenSymbol}stream", "label.listing": "Llistat", @@ -605,9 +607,9 @@ "label.make_your_donation_eligible_for_matching": "Fes la teva donació elegible per a la coincidència", "label.manage_addresses": "Gestiona adreces", "label.manage_recurring_donations": "Gestiona donacions recurrents", - "label.managing_your_recurring_donations": "Gestionant les vostres donacions recurrents", "label.manage_your_givpower": "Administra el teu GIVpower", "label.managing_funds": "Gestió de fons", + "label.managing_your_recurring_donations": "Gestionant les vostres donacions recurrents", "label.mark_all_as_read": "Marcar tot com a llegit", "label.matching": "Emparellament", "label.matching_funds_coming_soon": "Fons d'emparellament disponibles aviat...", @@ -720,7 +722,6 @@ "label.please_do_not_enter_exchange_deposit": "Si us plau, NO introduïu una adreça de dipòsit d'intercanvi, o els vostres fons podrien perdre's! Utilitzeu un compte que controleu en aquesta xarxa. Recomanem utilitzar Metamask.", "label.please_enter_full_link": "Introdueix el vincle complet", "label.please_note_it_will_take_few_minutes_for_your_giv_to_bridge": "Si us plau, tingueu en compte que trigarà uns minuts perquè el vostre GIV es transfereixi.", - "label.project_owner_contact_text": "Proporciona'ns la informació de contacte del propietari del projecte en cas de comunicacions importants, com problemes amb el teu projecte o si es converteix en elegible per a una ronda d'emparellament QF.", "label.please_select_a_category": "Selecciona una categoria, si us plau.", "label.please_select_one_option": "Si us plau selecciona una opció", "label.please_set_a_valid_email": "Si us plau, introdueix una adreça de correu electrònic vàlida!", @@ -754,6 +755,8 @@ "label.project_name": "Nom del projecte", "label.project_not_available": "Vaja! Aquest projecte ja no està disponible o no s'ha trobat!", "label.project_official_name": "Nom oficial del projecte", + "label.project_owner_contact_text": "Proporciona'ns la informació de contacte del propietari del projecte en cas de comunicacions importants, com problemes amb el teu projecte o si es converteix en elegible per a una ronda d'emparellament QF.", + "label.project_social_link": "Enllaç Social del Projecte", "label.project_social_media": "Informació de Contacte del Propietari del Projecte", "label.project_status": "Estat del projecte", "label.project_story": "Història del projecte", @@ -790,16 +793,15 @@ "label.recurring_donations_currently_only_available_on_optimism": "Les donacions recurrents actualment només estan disponibles en Optimism", "label.recurring_donation_card_subheader_1": "Transmeteu les vostres donacions al llarg del temps per proporcionar finançament continu.", "label.recurring_donation_card_subheader_2": "Decideix la quantitat de tokens a dipositar en el teu saldo de transmissió, o utilitza el/els teu(s) saldo(s) de transmissió existent(s). Estableix l'import de la donació mensual en tokens i comença a transmetre.", - "label.recurring_dontion_page" : "pàgina de donació recurrent", + "label.recurring_donation_maximum": "Aquest és el màxim que podeu donar mensualment, recarregueu el vostre saldo de reproducció per donar més!", "label.recurring_donation_setup_1": "El vostre projecte ha estat creat, a continuació necessitareu signar una transacció per habilitar-lo per rebre donacions recurrents.", "label.recurring_donation_setup_2": "Se us demanarà que signeu una transacció que executarà la configuració a ", "label.recurring_donation_updated_hours": "Les quantitats de les donacions recurrents s'actualitzen cada 24 hores.", - "label.recurring_donation_maximum": "Aquest és el màxim que podeu donar mensualment, recarregueu el vostre saldo de reproducció per donar més!", + "label.recurring_dontion_page": "pàgina de donació recurrent", "label.refer_a_friend": "Recomana un amic, guanya tokens $GIV per cada donació.", "label.refer_your_friends": "Recomana els teus amics", "label.refer_your_friends_and_earn_giv": "Recomana els teus amics i guanya GIV quan donin", "label.refresh_score": "Refresca la puntuació", - "label.keep_eye_on_twitter": "Mantingueu un ull al Twitter de Giveth ", "label.registration": "Registre", "label.registration_confirmation": "Confirmació del registre", "label.remove": "Eliminar", @@ -858,7 +860,6 @@ "label.select_token": "Selecciona Token", "label.sending_eth_to_project_op_address": "Enviant ETH a l'adreça OP del projecte", "label.send_me_an_email": "Envia'm un correu electrònic", - "label.enable_recurring_donations": "Habilitar Donacions Recurrents", "label.set_valid_ammount": "Estableix un import vàlid", "label.share": "Compartir", "label.share_and_earn_rewards": "Comparteix i guanya recompenses", @@ -998,10 +999,10 @@ "label.the_service_is_a_kycfree_authorized_financial_intermediary": "El servei és un intermediari financer autoritzat lliure de KYC, amb seu a Suïssa", "label.think_about_where_your_potential_donors_might_look_for_a_project_like_yours": "Pensa on els teus possibles donants podrien buscar un projecte com el teu.", "label.this_address_is_already_used": "Aquesta adreça ja s'utilitza per a un altre projecte. Si us plau, introduïu una adreça que no estigui associada actualment a cap altre projecte.", + "label.this_documentation": "aquest article de documentació", "label.this_farm_has_ended": "Aquesta farm ha finalitzat", "label.this_feature_will_be_available_soon": "Aquesta funció estarà disponible aviat.", "label.this_field_is_required": "Aquest camp és obligatori", - "label.this_documentation": "aquest article de documentació", "label.this_forum_post": "aquest post del fòrum", "label.this_is_a_way_to_support_giveth_using_our": "Aquesta és una manera de donar suport a Giveth mitjançant el nostre", "label.this_is_optional": "Això és opcional", @@ -1051,6 +1052,7 @@ "label.to_activate_your_gitcoin_passport": "Per activar el teu Gitcoin Passport si us plau canvia a una cartera Ethereum.", "label.to_continue_please_remove_at_least_one_to_boost": "Per continuar amb aquest boosting, elimina almenys un altre projecte impulsat del teu compte i torna a aquest projecte de nou!", "label.to_get_more_involved": "per involucrar-se més.", + "label.to_know_next_givers_round": "per saber quan succeeix la pròxima ronda de Nominats pels Donants", "label.to_lowercase": "a", "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.", diff --git a/lang/en.json b/lang/en.json index ce9d132620..d2bca8bc67 100644 --- a/lang/en.json +++ b/lang/en.json @@ -9,6 +9,7 @@ "climate-action": "Climate Action", "component.already_donated.incorrect_estimate": "You have already donated to this project so the estimated matching will be incorrect.", "component.already_donated.once_more": "Already Donated! Donate once more", + "component.archived_qf_middle_banner.desc": "Explore past quadratic funding rounds on Giveth! Check out the projects who participated, matching funds, donations and more info on this page.", "component.archive_cover.archived": "ARCHIVED", "component.archive_stream_modal.archived_title": "You have successfully archived a recurring donation", "component.archive_stream_modal.confirm_button": "Yes, Archive", @@ -143,7 +144,6 @@ "label.all_time_donations_received": "All time donations received", "label.all_time_funding": "All time funding received", "label.all_your_staked_giv_including_the_locked": "All your staked GIV, including GIV that is locked.", - "label.to_know_next_givers_round": " to know when the next Givers nominated round is happening", "label.always": "Always", "label.amount": "Amount", "label.amount_is_too_small": "Amount is too small", @@ -173,6 +173,7 @@ "label.approve_pending": "Approve pending", "label.approving": "Approving", "label.archived": "Archived", + "label.archived_qf_rounds": "Archived QF Rounds", "label.archived_rounds": "Archived Rounds", "label.archive_donation": "Archive donation", "label.archive_stream": "Archive Stream", @@ -193,6 +194,7 @@ "label.back_into_the": "back into the", "label.balance_runs_out_in": "Balance runs out in", "label.become_a_liquidity_provider": "Become a liquidity provider and stake tokens in the GIVfarm to generate even more GIV in rewards.", + "label.become_project_nominator": "Become a Project Nominator", "label.before_you_start": "Before you start", "label.better_communicate_with_the_community": "Communicate with the community.", "label.be_specific_about_your_projects_progress": "Be specific about your project's progress and goals and structure your information so it’s easy to read by adding headers and paragraphs.", @@ -243,7 +245,6 @@ "label.claim_your_givdrop": "Claim your GIVdrop", "label.clear": "Clear", "label.clear_all_filters": "Clear all Filters", - "page.verification.click_to_edit": "Click here to edit your project.", "label.close": "Close", "label.community": "Community", "label.community_connection": "Community Connection", @@ -366,6 +367,7 @@ "label.email": "email", "label.email_address": "Email Address", "label.enable_change": "Enable Change", + "label.enable_recurring_donations": "Enable Recurring Donations", "label.ends_on": "ends on", "label.end_date": "End Date", "label.end_recurring_donation": "End Recurring Donation", @@ -420,7 +422,6 @@ "label.get_rewarded_for_giving": "Get rewarded for giving to verified public goods projects with crypto donations.", "label.get_started": "Get Started", "label.get_your_donations_matched": "Get your donations matched!", - "label.become_project_nominator": "Become a Project Nominator", "label.gitcoin_passport": "Gitcoin Passport", "label.git_and_get_giv": "Give and get GIV", "label.givbacks": "GIVbacks", @@ -555,6 +556,7 @@ "label.just_launched": "Just Launched", "label.just_now": "Just now", "label.keep_an_eye_on_the_projects_page": "Keep an eye on the projects page, its position in the default sort will change within 5 minutes or less.", + "label.keep_eye_on_twitter": "Keep an eye on the Giveth Twitter ", "label.keep_it_short_and_impactful": "Keep it short and impactful – a concise title grabs attention.", "label.kyc_less_the_service_is_based_in_sw": " KYC-Less: the service is based in Switzerland and is an authorized financial intermediary", "label.last_name": "Last name", @@ -563,10 +565,10 @@ "label.learn": "Learn", "label.learn_how_to_become_an_active_part": "Learn how to become an active part of our giving network.", "label.learn_more": "Learn more", - "label.learn_more_recurring_donations": "Learn more about recurring donations on Giveth", "label.learn_more_about": "Learn more about the benefits.", "label.learn_more_about_donating_on_giveth": "Learn more about donating on Giveth", "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", "label.leave_feedback": "Leave Feedback", "label.leave_feedback.caption": "Let us know how your experience was! \n How can we improve?", @@ -578,7 +580,6 @@ "label.liked_projects": "Liked Projects", "label.likes": "Likes", "label.link_to_your_giveth_project": "Link to your Giveth project on your social media", - "label.project_social_link": "Project Social Link", "label.liquid_giv_that_has_already_flowed": "Liquid GIV that has already flowed out of the GIVstream", "label.liquid_reward_token_that_has_flowed": "Liquid {rewardTokenSymbol} that has already flowed out of the {rewardTokenSymbol}stream", "label.listing": "Listing", @@ -606,9 +607,9 @@ "label.make_your_donation_eligible_for_matching": "Make your donation eligible for matching", "label.manage_addresses": "Manage addresses", "label.manage_recurring_donations": "Manage recurring donations", - "label.managing_your_recurring_donations": "Managing your recurring donations", "label.manage_your_givpower": "Manage your GIVpower", "label.managing_funds": "Managing funds", + "label.managing_your_recurring_donations": "Managing your recurring donations", "label.mark_all_as_read": "Mark all As read", "label.matching": "Matching", "label.matching_funds_coming_soon": "Matching funds coming soon...", @@ -721,7 +722,6 @@ "label.please_do_not_enter_exchange_deposit": "Please DO NOT enter an exchange deposit address, or your funds maybe lost! Use an account you control on this network. We recommend using Metamask.", "label.please_enter_full_link": "Please enter full link", "label.please_note_it_will_take_few_minutes_for_your_giv_to_bridge": "Please note, it will take a few minutes for your GIV to bridge.", - "label.project_owner_contact_text": "Provide us with contact info for the project owner in case of important communications, such as problems with your project or if it becomes eligible for a QF matching round.", "label.please_select_a_category": "Please select a category.", "label.please_select_one_option": "Please select one option", "label.please_set_a_valid_email": "Please insert a valid email address!", @@ -755,6 +755,8 @@ "label.project_name": "Project Name", "label.project_not_available": "Oops! This project is no longer available or not found!", "label.project_official_name": "Project official name", + "label.project_owner_contact_text": "Provide us with contact info for the project owner in case of important communications, such as problems with your project or if it becomes eligible for a QF matching round.", + "label.project_social_link": "Project Social Link", "label.project_social_media": "Project Owner Contact Information", "label.project_status": "Project status", "label.project_story": "Project story", @@ -791,16 +793,15 @@ "label.recurring_donations_currently_only_available_on_optimism": "Recurring donations are currently only available on Optimism", "label.recurring_donation_card_subheader_1": "Stream your donations over time to provide continuous funding.", "label.recurring_donation_card_subheader_2": "Decide the number of tokens to deposit in your stream balance, or utilize your existing stream balance(s). Set the monthly donation amount in tokens and begin streaming.", - "label.recurring_dontion_page": "recurring donation page", + "label.recurring_donation_maximum": "This is the maximum you can donate monthly, top-up your stream balance to donate more!", "label.recurring_donation_setup_1": "Your project has now been created, next you will need to sign a transaction to enable it to receive recurring donations.", "label.recurring_donation_setup_2": "You'll be prompted to sign a transaction which will execute the setup on ", "label.recurring_donation_updated_hours": "Recurring donation amounts are updated every 24 hours.", - "label.recurring_donation_maximum": "This is the maximum you can donate monthly, top-up your stream balance to donate more!", + "label.recurring_dontion_page": "recurring donation page", "label.refer_a_friend": "Refer a friend, earn $GIV tokens for every donation.", "label.refer_your_friends": "Refer your friends", "label.refer_your_friends_and_earn_giv": "Refer your friends and earn GIV when they donate", "label.refresh_score": "Refresh score", - "label.keep_eye_on_twitter": "Keep an eye on the Giveth Twitter ", "label.registration": "Registration", "label.registration_confirmation": "Registration Confirmation", "label.remove": "Remove", @@ -859,7 +860,6 @@ "label.select_token": "Select Token", "label.sending_eth_to_project_op_address": "Sending ETH to project's OP address", "label.send_me_an_email": "Send me an email", - "label.enable_recurring_donations": "Enable Recurring Donations", "label.set_valid_ammount": "Set a valid amount", "label.share": "Share", "label.share_and_earn_rewards": "Share and earn rewards", @@ -999,10 +999,10 @@ "label.the_service_is_a_kycfree_authorized_financial_intermediary": "The service is a KYC-free authorized financial intermediary based in Switzerland", "label.think_about_where_your_potential_donors_might_look_for_a_project_like_yours": "Think about where your potential donors might look for a project like yours.", "label.this_address_is_already_used": "This address is already used for another project. Please enter an address which is not currently associated with any other project.", + "label.this_documentation": "this documentation article", "label.this_farm_has_ended": "This farm has ended", "label.this_feature_will_be_available_soon": "This feature will be available soon.", "label.this_field_is_required": "This field is required", - "label.this_documentation": "this documentation article", "label.this_forum_post": "this forum post", "label.this_is_a_way_to_support_giveth_using_our": "This is a way to support Giveth using our", "label.this_is_optional": "This is optional", @@ -1052,6 +1052,7 @@ "label.to_activate_your_gitcoin_passport": "To activate your Gitcoin Passport please Switch to an Ethereum wallet.", "label.to_continue_please_remove_at_least_one_to_boost": "To continue with this boosting, remove at least one other boosted project from your account and come back to this project again!", "label.to_get_more_involved": "to get more involved.", + "label.to_know_next_givers_round": " to know when the next Givers nominated round is happening", "label.to_lowercase": "to", "label.to_participate_for_real_claim_your_giv": "To participate for real, claim your GIV.", "label.to_see_your_givpower_please_connect": "To see your GIVpower, please connect your wallet.", @@ -1514,6 +1515,7 @@ "page.verification.before_you_start.six": "You will be required to provide a list of all wallet addresses used for managing funds within your project.", "page.verification.before_you_start.three": "The simple", "page.verification.before_you_start.two": "Once your project is verified, the Givers who donate to your project will be rewarded with GIV tokens which they can use to participate in the GIVeconomy. On the other hand, you will be required to post regular updates about your project, otherwise your verified badge could be revoked after 3 months of no updates.", + "page.verification.click_to_edit": "Click here to edit your project.", "page.verification.managing_funds.four": "Please provide additional wallet addresses used for managing funds within your project.", "page.verification.managing_funds.one": "The funds raised are expected to be used for public benefit and not for personal gain. How will you use the funds that your project raises?", "page.verification.managing_funds.three": "Additional address", diff --git a/lang/es.json b/lang/es.json index bc4b1b5706..152d163b1f 100644 --- a/lang/es.json +++ b/lang/es.json @@ -9,6 +9,7 @@ "climate-action": "Acción Climática", "component.already_donated.incorrect_estimate": "Ya has donado a este proyecto, por lo que la estimación de monto complementado será incorrecta.", "component.already_donated.once_more": "¡Ya has donado! Dona una vez más", + "component.archived_qf_middle_banner.desc": "¡Explora las rondas pasadas de financiamiento cuadrático en Giveth! Consulta los proyectos que participaron, los fondos de coincidencia, las donaciones y más información en esta página.", "component.archive_cover.archived": "ARCHIVADO", "component.archive_stream_modal.archived_title": "Ha archivado con éxito una donación recurrente", "component.archive_stream_modal.confirm_button": "Sí, Archivar", @@ -143,7 +144,6 @@ "label.all_time_donations_received": "Donaciones recibidas en total", "label.all_time_funding": "Financiamiento de todos los tiempos", "label.all_your_staked_giv_including_the_locked": "Todo tu GIV en stake, incluido el GIV que está bloqueado.", - "label.to_know_next_givers_round": "para saber cuándo sucede la próxima ronda de Nominados por los Donantes", "label.always": "Siempre", "label.amount": "Cantidad", "label.amount_is_too_small": "La cantidad es demasiado pequeña", @@ -173,6 +173,7 @@ "label.approve_pending": "Aprobación pendiente", "label.approving": "Aprobando", "label.archived": "Archivado", + "label.archived_qf_rounds": "Rondas de QF Archivadas", "label.archived_rounds": "Rondas Archivadas", "label.archive_donation": "Archivar donación", "label.archive_stream": "Archivar Transmisión", @@ -193,6 +194,7 @@ "label.back_into_the": "de vuelta en", "label.balance_runs_out_in": "El saldo se agota en", "label.become_a_liquidity_provider": "Conviértase en un proveedor de liquidez y haga stake de sus tokens en la GIVfarm para generar aún más GIV en recompensas.", + "label.become_project_nominator": "Conviértete en un Nominador de Proyectos", "label.before_you_start": "Antes de comenzar", "label.better_communicate_with_the_community": "Comunicarse con la comunidad.", "label.be_specific_about_your_projects_progress": "Sé específico sobre el progreso y los objetivos de tu proyecto y estructura la información para que sea fácil de leer, añadiendo encabezados y párrafos.", @@ -365,6 +367,7 @@ "label.email": "Email", "label.email_address": "Dirección de Email", "label.enable_change": "Ayuda al Cambio", + "label.enable_recurring_donations": "Habilitar Donaciones Recurrentes", "label.ends_on": "termina el", "label.end_date": "Fecha de finalización", "label.end_recurring_donation": "Finalizar Donación Recurrente", @@ -419,7 +422,6 @@ "label.get_rewarded_for_giving": "Recibe recompensas por donar a proyectos verificados de bienes públicos con donaciones en criptomonedas.", "label.get_started": "Comienza", "label.get_your_donations_matched": "Consigue que tus donaciones se igualen!", - "label.become_project_nominator": "Conviértete en un Nominador de Proyectos", "label.gitcoin_passport": "Pasaporte de Gitcoin", "label.git_and_get_giv": "Dona y obtén GIV", "label.givbacks": "devoluciones", @@ -554,6 +556,7 @@ "label.just_launched": "Acabado de Lanzar", "label.just_now": "Justo ahora", "label.keep_an_eye_on_the_projects_page": "Mantén un ojo en la página de proyectos, su posición en la ordenación por defecto cambiará en 5 minutos o menos.", + "label.keep_eye_on_twitter": "Mantén un ojo en el Twitter de Giveth ", "label.keep_it_short_and_impactful": "Manténlo breve e impactante: un título conciso capta la atención.", "label.kyc_less_the_service_is_based_in_sw": " sin 'KYC': el servicio esta localizado en Suiza y es un intermediario financiero autorizado", "label.last_name": "Apellido", @@ -562,10 +565,10 @@ "label.learn": "Aprender", "label.learn_how_to_become_an_active_part": "Aprenda cómo convertirse en un agente activo de nuestra red de donaciones.", "label.learn_more": "Aprende más", - "label.learn_more_recurring_donations": "Aprenda más sobre las donaciones recurrentes en Giveth", "label.learn_more_about": "Aprende más sobre los beneficios.", "label.learn_more_about_donating_on_giveth": "Aprende más sobre donar en Giveth", "label.learn_more_about_giv": "Aprende más sobre GIV", + "label.learn_more_recurring_donations": "Aprenda más sobre las donaciones recurrentes en Giveth", "label.learn_the_basics": "Aprende los conceptos básicos", "label.leave_feedback": "Deja retroalimentación", "label.leave_feedback.caption": "¡Dinos cómo fue tu experiencia! \n ¿cómo podemos mejorar?", @@ -577,7 +580,6 @@ "label.liked_projects": "Proyectos Favoritos", "label.likes": "Favoritos", "label.link_to_your_giveth_project": "Enlace al proyecto de Giveth en sus redes sociales", - "label.project_social_link": "Proyecto Enlace Social", "label.liquid_giv_that_has_already_flowed": "GIV liquido que ya ha fluido de tu GIVstream", "label.liquid_reward_token_that_has_flowed": "{rewardTokenSymbol} liquido que ha fluido del {rewardTokenSymbol}stream", "label.listing": "Listado", @@ -605,9 +607,9 @@ "label.make_your_donation_eligible_for_matching": "Haz que tu donación sea elegible para igualar", "label.manage_addresses": "Gestionar direcciones", "label.manage_recurring_donations": "Gestionar donaciones recurrentes", - "label.managing_your_recurring_donations": "Gestionando tus donaciones recurrentes", "label.manage_your_givpower": "Administrar su GIVpower", "label.managing_funds": "Manejo de fondos", + "label.managing_your_recurring_donations": "Gestionando tus donaciones recurrentes", "label.mark_all_as_read": "Marcar todas como leídas", "label.matching": "Emparejamiento", "label.matching_funds_coming_soon": "Fondos de emparejamiento próximamente...", @@ -720,7 +722,6 @@ "label.please_do_not_enter_exchange_deposit": "¡Por favor, NO introduzcas una dirección de depósito de intercambio, o podrías perder tus fondos! Usa una cuenta que controles en esta red. Recomendamos usar Metamask.", "label.please_enter_full_link": "Por favor, introduzca el enlace completo", "label.please_note_it_will_take_few_minutes_for_your_giv_to_bridge": "Por favor ten en cuenta que tomará unos minutos para que tu GIV se transfiera.", - "label.project_owner_contact_text": "Proporciónanos la información de contacto del propietario del proyecto en caso de comunicaciones importantes, como problemas con tu proyecto o si se convierte en elegible para una ronda de emparejamiento QF.", "label.please_select_a_category": "Por favor selecciona una categoria.", "label.please_select_one_option": "Porfavor escoge una opción", "label.please_set_a_valid_email": "¡Por favor introduce un email válido!", @@ -754,6 +755,8 @@ "label.project_name": "Nombre del Proyecto", "label.project_not_available": "¡Ups! ¡Este proyecto ya no está disponible o no se encuentra!", "label.project_official_name": "Nombre oficial del proyecto", + "label.project_owner_contact_text": "Proporciónanos la información de contacto del propietario del proyecto en caso de comunicaciones importantes, como problemas con tu proyecto o si se convierte en elegible para una ronda de emparejamiento QF.", + "label.project_social_link": "Proyecto Enlace Social", "label.project_social_media": "Información de Contacto del Propietario del Proyecto", "label.project_status": "Estado del Proyecto", "label.project_story": "Historia del proyecto", @@ -790,16 +793,15 @@ "label.recurring_donations_currently_only_available_on_optimism": "Las donaciones recurrentes actualmente solo están disponibles en Optimism", "label.recurring_donation_card_subheader_1": "Transmite tus donaciones con el tiempo para proporcionar financiamiento continuo.", "label.recurring_donation_card_subheader_2": "Decide la cantidad de tokens a depositar en tu saldo de transmisión, o utiliza tu(s) saldo(s) de transmisión existente(s). Establece el monto de la donación mensual en tokens y comienza a transmitir.", - "label.recurring_dontion_page" : "página de donación recurrente", + "label.recurring_donation_maximum": "Este es el máximo que puedes donar mensualmente. ¡Recarga tu saldo de transmisión para donar más!", "label.recurring_donation_setup_1": "Su proyecto ha sido creado, a continuación necesitará firmar una transacción para habilitarlo para recibir donaciones recurrentes.", "label.recurring_donation_setup_2": "Se le pedirá que firme una transacción que ejecutará la configuración en ", "label.recurring_donation_updated_hours": "Las cantidades de las donaciones recurrentes se actualizan cada 24 horas.", - "label.recurring_donation_maximum": "Este es el máximo que puedes donar mensualmente. ¡Recarga tu saldo de transmisión para donar más!", + "label.recurring_dontion_page": "página de donación recurrente", "label.refer_a_friend": "Referir a un amigo, ganar tokens $GIV por cada donación.", "label.refer_your_friends": "Refiere a tus amigos", "label.refer_your_friends_and_earn_giv": "Refiere a tus amigos y gana GIV", "label.refresh_score": "Actualizar puntaje", - "label.keep_eye_on_twitter": "Mantén un ojo en el Twitter de Giveth ", "label.registration": "Registro", "label.registration_confirmation": "Confirmación de Registro", "label.remove": "Eliminar", @@ -858,7 +860,6 @@ "label.select_token": "Seleccionar Token", "label.sending_eth_to_project_op_address": "Enviando ETH a la dirección OP del proyecto", "label.send_me_an_email": "Envíame un email", - "label.enable_recurring_donations": "Habilitar Donaciones Recurrentes", "label.set_valid_ammount": "Establece un monto válido", "label.share": "Compartir", "label.share_and_earn_rewards": "Comparte y obtén recompensas", @@ -998,10 +999,10 @@ "label.the_service_is_a_kycfree_authorized_financial_intermediary": "Son una entidad financiera autorizada localizada en Suiza, libre de KYC", "label.think_about_where_your_potential_donors_might_look_for_a_project_like_yours": "Piensa dónde tus posibles donantes podrían buscar un proyecto como el tuyo.", "label.this_address_is_already_used": "Esta dirección ya esta en uso para otro proyecto. Por favor ingrese una dirección que no este actualmente asociada a ningún otro proyecto.", + "label.this_documentation": "este artículo de documentación", "label.this_farm_has_ended": "Esta Farm ha terminado", "label.this_feature_will_be_available_soon": "Esta función estará disponible pronto.", "label.this_field_is_required": "Este campo es requerido", - "label.this_documentation": "este artículo de documentación", "label.this_forum_post": "este post del foro", "label.this_is_a_way_to_support_giveth_using_our": "Esta es una manera de apoyar a Giveth usando nuestro", "label.this_is_optional": "Esto es opcional", @@ -1051,6 +1052,7 @@ "label.to_activate_your_gitcoin_passport": "Para activar tu Pasaporte de Gitcoin por favor cambia a una cartera Ethereum.", "label.to_continue_please_remove_at_least_one_to_boost": "Para continuar con este boost, elimina al menos otro proyecto boosteado de tu cuenta y vuelve a este proyecto de nuevo!", "label.to_get_more_involved": "para involucrarse más.", + "label.to_know_next_givers_round": "para saber cuándo sucede la próxima ronda de Nominados por los Donantes", "label.to_lowercase": "para", "label.to_participate_for_real_claim_your_giv": "Para participar de verdad, reclama tu GIV.", "label.to_see_your_givpower_please_connect": "Para ver tu GIVpower, por favor conecta tu billetera.", From f181e4672586dfd5f0a4484a17c760a8b40cd264 Mon Sep 17 00:00:00 2001 From: Cherik <Pourcheriki@gmail.com> Date: Sun, 26 May 2024 14:14:13 +0330 Subject: [PATCH 41/90] update ArchivedQFRoundsMiddleBanner copy --- .../views/archivedQFRounds/ArchivedQFRoundsMiddleBanner.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/views/archivedQFRounds/ArchivedQFRoundsMiddleBanner.tsx b/src/components/views/archivedQFRounds/ArchivedQFRoundsMiddleBanner.tsx index 5f6ce7897b..c4ded50a6a 100644 --- a/src/components/views/archivedQFRounds/ArchivedQFRoundsMiddleBanner.tsx +++ b/src/components/views/archivedQFRounds/ArchivedQFRoundsMiddleBanner.tsx @@ -11,12 +11,12 @@ export const ArchivedQFRoundsMiddleBanner = () => { <Container> <Title weight={700} color={semanticColors.jade[700]}> {formatMessage({ - id: 'component.qf_middle_banner.title', + id: 'label.archived_qf_rounds', })} {formatMessage({ - id: 'component.qf_middle_banner.desc', + id: 'component.archived_qf_middle_banner.desc', })} From 44e12b80b01f439a619a66a4a9b57301f4da853e Mon Sep 17 00:00:00 2001 From: Cherik Date: Sun, 26 May 2024 14:17:18 +0330 Subject: [PATCH 42/90] add metatags --- pages/qf-archive/index.tsx | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/pages/qf-archive/index.tsx b/pages/qf-archive/index.tsx index 278b1db202..7c1a81cc35 100644 --- a/pages/qf-archive/index.tsx +++ b/pages/qf-archive/index.tsx @@ -1,11 +1,22 @@ +import { GeneralMetatags } from '@/components/Metatag'; import { ArchivedQFRoundsView } from '@/components/views/archivedQFRounds/ArchivedQFRounds.view'; import { ArchivedQFRoundsProvider } from '@/components/views/archivedQFRounds/archivedQfRounds.context'; const ArchivedQFPageRoute = () => { return ( - - - + <> + + + + + ); }; export default ArchivedQFPageRoute; From 4c3e7fb1527f22643f71a217062ece65830bb2c3 Mon Sep 17 00:00:00 2001 From: Cherik Date: Sun, 26 May 2024 14:58:29 +0330 Subject: [PATCH 43/90] add load more functionality --- .../ArchivedQFRounds.view.tsx | 121 ++++++++++++------ 1 file changed, 80 insertions(+), 41 deletions(-) diff --git a/src/components/views/archivedQFRounds/ArchivedQFRounds.view.tsx b/src/components/views/archivedQFRounds/ArchivedQFRounds.view.tsx index 30f48f7222..ee114c6c6a 100644 --- a/src/components/views/archivedQFRounds/ArchivedQFRounds.view.tsx +++ b/src/components/views/archivedQFRounds/ArchivedQFRounds.view.tsx @@ -1,6 +1,6 @@ -import React, { useEffect, useState } from 'react'; +import React, { useCallback, useEffect, useState } from 'react'; import styled from 'styled-components'; -import { Container, Flex } from '@giveth/ui-design-system'; +import { Container, Flex, OutlineButton } from '@giveth/ui-design-system'; import { ArchivedQFBanner } from './ArchivedQFBanner'; import { EQFPageStatus, QFHeader } from './QFHeader'; import { client } from '@/apollo/apolloClient'; @@ -10,6 +10,7 @@ import { ArchivedQFRoundsMiddleBanner } from './ArchivedQFRoundsMiddleBanner'; import { FETCH_ARCHIVED_QF_ROUNDS } from '@/apollo/gql/gqlQF'; import { useArchivedQFRounds } from './archivedQfRounds.context'; import { EQFRoundsSortBy } from '@/apollo/types/gqlEnums'; +import { showToastError } from '@/lib/helpers'; enum EQfArchivedRoundsSort { allocatedFund = 'allocatedFund', @@ -23,53 +24,80 @@ enum EOrderDirection { DESC = 'DESC', } +const ITEMS_PER_PAGE = 10; + export const ArchivedQFRoundsView = () => { const [archivedQFRounds, setArchivedQFRounds] = useState< IArchivedQFRound[] >([]); + const [hasMore, setHasMore] = useState(true); + const [loading, setLoading] = useState(false); const { orderBy } = useArchivedQFRounds(); + const fetchQFRounds = useCallback( + async (isLoadMore: boolean = false, skip: number) => { + setLoading(true); + let field = EQfArchivedRoundsSort.beginDate; + let direction = EOrderDirection.DESC; + switch (orderBy) { + case EQFRoundsSortBy.MATCHING_POOL: + field = EQfArchivedRoundsSort.allocatedFund; + direction = EOrderDirection.DESC; + break; + case EQFRoundsSortBy.UNIQUE_DONORS: + field = EQfArchivedRoundsSort.uniqueDonors; + direction = EOrderDirection.DESC; + break; + case EQFRoundsSortBy.NEWEST: + field = EQfArchivedRoundsSort.beginDate; + direction = EOrderDirection.DESC; + break; + case EQFRoundsSortBy.OLDEST: + field = EQfArchivedRoundsSort.beginDate; + direction = EOrderDirection.ASC; + break; + default: + break; + } + let _qfArchivedRounds: IArchivedQFRound[] = []; + try { + const { + data: { qfArchivedRounds }, + } = await client.query({ + query: FETCH_ARCHIVED_QF_ROUNDS, + fetchPolicy: 'network-only', + variables: { + limit: ITEMS_PER_PAGE, + skip, + orderBy: { + field, + direction, + }, + }, + }); + setArchivedQFRounds(prev => { + return isLoadMore + ? [...prev, ...qfArchivedRounds] + : qfArchivedRounds; + }); + } catch (error) { + showToastError(error); + } finally { + setLoading(false); + } + }, + [orderBy], + ); + useEffect(() => { - let field = EQfArchivedRoundsSort.beginDate; - let direction = EOrderDirection.DESC; - switch (orderBy) { - case EQFRoundsSortBy.MATCHING_POOL: - field = EQfArchivedRoundsSort.allocatedFund; - direction = EOrderDirection.DESC; - break; - case EQFRoundsSortBy.UNIQUE_DONORS: - field = EQfArchivedRoundsSort.uniqueDonors; - direction = EOrderDirection.DESC; - break; - case EQFRoundsSortBy.NEWEST: - field = EQfArchivedRoundsSort.beginDate; - direction = EOrderDirection.DESC; - break; - case EQFRoundsSortBy.OLDEST: - field = EQfArchivedRoundsSort.beginDate; - direction = EOrderDirection.ASC; - break; - default: - break; - } + if (loading) return; + fetchQFRounds(false, 0); + }, [fetchQFRounds]); + + const loadMore = () => { + fetchQFRounds(true, archivedQFRounds.length); + }; - const fetchQFRounds = async () => { - const { - data: { qfArchivedRounds }, - } = await client.query({ - query: FETCH_ARCHIVED_QF_ROUNDS, - fetchPolicy: 'network-only', - variables: { - orderBy: { - field, - direction, - }, - }, - }); - setArchivedQFRounds(qfArchivedRounds); - }; - fetchQFRounds(); - }, [orderBy]); return ( @@ -88,6 +116,13 @@ export const ArchivedQFRoundsView = () => { )} /> + {hasMore && ( + + )} ); }; @@ -96,3 +131,7 @@ const Wrapper = styled(Flex)` flex-direction: column; gap: 40px; `; + +const LoadMoreButton = styled(OutlineButton)` + margin: 20px auto; +`; From fa54413ed5fde258c81d9f11878b2a5f47aaae10 Mon Sep 17 00:00:00 2001 From: Cherik Date: Sun, 26 May 2024 14:59:38 +0330 Subject: [PATCH 44/90] hide load more at the end --- .../views/archivedQFRounds/ArchivedQFRounds.view.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/components/views/archivedQFRounds/ArchivedQFRounds.view.tsx b/src/components/views/archivedQFRounds/ArchivedQFRounds.view.tsx index ee114c6c6a..78f8996acc 100644 --- a/src/components/views/archivedQFRounds/ArchivedQFRounds.view.tsx +++ b/src/components/views/archivedQFRounds/ArchivedQFRounds.view.tsx @@ -75,6 +75,9 @@ export const ArchivedQFRoundsView = () => { }, }, }); + if (qfArchivedRounds.length < ITEMS_PER_PAGE) { + setHasMore(false); + } setArchivedQFRounds(prev => { return isLoadMore ? [...prev, ...qfArchivedRounds] From 222bdfd506382e372cadeb2458b02d46b7a4d9b2 Mon Sep 17 00:00:00 2001 From: Cherik Date: Sun, 26 May 2024 15:07:13 +0330 Subject: [PATCH 45/90] add loading --- .../views/archivedQFRounds/ArchivedQFRounds.view.tsx | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/components/views/archivedQFRounds/ArchivedQFRounds.view.tsx b/src/components/views/archivedQFRounds/ArchivedQFRounds.view.tsx index 78f8996acc..5514fd6016 100644 --- a/src/components/views/archivedQFRounds/ArchivedQFRounds.view.tsx +++ b/src/components/views/archivedQFRounds/ArchivedQFRounds.view.tsx @@ -11,6 +11,7 @@ import { FETCH_ARCHIVED_QF_ROUNDS } from '@/apollo/gql/gqlQF'; import { useArchivedQFRounds } from './archivedQfRounds.context'; import { EQFRoundsSortBy } from '@/apollo/types/gqlEnums'; import { showToastError } from '@/lib/helpers'; +import { WrappedSpinner } from '@/components/Spinner'; enum EQfArchivedRoundsSort { allocatedFund = 'allocatedFund', @@ -59,7 +60,6 @@ export const ArchivedQFRoundsView = () => { default: break; } - let _qfArchivedRounds: IArchivedQFRound[] = []; try { const { data: { qfArchivedRounds }, @@ -109,6 +109,9 @@ export const ArchivedQFRoundsView = () => { + {archivedQFRounds.length == 0 && loading && ( + + )} @@ -119,13 +122,15 @@ export const ArchivedQFRoundsView = () => { )} /> - {hasMore && ( + {archivedQFRounds.length > 0 && loading ? ( + + ) : hasMore ? ( - )} + ) : null} ); }; From 617d8a898019039cedb981fecec18d9089b22a86 Mon Sep 17 00:00:00 2001 From: Cherik Date: Sun, 26 May 2024 15:18:27 +0330 Subject: [PATCH 46/90] show round date info in once column --- .../ArchivedQFRoundsTable.tsx | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/components/views/archivedQFRounds/ArchivedQFRoundsTable.tsx b/src/components/views/archivedQFRounds/ArchivedQFRoundsTable.tsx index 24c94e7bfa..79cc2398f7 100644 --- a/src/components/views/archivedQFRounds/ArchivedQFRoundsTable.tsx +++ b/src/components/views/archivedQFRounds/ArchivedQFRoundsTable.tsx @@ -28,10 +28,9 @@ export const ArchivedQFRoundsTable: FC = ({ Funding Round Matching Pool - Total Donations + Donations (USD value) Unique Donors - Round started - Round Ended + Round Duration {archivedQFRounds.map((round, index) => ( @@ -48,8 +47,10 @@ export const ArchivedQFRoundsTable: FC = ({

{formatDonation(round.totalDonations, '$') || 0}

{round.uniqueDonors}

-

{formatDate(new Date(round.beginDate))}

-

{formatDate(new Date(round.endDate))}

+ +

{formatDate(new Date(round.beginDate))}

+

{formatDate(new Date(round.endDate))}

+

span:first-child { - padding-left: 16px; border-radius: 16px 0 0 16px; } & > span { - padding: 16px 0; + padding: 16px; background-color: ${neutralColors.gray[200]}; margin-bottom: 16px; } & > span:last-child { - padding-right: 16px; border-radius: 0 16px 16px 0; } `; @@ -107,7 +106,7 @@ const TR = styled.div` padding-left: 8px; } & > div { - padding: 16px 0; + padding: 16px; border-bottom: 1px solid ${neutralColors.gray[300]}; margin-bottom: 16px; } From f2dba2b180a68d76568e8062a39e88311cd0f6be Mon Sep 17 00:00:00 2001 From: Ramin Date: Sun, 26 May 2024 15:45:02 +0330 Subject: [PATCH 47/90] prevent fetch giveth slug when only one tx --- src/components/views/donate/SuccessView.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/views/donate/SuccessView.tsx b/src/components/views/donate/SuccessView.tsx index b03df4b08b..400c76e1f6 100644 --- a/src/components/views/donate/SuccessView.tsx +++ b/src/components/views/donate/SuccessView.tsx @@ -73,6 +73,7 @@ export const SuccessView: FC = () => { networkId && activeStartedRound?.eligibleNetworks?.includes(networkId); useEffect(() => { + if (!hasMultipleTxs) return; client .query({ query: FETCH_GIVETH_PROJECT_BY_ID, From bf80bb4ef58c4259fa29739bb61a0e9841dd7b85 Mon Sep 17 00:00:00 2001 From: Ramin Date: Sun, 26 May 2024 15:45:29 +0330 Subject: [PATCH 48/90] don't check for giveth address when only one tx --- src/components/views/donate/DonateModal.tsx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/components/views/donate/DonateModal.tsx b/src/components/views/donate/DonateModal.tsx index bd10fe85b0..3e028157f3 100644 --- a/src/components/views/donate/DonateModal.tsx +++ b/src/components/views/donate/DonateModal.tsx @@ -194,12 +194,10 @@ const DonateModal: FC = props => { token, setFailedModalType, }; - if (!projectWalletAddress || !givethWalletAddress()) { + if (!projectWalletAddress) { setDonating(false); return showToastError( - `${ - !projectWalletAddress ? 'Project' : 'Giveth' - } wallet address for the destination network doesn't exist`, + "Project wallet address for the destination network doesn't exist", ); } createFirstDonation({ From de63b966538647c2946c93b091a8ecaed9cdc8a4 Mon Sep 17 00:00:00 2001 From: Ramin Date: Sun, 26 May 2024 15:45:50 +0330 Subject: [PATCH 49/90] don't check for giveth address when only one tx --- src/components/views/donate/CryptoDonation.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/views/donate/CryptoDonation.tsx b/src/components/views/donate/CryptoDonation.tsx index c9ded262db..b718c34b55 100644 --- a/src/components/views/donate/CryptoDonation.tsx +++ b/src/components/views/donate/CryptoDonation.tsx @@ -91,6 +91,7 @@ const CryptoDonation: FC = () => { const { supportCustomTokens, label: orgLabel } = organization || {}; const isActive = status?.name === EProjectStatus.ACTIVE; const noDonationSplit = Number(projectId!) === config.GIVETH_PROJECT_ID; + const [selectedToken, setSelectedToken] = useState(); const [selectedTokenBalance, setSelectedTokenBalance] = useState(0n); const [customInput, setCustomInput] = useState(); From 7fdb804ab498e3c2aa92a98313ea5a1d55fd43a5 Mon Sep 17 00:00:00 2001 From: Ramin Date: Sun, 26 May 2024 15:52:41 +0330 Subject: [PATCH 50/90] PassPort banner is hidden under header --- src/components/views/donate/DonateIndex.tsx | 51 +++++++-------------- 1 file changed, 16 insertions(+), 35 deletions(-) diff --git a/src/components/views/donate/DonateIndex.tsx b/src/components/views/donate/DonateIndex.tsx index bbc5bb1b55..e651b42c15 100644 --- a/src/components/views/donate/DonateIndex.tsx +++ b/src/components/views/donate/DonateIndex.tsx @@ -4,7 +4,6 @@ import { Col, Container, IconDonation24, - mediaQueries, neutralColors, Row, semanticColors, @@ -55,15 +54,17 @@ const DonateIndex: FC = () => { return successDonation ? ( <> - + - + ) : ( <> {!isSafeEnv && hasActiveQFRound && !isOnSolana && ( - + + + )} {/* */} @@ -111,6 +112,10 @@ const DonateIndex: FC = () => { ); }; +const PassportWrapper = styled.div` + margin-top: 100px; +`; + const AlreadyDonatedWrapper = styled(Flex)` margin-bottom: 16px; padding: 12px 16px; @@ -122,17 +127,18 @@ const AlreadyDonatedWrapper = styled(Flex)` align-items: center; `; -const DonateContainer = styled(Container)` +const SuccessContainer = styled(Container)` text-align: center; - padding-top: 128px; + padding-top: 110px; padding-bottom: 64px; position: relative; `; -const Wrapper = styled.div` - max-width: 1052px; - padding: 64px 0; - margin: 0 auto; +const DonateContainer = styled(Container)` + text-align: center; + padding-top: 20px; + padding-bottom: 64px; + position: relative; `; const InfoWrapper = styled.div` @@ -152,29 +158,4 @@ const ImageWrapper = styled.div` overflow: hidden; `; -const Sections = styled.div` - height: 100%; - ${mediaQueries.tablet} { - display: grid; - grid-template-columns: repeat(2, minmax(500px, 1fr)); - grid-auto-rows: minmax(100px, auto); - } - ${mediaQueries.mobileL} { - grid-template-columns: repeat(2, minmax(100px, 1fr)); - padding: 0 40px; - } -`; - -const Right = styled.div` - z-index: 1; - background: white; - text-align: left; - padding: 32px; - min-height: 620px; - border-radius: 16px; - ${mediaQueries.tablet} { - border-radius: 0 16px 16px 0; - } -`; - export default DonateIndex; From 913c84f6b33ad1d397c504415fa23ea4a4b9d343 Mon Sep 17 00:00:00 2001 From: Cherik Date: Sun, 26 May 2024 16:25:11 +0330 Subject: [PATCH 51/90] add qf round tab --- .../ArchivedQFRounds.view.tsx | 13 +++++- .../views/archivedQFRounds/QFHeader.tsx | 45 +++++++------------ .../views/projects/ProjectsIndex.tsx | 2 + 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/src/components/views/archivedQFRounds/ArchivedQFRounds.view.tsx b/src/components/views/archivedQFRounds/ArchivedQFRounds.view.tsx index 5514fd6016..c826a2ab4f 100644 --- a/src/components/views/archivedQFRounds/ArchivedQFRounds.view.tsx +++ b/src/components/views/archivedQFRounds/ArchivedQFRounds.view.tsx @@ -2,7 +2,7 @@ import React, { useCallback, useEffect, useState } from 'react'; import styled from 'styled-components'; import { Container, Flex, OutlineButton } from '@giveth/ui-design-system'; import { ArchivedQFBanner } from './ArchivedQFBanner'; -import { EQFPageStatus, QFHeader } from './QFHeader'; +import { QFHeader } from './QFHeader'; import { client } from '@/apollo/apolloClient'; import { IArchivedQFRound } from '@/apollo/types/types'; import { ArchivedQFRoundsTable } from './ArchivedQFRoundsTable'; @@ -12,6 +12,7 @@ import { useArchivedQFRounds } from './archivedQfRounds.context'; import { EQFRoundsSortBy } from '@/apollo/types/gqlEnums'; import { showToastError } from '@/lib/helpers'; import { WrappedSpinner } from '@/components/Spinner'; +import { ArchivedQFRoundsSort } from './ArchivedQFRoundsSort'; enum EQfArchivedRoundsSort { allocatedFund = 'allocatedFund', @@ -105,7 +106,11 @@ export const ArchivedQFRoundsView = () => { - + + + + + @@ -140,6 +145,10 @@ const Wrapper = styled(Flex)` gap: 40px; `; +const HeaderWrapper = styled(Flex)` + margin-bottom: 24px; +`; + const LoadMoreButton = styled(OutlineButton)` margin: 20px auto; `; diff --git a/src/components/views/archivedQFRounds/QFHeader.tsx b/src/components/views/archivedQFRounds/QFHeader.tsx index bbfbef6f97..0a265a8944 100644 --- a/src/components/views/archivedQFRounds/QFHeader.tsx +++ b/src/components/views/archivedQFRounds/QFHeader.tsx @@ -1,39 +1,33 @@ import { Flex, H6, neutralColors } from '@giveth/ui-design-system'; import Link from 'next/link'; -import { type FC } from 'react'; import { useIntl } from 'react-intl'; import styled from 'styled-components'; +import { useRouter } from 'next/router'; import Routes from '@/lib/constants/Routes'; -import { ArchivedQFRoundsSort } from './ArchivedQFRoundsSort'; -export enum EQFPageStatus { +enum EQFPageStatus { ACTIVE = 'label.active_round', ARCHIVED = 'label.archived_rounds', } -interface IQFHeaderProps { - status: EQFPageStatus; -} - -export const QFHeader: FC = ({ status }) => { +export const QFHeader = () => { const { formatMessage } = useIntl(); + const { pathname } = useRouter(); + const isArchivedPath = pathname.startsWith(Routes.QFArchived); return ( - - - - - {formatMessage({ id: EQFPageStatus.ACTIVE })} - - - - - {formatMessage({ id: EQFPageStatus.ARCHIVED })} - - - - - + + + + {formatMessage({ id: EQFPageStatus.ACTIVE })} + + + + + {formatMessage({ id: EQFPageStatus.ARCHIVED })} + + + ); }; @@ -48,8 +42,3 @@ const Item = styled(H6)<{ active: boolean }>` border-bottom-width: 4px; } `; - -const Wrapper = styled(Flex)` - margin-bottom: 24px; - justify-content: space-between; -`; diff --git a/src/components/views/projects/ProjectsIndex.tsx b/src/components/views/projects/ProjectsIndex.tsx index 9c5b9d9f5a..3371f89fd6 100644 --- a/src/components/views/projects/ProjectsIndex.tsx +++ b/src/components/views/projects/ProjectsIndex.tsx @@ -38,6 +38,7 @@ import { ArchivedQFRoundStats } from './ArchivedQFRoundStats'; import { ArchivedQFProjectsBanner } from './qfBanner/ArchivedQFProjectsBanner'; import { ActiveQFRoundStats } from './ActiveQFRoundStats'; import useMediaQuery from '@/hooks/useMediaQuery'; +import { QFHeader } from '@/components/views/archivedQFRounds/QFHeader'; export interface IProjectsView { projects: IProject[]; @@ -218,6 +219,7 @@ const ProjectsIndex = (props: IProjectsView) => { )} + {isQF && } {isArchivedQF ? ( ) : ( From 352ed0f123fc734a2b9bc0ab58bf9be606564bf1 Mon Sep 17 00:00:00 2001 From: Cherik Date: Sun, 26 May 2024 16:40:53 +0330 Subject: [PATCH 52/90] add explore projects button --- .../MiddleBanners/QFNoResultBanner.tsx | 46 ++++++++++++++----- 1 file changed, 35 insertions(+), 11 deletions(-) diff --git a/src/components/views/projects/MiddleBanners/QFNoResultBanner.tsx b/src/components/views/projects/MiddleBanners/QFNoResultBanner.tsx index 25f87adfda..626f62ccba 100644 --- a/src/components/views/projects/MiddleBanners/QFNoResultBanner.tsx +++ b/src/components/views/projects/MiddleBanners/QFNoResultBanner.tsx @@ -1,9 +1,17 @@ -import { ButtonLink, semanticColors } from '@giveth/ui-design-system'; +import { + ButtonLink, + Flex, + Lead, + OutlineLinkButton, + neutralColors, + semanticColors, +} from '@giveth/ui-design-system'; import { useIntl } from 'react-intl'; import styled from 'styled-components'; import Link from 'next/link'; import { Box, BigArc, Title, Caption } from './common.sc'; import links from '@/lib/constants/links'; +import Routes from '@/lib/constants/Routes'; export const QFNoResultBanner = () => { const { formatMessage } = useIntl(); @@ -20,15 +28,27 @@ export const QFNoResultBanner = () => { id: 'label.support_upcoming_qf_round', })} - - - + + + + + or + + + + ); }; @@ -39,5 +59,9 @@ const StyledBox = styled(Box)` `; const DonateButton = styled(ButtonLink)` - max-width: 300px; + min-width: 300px; +`; + +const ExploreButton = styled(OutlineLinkButton)` + min-width: 300px; `; From 73884f0e95c874279976855e04288cce5ea97182 Mon Sep 17 00:00:00 2001 From: Cherik Date: Sun, 26 May 2024 16:41:33 +0330 Subject: [PATCH 53/90] update sorting filtering and metric conditions --- src/components/views/projects/ProjectsIndex.tsx | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/components/views/projects/ProjectsIndex.tsx b/src/components/views/projects/ProjectsIndex.tsx index 3371f89fd6..66ec9c2dc5 100644 --- a/src/components/views/projects/ProjectsIndex.tsx +++ b/src/components/views/projects/ProjectsIndex.tsx @@ -175,6 +175,8 @@ const ProjectsIndex = (props: IProjectsView) => { const activeRound = qfRounds.find(round => round.isActive); + const onProjectsPageOrActiveQFPage = !isQF || (isQF && activeRound); + useEffect(() => { const handleObserver = (entities: any) => { if (!isInfiniteScrolling.current) return; @@ -224,13 +226,15 @@ const ProjectsIndex = (props: IProjectsView) => { ) : ( <> - {isQF && } - + {isQF && activeRound && } + {onProjectsPageOrActiveQFPage && } )} - - - + {onProjectsPageOrActiveQFPage && ( + + + + )} {isLoading && } {filteredProjects?.length > 0 ? ( From f6c04b01b521fc46426a1bb92c1f97739f50fb9c Mon Sep 17 00:00:00 2001 From: Cherik Date: Sun, 26 May 2024 16:44:09 +0330 Subject: [PATCH 54/90] make QFNoResultBanner responsive --- .../projects/MiddleBanners/QFNoResultBanner.tsx | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/components/views/projects/MiddleBanners/QFNoResultBanner.tsx b/src/components/views/projects/MiddleBanners/QFNoResultBanner.tsx index 626f62ccba..e5f4771772 100644 --- a/src/components/views/projects/MiddleBanners/QFNoResultBanner.tsx +++ b/src/components/views/projects/MiddleBanners/QFNoResultBanner.tsx @@ -3,6 +3,7 @@ import { Flex, Lead, OutlineLinkButton, + mediaQueries, neutralColors, semanticColors, } from '@giveth/ui-design-system'; @@ -28,7 +29,7 @@ export const QFNoResultBanner = () => { id: 'label.support_upcoming_qf_round', })} - + { linkType='primary' /> - + ); }; @@ -58,6 +59,15 @@ const StyledBox = styled(Box)` margin-bottom: 96px; `; +const Actions = styled(Flex)` + gap: 24px; + flex-direction: column; + align-items: center; + ${mediaQueries.laptopS} { + flex-direction: row; + } +`; + const DonateButton = styled(ButtonLink)` min-width: 300px; `; From 686463527b36ec77b81f84be4cadea74f6a9bf7e Mon Sep 17 00:00:00 2001 From: Cherik Date: Mon, 27 May 2024 13:10:46 +0330 Subject: [PATCH 55/90] update ActiveQFRoundStats for not started rounds --- .../views/projects/ActiveQFRoundStats.tsx | 73 +++++++++++-------- 1 file changed, 44 insertions(+), 29 deletions(-) diff --git a/src/components/views/projects/ActiveQFRoundStats.tsx b/src/components/views/projects/ActiveQFRoundStats.tsx index 08965bad04..bc5f1116ad 100644 --- a/src/components/views/projects/ActiveQFRoundStats.tsx +++ b/src/components/views/projects/ActiveQFRoundStats.tsx @@ -8,31 +8,32 @@ import { B, } from '@giveth/ui-design-system'; import React from 'react'; -import styled from 'styled-components'; +import styled, { css } from 'styled-components'; import { useIntl } from 'react-intl'; import { useQuery } from '@apollo/client'; import { FETCH_QF_ROUND_STATS } from '@/apollo/gql/gqlQF'; import { useProjectsContext } from '@/context/projects.context'; import { formatDate, formatUSD, thousandsSeparator } from '@/lib/helpers'; +import { getActiveRound } from '@/helpers/qf'; export const ActiveQFRoundStats = () => { const { formatMessage } = useIntl(); const { qfRounds } = useProjectsContext(); - const activeRound = qfRounds.find(round => round.isActive); + const { activeQFRound, activeStartedRound } = getActiveRound(qfRounds); const { allocatedFundUSD, allocatedFundUSDPreferred, allocatedTokenSymbol, allocatedFund, - } = activeRound || {}; + } = activeQFRound || {}; const { data } = useQuery(FETCH_QF_ROUND_STATS, { - variables: { slug: activeRound?.slug }, + variables: { slug: activeQFRound?.slug }, }); return ( - {activeRound?.name} Metrics - + {activeQFRound?.name} Metrics + {formatMessage({ id: 'label.matching_pool' })} @@ -47,37 +48,44 @@ export const ActiveQFRoundStats = () => { {!allocatedFundUSDPreferred && allocatedTokenSymbol} - - - {formatMessage({ id: 'label.donations' })} - - - $ - {formatUSD(data?.qfRoundStats?.allDonationsUsdValue) || - ' --'} - - - - - {formatMessage({ id: 'label.number_of_unique_donors' })} - - - {data?.qfRoundStats?.uniqueDonors || '--'} - - + {activeStartedRound && ( + + + {formatMessage({ id: 'label.donations' })} + + + $ + {formatUSD( + data?.qfRoundStats?.allDonationsUsdValue, + ) || ' --'} + + + )} + {activeStartedRound && ( + + + {formatMessage({ + id: 'label.number_of_unique_donors', + })} + + + {data?.qfRoundStats?.uniqueDonors || '--'} + + + )} Round start - {activeRound?.endDate - ? formatDate(new Date(activeRound.beginDate)) + {activeQFRound?.endDate + ? formatDate(new Date(activeQFRound.beginDate)) : '--'} Round end - {activeRound?.endDate - ? formatDate(new Date(activeRound.endDate)) + {activeQFRound?.endDate + ? formatDate(new Date(activeQFRound.endDate)) : '--'} @@ -99,7 +107,7 @@ const Title = styled(H5)` margin-bottom: 40px; `; -const InfoSection = styled(Flex)` +const InfoSection = styled(Flex)<{ $started: boolean }>` flex-direction: column; margin-top: 40px; padding: 24px; @@ -110,6 +118,13 @@ const InfoSection = styled(Flex)` ${mediaQueries.tablet} { flex-direction: row; } + ${props => + !props.$started && + css` + justify-content: flex-start; + gap: 64px; + width: fit-content; + `} `; const ItemContainer = styled.div``; From 2fba944bb39b22b9c5080cc2f5c4bbad60541989 Mon Sep 17 00:00:00 2001 From: Cherik Date: Mon, 27 May 2024 13:46:18 +0330 Subject: [PATCH 56/90] fix project action size --- src/components/views/userProfile/projectsTab/ProjectItem.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/components/views/userProfile/projectsTab/ProjectItem.tsx b/src/components/views/userProfile/projectsTab/ProjectItem.tsx index df10f5df84..aeadcd914f 100644 --- a/src/components/views/userProfile/projectsTab/ProjectItem.tsx +++ b/src/components/views/userProfile/projectsTab/ProjectItem.tsx @@ -155,6 +155,9 @@ const ProjectContainer = styled.div` const StyledProjectActions = styled(ProjectActions)` width: 100%; + ${mediaQueries.tablet} { + width: unset; + } `; const HorizontalDivider = styled.hr` From 2cca040b97a801348f5c1c2c8f62cb8fff3492c5 Mon Sep 17 00:00:00 2001 From: Meriem-B <135605616+Meriem-B@users.noreply.github.com> Date: Mon, 27 May 2024 23:10:02 +0100 Subject: [PATCH 57/90] add BASE tokens svg/imgs --- public/images/tokens/AERO.png | Bin 0 -> 2943 bytes public/images/tokens/AERO.svg | 40 ++++++++++++++++++++++++ public/images/tokens/AMKT.png | Bin 0 -> 1321 bytes public/images/tokens/AMKT.svg | 15 +++++++++ public/images/tokens/BTRST.png | Bin 0 -> 3238 bytes public/images/tokens/BTRST.svg | 31 +++++++++++++++++++ public/images/tokens/DEGEN.png | Bin 0 -> 2191 bytes public/images/tokens/DEGEN.svg | 14 +++++++++ public/images/tokens/DEUS.png | Bin 0 -> 5944 bytes public/images/tokens/DEUS.svg | 13 ++++++++ public/images/tokens/DOLA.png | Bin 0 -> 2376 bytes public/images/tokens/DOLA.svg | 16 ++++++++++ public/images/tokens/EXTRA.png | Bin 0 -> 4785 bytes public/images/tokens/EXTRA.svg | 30 ++++++++++++++++++ public/images/tokens/GRG.png | Bin 0 -> 2235 bytes public/images/tokens/GRG.svg | 20 ++++++++++++ public/images/tokens/MAV.png | Bin 0 -> 1499 bytes public/images/tokens/MAV.svg | 14 +++++++++ public/images/tokens/MAVIA.png | Bin 0 -> 2231 bytes public/images/tokens/MAVIA.svg | 17 ++++++++++ public/images/tokens/MBS.png | Bin 0 -> 4902 bytes public/images/tokens/MBS.svg | 13 ++++++++ public/images/tokens/OSAK.png | Bin 0 -> 2977 bytes public/images/tokens/OSAK.svg | 55 +++++++++++++++++++++++++++++++++ public/images/tokens/PRIME.png | Bin 0 -> 1543 bytes public/images/tokens/PRIME.svg | 19 ++++++++++++ public/images/tokens/SDEX.svg | 21 +++++++------ public/images/tokens/SEAM.png | Bin 0 -> 1430 bytes public/images/tokens/SEAM.svg | 17 ++++++++++ public/images/tokens/SOFI.png | Bin 0 -> 1168 bytes public/images/tokens/SOFI.svg | 13 ++++++++ public/images/tokens/SPEC.png | Bin 0 -> 2103 bytes public/images/tokens/SPEC.svg | 7 +++++ public/images/tokens/SQT.png | Bin 0 -> 5702 bytes public/images/tokens/SQT.svg | 19 ++++++++++++ public/images/tokens/USD+.png | Bin 0 -> 4473 bytes public/images/tokens/USD+.svg | 33 ++++++++++++++++++++ public/images/tokens/cbETH.png | Bin 0 -> 3603 bytes public/images/tokens/cbETH.svg | 10 ++++++ 39 files changed, 408 insertions(+), 9 deletions(-) create mode 100644 public/images/tokens/AERO.png create mode 100644 public/images/tokens/AERO.svg create mode 100644 public/images/tokens/AMKT.png create mode 100644 public/images/tokens/AMKT.svg create mode 100644 public/images/tokens/BTRST.png create mode 100644 public/images/tokens/BTRST.svg create mode 100644 public/images/tokens/DEGEN.png create mode 100644 public/images/tokens/DEGEN.svg create mode 100644 public/images/tokens/DEUS.png create mode 100644 public/images/tokens/DEUS.svg create mode 100644 public/images/tokens/DOLA.png create mode 100644 public/images/tokens/DOLA.svg create mode 100644 public/images/tokens/EXTRA.png create mode 100644 public/images/tokens/EXTRA.svg create mode 100644 public/images/tokens/GRG.png create mode 100644 public/images/tokens/GRG.svg create mode 100644 public/images/tokens/MAV.png create mode 100644 public/images/tokens/MAV.svg create mode 100644 public/images/tokens/MAVIA.png create mode 100644 public/images/tokens/MAVIA.svg create mode 100644 public/images/tokens/MBS.png create mode 100644 public/images/tokens/MBS.svg create mode 100644 public/images/tokens/OSAK.png create mode 100644 public/images/tokens/OSAK.svg create mode 100644 public/images/tokens/PRIME.png create mode 100644 public/images/tokens/PRIME.svg create mode 100644 public/images/tokens/SEAM.png create mode 100644 public/images/tokens/SEAM.svg create mode 100644 public/images/tokens/SOFI.png create mode 100644 public/images/tokens/SOFI.svg create mode 100644 public/images/tokens/SPEC.png create mode 100644 public/images/tokens/SPEC.svg create mode 100644 public/images/tokens/SQT.png create mode 100644 public/images/tokens/SQT.svg create mode 100644 public/images/tokens/USD+.png create mode 100644 public/images/tokens/USD+.svg create mode 100644 public/images/tokens/cbETH.png create mode 100644 public/images/tokens/cbETH.svg diff --git a/public/images/tokens/AERO.png b/public/images/tokens/AERO.png new file mode 100644 index 0000000000000000000000000000000000000000..bc0145aed3a9777cc84e013e178588ec4ae54d60 GIT binary patch literal 2943 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 literal 0 HcmV?d00001 diff --git a/public/images/tokens/AERO.svg b/public/images/tokens/AERO.svg new file mode 100644 index 0000000000..7f3a9e85f0 --- /dev/null +++ b/public/images/tokens/AERO.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/images/tokens/AMKT.png b/public/images/tokens/AMKT.png new file mode 100644 index 0000000000000000000000000000000000000000..854c646ce7995e750f1374d315cf4d2d5028bfd8 GIT binary patch literal 1321 zcmV+^1=jkBP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuAlSxEDRCod1T8ow1Fc9QY0Ubmg zgc4i=9h^IW4$d9mQ~;^q=zw$pslcQHt^;SrL4L+)ZAq4m?R{^NwdgZDyIT23-WL6f z!WI#91^o_H(B-{FQ_2-jUr@GxpqIO{KRJnjIE7}=yrXiBJv4%jS{T(2=ndM{X=#3j zwPUD)jz)%XyiN#7-a*x?S=azTpAoM+UhnIS7@P+(e}dKly{bwG&XIDeZF0rZ7FSxbhI5}Q-CpKQI4XXv~RTI*3za6X$c0XzyzXer;yr~eNu ze5z)fQ}YwI*@Y&mDM*))!^T}v4Elm!@9NQ}=;8`Ie| zP4g_va+93T=X|@}HWISi?TV=+qAQ+;`3b&zk_;BFO$qjNI+=VHZFH1bQr(m5XyJO* z?*czF3mzmw&uhc=dY#{HH;vn=Wu{akeK;H*<};&waaqix&!rsj?sL$t-@xf&|C&jo@GCVnLM$n;zBuGbyHNzE~<#_sBh{C7SCQMtY(D{(E-|zD{ zj*U}EPQ6yR;%yjD-xuqK0Y+kUr8XjVG}1v`2c#@WlEjF^6}Mr04BH}sT5rH;5OgT1 zI>(}Ck}63qSS`jDb>L_*up~%IRTJ?F@N`Z{vb%aP47(rYxdMGrP zM!z8vjoXe^?uT|$loaR7|V8#aiv6fa$TStPbW?92R_$c8xAQ8SdSdZrq2&@ zL$7qo=a~Tb4$mkt`aWye%n5KUX4vOR5?FczJ+if9;CYfIES<9eYmA*l`lz6VRR3}G z3znaE`<$C!aPBHOIQJ~z*;kVD+P=lZ*wfe-U#y*MYfm#Ifzh`Xg^_bAh!2I&mW4ST z1^VJ8DQ5Yex3SDiygaW=I^cOM&bZA1T4ffxWw4;l|&30b%|YtFL>^TJQmz5fi9t= z5d|bMw9kwfrQ`7VNg`Md&=6#B4Q5yb4K8oNSA1Sj!L+*T547wvb=g+siq035?O*5x f`Wt$M_9p)Twy6CVd3Cgt00000NkvXXu0mjfHY`c} literal 0 HcmV?d00001 diff --git a/public/images/tokens/AMKT.svg b/public/images/tokens/AMKT.svg new file mode 100644 index 0000000000..f963909cbd --- /dev/null +++ b/public/images/tokens/AMKT.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/images/tokens/BTRST.png b/public/images/tokens/BTRST.png new file mode 100644 index 0000000000000000000000000000000000000000..26adc8bed4c89fb7f94001203fa382e4f78fc3eb GIT binary patch literal 3238 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 YKOtjJb*l26D*ylh07*qoM6N<$f_Iw`9{>OV literal 0 HcmV?d00001 diff --git a/public/images/tokens/BTRST.svg b/public/images/tokens/BTRST.svg new file mode 100644 index 0000000000..d8a5829597 --- /dev/null +++ b/public/images/tokens/BTRST.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/images/tokens/DEGEN.png b/public/images/tokens/DEGEN.png new file mode 100644 index 0000000000000000000000000000000000000000..d559ac01ca0f54cffbf11ec43c4982d0f125bd62 GIT binary patch literal 2191 zcmV;A2ypj_P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuD`AI}URCod98{2MEM{ss+CqPK$ zgp!H`HAYAQ2@pmD+jB5lh>5>-FHyxcVdEw!~mjWoTMGY|nO!Rmdt7f32 zh#cpa{8$6`$`#Ez2Dpd&MR?*LSC0hoG(Tui{P9#gS-||TxXy$X z9n-Y}ZVZbVA7!WhX;s+!==`(I6ZW_&&DPVpi-yie~PBYHlcVX75OO#4n zfJ~oeKZpW0x1PhBx36G3zYRJ3ZRg&>n}4^;6!7|Od0*4P<`TGAq!D7V255*iLeqi6 zR=cgGy#&VN1G&NpbcL+Mi^>Mo5dp(~g(rdTJ-!1QFV|F(9^31V@T8y6mQ314Vg`LG0 z62NV(GikTDUg5~K0u*Tl7Kx$)xXDKY5cO-4zJ@$xixpmpkQGQAO92bGhv(P#C80X2 z;|n9X9^$!R0j7W7mx4DPJS>|vuYCrqi! zzDL9L|1v#sivD4ke=G#1-m_P|MY%!HB5)UpWarVmkqk(_!c z^{J(>FR+AkpF^Vkl%*W?y_+_s!x^%GtQ%kzh6evReY@E8bnOXreR>YMPhTkZQG>Rx zDs5qrb7cF&+>?} zr#a&yEeX4=Tbf(7paHk4v@~^{s_V%26ePVC{18fW10pG}h~(ET%^#PcE#CjhG02r6 zdFY_Hac?PAX8z<(nvpA!`s^u z(AIj)YTMUyJ06+&D^%h?n}1<4m8p8xK&JoYnTvK3uAT)m=LisUfkIgrGB&a0>&x)r zle?}DD=5*SHJcRCplofC<-EotHLBedn)$Dj-;^atZg9!``=%mR&`?w1NkkrXL%J3SSV^oscS?Y?I>7V&SxPzSof7*@Wlfbi8q-vO)mQM7@+ zob?$D$z3{*c0$J|7(;@c3M;Iclf6^15!q3+0O|;81(GP$#IR(V0vkne>ErUaoSv!3 zLzP368t=pi-3O2b9N-W6zQLmtDv1&cpcnIl+arucuB$*FN?QmqV82&frT`N5#-O<< z_Q^fqu#~SxewC(nM<^Fz0|=B=0qeY-HSjXEP6n+4C`A;)7}p`xV;@6VNG2WcS_Keb z-*f{83zKq#x-PiiF@DvOMK6Xn2B@I8G|uAlcWPh#w8dQSRJ6Yuzm5tZu{?eDgjb0a*-;7S1m*gF;J$CywDfsr!3>Sj;! z$l_W7gn%jJ7_JW2u(=4bh9FYH%jqvF=2nVC(nYV@|e3+ zTI#Ct)n!idTB#1C03u4(5H<577*1%Zj8_^cfFww@bqUer{dn+jF{pd&oL$}o+_&tVh^5qV z!f4k-0V-pbi-3_d@!#jUVCQicGJ%6u{r7qNr_2?O2R7SyX5lBWspC7f{{t?i*ewp} R>s|l=002ovPDHLkV1i(b@eBX} literal 0 HcmV?d00001 diff --git a/public/images/tokens/DEGEN.svg b/public/images/tokens/DEGEN.svg new file mode 100644 index 0000000000..32c5067d4e --- /dev/null +++ b/public/images/tokens/DEGEN.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/images/tokens/DEUS.png b/public/images/tokens/DEUS.png new file mode 100644 index 0000000000000000000000000000000000000000..2d4c2f07e419a117c666bdcda59cc54ae91c928c GIT binary patch literal 5944 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 + + + + + + + + + \ No newline at end of file diff --git a/public/images/tokens/DOLA.png b/public/images/tokens/DOLA.png new file mode 100644 index 0000000000000000000000000000000000000000..f3de7edcdb5ba90f3731ca60a4c0fa85a26fbe13 GIT binary patch literal 2376 zcmV-O3Agr%P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuEvPnciRCod18%=CfMR;Zw2^OW> zNRdm+XJ;pyOhz; zGv)vzBSdi+gpmo2T?HXA0i><2^jb&sO2+$OP|$EqN=`~SkV-k3q%0%00G5eyk2ED? zwqWuC7tT;zL8Lq*hkSY6I?yW|G0qw91WB$7i5?leJQr`1QgqdA*io2&Je`d?SR@O; zz*dy0^IWoys1qlQmxCCwFN!sUwgA++rtU1`{EZ+3t{|A~T>jGTYV?R|0I2y@$UL&u+K9AQDZVbSsk!?k_*Gw(F;;9h zn0G4##x%r)A1V=9Q2-e2A>e&p332tb^EMDdq0;JLi~*%}-bvkn&RV6k%Pl_}@`T-{ zJi!Y+*yos-;P? zpZnz^-pC|pz2B6{JJc@O=_796C(u3${Sk`&>~V3cZI9au*W&_3*v{6H`KH%gCKLhc z`O(|nzH>ji489Knpk?Zg+eh02)YEG>2+yjvMj@30U+qj^X>sf23=_VKU9HA@)9J23Wd(}@D8jK7=e3LaN{dY!88GEfB=-M#MuM43 zR$u3Z9i8;PM|dk+fzA36chLoa`I8X_3xuL;F%S{}9cpK+lO(f$%rZ80H?sMYX*sxh zxs)sb%)i5NxV6xh_~ZCHULU4r+zfF68CB)+JYyR)t*bu7OQ@tbTL(Mto{@(IRe%>vn7n#1cfzeQQ_)&0bLe# z%a|nV{?}K%E~L+)#t-_G@U2pC=A?rngn=_@QQ^}*Y@`0IFMZT)&AU!vL5`X77?6k4uhY{?$9!5&VWIax((vyAG)qWV+i&|DAqzA5CPQ(MfY#2 zMbt1QoaP0(Wt_X}Gf6^Si3^~b7WI{ZZfz@B2IaNB&NX{$6LQL(*M8%TUyz0CzR1H^zR?yJNepp=vo; z28A68#Ru3=i~6RBZf*T6gHGosKnfSQ&f%T`XL2SmLKQ$iE$W-1v#_SC5`-}n65Tk_ z)kBRF_6eW&XTSoSTv$XCd^IgnCTZTUTZV}-9Q)hjZt%nT>FQykCrBIIVamcy6P^tM zTn&aYh_E!d@yiQz%g`B9%+sY4Ge@;?sz#S@zu?(5c;N^RM10|bbn3xRB{ztxy9Uh* zsNhihbi0iC1oqPtB7`}C*E13*f)%rC@N*G-1kJ_C2>pVe?z`&H1L-$e#x6MQXy4A* zQNwNz)8L*n-d$m2Ilz5H-y#^(11Im2%P(aKN#j%Rs7Ezv^F7taG!0)zffwM%jI z`Z)-i=pOVuL5B(XegW8V0bgVAM_dEd(8!Ke$T;FEkxE(g?jivoBioWYlz zR4+^&$_gqiM;QE0A5qhk4?Gntx(zKTMAb*zYgD&W%*m*+7dJz8ZrmGD&+-e8PyIw6mf|^!S}f+4$^U#INL_+ zV4ra0DGKzW)TNMzALPa^P=1yO06QDE9JscE?g3MJqt{8~r-OK0Ky{>e@o-YEpvHWj zPvk}L;yx1%#!bLK_8q&fq2(!9L8l36wY9<5pU>{kj9oF&Z4>|k&fB-I!=2j(@R2qX z;_7MR19SO{74JJ%6hKJ`h3PBn>vwL2dh6<8*hA?sbkO#dRtExy!0e9& zr7N%iaKI;p+nJXeS_<&z$2OQ~UC>FE1Fp2xVYJU*>JKv?YBY4gn-z|P8>Nz4p^As?ovtwNu`Ga2glLsMkaQl(163WN;JBfy-F%&oj`X#ijZ0 u^Y9mYFm2eg!zU|%$+86hBu#0e_5T51m{IB*m?E420000 + + + + + + + + + + + \ No newline at end of file diff --git a/public/images/tokens/EXTRA.png b/public/images/tokens/EXTRA.png new file mode 100644 index 0000000000000000000000000000000000000000..0aeb6095f68d4522d301b8d4c22c6c3f28761164 GIT binary patch literal 4785 zcmV;i5>D-jP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuO8%ab#RCockTYrq5WtBePo!Rn3 zz*#6RShu}YTv`@W5Cd*Rm?n#;*^R)T>uLuR;2+lx2D5+~rin<^1g6m#BTLHcE++n= z1!Hy>SLvvP-C)($A9T=SZ(~8!MkZ8ip`H1Bp65O1z3=_*oid%mn||Lp@A>hZbKYOy zckkR*_A0mb-F4fR*=Wmboz>Q^&DvJk2ziD^A6?x#=*)ue%vZJ({4P6UJ3F^m9jafg zrr57Ec>A;UD5|;^;O|wT5rx%8qimr*bW*3$=~R_X&(GUb=cCnhxW7^~QafS1_C!5m zud$7-%Es#&Gwcn#LDp9*)r0Csu|}Ukt!i1PnzK!Fb2j}-t&9^M02bat;h3^}h!BLNjgC7N_$6n%FKKey{(RZKj6Yc<9GQd-16E?*vO)sSt)tc7FD=B31OE0gTQ zbvW00vEgD^D=`DTzoX?2@f)gyC||V)O%>c;ux6@2jalP6d+!H-;$i&>!=2 zYhdvdM$A5gH*Kyr;*D#vT(08XQgNB6BgB$tKbEc%qMpXhNRUZf_y-n4lz8mtMtiJ8 z;^jE5T&NGzTlU;hO=gUO@$iKNET8j3H6C@vD{Zeuw-*Ixi6_R_-+VGt8If3ZqxFps zZ9@pke~44%0t;P^?>9J3A6vs%s3mgD=sce z1*S*H{rsRvjdC{7yoJ2484ey4b>M85UH2q#f5z9!amvEWZJ~jfw~^sxwv~|0);9oe zysI8Vu(lG1bxw`}n-}$p(1nfQ5_^(i!&RX|!rb-IjhO6*e^BZ;sLdP%$w{D!G%!K4 zZ_2&{*}0>39=5`4;0*^udbDL5F@x=pX~ew~e1MK! zZua3TQTRz=y?9EW*dmc&E*3E4nQ)FtzJRA%dY5t4xk>k_kWAdd3C=XU#&Z>H3Ps)m zoPCV+m=qC>6uXWA7?kvMB>&+1%|3qh(uxm!)tK;wt-Va8%g9EdnFphUX@jPm5=&m= z=G{ENJ$CRz4deRm!VU8P%(ZM3!TD8HPeKHyZOjIXzkHQ@FOkFy=K@#|k2jA^8dolu zI$X-5(1%?gWp4B#p}jZsN0#xs3vb;mP}`jv#?a6mUqVEe2iW!N%+{V0l3x14VY4Up znUTI+d*M$$sxV}345D14LjdsXs=+`uh2DL-09{k(oWO^+v5Gkub){`EK?~~a{E2!L zv$CB$WAro%QndQ(H(S*l02X}P*Ui2))6E6Xe?7N}lU%!q>bu@!As^+Jl5taog+d7z zcu*&m>u63)Ha-M`m%#ho5<&`E+xk5d)wEU^oW=wTOO2FM$^;0CQ@*cw!rk^Tir+23 zR0UZ0XqAUAY4Bj#(n}3FUuD#Lv6QBUxNKN`X@94@^iH5<9r-1*lsou{r!AGAHA)hYgN>L-Fp4&3w zl=w30`YA@>2SwrUrCm#>zgb&OaSLbfD@f=H`b>VBhM{s+qB&V&MFXGZkOf~3N|*-C zHev2~lzU#?2;d~^O2Q`3bb;5#)1citVs>$3q$9SfiR2FA;A*xvj6f2>oML7aL${F8 z5qwUX^72AgI!av*lKG599Xc5YUCbmGgKQ~Jdj$+_(b&)SGIS02W%G8`a5axFI%t8W z(F+F&aFaJq_ZO|kj8`jIv^VmXtup)mz8o(xDUhs)tyfgXQ9l4cSDtBhDc&Zf#^CWw z7v}NU9;<%$hh*q*N|QSLQ)A`VU7T3nCCBZ1Pn#W}uNyj13{DXHp3Wu1h<6D=iS9`d ztJ`SJYu>7DJIy{c+EtPJ^mS(Mf57aS=aZQVBp!5fC6A5aW&djfqRQ6!GT0Zt}v$IY^Cxl?X^gV2y zUvx#G67`s>GATG9`&ziQp-U-3AqJF52^@q}GXXmDoYmKU!E8T@9Mt%@T#MPetevjQ z&+GE1L#F{DHX37b#gJmp+ao{g#;2a`=69H#x-9X^4J`LPi)UYx1xnw?e%@;r_K?JYF=K}hW4e!{5r$VDT;K&Xb9nIo&GsEg zfE;k@&Uy`2#uao*a;}ssag{jQ_dj$K+BGgD>2G=@g0*5{PmX( z+tde#ZN*8?*^V7MtkdZ%ejoxbp>^++vw=>2+w4z%9#G6YE?s4I&EI0%4Ij3*pSwS$ z3?+5k_jmtSIzyB*Ve)QAhmAmPufEG@KMV!cX@JPFgG)dO=H$1`?s!j< z(U0wVocJqS9eeS>bN0vAoo1(D6TGJmNk%9eTb#l1e~{7exBIJ;H5Ej zIXSS@U51yHX4{4&XP$-BPjczK7-51}f|Rj2je!PD658QnoY0Zq^3Aj*=o;wpZH}Ux}Dn= zQWlkRfle)K60PF#BqPW;BZ?26FGuAIk|Wr;?TfS;qECAbT%u`M!3T~oX z7iKqJC278Cf5Qe;kXe!N)a_M3G;h239xyE}mQYTPEXR@iOG>=q9df21Iun=}1A8qc zhIpuBkN4^5>y2>~lUR6eU-2d!f|pY07wrn3XVUxL23h2dT*F_oki$eZz?Tz5KJsa` zY-ej`bJc;M19?``0Lw;a3!NA^UPoycZNuCBmDp`)7r}_33&z93W78*YI^0RoVolnY-n4yFJpT=vI~+DvoKJYh{fgqnd&^MwF1bX z_$^9?M!aHhz!Q_QgE$B`d@+68rD(}5;YS=%&SbNA;&a9i9R@=m=7MCleZT+x;Gh1^ zpBN>!`^b-AY)L;M9=ALIhhM^vA@F16P(;8U3gxr-7|cN!v>meV%P{%r;daZhhj0H! z??eIUKK2x@-CznCPk6o?-1n&47i8l#jk6>CNYlkrr-Q1$6K;6`I+N8bY$kKTVF9WY zz&;GP1fTgm68?(W-+w9%1it`TQcFo`=9iz*i*VqDG}Bq?w(5iDQ%P^3AqUlYupSna zMGHRB3IjOB(?8U?HVWF~^~fnhwl|*z;T+bWT!Iq2PJQreSKy4mQ(?uKZZp7FBMJEv z_|lRqiR~?`u%Fi@zP$6``{CX+_=IAjq`INQ{#n>IH?GejYNh7teCk>7aEScmz}Y`y z>t`kx7ytrX@R52P?*R8kFakvDNyLRzhnyn$xkx$)@}NQQvizqr`ltmEIt$^^t}yEs zCjcB{II>xEv|M}$YP(_Pp6Y?v`knji9 z%(#mTXj91P5VI$JV7qY?NyxH-FzfMkALQ5BeNS~>bc5zIAOxiKQM-W$q5?!EP6>{e zr1Y^<#&jTq23i(Ee_=@JH`+KG`qD=#w^5-5Ht|&)jOfD_Hj-2CukWQCezTCTPaeJZ zfdjxjf^%S#3M&(UuaZu$$tqYjo(OgL@pO2kNbIG=x_xpk56YL7NIDR_#vZ>cbN}cE zg>l*j)U$&N4~|XczL&ypgTLBB<>gkUOS0o0i3Ua#Zov8)Bq2jd{- zrYG;ICI)L40e0bdy%kZ%N`SolDD;sg8wCcXY*5SoML8Ng7zYj9(l+x1g>UXV&%viG zU_qyL-&>8*e4)0e(ZovF4uDaC@D-Ua$R4Expy+s7_%7sE7TCmX`0B+S_S{L)rgu-i z0zZ}}8i83}I= z@nqfhfyES0`+9sq&?cmjV;zXgfvGXoP=Asz_{=w&2|9F%}`RHVey zfE0$%r|nh9$ZBxN@Z&QYzs}CFxdQO*HeTRv!9>{F+9y*9^eOJ_t?KV*9L`*tn+aA-v@kuegiGSghe7yEXq(k73mBnqx(mE0NFm-Jcu$Q~0nu7A@hAWw)SCtKldf zlP%kTgxbt8TGSc+po47iX!9Q5&T|+kf2wU63;2-+w=d0-^)`|AZJWdpAp#Q~K8Tg6%#dG*I z8qPz0@^7Qi5mJr<_!x{1W}ADOpF=wM3*)XMLpHsXgKc0U3kd%VRagBg@6pX800000 LNkvXXu0mjf&;u(g literal 0 HcmV?d00001 diff --git a/public/images/tokens/EXTRA.svg b/public/images/tokens/EXTRA.svg new file mode 100644 index 0000000000..7abd83feaa --- /dev/null +++ b/public/images/tokens/EXTRA.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/images/tokens/GRG.png b/public/images/tokens/GRG.png new file mode 100644 index 0000000000000000000000000000000000000000..30afea4eb22f475c9d6e641ade2f121b5c187264 GIT binary patch literal 2235 zcmV;s2t@aZP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuEB}qg-H0Fu>0M4Z$fUz@*XrMRKbU zrXsE=0Va3`Z3W<_Db}Qd!$7rWR8y`P0k+@?U80Z=%%K@!NS{=cY!u$+iRlRlI z#!nJ=A3QYkIOxNmv$QTxq@@Wdozr#>n1vAvkrUtwo*ZDI6C^mvh0ipn?%W@-Kw|*- zPts*0j&v$-L%m;V^PX-mv0H%p6+vY*CvCd4p3Y@1Hll$Wxd;4SRhpKCRn+n*! z!UxabN!8Pv0h(VatMu;uhj8iopJmG&G8M+8l)PY#qPH#|gtV4%s9RDLO%I@XzIduD zQ8k%SIs=$BJ6~O7%Dx5c5ph=2A6NIJ{M;Lw0Nw|OJ%cC9N@oDmUK$1~@Cp$WVC-;w z)!uzx+XzL#B>0q9Wrp`JodF7NU)dgtfP7mVy5b#seg(A$ryS=Hm;m44$qt97FU;Jw z@ns=~j9Gh}#rxez2t+_2@C3(Z2CyQfnIPmaur%jRf^Px>gD0~J-vKO!7K-b_IK#rG zFoh&Yaa*6@i-1tz$uNf*z-srFH(v0!Ca~UIPUb9CtM2V8SLB(1(BMhC2OmJyXc%-Z zTS#JLL1(ZJr^xo=20alF3Hb8w0LAv0=`CwtH08(y#!7~QD*=&!Cj=g!z5wfcX)JDZ zj@9C!;79;J0sC-~lX7m;W2uK3ptz-N8(%8U3Z2HGu-iH{+7f`^cLOdcLTeNac$@)5 zb&6NCw_1}?$;lciZsICSz$Eyds5Bbwc$@*OIwM#bTbnaw&e{7SQ9?lE;A7JO>gVDn zNR!a%D~@(eV5&}vSLlKbkx<|XD0zChF(1cJj-f2Y^IByre{PrO#gH&HGcpQuI!m0l zC=MPoejs;tXO~HUXYg)7olFWy!W!HuI*&U>5r<5!e@Bx+Kw0o%fI3+kfP_;QZo;PS zKBrcLm2tj=@o#7C#t)S}wp}+^)6RGKB!Py(qPIT%dq4mE242U% z8{IJf=i3eK$$A}>rmVAtK}#Q80jQnrIz^6V$0MH&YzYup{%T&k{^AS^IFRt{yqR$5n*kty5J9ka zf}(L*S+f{>`dX28ifM=t8Ikx48xm+uaQf1%sD{CSYY$+G+JfKS@PnSeP|jbpHfNzO z#=SR0B*+Z_jfMMztxqQ5*y*d@+p($1I2&{&pjLT(l(TRfBf?*Ntjz)6{$hAAZ~lzu zO&CfG`kuZkp@#tne%zIS@$?TFdH(7y)b8WkwP|aKQ0y<1rW~~3wCWiCy_PSwkPyw% zSnqWufHX_o!+^VIkojo+%2vQNnqzo<3{; zGE{6e9Yw)BwK%^T=~jFPS+QUQ-dpxJw9Wl5ukxu)kV(85c)LvI+4-Y*(8^N}AdQlu z4$)DRy!Pt;7W)fYXeDx2p(VkLCAsgVF=t1zTK7>xVf#8<4&qeyf^zmyub{Wc^VcVP zMY&34^2F1pB46hOIiKjolUZt+Hm4-(yzxTj4?N)0r>-vymW1FXo;;JMd8zw|*1<79 z)@!xR7Xfsm%-K5_Wvq=nHZppC>(eK@Jv%`G(pVWPtH&z2E)cpRjj`+Jv>gRcpW64` z1L!7fXg?ltKS1(h5=y$hu$u`XNc^bH3gs~1yJsfGvrCG*zNj0h2Z)<qSraAyA~HPW?!k zV4Pl@l%k@FCi7h$dTEC8qbPC$gmUB9I%B&rt%$se#dz4ELC^JMv>x9Jw2BcRz*dR~ z + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/images/tokens/MAV.png b/public/images/tokens/MAV.png new file mode 100644 index 0000000000000000000000000000000000000000..df92aa8d18873274054bc09252005facbb0c8336 GIT binary patch literal 1499 zcmV<11tj{3P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuBMM*?KRCod9TRU^xMiAaZlte`$ z(`||fN}I_Cav9z_4T}R9INQtXNTIkjdb?s>p zA9Xy`eXX<%^?Moi-zhItuhb-DDWAHZ>9%&{XE47F?ry;zJhUIkNKX3ysX;+rk>;f- zpx4r^cO!X-QQQYpj&K#^iIyXIFN3lyqp$*&1U#%v4;jaD4y!0QMG7h4@s@rFL3$OA zco=v%Z7ibyRvm{6vZfbOK(~d3?SniQCGD&oRb0=5HQZdp8l1d>an$ulUeyRZA-L)j zd3CU*_w(Y(WdQ*HI~wHfB(G2f>-YL+>L@FZ%nImk>E~eD$;$Xr>uEX0y0Di;hD-{0 zd_@m&F!?qM!`jr**ec(un`!c-t^pkRl><-ISfIO~8>>y!L81Zx{t&G@i5%)&sHDSn zD@nw;Q-G^I3ZEu5UX?Q7c=X$uip3JE0PgeL>QLBP6_81C0*9~9Oujj(d^YoEX6RpE|PB^ObK= z%~$~DJuf$|Eo@rIsemi{eh}Bx0-Cn)1wjVmVJiq)KpTaPSoMQ|!||{cTqs~9hvCX~ zPv1INOhODar@A4d06xP*$~8GF@<;GLb{7+tRxrUVV+(Lr>$qD4yj2+=+A?mZzztha z_pl7`#E5Bd+k}(7|DU=8r+nYt6S?!ptfU85X4AP+=d$Cd53-x9(Ir)m17BDays&Zj z#-=c%iWyV_9x_kfR@GYpRe|T2VI6R}2yQb`NBZKM=$tQ8PFTRU11;3@^hfXy{w@=4 zlouZLwP*ouw5ZygO|0D9&c6OBz8?#o^(rQJqv8%`*b~qXzlvP{MTGG`5r%1r;7!*{ zQ9u}Y7_?1a{c>#fOBi|ErBtebtiUPFWq@bDRDg${i(je4Ic`lojj;vKaLMFt;AZ4w zCn$}+zdK&wvVyrp@H`0lw189m3ZDk^0;k5W;so*lmXcLjY*Qv-8$7jBU}3&rT_2A) z!@P8B!TWsPeiG^rHkz&U@5yDRJVog8?VGfuu3Q!~YD_F7?aX4NQr#M}?N$-wHP1oyI+SQXpRl9kSxuKYn1GZru{_(=Aev>+NR zaHgK(3q)cS(D#+sq^UqGVbixdh*ba!=~oBMHQ{VuGdfgRjD%1odQ9Do}8&`NS_4rY92qy0-hK$ zDS#CxrgX%3or&vKn%M{C&#VA80^=U0!XvY-1i928PMIhhtaU$+IB1ifYUfdkk0Wrw z*_*f3B_Ui$0hS>Y(ZK`NL!@1sx6F{E4iiq?=F;RTqyRFXc$m`c?t@t?t-~_PC+7Z) zmp9&DitsF~0Nc5l79#B`Euu`|R_@XiU>PzrPKaaQ!y8Dt%qu|rs{93?Th{vH>3INY z8T3TM!DLtS%d?cv=kaxehdQTtZ8a?OBk6ha{SV}fg2oR_`{)1w002ovPDHLkV1nTR BqG|vD literal 0 HcmV?d00001 diff --git a/public/images/tokens/MAV.svg b/public/images/tokens/MAV.svg new file mode 100644 index 0000000000..5702955a8d --- /dev/null +++ b/public/images/tokens/MAV.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/public/images/tokens/MAVIA.png b/public/images/tokens/MAVIA.png new file mode 100644 index 0000000000000000000000000000000000000000..0b5d67561f62f13e88f95932ac8f5c0c8ae475bc GIT binary patch literal 2231 zcmV;o2uSydP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuEAxT6*RCod1TTP4zaxel*TrS{ASm7ilyCmWX0()dHEO7x(`~(kjVj>3* zW_AY?BSM0^1ciu_F%ofMw#)bRPWRT#_HFTO_uikt0{;Il0P{Jkq;rDGc zt0kWrr>r!nRg!2UK^Y;bO`Tc_8X-w#L2`uKubU)Glzv(&4ZMT*#EM7)bGGw`e9APo znkliRp3%VbNg5F(3ge=3x-|H9AuzlTKx_iYb`58Y3hg73`+3fc&%EKfSr{bcVYB5) zAui2`EP!Xi_*8L~4Iu_9ssH+-3L=sKa-GBbB*|W;FPRme%6M%{RU?MZ<_2mz^xr}W zfLFauROBfJ&g)N=;7AsPIcsb~7;P|ul7&?_Dss4KmqEdXZz6f@tYi+DQ62`L7OXWDn`(4ZxNj-5j#Rm+-=Mn0d!_3U#(v#A%nI3C*%M)Bpz<4UJK1a+$GMQ9m zj;lYIB7lw^#V#ZkfO?(^JH@L6OppE@*Fv{oUWz{XU>P0g zT<+lLzi?j*)@RThVal<4KlT^wagGL9tDjJ&2QBD7w32df%(v%l_=M)1WzE^XX>r3b z(K^IFRSO&e7*EVRBd$@8XcN^!FMX+n`afGq2YFQ&yilWf)xJ2}q*#Zi95% z;Mm+8+~sS3>40mEDgOMZW*k)hq^47?0aRb4*n(F9@6T!PuWFxH-AlFWO#(K#XWJ4A z>(u_?un7}8_w56RBsfYhlhHK+AT%puE7GaTcvjM+FLY)KQGrS1*Dj<_kKeXT;_|hJ zgw;d)=5>n#VFa9NT2WQrZF0kC$s7EoChOK2wr$m`b1joV7KidX`-a~BJNz59>V9~! z>IY8TrafQYa{P)NC3Nx#Km0ZQ24xK)Wvl|g1X!(O`(LBI?=NxYgEs6va*MotL!nrv z&D}pyq4>80XXgfp7I7CTMO&JL(Hb{m8y{5vy?5CUFyn|4wl++d#iVb*szXCm#w{Us zzedogqzW5;YnsDfhR=@@D_{gsqW}CoUj2vGJgRTN%ECk-1iQd|5aN1bk-OE;U3ox92k*LdS#4k#X5;1M8v<85fOs#w%uK140vHEc`uT2}&zk2Ib*$c=%5am~JQq$-t+z&R%{*%1j25maUwLz4 zjMM5+czN}Q&UCD(pT<=H)vrbP8kwmFn4#~%E=eIh4r2;UD;yWqw`r~M0d^yvCF@?D zepFClo2xDlH@YJTI$cdbWgyo%G{EQPAE|9KrOtGp9v=6&mMTr=&}eJUBK!Q*UZq=G000^q z%=L0~=;mr!MbaeoGT&_PW*YYgp-0OH)FZU=1l%WXk}I{W@&%b5+g+dK)zj_v9!dZ< zqAcGl=Kt^YOrs#M>YicFrnS*Ck^q2oB5TCOLxE74X*5yH?QDXw51Y4%U2J&lkp*B+ z4M7m!HceO~Vq@H2=Ta3Cb+Uh-{~sU2PqD9r+xh?i002ovPDHLk FV1gp25WfHb literal 0 HcmV?d00001 diff --git a/public/images/tokens/MAVIA.svg b/public/images/tokens/MAVIA.svg new file mode 100644 index 0000000000..2586409518 --- /dev/null +++ b/public/images/tokens/MAVIA.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/images/tokens/MBS.png b/public/images/tokens/MBS.png new file mode 100644 index 0000000000000000000000000000000000000000..c247e274e9341cafb25c34898ceeae77667f87ce GIT binary patch literal 4902 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 + + + + + + + + + \ No newline at end of file diff --git a/public/images/tokens/OSAK.png b/public/images/tokens/OSAK.png new file mode 100644 index 0000000000000000000000000000000000000000..51fd9e99ac0505cbd154ce08cac149253ea12fc4 GIT binary patch literal 2977 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 z + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/images/tokens/PRIME.png b/public/images/tokens/PRIME.png new file mode 100644 index 0000000000000000000000000000000000000000..ac51b15a6efc2da7fe367619797efc8d85de3eb3 GIT binary patch literal 1543 zcmV+i2Kf1jP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuBaY;l$RCod1n_Y6-HV}XpkY4M^ zComo7z0M8jT%hg=;+!DP2_m1M_6cm=z`20M8$@|;D&_=coX&KnQvuyYNt&WS3QK~N zSj=b$l8c{j0qjBmD4^r8d<-WrhEt{BR0{dC0+6$a{WI2S_v0vf`?D}Gc!q_zGe72KmTVtxkoDZDCR`4paO5bs+< zSJ!!=guZ!o5ZzUa@ZNY)!1BkNk6P(VEPBE#zOi&Hq_{i&>EWtz4r#(x3RwOKL#@Ou z<`uN9NW=6o_K2%CJ))5UjA0weTO6C`4J+<98QKZ4((jts2+6I9X>}<+?+rWwprO@L z%zu9hFStA`1uXvz-(#1bV<7>zpdRD{sl_eXBTiY)LjYSI4V{>BGT)V~7UJ&Y;NhK1 z`A!NL5_|^js)Vfy7$Q7J3AHw0$nc~DoN`}mvk8?w0O85UlffH&(4aq@yoj!CAXWvS zpAX2bV1mGwXn@ZWq4aCpJi$5yR?=Ae{|h{|*F=xZjCG^!HhKU}Cdi*|NbdGQ?4$UR z(9@%XXjaT?T)d$;!m}n4<@CPqvFp+l_s(~|S$=CnAe~AE*~?vDyM`yeH3jTb>-Paq z3do0mX??vHR-Y{Puh{J)s$kb4SHK9wTitbO+w&**GlXAk7xg1yyg=&rmwvKroJ%dd z?^$W8=*ZXrC1KYK8@<9)6DcVTvr&Mg)!W^L-r)&VfHus6mbY-)`?w>1HasrAUTKiA zkNS>4-H&P00&urt2Z0SwuJNVkNs*)-o1wsWF(Z`d2KrV&qn7Uio*EwQpE&BV2kaF* zagVj`Z8yg&JZ;0RKu+28+?B3 zEw?1GELws{{?mhPdw-bA!dNN zhzrT;-rV9*KWm?8CS03sNUYh>} zw;d_Z@o0sou-Z98E(}-R1%AqfPvv8YZiL*RwdEW#<-%~~JB3H~*t9)v9)5CwEsJnr zxbj`XgAh6*Afo_0glKN)fn(spaOFFNH;gNo(bcR9Q{<2DXP@zMO7Sg$3&WM~9v&cm z`C@)doVodP90pt%u6!Txpm1F=Yvf!3I1H}wAsNJ~z=h$;_X3Y_$q1f@e69fU2G|R3 zD(JZ|T=~A>0Z+Zm$oglTxdP}xMK9pOaOHc0M?`dcih6n;))ZiRL1BEL6c>go-zU5o z`^DBLE#zJxR|!UzPiJ#nD-3X|NV~L);=3%~)AV+lmFMA_TmE8R_VoZfcublpYb#4Q zKzP$Lv-%gW)*et4D8~l~kA@GA$sO8{$*tLdGHm&NnDFAN3ZD3!d%zIkaocb9>TrHh zZph-jQxCx7Gv}p~;(KlF2@s9=ml2rHc#6CmaVG`fCn@*1fjmo7?>#)VJg)VHI|MO6E6y|z_5pjt#Z!KaB)MdfHp~D=QOEcYXyA$9$w<-uD=xu?i0RIs~76}d{DCZ zkQ1j*T9woRD&Z}qW3CQ!iYm$y_zl{lYdkWu)zB3amgB8^K$an$HKce|H?$0sEGg%j zgS%LGmyEqBpsui%@G*Xmj2}-c@;*^rIZfVmt^hiQhZPI)U}7kRI--A>I8f*rUe`j5 tPAs9lN~PsDtzd!2*rKW)wU)BQ&A%gA?hXx|9|iyb002ovPDHLkV1goGz8wGn literal 0 HcmV?d00001 diff --git a/public/images/tokens/PRIME.svg b/public/images/tokens/PRIME.svg new file mode 100644 index 0000000000..ea7f731d1b --- /dev/null +++ b/public/images/tokens/PRIME.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/images/tokens/SDEX.svg b/public/images/tokens/SDEX.svg index 70bef95b07..f1cec754ad 100644 --- a/public/images/tokens/SDEX.svg +++ b/public/images/tokens/SDEX.svg @@ -1,9 +1,12 @@ - - - - - - - - - + + + + + + + + + \ No newline at end of file diff --git a/public/images/tokens/SEAM.png b/public/images/tokens/SEAM.png new file mode 100644 index 0000000000000000000000000000000000000000..31d4ee08e79f829596c1e799f90af4d693e25a79 GIT binary patch literal 1430 zcmV;H1!?+;P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuB07*naRCoc^m;H6yHWbCz7K*j zee-U97(!HV4R4`=tEZ9Sf1H_JpvJH8^hB-S94a#2K?}cUQW|?$!B-7E)h+x6bBpft zw`kYUz*mDM3J)8iCf`AG?Jj&GfjOUeSa`U0H)8QVsPioh6S~$~jZjXD;Mz~UugSWJ zo4Gr1M}WQrUd#S=t|si?K=JM&DA%Gmq2|Qj%J@*K1M22mDLTwkxewy^!PB1~HuZ>2 z?C}M|Gt_N*gu)8m!ZkFoG-?DD_wy8C{o02eow9Dxsi2A-g5j`+7EXyX(TEO?0GwL&K4N$YP5evupc9JwK^4gUY`Y^x7!# zvEpLSM_&a)Fq;vu!M8Njgi<#_uY&Y?amPt)H$%I9uWJ5*K|;xgF{i8>bUI1WXT@4v8r5$^%xyr|6CEm~;qWhb88TYv>__eQ1e^LEIX^QY;ns_*SD=D5+(G}$ z#h7DM?M1$`8wn-CFH-XmhK(9pI7ji)RO5>T_=e6(VhK>ut}xAq&~WH%OO94SO9?8; z6toz-*qV=Fje&*Er_@+fuo|nvJ6F-J2+d<)Fw$*ve%Yh`3Y5e@h?$atf!3MzpTS<% zvUCIVJD{hj>pB;X2!AOlZV}7AN*x;8ktEe97gzHXsL>@}1*;oyNr{|b+hA*94Gk;_ z<*bjXTwL@i{0Qf|vIgxv6prvKJi#+u!5kcL-sTA4tJ;5jd3|TRCUu?fluRNl_BnYs zdIj`Et_|IW4Qvt<(T&Q%Nw2^$N1?;_+_BfSrJ_Y2A6Yd1#>o6Kaz1u^at66q$-joi ziH?l2^ZhixAMpu~Wglw9uC2t}cfh})@&fBKG5o*hT5n(q-lrG`wnu+mv54*5m|g7) zN6Za2Yq*NA4NY>s1*(!_epB|L@JwqJ;Kxmw+pe6N3_(A*p30P`*_G4K-ho3uZpysw z5?0bVSISSI=?YMA&!FYUOPQ-i`FEmWH$|+^b}&e11#D>$pC!4z8qE)g9A2V~S@sENMPc633UN^x+MIAQUa@-dqX5S9WKR-1r^&ZCv z$Ji)%4X2>Osf96d`fMisCY5{@Tw<0&YG~jP^x9Ogh0Zr;R4tvj>D>Lbxnuh2*RtsB zjM@o4!V45`;Tjsaf+g?;ktRpzfOAgwuj#AYi$FhQ*DPd8Y~8M+IG{Eqk!$!U*ICe@ zdX0ioV(w + + + + + + + + + + + + + + diff --git a/public/images/tokens/SOFI.png b/public/images/tokens/SOFI.png new file mode 100644 index 0000000000000000000000000000000000000000..80afec213700b6686d4e1d462de69d36021ba63d GIT binary patch literal 1168 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(<^uz(rC1}St4blLz^{>#(FF{Fa= z?My=-5l4}>`$A6x48kRvTRRtCaN*Kju)t{J<&LSnMOi)@3@%lQsU@(7C8>6{s<^r4 zu9)DEzNnQ~%xp$Rq2WfwKp`a!_K(NDzc+fmVSD+Tr)h24_f*QQ&39Yp|9^k>O!a1W z6;}=pMnwgdmIeU4*jY(?$-X(1{_S|nO**9=~bXhELZ?gKKcJDA& zlWo!hd;A)A&e`>KyUX{jKbqB@K7RRZeDQeUqO1Nb3S*`xqDuj?K|I|c)4Nk zWbvbgI+Lb`-^?%MV|Y|K&$glbx7&@|cTXzq^Ai?*cKZ1y$4<4{7LVl&J|92S=zffs zU^r#?t@^(0JifP64tf;u9z3a(ajf!N&9Z3~6}2BDRrdYX3cS8^#lGCck{Rj|@{AuX z`VGR*e!hBynNiH`jenGW45G+um<`Dtp@wsok1spq$=ovm|4$z) zn;7QC(A{zA+7t_ZnYAMSpSxR$?CI|DI&eFKdubwrcpR&Lg}Ql1FOQkY={*})Zdc%} zs-OPi_wHNedip}O5`Xt+W?lKc;hF(M$)$^4m*32==1I(KRMgR3U>bXHQHRNl_e;-i zef538`PTM_Kc_BeZOiR&&ktircztW)LUEo%7UhSRA8V9^P8Xi*DJ^L5{-XM?wjZB^ z4<7NWU2Z$S=-RTkeHmuU+d?{z{piyv`jyowuxH)pdSlkUXf6FJn_WL*8%@t=TZg$d zyyJ1NV2^v0wL{IpVb6ijrCrCnCnfID==^^5MgD7L2m62>-H-3e6jd5)>zw)c?0IEL zsP6gXgNNrlPmDjJ)LnY)XtYu~gF<0+-vMdqj!X00|JBd2_dF^fzfWoN)(5ILi?|rr zwky~?%5t-J*xYgavjsbYvN5w(`}GGgXUpcQzS`Gz?bM>jHuDSLRp#FPrL@A@tl!H2 z!8TPDYtPE2)fV}7?m>6C8|HpunO + + + + + + + + + \ No newline at end of file diff --git a/public/images/tokens/SPEC.png b/public/images/tokens/SPEC.png new file mode 100644 index 0000000000000000000000000000000000000000..42189b6b9db206adb6e6b2e853ae88322922868c GIT binary patch literal 2103 zcmV-72*~$|P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuDp-DtRRCod9Tg`IYHV|HrYV77x z_K?`ODo;@7+KFTN3F16KdX!84pPiKf51xKP;9oz!HD!y|eDx(_apjC;~Xk9GnMY0D=!6{P63> zvgBAA01tbwcNoA6QrvNGPycrSumDa4z$8|@x3>BEa2X)rB((o~`1I`95zqw}CL$1T zV+m$+cm8PRAI;j7sC5@0;$s4R--VN$qTUK$InI?e{@6MIM0^Oq$(6r1y`!Cg!}TXW z_3o56SkNi}>zl9o=yO|F@Ad~pItj;Zl@MD4!0VlR0@yJU-%*kBVYz^fHVLsc0PgYY z0|w0heEIT12|)Dnn7BftUhOKa01y*jUqXCE3V66WwBib_0KmC;0~|(D;wypxV5bd2 zY#e})_yl;Let$VE)>ZySF!$W+oqF=Oc1jxsfJ~o=kGX8SqPX2ve($hiTdih|0uZkG zNPLE-pAlRLcF-gtHU>aQe7NQt5MM^|)B_RXdFt8fZDRmXjE~EnJmND~q4#j}^^SS7 z@)nH%5GFYo%&so?#^oaD)xZeyvCB|0}yX^ zCOX9Dbb>xA=%$-D)sMZ94;sXG_g-hfv?hmvr!FKk@Dgcz_ zA>y0)yGn%?@qvI5TFeIHcX9(N{H$h=tN}n-9@^~a5ML4>fa^?=+|K7;&Bv&*uhKgA z?${O~S^*$j^W|BdoZM*olo86t2i{7sa&G7f*0M)d0EmfCYt1i+4|d@8wrk`Hma<2+ z0no|vBxazB4`}0K>IycpN3{UZ&hj7v8u3B6&KtRch3ru+08FwxTJZszwXrJz)XE-J z1|TLrtt^j8d{Ds^YGscq17MQn(Txvct_WQLEk>O@O^7ABR?Z$(0>C88V-g=MbV65f z9qutEP8MY)H)J_gVgq9U$n(MU$sUygU=qcd z#0N!+D$0#rK_`1u3V?1DN2aeEA1IVmzcP1)((I8E0Fx-rBtB4UseVga;Cbg}fVHOT znv1u}>`@^AF_~#aaSwX0HgZ{>#pu>=a0^V|3k_BUW%j5LfU+o#*7~*0pAXkI&)%Y& zyhTMl&f!Isc-#ym<^y;9pySRkckl@Fkh`VfGP+LDr*s`)#+(TzEibO#?fJP*rH`=?$M|weX)f93NezIu;`#BXxElGwbw@4) zGq~k_!5D$j#XoYJ$7xwI0K~J0v(GN@s|}vzb#N;xew({rk7cu+A6fRC06{`IcsMdW zxEz2;@$1g&2eP^_0tM#D`YtWQtu$Ke2){r0xTop@x{d(&2CZQ6-LjMJgrYb^#B&7y z6OS-I*PZQjANhOwP=bp3jAkNWAJM`Fjsuc!hgrpuV^9`SJTpi6?$yt@Vj%G65THXa zHg?=#%%C$(H_DJ8kqHhr2~CFaZn|Qfdzy7R97(KAL`i<1BFZU|+uU7!&K=kya;2lR zk@9s$&9+5;=<~pN13{J-r0}jkL2_czsSM@@=)XVu+3xB+k*ndX3~*k&xqH7~+tf?M z!Et7IIC~@`ZYcmse=7e?>eRWC6>!|T+MeySOxX9Bj_IViC;LAARB*rkDDV-mBoZ6Y`u%F`IuEFdi~@k12osEN|R0;ag0p`Cj5)Z;ivMFw1pxhLnJjco`m}Xz z1%O1@JW*mfTF9M*$c5=@lJsBY+A08vfJtbL6f{Nm=tbpvp=;8It?N<%AmNE07DS2P h{dB@sTS}+<`4_R4HWR@2_7ngB002ovPDHLkV1jsO%d`Lh literal 0 HcmV?d00001 diff --git a/public/images/tokens/SPEC.svg b/public/images/tokens/SPEC.svg new file mode 100644 index 0000000000..19562b3995 --- /dev/null +++ b/public/images/tokens/SPEC.svg @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/public/images/tokens/SQT.png b/public/images/tokens/SQT.png new file mode 100644 index 0000000000000000000000000000000000000000..16731a9f5c93ea6e79092875f56c5e90b26cd15c GIT binary patch literal 5702 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≺-w1YT}QigJqLTXe+6J$7b|snE?9; zXe1+i-d1;y?Z_K}%K*_Zp3jR*g9JIVV?B?x{ndV$_pvj{U&Qx4=v~I9q~LjgP6xKB z$bgps=p<-@(p{srArYA96S@}`%n()vkzr#*FQ8t@@eVN|J#jO3iHTYeEk3}VoVcQZ zj7L!cFb1ZFlq5tCCI||hW@+jACvrK|oY2dUoXNFo>Iu|60Z#j>*G1qm23ntOIJoHq zGsbD6uCH=Y9+s;Q0x7339B=@uXL?EsKUQ$BFP7Cd zS$Zw)hm+ljF20O!d)OT=LtlaIuXq5xK)p%zvyaL%l&ClzSdZvF>A4HLEhS4yB5)Ey z;&>(a=Ki)?E6iO~>R?MFL9aH%G}#^E8NSkD5CRHIk%Hsbm~aFYa_Av3;sG2qJw@6{ zIRokaStmREz?pcvjIX}M#8iN;2qfn6999<~&bbiC}~{fJ1u(x&V+M;fW;OOlX;PC9b&;I_B+FwwEMwwb)c%wTS2`zK`tj z`Gm!^g)yhr?=N0B@$Ka_@mBz}MdB1NgBZO`L7)!NJUqk4*VsPhI8$7#Jr6`uUY5bP z8(?^cYj*_2hO(ApwL^5kHhD5_aqa$pN{_yHe{tc&E9Y@q)QjM0=?M=I@R-Z+5}5Du z^w7|*9ajJ)BE|v|SMD^LW%;HYm;rV@g{^J7Uib4TH{9MfzdkaSFp5V{P!g03sl&5t z|C?-0j}h*F50_~H4;j@#@4=4J`^!n1nt{&c7|=rWMzF&?z2}iH{_D?`gw)x?0v-cq zt}!G4!oBVV=mCCXd22EN?sV1`u>;H)BV_KA#7G7_DM`xh2DhW1ee&N5xKD<~5Cmc} zV3&gu&lpg2Bw&DRoL2IFtGu?*!FCXghN+GKn#vslo=7qxVDrICi!#{wtSNOtmLD-F zhaiPR4}+!9G;xm*au^2~-DvGNc%23s3j`e6!ObtC$z<~OWL*0z9ZH65x?at(+#=1D zqgMd;Bnglm9ynkOlu3blh~$)uX+2*ao;v+T51T?RX95zx2@uA3V#A1nr3@EAXoqp* zq3(z})Jt@R(yGil)gPwsk zi(6cyb$y3oE{F1|8I~!_)?=sN=tiY6$Lr~FE|+Y>wsN5ZOee3d%J~_lQ+Q4bY)?MU2KQRE2{u>@w{-);4%-QF2H9(0LWGka9)>0 zxOVBpV}t-~LkIX78a6rd6B7kfq7x37gD=b8lz#KfGanqxd%rG&=eIk)ZgPNFmNcfY zt!{?+vlZDV;JJLaqfRMfU}I3yR{P^~v3wwkFH|@W3?QTr0%PBpBCGd)^U-2@d|Wxy zTi{jbBg6{4VWNz84*PmOU>hNTg?V3|*X^y6Aiv2Y0YXBVeen-3kI&L6&y?ar211oa(|mgqA@JLC6Kq{k6aOY%YVT z{rTYo&vpS=tS{}UV?5#m59RMs6Ko#S3&G0Sp1@mDj(=Q31BC!=^LK0RJ}I zG)Y8od!0_IBZ8owSgyb;KuitJWg#G1U#39-O8_KCh>`aMSD35K;}J;A-|3vq8rJmq zE+HfVd?XC*fgWjO#>?fH0D_rw1|*CDi$%uw*p1Db(S_Ji%(-nfW)Ckg_%Q>2$%*## zBm&%Lb*U!_I?oA6^vfI#ULuwXq|kD-c=Uppmwww^^UF(9%O1y+lyf;qg7rf?$+gTF zj}X0K2RX*9X-oibu`xXl%gMU|Ehqs_fY3F$PjKzEFTA!d9-P6p)h2EkaikDHXe&A2 zFVH?-5?HB^z$v405+5{R2I5E*p3!pfF32&KC>bDR;P;vUzklBU=*Y7@xc)IrN%gcq z0tp0iE>8uNuCf@D)W;j<&wl~lP^5F6mnUkm4ZBgbN@i=%W{Y5f&3>H(SGS$zrP;) zs^>p?;OP#Q&`s))sS*g|l%Z|`;{7UuUtVvwj{rV=?sI>SZ~b z%(Lzz&mWmd!i5u?8P4rcPjnX~>RfVByd0EG-Rj~*dl19-8x3>@YsG62bK8l2NLW@Va*JOl=w9V-JTZbS}cU%?9LS+cN-_S zm*;lpwq^x6>Wk^eN6v9+UY9^A-UEFhAGmthY?G7hA8sMVUkzXOV)LIa4xf6rV0) zE@nRdug+K64c9n~n6SbiN09tl#NQEMuP;%a(Vmu9Gek9ZVD{Y6n}MhFfe46dU;X6Q z*8!S=2S9<8fbloP0jYy?;Dweyd{BZYhk#UIkO*!#ff<9wKY8m2XaT5hE|$lAv^;@Ju#PYwHKhJ)yiYn2TsZhVCYuh$q)ls zwg33kEybW)CV>4Rf@jTZ_%XHjnd}JwT1W_l2oYhY$6v|?FTnW38|0p(kccrcC<_V9 zgJpSN2d{1q9Rxp-@NTeYj>F}*C#nx{^R5VpdjI*izq-=EMhD}`;@npvXlcZS0EC^? z!N+nWAOdH-TA9Rfk5Ju5cb^!r=aD*=xvA}K9N$6m34I4?FfDWC<1b{kv^{|6(wbB# zRs|Rhlxk(I<1+w*48gKaEQ~U&D?2#Z4)Y$*FxAGgB$gX5Xkcjw?>mpz+Vz73IySgo zx@`iY;lBcC?Ds_u02$RWg>*U~mmiygjFA2Z zj{zK3zsd3z8{90vV+7PY+UY#kPE2_WB(zC}f~>^?T9;&?k+?R2;vU|Bw?zD;4f}Zv zOyVpIUf|Iyu=rLy#;W&qyXBt=0rf$>(^<=svgF<$q?o(m{u$gHzwPxI=YF&{22x;K sJH*chdA2~%Zz8Y_VCkZ+?@pKh52U#3NpsIx5&!@I07*qoM6N<$g4(^i8vp + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/images/tokens/USD+.png b/public/images/tokens/USD+.png new file mode 100644 index 0000000000000000000000000000000000000000..8536d4b8e8333ef7fc411bce2be562b847c72c1e GIT binary patch literal 4473 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 + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/images/tokens/cbETH.png b/public/images/tokens/cbETH.png new file mode 100644 index 0000000000000000000000000000000000000000..315f4d8aa1f545a08a84a474ca07db5a7c0d47dd GIT binary patch literal 3603 zcmV+u4(#!XP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuJeMv+?RCockTL+j`)e-*h?gD}! z2v|YgMG+~&B1I!nDT-KVi-rdMa>oZJ@#N@4d9ygz(q}g zE-is7dC9gQxgSZGw@HX6*8oqi19t8yGkPa$?!u?IAM31N%C!2Z2uFavc4HjE1N?j! zc;_h02Y!DsFt`&?wX(M*dVc>;z*36Ed!7O|d|C$IT5`l7EV6V&0zq&B6xqYL@rnHM zHO)+ClD$WF2L^HDIl(a+G``Xj8+hu!!0nF#n^UF0cSJCfM`DgIM5UelFSoZ{nP>g) z95>obP?cx+)*h_jFYYgH<|r>c@G~&;Szz)~KzSD|Ohqxq`aKf<2r$&HMzJHx_A?VT zr6zy$Pe5UTsR^F``(5BT@=@#4gO4>MbR7Cm2R40XYM5Ghl1Fq9p0 zggMaBtpF+}Kt6??MQWD9_`blM{i6%I4|f66Rv4_n^X~(@zfYFKGxab%bRkP^ttzdXESW}tq+0sK8b=kIra{6>A()jGIJ9l+a&{(C4kQT zuZeSCOZ}VBe4Tw=bhZ~RBlwih1k2t6eu*Fu4Ne`08G~thQ&W{fO&q4-ChIi~$`asI z+`v9<)vr43_{VPsYDE-yX3m+<09#Ux7t@qTzuE_^iYO2bLJ8?dxpvn+v1zr+bWej+ z0uX|3GZFP9ON4O^J0f4?_|GH{8n{3~$jp-6C z{ef57n`BA_1PR2$zXlvsPWQnbX|?9Njn#Q`ywQ{#0*tqF`1J>y%8}jUk@~{-4_;U{ zd+l^HNtRU3k>_I)h|&r}cujX9;kBacj^GerBhKU3Z=#BN6cIhoRW3S6@J(3}9*+d# zw?5>CpBaX9q8F-$+p}T9Z^@!VfRf}zr)z7V2Gw62F!s@MTv|Sn|8$5((>p#pXXz$c za7}wprxJ8l$squ}SEi|NJClo+uHFbNdNUdhjedO#uyIFpJi^ePE;7vxYciU0{{S>SkTO*w2T zi?1TVC!y4ky7`J$Ko8oSryWNhMnWWIo^j`1=f;@1)qic3NsMs)<>dm6X<#*?4^iAEIKC#JFC+K&2W0i_U-CYXLH)fzfp~r+n&rIvM*+?4f`w+f z9JnW=RRgyvbY|RwvUht?UY2DuUaVZ(JZ%OM!midmO*M9= z`yZW=uWllNcud7bVd12dn*i#I16-!it4&ytUvKzBe6*p|(yNbNf*Nu2xkk?fM0^yv zMiyxkUTL>~Mbo&Lmn0sO#T1BRdICC5VL-1^9ymn=sB0=tsAY1&(|cC}`}n2w43?io zs0G0;0!m<>aia5d_AZ~zBo8h-CkU2gUym`Q%DQ_~yMgsfEk zDu?{~TAN1=s#sMrzy;}CPtmRSlewiEA2W-|qLcyOeD7yO@IHED)ETamG-(4PN!cGa ztRwIfe-u5A)Rh+~EEMKDDo&S}mp-7sp9WDJkVE!5fdcwOifh>rQ6TLV>3}$Qw?P=i zHNA@G^7B28n(N*c(EEYZUR02Jl+>4i*5^AF9-g}pYlOLTA<(r=cl|LMa5aupXPHKwM&t2X| zx0k=nNo3CvUFlPMkb3-9=UrbTWq61iy0r$hk!&D#*Vk@L^=GWbZ8VDRS_Ukk3hYMi zsuO_#DI7opR6?+rnjit2c4S*##q9$wbfPdm&>)(Sss#%3fmwebXPo8ql7{#X zN#BC?B8-vldN&ZOf98s2$Lf=tP6Ubqx=)-k)Z?UK1X~WnNO^~Gf2alp0r0>u=zx*#cjNMBZ)m&^R|*PWmT@8*T&GWLtQdErsKktgVCgJKXR z1ZDlKOr-py3r8FvdtHR^f{w)_uQI#QL4w&#HATN^6x)-Dgx}4*!37>yr zjc2Td)hdzpgkJWg^)yFSfVumsO@02#!&%g=c!eR#OCgrQ;z$^-fO%G zWAnnL2s3vsivgF-7XA%+TWY61g^d?I1a@gr5~Z-Sey|$ zdJ3;|!N$WV4Y@5P0Gp~|7XKblr}f2*M}1kjc;KFa6m|iuL0ws+dVahsS6H1Vwop-~ z3r%~H01K>dSvkWr+`XK)q(i0@EtTJI7S)eYbroULwO1SyH3rGdp}WKF3rvZr%@Er~ z)=pECB!FsiF`a++C@TRrg+z!8^x8D4M|NzT&UU;&*?aoyp;$tXhk7T){%r5aR01rr zB#)<=4wIKT$HA1NrsJ+kiP|WGPImykOvMFadj(RuVB_xe;ObNYsOMfxA(dWJR!3j} z4@G%uOnriYd=2x4XI8N?fd_Tug{g87jOF*0VWj{{_x^8VEq0`SeT^{1PUwI_$2X?6VX)MTWTH_?|xtB~^UVa2Qmr?;V8~+N`Mnm>! zre3RgPdLO|Tn9>OsjDcUCoVmLbRs9nVvGu6d#SrS7JD$+Sj2Nb3|~wr@zkbdvu{HI z#|k|5#0x7hdG_`3h0mp|C`3U*T5>AQcw2>EP?RlVJUaojAQ2%i@y|+q%=#3BxL`zl zVRQy>&{Y3dG+<_mz>~4Fkb#jyvTa^-`6GaO4rK)CZcJkC78M0jYZ7P*r;GBa;$RE* zS1MYDnrxL6i`Ayw%ELHXd+d=N{1d?7>R}I|@|?D ziK&h`-A3H=Q3dzGxxPn6A0GkCQWSNnz)PEH|dnx;-9*uv2(x$zgUn65jE-m4fP zegdQ~t}Davav6zc;avWjvY7`U5tX8=PxZtZuo5rSyICgl^Qq2;T=ko1fUQZm?OA!G Z;QxCwnvUfm3BCXT002ovPDHLkV1k&zqjUfO literal 0 HcmV?d00001 diff --git a/public/images/tokens/cbETH.svg b/public/images/tokens/cbETH.svg new file mode 100644 index 0000000000..65388e3d04 --- /dev/null +++ b/public/images/tokens/cbETH.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file From c8867da63bf1554650b68b5279235d51b71bcd36 Mon Sep 17 00:00:00 2001 From: Cherik Date: Tue, 28 May 2024 12:58:11 +0330 Subject: [PATCH 58/90] remove ArchivedQFBanner --- .../archivedQFRounds/ArchivedQFBanner.tsx | 29 ------------------- 1 file changed, 29 deletions(-) delete mode 100644 src/components/views/archivedQFRounds/ArchivedQFBanner.tsx diff --git a/src/components/views/archivedQFRounds/ArchivedQFBanner.tsx b/src/components/views/archivedQFRounds/ArchivedQFBanner.tsx deleted file mode 100644 index 3c76eb620c..0000000000 --- a/src/components/views/archivedQFRounds/ArchivedQFBanner.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import styled from 'styled-components'; -import Image from 'next/image'; - -export const ArchivedQFBanner = () => { - return ( - - QF Banner - - ); -}; - -const BannerContainer = styled.div` - position: relative; - /* padding-top: 160px; - padding-bottom: 160px; */ - height: 500px; - img { - -webkit-user-drag: none; - -khtml-user-drag: none; - -moz-user-drag: none; - -o-user-drag: none; - user-drag: none; - } -`; From f1e5fb926de099ea144c05acb32ea6f159991ef0 Mon Sep 17 00:00:00 2001 From: Cherik Date: Tue, 28 May 2024 12:58:19 +0330 Subject: [PATCH 59/90] add DefaultQFBanner --- public/images/banners/qf-banner-empty.svg | 1820 +++++++++++++++++++++ src/components/DefaultQFBanner.tsx | 40 + 2 files changed, 1860 insertions(+) create mode 100644 public/images/banners/qf-banner-empty.svg create mode 100644 src/components/DefaultQFBanner.tsx diff --git a/public/images/banners/qf-banner-empty.svg b/public/images/banners/qf-banner-empty.svg new file mode 100644 index 0000000000..f358ae8d3f --- /dev/null +++ b/public/images/banners/qf-banner-empty.svg @@ -0,0 +1,1820 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/components/DefaultQFBanner.tsx b/src/components/DefaultQFBanner.tsx new file mode 100644 index 0000000000..f28c54474a --- /dev/null +++ b/src/components/DefaultQFBanner.tsx @@ -0,0 +1,40 @@ +import styled from 'styled-components'; +import Image from 'next/image'; +import { H1, semanticColors } from '@giveth/ui-design-system'; + +export const DefaultQFBanner = () => { + return ( + + QF Banner + Quadratic Funding + + ); +}; + +const BannerContainer = styled.div` + position: relative; + padding-top: 160px; + padding-bottom: 160px; + /* height: 500px; */ + img { + -webkit-user-drag: none; + -khtml-user-drag: none; + -moz-user-drag: none; + -o-user-drag: none; + user-drag: none; + } +`; + +const StyledH1 = styled(H1)` + position: relative; + /* top: 50%; + left: 50%; + transform: translate(-50%, -50%); */ + color: ${semanticColors.golden[500]}; + text-align: center; +`; From a78e735c7fba7731e72ae74d87c7f6b15007f69c Mon Sep 17 00:00:00 2001 From: Cherik Date: Tue, 28 May 2024 13:32:34 +0330 Subject: [PATCH 60/90] show default banner for not active rounds --- .../views/archivedQFRounds/ArchivedQFRounds.view.tsx | 4 ++-- src/components/views/projects/ProjectsIndex.tsx | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/components/views/archivedQFRounds/ArchivedQFRounds.view.tsx b/src/components/views/archivedQFRounds/ArchivedQFRounds.view.tsx index c826a2ab4f..4a245f30a6 100644 --- a/src/components/views/archivedQFRounds/ArchivedQFRounds.view.tsx +++ b/src/components/views/archivedQFRounds/ArchivedQFRounds.view.tsx @@ -1,7 +1,6 @@ import React, { useCallback, useEffect, useState } from 'react'; import styled from 'styled-components'; import { Container, Flex, OutlineButton } from '@giveth/ui-design-system'; -import { ArchivedQFBanner } from './ArchivedQFBanner'; import { QFHeader } from './QFHeader'; import { client } from '@/apollo/apolloClient'; import { IArchivedQFRound } from '@/apollo/types/types'; @@ -13,6 +12,7 @@ import { EQFRoundsSortBy } from '@/apollo/types/gqlEnums'; import { showToastError } from '@/lib/helpers'; import { WrappedSpinner } from '@/components/Spinner'; import { ArchivedQFRoundsSort } from './ArchivedQFRoundsSort'; +import { DefaultQFBanner } from '@/components/DefaultQFBanner'; enum EQfArchivedRoundsSort { allocatedFund = 'allocatedFund', @@ -104,7 +104,7 @@ export const ArchivedQFRoundsView = () => { return ( - + diff --git a/src/components/views/projects/ProjectsIndex.tsx b/src/components/views/projects/ProjectsIndex.tsx index 66ec9c2dc5..4d2a9bf1fb 100644 --- a/src/components/views/projects/ProjectsIndex.tsx +++ b/src/components/views/projects/ProjectsIndex.tsx @@ -39,6 +39,7 @@ import { ArchivedQFProjectsBanner } from './qfBanner/ArchivedQFProjectsBanner'; import { ActiveQFRoundStats } from './ActiveQFRoundStats'; import useMediaQuery from '@/hooks/useMediaQuery'; import { QFHeader } from '@/components/views/archivedQFRounds/QFHeader'; +import { DefaultQFBanner } from '@/components/DefaultQFBanner'; export interface IProjectsView { projects: IProject[]; @@ -213,8 +214,10 @@ const ProjectsIndex = (props: IProjectsView) => { {isArchivedQF ? ( !isMobile && - ) : ( + ) : activeRound ? ( + ) : ( + )} ) : ( From d2267ba41d0a2183fad4b7ce4c3e3e37d4393fdf Mon Sep 17 00:00:00 2001 From: Ramin Date: Tue, 28 May 2024 16:55:43 +0330 Subject: [PATCH 61/90] add variables to qfRounds query --- src/apollo/gql/gqlQF.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/apollo/gql/gqlQF.ts b/src/apollo/gql/gqlQF.ts index 8662e9b751..2b88b90930 100644 --- a/src/apollo/gql/gqlQF.ts +++ b/src/apollo/gql/gqlQF.ts @@ -1,8 +1,11 @@ import { gql } from '@apollo/client'; export const FETCH_QF_ROUNDS_QUERY = ` - query FetchQFRounds { - qfRounds { + query FetchQFRounds ( + $slug: String, + $activeOnly: Boolean, + ) { + qfRounds(slug: $slug, activeOnly: $activeOnly) { id slug name From a40d07a303783f1a1c4a150068bd26434b2b7e71 Mon Sep 17 00:00:00 2001 From: Ramin Date: Tue, 28 May 2024 16:56:27 +0330 Subject: [PATCH 62/90] fetch active qfRounds instead of all --- src/components/controller/general.ctrl.tsx | 4 ++-- src/features/general/general.slice.ts | 9 ++++----- src/features/general/general.thunk.ts | 4 ++-- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/components/controller/general.ctrl.tsx b/src/components/controller/general.ctrl.tsx index ba52080bfe..b470cab7d4 100644 --- a/src/components/controller/general.ctrl.tsx +++ b/src/components/controller/general.ctrl.tsx @@ -8,7 +8,7 @@ import { useAppDispatch, useAppSelector } from '@/features/hooks'; import { setShowWalletModal } from '@/features/modal/modal.slice'; import { fetchMainCategories, - fetchQFRounds, + fetchActiveQFRounds, } from '@/features/general/general.thunk'; const GeneralController = () => { @@ -22,7 +22,7 @@ const GeneralController = () => { useEffect(() => { dispatch(fetchMainCategories()); - dispatch(fetchQFRounds()); + dispatch(fetchActiveQFRounds()); }, [dispatch]); useEffect(() => { diff --git a/src/features/general/general.slice.ts b/src/features/general/general.slice.ts index 11bf0b36ac..b8d6f3b2ae 100644 --- a/src/features/general/general.slice.ts +++ b/src/features/general/general.slice.ts @@ -1,5 +1,5 @@ import { createSlice } from '@reduxjs/toolkit'; -import { fetchMainCategories, fetchQFRounds } from './general.thunk'; +import { fetchMainCategories, fetchActiveQFRounds } from './general.thunk'; import { IMainCategory, IQFRound } from '@/apollo/types/types'; import { QF_SPECIFIC_CATEGORIES } from '@/configuration'; import type { PayloadAction } from '@reduxjs/toolkit'; @@ -51,10 +51,9 @@ export const GeneralSlice = createSlice({ !QF_SPECIFIC_CATEGORIES.some(c => c === mainCategory.slug), ); }); - builder.addCase(fetchQFRounds.fulfilled, (state, action) => { - state.qfRounds = action.payload.data.qfRounds; - state.activeQFRound = - state.qfRounds.find(round => round.isActive) || null; + builder.addCase(fetchActiveQFRounds.fulfilled, (state, action) => { + const qfRounds = action.payload.data.qfRounds; + state.activeQFRound = qfRounds ? qfRounds[0] : null; }); }, }); diff --git a/src/features/general/general.thunk.ts b/src/features/general/general.thunk.ts index d79b6f85da..3818ca3929 100644 --- a/src/features/general/general.thunk.ts +++ b/src/features/general/general.thunk.ts @@ -10,9 +10,9 @@ export const fetchMainCategories = createAsyncThunk( }, ); -export const fetchQFRounds = createAsyncThunk( +export const fetchActiveQFRounds = createAsyncThunk( 'general/fetchQFRounds', async () => { - return backendGQLRequest(FETCH_QF_ROUNDS_QUERY); + return backendGQLRequest(FETCH_QF_ROUNDS_QUERY, { activeOnly: true }); }, ); From cd7e3ae0b2bc25366efc2fc7749b83c9a0215ef5 Mon Sep 17 00:00:00 2001 From: kkatusic Date: Tue, 28 May 2024 22:43:30 +0200 Subject: [PATCH 63/90] adding id property for headings --- src/components/SuccessfulCreation.tsx | 2 +- .../modals/Boost/BoostedInnerModal.tsx | 2 +- .../modals/StakeLock/LockingBrief.tsx | 4 ++- src/components/modals/StakeLock/StakeGIV.tsx | 29 +++++++++++++++---- src/components/views/donate/SuccessView.tsx | 2 +- src/components/views/verification/Done.tsx | 2 +- 6 files changed, 30 insertions(+), 11 deletions(-) diff --git a/src/components/SuccessfulCreation.tsx b/src/components/SuccessfulCreation.tsx index 1fac591e8f..ad8d949371 100644 --- a/src/components/SuccessfulCreation.tsx +++ b/src/components/SuccessfulCreation.tsx @@ -86,7 +86,7 @@ const SuccessfulCreation = (props: IProps) => { animationData={CongratsAnimation} /> - + {formatMessage({ id: 'label.high_five' })} diff --git a/src/components/modals/Boost/BoostedInnerModal.tsx b/src/components/modals/Boost/BoostedInnerModal.tsx index 0380f7f002..8ef1e12d67 100644 --- a/src/components/modals/Boost/BoostedInnerModal.tsx +++ b/src/components/modals/Boost/BoostedInnerModal.tsx @@ -36,7 +36,7 @@ const BoostedInnerModal: FC = ({ animationData={CongratsAnimation} /> - + {formatMessage({ id: 'label.project_boosted' })} diff --git a/src/components/modals/StakeLock/LockingBrief.tsx b/src/components/modals/StakeLock/LockingBrief.tsx index 21388f49e3..d397a97726 100644 --- a/src/components/modals/StakeLock/LockingBrief.tsx +++ b/src/components/modals/StakeLock/LockingBrief.tsx @@ -23,7 +23,9 @@ const LockingBrief: FC = ({ const unlockDate = new Date(getUnlockDate(givpowerInfo, round)); return ( -

{`You ${onLocking ? 'are locking' : 'locked'} `}
+
{`You ${onLocking ? 'are locking' : 'locked'} `}
{formatWeiHelper(amount.toString())} GIV diff --git a/src/components/modals/StakeLock/StakeGIV.tsx b/src/components/modals/StakeLock/StakeGIV.tsx index 2d9c03241a..9b56358caf 100644 --- a/src/components/modals/StakeLock/StakeGIV.tsx +++ b/src/components/modals/StakeLock/StakeGIV.tsx @@ -31,9 +31,11 @@ import { useStakingPool } from '@/hooks/useStakingPool'; import { StakingAmountInput } from '@/components/AmountInput/StakingAmountInput'; import { StakeSteps } from './StakeSteps'; import { getGIVConfig } from '@/helpers/givpower'; -import type { - PoolStakingConfig, - SimplePoolStakingConfig, +import { + RegenPoolStakingConfig, + StakingType, + type PoolStakingConfig, + type SimplePoolStakingConfig, } from '@/types/config'; interface IStakeInnerModalProps { @@ -84,9 +86,22 @@ const StakeGIVInnerModal: FC = ({ const maxAmount = _maxAmount || 0n; const isSafeEnv = useIsSafeEnvironment(); - const { POOL_ADDRESS, LM_ADDRESS } = + const { POOL_ADDRESS, LM_ADDRESS, type } = poolStakingConfig as SimplePoolStakingConfig; + const { regenStreamType } = poolStakingConfig as RegenPoolStakingConfig; + + const isGIVpower = + type === StakingType.GIV_GARDEN_LM || + type === StakingType.GIV_UNIPOOL_LM; + + // preffix property for heading elements used by analytics + const idPropertyPreffix = regenStreamType + ? 'regenfarm' + : isGIVpower + ? 'givpower' + : ''; + const onApprove = async () => { if (amount === 0n) return; setStakeState(StakeState.APPROVING); @@ -236,7 +251,7 @@ const StakeGIVInnerModal: FC = ({ stakeState === StakeState.WRAPPING) && ( <> -
+
{formatMessage({ id: 'label.you_are_staking', })} @@ -287,7 +302,9 @@ const StakeGIVInnerModal: FC = ({
Successful!
- You have staked + + You have staked + {formatWeiHelper(amount.toString())} GIV diff --git a/src/components/views/donate/SuccessView.tsx b/src/components/views/donate/SuccessView.tsx index 59d655a65e..8e01b89723 100644 --- a/src/components/views/donate/SuccessView.tsx +++ b/src/components/views/donate/SuccessView.tsx @@ -105,7 +105,7 @@ export const SuccessView: FC = () => {
- + {formatMessage({ id: 'label.youre_giver_now' })}
diff --git a/src/components/views/verification/Done.tsx b/src/components/views/verification/Done.tsx index 72c7608efb..d88a4b85bd 100644 --- a/src/components/views/verification/Done.tsx +++ b/src/components/views/verification/Done.tsx @@ -51,7 +51,7 @@ const Done = () => { return ( <> -

+

{titles[status ?? EVerificationStatus.SUBMITTED]}

{subtitles[status ?? EVerificationStatus.SUBMITTED]}

From 813721a1f2e541658810cb9000998871a0705341 Mon Sep 17 00:00:00 2001 From: Ramin Date: Wed, 29 May 2024 14:45:13 +0330 Subject: [PATCH 64/90] remove qfRounds from projects SSR --- pages/projects/[slug].tsx | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/pages/projects/[slug].tsx b/pages/projects/[slug].tsx index 0188c50efd..a7490ae6fa 100644 --- a/pages/projects/[slug].tsx +++ b/pages/projects/[slug].tsx @@ -1,5 +1,5 @@ import { GetServerSideProps } from 'next/types'; -import { IMainCategory, IProject, IQFRound } from '@/apollo/types/types'; +import { IMainCategory, IProject } from '@/apollo/types/types'; import { transformGraphQLErrorsToStatusCode } from '@/helpers/requests'; import { initializeApollo } from '@/apollo/apolloClient'; import { OPTIONS_HOME_PROJECTS } from '@/apollo/gql/gqlOptions'; @@ -12,7 +12,6 @@ import ProjectsIndex from '@/components/views/projects/ProjectsIndex'; import { useReferral } from '@/hooks/useReferral'; import { projectsMetatags } from '@/content/metatags'; import { ProjectsProvider } from '@/context/projects.context'; -import { FETCH_QF_ROUNDS } from '@/apollo/gql/gqlQF'; import { getMainCategorySlug } from '@/helpers/projects'; import { EProjectsSortBy } from '@/apollo/types/gqlEnums'; @@ -20,7 +19,6 @@ export interface IProjectsRouteProps { projects: IProject[]; totalCount: number; mainCategories: IMainCategory[]; - qfRounds: IQFRound[]; } export const allCategoriesItem = { @@ -37,13 +35,8 @@ interface IProjectsCategoriesRouteProps extends IProjectsRouteProps { } const ProjectsCategoriesRoute = (props: IProjectsCategoriesRouteProps) => { - const { - projects, - mainCategories, - selectedMainCategory, - totalCount, - qfRounds, - } = props; + const { projects, mainCategories, selectedMainCategory, totalCount } = + props; useReferral(); @@ -52,7 +45,6 @@ const ProjectsCategoriesRoute = (props: IProjectsCategoriesRouteProps) => { mainCategories={mainCategories} selectedMainCategory={selectedMainCategory} isQF={false} - qfRounds={qfRounds} > @@ -108,19 +100,12 @@ export const getServerSideProps: GetServerSideProps = async context => { fetchPolicy: 'network-only', }); const { projects, totalCount } = data.allProjects; - const { - data: { qfRounds }, - } = await apolloClient.query({ - query: FETCH_QF_ROUNDS, - fetchPolicy: 'network-only', - }); return { props: { projects, mainCategories: updatedMainCategory, selectedMainCategory: updatedSelectedMainCategory, totalCount, - qfRounds, }, }; } From 1843640e3a3e68d9da9cf74cbe2c247c70663f69 Mon Sep 17 00:00:00 2001 From: Ramin Date: Wed, 29 May 2024 14:47:05 +0330 Subject: [PATCH 65/90] remove qfRounds from qf projects SSR --- pages/qf/[slug].tsx | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/pages/qf/[slug].tsx b/pages/qf/[slug].tsx index 9221a38b10..7d221aebb6 100644 --- a/pages/qf/[slug].tsx +++ b/pages/qf/[slug].tsx @@ -11,7 +11,6 @@ import { GeneralMetatags } from '@/components/Metatag'; import ProjectsIndex from '@/components/views/projects/ProjectsIndex'; import { projectsMetatags } from '@/content/metatags'; import { ProjectsProvider } from '@/context/projects.context'; -import { FETCH_QF_ROUNDS } from '@/apollo/gql/gqlQF'; import { useReferral } from '@/hooks/useReferral'; import { IProjectsRouteProps, allCategoriesItem } from 'pages/projects/[slug]'; import { getMainCategorySlug } from '@/helpers/projects'; @@ -22,13 +21,8 @@ interface IProjectsCategoriesRouteProps extends IProjectsRouteProps { } const QFProjectsCategoriesRoute = (props: IProjectsCategoriesRouteProps) => { - const { - projects, - mainCategories, - selectedMainCategory, - totalCount, - qfRounds, - } = props; + const { projects, mainCategories, selectedMainCategory, totalCount } = + props; useReferral(); @@ -36,7 +30,6 @@ const QFProjectsCategoriesRoute = (props: IProjectsCategoriesRouteProps) => { @@ -100,19 +93,12 @@ export const getServerSideProps: GetServerSideProps = async context => { fetchPolicy: 'network-only', }); const { projects, totalCount } = data.allProjects; - const { - data: { qfRounds }, - } = await apolloClient.query({ - query: FETCH_QF_ROUNDS, - fetchPolicy: 'network-only', - }); return { props: { projects, mainCategories: updatedMainCategory, selectedMainCategory: updatedSelectedMainCategory, totalCount, - qfRounds, }, }; } From 0abd013ae9b66e1eedbbfb354e236c5cb0a87152 Mon Sep 17 00:00:00 2001 From: Ramin Date: Wed, 29 May 2024 14:50:26 +0330 Subject: [PATCH 66/90] fetch qf round by slug --- pages/qf-archive/[slug].tsx | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/pages/qf-archive/[slug].tsx b/pages/qf-archive/[slug].tsx index 0ce7394a28..ac70952b68 100644 --- a/pages/qf-archive/[slug].tsx +++ b/pages/qf-archive/[slug].tsx @@ -11,13 +11,14 @@ import { GeneralMetatags } from '@/components/Metatag'; import ProjectsIndex from '@/components/views/projects/ProjectsIndex'; import { projectsMetatags } from '@/content/metatags'; import { ProjectsProvider } from '@/context/projects.context'; -import { FETCH_QF_ROUNDS } from '@/apollo/gql/gqlQF'; import { useReferral } from '@/hooks/useReferral'; import { IProjectsRouteProps, allCategoriesItem } from 'pages/projects/[slug]'; import { EProjectsSortBy } from '@/apollo/types/gqlEnums'; +import { FETCH_QF_ROUNDS_QUERY } from '@/apollo/gql/gqlQF'; interface IProjectsCategoriesRouteProps extends IProjectsRouteProps { selectedMainCategory: IMainCategory; + archivedQFRound: IQFRound; } const QFProjectsCategoriesRoute = (props: IProjectsCategoriesRouteProps) => { @@ -26,7 +27,7 @@ const QFProjectsCategoriesRoute = (props: IProjectsCategoriesRouteProps) => { mainCategories, selectedMainCategory, totalCount, - qfRounds, + archivedQFRound, } = props; useReferral(); @@ -37,7 +38,7 @@ const QFProjectsCategoriesRoute = (props: IProjectsCategoriesRouteProps) => { selectedMainCategory={selectedMainCategory} isQF={true} isArchivedQF={true} - qfRounds={qfRounds} + archivedQFRound={archivedQFRound} > @@ -66,7 +67,7 @@ export const getServerSideProps: GetServerSideProps = async context => { data: { mainCategories: IMainCategory[] }; } = await apolloClient.query({ query: FETCH_MAIN_CATEGORIES, - fetchPolicy: 'network-only', + fetchPolicy: 'no-cache', }); const updatedMainCategory = [allCategoriesItem, ...mainCategories]; @@ -85,22 +86,21 @@ export const getServerSideProps: GetServerSideProps = async context => { qfRoundSlug: slug, notifyOnNetworkStatusChange, }, - fetchPolicy: 'network-only', + fetchPolicy: 'no-cache', }); const { projects, totalCount } = data.allProjects; const { data: { qfRounds }, } = await apolloClient.query({ - query: FETCH_QF_ROUNDS, - fetchPolicy: 'network-only', + query: FETCH_QF_ROUNDS_QUERY, + variables: { slug }, + fetchPolicy: 'no-cache', }); - const roundExists = (qfRounds as IQFRound[]).some( - round => round.slug === slug, - ); + const archivedQFRound = qfRounds ? qfRounds[0] : undefined; - if (!roundExists) { + if (!archivedQFRound) { return { notFound: true, }; @@ -112,7 +112,7 @@ export const getServerSideProps: GetServerSideProps = async context => { mainCategories: updatedMainCategory, selectedMainCategory: updatedSelectedMainCategory, totalCount, - qfRounds, + archivedQFRound, }, }; } catch (error: any) { From a6b0cba397c6eb5a65773f5ad3b2a2e675d52dcf Mon Sep 17 00:00:00 2001 From: Ramin Date: Wed, 29 May 2024 19:23:48 +0330 Subject: [PATCH 67/90] update ActiveQFProjectsBanner to fetch activeQFRound from Redux --- .../qfBanner/ActiveQFProjectsBanner.tsx | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/src/components/views/projects/qfBanner/ActiveQFProjectsBanner.tsx b/src/components/views/projects/qfBanner/ActiveQFProjectsBanner.tsx index 8108df164e..a684ae5482 100644 --- a/src/components/views/projects/qfBanner/ActiveQFProjectsBanner.tsx +++ b/src/components/views/projects/qfBanner/ActiveQFProjectsBanner.tsx @@ -2,7 +2,6 @@ import { B, Lead, Container, Row, H2, Flex } from '@giveth/ui-design-system'; import { useIntl } from 'react-intl'; import Image from 'next/image'; import { useState, useEffect } from 'react'; -import { useProjectsContext } from '@/context/projects.context'; import { getNowUnixMS } from '@/helpers/time'; import { durationToString } from '@/lib/helpers'; import { @@ -13,6 +12,7 @@ import { Sponsor, SmallerSponsor, } from './common'; +import { useAppSelector } from '@/features/hooks'; enum ERoundStatus { LOADING, @@ -26,13 +26,12 @@ export const ActiveQFProjectsBanner = () => { const [state, setState] = useState(ERoundStatus.LOADING); const [timer, setTimer] = useState(null); const { formatMessage } = useIntl(); - const { qfRounds } = useProjectsContext(); - const activeRound = qfRounds.find(round => round.isActive); + const { activeQFRound } = useAppSelector(state => state.general); useEffect(() => { - if (!activeRound) return setState(ERoundStatus.NO_ACTIVE); - const _startDate = new Date(activeRound?.beginDate).getTime(); - const _endDate = new Date(activeRound?.endDate).getTime(); + if (!activeQFRound) return setState(ERoundStatus.NO_ACTIVE); + const _startDate = new Date(activeQFRound?.beginDate).getTime(); + const _endDate = new Date(activeQFRound?.endDate).getTime(); const now = getNowUnixMS(); const isRoundStarted = now > _startDate; const isRoundEnded = now > _endDate; @@ -43,15 +42,15 @@ export const ActiveQFProjectsBanner = () => { } else { setState(ERoundStatus.ENDED); } - }, [activeRound]); + }, [activeQFRound]); useEffect(() => { let _date: number; - if (!activeRound) return; + if (!activeQFRound) return; if (state === ERoundStatus.NOT_STARTED) { - _date = new Date(activeRound.beginDate).getTime(); + _date = new Date(activeQFRound.beginDate).getTime(); } else if (state === ERoundStatus.RUNNING) { - _date = new Date(activeRound.endDate).getTime(); + _date = new Date(activeQFRound.endDate).getTime(); } else { return; } @@ -70,13 +69,13 @@ export const ActiveQFProjectsBanner = () => { return () => { clearInterval(interval); }; - }, [state, activeRound]); + }, [state, activeQFRound]); return ( { - {activeRound ? activeRound.name : null} + {activeQFRound ? activeQFRound.name : null}

{formatMessage({ id: 'label.quadratic_funding' })} @@ -104,7 +103,7 @@ export const ActiveQFProjectsBanner = () => { })} - {activeRound && timer && timer > 0 + {activeQFRound && timer && timer > 0 ? durationToString(timer, 3) : '--'} From af4b796332b04f47e5528dee33057c17db83d70b Mon Sep 17 00:00:00 2001 From: Ramin Date: Wed, 29 May 2024 19:24:15 +0330 Subject: [PATCH 68/90] update ActiveQFRoundStats to fetch activeQFRound from Redux --- .../views/projects/ActiveQFRoundStats.tsx | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/components/views/projects/ActiveQFRoundStats.tsx b/src/components/views/projects/ActiveQFRoundStats.tsx index 08965bad04..922ba9eb5a 100644 --- a/src/components/views/projects/ActiveQFRoundStats.tsx +++ b/src/components/views/projects/ActiveQFRoundStats.tsx @@ -12,26 +12,26 @@ import styled from 'styled-components'; import { useIntl } from 'react-intl'; import { useQuery } from '@apollo/client'; import { FETCH_QF_ROUND_STATS } from '@/apollo/gql/gqlQF'; -import { useProjectsContext } from '@/context/projects.context'; import { formatDate, formatUSD, thousandsSeparator } from '@/lib/helpers'; +import { useAppSelector } from '@/features/hooks'; export const ActiveQFRoundStats = () => { const { formatMessage } = useIntl(); - const { qfRounds } = useProjectsContext(); - const activeRound = qfRounds.find(round => round.isActive); + const { activeQFRound } = useAppSelector(state => state.general); + const { allocatedFundUSD, allocatedFundUSDPreferred, allocatedTokenSymbol, allocatedFund, - } = activeRound || {}; + } = activeQFRound || {}; const { data } = useQuery(FETCH_QF_ROUND_STATS, { - variables: { slug: activeRound?.slug }, + variables: { slug: activeQFRound?.slug }, }); return ( - {activeRound?.name} Metrics + {activeQFRound?.name} Metrics @@ -70,14 +70,14 @@ export const ActiveQFRoundStats = () => { Round start - {activeRound?.endDate - ? formatDate(new Date(activeRound.beginDate)) + {activeQFRound?.endDate + ? formatDate(new Date(activeQFRound.beginDate)) : '--'} Round end - {activeRound?.endDate - ? formatDate(new Date(activeRound.endDate)) + {activeQFRound?.endDate + ? formatDate(new Date(activeQFRound.endDate)) : '--'} From 7609b4d7437152470cd70df2cdc5558b9a5a38bd Mon Sep 17 00:00:00 2001 From: Ramin Date: Wed, 29 May 2024 19:26:05 +0330 Subject: [PATCH 69/90] update ArchivedQFProjectsBanner to fetch archivedQFRound --- .../views/projects/qfBanner/ArchivedQFProjectsBanner.tsx | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/components/views/projects/qfBanner/ArchivedQFProjectsBanner.tsx b/src/components/views/projects/qfBanner/ArchivedQFProjectsBanner.tsx index e9bee74e62..46cfb875c4 100644 --- a/src/components/views/projects/qfBanner/ArchivedQFProjectsBanner.tsx +++ b/src/components/views/projects/qfBanner/ArchivedQFProjectsBanner.tsx @@ -1,7 +1,6 @@ import { Container, H2, Row, H1 } from '@giveth/ui-design-system'; import Image from 'next/image'; import { useIntl } from 'react-intl'; -import { useRouter } from 'next/router'; import styled from 'styled-components'; import { BannerContainer, StyledColArch } from './common'; import { useProjectsContext } from '@/context/projects.context'; @@ -14,9 +13,7 @@ type TImgDimensionsMap = { export const ArchivedQFProjectsBanner = () => { const { formatMessage } = useIntl(); - const { query } = useRouter(); - const { qfRounds } = useProjectsContext(); - const round = qfRounds.find(round => round.slug === query.slug); + const { archivedQFRound: round } = useProjectsContext(); const sponsorsLength = round?.sponsorsImgs?.length ?? 0; const imgDimensionsMap: TImgDimensionsMap = { 1: { desktop: 300, tablet: 260, gridColumns: 1 }, From 313bad5338a4f6c20e3717ecb5213f6f0e84a39f Mon Sep 17 00:00:00 2001 From: Ramin Date: Wed, 29 May 2024 19:26:29 +0330 Subject: [PATCH 70/90] remove FETCH_QF_ROUNDS --- src/apollo/gql/gqlQF.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/apollo/gql/gqlQF.ts b/src/apollo/gql/gqlQF.ts index 2b88b90930..2f9e4e14b7 100644 --- a/src/apollo/gql/gqlQF.ts +++ b/src/apollo/gql/gqlQF.ts @@ -25,10 +25,6 @@ export const FETCH_QF_ROUNDS_QUERY = ` } `; -export const FETCH_QF_ROUNDS = gql` - ${FETCH_QF_ROUNDS_QUERY} -`; - export const FETCH_DOES_DONATED_PROJECT_IN_ROUND = gql` query ($projectId: Int!, $qfRoundId: Int!, $userId: Int!) { doesDonatedToProjectInQfRound( From 229ddd60288270e899d2ce6f057dc7d7e77c79db Mon Sep 17 00:00:00 2001 From: Ramin Date: Wed, 29 May 2024 19:28:12 +0330 Subject: [PATCH 71/90] add archivedQFRound to projects.context.tsx --- src/context/projects.context.tsx | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/context/projects.context.tsx b/src/context/projects.context.tsx index 3b2df6d31d..26e8184ec7 100644 --- a/src/context/projects.context.tsx +++ b/src/context/projects.context.tsx @@ -24,7 +24,7 @@ interface IProjectsContext { variables: IVariables; mainCategories: IMainCategory[]; selectedMainCategory?: IMainCategory; - qfRounds: IQFRound[]; + archivedQFRound?: IQFRound; isQF: boolean; isArchivedQF?: boolean; setIsQF: Dispatch>; @@ -38,7 +38,6 @@ const variablesDefaultValue = { const ProjectsContext = createContext({ variables: variablesDefaultValue, mainCategories: [], - qfRounds: [], isQF: false, isArchivedQF: false, setIsQF: () => console.log('setIsQF not initialed yet!'), @@ -50,7 +49,7 @@ export const ProjectsProvider = (props: { children: ReactNode; mainCategories: IMainCategory[]; selectedMainCategory?: IMainCategory; - qfRounds: IQFRound[]; + archivedQFRound?: IQFRound; isQF: boolean; isArchivedQF?: boolean; }) => { @@ -60,7 +59,7 @@ export const ProjectsProvider = (props: { selectedMainCategory, isQF, isArchivedQF, - qfRounds, + archivedQFRound, } = props; const [_isQF, setIsQF] = useState(isQF); @@ -101,9 +100,9 @@ export const ProjectsProvider = (props: { }, mainCategories, selectedMainCategory, - qfRounds: qfRounds || [], isQF: _isQF || false, isArchivedQF: isArchivedQF || false, + archivedQFRound, setIsQF, }} > From 95d817c1d6d85b671c6f8246c44d98ac9dd3e06f Mon Sep 17 00:00:00 2001 From: Ramin Date: Wed, 29 May 2024 19:29:01 +0330 Subject: [PATCH 72/90] const { activeQFRound } = useAppSelector(state => state.general); update ProjectsIndex.tsx to fetch from Redux --- src/components/views/projects/ProjectsIndex.tsx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/components/views/projects/ProjectsIndex.tsx b/src/components/views/projects/ProjectsIndex.tsx index 9c5b9d9f5a..b63539c304 100644 --- a/src/components/views/projects/ProjectsIndex.tsx +++ b/src/components/views/projects/ProjectsIndex.tsx @@ -54,6 +54,7 @@ const ProjectsIndex = (props: IProjectsView) => { const { formatMessage } = useIntl(); const { projects, totalCount: _totalCount } = props; const user = useAppSelector(state => state.user.userData); + const { activeQFRound } = useAppSelector(state => state.general); const [isLoading, setIsLoading] = useState(false); const [filteredProjects, setFilteredProjects] = useState(projects); @@ -68,7 +69,6 @@ const ProjectsIndex = (props: IProjectsView) => { selectedMainCategory, isQF, isArchivedQF, - qfRounds, } = useProjectsContext(); const router = useRouter(); @@ -172,8 +172,6 @@ const ProjectsIndex = (props: IProjectsView) => { const showLoadMore = totalCount > filteredProjects?.length && !isInfiniteScrolling.current; - const activeRound = qfRounds.find(round => round.isActive); - useEffect(() => { const handleObserver = (entities: any) => { if (!isInfiniteScrolling.current) return; @@ -248,7 +246,7 @@ const ProjectsIndex = (props: IProjectsView) => { {/* */} - ) : isQF && !activeRound ? ( + ) : isQF && !activeQFRound ? ( ) : ( From 6ff55f114ecf7d2a91eb6a66433ddf1b856c41ed Mon Sep 17 00:00:00 2001 From: Ramin Date: Wed, 29 May 2024 19:31:11 +0330 Subject: [PATCH 73/90] update usePassport.tsx to fetch from Redux --- src/hooks/usePassport.ts | 33 +++++++++++---------------------- 1 file changed, 11 insertions(+), 22 deletions(-) diff --git a/src/hooks/usePassport.ts b/src/hooks/usePassport.ts index 5d20931bb7..bbc9fd34cd 100644 --- a/src/hooks/usePassport.ts +++ b/src/hooks/usePassport.ts @@ -2,8 +2,6 @@ import { useCallback, useEffect, useState } from 'react'; import { useAccount } from 'wagmi'; import { getPassports } from '@/helpers/passport'; import { connectPassport, fetchPassportScore } from '@/services/passport'; -import { FETCH_QF_ROUNDS } from '@/apollo/gql/gqlQF'; -import { client } from '@/apollo/apolloClient'; import { IPassportInfo, IQFRound } from '@/apollo/types/types'; import { getNowUnixMS } from '@/helpers/time'; import { useIsSafeEnvironment } from '@/hooks/useSafeAutoConnect'; @@ -45,6 +43,7 @@ export const usePassport = () => { const { userData: user, isUserFullFilled } = useAppSelector( state => state.user, ); + const { activeQFRound } = useAppSelector(state => state.general); const isSafeEnv = useIsSafeEnvironment(); const updateState = useCallback( @@ -69,68 +68,58 @@ export const usePassport = () => { currentRound: null, }); try { - const { - data: { qfRounds }, - } = await client.query({ - query: FETCH_QF_ROUNDS, - fetchPolicy: 'network-only', - }); - // setScore(refreshUserScores); - if (!qfRounds && !refreshUserScores) { + if (!refreshUserScores) { return setInfo({ passportState: EPassportState.INVALID, passportScore: null, currentRound: null, }); } - const currentRound = (qfRounds as IQFRound[]).find( - round => round.isActive, - ); - if (!currentRound) { + if (!activeQFRound) { return setInfo({ passportState: EPassportState.NOT_ACTIVE_ROUND, passportScore: refreshUserScores.passportScore, currentRound: null, }); } else if ( - getNowUnixMS() < new Date(currentRound.beginDate).getTime() + getNowUnixMS() < new Date(activeQFRound.beginDate).getTime() ) { return setInfo({ passportState: EPassportState.NOT_STARTED, passportScore: refreshUserScores.passportScore, - currentRound: currentRound, + currentRound: activeQFRound, }); } else if ( - getNowUnixMS() > new Date(currentRound.endDate).getTime() + getNowUnixMS() > new Date(activeQFRound.endDate).getTime() ) { return setInfo({ passportState: EPassportState.ENDED, passportScore: refreshUserScores.passportScore, - currentRound: currentRound, + currentRound: activeQFRound, }); } if (refreshUserScores.passportScore === null) { return setInfo({ passportState: EPassportState.NOT_CREATED, passportScore: null, - currentRound: currentRound, + currentRound: activeQFRound, }); } if ( refreshUserScores.passportScore < - currentRound.minimumPassportScore + activeQFRound.minimumPassportScore ) { return setInfo({ passportState: EPassportState.NOT_ELIGIBLE, passportScore: refreshUserScores.passportScore, - currentRound: currentRound, + currentRound: activeQFRound, }); } else { return setInfo({ passportState: EPassportState.ELIGIBLE, passportScore: refreshUserScores.passportScore, - currentRound: currentRound, + currentRound: activeQFRound, }); } } catch (error) { From fd61e1cb13d3e7a41f857c16029b130843b475f4 Mon Sep 17 00:00:00 2001 From: Ramin Date: Wed, 29 May 2024 19:31:23 +0330 Subject: [PATCH 74/90] update usePassport.tsx to fetch from Redux --- pages/qf-archive/[slug].tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pages/qf-archive/[slug].tsx b/pages/qf-archive/[slug].tsx index ac70952b68..3bb84f9150 100644 --- a/pages/qf-archive/[slug].tsx +++ b/pages/qf-archive/[slug].tsx @@ -36,8 +36,8 @@ const QFProjectsCategoriesRoute = (props: IProjectsCategoriesRouteProps) => { From 785fec1723629f357f6987b6e79692887ba0e9fd Mon Sep 17 00:00:00 2001 From: Ramin Date: Wed, 29 May 2024 19:33:21 +0330 Subject: [PATCH 75/90] update QFProjectsMiddleBanner.tsx to fetch from Redux --- .../views/projects/MiddleBanners/QFMiddleBanner.tsx | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/components/views/projects/MiddleBanners/QFMiddleBanner.tsx b/src/components/views/projects/MiddleBanners/QFMiddleBanner.tsx index dc4af5cf08..78fcb33f4e 100644 --- a/src/components/views/projects/MiddleBanners/QFMiddleBanner.tsx +++ b/src/components/views/projects/MiddleBanners/QFMiddleBanner.tsx @@ -1,18 +1,14 @@ import { semanticColors } from '@giveth/ui-design-system'; import { useIntl } from 'react-intl'; -import { useRouter } from 'next/router'; import { Box, BigArc, Title, Caption } from './common.sc'; +import { useAppSelector } from '@/features/hooks'; import { useProjectsContext } from '@/context/projects.context'; export const QFProjectsMiddleBanner = () => { - const router = useRouter(); const { formatMessage } = useIntl(); - - const { qfRounds, isArchivedQF } = useProjectsContext(); - const round = qfRounds.find(round => { - if (isArchivedQF) return round.slug === router.query.slug; - else return round.isActive; - }); + const { activeQFRound } = useAppSelector(state => state.general); + const { archivedQFRound } = useProjectsContext(); + const round = archivedQFRound || activeQFRound; return ( From 76328f64e949879465092cce719e20a0afb9b356 Mon Sep 17 00:00:00 2001 From: Ramin Date: Wed, 29 May 2024 19:52:20 +0330 Subject: [PATCH 76/90] add hasRoundStarted --- src/helpers/qf.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/helpers/qf.ts b/src/helpers/qf.ts index 88dea89b58..04a651f953 100644 --- a/src/helpers/qf.ts +++ b/src/helpers/qf.ts @@ -22,6 +22,10 @@ export const getActiveRound = (qfRounds: IQFRound[] | undefined) => { return { activeQFRound, activeStartedRound }; }; +export const hasRoundStarted = (qfRound: IQFRound | null): boolean => { + return !!qfRound && new Date(qfRound.beginDate).getTime() < getNowUnixMS(); +}; + export const calculateTotalEstimatedMatching = ( projectDonationsSqrtRootSum?: number, allProjectsSum?: number, From f88a765fa59cd90182cba306c4a85c17de2ee3d2 Mon Sep 17 00:00:00 2001 From: Ramin Date: Wed, 29 May 2024 19:53:28 +0330 Subject: [PATCH 77/90] add hasRoundStarted to ActiveQFRoundStats --- src/components/views/projects/ActiveQFRoundStats.tsx | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/components/views/projects/ActiveQFRoundStats.tsx b/src/components/views/projects/ActiveQFRoundStats.tsx index 60379e29c1..39ee73a219 100644 --- a/src/components/views/projects/ActiveQFRoundStats.tsx +++ b/src/components/views/projects/ActiveQFRoundStats.tsx @@ -14,14 +14,13 @@ import { useQuery } from '@apollo/client'; import { FETCH_QF_ROUND_STATS } from '@/apollo/gql/gqlQF'; import { formatDate, formatUSD, thousandsSeparator } from '@/lib/helpers'; import { useAppSelector } from '@/features/hooks'; -import { getActiveRound } from '@/helpers/qf'; +import { hasRoundStarted } from '@/helpers/qf'; export const ActiveQFRoundStats = () => { const { formatMessage } = useIntl(); const { activeQFRound } = useAppSelector(state => state.general); - const { qfRounds } = useProjectsContext(); - const { activeQFRound, activeStartedRound } = getActiveRound(qfRounds); + const isRoundStarted = hasRoundStarted(activeQFRound); const { allocatedFundUSD, allocatedFundUSDPreferred, @@ -35,7 +34,7 @@ export const ActiveQFRoundStats = () => { return ( {activeQFRound?.name} Metrics - + {formatMessage({ id: 'label.matching_pool' })} @@ -50,7 +49,7 @@ export const ActiveQFRoundStats = () => { {!allocatedFundUSDPreferred && allocatedTokenSymbol} - {activeStartedRound && ( + {isRoundStarted && ( {formatMessage({ id: 'label.donations' })} @@ -63,7 +62,7 @@ export const ActiveQFRoundStats = () => { )} - {activeStartedRound && ( + {isRoundStarted && ( {formatMessage({ From 3bf2ec2b855a6e8b21ffd4e5e216c5b13383e239 Mon Sep 17 00:00:00 2001 From: Ramin Date: Wed, 29 May 2024 20:13:08 +0330 Subject: [PATCH 78/90] fix useCallback dependency --- src/hooks/usePassport.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hooks/usePassport.ts b/src/hooks/usePassport.ts index bbc9fd34cd..46df0a5515 100644 --- a/src/hooks/usePassport.ts +++ b/src/hooks/usePassport.ts @@ -130,7 +130,7 @@ export const usePassport = () => { }); } }, - [], + [activeQFRound], ); const refreshScore = useCallback(async () => { From a91bdd0a19d19122dcb5d69f33bf7d9ba485de93 Mon Sep 17 00:00:00 2001 From: Ramin Date: Wed, 29 May 2024 20:32:36 +0330 Subject: [PATCH 79/90] remove dispatch from dependency --- src/components/controller/general.ctrl.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/controller/general.ctrl.tsx b/src/components/controller/general.ctrl.tsx index b470cab7d4..d124405256 100644 --- a/src/components/controller/general.ctrl.tsx +++ b/src/components/controller/general.ctrl.tsx @@ -23,7 +23,7 @@ const GeneralController = () => { useEffect(() => { dispatch(fetchMainCategories()); dispatch(fetchActiveQFRounds()); - }, [dispatch]); + }, []); useEffect(() => { if (!router) return; From 010bf56a16b084c6435c4667ef151afe1721d619 Mon Sep 17 00:00:00 2001 From: Mitch Oz Date: Fri, 31 May 2024 10:39:37 -0600 Subject: [PATCH 80/90] replace sumDonationValueUsd with totalDonations, remove refs --- src/apollo/gql/gqlProjects.ts | 3 --- src/apollo/types/types.ts | 1 - src/components/project-card/ProjectCard.tsx | 6 +++--- .../views/donate/DonatePageProjectDescription.tsx | 4 ++-- .../views/project/projectActionCard/DonationSection.tsx | 6 +++--- .../views/project/projectActionCard/QFSection.tsx | 6 +++--- .../views/userProfile/projectsTab/ProjectItem.tsx | 2 +- 7 files changed, 12 insertions(+), 16 deletions(-) diff --git a/src/apollo/gql/gqlProjects.ts b/src/apollo/gql/gqlProjects.ts index bd60b74eeb..46dd9e14d9 100644 --- a/src/apollo/gql/gqlProjects.ts +++ b/src/apollo/gql/gqlProjects.ts @@ -48,7 +48,6 @@ export const PROJECT_CARD_FIELDS = gql` round } sumDonationValueUsdForActiveQfRound - sumDonationValueUsd countUniqueDonorsForActiveQfRound countUniqueDonors estimatedMatching { @@ -147,7 +146,6 @@ export const FETCH_PROJECT_BY_SLUG_DONATION = gql` slug descriptionSummary verified - sumDonationValueUsd sumDonationValueUsdForActiveQfRound countUniqueDonorsForActiveQfRound adminUser { @@ -261,7 +259,6 @@ export const FETCH_PROJECT_BY_SLUG_SINGLE_PROJECT = gql` } givbackFactor sumDonationValueUsdForActiveQfRound - sumDonationValueUsd countUniqueDonorsForActiveQfRound countUniqueDonors estimatedMatching { diff --git a/src/apollo/types/types.ts b/src/apollo/types/types.ts index 4bbea2f6ae..2d46c5b364 100644 --- a/src/apollo/types/types.ts +++ b/src/apollo/types/types.ts @@ -77,7 +77,6 @@ export interface IProject { countUniqueDonors?: number; countUniqueDonorsForActiveQfRound?: number; estimatedMatching: IEstimatedMatching; - sumDonationValueUsd?: number; sumDonationValueUsdForActiveQfRound?: number; qfRounds?: IQFRound[]; campaigns?: ICampaign[]; diff --git a/src/components/project-card/ProjectCard.tsx b/src/components/project-card/ProjectCard.tsx index 6d3824a2fc..d2fbb29ac4 100644 --- a/src/components/project-card/ProjectCard.tsx +++ b/src/components/project-card/ProjectCard.tsx @@ -52,7 +52,7 @@ const ProjectCard = (props: IProjectCard) => { image, slug, adminUser, - sumDonationValueUsd, + totalDonations, sumDonationValueUsdForActiveQfRound, updatedAt, organization, @@ -172,7 +172,7 @@ const ProjectCard = (props: IProjectCard) => { {formatDonation( (activeStartedRound ? sumDonationValueUsdForActiveQfRound - : sumDonationValueUsd) || 0, + : totalDonations) || 0, '$', locale, )} @@ -190,7 +190,7 @@ const ProjectCard = (props: IProjectCard) => { }) + ' '} {formatDonation( - sumDonationValueUsd || 0, + totalDonations || 0, '$', locale, )} diff --git a/src/components/views/donate/DonatePageProjectDescription.tsx b/src/components/views/donate/DonatePageProjectDescription.tsx index 784bcae1be..d209568650 100644 --- a/src/components/views/donate/DonatePageProjectDescription.tsx +++ b/src/components/views/donate/DonatePageProjectDescription.tsx @@ -30,7 +30,7 @@ export const DonatePageProjectDescription: FC< > = ({ projectData, showRaised = true }) => { const { formatMessage, locale } = useIntl(); const { - sumDonationValueUsd, + totalDonations, slug, title, descriptionSummary, @@ -64,7 +64,7 @@ export const DonatePageProjectDescription: FC< {showRaised && (

{formatMessage({ id: 'label.raised' })}:{' '} - {formatDonation(sumDonationValueUsd || 0, '$', locale)} + {formatDonation(totalDonations || 0, '$', locale)}

)} {descriptionSummary} diff --git a/src/components/views/project/projectActionCard/DonationSection.tsx b/src/components/views/project/projectActionCard/DonationSection.tsx index 1ed6a48186..aa7d41e4f2 100644 --- a/src/components/views/project/projectActionCard/DonationSection.tsx +++ b/src/components/views/project/projectActionCard/DonationSection.tsx @@ -25,19 +25,19 @@ interface IDonateSectionProps { export const DonateSection: FC = ({ projectData }) => { const { formatMessage, locale } = useIntl(); - const { sumDonationValueUsd } = projectData || {}; + const { totalDonations } = projectData || {}; const isMobile = !useMediaQuery(device.tablet); return ( - {sumDonationValueUsd && sumDonationValueUsd !== 0 ? ( + {totalDonations && totalDonations !== 0 ? ( {isMobile &&
} {formatMessage({ id: 'label.total_amount_raised' })} - {formatDonation(sumDonationValueUsd || 0, '$', locale)} + {formatDonation(totalDonations || 0, '$', locale)} {formatMessage({ diff --git a/src/components/views/project/projectActionCard/QFSection.tsx b/src/components/views/project/projectActionCard/QFSection.tsx index 5733a868d8..03665d2688 100644 --- a/src/components/views/project/projectActionCard/QFSection.tsx +++ b/src/components/views/project/projectActionCard/QFSection.tsx @@ -46,7 +46,7 @@ const QFSection: FC = ({ projectData }) => { qfRounds, estimatedMatching, sumDonationValueUsdForActiveQfRound, - sumDonationValueUsd, + totalDonations, adminUser, slug, organization, @@ -136,7 +136,7 @@ const QFSection: FC = ({ projectData }) => { })} {' ' + formatDonation( - sumDonationValueUsd || 0, + totalDonations || 0, '$', locale, )} @@ -188,7 +188,7 @@ const QFSection: FC = ({ projectData }) => { })} {' ' + formatDonation( - sumDonationValueUsd || 0, + totalDonations || 0, '$', locale, )} diff --git a/src/components/views/userProfile/projectsTab/ProjectItem.tsx b/src/components/views/userProfile/projectsTab/ProjectItem.tsx index aeadcd914f..94ac107367 100644 --- a/src/components/views/userProfile/projectsTab/ProjectItem.tsx +++ b/src/components/views/userProfile/projectsTab/ProjectItem.tsx @@ -124,7 +124,7 @@ const ProjectItem = ({ project, setProjects }: IProjectItem) => {

{formatDonation( - project.sumDonationValueUsd || 0, + project.totalDonations || 0, '$', locale, )} From 4ba161e3b38be0ea19b71b1521edc7afdb08b882 Mon Sep 17 00:00:00 2001 From: Cherik Date: Sun, 2 Jun 2024 13:09:51 +0330 Subject: [PATCH 81/90] fix givback icons --- src/components/GIVeconomyPages/GIVbacks.tsx | 4 ++-- src/components/GIVeconomyPages/GIVstream.tsx | 4 ++-- src/components/modals/GIVBackExplain.tsx | 4 ++-- src/components/modals/HarvestAll.tsx | 4 ++-- .../views/donate/SelectTokenModal/SelectTokenModal.tsx | 4 ++-- .../views/donate/TokenIcon/TokenIconWithGIVBack.tsx | 2 +- src/components/views/donate/TokenPicker.tsx | 6 +++--- src/components/views/homepage/aboutGiveconomy/index.tsx | 5 ++--- src/components/views/project/ProjectGIVbackToast.tsx | 4 ++-- src/helpers/html.tsx | 4 ++-- 10 files changed, 20 insertions(+), 21 deletions(-) diff --git a/src/components/GIVeconomyPages/GIVbacks.tsx b/src/components/GIVeconomyPages/GIVbacks.tsx index d64872f7ed..88f43449ea 100644 --- a/src/components/GIVeconomyPages/GIVbacks.tsx +++ b/src/components/GIVeconomyPages/GIVbacks.tsx @@ -1,13 +1,13 @@ import React, { useState, useEffect, useMemo } from 'react'; import { IconExternalLink, - IconGIVBack, P, brandColors, Col, Container, Row, Flex, + IconGIVBack64, } from '@giveth/ui-design-system'; import Link from 'next/link'; import { useIntl } from 'react-intl'; @@ -83,7 +83,7 @@ export const TabGIVbacksTop = () => { GIVbacks - + {formatMessage({ diff --git a/src/components/GIVeconomyPages/GIVstream.tsx b/src/components/GIVeconomyPages/GIVstream.tsx index a7de0680cc..dac94912ec 100644 --- a/src/components/GIVeconomyPages/GIVstream.tsx +++ b/src/components/GIVeconomyPages/GIVstream.tsx @@ -6,7 +6,6 @@ import { H1, H3, H6, - IconGIVBack, IconGIVFarm, IconGIVStream, IconHelpFilled16, @@ -17,6 +16,7 @@ import { Row, Col, Flex, + IconGIVBack24, } from '@giveth/ui-design-system'; import { useIntl } from 'react-intl'; import { useAccount } from 'wagmi'; @@ -338,7 +338,7 @@ const convertSourceTypeToIcon = (distributor: string) => { case 'givback': return ( - +

{` GIVbacks`}

); diff --git a/src/components/modals/GIVBackExplain.tsx b/src/components/modals/GIVBackExplain.tsx index d2c7cb1fb1..ad03c24040 100644 --- a/src/components/modals/GIVBackExplain.tsx +++ b/src/components/modals/GIVBackExplain.tsx @@ -6,8 +6,8 @@ import { brandColors, IconExternalLink, OutlineButton, - IconGIVBack, Flex, + IconGIVBack24, } from '@giveth/ui-design-system'; import styled from 'styled-components'; import { FC } from 'react'; @@ -25,7 +25,7 @@ export const GIVBackExplainModal: FC = ({ setShowModal }) => { - + {formatMessage({ id: 'label.why_dont_i_have_givbacks', diff --git a/src/components/modals/HarvestAll.tsx b/src/components/modals/HarvestAll.tsx index e55b39097b..5b1b382226 100644 --- a/src/components/modals/HarvestAll.tsx +++ b/src/components/modals/HarvestAll.tsx @@ -9,13 +9,13 @@ import React, { import { brandColors, Caption, - IconGIVBack, IconGIVFarm, IconGIVStream, IconHelpFilled16, Lead, P, Flex, + IconGIVBack24, } from '@giveth/ui-design-system'; import { useIntl } from 'react-intl'; import BigNumber from 'bignumber.js'; @@ -409,7 +409,7 @@ export const HarvestAllModal: FC<IHarvestAllModalProps> = ({ <BreakdownRow> <BreakdownTitle> <BreakdownIcon> - <IconGIVBack size={24} /> + <IconGIVBack24 /> </BreakdownIcon> <P>GIVbacks</P> </BreakdownTitle> diff --git a/src/components/views/donate/SelectTokenModal/SelectTokenModal.tsx b/src/components/views/donate/SelectTokenModal/SelectTokenModal.tsx index 0b91d935ff..42719c8ba9 100644 --- a/src/components/views/donate/SelectTokenModal/SelectTokenModal.tsx +++ b/src/components/views/donate/SelectTokenModal/SelectTokenModal.tsx @@ -1,13 +1,13 @@ import styled from 'styled-components'; import { Caption, - IconGIVBack, SublineBold, brandColors, mediaQueries, neutralColors, Flex, P, + IconGIVBack24, } from '@giveth/ui-design-system'; import { useState, type FC, useEffect } from 'react'; import { useAccount } from 'wagmi'; @@ -243,7 +243,7 @@ const SelectTokenInnerModal: FC<ISelectTokenModalProps> = ({ </Wrapper> <GIVbackWrapper> <Flex gap='8px' $alignItems='center'> - <IconGIVBack size={24} color={brandColors.giv[500]} /> + <IconGIVBack24 color={brandColors.giv[500]} /> <SublineBold> {formatMessage({ id: 'label.givbacks_eligible_tokens', diff --git a/src/components/views/donate/TokenIcon/TokenIconWithGIVBack.tsx b/src/components/views/donate/TokenIcon/TokenIconWithGIVBack.tsx index a80339d616..9c6027d29d 100644 --- a/src/components/views/donate/TokenIcon/TokenIconWithGIVBack.tsx +++ b/src/components/views/donate/TokenIcon/TokenIconWithGIVBack.tsx @@ -27,7 +27,7 @@ export const TokenIconWithGIVBack: FC<ITokenIconWithGIVBackProps> = ({ {isSuperToken && <SecondGreenDot />} {showGiveBack && ( <GIVBackBadge> - <IconGIVBack16 size={16} color={brandColors.giv[500]} /> + <IconGIVBack16 color={brandColors.giv[500]} /> </GIVBackBadge> )} </TokenIconWrapper> diff --git a/src/components/views/donate/TokenPicker.tsx b/src/components/views/donate/TokenPicker.tsx index 5537c949b5..937adc8477 100644 --- a/src/components/views/donate/TokenPicker.tsx +++ b/src/components/views/donate/TokenPicker.tsx @@ -4,7 +4,6 @@ import { P, brandColors, Caption, - IconGIVBack, IconCheck, B, IconCaretUp, @@ -12,6 +11,7 @@ import { IconSearch, IconX, FlexCenter, + IconGIVBack24, } from '@giveth/ui-design-system'; import styled from 'styled-components'; import { useIntl } from 'react-intl'; @@ -49,7 +49,7 @@ const MenuList = (props: MenuListProps<IProjectAcceptedToken, false>) => { <components.MenuList {...props}> {projectVerified && ( <GivBackIconContainer> - <IconGIVBack size={24} color={brandColors.giv[500]} /> + <IconGIVBack24 color={brandColors.giv[500]} /> <Caption> {formatMessage({ id: 'label.givbacks_eligible_tokens', @@ -75,7 +75,7 @@ const Option = ({ ...props }: OptionProps<IProjectAcceptedToken, false>) => { {name} ({symbol}){' '} </B> {isGivbackEligible && projectVerified && ( - <IconGIVBack size={24} color={brandColors.giv[500]} /> + <IconGIVBack24 color={brandColors.giv[500]} /> )} </RowContainer> {props.isSelected && <IconCheck color={brandColors.giv[500]} />} diff --git a/src/components/views/homepage/aboutGiveconomy/index.tsx b/src/components/views/homepage/aboutGiveconomy/index.tsx index 3693005b24..5bc00303b0 100644 --- a/src/components/views/homepage/aboutGiveconomy/index.tsx +++ b/src/components/views/homepage/aboutGiveconomy/index.tsx @@ -5,11 +5,11 @@ import { Lead, neutralColors, IconChevronRight16, - IconGIVBack, IconRocketInSpace, IconFarm, Container, Flex, + IconGIVBack64, } from '@giveth/ui-design-system'; import styled from 'styled-components'; import { useIntl } from 'react-intl'; @@ -51,8 +51,7 @@ const AboutGiveconomy = () => { })} - diff --git a/src/components/views/project/ProjectGIVbackToast.tsx b/src/components/views/project/ProjectGIVbackToast.tsx index 40bb81f196..7623ae3b7b 100644 --- a/src/components/views/project/ProjectGIVbackToast.tsx +++ b/src/components/views/project/ProjectGIVbackToast.tsx @@ -6,7 +6,6 @@ import { IconChevronRight, IconDeactivated24, IconDiscord18, - IconGIVBack, IconPublish24, IconRocketInSpace16, IconSunrise16, @@ -17,6 +16,7 @@ import { P, semanticColors, Flex, + IconGIVBack24, } from '@giveth/ui-design-system'; import { useIntl } from 'react-intl'; import { useEffect, useState } from 'react'; @@ -78,7 +78,7 @@ const ProjectGIVbackToast = () => { const useIntlTitle = 'project.givback_toast.title.'; const useIntlDescription = 'project.givback_toast.description.'; - let icon = ; + let icon = ; let link = links.GIVBACK_DOC; let title = ''; diff --git a/src/helpers/html.tsx b/src/helpers/html.tsx index cba40b4f6c..82fd1359bf 100644 --- a/src/helpers/html.tsx +++ b/src/helpers/html.tsx @@ -22,7 +22,7 @@ import { IconUnstake24, IconVerifiedBadge24, IconNotificationOutline24, - IconGIVBack, + IconGIVBack24, } from '@giveth/ui-design-system'; import styled from 'styled-components'; import { INotification } from '@/features/notification/notification.types'; @@ -150,7 +150,7 @@ export function convertBackendIconsToComponents(icon: string) { case 'IconUnstake': return ; case 'IconGIVBack': - return ; + return ; case 'IconStake': return ; case 'IconDonation': From f7578297f6082b5757e5ffa40fa7c55c86abcc23 Mon Sep 17 00:00:00 2001 From: Cherik Date: Sun, 2 Jun 2024 13:55:16 +0330 Subject: [PATCH 82/90] update version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9b3b0c4d7c..f10fb75996 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "givethdapp", - "version": "2.26.1", + "version": "2.27.0", "private": true, "scripts": { "build": "next build", From 65d5f868123e3a2760e72491fd5a6c9f982b2cf4 Mon Sep 17 00:00:00 2001 From: Cherik Date: Sun, 2 Jun 2024 14:01:56 +0330 Subject: [PATCH 83/90] update ui-design-system --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index f10fb75996..603286e0f6 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ }, "dependencies": { "@apollo/client": "^3.10.4", - "@giveth/ui-design-system": "^1.11.27", + "@giveth/ui-design-system": "^1.11.28", "@reduxjs/toolkit": "^2.2.4", "@safe-global/api-kit": "^2.1.0", "@segment/snippet": "^4.15.3", diff --git a/yarn.lock b/yarn.lock index 9f38db1f51..fc9291b7cb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1351,10 +1351,10 @@ "@solana/wallet-adapter-base" "^0.9.17" bs58 "^5.0.0" -"@giveth/ui-design-system@^1.11.27": - version "1.11.27" - resolved "https://registry.yarnpkg.com/@giveth/ui-design-system/-/ui-design-system-1.11.27.tgz#e2445acb5323d59489cb7796d693f4e8fe899189" - integrity sha512-Ob1gYjAkaN0EdKBxv8guwiIlpHEEIMWaDN1FZgUTda8VHzTJLGRksbOLWdvv9od5CN6o/vxDx2gDW8FAoUCENA== +"@giveth/ui-design-system@^1.11.28": + version "1.11.28" + resolved "https://registry.yarnpkg.com/@giveth/ui-design-system/-/ui-design-system-1.11.28.tgz#3063105cab954ed545bfff4ac1fef526710c947e" + integrity sha512-YYqIJ3w1CpXoJgsYNQNwCnTVBT0EUgHQjOCQBvI3UecpT2f4P3AZuUD53Kn1vDS5jg1PPLwN1N2zy6TCdtG31Q== dependencies: next "14.1.0" react "^18" From bc9e029b4442f57c00ee94ee535bd39cfe06de00 Mon Sep 17 00:00:00 2001 From: kkatusic Date: Sun, 2 Jun 2024 14:05:45 +0200 Subject: [PATCH 84/90] Fixing issue with givback logo size --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 9b3b0c4d7c..3f52a987af 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ }, "dependencies": { "@apollo/client": "^3.10.4", - "@giveth/ui-design-system": "^1.11.27", + "@giveth/ui-design-system": "^1.11.28", "@reduxjs/toolkit": "^2.2.4", "@safe-global/api-kit": "^2.1.0", "@segment/snippet": "^4.15.3", diff --git a/yarn.lock b/yarn.lock index 9f38db1f51..fc9291b7cb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1351,10 +1351,10 @@ "@solana/wallet-adapter-base" "^0.9.17" bs58 "^5.0.0" -"@giveth/ui-design-system@^1.11.27": - version "1.11.27" - resolved "https://registry.yarnpkg.com/@giveth/ui-design-system/-/ui-design-system-1.11.27.tgz#e2445acb5323d59489cb7796d693f4e8fe899189" - integrity sha512-Ob1gYjAkaN0EdKBxv8guwiIlpHEEIMWaDN1FZgUTda8VHzTJLGRksbOLWdvv9od5CN6o/vxDx2gDW8FAoUCENA== +"@giveth/ui-design-system@^1.11.28": + version "1.11.28" + resolved "https://registry.yarnpkg.com/@giveth/ui-design-system/-/ui-design-system-1.11.28.tgz#3063105cab954ed545bfff4ac1fef526710c947e" + integrity sha512-YYqIJ3w1CpXoJgsYNQNwCnTVBT0EUgHQjOCQBvI3UecpT2f4P3AZuUD53Kn1vDS5jg1PPLwN1N2zy6TCdtG31Q== dependencies: next "14.1.0" react "^18" From dd279445062a04bde25144039df0a3ad6f6a9c8e Mon Sep 17 00:00:00 2001 From: Ramin Date: Sun, 2 Jun 2024 16:06:19 +0330 Subject: [PATCH 85/90] fix qfRounds query --- src/apollo/gql/gqlQF.ts | 7 ++----- src/features/general/general.slice.ts | 2 +- src/features/general/general.thunk.ts | 12 ++++++++++-- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/apollo/gql/gqlQF.ts b/src/apollo/gql/gqlQF.ts index 2f9e4e14b7..aefc396415 100644 --- a/src/apollo/gql/gqlQF.ts +++ b/src/apollo/gql/gqlQF.ts @@ -1,10 +1,7 @@ import { gql } from '@apollo/client'; -export const FETCH_QF_ROUNDS_QUERY = ` - query FetchQFRounds ( - $slug: String, - $activeOnly: Boolean, - ) { +export const FETCH_QF_ROUNDS_QUERY = gql` + query FetchQFRounds($slug: String, $activeOnly: Boolean) { qfRounds(slug: $slug, activeOnly: $activeOnly) { id slug diff --git a/src/features/general/general.slice.ts b/src/features/general/general.slice.ts index b8d6f3b2ae..74e3a031b2 100644 --- a/src/features/general/general.slice.ts +++ b/src/features/general/general.slice.ts @@ -52,7 +52,7 @@ export const GeneralSlice = createSlice({ ); }); builder.addCase(fetchActiveQFRounds.fulfilled, (state, action) => { - const qfRounds = action.payload.data.qfRounds; + const qfRounds = action.payload; state.activeQFRound = qfRounds ? qfRounds[0] : null; }); }, diff --git a/src/features/general/general.thunk.ts b/src/features/general/general.thunk.ts index 3818ca3929..ac452dd9be 100644 --- a/src/features/general/general.thunk.ts +++ b/src/features/general/general.thunk.ts @@ -1,7 +1,8 @@ import { createAsyncThunk } from '@reduxjs/toolkit'; import { backendGQLRequest } from '@/helpers/requests'; -import { FETCH_MAIN_CATEGORIES } from './general.queries'; import { FETCH_QF_ROUNDS_QUERY } from '@/apollo/gql/gqlQF'; +import { FETCH_MAIN_CATEGORIES } from '@/apollo/gql/gqlProjects'; +import { client } from '@/apollo/apolloClient'; export const fetchMainCategories = createAsyncThunk( 'general/fetchMainCategories', @@ -13,6 +14,13 @@ export const fetchMainCategories = createAsyncThunk( export const fetchActiveQFRounds = createAsyncThunk( 'general/fetchQFRounds', async () => { - return backendGQLRequest(FETCH_QF_ROUNDS_QUERY, { activeOnly: true }); + const { + data: { qfRounds }, + } = await client.query({ + query: FETCH_QF_ROUNDS_QUERY, + variables: { activeOnly: true }, + fetchPolicy: 'no-cache', + }); + return qfRounds; }, ); From 8399e01d81c3c6c39aa22dad070ae181847b4367 Mon Sep 17 00:00:00 2001 From: Ramin Date: Sun, 2 Jun 2024 16:22:06 +0330 Subject: [PATCH 86/90] fix FETCH_MAIN_CATEGORIES query --- src/features/general/general.thunk.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features/general/general.thunk.ts b/src/features/general/general.thunk.ts index ac452dd9be..b6366c79cd 100644 --- a/src/features/general/general.thunk.ts +++ b/src/features/general/general.thunk.ts @@ -1,7 +1,7 @@ import { createAsyncThunk } from '@reduxjs/toolkit'; import { backendGQLRequest } from '@/helpers/requests'; import { FETCH_QF_ROUNDS_QUERY } from '@/apollo/gql/gqlQF'; -import { FETCH_MAIN_CATEGORIES } from '@/apollo/gql/gqlProjects'; +import { FETCH_MAIN_CATEGORIES } from './general.queries'; import { client } from '@/apollo/apolloClient'; export const fetchMainCategories = createAsyncThunk( From 888c2e4a98843e20794794f5d27458509c72fa2e Mon Sep 17 00:00:00 2001 From: Meriem-BM Date: Sun, 2 Jun 2024 15:59:20 +0100 Subject: [PATCH 87/90] fix: (case-sensitive issue) rename existing icon files --- public/images/tokens/{AGEUR.png => agEUR.png} | Bin public/images/tokens/{AGEUR.svg => agEUR.svg} | 0 public/images/tokens/{RETH.png => rETH.png} | Bin public/images/tokens/{RETH.svg => rETH.svg} | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename public/images/tokens/{AGEUR.png => agEUR.png} (100%) rename public/images/tokens/{AGEUR.svg => agEUR.svg} (100%) rename public/images/tokens/{RETH.png => rETH.png} (100%) rename public/images/tokens/{RETH.svg => rETH.svg} (100%) diff --git a/public/images/tokens/AGEUR.png b/public/images/tokens/agEUR.png similarity index 100% rename from public/images/tokens/AGEUR.png rename to public/images/tokens/agEUR.png diff --git a/public/images/tokens/AGEUR.svg b/public/images/tokens/agEUR.svg similarity index 100% rename from public/images/tokens/AGEUR.svg rename to public/images/tokens/agEUR.svg diff --git a/public/images/tokens/RETH.png b/public/images/tokens/rETH.png similarity index 100% rename from public/images/tokens/RETH.png rename to public/images/tokens/rETH.png diff --git a/public/images/tokens/RETH.svg b/public/images/tokens/rETH.svg similarity index 100% rename from public/images/tokens/RETH.svg rename to public/images/tokens/rETH.svg From 9dcae7347de49e63fd87a1cfc530895214c23f0a Mon Sep 17 00:00:00 2001 From: Ramin Date: Mon, 3 Jun 2024 16:00:06 +0330 Subject: [PATCH 88/90] Support Giveth Subgraphs as ENV Variables --- src/config/development.tsx | 11 ++++------- src/config/production.tsx | 11 ++++------- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/src/config/development.tsx b/src/config/development.tsx index 3445b100aa..9bddd011ff 100644 --- a/src/config/development.tsx +++ b/src/config/development.tsx @@ -89,7 +89,7 @@ const classic = { url: 'https://etc-mordor.blockscout.com', }, }, - subgraphAddress: 'http://167.172.97.150:8000/subgraphs/name/giveth/etc', + subgraphAddress: process.env.NEXT_PUBLIC_SUBGRAPH_CLASSIC, }; const EVM_CHAINS = [ @@ -137,8 +137,7 @@ const config: EnvConfig = { gasPreference: { // Keep it empty for automatic configuration }, - subgraphAddress: - 'https://api.studio.thegraph.com/query/40764/giveconomy-staging-goerli/1.5.0?source=giveth', + subgraphAddress: process.env.NEXT_PUBLIC_SUBGRAPH_MAINNET!, coingeckoChainName: 'ethereum', chainLogo: (logoSize?: number) => , @@ -193,8 +192,7 @@ const config: EnvConfig = { maxPriorityFeePerGas: (1e9).toString(), }, - subgraphAddress: - 'https://api.studio.thegraph.com/query/40764/giveconomy-staging-gnosischain/1.5.1?source=giveth', + subgraphAddress: process.env.NEXT_PUBLIC_SUBGRAPH_GNOSIS!, coingeckoChainName: 'xdai', chainLogo: (logoSize?: number) => , @@ -355,8 +353,7 @@ const config: EnvConfig = { // Keep it empty for automatic configuration }, anchorRegistryAddress: '0x4AAcca72145e1dF2aeC137E1f3C5E3D75DB8b5f3', - subgraphAddress: - 'https://api.thegraph.com/subgraphs/name/giveth/giveth-economy-optim-sepolia?source=giveth', + subgraphAddress: process.env.NEXT_PUBLIC_SUBGRAPH_OPTIMISM!, GIV_TOKEN_ADDRESS: OPTIMISM_GIV_TOKEN_ADDRESS, GIV_BUY_LINK: 'https://app.uniswap.org/#/swap?chain=optimism&outputCurrency=0xc916Ce4025Cb479d9BA9D798A80094a449667F5D', diff --git a/src/config/production.tsx b/src/config/production.tsx index b6c57ef6eb..78ceb1cf58 100644 --- a/src/config/production.tsx +++ b/src/config/production.tsx @@ -111,8 +111,7 @@ const config: EnvConfig = { // Keep it empty for automatic configuration }, - subgraphAddress: - 'https://api.thegraph.com/subgraphs/name/giveth/giveth-economy-second-mainnet?source=giveth', + subgraphAddress: process.env.NEXT_PUBLIC_SUBGRAPH_MAINNET!, coingeckoChainName: 'ethereum', chainLogo: (logoSize = 24) => , @@ -255,8 +254,7 @@ const config: EnvConfig = { maxPriorityFeePerGas: (1e9).toString(), }, - subgraphAddress: - 'https://api.thegraph.com/subgraphs/name/giveth/giveth-economy-second-xdai?source=giveth', + subgraphAddress: process.env.NEXT_PUBLIC_SUBGRAPH_GNOSIS!, coingeckoChainName: 'xdai', chainLogo: (logoSize = 24) => , @@ -402,8 +400,7 @@ const config: EnvConfig = { // Keep it empty for automatic configuration }, anchorRegistryAddress: '0x4AAcca72145e1dF2aeC137E1f3C5E3D75DB8b5f3', - subgraphAddress: - 'https://api.thegraph.com/subgraphs/name/giveth/giveconomy-optimism-mainnet?source=giveth', + subgraphAddress: process.env.NEXT_PUBLIC_SUBGRAPH_OPTIMISM!, GIV_TOKEN_ADDRESS: OPTIMISM_GIV_TOKEN_ADDRESS, GIV_BUY_LINK: 'https://velodrome.finance/swap?from=eth&to=0x528cdc92eab044e1e39fe43b9514bfdab4412b98', @@ -541,7 +538,7 @@ const config: EnvConfig = { gasPreference: { // Keep it empty for automatic configuration }, - subgraphAddress: 'http://167.172.97.150:8000/subgraphs/name/giveth/etc', + subgraphAddress: process.env.NEXT_PUBLIC_SUBGRAPH_CLASSIC, coingeckoChainName: 'ethereum-classic', chainLogo: (logoSize = 24) => , }, From c2bc0d336ac10bbc39fccca2e048b8e651d531fc Mon Sep 17 00:00:00 2001 From: Ramin Date: Mon, 3 Jun 2024 16:20:25 +0330 Subject: [PATCH 89/90] add default values for Subgraph ENV Variables --- src/config/development.tsx | 16 ++++++++++++---- src/config/production.tsx | 16 ++++++++++++---- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/config/development.tsx b/src/config/development.tsx index 9bddd011ff..76bfab5a37 100644 --- a/src/config/development.tsx +++ b/src/config/development.tsx @@ -89,7 +89,9 @@ const classic = { url: 'https://etc-mordor.blockscout.com', }, }, - subgraphAddress: process.env.NEXT_PUBLIC_SUBGRAPH_CLASSIC, + subgraphAddress: + process.env.NEXT_PUBLIC_SUBGRAPH_CLASSIC || + 'http://167.172.97.150:8000/subgraphs/name/giveth/etc', }; const EVM_CHAINS = [ @@ -137,7 +139,9 @@ const config: EnvConfig = { gasPreference: { // Keep it empty for automatic configuration }, - subgraphAddress: process.env.NEXT_PUBLIC_SUBGRAPH_MAINNET!, + subgraphAddress: + process.env.NEXT_PUBLIC_SUBGRAPH_MAINNET || + 'https://api.studio.thegraph.com/query/40764/giveconomy-staging-goerli/1.5.0?source=giveth', coingeckoChainName: 'ethereum', chainLogo: (logoSize?: number) => , @@ -192,7 +196,9 @@ const config: EnvConfig = { maxPriorityFeePerGas: (1e9).toString(), }, - subgraphAddress: process.env.NEXT_PUBLIC_SUBGRAPH_GNOSIS!, + subgraphAddress: + process.env.NEXT_PUBLIC_SUBGRAPH_GNOSIS || + 'https://api.studio.thegraph.com/query/40764/giveconomy-staging-gnosischain/1.5.1?source=giveth', coingeckoChainName: 'xdai', chainLogo: (logoSize?: number) => , @@ -353,7 +359,9 @@ const config: EnvConfig = { // Keep it empty for automatic configuration }, anchorRegistryAddress: '0x4AAcca72145e1dF2aeC137E1f3C5E3D75DB8b5f3', - subgraphAddress: process.env.NEXT_PUBLIC_SUBGRAPH_OPTIMISM!, + subgraphAddress: + process.env.NEXT_PUBLIC_SUBGRAPH_OPTIMISM || + 'https://api.thegraph.com/subgraphs/name/giveth/giveth-economy-optim-sepolia?source=giveth', GIV_TOKEN_ADDRESS: OPTIMISM_GIV_TOKEN_ADDRESS, GIV_BUY_LINK: 'https://app.uniswap.org/#/swap?chain=optimism&outputCurrency=0xc916Ce4025Cb479d9BA9D798A80094a449667F5D', diff --git a/src/config/production.tsx b/src/config/production.tsx index 78ceb1cf58..8daab5132f 100644 --- a/src/config/production.tsx +++ b/src/config/production.tsx @@ -111,7 +111,9 @@ const config: EnvConfig = { // Keep it empty for automatic configuration }, - subgraphAddress: process.env.NEXT_PUBLIC_SUBGRAPH_MAINNET!, + subgraphAddress: + process.env.NEXT_PUBLIC_SUBGRAPH_MAINNET || + 'https://api.thegraph.com/subgraphs/name/giveth/giveth-economy-second-mainnet?source=giveth', coingeckoChainName: 'ethereum', chainLogo: (logoSize = 24) => , @@ -254,7 +256,9 @@ const config: EnvConfig = { maxPriorityFeePerGas: (1e9).toString(), }, - subgraphAddress: process.env.NEXT_PUBLIC_SUBGRAPH_GNOSIS!, + subgraphAddress: + process.env.NEXT_PUBLIC_SUBGRAPH_GNOSIS || + 'https://api.thegraph.com/subgraphs/name/giveth/giveth-economy-second-xdai?source=giveth', coingeckoChainName: 'xdai', chainLogo: (logoSize = 24) => , @@ -400,7 +404,9 @@ const config: EnvConfig = { // Keep it empty for automatic configuration }, anchorRegistryAddress: '0x4AAcca72145e1dF2aeC137E1f3C5E3D75DB8b5f3', - subgraphAddress: process.env.NEXT_PUBLIC_SUBGRAPH_OPTIMISM!, + subgraphAddress: + process.env.NEXT_PUBLIC_SUBGRAPH_OPTIMISM || + 'https://api.thegraph.com/subgraphs/name/giveth/giveconomy-optimism-mainnet?source=giveth', GIV_TOKEN_ADDRESS: OPTIMISM_GIV_TOKEN_ADDRESS, GIV_BUY_LINK: 'https://velodrome.finance/swap?from=eth&to=0x528cdc92eab044e1e39fe43b9514bfdab4412b98', @@ -538,7 +544,9 @@ const config: EnvConfig = { gasPreference: { // Keep it empty for automatic configuration }, - subgraphAddress: process.env.NEXT_PUBLIC_SUBGRAPH_CLASSIC, + subgraphAddress: + process.env.NEXT_PUBLIC_SUBGRAPH_CLASSIC || + 'http://167.172.97.150:8000/subgraphs/name/giveth/etc', coingeckoChainName: 'ethereum-classic', chainLogo: (logoSize = 24) => , }, From deb3e6a3eb2ce9b9178b16a03f5d9f23eecbc42e Mon Sep 17 00:00:00 2001 From: Meriem-B <135605616+Meriem-B@users.noreply.github.com> Date: Tue, 4 Jun 2024 15:16:04 +0100 Subject: [PATCH 90/90] fix: add USDbC icons --- public/images/tokens/USDbC.png | Bin 0 -> 1457 bytes public/images/tokens/USDbC.svg | 12 ++++++++++++ 2 files changed, 12 insertions(+) create mode 100644 public/images/tokens/USDbC.png create mode 100644 public/images/tokens/USDbC.svg diff --git a/public/images/tokens/USDbC.png b/public/images/tokens/USDbC.png new file mode 100644 index 0000000000000000000000000000000000000000..7e356e76e72ce88148086a81a8c58a8b7eb585bf GIT binary patch literal 1457 zcmV;i1y1^jP)h(wY$w4o)&Xag_m6ZAo2qCB(@8sP={!ZtM~kkG`& zn6x|@Us&yfQ6X*98WT{dM$$Dk?Y41OYp86fmWBP9p6~9=a_7!0kkBug%*erm;c z(+9JzTB4_3r1;_rP5yY7#=ncZElDyHA(@E+1Ms<!YsituVh{mRI+@P(!DW?xCu3uMpmU?mB(^^`Auz zn7DF>8CYe-+bFQTl-_Kw75|I=Wi#6E&E(4Ne*ft=_#s?iQh!rkb*QD9#`~Vm3%-1Z zDNWE)DpQ!RD)-RDJ5A!ddvxAr2lY8jm1wG02HZR=)v*ZZG&ly=va(@Ms$v4Bci+4b%jop*mg z-8~cly=S5h#6IWsqwL|k;68?%rjy~Ase78I4+#Gz;N23Y=+(Htlj z?*tnr8;3Yq4^zJ-nXxMIAX6-8S}y2i&CP zV%GG%wSfW*YG4EGCmg5}$`ty6YwT|@1D_9amf(pCHde*B8*8#GD`+M7y;KBCsjTbx zz!x`#UlA)$ut2Z@!3fGejt{ja2wBV7VrmEm;F$Ewi@^efy0HMLy9Fc23>X7L)S}bu zQY%a(ISaIyJd!Y#y8Q{2Ei6?y*&yqT2y8EL{LdP5oFf{=bdJPd}lO0 zWWjLNI5e+%Y&4YA4C70AeEi#dP9v&uB+EcxA`{w%eqK`|s$s%$V8M-6bqt@sWt&6O zx^^0RbHnl^EVat(0M~xC#;druoNNRQtw$Kh^p_&dj2=L!O9S;;$i3LC2Zi-<2F5Hwdrn6DLP^s=QyASUfos5 z=k=OWVJHV&m=#aWFFKTKy1hMj+zZe;XEd5rnGl9>EZ{_Q?8*dMxM}wFG^er}kc=dk z-GlQVwOzH_HMZp)D^T~1vMLH}qN2iTbBNx7aA?tgqe=l7-5HeaOJWmLrjxr1F6;ES^r00000 LNkvXXu0mjfP+GZA literal 0 HcmV?d00001 diff --git a/public/images/tokens/USDbC.svg b/public/images/tokens/USDbC.svg new file mode 100644 index 0000000000..c16c1343c7 --- /dev/null +++ b/public/images/tokens/USDbC.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + +