From 33174a6c90efca3848d2741dd2e02fff4bec6ed7 Mon Sep 17 00:00:00 2001 From: Cherik Date: Thu, 23 Mar 2023 14:30:52 +0330 Subject: [PATCH 001/167] fix time --- src/helpers/time.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/helpers/time.ts b/src/helpers/time.ts index ab7c9b64cc..3f456f82bf 100644 --- a/src/helpers/time.ts +++ b/src/helpers/time.ts @@ -1,5 +1,4 @@ import { captureException } from '@sentry/nextjs'; -import config from '@/configuration'; let initialized = false; let timeDifference = 0; @@ -24,7 +23,7 @@ const fetchServerTime = async () => { try { fetching = true; - const response = await fetch(`${config.BASE_ROUTE}/api/time`, { + const response = await fetch(`/api/time`, { mode: 'cors', cache: 'no-cache', credentials: 'same-origin', From f6d6fcb454922d3b168834d8d4903dfaca943170 Mon Sep 17 00:00:00 2001 From: Cherik Date: Thu, 23 Mar 2023 14:31:13 +0330 Subject: [PATCH 002/167] add buildUsersPfpInfoQuery --- src/lib/subgraph/pfpQueryBuilder.ts | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/lib/subgraph/pfpQueryBuilder.ts diff --git a/src/lib/subgraph/pfpQueryBuilder.ts b/src/lib/subgraph/pfpQueryBuilder.ts new file mode 100644 index 0000000000..605c01013e --- /dev/null +++ b/src/lib/subgraph/pfpQueryBuilder.ts @@ -0,0 +1,22 @@ +export function buildUsersPfpInfoQuery(users: string[]) { + const query = `query { + ${users.map(user => { + const _user = user.toLowerCase(); + return ` + user_${_user}: giversPFPTokens( + first: 5 + where: {user: "${_user}" } + ) { + id + user { + id + } + tokenId + imageIpfs + } + } + `; + })} + `; + return query; +} From ec2ec71ef2ae1e31a743d3044c18fd2e4ac784f8 Mon Sep 17 00:00:00 2001 From: Cherik Date: Thu, 23 Mar 2023 14:31:26 +0330 Subject: [PATCH 003/167] use buildUsersPfpInfoQuery --- .../views/userProfile/UserProfile.view.tsx | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/components/views/userProfile/UserProfile.view.tsx b/src/components/views/userProfile/UserProfile.view.tsx index cdcff57c3b..3f6969d632 100644 --- a/src/components/views/userProfile/UserProfile.view.tsx +++ b/src/components/views/userProfile/UserProfile.view.tsx @@ -27,6 +27,9 @@ import ExternalLink from '@/components/ExternalLink'; import IncompleteProfileToast from '@/components/views/userProfile/IncompleteProfileToast'; import { useAppDispatch, useAppSelector } from '@/features/hooks'; import { setShowSignWithWallet } from '@/features/modal/modal.slice'; +import { buildUsersPfpInfoQuery } from '@/lib/subgraph/pfpQueryBuilder'; +import { gqlRequest } from '@/helpers/requests'; +import config from '@/configuration'; export enum EOrderBy { TokenAmount = 'TokenAmount', @@ -50,7 +53,7 @@ const UserProfileView: FC = ({ myAccount, user }) => { const { isSignedIn } = useAppSelector(state => state.user); const { formatMessage } = useIntl(); - const { chainId } = useWeb3React(); + const { chainId, account } = useWeb3React(); const [showModal, setShowModal] = useState(false); // follow this state to refresh user content on screen const [showIncompleteWarning, setShowIncompleteWarning] = useState(true); @@ -63,6 +66,15 @@ const UserProfileView: FC = ({ myAccount, user }) => { } }, [user, isSignedIn]); + useEffect(() => { + if (account) { + const query = buildUsersPfpInfoQuery([account]); + gqlRequest(config.MAINNET_CONFIG.subgraphAddress, false, query) + .then(data => console.log('data', data)) + .catch(err => console.log('err', err)); + } + }, [account]); + if (myAccount && !isSignedIn) return ( From 401754862cc1bb395d3f3aace1c03781ac0b9229 Mon Sep 17 00:00:00 2001 From: Cherik Date: Thu, 23 Mar 2023 14:40:48 +0330 Subject: [PATCH 004/167] remove limit --- src/lib/subgraph/pfpQueryBuilder.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/lib/subgraph/pfpQueryBuilder.ts b/src/lib/subgraph/pfpQueryBuilder.ts index 605c01013e..c13b2bf192 100644 --- a/src/lib/subgraph/pfpQueryBuilder.ts +++ b/src/lib/subgraph/pfpQueryBuilder.ts @@ -4,7 +4,6 @@ export function buildUsersPfpInfoQuery(users: string[]) { const _user = user.toLowerCase(); return ` user_${_user}: giversPFPTokens( - first: 5 where: {user: "${_user}" } ) { id From d2f10756edcc07ac24848e917d738cabb1a744f1 Mon Sep 17 00:00:00 2001 From: Cherik Date: Thu, 23 Mar 2023 15:12:26 +0330 Subject: [PATCH 005/167] add IGiversPFPToken and IUserPFPTokens --- src/apollo/types/types.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/apollo/types/types.ts b/src/apollo/types/types.ts index 6fda2750db..6c8ce29937 100644 --- a/src/apollo/types/types.ts +++ b/src/apollo/types/types.ts @@ -353,3 +353,15 @@ export interface IRecentDonation { user: { walletAddress: string }; valueUsd: number | null; } + +export interface IGiversPFPToken { + user: { + id: string; + }; + tokenId: string; + imageIpfs: string; +} + +export interface IUserPFPTokens { + [key: string]: IGiversPFPToken; +} From 61611ab5c54bb4516b113aca035d052565aa60f9 Mon Sep 17 00:00:00 2001 From: Cherik Date: Thu, 23 Mar 2023 15:12:53 +0330 Subject: [PATCH 006/167] use try catch --- .../views/userProfile/UserProfile.view.tsx | 33 +++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/src/components/views/userProfile/UserProfile.view.tsx b/src/components/views/userProfile/UserProfile.view.tsx index 3f6969d632..ebac9af9c3 100644 --- a/src/components/views/userProfile/UserProfile.view.tsx +++ b/src/components/views/userProfile/UserProfile.view.tsx @@ -53,7 +53,7 @@ const UserProfileView: FC = ({ myAccount, user }) => { const { isSignedIn } = useAppSelector(state => state.user); const { formatMessage } = useIntl(); - const { chainId, account } = useWeb3React(); + const { chainId } = useWeb3React(); const [showModal, setShowModal] = useState(false); // follow this state to refresh user content on screen const [showIncompleteWarning, setShowIncompleteWarning] = useState(true); @@ -61,19 +61,32 @@ const UserProfileView: FC = ({ myAccount, user }) => { !isUserRegistered(user) && showIncompleteWarning && myAccount; useEffect(() => { + const fetchPFPInfo = async (walletAddress: string) => { + try { + const query = buildUsersPfpInfoQuery([walletAddress]); + const { data } = await gqlRequest( + config.MAINNET_CONFIG.subgraphAddress, + false, + query, + ); + if (data[`user_${walletAddress}`]) { + console.log( + 'data[`user_${walletAddress}`]', + data[`user_${walletAddress}`], + user, + ); + } + } catch (error) { + console.error('error', error); + } + }; if (myAccount && !isSignedIn) { dispatch(setShowSignWithWallet(true)); } - }, [user, isSignedIn]); - - useEffect(() => { - if (account) { - const query = buildUsersPfpInfoQuery([account]); - gqlRequest(config.MAINNET_CONFIG.subgraphAddress, false, query) - .then(data => console.log('data', data)) - .catch(err => console.log('err', err)); + if (user?.walletAddress) { + fetchPFPInfo(user.walletAddress); } - }, [account]); + }, [user, isSignedIn, myAccount, dispatch]); if (myAccount && !isSignedIn) return ( From b7997ba1aa1c9da8256ca2d12b4eb311afbaf8f0 Mon Sep 17 00:00:00 2001 From: alireza-sharifpour Date: Thu, 23 Mar 2023 16:33:40 +0330 Subject: [PATCH 007/167] created upload profile pic modal --- .../modals/UploadProfilePicModal.tsx | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 src/components/modals/UploadProfilePicModal.tsx diff --git a/src/components/modals/UploadProfilePicModal.tsx b/src/components/modals/UploadProfilePicModal.tsx new file mode 100644 index 0000000000..9ee5c1335e --- /dev/null +++ b/src/components/modals/UploadProfilePicModal.tsx @@ -0,0 +1,78 @@ +import { Button, mediaQueries } from '@giveth/ui-design-system'; +import React from 'react'; +import styled from 'styled-components'; +import { useIntl } from 'react-intl'; +import useUpload from '@/hooks/useUpload'; +import ImageUploader from '../ImageUploader'; +import { Flex } from '../styled-components/Flex'; +import { Modal } from './Modal'; +import { IUser } from '@/apollo/types/types'; +import { IModal } from '@/types/common'; +import { useModalAnimation } from '@/hooks/useModalAnimation'; + +interface IUploadProfilePicModal extends IModal { + user: IUser; +} + +const UploadProfilePicModal = ({ + setShowModal, + user, +}: IUploadProfilePicModal) => { + const useUploadProps = useUpload(); + const { formatMessage } = useIntl(); + const { isAnimating, closeModal } = useModalAnimation(setShowModal); + + const { url, onDelete } = useUploadProps; + + console.log('user', user); + + return ( + + + + +