From d91c26151156c6dcd6ffdb08c6f369f5fcc26c79 Mon Sep 17 00:00:00 2001 From: Tom Quirk <12551741+tomquirk@users.noreply.github.com> Date: Thu, 1 Feb 2024 10:37:45 +1000 Subject: [PATCH] refactor: project metadata context (#4241) --- src/components/NftRewards/NftTierCard.tsx | 4 ++-- .../AddProjectUpdateModal/AddProjectUpdateModal.tsx | 4 ++-- .../components/CoverPhoto/CoverPhoto.tsx | 4 ++-- .../CyclesPayoutsPanel/components/HistorySubPanel.tsx | 6 +++--- .../useConfigurationPanel/useCycleSection.test.ts | 10 ++++------ .../hooks/useConfigurationPanel/useCycleSection.ts | 5 ++--- .../useConfigurationPanel/useExtensionSection.ts.ts | 5 ++--- .../useHistoricalConfigurationPanel.test.ts | 11 ++++------- .../useHistoricalConfigurationPanel.ts | 4 ++-- .../useOtherRulesSection.test.ts | 10 ++++------ .../useConfigurationPanel/useOtherRulesSection.ts | 5 ++--- .../useConfigurationPanel/useTokenSection.test.ts | 11 ++++------- .../hooks/useConfigurationPanel/useTokenSection.ts | 5 ++--- .../hooks/useCurrentUpcomingDistributionLimit.ts | 4 ++-- .../hooks/useCurrentUpcomingPayoutSplits.ts | 4 ++-- .../hooks/useCurrentUpcomingSubPanel.test.ts | 10 ++++------ .../hooks/useCurrentUpcomingSubPanel.ts | 4 ++-- .../hooks/usePayoutsSubPanel.test.ts | 8 +++----- .../RedeemNftsSection/RedeemNftTile.tsx | 4 ++-- .../ProjectHeader/hooks/useProjectHeaderLogo.ts | 4 ++-- .../components/ProjectHeaderCountdown.tsx | 4 ++-- .../hooks/useFactoredProjectId.ts | 4 ++-- .../SuccessPayView/components/SuccessPayCard.tsx | 4 ++-- .../components/SendReservedTokensButton.tsx | 4 ++-- .../hooks/useReservedTokensSubPanel.test.ts | 10 +++++----- .../TokensPanel/hooks/useReservedTokensSubPanel.ts | 4 ++-- .../UpdatesPanel/hooks/useFactoredProjectId.ts | 4 ++-- .../ProjectDashboard/hooks/useAboutPanel.ts | 4 ++-- .../ProjectDashboard/hooks/useCoverPhoto.ts | 4 ++-- .../hooks/usePayProjectModal/usePayProjectModal.ts | 4 ++-- .../ProjectDashboard/hooks/useProjectHeader.ts | 4 ++-- .../ProjectDashboard/hooks/useProjectMetadata.ts | 4 ---- .../ProjectDashboard/hooks/useSuccessPayView.ts | 4 ++-- .../ProjectDashboard/hooks/useUserTokenBalanceWad.ts | 4 ++-- src/contexts/shared/ProjectMetadataContext.ts | 5 ++++- src/contexts/v2v3/V2V3ProjectOFACProvider.tsx | 4 ++-- src/hooks/JB721Delegate/useNftCollectionMetadata.ts | 4 ++-- src/hooks/useProjectMetadata.ts | 4 ++-- src/hooks/v2v3/useIsJuiceCrowd.ts | 4 ++-- src/lib/api/ipfs.ts | 2 +- src/utils/ipfs.ts | 2 +- src/utils/server/ipfs/findProjectMetadata.ts | 4 ++-- src/utils/sgDbProjects.ts | 11 +++++++---- 43 files changed, 104 insertions(+), 120 deletions(-) delete mode 100644 src/components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata.ts diff --git a/src/components/NftRewards/NftTierCard.tsx b/src/components/NftRewards/NftTierCard.tsx index 0f159309e9..885bd1dfb9 100644 --- a/src/components/NftRewards/NftTierCard.tsx +++ b/src/components/NftRewards/NftTierCard.tsx @@ -9,7 +9,7 @@ import { stopPropagation } from 'react-stop-propagation' import { twMerge } from 'tailwind-merge' import { classNames } from 'utils/classNames' import { parseWad } from 'utils/format/formatNumber' -import { convertToNewIpfsGateway } from 'utils/ipfs' +import { pinataToGatewayUrl } from 'utils/ipfs' import { QuantitySelector } from './QuantitySelector' // The clickable cards on the project page @@ -36,7 +36,7 @@ export function NftTierCard({ const [previousQuantity, setPreviousQuantity] = useState(1) const fileUrl = rewardTier?.fileUrl - ? convertToNewIpfsGateway(rewardTier.fileUrl) + ? pinataToGatewayUrl(rewardTier.fileUrl) : undefined const hasQuantitySelected = quantitySelected > 0 diff --git a/src/components/v2v3/V2V3Project/ProjectDashboard/components/AddProjectUpdateModal/AddProjectUpdateModal.tsx b/src/components/v2v3/V2V3Project/ProjectDashboard/components/AddProjectUpdateModal/AddProjectUpdateModal.tsx index 2d2c89b63a..4efa225318 100644 --- a/src/components/v2v3/V2V3Project/ProjectDashboard/components/AddProjectUpdateModal/AddProjectUpdateModal.tsx +++ b/src/components/v2v3/V2V3Project/ProjectDashboard/components/AddProjectUpdateModal/AddProjectUpdateModal.tsx @@ -6,8 +6,8 @@ import ExternalLink from 'components/ExternalLink' import { JuiceVideoThumbnailOrImage } from 'components/JuiceVideo/JuiceVideoThumbnailOrImage' import Loading from 'components/Loading' import { JuiceModal } from 'components/modals/JuiceModal' -import { useProjectMetadata } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata' import { PV_V2 } from 'constants/pv' +import { useProjectMetadataContext } from 'contexts/shared/ProjectMetadataContext' import { Formik } from 'formik' import { useIpfsFilePicker } from 'hooks/useIpfsFilePicker/useIpfsFilePicker' import { useContext } from 'react' @@ -31,7 +31,7 @@ export const AddProjectUpdateModal = ({ setOpen: React.Dispatch> }) => { const { loadProjectUpdates } = useContext(ProjectUpdatesContext) - const { projectId } = useProjectMetadata() + const { projectId } = useProjectMetadataContext() const project = projectId ? getSubgraphIdForProject(PV_V2, projectId) : undefined diff --git a/src/components/v2v3/V2V3Project/ProjectDashboard/components/CoverPhoto/CoverPhoto.tsx b/src/components/v2v3/V2V3Project/ProjectDashboard/components/CoverPhoto/CoverPhoto.tsx index 810c7d9c77..ed65f67aed 100644 --- a/src/components/v2v3/V2V3Project/ProjectDashboard/components/CoverPhoto/CoverPhoto.tsx +++ b/src/components/v2v3/V2V3Project/ProjectDashboard/components/CoverPhoto/CoverPhoto.tsx @@ -1,14 +1,14 @@ import { useCoverPhoto } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useCoverPhoto' +import { useProjectMetadataContext } from 'contexts/shared/ProjectMetadataContext' import Image from 'next/image' import { useMemo } from 'react' import { twMerge } from 'tailwind-merge' -import { useProjectMetadata } from '../../hooks/useProjectMetadata' const RS_PROJECT_ID = 618 export const CoverPhoto = () => { const { coverImageUrl, coverImageAltText } = useCoverPhoto() - const { projectId } = useProjectMetadata() + const { projectId } = useProjectMetadataContext() const hasCoverImage = !!coverImageUrl const applyDarkerCoverPhoto = useMemo(() => { diff --git a/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/components/HistorySubPanel.tsx b/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/components/HistorySubPanel.tsx index 611c964ee9..a1cc1080d0 100644 --- a/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/components/HistorySubPanel.tsx +++ b/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/components/HistorySubPanel.tsx @@ -3,7 +3,7 @@ import { ChevronDownIcon } from '@heroicons/react/24/outline' import { Trans, t } from '@lingui/macro' import { Button } from 'antd' import { useProjectContext } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectContext' -import { useProjectMetadata } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata' +import { useProjectMetadataContext } from 'contexts/shared/ProjectMetadataContext' import { BigNumber } from 'ethers' import useProjectDistributionLimit from 'hooks/v2v3/contractReader/useProjectDistributionLimit' import { V2V3CurrencyOption } from 'models/v2v3/currencyOption' @@ -21,7 +21,7 @@ import { usePastFundingCycles } from '../hooks/usePastFundingCycles' import { HistoricalConfigurationPanel } from './HistoricalConfigurationPanel' export const HistorySubPanel = () => { - const { projectId } = useProjectMetadata() + const { projectId } = useProjectMetadataContext() const { fundingCycle } = useProjectContext() const [isFetchingMore, setIsFetchingMore] = useState() @@ -170,7 +170,7 @@ function FormattedWithdrawnAmount({ configuration: BigNumber withdrawnAmount: BigNumber }) { - const { projectId } = useProjectMetadata() + const { projectId } = useProjectMetadataContext() const { primaryETHTerminal } = useProjectContext() const { data: distributionLimit } = useProjectDistributionLimit({ diff --git a/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useCycleSection.test.ts b/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useCycleSection.test.ts index b591adb477..1f3bc4a19c 100644 --- a/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useCycleSection.test.ts +++ b/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useCycleSection.test.ts @@ -4,7 +4,7 @@ import { renderHook } from '@testing-library/react' import { useProjectContext } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectContext' -import { useProjectMetadata } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata' +import { useProjectMetadataContext } from 'contexts/shared/ProjectMetadataContext' import useProjectDistributionLimit from 'hooks/v2v3/contractReader/useProjectDistributionLimit' import { useProjectUpcomingFundingCycle } from 'hooks/v2v3/contractReader/useProjectUpcomingFundingCycle' import { useCycleSection } from './useCycleSection' @@ -13,9 +13,7 @@ import { useFormatConfigurationCyclesSection } from './useFormatConfigurationCyc jest.mock( 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectContext', ) -jest.mock( - 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata', -) +jest.mock('contexts/shared/ProjectMetadataContext') jest.mock('hooks/v2v3/contractReader/useProjectDistributionLimit') jest.mock('hooks/v2v3/contractReader/useProjectUpcomingFundingCycle') jest.mock('./useFormatConfigurationCyclesSection') @@ -26,7 +24,7 @@ describe('useCycleSection', () => { }) it('calls the dependent hooks correctly', () => { - ;(useProjectMetadata as jest.Mock).mockReturnValue({ + ;(useProjectMetadataContext as jest.Mock).mockReturnValue({ projectId: 'projectIdMock', }) ;(useProjectContext as jest.Mock).mockReturnValue({ @@ -45,7 +43,7 @@ describe('useCycleSection', () => { renderHook(() => useCycleSection('current')) - expect(useProjectMetadata).toHaveBeenCalled() + expect(useProjectMetadataContext).toHaveBeenCalled() expect(useProjectContext).toHaveBeenCalled() expect(useProjectUpcomingFundingCycle).toHaveBeenCalledWith({ projectId: 'projectIdMock', diff --git a/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useCycleSection.ts b/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useCycleSection.ts index 1727656faf..396b967909 100644 --- a/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useCycleSection.ts +++ b/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useCycleSection.ts @@ -1,14 +1,13 @@ import { useProjectContext } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectContext' -import { useProjectMetadata } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata' +import { useProjectMetadataContext } from 'contexts/shared/ProjectMetadataContext' import useProjectDistributionLimit from 'hooks/v2v3/contractReader/useProjectDistributionLimit' import { useProjectUpcomingFundingCycle } from 'hooks/v2v3/contractReader/useProjectUpcomingFundingCycle' import { ConfigurationPanelTableData } from '../../components/ConfigurationPanel' import { useFormatConfigurationCyclesSection } from './useFormatConfigurationCyclesSection' - export const useCycleSection = ( type: 'current' | 'upcoming', ): ConfigurationPanelTableData => { - const { projectId } = useProjectMetadata() + const { projectId } = useProjectMetadataContext() const { fundingCycle, diff --git a/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useExtensionSection.ts.ts b/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useExtensionSection.ts.ts index c2c8770e66..0a9ae63f9b 100644 --- a/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useExtensionSection.ts.ts +++ b/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useExtensionSection.ts.ts @@ -1,5 +1,5 @@ import { useProjectContext } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectContext' -import { useProjectMetadata } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata' +import { useProjectMetadataContext } from 'contexts/shared/ProjectMetadataContext' import { useProjectUpcomingFundingCycle } from 'hooks/v2v3/contractReader/useProjectUpcomingFundingCycle' import { ConfigurationPanelTableData } from '../../components/ConfigurationPanel' import { useFormatConfigurationExtensionSection } from './useFormatConfigurationExtensionSection' @@ -7,8 +7,7 @@ import { useFormatConfigurationExtensionSection } from './useFormatConfiguration export const useExtensionSection = ( type: 'current' | 'upcoming', ): ConfigurationPanelTableData | null => { - const { projectId } = useProjectMetadata() - + const { projectId } = useProjectMetadataContext() const { fundingCycleMetadata } = useProjectContext() const { data: upcomingFundingCycleData } = useProjectUpcomingFundingCycle({ projectId, diff --git a/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useHistoricalConfigurationPanel.test.ts b/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useHistoricalConfigurationPanel.test.ts index 102d8032b9..ad2eec7e50 100644 --- a/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useHistoricalConfigurationPanel.test.ts +++ b/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useHistoricalConfigurationPanel.test.ts @@ -15,14 +15,11 @@ jest.mock( }), }), ) -jest.mock( - 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata', - () => ({ - useProjectMetadata: () => ({ - projectId: 'mockProjectId', - }), +jest.mock('contexts/shared/ProjectMetadataContext', () => ({ + useProjectMetadataContext: () => ({ + projectId: 'mockProjectId', }), -) +})) jest.mock('hooks/v2v3/contractReader/useProjectDistributionLimit', () => ({ __esModule: true, diff --git a/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useHistoricalConfigurationPanel.ts b/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useHistoricalConfigurationPanel.ts index 26cf17d9ba..4f5568d1fc 100644 --- a/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useHistoricalConfigurationPanel.ts +++ b/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useHistoricalConfigurationPanel.ts @@ -1,5 +1,5 @@ import { useProjectContext } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectContext' -import { useProjectMetadata } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata' +import { useProjectMetadataContext } from 'contexts/shared/ProjectMetadataContext' import useProjectDistributionLimit from 'hooks/v2v3/contractReader/useProjectDistributionLimit' import { V2V3FundingCycle, @@ -17,7 +17,7 @@ export const useHistoricalConfigurationPanel = ({ fundingCycle: V2V3FundingCycle metadata: V2V3FundingCycleMetadata }) => { - const { projectId } = useProjectMetadata() + const { projectId } = useProjectMetadataContext() const { primaryETHTerminal: terminal, tokenSymbol } = useProjectContext() const { data: distributionLimitData } = useProjectDistributionLimit({ projectId, diff --git a/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useOtherRulesSection.test.ts b/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useOtherRulesSection.test.ts index 88f6f8e43a..7ae860d047 100644 --- a/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useOtherRulesSection.test.ts +++ b/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useOtherRulesSection.test.ts @@ -4,16 +4,14 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import { renderHook } from '@testing-library/react' import { useProjectContext } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectContext' -import { useProjectMetadata } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata' +import { useProjectMetadataContext } from 'contexts/shared/ProjectMetadataContext' import { useProjectUpcomingFundingCycle } from 'hooks/v2v3/contractReader/useProjectUpcomingFundingCycle' import { useOtherRulesSection } from './useOtherRulesSection' jest.mock( 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectContext', ) -jest.mock( - 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata', -) +jest.mock('contexts/shared/ProjectMetadataContext') jest.mock('hooks/v2v3/contractReader/useProjectUpcomingFundingCycle', () => ({ useProjectUpcomingFundingCycle: jest.fn(), @@ -22,8 +20,8 @@ jest.mock('hooks/v2v3/contractReader/useProjectUpcomingFundingCycle', () => ({ const mockUseProjectContext = useProjectContext as jest.MockedFunction< typeof useProjectContext > -const mockUseProjectMetadata = useProjectMetadata as jest.MockedFunction< - typeof useProjectMetadata +const mockUseProjectMetadata = useProjectMetadataContext as jest.MockedFunction< + typeof useProjectMetadataContext > const mockUseProjectUpcomingFundingCycle = useProjectUpcomingFundingCycle as jest.MockedFunction< diff --git a/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useOtherRulesSection.ts b/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useOtherRulesSection.ts index 91a77ab62d..fcb4eb9e4d 100644 --- a/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useOtherRulesSection.ts +++ b/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useOtherRulesSection.ts @@ -1,5 +1,5 @@ import { useProjectContext } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectContext' -import { useProjectMetadata } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata' +import { useProjectMetadataContext } from 'contexts/shared/ProjectMetadataContext' import { useProjectUpcomingFundingCycle } from 'hooks/v2v3/contractReader/useProjectUpcomingFundingCycle' import { ConfigurationPanelTableData } from '../../components/ConfigurationPanel' import { useFormatConfigurationOtherRulesSection } from './useFormatConfigurationOtherRulesSection' @@ -7,8 +7,7 @@ import { useFormatConfigurationOtherRulesSection } from './useFormatConfiguratio export const useOtherRulesSection = ( type: 'current' | 'upcoming', ): ConfigurationPanelTableData => { - const { projectId } = useProjectMetadata() - + const { projectId } = useProjectMetadataContext() const { fundingCycleMetadata } = useProjectContext() const { data: upcomingFundingCycleData } = useProjectUpcomingFundingCycle({ projectId, diff --git a/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useTokenSection.test.ts b/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useTokenSection.test.ts index 2f35640eb6..2892aa6417 100644 --- a/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useTokenSection.test.ts +++ b/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useTokenSection.test.ts @@ -15,14 +15,11 @@ jest.mock( }), ) -jest.mock( - 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata', - () => ({ - useProjectMetadata: () => ({ - projectId: 'mockProjectId', - }), +jest.mock('contexts/shared/ProjectMetadataContext', () => ({ + useProjectMetadataContext: () => ({ + projectId: 'mockProjectId', }), -) +})) jest.mock('hooks/v2v3/contractReader/useProjectUpcomingFundingCycle', () => ({ __esModule: true, diff --git a/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useTokenSection.ts b/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useTokenSection.ts index bcaa9dee4c..30085663d4 100644 --- a/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useTokenSection.ts +++ b/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useConfigurationPanel/useTokenSection.ts @@ -1,5 +1,5 @@ import { useProjectContext } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectContext' -import { useProjectMetadata } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata' +import { useProjectMetadataContext } from 'contexts/shared/ProjectMetadataContext' import { useProjectUpcomingFundingCycle } from 'hooks/v2v3/contractReader/useProjectUpcomingFundingCycle' import { ConfigurationPanelTableData } from '../../components/ConfigurationPanel' import { useFormatConfigurationTokenSection } from './useFormatConfigurationTokenSection' @@ -7,8 +7,7 @@ import { useFormatConfigurationTokenSection } from './useFormatConfigurationToke export const useTokenSection = ( type: 'current' | 'upcoming', ): ConfigurationPanelTableData => { - const { projectId } = useProjectMetadata() - + const { projectId } = useProjectMetadataContext() const { fundingCycle, fundingCycleMetadata, diff --git a/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useCurrentUpcomingDistributionLimit.ts b/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useCurrentUpcomingDistributionLimit.ts index fc6d66df6e..81eb107743 100644 --- a/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useCurrentUpcomingDistributionLimit.ts +++ b/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useCurrentUpcomingDistributionLimit.ts @@ -1,12 +1,12 @@ import { useProjectContext } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectContext' -import { useProjectMetadata } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata' +import { useProjectMetadataContext } from 'contexts/shared/ProjectMetadataContext' import useProjectDistributionLimit from 'hooks/v2v3/contractReader/useProjectDistributionLimit' import { useProjectUpcomingFundingCycle } from 'hooks/v2v3/contractReader/useProjectUpcomingFundingCycle' export const useCurrentUpcomingDistributionLimit = ( type: 'current' | 'upcoming', ) => { - const { projectId } = useProjectMetadata() + const { projectId } = useProjectMetadataContext() const { primaryETHTerminal, distributionLimit: currentDistributionLimit, diff --git a/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useCurrentUpcomingPayoutSplits.ts b/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useCurrentUpcomingPayoutSplits.ts index 61a522570c..7230552930 100644 --- a/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useCurrentUpcomingPayoutSplits.ts +++ b/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useCurrentUpcomingPayoutSplits.ts @@ -1,13 +1,13 @@ import { useProjectContext } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectContext' -import { useProjectMetadata } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata' import { ETH_PAYOUT_SPLIT_GROUP } from 'constants/splits' +import { useProjectMetadataContext } from 'contexts/shared/ProjectMetadataContext' import useProjectSplits from 'hooks/v2v3/contractReader/useProjectSplits' import { useProjectUpcomingFundingCycle } from 'hooks/v2v3/contractReader/useProjectUpcomingFundingCycle' export const useCurrentUpcomingPayoutSplits = ( type: 'current' | 'upcoming', ) => { - const { projectId } = useProjectMetadata() + const { projectId } = useProjectMetadataContext() const { payoutSplits: currentPayoutSplits } = useProjectContext() const { diff --git a/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useCurrentUpcomingSubPanel.test.ts b/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useCurrentUpcomingSubPanel.test.ts index 5f242fbfe1..559b2abc08 100644 --- a/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useCurrentUpcomingSubPanel.test.ts +++ b/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useCurrentUpcomingSubPanel.test.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import { renderHook } from '@testing-library/react-hooks' import { useProjectContext } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectContext' -import { useProjectMetadata } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata' +import { useProjectMetadataContext } from 'contexts/shared/ProjectMetadataContext' import { BigNumber } from 'ethers' import { useProjectUpcomingFundingCycle } from 'hooks/v2v3/contractReader/useProjectUpcomingFundingCycle' import { useCurrentUpcomingSubPanel } from './useCurrentUpcomingSubPanel' @@ -9,16 +9,14 @@ import { useCurrentUpcomingSubPanel } from './useCurrentUpcomingSubPanel' jest.mock( 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectContext', ) -jest.mock( - 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata', -) +jest.mock('contexts/shared/ProjectMetadataContext') jest.mock('hooks/v2v3/contractReader/useProjectUpcomingFundingCycle') const mockUseProjectContext = useProjectContext as jest.MockedFunction< typeof useProjectContext > -const mockUseProjectMetadata = useProjectMetadata as jest.MockedFunction< - typeof useProjectMetadata +const mockUseProjectMetadata = useProjectMetadataContext as jest.MockedFunction< + typeof useProjectMetadataContext > const mockUseProjectUpcomingFundingCycle = useProjectUpcomingFundingCycle as jest.MockedFunction< diff --git a/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useCurrentUpcomingSubPanel.ts b/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useCurrentUpcomingSubPanel.ts index dca08d835e..18cd083d68 100644 --- a/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useCurrentUpcomingSubPanel.ts +++ b/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/useCurrentUpcomingSubPanel.ts @@ -1,14 +1,14 @@ import { t } from '@lingui/macro' import { useFundingCycleCountdown } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useFundingCycleCountdown' import { useProjectContext } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectContext' -import { useProjectMetadata } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata' import { timeSecondsToDateString } from 'components/v2v3/V2V3Project/ProjectDashboard/utils/timeSecondsToDateString' +import { useProjectMetadataContext } from 'contexts/shared/ProjectMetadataContext' import { useProjectUpcomingFundingCycle } from 'hooks/v2v3/contractReader/useProjectUpcomingFundingCycle' import { BallotState } from 'models/v2v3/fundingCycle' import { useMemo } from 'react' export const useCurrentUpcomingSubPanel = (type: 'current' | 'upcoming') => { - const { projectId } = useProjectMetadata() + const { projectId } = useProjectMetadataContext() const { fundingCycle, loading: { fundingCycleLoading }, diff --git a/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/usePayoutsSubPanel.test.ts b/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/usePayoutsSubPanel.test.ts index 84d953360f..2b2e04fc42 100644 --- a/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/usePayoutsSubPanel.test.ts +++ b/src/components/v2v3/V2V3Project/ProjectDashboard/components/CyclesPayoutsPanel/hooks/usePayoutsSubPanel.test.ts @@ -4,7 +4,7 @@ import { renderHook } from '@testing-library/react' import { useProjectContext } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectContext' -import { useProjectMetadata } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata' +import { useProjectMetadataContext } from 'contexts/shared/ProjectMetadataContext' import { BigNumber } from 'ethers' import { parseWad } from 'utils/format/formatNumber' import { V2V3_CURRENCY_ETH } from 'utils/v2v3/currency' @@ -14,9 +14,7 @@ import { usePayoutsSubPanel } from './usePayoutsSubPanel' jest.mock( 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectContext', ) -jest.mock( - 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata', -) +jest.mock('contexts/shared/ProjectMetadataContext') describe('usePayoutsSubPanel', () => { const DefaultProjectContext = { @@ -41,7 +39,7 @@ describe('usePayoutsSubPanel', () => { } beforeEach(() => { ;(useProjectContext as jest.Mock).mockReturnValue(DefaultProjectContext) - ;(useProjectMetadata as jest.Mock).mockReturnValue( + ;(useProjectMetadataContext as jest.Mock).mockReturnValue( DefaultUseProjectMetadata, ) }) diff --git a/src/components/v2v3/V2V3Project/ProjectDashboard/components/NftRewardsPanel/RedeemNftsSection/RedeemNftTile.tsx b/src/components/v2v3/V2V3Project/ProjectDashboard/components/NftRewardsPanel/RedeemNftsSection/RedeemNftTile.tsx index e7776cfa52..ba3881d138 100644 --- a/src/components/v2v3/V2V3Project/ProjectDashboard/components/NftRewardsPanel/RedeemNftsSection/RedeemNftTile.tsx +++ b/src/components/v2v3/V2V3Project/ProjectDashboard/components/NftRewardsPanel/RedeemNftsSection/RedeemNftTile.tsx @@ -2,7 +2,7 @@ import { Tooltip } from 'antd' import { JuiceVideoThumbnailOrImage } from 'components/JuiceVideo/JuiceVideoThumbnailOrImage' import { NftRewardTier } from 'models/nftRewards' import { useMemo } from 'react' -import { convertToNewIpfsGateway } from 'utils/ipfs' +import { pinataToGatewayUrl } from 'utils/ipfs' export function RedeemNftTile({ rewardTier, @@ -14,7 +14,7 @@ export function RedeemNftTile({ const _name = rewardTier?.name ?? `NFT ${tokenId}` const fileUrl = useMemo(() => { if (!rewardTier?.fileUrl) return - return convertToNewIpfsGateway(rewardTier.fileUrl) + return pinataToGatewayUrl(rewardTier.fileUrl) }, [rewardTier?.fileUrl]) return ( diff --git a/src/components/v2v3/V2V3Project/ProjectDashboard/components/ProjectHeader/hooks/useProjectHeaderLogo.ts b/src/components/v2v3/V2V3Project/ProjectDashboard/components/ProjectHeader/hooks/useProjectHeaderLogo.ts index 709dc700c4..6542733cea 100644 --- a/src/components/v2v3/V2V3Project/ProjectDashboard/components/ProjectHeader/hooks/useProjectHeaderLogo.ts +++ b/src/components/v2v3/V2V3Project/ProjectDashboard/components/ProjectHeader/hooks/useProjectHeaderLogo.ts @@ -1,7 +1,7 @@ -import { useProjectMetadata } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata' +import { useProjectMetadataContext } from 'contexts/shared/ProjectMetadataContext' export const useProjectHeaderLogo = () => { - const { projectMetadata, projectId } = useProjectMetadata() + const { projectMetadata, projectId } = useProjectMetadataContext() return { projectId, projectLogoUri: projectMetadata?.logoUri, diff --git a/src/components/v2v3/V2V3Project/ProjectDashboard/components/ProjectHeaderCountdown.tsx b/src/components/v2v3/V2V3Project/ProjectDashboard/components/ProjectHeaderCountdown.tsx index b5c09b194c..6daa556495 100644 --- a/src/components/v2v3/V2V3Project/ProjectDashboard/components/ProjectHeaderCountdown.tsx +++ b/src/components/v2v3/V2V3Project/ProjectDashboard/components/ProjectHeaderCountdown.tsx @@ -1,7 +1,7 @@ +import { useProjectMetadataContext } from 'contexts/shared/ProjectMetadataContext' import { ReactNode, useMemo } from 'react' import { twMerge } from 'tailwind-merge' import { useFundingCycleCountdown } from '../hooks/useFundingCycleCountdown' -import { useProjectMetadata } from '../hooks/useProjectMetadata' const RS_PROJECT_ID = 618 @@ -12,7 +12,7 @@ export type ProjectHeaderCountdownProps = { export const ProjectHeaderCountdown: React.FC = ({ className, }) => { - const { projectId } = useProjectMetadata() + const { projectId } = useProjectMetadataContext() const { secondsRemaining } = useFundingCycleCountdown() const { days, hours, minutes, seconds } = useMemo(() => { diff --git a/src/components/v2v3/V2V3Project/ProjectDashboard/components/ProjectUpdatesProvider/hooks/useFactoredProjectId.ts b/src/components/v2v3/V2V3Project/ProjectDashboard/components/ProjectUpdatesProvider/hooks/useFactoredProjectId.ts index e64d6b263f..8fc9f0e53e 100644 --- a/src/components/v2v3/V2V3Project/ProjectDashboard/components/ProjectUpdatesProvider/hooks/useFactoredProjectId.ts +++ b/src/components/v2v3/V2V3Project/ProjectDashboard/components/ProjectUpdatesProvider/hooks/useFactoredProjectId.ts @@ -1,9 +1,9 @@ -import { useProjectMetadata } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata' import { PV_V2 } from 'constants/pv' +import { useProjectMetadataContext } from 'contexts/shared/ProjectMetadataContext' import { getSubgraphIdForProject } from 'utils/graph' export const useFactoredProjectId = () => { - const { projectId } = useProjectMetadata() + const { projectId } = useProjectMetadataContext() const project = projectId ? getSubgraphIdForProject(PV_V2, projectId) : undefined diff --git a/src/components/v2v3/V2V3Project/ProjectDashboard/components/SuccessPayView/components/SuccessPayCard.tsx b/src/components/v2v3/V2V3Project/ProjectDashboard/components/SuccessPayView/components/SuccessPayCard.tsx index 0600725637..2572c28da6 100644 --- a/src/components/v2v3/V2V3Project/ProjectDashboard/components/SuccessPayView/components/SuccessPayCard.tsx +++ b/src/components/v2v3/V2V3Project/ProjectDashboard/components/SuccessPayView/components/SuccessPayCard.tsx @@ -1,8 +1,8 @@ import { Trans } from '@lingui/macro' import EthereumAddress from 'components/EthereumAddress' import EtherscanLink from 'components/EtherscanLink' -import { useProjectMetadata } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata' import { useProjectPageQueries } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectPageQueries' +import { useProjectMetadataContext } from 'contexts/shared/ProjectMetadataContext' import useMobile from 'hooks/useMobile' import moment from 'moment' import { useMemo } from 'react' @@ -12,7 +12,7 @@ import { ProjectHeaderLogo } from '../../ProjectHeader/components/ProjectHeaderL export const SuccessPayCard = ({ className }: { className?: string }) => { const isMobile = useMobile() - const { name } = useProjectMetadata().projectMetadata ?? {} + const { name } = useProjectMetadataContext().projectMetadata ?? {} const { projectPayReceipt } = useProjectPageQueries() const transactionDateString = useMemo(() => { diff --git a/src/components/v2v3/V2V3Project/ProjectDashboard/components/TokensPanel/components/SendReservedTokensButton.tsx b/src/components/v2v3/V2V3Project/ProjectDashboard/components/TokensPanel/components/SendReservedTokensButton.tsx index a758369884..6a6813b660 100644 --- a/src/components/v2v3/V2V3Project/ProjectDashboard/components/TokensPanel/components/SendReservedTokensButton.tsx +++ b/src/components/v2v3/V2V3Project/ProjectDashboard/components/TokensPanel/components/SendReservedTokensButton.tsx @@ -2,8 +2,8 @@ import { ArrowUpCircleIcon } from '@heroicons/react/24/outline' import { Trans } from '@lingui/macro' import { Button, Tooltip } from 'antd' import { useProjectContext } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectContext' -import { useProjectMetadata } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata' import DistributeReservedTokensModal from 'components/v2v3/V2V3Project/V2V3FundingCycleSection/modals/DistributeReservedTokensModal' +import { useProjectMetadataContext } from 'contexts/shared/ProjectMetadataContext' import { BigNumber } from 'ethers' import { useProjectReservedTokens } from 'hooks/v2v3/contractReader/ProjectReservedTokens' import { useCallback, useMemo, useState } from 'react' @@ -17,7 +17,7 @@ export const SendReservedTokensButton = ({ className?: string containerClassName?: string }) => { - const { projectId } = useProjectMetadata() + const { projectId } = useProjectMetadataContext() const { reservedRate } = useProjectContext().fundingCycleMetadata ?? {} const { data: reservedTokens, loading: loadingReservedTokens } = useProjectReservedTokens({ diff --git a/src/components/v2v3/V2V3Project/ProjectDashboard/components/TokensPanel/hooks/useReservedTokensSubPanel.test.ts b/src/components/v2v3/V2V3Project/ProjectDashboard/components/TokensPanel/hooks/useReservedTokensSubPanel.test.ts index 687f854b45..f23524e0dd 100644 --- a/src/components/v2v3/V2V3Project/ProjectDashboard/components/TokensPanel/hooks/useReservedTokensSubPanel.test.ts +++ b/src/components/v2v3/V2V3Project/ProjectDashboard/components/TokensPanel/hooks/useReservedTokensSubPanel.test.ts @@ -3,7 +3,7 @@ */ import { renderHook } from '@testing-library/react' import { useProjectContext } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectContext' -import { useProjectMetadata } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata' +import { useProjectMetadataContext } from 'contexts/shared/ProjectMetadataContext' import { BigNumber } from 'ethers' import { useProjectReservedTokens } from 'hooks/v2v3/contractReader/ProjectReservedTokens' import { useReservedTokensSubPanel } from './useReservedTokensSubPanel' @@ -11,9 +11,7 @@ import { useReservedTokensSubPanel } from './useReservedTokensSubPanel' jest.mock( 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectContext', ) -jest.mock( - 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata', -) +jest.mock('contexts/shared/ProjectMetadataContext') jest.mock('hooks/v2v3/contractReader/ProjectReservedTokens') describe('useReservedTokensSubPanel', () => { @@ -38,7 +36,9 @@ describe('useReservedTokensSubPanel', () => { } beforeEach(() => { jest.clearAllMocks() - ;(useProjectMetadata as jest.Mock).mockReturnValue(DefaultProjectMetadata) + ;(useProjectMetadataContext as jest.Mock).mockReturnValue( + DefaultProjectMetadata, + ) ;(useProjectContext as jest.Mock).mockReturnValue(DefaultProjectContext) ;(useProjectReservedTokens as jest.Mock).mockReturnValue({ data: BigNumber.from('1000000000000000000'), diff --git a/src/components/v2v3/V2V3Project/ProjectDashboard/components/TokensPanel/hooks/useReservedTokensSubPanel.ts b/src/components/v2v3/V2V3Project/ProjectDashboard/components/TokensPanel/hooks/useReservedTokensSubPanel.ts index 9bc44980a0..837eb0b45b 100644 --- a/src/components/v2v3/V2V3Project/ProjectDashboard/components/TokensPanel/hooks/useReservedTokensSubPanel.ts +++ b/src/components/v2v3/V2V3Project/ProjectDashboard/components/TokensPanel/hooks/useReservedTokensSubPanel.ts @@ -1,6 +1,6 @@ import { useProjectContext } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectContext' -import { useProjectMetadata } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata' import { ONE_BILLION } from 'constants/numbers' +import { useProjectMetadataContext } from 'contexts/shared/ProjectMetadataContext' import { BigNumber } from 'ethers' import { useProjectReservedTokens } from 'hooks/v2v3/contractReader/ProjectReservedTokens' import { useMemo } from 'react' @@ -12,7 +12,7 @@ import { formatReservedRate, formatSplitPercent } from 'utils/v2v3/math' const ONE_BILLION_BIG = BigNumber.from(ONE_BILLION) export const useReservedTokensSubPanel = () => { - const { projectId } = useProjectMetadata() + const { projectId } = useProjectMetadataContext() const { fundingCycleMetadata, reservedTokensSplits, projectOwnerAddress } = useProjectContext() const reservedRateWad = fundingCycleMetadata?.reservedRate diff --git a/src/components/v2v3/V2V3Project/ProjectDashboard/components/UpdatesPanel/hooks/useFactoredProjectId.ts b/src/components/v2v3/V2V3Project/ProjectDashboard/components/UpdatesPanel/hooks/useFactoredProjectId.ts index e64d6b263f..8fc9f0e53e 100644 --- a/src/components/v2v3/V2V3Project/ProjectDashboard/components/UpdatesPanel/hooks/useFactoredProjectId.ts +++ b/src/components/v2v3/V2V3Project/ProjectDashboard/components/UpdatesPanel/hooks/useFactoredProjectId.ts @@ -1,9 +1,9 @@ -import { useProjectMetadata } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata' import { PV_V2 } from 'constants/pv' +import { useProjectMetadataContext } from 'contexts/shared/ProjectMetadataContext' import { getSubgraphIdForProject } from 'utils/graph' export const useFactoredProjectId = () => { - const { projectId } = useProjectMetadata() + const { projectId } = useProjectMetadataContext() const project = projectId ? getSubgraphIdForProject(PV_V2, projectId) : undefined diff --git a/src/components/v2v3/V2V3Project/ProjectDashboard/hooks/useAboutPanel.ts b/src/components/v2v3/V2V3Project/ProjectDashboard/hooks/useAboutPanel.ts index d0d51af684..d323ec380a 100644 --- a/src/components/v2v3/V2V3Project/ProjectDashboard/hooks/useAboutPanel.ts +++ b/src/components/v2v3/V2V3Project/ProjectDashboard/hooks/useAboutPanel.ts @@ -1,12 +1,12 @@ +import { useProjectMetadataContext } from 'contexts/shared/ProjectMetadataContext' import { useMemo } from 'react' import { linkUrl } from 'utils/url' import { wrapNonAnchorsInAnchor } from 'utils/wrapNonAnchorsInAnchor' -import { useProjectMetadata } from './useProjectMetadata' export type SocialLink = 'twitter' | 'discord' | 'telegram' | 'website' export const useAboutPanel = () => { - const { projectMetadata } = useProjectMetadata() + const { projectMetadata } = useProjectMetadataContext() const socialLinks: Record = useMemo(() => { return { diff --git a/src/components/v2v3/V2V3Project/ProjectDashboard/hooks/useCoverPhoto.ts b/src/components/v2v3/V2V3Project/ProjectDashboard/hooks/useCoverPhoto.ts index 5b57ecd832..15a3399656 100644 --- a/src/components/v2v3/V2V3Project/ProjectDashboard/hooks/useCoverPhoto.ts +++ b/src/components/v2v3/V2V3Project/ProjectDashboard/hooks/useCoverPhoto.ts @@ -1,8 +1,8 @@ +import { useProjectMetadataContext } from 'contexts/shared/ProjectMetadataContext' import { ipfsUriToGatewayUrl } from 'utils/ipfs' -import { useProjectMetadata } from './useProjectMetadata' export const useCoverPhoto = () => { - const { projectMetadata } = useProjectMetadata() + const { projectMetadata } = useProjectMetadataContext() const coverImageUrl = projectMetadata?.coverImageUri ? ipfsUriToGatewayUrl(projectMetadata?.coverImageUri) : undefined diff --git a/src/components/v2v3/V2V3Project/ProjectDashboard/hooks/usePayProjectModal/usePayProjectModal.ts b/src/components/v2v3/V2V3Project/ProjectDashboard/hooks/usePayProjectModal/usePayProjectModal.ts index bf0a3f3c11..1b53fbeeba 100644 --- a/src/components/v2v3/V2V3Project/ProjectDashboard/hooks/usePayProjectModal/usePayProjectModal.ts +++ b/src/components/v2v3/V2V3Project/ProjectDashboard/hooks/usePayProjectModal/usePayProjectModal.ts @@ -1,4 +1,5 @@ import { TxHistoryContext } from 'contexts/Transaction/TxHistoryContext' +import { useProjectMetadataContext } from 'contexts/shared/ProjectMetadataContext' import { useWallet } from 'hooks/Wallet' import { useCurrencyConverter } from 'hooks/useCurrencyConverter' import { TxStatus } from 'models/transaction' @@ -9,7 +10,6 @@ import { emitErrorNotification } from 'utils/notifications' import { V2V3_CURRENCY_ETH, V2V3_CURRENCY_USD } from 'utils/v2v3/currency' import * as Yup from 'yup' import { useProjectCart } from '../useProjectCart' -import { useProjectMetadata } from '../useProjectMetadata' import { useProjectPageQueries } from '../useProjectPageQueries' import { payProjectModalReducer } from './payProjectModalReducer' import { usePayProjectTx } from './usePayProjectTx' @@ -45,7 +45,7 @@ export const usePayProjectModal = () => { totalAmount, nftRewards, } = useProjectCart() - const { projectMetadata } = useProjectMetadata() + const { projectMetadata } = useProjectMetadataContext() const { name, payDisclosure } = projectMetadata ?? {} const { userAddress } = useWallet() const converter = useCurrencyConverter() diff --git a/src/components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectHeader.ts b/src/components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectHeader.ts index 5014945898..4faa19d2d9 100644 --- a/src/components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectHeader.ts +++ b/src/components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectHeader.ts @@ -1,3 +1,4 @@ +import { useProjectMetadataContext } from 'contexts/shared/ProjectMetadataContext' import { V2V3ProjectContext } from 'contexts/v2v3/Project/V2V3ProjectContext' import { BigNumber } from 'ethers' import { useGnosisSafe } from 'hooks/safe/useGnosisSafe' @@ -5,7 +6,6 @@ import { useProjectTrendingPercentageIncrease } from 'hooks/useProjects' import { SubtitleType, useSubtitle } from 'hooks/useSubtitle' import { GnosisSafe } from 'models/safe' import { useContext } from 'react' -import { useProjectMetadata } from './useProjectMetadata' export interface ProjectHeaderData { title: string | undefined @@ -21,7 +21,7 @@ export interface ProjectHeaderData { } export const useProjectHeader = (): ProjectHeaderData => { - const { projectMetadata, projectId } = useProjectMetadata() + const { projectMetadata, projectId } = useProjectMetadataContext() const { handle, projectOwnerAddress, diff --git a/src/components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata.ts b/src/components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata.ts deleted file mode 100644 index eb1e77547b..0000000000 --- a/src/components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { ProjectMetadataContext } from 'contexts/shared/ProjectMetadataContext' -import { useContext } from 'react' - -export const useProjectMetadata = () => useContext(ProjectMetadataContext) diff --git a/src/components/v2v3/V2V3Project/ProjectDashboard/hooks/useSuccessPayView.ts b/src/components/v2v3/V2V3Project/ProjectDashboard/hooks/useSuccessPayView.ts index 9de7fda414..30a5813aa0 100644 --- a/src/components/v2v3/V2V3Project/ProjectDashboard/hooks/useSuccessPayView.ts +++ b/src/components/v2v3/V2V3Project/ProjectDashboard/hooks/useSuccessPayView.ts @@ -1,12 +1,12 @@ +import { useProjectMetadataContext } from 'contexts/shared/ProjectMetadataContext' import { useRouter } from 'next/router' import { useCallback, useEffect, useMemo, useState } from 'react' -import { useProjectMetadata } from './useProjectMetadata' import { useProjectPageQueries } from './useProjectPageQueries' export const useSuccessPayView = () => { const router = useRouter() const { name, nftPaymentSuccessModal } = - useProjectMetadata().projectMetadata ?? {} + useProjectMetadataContext().projectMetadata ?? {} const { projectPayReceipt, setProjectPayReceipt } = useProjectPageQueries() const nftsPurchased = useMemo( () => !!projectPayReceipt?.nfts.length, diff --git a/src/components/v2v3/V2V3Project/ProjectDashboard/hooks/useUserTokenBalanceWad.ts b/src/components/v2v3/V2V3Project/ProjectDashboard/hooks/useUserTokenBalanceWad.ts index 9ba916b403..fee8ece079 100644 --- a/src/components/v2v3/V2V3Project/ProjectDashboard/hooks/useUserTokenBalanceWad.ts +++ b/src/components/v2v3/V2V3Project/ProjectDashboard/hooks/useUserTokenBalanceWad.ts @@ -1,11 +1,11 @@ +import { useProjectMetadataContext } from 'contexts/shared/ProjectMetadataContext' import { useWallet } from 'hooks/Wallet' import useTotalBalanceOf from 'hooks/v2v3/contractReader/useTotalBalanceOf' import { useMemo } from 'react' -import { useProjectMetadata } from './useProjectMetadata' export const useUserTokenBalanceWad = () => { const { userAddress } = useWallet() - const { projectId } = useProjectMetadata() + const { projectId } = useProjectMetadataContext() const { data: totalBalance, loading } = useTotalBalanceOf( userAddress, diff --git a/src/contexts/shared/ProjectMetadataContext.ts b/src/contexts/shared/ProjectMetadataContext.ts index 8b483e9d91..cfa8461ef3 100644 --- a/src/contexts/shared/ProjectMetadataContext.ts +++ b/src/contexts/shared/ProjectMetadataContext.ts @@ -1,6 +1,6 @@ import { ProjectMetadata } from 'models/projectMetadata' import { PV } from 'models/pv' -import { createContext } from 'react' +import { createContext, useContext } from 'react' interface ProjectMetadataContextType { projectMetadata: ProjectMetadata | undefined @@ -22,3 +22,6 @@ export const ProjectMetadataContext = createContext( ), }, ) + +export const useProjectMetadataContext = () => + useContext(ProjectMetadataContext) diff --git a/src/contexts/v2v3/V2V3ProjectOFACProvider.tsx b/src/contexts/v2v3/V2V3ProjectOFACProvider.tsx index c3ebd707ad..c409e35afd 100644 --- a/src/contexts/v2v3/V2V3ProjectOFACProvider.tsx +++ b/src/contexts/v2v3/V2V3ProjectOFACProvider.tsx @@ -1,5 +1,5 @@ import axios from 'axios' -import { useProjectMetadata } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata' +import { useProjectMetadataContext } from 'contexts/shared/ProjectMetadataContext' import { useWallet } from 'hooks/Wallet' import { ReactNode, createContext } from 'react' import { useQuery } from 'react-query' @@ -20,7 +20,7 @@ export default function V2V3ProjectOFACProvider({ children?: ReactNode }) { const { userAddress, isConnected } = useWallet() - const { projectMetadata } = useProjectMetadata() + const { projectMetadata } = useProjectMetadataContext() const enabled = projectMetadata?.projectRequiredOFACCheck && isConnected diff --git a/src/hooks/JB721Delegate/useNftCollectionMetadata.ts b/src/hooks/JB721Delegate/useNftCollectionMetadata.ts index 84dcc5cea8..e5dc3054a0 100644 --- a/src/hooks/JB721Delegate/useNftCollectionMetadata.ts +++ b/src/hooks/JB721Delegate/useNftCollectionMetadata.ts @@ -1,4 +1,4 @@ -import { ipfsGet } from 'lib/api/ipfs' +import { ipfsGatewayFetch } from 'lib/api/ipfs' import { NftCollectionMetadata } from 'models/nftRewards' import { useQuery } from 'react-query' import { cidFromUrl } from 'utils/ipfs' @@ -17,7 +17,7 @@ export function useNftCollectionMetadata(uri: string | undefined) { throw new Error('NFT Contract URI invalid.') } - const response = await ipfsGet(cid) + const response = await ipfsGatewayFetch(cid) return response.data }, { diff --git a/src/hooks/useProjectMetadata.ts b/src/hooks/useProjectMetadata.ts index c6f749f239..30d08d9ecf 100644 --- a/src/hooks/useProjectMetadata.ts +++ b/src/hooks/useProjectMetadata.ts @@ -1,4 +1,4 @@ -import { ipfsGet } from 'lib/api/ipfs' +import { ipfsGatewayFetch } from 'lib/api/ipfs' import { AnyProjectMetadata, consolidateMetadata } from 'models/projectMetadata' import { useQuery } from 'react-query' @@ -10,7 +10,7 @@ export function useProjectMetadata(uri: string | null | undefined) { throw new Error('Project URI not specified.') } - const response = await ipfsGet(uri) + const response = await ipfsGatewayFetch(uri) const metadata = consolidateMetadata(response.data) return metadata }, diff --git a/src/hooks/v2v3/useIsJuiceCrowd.ts b/src/hooks/v2v3/useIsJuiceCrowd.ts index 382623c4c9..bd456d3440 100644 --- a/src/hooks/v2v3/useIsJuiceCrowd.ts +++ b/src/hooks/v2v3/useIsJuiceCrowd.ts @@ -1,9 +1,9 @@ -import { useProjectMetadata } from 'components/v2v3/V2V3Project/ProjectDashboard/hooks/useProjectMetadata' import { readNetwork } from 'constants/networks' +import { useProjectMetadataContext } from 'contexts/shared/ProjectMetadataContext' import { NetworkName } from 'models/networkName' export function useIsJuicecrowd() { - const { projectMetadata, projectId } = useProjectMetadata() + const { projectMetadata, projectId } = useProjectMetadataContext() // Some project's metadata are broken, need to hardcode const JCProjectsWithBrokenMetadata = [ diff --git a/src/lib/api/ipfs.ts b/src/lib/api/ipfs.ts index 07b736b262..44c17d62bf 100644 --- a/src/lib/api/ipfs.ts +++ b/src/lib/api/ipfs.ts @@ -20,7 +20,7 @@ const extractJsonFromBase64Data = (base64: string) => { return JSON.parse(decoded.substring(jsonStart, jsonEnd + 1)) } -export const ipfsGet = async ( +export const ipfsGatewayFetch = async ( hash: string, opts?: AxiosRequestConfig, ) => { diff --git a/src/utils/ipfs.ts b/src/utils/ipfs.ts index abe93f26a8..c8ea023760 100644 --- a/src/utils/ipfs.ts +++ b/src/utils/ipfs.ts @@ -48,7 +48,7 @@ export function ipfsUriToGatewayUrl(ipfsUri: string): string { * e.g.- ipfs://123 -> https://new-gateway.io/ipfs/123 * - https://old-gateway.io/ipfs/123 -> https://new-gateway.io/ipfs/123 */ -export function convertToNewIpfsGateway(url: string) { +export function pinataToGatewayUrl(url: string) { if (url.startsWith('https://jbx.mypinata.cloud')) { return ipfsGatewayUrl(cidFromUrl(url)) } else if (url.startsWith('ipfs://')) { diff --git a/src/utils/server/ipfs/findProjectMetadata.ts b/src/utils/server/ipfs/findProjectMetadata.ts index e82ca7f2ce..8bebaf4053 100644 --- a/src/utils/server/ipfs/findProjectMetadata.ts +++ b/src/utils/server/ipfs/findProjectMetadata.ts @@ -1,5 +1,5 @@ import Bottleneck from 'bottleneck' -import { ipfsGet } from 'lib/api/ipfs' +import { ipfsGatewayFetch } from 'lib/api/ipfs' import { AnyProjectMetadata, consolidateMetadata, @@ -23,7 +23,7 @@ export const findProjectMetadata = async ({ while (true) { try { const response = await limiter.schedule( - async () => await ipfsGet(metadataCid), + async () => await ipfsGatewayFetch(metadataCid), ) const metadata = consolidateMetadata(response.data) Object.keys(metadata).forEach(key => diff --git a/src/utils/sgDbProjects.ts b/src/utils/sgDbProjects.ts index 0dede47d2f..324a499df3 100644 --- a/src/utils/sgDbProjects.ts +++ b/src/utils/sgDbProjects.ts @@ -1,4 +1,4 @@ -import { ipfsGet } from 'lib/api/ipfs' +import { ipfsGatewayFetch } from 'lib/api/ipfs' import { DBProject, DBProjectRow, SGSBCompareKey } from 'models/dbProject' import { Json } from 'models/json' import { @@ -304,9 +304,12 @@ export async function formatWithMetadata({ try { // We need to use a timeout here, because if the object can't be found the request may never resolve. We use 30 seconds to stay well below the max of 60 seconds for vercel edge functions. - const { data: metadata } = await ipfsGet(metadataUri, { - timeout: 30000, - }) + const { data: metadata } = await ipfsGatewayFetch( + metadataUri, + { + timeout: 30000, + }, + ) const { name, description, logoUri, tags, archived } = consolidateMetadata(metadata)