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',
})}
-
+
{
},
}}
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}
/>
{
- 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' : ''
+ }
/>
- {percentage > 100 && (
+ {perMonthAmount > amount && (
{formatMessage({
id: 'label.recurring_donation_maximum',
@@ -438,10 +434,10 @@ export const RecurringDonationCard = () => {
- {amount !== 0n && percentage !== 0
+ {amount !== 0n && perMonthAmount !== 0n
? limitFraction(
formatUnits(
- totalPerMonth,
+ perMonthAmount,
selectedToken?.token
.decimals || 18,
),
@@ -615,7 +611,7 @@ export const RecurringDonationCard = () => {
- {amount !== 0n && percentage !== 0
+ {amount !== 0n && perMonthAmount !== 0n
? limitFraction(
formatUnits(
projectPerMonth,
@@ -650,7 +646,8 @@ export const RecurringDonationCard = () => {
- {amount !== 0n && percentage !== 0
+ {amount !== 0n &&
+ perMonthAmount !== 0n
? limitFraction(
formatUnits(
givethPerMonth,
@@ -679,10 +676,10 @@ export const RecurringDonationCard = () => {
- {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
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 = ({
step,
setStep,
amount,
- percentage,
+ perMonthAmount,
donationToGiveth,
setShowModal,
isUpdating,
@@ -240,7 +239,7 @@ const RecurringDonationInnerModal: FC = ({
}
const _flowRate =
- (totalPerMonth * BigInt(100 - donationToGiveth)) /
+ (perMonthAmount * BigInt(100 - donationToGiveth)) /
100n /
ONE_MONTH_SECONDS;
@@ -273,7 +272,7 @@ const RecurringDonationInnerModal: FC = ({
}
const _newFlowRate =
- (totalPerMonth * BigInt(donationToGiveth)) /
+ (perMonthAmount * BigInt(donationToGiveth)) /
100n /
ONE_MONTH_SECONDS;
@@ -489,15 +488,9 @@ const RecurringDonationInnerModal: FC = ({
}
};
- 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 (
@@ -530,7 +523,7 @@ const RecurringDonationInnerModal: FC = ({
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
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
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
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 = () => {
{formatMessage({ id: 'label.please_sign_in' })}
);
-
return (
<>
@@ -194,22 +193,28 @@ const UserProfileView: FC = () => {
) : (
-
-
-
- View this Givers PFP on Rarible{' '}
-
-
-
-
+ pfpToken && (
+
+
+
+ View this Givers PFP on
+ Rarible{' '}
+
+
+
+
+ )
))}
From b29e882f6070cc5b35503b721dea367db5f07e7b Mon Sep 17 00:00:00 2001
From: kkatusic
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) => ,
},
+ BASE_CONFIG: {
+ ...baseSepolia,
+ chainType: ChainType.EVM,
+ coingeckoChainName: 'base',
+ gasPreference: {
+ // Keep it empty for automatic configuration
+ },
+ //TODO: should change the icon
+ chainLogo: (logoSize?: number) => ,
+ },
+
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) => ,
},
+ BASE_CONFIG: {
+ ...base,
+ chainType: ChainType.EVM,
+ gasPreference: {
+ // Keep it empty for automatic configuration
+ },
+ subgraphAddress: '',
+ coingeckoChainName: 'base',
+ //TODO: should change the icon
+ chainLogo: (logoSize = 24) => ,
+ },
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
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
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
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 @@
+
+
+
+
\ 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 = ({ size = 16 }) => {
+ return (
+
+ );
+};
+
+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 = 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) => ,
+ chainLogo: (logoSize?: number) => ,
},
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) => ,
+ chainLogo: (logoSize = 24) => ,
},
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
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 (
-
+
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 = () => {
)}
+ {selectedToken && (
+
+ )}
{userStreamOnSelectedToken ? (
isUpdating ? (
div {
+ margin: 0;
+ }
+`;
From 8222746312f7b8ab0547911d238dc917ca19d6d4 Mon Sep 17 00:00:00 2001
From: Cherik
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 = () => {
)}
{!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 = () => {
)}
{userStreamOnSelectedToken ? (
From e2be96433154c7f6c8f59d89a6d01ea724eebf28 Mon Sep 17 00:00:00 2001
From: Ramin
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 = 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 = props => {
token,
setFailedModalType,
};
- if (!projectWalletAddress || !givethWalletAddress) {
+ if (!projectWalletAddress || !givethWalletAddress()) {
setDonating(false);
return showToastError(
`${
@@ -217,7 +219,7 @@ const DonateModal: FC = 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
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 = 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
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 = 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 = 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
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>;
setShowAddressModal: Dispatch>;
setShowClaimModal?: Dispatch>;
+ 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 ? (
CANCELLED
From ca46cdf23b2513a6b7b501434f1807788dd6b43b Mon Sep 17 00:00:00 2001
From: Cherik
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 (
-
+
@@ -53,15 +58,15 @@ const ProjectItem = ({ project, setProjects }: IProjectItem) => {
{project.title}
-
-
+
-
+
{formatMessage({ id: 'label.project_status' })}
@@ -125,7 +130,7 @@ const ProjectItem = ({ project, setProjects }: IProjectItem) => {
)}
-
+
{showAddressModal && selectedProject && (
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
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
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 = ({
{formatMessage({ id: 'label.total_donated' })}
+
+ {formatMessage({ id: 'label.usd_value' })}
+
{myAccount && (
<>
@@ -117,7 +121,7 @@ const RecurringDonationTable: FC = ({
) : (
-
+
{limitFraction(
formatUnits(
BigInt(donation.flowRate) *
@@ -130,9 +134,15 @@ const RecurringDonationTable: FC = ({
)}
- {limitFraction(donation.amountStreamed, 10, true) || 0}
+
+ {limitFraction(donation.amountStreamed, 10, true) ||
+ 0}
+
{donation.currency}
+
+ {formatDonation(donation.totalUsdStreamed, '$') || 0}
+
{myAccount && (
<>
@@ -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
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
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 = ({ 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 ;
}
@@ -29,13 +28,16 @@ const UserRoute: FC = ({ user }) => {
user.walletAddress?.toLowerCase() ===
userData?.walletAddress?.toLowerCase();
+ const userName =
+ user.name ||
+ `${user.firstName || ''} ${user.lastName || ''}`.trim() ||
+ user.walletAddress?.substring(0, 8) + '...';
+
return (
<>
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
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 = ({ 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 = () => {
const { myAccount, user } = useProfileContext();
const { formatMessage } = useIntl();
- const userName = user?.name || 'Unknown';
+ const userName = getUserName(user);
return (
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 = () => {
});
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
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
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
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 = () => {
{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
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
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{CVA80^=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
zcmV+>6WQ#EP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@
z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuOkV!;ARCoc+TL*kpRo4H%NrM0h
zBq6ZWBy@oQ0al8T06|omB7(4>D*_^`>`HHuP?aV{<&z>s5s_s<_y84_5Q>O|W<;t$
zs3DX5kA)B)506$XEnK72iKkiq(UEHA6TO%+O_0^@NLOvk+ud*lfY5qxj)LpG+h<>b0>
zZXFbungEK`doqxNG(3Wo1`eSFyx`A&Z+O@YMpYFUgaH3GLD}Sm@juxh6#3R_U`6Ro
z#q3fhWR2n~4`4r4^}Y_`3gU4dzaa%jkc^wSk6U=CKej5%k_fdCgz6}Z2vkA`)HIhm
z5(j&p*J}*OnWrE&Rj)5fS!4o`&C8nL^>pM~?u@0-HlYZ>
zJ7|ePXa-+y8$zlAb(R6f+2jaQp&i&kaEkyLm|DvdSjxQ}X@ZKyIEY!;i_1k^Z9C($
zTNOe^8;>XqAR%%g-UB&rkO)b7g|ns01mLQ_!xf*-7x*3Hp6-WrIK`d)-vHr=HRy%r
zsKVDP4=8X)c_8Nhp4eE7m_8#1)6@ruRb$YOI?R)_APf8#f7Bu>xk1gsR8_{t1)A&%
z0i5Ch6@$HusJ4|Icf3Lc){}HUgsZN+=ZWJsKrnVuI+R06u86YR6WQ&Zkqcsk6bNF>
zaPq5&)bTu0x$~C(&rMz?a2z+d6+Wf@Nu_0>MjGL{S{AOr$?;*K1TexQj(B}ebDu|I
z8It}WL08zo?LC*V$rxpj=)PFj>Lu)
z-dMd*#jWdrsStbZ0e!+_ba@WawCVGHYgBJs9Y;6paBB$HxMe-K38E0@V}L1q3gTAU
zcJ!DKq+LIXNKpxNVm>7O+=XtF-$jeTgYa>T3A;Auub^K!1>Pkd?^XQ8O4aij@^%U^
zd!z{!ns-IdIb-Ng=0AJ9wc{GGP>
z=6yP2;F`HuFu{ZqhqXptK0x203R*-{Ns%5GP66}An~;+QbnCAmva5p9et=AT?r4>z
zMl|2jK+GZocFmrR?Q=eNas<|Bbx$p=7a7%49Tn(#a|)NY4Z@TH4pL#z|{|+%6Ri3vN415(_LuMzdKN}
zGS)55XZv~#iBt`9zDFN&OY_Kl{1h6U342T9`SEY%SGssLn_EFVR?d;Gd#tbCoNJ*0
z_dZu&4PJ@_IHU3^H>{2DuI*sTF~Ue)W-?M|@cP+NZzAs7{K@P6+m@mUvZ(?EG9L-P
z)owJ`TmJ3Ys$$~8UbtaLHC{e;66X*6Vu}9PwZtXFU8fIImT{;tM3^K;xWo;4EHI}OA~qpc@wue}&MwHhj@*${}Md`Pn+Vw%zr%4D?cciIXW
z_M>K2T}M2lpn2ULSp3Q`tNMa&cH&K%%c0`JMtWi5p4>Ibc~KgDLs{tx>|e1Fb;5zr
zdIhtu^qKJp`1PQQji1|}yx<((t&)43o4nw^I6%SvRU72eX^>Ez1`@Q*b%qS^=pZ*c
z@w*gGL-NUU_+@h(I`(k7NwFcy>f?SAe%%u9QlH;4PANc@*g=dwLl&k-(B_XgLSx~q
z8?n5NW9OntD+Qvj|43*>HMxG&ESFz-k-|`nJO**8n^0S}05!6r>|`j@Rq!q6htQ|P
zk$yb|{e~634P5Qt5q^~#3hFh^Ldi0|2n?z02+d*rE^~BUOiQn4JZYCvEOGz27~yI6
zPCq(1BVc3%<}RgrXg!b%REXiC!>hFXD%0*NDttc6guA!$dwKp91-EZ`qx;-BC{rc_
z-_Kl%ZBrLH?KH_5g+LC}`c#7|#hAkQJ$0Fr&~3^vv>!1PYZj^ac^CD+QEONt&%Ds?
ztJhW#R@cc+okWv$`(nNcnHgGxidDTaB<5X|s}zjYL(H13(4ORgMt~Z-x+jG}5LE)s
zI2qX$mV05s+gLW!ghRW{{p9`GQ(dCdxBpY#;5tNhR#3{%x}EqD`sC%w^~=Dl_e^+y
zac|UKyA@~R%_gsPBbz%pof2SIbtJ4?HH(aVmnU`3zzgGt;KUK+O}_Wr)WuN>Zd?IA
zpOx>#=zSS!@oie=9sxws+Y&&GsTW^Y(3*b5?Hj<7>DoJm$j^^^%P9iL(cB|$fRgYG
zFmPyoX--aFCRHW84$dCerdO-Jg7)1Nq;T>-?Nrfokcd-#>RKt*p*TDCAgr!}r<&M*
zRwc~7W_iB1f|8}g+5{?Br{CUH>pAgf6;&EJzu(eH0)jtnTiskJ|MLcxxI
zsklR7DlTy&*0&}5+kz1Demd}T957>*_OwcgU=koE8pbYYi%C$AczB>v_v>0HRB%7uR}HDS;=gW1Jx+7@Wq_VGyxYK^Dl_xLl3
z9&KhAP1gWoYy2FiqBc!x9fY6)Wk|ROsdu#-C;ln>1WQ~PCDTVcXmp|(?eu+zQ9E2i
zJ@tzUod`GRvI<k{I%_l0shT|TOtxmsO8|0T6KXBg-NrTH^#=q&7Ax(;<3
zY5P+KGjFU3Ti2-AW-(C9zOv}??fovl=1iitqI#2UOgY
zNR}NCVt+Yb#hQ;*Boa@cF$Lz2D>vA|wqNDPTm){?d%^*!LX99EI6DKEj-0^BAGTw_
z7%~xCU%RNWsXgz`UVl|-#p!PG9ZK;>4}i4W8fLXx_FCAl+xNYS-HZ_kh*=!yorptg
zx7kOwsg*!BpBz|uA9PN
zK86HEEkU-12s?Y=9|+WwEl9%27>p8R@&=b$~YK4UpxuNaAL$di=n$5EB+jH_F#Vb^`M!ZJ>F7bkc@gfWCPhMJx
zwfXX31*vBe@#B&WNcegy9;M}~0_!dv-bFxjpj2j}d3wOOmj|F~JJ9lQ5mZXB1n#?t
zo}J85oZk-F@4%ZfR)pcTB$y9Kg!v>)9#CEjkw3gg`+)l05+pF1$u_nif_L3#BxDo`
z`q^6B$4=dM;He?UpnAdUSBf#5Ar~B#EDOobauvikhlF|$@`X3(3G-a_)LRYE;#D%5VxFna3j=>ZsiEYVSP;mnlsNN{Z7HS
zquc_qrc6xTNtqb&BA&tm?04AM-h3)7kD3ynz_$S|CS5k0RAak
zr0fPd^)AAS{-crb#g~|}7eeyxq_UF>oLFM8wH`-ebyTd&Goc?H_3&W01_SL^<{~c*5sMGD{zPB`rizjjtMoR
z5op+jDN7Y}p;{|$s7c35j>uX@Bw%6tZuoNGM5HCtd2j(Fsj3Y^q{VqJy#JG2mk
zWZo50{soPta2akVUB#!}hGJ2dzv9nNCt=!31Im?mxf{C;22U`c|DcQb*U*8O+wL`7
zJAT$KUSX9yt~H}@dDiH-c?9r;&n#Bn9fv4XV^V>;a4PNqrZ;;TapH%4?hcFVUY3~x&87W~`%JafI}&fu3<^d)U`osa
zPZ%bRWJ1g^{J;Ll?NZ$3-+vQ@!}M8BN{+X}==IfYM4?AJK#s}Q)}s%F7=g69Ha
zH|XF`9Pg48mf4h+MF2^xlRM1FU!o3Bu4rC!>JEWF|FAhQ0QdJ
zL8hD&CY>v7c3kx1ZfE=R^kP~XP2TvuW_GWXjAub3T!??JePXIKwls
zc@txZAs;3qK7(gxH1CxTt!Ndj;#r!JC#o(3m;CIWLo|}MqEe_2`i!j)f1W*GO;QRy
z@)AwZnv#CNX!@yFw_ruT_i%XK_XTO#0*A-BU>jbi?dQiUb+Q4Ic33vB;sE_Y4yMQR
zjggaiRx}m6^lGWSN=It-FZ=u8|XB|Q<}{9`&U6msJ0%z%XTr!e1~
z5YN@;_Y2lZ)piM>G8x(k=5iz5yqnWQ%W?0D{Ea+jq%63$OCLAd=ak
z&g2Z(cJAoD^ZP>~*<)9(Ris6y;+c*QuxHU1*f#w$9*;73_*wsni8ELWwX+IztSwcnD-s$a#RV(C*KUnP`LDfG`;=ZX(`TOLtjZW_zM$j&f|_H${%)Jm%+`|{A8vvC0&&(x(O-EBf2KPtQ&4yFpleVG#JKDxx!vAy1(
zlx`D1?}UU1%7Lc@y9Tn(99ouiyLCvUIy%R+tJ^xNTV-{cGA}Vw)s;U9*yO@p9<0%G
zHO{AXcUP};rz|o7^p}zl0a@@ILI3(yazvP3FUePue;>fBG_^xklp`<&s`JF^wcv2dF6p1XWeYy_};b2g^5By)8)zz{7NXtvQlNytcN
zPQoK@8~O0E1R2_o=?Y9(uyu@9
z9HNAiJ9rvk{
+
+
+
+
+
+
+
+
+
\ 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 @@
+