From 70d70d4b37b089369826d76ac0ab5c3b0cd4995c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A1lint=20Ferenczy?= <40574454+FBalint@users.noreply.github.com> Date: Wed, 10 Jul 2024 14:21:23 +0200 Subject: [PATCH 1/2] feat(useCreateRRR): onSuccess configuration (#1340) Co-authored-by: valid --- .../AddAndOrderRoles/components/AddRoleDrawer.tsx | 9 +++++++++ .../[guild]/AddRewardButton/SelectRolePanel.tsx | 9 +++++++++ src/components/create-guild/hooks/useCreateRole.tsx | 4 ---- src/hooks/useCreateRRR.tsx | 9 +-------- 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/components/[guild]/AddAndOrderRoles/components/AddRoleDrawer.tsx b/src/components/[guild]/AddAndOrderRoles/components/AddRoleDrawer.tsx index 4f67f18c04..6bda5e3fd5 100644 --- a/src/components/[guild]/AddAndOrderRoles/components/AddRoleDrawer.tsx +++ b/src/components/[guild]/AddAndOrderRoles/components/AddRoleDrawer.tsx @@ -17,12 +17,14 @@ import DiscardAlert from "components/common/DiscardAlert" import Section from "components/common/Section" import Description from "components/create-guild/Description" import DynamicDevTool from "components/create-guild/DynamicDevTool" +import useJsConfetti from "components/create-guild/hooks/useJsConfetti" import IconSelector from "components/create-guild/IconSelector" import Name from "components/create-guild/Name" import SetRequirements from "components/create-guild/Requirements" import useCreateRRR from "hooks/useCreateRRR" import usePinata from "hooks/usePinata" import useSubmitWithUpload from "hooks/useSubmitWithUpload" +import useToast from "hooks/useToast" import useWarnIfUnsavedChanges from "hooks/useWarnIfUnsavedChanges" import { useRef } from "react" import { FormProvider } from "react-hook-form" @@ -59,9 +61,16 @@ const AddRoleDrawer = ({ isOpen, onClose, finalFocusRef }): JSX.Element => { }) const drawerBodyRef = useRef() + const toast = useToast() + const triggerConfetti = useJsConfetti() const { onSubmit, isLoading, loadingText } = useCreateRRR({ onSuccess: () => { + triggerConfetti() + toast({ + title: "Role successfully created!", + status: "success", + }) methods.reset(methods.defaultValues) onClose() }, diff --git a/src/components/[guild]/AddRewardButton/SelectRolePanel.tsx b/src/components/[guild]/AddRewardButton/SelectRolePanel.tsx index be218d948d..e230cbc8e8 100644 --- a/src/components/[guild]/AddRewardButton/SelectRolePanel.tsx +++ b/src/components/[guild]/AddRewardButton/SelectRolePanel.tsx @@ -15,7 +15,9 @@ import { Visibility } from "@guildxyz/types" import { ArrowLeft, Info } from "@phosphor-icons/react" import { usePostHogContext } from "components/_app/PostHogProvider" import Button from "components/common/Button" +import useJsConfetti from "components/create-guild/hooks/useJsConfetti" import useCreateRRR, { SubmitData } from "hooks/useCreateRRR" +import useToast from "hooks/useToast" import { useState } from "react" import { useFormContext, useWatch } from "react-hook-form" import rewards, { CAPACITY_TIME_PLATFORMS } from "rewards" @@ -51,9 +53,16 @@ const SelectRolePanel = ({ requirements: requirements, roleIds: roleIds, } + const toast = useToast() + const triggerConfetti = useJsConfetti() const { onSubmit, isLoading } = useCreateRRR({ onSuccess: (res) => { + triggerConfetti() + toast({ + title: "Reward successfully created!", + status: "success", + }) captureEvent("reward created (AddRewardButton)", postHogOptions) onSuccess?.(res) }, diff --git a/src/components/create-guild/hooks/useCreateRole.tsx b/src/components/create-guild/hooks/useCreateRole.tsx index d5fb058bb8..efec65b3fb 100644 --- a/src/components/create-guild/hooks/useCreateRole.tsx +++ b/src/components/create-guild/hooks/useCreateRole.tsx @@ -2,7 +2,6 @@ import processConnectorError from "components/[guild]/JoinModal/utils/processCon import useGuild from "components/[guild]/hooks/useGuild" import useRoleGroup from "components/[guild]/hooks/useRoleGroup" import { usePostHogContext } from "components/_app/PostHogProvider" -import useJsConfetti from "components/create-guild/hooks/useJsConfetti" import { useYourGuilds } from "components/explorer/YourGuilds" import useCustomPosthogEvents from "hooks/useCustomPosthogEvents" import useMatchMutate from "hooks/useMatchMutate" @@ -50,7 +49,6 @@ const useCreateRole = ({ const { rewardCreated } = useCustomPosthogEvents() const showErrorToast = useShowErrorToast() - const triggerConfetti = useJsConfetti() const { captureEvent } = usePostHogContext() const postHogOptions = { @@ -72,8 +70,6 @@ const useCreateRole = ({ onError?.(error_) }, onSuccess: async (response_) => { - triggerConfetti() - if (response_?.createdGuildPlatforms?.length > 0) { response_.createdGuildPlatforms.forEach((guildPlatform) => { rewardCreated(guildPlatform.platformId) diff --git a/src/hooks/useCreateRRR.tsx b/src/hooks/useCreateRRR.tsx index f4d0501ef4..4258b1d157 100644 --- a/src/hooks/useCreateRRR.tsx +++ b/src/hooks/useCreateRRR.tsx @@ -8,7 +8,6 @@ import useCreateRole, { } from "components/create-guild/hooks/useCreateRole" import useShowErrorToast from "hooks/useShowErrorToast" import useSubmit from "hooks/useSubmit" -import useToast from "hooks/useToast" import { Requirement, RequirementCreationPayloadWithTempID, @@ -71,8 +70,7 @@ export type RequirementIdMap = { } } -const useCreateRRR = ({ onSuccess }: { onSuccess: (res) => void }) => { - const toast = useToast() +const useCreateRRR = ({ onSuccess }: { onSuccess?: (res) => void }) => { const showErrorToast = useShowErrorToast() const { captureEvent } = usePostHogContext() const postHogOptions = { @@ -140,11 +138,6 @@ const useCreateRRR = ({ onSuccess }: { onSuccess: (res) => void }) => { onSuccess: (res) => { const { roleIds, createdRole, createdRequirements, createdRolePlatforms } = res - toast({ - title: "Role successfully created", - status: "success", - }) - if (!!createdRole) mutateCreatedRole(createdRole, createdRequirements, createdRolePlatforms) if (!createdRole) From fc1f8cfb901077923f22dc189fdc6e3814bffe5a Mon Sep 17 00:00:00 2001 From: BrickheadJohnny <92519134+BrickheadJohnny@users.noreply.github.com> Date: Wed, 10 Jul 2024 14:49:05 +0200 Subject: [PATCH 2/2] refactor(requirements): create separate config files for form & display components (#1368) * refactor: extract `requirementProvidedValues` config to its own file * refactor: extract `requirementDisplayComponents` config to its own file * refactor: move requirement-related types to a `types.ts` file * refactor: extract `requirementFormComponents` config to its own file * cleanup: use the `RequirementType` type --- .../[guild]/JoinModal/JoinModal.tsx | 7 +- .../RequirementErrorConfigContext.tsx | 2 +- .../ConnectRequirementPlatformButton.tsx | 20 +- .../components/DataProviderRequirement.tsx | 2 +- .../RequirementDisplayComponent.tsx | 4 +- .../DynamicSetup/BaseValueModal.tsx | 2 +- .../components/SetHiddenRoleRequirements.tsx | 2 +- .../Requirements/SetRequirements.tsx | 2 +- .../components/AddRequirement.tsx | 16 +- .../ExistingRequirementEditableCard.tsx | 7 +- .../components/ProvidedValueDisplay.tsx | 2 +- .../components/RequirementEditModal.tsx | 3 +- .../components/RequirementEditableCard.tsx | 8 +- src/pages/api/fetchPrice.ts | 4 +- .../providedValue/AirdropProvidedValue.tsx | 2 +- src/requirements/Allowlist/AllowlistForm.tsx | 2 +- src/requirements/Captcha/CaptchaForm.tsx | 2 +- .../CoinbaseEAS/CoinbaseEASForm.tsx | 2 +- .../ContractState/ContractStateForm.tsx | 2 +- src/requirements/Disco/DiscoForm.tsx | 2 +- src/requirements/Discord/DiscordForm.tsx | 2 +- .../Discord/components/DiscordRole.tsx | 2 +- src/requirements/Email/EmailForm.tsx | 2 +- .../EthereumAttestationForm.tsx | 2 +- .../components/EthereumAttestation.tsx | 2 +- src/requirements/Farcaster/FarcasterForm.tsx | 4 +- src/requirements/Form/FormForm.tsx | 2 +- .../Form/components/FormSelector.tsx | 2 +- src/requirements/Fuel/FuelForm.tsx | 2 +- .../Fuel/components/FuelBalance.tsx | 2 +- .../Fuel/components/FuelTransactions.tsx | 2 +- src/requirements/Galaxy/GalaxyForm.tsx | 2 +- src/requirements/GitPoap/GitPoapForm.tsx | 2 +- .../GitcoinPassport/GitcoinPassportForm.tsx | 4 +- .../GitcoinPassport/components/Score.tsx | 2 +- .../GitcoinPassport/components/Stamp.tsx | 2 +- .../GitcoinScoreProvidedValue.tsx | 2 +- src/requirements/Github/GithubForm.tsx | 2 +- .../Github/components/GithubCommitCount.tsx | 2 +- .../components/GithubCommitCountRelative.tsx | 2 +- .../Github/components/GithubStar.tsx | 2 +- src/requirements/Guild/GuildForm.tsx | 4 +- src/requirements/Juicebox/JuiceboxForm.tsx | 2 +- src/requirements/Lens/LensForm.tsx | 4 +- .../Lens/components/LensAction.tsx | 2 +- .../Lens/components/LensPostInput.tsx | 2 +- .../Lens/components/LensProfileSelect.tsx | 2 +- .../Lens/components/LensReact.tsx | 2 +- .../Lens/components/LensTotalInput.tsx | 2 +- src/requirements/Mirror/MirrorForm.tsx | 2 +- src/requirements/Nft/NftForm.tsx | 6 +- .../providedValue/NftAmountProvidedValue.tsx | 4 +- src/requirements/Noox/NooxForm.tsx | 2 +- src/requirements/Parallel/ParallelForm.tsx | 2 +- src/requirements/Payment/PaymentForm.tsx | 2 +- src/requirements/Poap/PoapForm.tsx | 2 +- src/requirements/Points/PointsForm.tsx | 4 +- .../PointsAmountProvidedValue.tsx | 2 +- .../providedValue/PointsRankProvidedValue.tsx | 2 +- src/requirements/PolygonID/PolygonIDForm.tsx | 2 +- .../PolygonID/components/PolygonIDBasic.tsx | 2 +- .../components/PolygonIDProofAge.tsx | 2 +- .../PolygonID/components/PolygonIDQuery.tsx | 2 +- src/requirements/Rep3/Rep3Form.tsx | 2 +- src/requirements/Snapshot/SnapshotForm.tsx | 4 +- .../Snapshot/components/FollowSince.tsx | 2 +- .../Snapshot/components/MajorityVotes.tsx | 2 +- .../Snapshot/components/ProposalSelect.tsx | 6 +- .../Snapshot/components/Proposals.tsx | 2 +- .../Snapshot/components/SpaceSelect.tsx | 2 +- .../Snapshot/components/Strategy/Strategy.tsx | 2 +- .../Snapshot/components/UserSince.tsx | 2 +- .../Snapshot/components/Votes.tsx | 2 +- .../providedValue/ProposalsProvidedValue.tsx | 2 +- .../providedValue/VotesProvidedValue.tsx | 2 +- src/requirements/Sound/SoundForm.tsx | 4 +- .../Sound/components/SoundArtistCollector.tsx | 2 +- .../Sound/components/SoundMinAmount.tsx | 2 +- .../Sound/components/SoundOwnASong.tsx | 2 +- .../Sound/components/SoundTopCollector.tsx | 2 +- .../TopCollectorProvidedValue.tsx | 2 +- src/requirements/Token/TokenForm.tsx | 2 +- .../providedValue/TokenProvidedValue.tsx | 2 +- src/requirements/Twitter/TwitterForm.tsx | 4 +- .../Twitter/components/TwitterAccountAge.tsx | 2 +- .../components/TwitterAccountAgeRelative.tsx | 2 +- .../components/TwitterAccountVerified.tsx | 2 +- .../Twitter/components/TwitterListInput.tsx | 2 +- .../components/TwitterMinimumCount.tsx | 2 +- .../components/TwitterTextToInclude.tsx | 2 +- .../Twitter/components/TwitterTweetInput.tsx | 2 +- .../Twitter/components/TwitterUserInput.tsx | 2 +- src/requirements/Uniswap/UniswapForm.tsx | 4 +- .../providedValue/PositionsProvidedValue.tsx | 2 +- src/requirements/Unlock/UnlockForm.tsx | 2 +- src/requirements/VisitLink/VisitLinkForm.tsx | 2 +- .../WalletActivity/WalletActivityForm.tsx | 4 +- .../components/CovalentContractDeploy.tsx | 2 +- .../CovalentContractDeployRelative.tsx | 2 +- .../components/CovalentFirstTx.tsx | 2 +- .../components/CovalentFirstTxRelative.tsx | 2 +- .../components/CovalentTxCount.tsx | 2 +- .../components/CovalentTxCountRelative.tsx | 2 +- .../ContractDeployProvidedValue.tsx | 2 +- .../providedValue/TxCountProvidedValue.tsx | 2 +- src/requirements/Web3Inbox/Web3InboxForm.tsx | 2 +- src/requirements/Yup/YupForm.tsx | 2 +- src/requirements/index.ts | 33 +- .../requirementDisplayComponents.ts | 377 ++++++++++++++++++ src/requirements/requirementFormComponents.ts | 368 +++++++++++++++++ src/requirements/requirementProvidedValues.ts | 89 +++++ src/requirements/requirements.ts | 349 +--------------- src/requirements/types.ts | 24 ++ .../Token/DynamicRewardCalculationTable.tsx | 2 +- src/types.ts | 2 - src/utils/guildCheckout/constants.ts | 2 +- 116 files changed, 1026 insertions(+), 517 deletions(-) create mode 100644 src/requirements/requirementDisplayComponents.ts create mode 100644 src/requirements/requirementFormComponents.ts create mode 100644 src/requirements/requirementProvidedValues.ts create mode 100644 src/requirements/types.ts diff --git a/src/components/[guild]/JoinModal/JoinModal.tsx b/src/components/[guild]/JoinModal/JoinModal.tsx index aa4b27409e..dc71e937c6 100644 --- a/src/components/[guild]/JoinModal/JoinModal.tsx +++ b/src/components/[guild]/JoinModal/JoinModal.tsx @@ -22,8 +22,9 @@ import useShowErrorToast from "hooks/useShowErrorToast" import dynamic from "next/dynamic" import { ComponentType, useRef } from "react" import { FormProvider, useForm } from "react-hook-form" +import { RequirementType } from "requirements/types" import rewards from "rewards" -import { PlatformName, RequirementType } from "types" +import { PlatformName } from "types" import ConnectPlatform from "./components/ConnectPlatform" import ShareSocialsCheckbox from "./components/ShareSocialsCheckbox" import WalletAuthButton from "./components/WalletAuthButton" @@ -186,8 +187,8 @@ const JoinModal = ({ isOpen, onClose }: Props): JSX.Element => { joinProgress?.state === "FINISHED" ? "Finalizing results" : !!joinProgress - ? "See status above" - : "Checking access" + ? "See status above" + : "Checking access" } isDisabled={!isWeb3Connected} > diff --git a/src/components/[guild]/Requirements/RequirementErrorConfigContext.tsx b/src/components/[guild]/Requirements/RequirementErrorConfigContext.tsx index 9dbf5128fc..ebb59a6f4a 100644 --- a/src/components/[guild]/Requirements/RequirementErrorConfigContext.tsx +++ b/src/components/[guild]/Requirements/RequirementErrorConfigContext.tsx @@ -1,5 +1,5 @@ import { createContext, PropsWithChildren, useContext } from "react" -import { RequirementType } from "requirements" +import { RequirementType } from "requirements/types" type RequirementErrorConfig = Partial> diff --git a/src/components/[guild]/Requirements/components/ConnectRequirementPlatformButton.tsx b/src/components/[guild]/Requirements/components/ConnectRequirementPlatformButton.tsx index 3c3aaa27bf..f01817e4e0 100644 --- a/src/components/[guild]/Requirements/components/ConnectRequirementPlatformButton.tsx +++ b/src/components/[guild]/Requirements/components/ConnectRequirementPlatformButton.tsx @@ -7,15 +7,16 @@ import { ConnectEmailButton } from "components/common/Layout/components/Account/ import { ConnectFarcasterButton } from "components/common/Layout/components/Account/components/AccountModal/components/SocialAccount/FarcasterProfile" import { useRoleMembership } from "components/explorer/hooks/useMembership" import useToast from "hooks/useToast" +import REQUIREMENTS from "requirements" +import { RequirementType } from "requirements/types" import rewards from "rewards" -import REQUIREMENTS, { RequirementType } from "requirements" import { PlatformName } from "types" import { useRequirementContext } from "./RequirementContext" function requirementTypeToPlatformName(type: RequirementType): PlatformName { if (type === "ALLOWLIST_EMAIL") return "EMAIL" - if (REQUIREMENTS[type].types[0] === "TWITTER") return "TWITTER_V1" - return REQUIREMENTS[type].types[0] as PlatformName + if (REQUIREMENTS[type].types[0].startsWith("TWITTER")) return "TWITTER_V1" + return REQUIREMENTS[type].types[0].split("_")[0] as PlatformName } const RequirementConnectButton = (props: ButtonProps) => { @@ -40,8 +41,8 @@ const RequirementConnectButton = (props: ButtonProps) => { platform === "EMAIL" ? !emails?.pending && emails?.emailAddress : platform === "FARCASTER" - ? !farcasterProfiles || !!farcasterProfiles?.[0] - : !isReconnection && (!platformUsers || platformFromDb) + ? !farcasterProfiles || !!farcasterProfiles?.[0] + : !isReconnection && (!platformUsers || platformFromDb) ) return null @@ -58,8 +59,8 @@ const RequirementConnectButton = (props: ButtonProps) => { platform === "EMAIL" ? ConnectEmailButton : platform === "FARCASTER" - ? ConnectFarcasterButton - : ConnectRequirementPlatformButton + ? ConnectFarcasterButton + : ConnectRequirementPlatformButton return ( void; isReconnection?: boolean }) => { const { type } = useRequirementContext() - const platform = - REQUIREMENTS[type].types[0] === "TWITTER" - ? "TWITTER_V1" - : (REQUIREMENTS[type].types[0] as PlatformName) + const platform = requirementTypeToPlatformName(type) const { onConnect, isLoading, loadingText } = useConnectPlatform( platform, diff --git a/src/components/[guild]/Requirements/components/DataProviderRequirement.tsx b/src/components/[guild]/Requirements/components/DataProviderRequirement.tsx index 03023a3159..b6fc0c6e9c 100644 --- a/src/components/[guild]/Requirements/components/DataProviderRequirement.tsx +++ b/src/components/[guild]/Requirements/components/DataProviderRequirement.tsx @@ -1,6 +1,6 @@ import { Box, Circle, Flex, HStack, Icon, SimpleGrid, Text } from "@chakra-ui/react" import { Lightning } from "@phosphor-icons/react" -import { REQUIREMENT_PROVIDED_VALUES } from "requirements/requirements" +import { REQUIREMENT_PROVIDED_VALUES } from "requirements/requirementProvidedValues" import { RequirementProps } from "./Requirement" import { useRequirementContext } from "./RequirementContext" import { RequirementImage, RequirementImageCircle } from "./RequirementImage" diff --git a/src/components/[guild]/Requirements/components/RequirementDisplayComponent.tsx b/src/components/[guild]/Requirements/components/RequirementDisplayComponent.tsx index 40323ad22d..32a0e90190 100644 --- a/src/components/[guild]/Requirements/components/RequirementDisplayComponent.tsx +++ b/src/components/[guild]/Requirements/components/RequirementDisplayComponent.tsx @@ -4,7 +4,7 @@ import { usePostHogContext } from "components/_app/PostHogProvider" import DataBlock from "components/common/DataBlock" import { PropsWithChildren } from "react" import { ErrorBoundary } from "react-error-boundary" -import REQUIREMENTS from "requirements" +import { REQUIREMENT_DISPLAY_COMPONENTS } from "requirements/requirementDisplayComponents" import { Requirement as RequirementType, Rest } from "types" import { CHAIN_CONFIG } from "wagmiConfig/chains" import HiddenRequirementAccessIndicator from "./HiddenRequirementAccessIndicator" @@ -34,7 +34,7 @@ const RequirementDisplayComponent = ({ ) - const RequirementComponent = REQUIREMENTS[requirement.type]?.displayComponent + const RequirementComponent = REQUIREMENT_DISPLAY_COMPONENTS[requirement.type] if (!!requirement.chain && !CHAIN_CONFIG[requirement.chain]) return ( diff --git a/src/components/[guild]/RolePlatforms/components/AddRoleRewardModal/components/DynamicSetup/BaseValueModal.tsx b/src/components/[guild]/RolePlatforms/components/AddRoleRewardModal/components/DynamicSetup/BaseValueModal.tsx index cc98dd0e1d..6cf99dde38 100644 --- a/src/components/[guild]/RolePlatforms/components/AddRoleRewardModal/components/DynamicSetup/BaseValueModal.tsx +++ b/src/components/[guild]/RolePlatforms/components/AddRoleRewardModal/components/DynamicSetup/BaseValueModal.tsx @@ -15,7 +15,7 @@ import RequirementDisplayComponent from "components/[guild]/Requirements/compone import DisplayCard from "components/common/DisplayCard" import { Modal } from "components/common/Modal" import AddRequirement from "components/create-guild/Requirements/components/AddRequirement" -import { REQUIREMENT_PROVIDED_VALUES } from "requirements/requirements" +import { REQUIREMENT_PROVIDED_VALUES } from "requirements/requirementProvidedValues" type Props = { isOpen: boolean diff --git a/src/components/[guild]/crm/FilterByRoles/components/SetHiddenRoleRequirements.tsx b/src/components/[guild]/crm/FilterByRoles/components/SetHiddenRoleRequirements.tsx index 8362f52b3f..c2f3503487 100644 --- a/src/components/[guild]/crm/FilterByRoles/components/SetHiddenRoleRequirements.tsx +++ b/src/components/[guild]/crm/FilterByRoles/components/SetHiddenRoleRequirements.tsx @@ -6,7 +6,7 @@ import LogicFormControl from "components/create-guild/Requirements/components/Lo import RequirementEditableCard from "components/create-guild/Requirements/components/RequirementEditableCard" import { AnimatePresence } from "framer-motion" import { useFieldArray, useFormContext, useWatch } from "react-hook-form" -import { RequirementType } from "requirements" +import { RequirementType } from "requirements/types" import { Requirement } from "types" const SetHiddenRoleRequirements = (): JSX.Element => { diff --git a/src/components/create-guild/Requirements/SetRequirements.tsx b/src/components/create-guild/Requirements/SetRequirements.tsx index 113039d5ce..82f29c5871 100644 --- a/src/components/create-guild/Requirements/SetRequirements.tsx +++ b/src/components/create-guild/Requirements/SetRequirements.tsx @@ -6,8 +6,8 @@ import { SectionTitle } from "components/common/Section" import { AnimatePresence } from "framer-motion" import useToast from "hooks/useToast" import { useFormContext, useWatch } from "react-hook-form" -import { RequirementType } from "requirements" import FreeRequirement from "requirements/Free/FreeRequirement" +import { RequirementType } from "requirements/types" import { Requirement, RolePlatform } from "types" import AddRequirement from "./components/AddRequirement" import BalancyCounterWithPopover from "./components/BalancyCounter" diff --git a/src/components/create-guild/Requirements/components/AddRequirement.tsx b/src/components/create-guild/Requirements/components/AddRequirement.tsx index f1a7e79a57..038d70db4e 100644 --- a/src/components/create-guild/Requirements/components/AddRequirement.tsx +++ b/src/components/create-guild/Requirements/components/AddRequirement.tsx @@ -40,11 +40,13 @@ import { useState, } from "react" import { FormProvider, useForm, useWatch } from "react-hook-form" -import REQUIREMENTS, { REQUIREMENTS_DATA, RequirementType } from "requirements" +import REQUIREMENTS, { REQUIREMENTS_DATA } from "requirements" +import { REQUIREMENT_FORM_COMPONENTS } from "requirements/requirementFormComponents" import { PROVIDER_TYPES, REQUIREMENT_PROVIDED_VALUES, -} from "requirements/requirements" +} from "requirements/requirementProvidedValues" +import { RequirementType } from "requirements/types" import { Requirement } from "types" import useCreateRequirement from "../hooks/useCreateRequirement" import BalancyFooter from "./BalancyFooter" @@ -56,7 +58,9 @@ const general = REQUIREMENTS_DATA.slice(1, GENERAL_REQUIREMENTS_COUNT + 1) const integrations = REQUIREMENTS_DATA.slice(GENERAL_REQUIREMENTS_COUNT + 1) // call undocumented preload() from next/dynamic, so the components are already loaded when they mount, which is needed for the height animation -Object.values(REQUIREMENTS).forEach((a: any) => a.formComponent?.render?.preload?.()) +Object.values(REQUIREMENT_FORM_COMPONENTS).forEach((requirementFormComponent) => + requirementFormComponent?.render?.preload?.() +) const TRANSITION_DURATION_MS = 200 const HOME_MAX_HEIGHT = "550px" @@ -147,8 +151,8 @@ const AddRequirement = ({ {selectedType ? `Add ${REQUIREMENTS[selectedType]?.name} requirement` : providerTypesOnly - ? "Add provider requirement" - : "Add requirement"} + ? "Add provider requirement" + : "Add requirement"} @@ -203,7 +207,7 @@ const AddRequirementForm = forwardRef( }: AddRequirementFormProps, ref: LegacyRef ) => { - const FormComponent = REQUIREMENTS[selectedType].formComponent + const FormComponent = REQUIREMENT_FORM_COMPONENTS[selectedType] const methods = useForm({ mode: "all" }) diff --git a/src/components/create-guild/Requirements/components/ExistingRequirementEditableCard.tsx b/src/components/create-guild/Requirements/components/ExistingRequirementEditableCard.tsx index ca08e654f5..622967c85a 100644 --- a/src/components/create-guild/Requirements/components/ExistingRequirementEditableCard.tsx +++ b/src/components/create-guild/Requirements/components/ExistingRequirementEditableCard.tsx @@ -10,7 +10,8 @@ import SetVisibility from "components/[guild]/SetVisibility" import useVisibilityModalProps from "components/[guild]/SetVisibility/hooks/useVisibilityModalProps" import { ComponentProps, PropsWithChildren, useRef } from "react" import { FormProvider, useForm } from "react-hook-form" -import REQUIREMENTS from "requirements" +import { REQUIREMENT_DISPLAY_COMPONENTS } from "requirements/requirementDisplayComponents" +import { REQUIREMENT_FORM_COMPONENTS } from "requirements/requirementFormComponents" import { Requirement, Requirement as RequirementType } from "types" import mapRequirement from "utils/mapRequirement" import useEditRequirement from "../hooks/useEditRequirement" @@ -43,8 +44,8 @@ const ExistingRequirementEditableCard = ({ onClose: onDeleteClose, } = useDisclosure() - const RequirementComponent = REQUIREMENTS[requirement.type]?.displayComponent - const FormComponent = REQUIREMENTS[requirement.type].formComponent + const RequirementComponent = REQUIREMENT_DISPLAY_COMPONENTS[requirement.type] + const FormComponent = REQUIREMENT_FORM_COMPONENTS[requirement.type] const editButtonRef = useRef() const removeButtonRef = useRef() diff --git a/src/components/create-guild/Requirements/components/ProvidedValueDisplay.tsx b/src/components/create-guild/Requirements/components/ProvidedValueDisplay.tsx index 2580e560d7..6c98484d30 100644 --- a/src/components/create-guild/Requirements/components/ProvidedValueDisplay.tsx +++ b/src/components/create-guild/Requirements/components/ProvidedValueDisplay.tsx @@ -14,7 +14,7 @@ import { } from "@chakra-ui/react" import { Info, Lightning, Question } from "@phosphor-icons/react" import Card from "components/common/Card" -import { REQUIREMENT_PROVIDED_VALUES } from "requirements/requirements" +import { REQUIREMENT_PROVIDED_VALUES } from "requirements/requirementProvidedValues" import { Requirement } from "types" const ProvidedValueDisplay = ({ diff --git a/src/components/create-guild/Requirements/components/RequirementEditModal.tsx b/src/components/create-guild/Requirements/components/RequirementEditModal.tsx index f6df4d2b6f..02f2d9f786 100644 --- a/src/components/create-guild/Requirements/components/RequirementEditModal.tsx +++ b/src/components/create-guild/Requirements/components/RequirementEditModal.tsx @@ -13,6 +13,7 @@ import { Modal } from "components/common/Modal" import { ReactNode } from "react" import { useFormContext } from "react-hook-form" import REQUIREMENTS from "requirements" +import { REQUIREMENT_FORM_COMPONENTS } from "requirements/requirementFormComponents" import { Requirement } from "types" import IsNegatedPicker from "./IsNegatedPicker" @@ -45,7 +46,7 @@ const RequirementEditModal = ({ onClose() } - const FormComponent = REQUIREMENTS[requirementField.type].formComponent + const FormComponent = REQUIREMENT_FORM_COMPONENTS[requirementField.type] return ( <> diff --git a/src/components/create-guild/Requirements/components/RequirementEditableCard.tsx b/src/components/create-guild/Requirements/components/RequirementEditableCard.tsx index 775712fe8c..870c16aebb 100644 --- a/src/components/create-guild/Requirements/components/RequirementEditableCard.tsx +++ b/src/components/create-guild/Requirements/components/RequirementEditableCard.tsx @@ -8,7 +8,9 @@ import useVisibilityModalProps from "components/[guild]/SetVisibility/hooks/useV import dynamic from "next/dynamic" import { PropsWithChildren, memo, useRef } from "react" import { FormProvider, useForm, useFormContext } from "react-hook-form" -import REQUIREMENTS, { RequirementType } from "requirements" +import { REQUIREMENT_DISPLAY_COMPONENTS } from "requirements/requirementDisplayComponents" +import { REQUIREMENT_FORM_COMPONENTS } from "requirements/requirementFormComponents" +import { RequirementType } from "requirements/types" import { Requirement, RoleFormType } from "types" import BalancyFooter from "./BalancyFooter" import RemoveRequirementButton from "./RemoveRequirementButton" @@ -35,8 +37,8 @@ const RequirementEditableCard = ({ isEditDisabled = false, }: Props) => { const { isOpen, onOpen, onClose } = useDisclosure() - const RequirementComponent = REQUIREMENTS[type]?.displayComponent - const FormComponent = REQUIREMENTS[type].formComponent + const RequirementComponent = REQUIREMENT_DISPLAY_COMPONENTS[type] + const FormComponent = REQUIREMENT_FORM_COMPONENTS[type] const editButtonRef = useRef() diff --git a/src/pages/api/fetchPrice.ts b/src/pages/api/fetchPrice.ts index 6a6722d579..bc34328139 100644 --- a/src/pages/api/fetchPrice.ts +++ b/src/pages/api/fetchPrice.ts @@ -1,7 +1,7 @@ -import { env } from "env" import { kv } from "@vercel/kv" +import { env } from "env" import { NextApiHandler, NextApiRequest, NextApiResponse } from "next" -import { RequirementType } from "requirements" +import { RequirementType } from "requirements/types" import { OneOf } from "types" import { ADDRESS_REGEX, diff --git a/src/requirements/Airdrop/providedValue/AirdropProvidedValue.tsx b/src/requirements/Airdrop/providedValue/AirdropProvidedValue.tsx index 4202e72ec3..e61fdbb1d5 100644 --- a/src/requirements/Airdrop/providedValue/AirdropProvidedValue.tsx +++ b/src/requirements/Airdrop/providedValue/AirdropProvidedValue.tsx @@ -2,7 +2,7 @@ import { HStack, Text, useDisclosure } from "@chakra-ui/react" import { ArrowSquareIn } from "@phosphor-icons/react" import SnapshotModal from "components/[guild]/leaderboard/Snapshots/SnapshotModal" import Button from "components/common/Button" -import { ProvidedValueDisplayProps } from "requirements" +import type { ProvidedValueDisplayProps } from "requirements/requirementProvidedValues" const AirdropProvidedValue = ({ requirement }: ProvidedValueDisplayProps) => { const { isOpen, onOpen, onClose } = useDisclosure() diff --git a/src/requirements/Allowlist/AllowlistForm.tsx b/src/requirements/Allowlist/AllowlistForm.tsx index 94e3e492b4..0394ea1715 100644 --- a/src/requirements/Allowlist/AllowlistForm.tsx +++ b/src/requirements/Allowlist/AllowlistForm.tsx @@ -3,7 +3,7 @@ import ControlledSelect from "components/common/ControlledSelect" import FormErrorMessage from "components/common/FormErrorMessage" import { StyledSelectProps } from "components/common/StyledSelect/StyledSelect" import { useFormContext } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" import AllowlistFormInputs from "./components/AllowlistFormInputs" diff --git a/src/requirements/Captcha/CaptchaForm.tsx b/src/requirements/Captcha/CaptchaForm.tsx index 8ead394401..2e304b9f3b 100644 --- a/src/requirements/Captcha/CaptchaForm.tsx +++ b/src/requirements/Captcha/CaptchaForm.tsx @@ -2,7 +2,7 @@ import { FormControl, FormLabel } from "@chakra-ui/react" import FormErrorMessage from "components/common/FormErrorMessage" import { ControlledRelativeTimeInput } from "components/common/RelativeTimeInput" import { useFormState } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" const CaptchaForm = ({ baseFieldPath }: RequirementFormProps): JSX.Element => { diff --git a/src/requirements/CoinbaseEAS/CoinbaseEASForm.tsx b/src/requirements/CoinbaseEAS/CoinbaseEASForm.tsx index ff8f57322f..22c4deaf13 100644 --- a/src/requirements/CoinbaseEAS/CoinbaseEASForm.tsx +++ b/src/requirements/CoinbaseEAS/CoinbaseEASForm.tsx @@ -9,7 +9,7 @@ import { import ControlledSelect from "components/common/ControlledSelect" import FormErrorMessage from "components/common/FormErrorMessage" import { useController, useFormContext, useWatch } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import { SelectOption } from "types" import parseFromObject from "utils/parseFromObject" import { countryCodes } from "./countryCodes" diff --git a/src/requirements/ContractState/ContractStateForm.tsx b/src/requirements/ContractState/ContractStateForm.tsx index 743523ac35..b39503acf8 100644 --- a/src/requirements/ContractState/ContractStateForm.tsx +++ b/src/requirements/ContractState/ContractStateForm.tsx @@ -30,7 +30,7 @@ import DataBlockWithCopy from "components/common/DataBlockWithCopy" import FormErrorMessage from "components/common/FormErrorMessage" import { useMemo } from "react" import { Controller, useFieldArray, useFormContext, useWatch } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" import ChainPicker from "../common/ChainPicker" import useAbi from "./hooks/useAbi" diff --git a/src/requirements/Disco/DiscoForm.tsx b/src/requirements/Disco/DiscoForm.tsx index c3ac9002fb..fdf9b40843 100644 --- a/src/requirements/Disco/DiscoForm.tsx +++ b/src/requirements/Disco/DiscoForm.tsx @@ -2,7 +2,7 @@ import { Box, FormControl, FormLabel, Input, Stack } from "@chakra-ui/react" import ControlledSelect from "components/common/ControlledSelect" import FormErrorMessage from "components/common/FormErrorMessage" import { Controller, useFormContext, useWatch } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" const options = [ diff --git a/src/requirements/Discord/DiscordForm.tsx b/src/requirements/Discord/DiscordForm.tsx index 8cb42f3f31..59a43eef32 100644 --- a/src/requirements/Discord/DiscordForm.tsx +++ b/src/requirements/Discord/DiscordForm.tsx @@ -7,7 +7,7 @@ import { } from "@chakra-ui/react" import ControlledSelect from "components/common/ControlledSelect" import { useFormContext, useFormState, useWatch } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" import DiscordJoin from "./components/DiscordJoin" import DiscordJoinFromNow from "./components/DiscordJoinFromNow" diff --git a/src/requirements/Discord/components/DiscordRole.tsx b/src/requirements/Discord/components/DiscordRole.tsx index 14682a636c..3805275142 100644 --- a/src/requirements/Discord/components/DiscordRole.tsx +++ b/src/requirements/Discord/components/DiscordRole.tsx @@ -12,7 +12,7 @@ import ReconnectAlert from "components/common/ReconnectAlert" import useGateables from "hooks/useGateables" import useServerData from "hooks/useServerData" import { useFormContext, useFormState, useWatch } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import { PlatformType } from "types" import parseFromObject from "utils/parseFromObject" import shortenHex from "utils/shortenHex" diff --git a/src/requirements/Email/EmailForm.tsx b/src/requirements/Email/EmailForm.tsx index d709a60bc5..d1e7f85b8f 100644 --- a/src/requirements/Email/EmailForm.tsx +++ b/src/requirements/Email/EmailForm.tsx @@ -2,8 +2,8 @@ import { Divider, FormControl, FormLabel, Input, Stack } from "@chakra-ui/react" import ControlledSelect from "components/common/ControlledSelect" import FormErrorMessage from "components/common/FormErrorMessage" import { useFormContext, useWatch } from "react-hook-form" -import { RequirementFormProps } from "requirements" import AllowlistFormInputs from "requirements/Allowlist/components/AllowlistFormInputs" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" const guildRequirementTypes = [ diff --git a/src/requirements/EthereumAttestation/EthereumAttestationForm.tsx b/src/requirements/EthereumAttestation/EthereumAttestationForm.tsx index d8f0a69f48..be34866b0b 100644 --- a/src/requirements/EthereumAttestation/EthereumAttestationForm.tsx +++ b/src/requirements/EthereumAttestation/EthereumAttestationForm.tsx @@ -2,7 +2,7 @@ import { Divider, FormControl, FormLabel, Stack } from "@chakra-ui/react" import ControlledSelect from "components/common/ControlledSelect" import FormErrorMessage from "components/common/FormErrorMessage" import { useFormContext, useWatch } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" import EthereumAttestation from "./components/EthereumAttestation" diff --git a/src/requirements/EthereumAttestation/components/EthereumAttestation.tsx b/src/requirements/EthereumAttestation/components/EthereumAttestation.tsx index 327c1f87bd..15b19a558a 100644 --- a/src/requirements/EthereumAttestation/components/EthereumAttestation.tsx +++ b/src/requirements/EthereumAttestation/components/EthereumAttestation.tsx @@ -1,8 +1,8 @@ import { FormControl, FormLabel, Input } from "@chakra-ui/react" import FormErrorMessage from "components/common/FormErrorMessage" import { useFormContext, useWatch } from "react-hook-form" -import { RequirementFormProps } from "requirements" import ChainPicker from "requirements/common/ChainPicker" +import { RequirementFormProps } from "requirements/types" import { ADDRESS_REGEX } from "utils/guildCheckout/constants" import parseFromObject from "utils/parseFromObject" import { Chain } from "wagmiConfig/chains" diff --git a/src/requirements/Farcaster/FarcasterForm.tsx b/src/requirements/Farcaster/FarcasterForm.tsx index 9db35b777d..a922c19944 100644 --- a/src/requirements/Farcaster/FarcasterForm.tsx +++ b/src/requirements/Farcaster/FarcasterForm.tsx @@ -1,8 +1,8 @@ import { FormControl, FormLabel, Stack } from "@chakra-ui/react" import ControlledSelect from "components/common/ControlledSelect" import { useFormContext, useWatch } from "react-hook-form" -import { RequirementFormProps, RequirementType } from "requirements" -import { PROVIDER_TYPES } from "requirements/requirements" +import { PROVIDER_TYPES } from "requirements/requirementProvidedValues" +import { RequirementFormProps, RequirementType } from "requirements/types" import FarcasterCastHash from "./components/FarcasterCastHash" import FarcasterChannel from "./components/FarcasterChannel" import FarcasterTextToInclude from "./components/FarcasterTextToInclude" diff --git a/src/requirements/Form/FormForm.tsx b/src/requirements/Form/FormForm.tsx index fa3d964f88..0bf82e645f 100644 --- a/src/requirements/Form/FormForm.tsx +++ b/src/requirements/Form/FormForm.tsx @@ -1,7 +1,7 @@ import { Stack } from "@chakra-ui/react" import useGuild from "components/[guild]/hooks/useGuild" import { useController, useWatch } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import FormSelector from "./components/FormSelector" import SetExpectedAnswers from "./components/SetExpectedAnswers" diff --git a/src/requirements/Form/components/FormSelector.tsx b/src/requirements/Form/components/FormSelector.tsx index aed1f54e9e..4182cfa077 100644 --- a/src/requirements/Form/components/FormSelector.tsx +++ b/src/requirements/Form/components/FormSelector.tsx @@ -4,7 +4,7 @@ import useGuildForms from "components/[guild]/hooks/useGuildForms" import ControlledSelect from "components/common/ControlledSelect" import FormErrorMessage from "components/common/FormErrorMessage" import { useFormState } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import { PlatformType, SelectOption } from "types" import parseFromObject from "utils/parseFromObject" import AddFormButton from "./AddFormButton" diff --git a/src/requirements/Fuel/FuelForm.tsx b/src/requirements/Fuel/FuelForm.tsx index 08b0ee5b45..5d971e0035 100644 --- a/src/requirements/Fuel/FuelForm.tsx +++ b/src/requirements/Fuel/FuelForm.tsx @@ -2,7 +2,7 @@ import { Divider, FormControl, FormLabel, Stack } from "@chakra-ui/react" import ControlledSelect from "components/common/ControlledSelect" import FormErrorMessage from "components/common/FormErrorMessage" import { useController, useFormContext, useWatch } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" import FuelBalance from "./components/FuelBalance" import FuelTransactions from "./components/FuelTransactions" diff --git a/src/requirements/Fuel/components/FuelBalance.tsx b/src/requirements/Fuel/components/FuelBalance.tsx index 6eff965d0a..80048ebbee 100644 --- a/src/requirements/Fuel/components/FuelBalance.tsx +++ b/src/requirements/Fuel/components/FuelBalance.tsx @@ -1,8 +1,8 @@ import { FormControl, FormLabel, Input } from "@chakra-ui/react" import FormErrorMessage from "components/common/FormErrorMessage" import { useFormContext } from "react-hook-form" -import { RequirementFormProps } from "requirements" import MinMaxAmount from "requirements/common/MinMaxAmount" +import { RequirementFormProps } from "requirements/types" import { FUEL_ADDRESS_REGEX } from "types" import parseFromObject from "utils/parseFromObject" diff --git a/src/requirements/Fuel/components/FuelTransactions.tsx b/src/requirements/Fuel/components/FuelTransactions.tsx index 4d3d996efa..15686a1ee8 100644 --- a/src/requirements/Fuel/components/FuelTransactions.tsx +++ b/src/requirements/Fuel/components/FuelTransactions.tsx @@ -2,8 +2,8 @@ import { FormControl, FormLabel } from "@chakra-ui/react" import ControlledSelect from "components/common/ControlledSelect" import FormErrorMessage from "components/common/FormErrorMessage" import { useFormState } from "react-hook-form" -import { RequirementFormProps } from "requirements" import MinMaxAmount from "requirements/common/MinMaxAmount" +import { RequirementFormProps } from "requirements/types" import { SelectOption } from "types" import parseFromObject from "utils/parseFromObject" diff --git a/src/requirements/Galaxy/GalaxyForm.tsx b/src/requirements/Galaxy/GalaxyForm.tsx index 8088ba9a72..bb593e5a10 100644 --- a/src/requirements/Galaxy/GalaxyForm.tsx +++ b/src/requirements/Galaxy/GalaxyForm.tsx @@ -12,7 +12,7 @@ import OptionImage from "components/common/StyledSelect/components/CustomSelectO import useDebouncedState from "hooks/useDebouncedState" import { useMemo, useState } from "react" import { useController, useFormContext } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" import { useGalaxyCampaign, useGalaxyCampaigns } from "./hooks/useGalaxyCampaigns" diff --git a/src/requirements/GitPoap/GitPoapForm.tsx b/src/requirements/GitPoap/GitPoapForm.tsx index 06b05ea272..cfac0bffa0 100644 --- a/src/requirements/GitPoap/GitPoapForm.tsx +++ b/src/requirements/GitPoap/GitPoapForm.tsx @@ -10,8 +10,8 @@ import FormErrorMessage from "components/common/FormErrorMessage" import OptionImage from "components/common/StyledSelect/components/CustomSelectOption/components/OptionImage" import { useMemo } from "react" import { useFormContext, useWatch } from "react-hook-form" -import { RequirementFormProps } from "requirements" import { usePoap } from "requirements/Poap/hooks/usePoaps" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" import ChainInfo from "../common/ChainInfo" import useGitPoaps from "./hooks/useGitPoaps" diff --git a/src/requirements/GitcoinPassport/GitcoinPassportForm.tsx b/src/requirements/GitcoinPassport/GitcoinPassportForm.tsx index e4a2ef3c57..13a7a4f5da 100644 --- a/src/requirements/GitcoinPassport/GitcoinPassportForm.tsx +++ b/src/requirements/GitcoinPassport/GitcoinPassportForm.tsx @@ -7,8 +7,8 @@ import { } from "@chakra-ui/react" import ControlledSelect from "components/common/ControlledSelect" import { useFormContext, useWatch } from "react-hook-form" -import { RequirementFormProps, RequirementType } from "requirements" -import { PROVIDER_TYPES } from "requirements/requirements" +import { PROVIDER_TYPES } from "requirements/requirementProvidedValues" +import { RequirementFormProps, RequirementType } from "requirements/types" import parseFromObject from "utils/parseFromObject" import Score from "./components/Score" diff --git a/src/requirements/GitcoinPassport/components/Score.tsx b/src/requirements/GitcoinPassport/components/Score.tsx index 5d498e5937..efc30f0471 100644 --- a/src/requirements/GitcoinPassport/components/Score.tsx +++ b/src/requirements/GitcoinPassport/components/Score.tsx @@ -10,7 +10,7 @@ import { import ControlledSelect from "components/common/ControlledSelect" import FormErrorMessage from "components/common/FormErrorMessage" import { useController, useFormContext } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import { SelectOption } from "types" import parseFromObject from "utils/parseFromObject" diff --git a/src/requirements/GitcoinPassport/components/Stamp.tsx b/src/requirements/GitcoinPassport/components/Stamp.tsx index d2a33df8b2..dee92dab54 100644 --- a/src/requirements/GitcoinPassport/components/Stamp.tsx +++ b/src/requirements/GitcoinPassport/components/Stamp.tsx @@ -2,7 +2,7 @@ import { FormControl, FormLabel, Input } from "@chakra-ui/react" import FormErrorMessage from "components/common/FormErrorMessage" import { ControlledTimestampInput } from "components/common/TimestampInput" import { useFormContext, useWatch } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" const Stamp = ({ baseFieldPath }: RequirementFormProps): JSX.Element => { diff --git a/src/requirements/GitcoinPassport/providedValue/GitcoinScoreProvidedValue.tsx b/src/requirements/GitcoinPassport/providedValue/GitcoinScoreProvidedValue.tsx index 5ff5a371a6..b1f2f0f072 100644 --- a/src/requirements/GitcoinPassport/providedValue/GitcoinScoreProvidedValue.tsx +++ b/src/requirements/GitcoinPassport/providedValue/GitcoinScoreProvidedValue.tsx @@ -1,4 +1,4 @@ -import { ProvidedValueDisplayProps } from "requirements" +import type { ProvidedValueDisplayProps } from "requirements/requirementProvidedValues" import { scorers } from "../components/Score" const GitcoinScoreProvidedValue = ({ requirement }: ProvidedValueDisplayProps) => diff --git a/src/requirements/Github/GithubForm.tsx b/src/requirements/Github/GithubForm.tsx index b1d2f9881c..a0b79239ff 100644 --- a/src/requirements/Github/GithubForm.tsx +++ b/src/requirements/Github/GithubForm.tsx @@ -7,7 +7,7 @@ import { } from "@chakra-ui/react" import ControlledSelect from "components/common/ControlledSelect" import { useFormContext, useFormState, useWatch } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" import GithubAccountAge from "./components/GithubAccountAge" import GithubAccountAgeRelative from "./components/GithubAccountAgeRelative" diff --git a/src/requirements/Github/components/GithubCommitCount.tsx b/src/requirements/Github/components/GithubCommitCount.tsx index ea3fd514b3..d773af17e7 100644 --- a/src/requirements/Github/components/GithubCommitCount.tsx +++ b/src/requirements/Github/components/GithubCommitCount.tsx @@ -10,7 +10,7 @@ import { } from "@chakra-ui/react" import AbsoluteMinMaxTimeFormControls from "components/common/AbsoluteMinMaxTimeFormControls" import { useController, useFormState } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" const GithubCommitCount = ({ baseFieldPath }: RequirementFormProps) => { diff --git a/src/requirements/Github/components/GithubCommitCountRelative.tsx b/src/requirements/Github/components/GithubCommitCountRelative.tsx index 103c16a292..f1f3195ea6 100644 --- a/src/requirements/Github/components/GithubCommitCountRelative.tsx +++ b/src/requirements/Github/components/GithubCommitCountRelative.tsx @@ -10,7 +10,7 @@ import { } from "@chakra-ui/react" import RelativeMinMaxTimeFormControls from "components/common/RelativeMinMaxTimeFormControls" import { useController, useFormState } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" const GithubCommitCountRelative = ({ baseFieldPath }: RequirementFormProps) => { diff --git a/src/requirements/Github/components/GithubStar.tsx b/src/requirements/Github/components/GithubStar.tsx index 37f87f60ad..d0c2709a43 100644 --- a/src/requirements/Github/components/GithubStar.tsx +++ b/src/requirements/Github/components/GithubStar.tsx @@ -1,6 +1,6 @@ import { FormControl, FormErrorMessage, FormLabel, Input } from "@chakra-ui/react" import { useController, useFormState } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" const GithubStar = ({ baseFieldPath }: RequirementFormProps) => { diff --git a/src/requirements/Guild/GuildForm.tsx b/src/requirements/Guild/GuildForm.tsx index 0f15b9fc89..e9af49efd7 100644 --- a/src/requirements/Guild/GuildForm.tsx +++ b/src/requirements/Guild/GuildForm.tsx @@ -2,9 +2,9 @@ import { Divider, FormControl, FormLabel, Stack } from "@chakra-ui/react" import ControlledSelect from "components/common/ControlledSelect" import FormErrorMessage from "components/common/FormErrorMessage" import { useFormContext, useWatch } from "react-hook-form" -import { RequirementFormProps, RequirementType } from "requirements" import GuildSelect from "requirements/common/GuildSelect" -import { PROVIDER_TYPES } from "requirements/requirements" +import { PROVIDER_TYPES } from "requirements/requirementProvidedValues" +import { RequirementFormProps, RequirementType } from "requirements/types" import parseFromObject from "utils/parseFromObject" import GuildAdmin from "./components/GuildAdmin" import MinGuilds from "./components/MinGuilds" diff --git a/src/requirements/Juicebox/JuiceboxForm.tsx b/src/requirements/Juicebox/JuiceboxForm.tsx index 6927507be0..6ae094183b 100644 --- a/src/requirements/Juicebox/JuiceboxForm.tsx +++ b/src/requirements/Juicebox/JuiceboxForm.tsx @@ -16,7 +16,7 @@ import OptionImage from "components/common/StyledSelect/components/CustomSelectO import useDebouncedState from "hooks/useDebouncedState" import { useMemo, useState } from "react" import { Controller, useFormContext, useWatch } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" import { useJuicebox, useJuiceboxProject } from "./hooks/useJuicebox" diff --git a/src/requirements/Lens/LensForm.tsx b/src/requirements/Lens/LensForm.tsx index 1eb1a182b5..3624262dcd 100644 --- a/src/requirements/Lens/LensForm.tsx +++ b/src/requirements/Lens/LensForm.tsx @@ -1,8 +1,8 @@ import { Divider, FormControl, FormLabel, Stack } from "@chakra-ui/react" import ControlledSelect from "components/common/ControlledSelect" import { useFormContext, useWatch } from "react-hook-form" -import { RequirementFormProps, RequirementType } from "requirements" -import { PROVIDER_TYPES } from "requirements/requirements" +import { PROVIDER_TYPES } from "requirements/requirementProvidedValues" +import { RequirementFormProps, RequirementType } from "requirements/types" import LensAction from "./components/LensAction" import LensPostInput from "./components/LensPostInput" import LensProfileSelect from "./components/LensProfileSelect" diff --git a/src/requirements/Lens/components/LensAction.tsx b/src/requirements/Lens/components/LensAction.tsx index fab0b1196f..6a09217e35 100644 --- a/src/requirements/Lens/components/LensAction.tsx +++ b/src/requirements/Lens/components/LensAction.tsx @@ -1,6 +1,6 @@ import { FormControl, FormLabel } from "@chakra-ui/react" import ControlledSelect from "components/common/ControlledSelect" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import { SelectOption } from "types" import LensPostInput from "./LensPostInput" diff --git a/src/requirements/Lens/components/LensPostInput.tsx b/src/requirements/Lens/components/LensPostInput.tsx index c9cf54212c..c9d66cb8b7 100644 --- a/src/requirements/Lens/components/LensPostInput.tsx +++ b/src/requirements/Lens/components/LensPostInput.tsx @@ -1,7 +1,7 @@ import { FormControl, FormLabel, Input } from "@chakra-ui/react" import FormErrorMessage from "components/common/FormErrorMessage" import { Controller, useFormContext } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" const LensPostInput = ({ baseFieldPath }: RequirementFormProps) => { diff --git a/src/requirements/Lens/components/LensProfileSelect.tsx b/src/requirements/Lens/components/LensProfileSelect.tsx index 308dcc6408..ed5ae4fbe6 100644 --- a/src/requirements/Lens/components/LensProfileSelect.tsx +++ b/src/requirements/Lens/components/LensProfileSelect.tsx @@ -4,7 +4,7 @@ import FormErrorMessage from "components/common/FormErrorMessage" import useDebouncedState from "hooks/useDebouncedState" import { useState } from "react" import { useFormContext, useWatch } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" import useLensProfile from "../hooks/useLensProfile" import useLensProfiles from "../hooks/useLensProfiles" diff --git a/src/requirements/Lens/components/LensReact.tsx b/src/requirements/Lens/components/LensReact.tsx index f17adc6d9e..26a65ffaaf 100644 --- a/src/requirements/Lens/components/LensReact.tsx +++ b/src/requirements/Lens/components/LensReact.tsx @@ -1,6 +1,6 @@ import { FormControl, FormLabel } from "@chakra-ui/react" import ControlledSelect from "components/common/ControlledSelect" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import { SelectOption } from "types" import LensPostInput from "./LensPostInput" diff --git a/src/requirements/Lens/components/LensTotalInput.tsx b/src/requirements/Lens/components/LensTotalInput.tsx index c1219000c5..e5fd22f4f9 100644 --- a/src/requirements/Lens/components/LensTotalInput.tsx +++ b/src/requirements/Lens/components/LensTotalInput.tsx @@ -9,7 +9,7 @@ import { } from "@chakra-ui/react" import FormErrorMessage from "components/common/FormErrorMessage" import { Controller, useFormContext, useWatch } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" const LensTotalInput = ({ baseFieldPath }: RequirementFormProps) => { diff --git a/src/requirements/Mirror/MirrorForm.tsx b/src/requirements/Mirror/MirrorForm.tsx index 7263eef82a..8e09b1780a 100644 --- a/src/requirements/Mirror/MirrorForm.tsx +++ b/src/requirements/Mirror/MirrorForm.tsx @@ -11,7 +11,7 @@ import { import FormErrorMessage from "components/common/FormErrorMessage" import OptionImage from "components/common/StyledSelect/components/CustomSelectOption/components/OptionImage" import { useController, useFormContext, useWatch } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" import ChainInfo from "../common/ChainInfo" import useMirrorEdition from "./hooks/useMirrorEdition" diff --git a/src/requirements/Nft/NftForm.tsx b/src/requirements/Nft/NftForm.tsx index c2e9e89053..6b3327e5cf 100644 --- a/src/requirements/Nft/NftForm.tsx +++ b/src/requirements/Nft/NftForm.tsx @@ -32,7 +32,7 @@ import { useFormContext, useWatch, } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import { SelectOption } from "types" import capitalize from "utils/capitalize" import parseFromObject from "utils/parseFromObject" @@ -84,8 +84,8 @@ const NftForm = ({ baseFieldPath, field }: RequirementFormProps): JSX.Element => field?.data?.attributes?.length ? "ATTRIBUTE" : field?.data?.ids?.length > 0 - ? "CUSTOM_ID" - : "AMOUNT" + ? "CUSTOM_ID" + : "AMOUNT" ) const { diff --git a/src/requirements/Nft/providedValue/NftAmountProvidedValue.tsx b/src/requirements/Nft/providedValue/NftAmountProvidedValue.tsx index 6a5c2f771f..325399070f 100644 --- a/src/requirements/Nft/providedValue/NftAmountProvidedValue.tsx +++ b/src/requirements/Nft/providedValue/NftAmountProvidedValue.tsx @@ -1,10 +1,10 @@ import { HStack, Text } from "@chakra-ui/react" import useGuild from "components/[guild]/hooks/useGuild" import DataBlock from "components/common/DataBlock" -import { ProvidedValueDisplayProps } from "requirements" +import type { ProvidedValueDisplayProps } from "requirements/requirementProvidedValues" import { GUILD_PIN_CONTRACTS } from "utils/guildCheckout/constants" -import useNftMetadata, { useNftMetadataWithTraits } from "../hooks/useNftMetadata" import { Chain } from "wagmiConfig/chains" +import useNftMetadata, { useNftMetadataWithTraits } from "../hooks/useNftMetadata" export function hasOnlyTypeProperty(obj) { const keys = Object.keys(obj) diff --git a/src/requirements/Noox/NooxForm.tsx b/src/requirements/Noox/NooxForm.tsx index e3e0a5ed25..a486a3cdd7 100644 --- a/src/requirements/Noox/NooxForm.tsx +++ b/src/requirements/Noox/NooxForm.tsx @@ -13,7 +13,7 @@ import { import FormErrorMessage from "components/common/FormErrorMessage" import OptionImage from "components/common/StyledSelect/components/CustomSelectOption/components/OptionImage" import { useController, useFormContext } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" import useNooxBadge, { NUMBER_REGEX } from "./hooks/useNooxBadge" diff --git a/src/requirements/Parallel/ParallelForm.tsx b/src/requirements/Parallel/ParallelForm.tsx index 0a727754d5..4cfd71aa2b 100644 --- a/src/requirements/Parallel/ParallelForm.tsx +++ b/src/requirements/Parallel/ParallelForm.tsx @@ -11,7 +11,7 @@ import { ArrowSquareOut } from "@phosphor-icons/react" import ControlledSelect from "components/common/ControlledSelect" import FormErrorMessage from "components/common/FormErrorMessage" import { Controller, useFormContext, useWatch } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" const typeOptions = [ diff --git a/src/requirements/Payment/PaymentForm.tsx b/src/requirements/Payment/PaymentForm.tsx index d95710e0e3..f6c3666400 100644 --- a/src/requirements/Payment/PaymentForm.tsx +++ b/src/requirements/Payment/PaymentForm.tsx @@ -4,7 +4,7 @@ import Button from "components/common/Button" import useTriggerNetworkChange from "hooks/useTriggerNetworkChange" import { useEffect } from "react" import { FormProvider, useForm, useFormContext, useWatch } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import { FEE_COLLECTOR_CONTRACT } from "utils/guildCheckout/constants" import { useAccount } from "wagmi" import { Chains } from "wagmiConfig/chains" diff --git a/src/requirements/Poap/PoapForm.tsx b/src/requirements/Poap/PoapForm.tsx index 0a348f4f86..ec8f77d47f 100644 --- a/src/requirements/Poap/PoapForm.tsx +++ b/src/requirements/Poap/PoapForm.tsx @@ -12,8 +12,8 @@ import OptionImage from "components/common/StyledSelect/components/CustomSelectO import useDebouncedState from "hooks/useDebouncedState" import { useMemo, useState } from "react" import { useFormContext, useWatch } from "react-hook-form" -import { RequirementFormProps } from "requirements" import { usePoap } from "requirements/Poap/hooks/usePoaps" +import { RequirementFormProps } from "requirements/types" import { PlatformType } from "types" import parseFromObject from "utils/parseFromObject" import ChainInfo from "../common/ChainInfo" diff --git a/src/requirements/Points/PointsForm.tsx b/src/requirements/Points/PointsForm.tsx index 66dce7feab..c708e3ebd0 100644 --- a/src/requirements/Points/PointsForm.tsx +++ b/src/requirements/Points/PointsForm.tsx @@ -3,8 +3,8 @@ import useGuild from "components/[guild]/hooks/useGuild" import ControlledSelect from "components/common/ControlledSelect" import FormErrorMessage from "components/common/FormErrorMessage" import { useController, useFormState, useWatch } from "react-hook-form" -import { RequirementFormProps, RequirementType } from "requirements" -import { PROVIDER_TYPES } from "requirements/requirements" +import { PROVIDER_TYPES } from "requirements/requirementProvidedValues" +import { RequirementFormProps, RequirementType } from "requirements/types" import parseFromObject from "utils/parseFromObject" import PointsAmount from "./components/PointsAmount" import PointsRank from "./components/PointsRank" diff --git a/src/requirements/Points/providedValue/PointsAmountProvidedValue.tsx b/src/requirements/Points/providedValue/PointsAmountProvidedValue.tsx index 61d300b861..3f230cc4a5 100644 --- a/src/requirements/Points/providedValue/PointsAmountProvidedValue.tsx +++ b/src/requirements/Points/providedValue/PointsAmountProvidedValue.tsx @@ -1,5 +1,5 @@ import useGuildPlatform from "components/[guild]/hooks/useGuildPlatform" -import { ProvidedValueDisplayProps } from "requirements" +import type { ProvidedValueDisplayProps } from "requirements/requirementProvidedValues" const PointsAmountProvidedValue = ({ requirement }: ProvidedValueDisplayProps) => { const { guildPlatform } = useGuildPlatform(requirement?.data?.guildPlatformId) diff --git a/src/requirements/Points/providedValue/PointsRankProvidedValue.tsx b/src/requirements/Points/providedValue/PointsRankProvidedValue.tsx index 618ba16ce1..1d4c1b17af 100644 --- a/src/requirements/Points/providedValue/PointsRankProvidedValue.tsx +++ b/src/requirements/Points/providedValue/PointsRankProvidedValue.tsx @@ -1,5 +1,5 @@ import useGuildPlatform from "components/[guild]/hooks/useGuildPlatform" -import { ProvidedValueDisplayProps } from "requirements" +import type { ProvidedValueDisplayProps } from "requirements/requirementProvidedValues" const PointsRankProvidedValue = ({ requirement }: ProvidedValueDisplayProps) => { const { guildPlatform } = useGuildPlatform(requirement?.data?.guildPlatformId) diff --git a/src/requirements/PolygonID/PolygonIDForm.tsx b/src/requirements/PolygonID/PolygonIDForm.tsx index 546c6f7958..aa86a13c6b 100644 --- a/src/requirements/PolygonID/PolygonIDForm.tsx +++ b/src/requirements/PolygonID/PolygonIDForm.tsx @@ -2,8 +2,8 @@ import { Divider, FormControl, FormLabel, Stack } from "@chakra-ui/react" import ControlledSelect from "components/common/ControlledSelect" import FormErrorMessage from "components/common/FormErrorMessage" import { useFormContext, useWatch } from "react-hook-form" -import { RequirementFormProps } from "requirements" import ChainPicker from "requirements/common/ChainPicker" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" import PolygonIDBasic from "./components/PolygonIDBasic" import PolygonIDQuery from "./components/PolygonIDQuery" diff --git a/src/requirements/PolygonID/components/PolygonIDBasic.tsx b/src/requirements/PolygonID/components/PolygonIDBasic.tsx index 48646b3206..a55ea732f3 100644 --- a/src/requirements/PolygonID/components/PolygonIDBasic.tsx +++ b/src/requirements/PolygonID/components/PolygonIDBasic.tsx @@ -1,4 +1,4 @@ -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import PolygonIDProofAge from "./PolygonIDProofAge" const PolygonIDBasic = ({ baseFieldPath }: RequirementFormProps) => ( diff --git a/src/requirements/PolygonID/components/PolygonIDProofAge.tsx b/src/requirements/PolygonID/components/PolygonIDProofAge.tsx index 66f722d2a4..df8e5d59cc 100644 --- a/src/requirements/PolygonID/components/PolygonIDProofAge.tsx +++ b/src/requirements/PolygonID/components/PolygonIDProofAge.tsx @@ -2,7 +2,7 @@ import { FormControl, FormLabel } from "@chakra-ui/react" import FormErrorMessage from "components/common/FormErrorMessage" import { ControlledRelativeTimeInput } from "components/common/RelativeTimeInput" import { useFormState } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" const PolygonIDProofAge = ({ baseFieldPath }: RequirementFormProps) => { diff --git a/src/requirements/PolygonID/components/PolygonIDQuery.tsx b/src/requirements/PolygonID/components/PolygonIDQuery.tsx index 6ebb733417..068a95bf3a 100644 --- a/src/requirements/PolygonID/components/PolygonIDQuery.tsx +++ b/src/requirements/PolygonID/components/PolygonIDQuery.tsx @@ -11,7 +11,7 @@ import { import { ArrowSquareOut } from "@phosphor-icons/react" import FormErrorMessage from "components/common/FormErrorMessage" import { Controller, useFormContext } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" import PolygonIDProofAge from "./PolygonIDProofAge" diff --git a/src/requirements/Rep3/Rep3Form.tsx b/src/requirements/Rep3/Rep3Form.tsx index 731eb99fa8..601500c914 100644 --- a/src/requirements/Rep3/Rep3Form.tsx +++ b/src/requirements/Rep3/Rep3Form.tsx @@ -11,7 +11,7 @@ import { } from "@chakra-ui/react" import FormErrorMessage from "components/common/FormErrorMessage" import { useController, useFormContext } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" const ADDRESS_REGEX = /^0x[A-F0-9]{40}$/i diff --git a/src/requirements/Snapshot/SnapshotForm.tsx b/src/requirements/Snapshot/SnapshotForm.tsx index 6032b88c21..7203fa7e4f 100644 --- a/src/requirements/Snapshot/SnapshotForm.tsx +++ b/src/requirements/Snapshot/SnapshotForm.tsx @@ -2,8 +2,8 @@ import { Divider, FormControl, FormLabel, Stack } from "@chakra-ui/react" import ControlledSelect from "components/common/ControlledSelect" import FormErrorMessage from "components/common/FormErrorMessage" import { useFormContext, useFormState, useWatch } from "react-hook-form" -import { RequirementFormProps, RequirementType } from "requirements" -import { PROVIDER_TYPES } from "requirements/requirements" +import { PROVIDER_TYPES } from "requirements/requirementProvidedValues" +import { RequirementFormProps, RequirementType } from "requirements/types" import parseFromObject from "utils/parseFromObject" import FollowSince from "./components/FollowSince" import MajorityVotes from "./components/MajorityVotes" diff --git a/src/requirements/Snapshot/components/FollowSince.tsx b/src/requirements/Snapshot/components/FollowSince.tsx index c9b844b8e9..bedaadda03 100644 --- a/src/requirements/Snapshot/components/FollowSince.tsx +++ b/src/requirements/Snapshot/components/FollowSince.tsx @@ -2,7 +2,7 @@ import { FormControl, FormLabel } from "@chakra-ui/react" import FormErrorMessage from "components/common/FormErrorMessage" import { ControlledTimestampInput } from "components/common/TimestampInput" import { useFormState } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" import SpaceSelect from "./SpaceSelect" diff --git a/src/requirements/Snapshot/components/MajorityVotes.tsx b/src/requirements/Snapshot/components/MajorityVotes.tsx index 19304958ac..a70e29f4ff 100644 --- a/src/requirements/Snapshot/components/MajorityVotes.tsx +++ b/src/requirements/Snapshot/components/MajorityVotes.tsx @@ -9,7 +9,7 @@ import { } from "@chakra-ui/react" import FormErrorMessage from "components/common/FormErrorMessage" import { useController, useFormState } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" const MajorityVotes = ({ baseFieldPath }: RequirementFormProps): JSX.Element => { diff --git a/src/requirements/Snapshot/components/ProposalSelect.tsx b/src/requirements/Snapshot/components/ProposalSelect.tsx index ff05f4bd47..1d8d1ef2dc 100644 --- a/src/requirements/Snapshot/components/ProposalSelect.tsx +++ b/src/requirements/Snapshot/components/ProposalSelect.tsx @@ -4,7 +4,7 @@ import CustomMenuList from "components/common/StyledSelect/components/CustomMenu import useDebouncedState from "hooks/useDebouncedState" import { useMemo, useState } from "react" import { useFormContext, useWatch } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import { SelectOption } from "types" import parseFromObject from "utils/parseFromObject" import useProposals from "../hooks/useProposals" @@ -64,8 +64,8 @@ const ProposalSelect = ({ baseFieldPath, onChange }: Props): JSX.Element => { !spaceId && debouncedSearch?.length < 3 ? "Start typing..." : isProposalsLoading - ? "Loading" - : "No results" + ? "Loading" + : "No results" } /> ), diff --git a/src/requirements/Snapshot/components/Proposals.tsx b/src/requirements/Snapshot/components/Proposals.tsx index 5f28a65892..c72a474d9d 100644 --- a/src/requirements/Snapshot/components/Proposals.tsx +++ b/src/requirements/Snapshot/components/Proposals.tsx @@ -11,7 +11,7 @@ import ControlledSelect from "components/common/ControlledSelect" import FormErrorMessage from "components/common/FormErrorMessage" import Switch from "components/common/Switch" import { useController, useFormState } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import { SelectOption } from "types" import parseFromObject from "utils/parseFromObject" import SpaceSelect from "./SpaceSelect" diff --git a/src/requirements/Snapshot/components/SpaceSelect.tsx b/src/requirements/Snapshot/components/SpaceSelect.tsx index e0bf0cd9a7..70391ce54a 100644 --- a/src/requirements/Snapshot/components/SpaceSelect.tsx +++ b/src/requirements/Snapshot/components/SpaceSelect.tsx @@ -4,7 +4,7 @@ import FormErrorMessage from "components/common/FormErrorMessage" import useDebouncedState from "hooks/useDebouncedState" import { useMemo, useState } from "react" import { useFormContext } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import useSWRImmutable from "swr/immutable" import { SelectOption } from "types" import parseFromObject from "utils/parseFromObject" diff --git a/src/requirements/Snapshot/components/Strategy/Strategy.tsx b/src/requirements/Snapshot/components/Strategy/Strategy.tsx index 2e001e4fea..bc568ad080 100644 --- a/src/requirements/Snapshot/components/Strategy/Strategy.tsx +++ b/src/requirements/Snapshot/components/Strategy/Strategy.tsx @@ -13,8 +13,8 @@ import { } from "@chakra-ui/react" import FormErrorMessage from "components/common/FormErrorMessage" import { Controller, useFormContext } from "react-hook-form" -import { RequirementFormProps } from "requirements" import ChainPicker from "requirements/common/ChainPicker" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" import { Chain, supportedChains } from "wagmiConfig/chains" import SpaceSelect from "../SpaceSelect" diff --git a/src/requirements/Snapshot/components/UserSince.tsx b/src/requirements/Snapshot/components/UserSince.tsx index 5a7ff0cab4..2415cf3633 100644 --- a/src/requirements/Snapshot/components/UserSince.tsx +++ b/src/requirements/Snapshot/components/UserSince.tsx @@ -2,7 +2,7 @@ import { FormControl, FormLabel } from "@chakra-ui/react" import FormErrorMessage from "components/common/FormErrorMessage" import { ControlledTimestampInput } from "components/common/TimestampInput" import { useFormState } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" const UserSince = ({ baseFieldPath }: RequirementFormProps): JSX.Element => { diff --git a/src/requirements/Snapshot/components/Votes.tsx b/src/requirements/Snapshot/components/Votes.tsx index ec28af5a65..70365f5c2c 100644 --- a/src/requirements/Snapshot/components/Votes.tsx +++ b/src/requirements/Snapshot/components/Votes.tsx @@ -9,7 +9,7 @@ import { } from "@chakra-ui/react" import FormErrorMessage from "components/common/FormErrorMessage" import { Controller, useFormContext } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" import ProposalSelect from "./ProposalSelect" import SpaceSelect from "./SpaceSelect" diff --git a/src/requirements/Snapshot/providedValue/ProposalsProvidedValue.tsx b/src/requirements/Snapshot/providedValue/ProposalsProvidedValue.tsx index bce0917fdf..b45e85fe49 100644 --- a/src/requirements/Snapshot/providedValue/ProposalsProvidedValue.tsx +++ b/src/requirements/Snapshot/providedValue/ProposalsProvidedValue.tsx @@ -1,5 +1,5 @@ import { HStack, Text } from "@chakra-ui/react" -import { ProvidedValueDisplayProps } from "requirements" +import type { ProvidedValueDisplayProps } from "requirements/requirementProvidedValues" import SnapshotSpaceLink from "../components/SnapshotSpaceLink" const ProposalsProvidedValue = ({ requirement }: ProvidedValueDisplayProps) => diff --git a/src/requirements/Snapshot/providedValue/VotesProvidedValue.tsx b/src/requirements/Snapshot/providedValue/VotesProvidedValue.tsx index ebf7f68943..dce9602b94 100644 --- a/src/requirements/Snapshot/providedValue/VotesProvidedValue.tsx +++ b/src/requirements/Snapshot/providedValue/VotesProvidedValue.tsx @@ -1,5 +1,5 @@ import { HStack, Text } from "@chakra-ui/react" -import { ProvidedValueDisplayProps } from "requirements" +import type { ProvidedValueDisplayProps } from "requirements/requirementProvidedValues" import SnapshotSpaceLink from "../components/SnapshotSpaceLink" const VotesProvidedValue = ({ requirement }: ProvidedValueDisplayProps) => diff --git a/src/requirements/Sound/SoundForm.tsx b/src/requirements/Sound/SoundForm.tsx index 99359d985c..1e7b4ee2d1 100644 --- a/src/requirements/Sound/SoundForm.tsx +++ b/src/requirements/Sound/SoundForm.tsx @@ -7,8 +7,8 @@ import { } from "@chakra-ui/react" import ControlledSelect from "components/common/ControlledSelect" import { useFormContext, useFormState, useWatch } from "react-hook-form" -import { RequirementFormProps, RequirementType } from "requirements" -import { PROVIDER_TYPES } from "requirements/requirements" +import { PROVIDER_TYPES } from "requirements/requirementProvidedValues" +import { RequirementFormProps, RequirementType } from "requirements/types" import parseFromObject from "utils/parseFromObject" import SoundArtistCollector from "./components/SoundArtistCollector" import SoundMinAmount from "./components/SoundMinAmount" diff --git a/src/requirements/Sound/components/SoundArtistCollector.tsx b/src/requirements/Sound/components/SoundArtistCollector.tsx index cf61f5c63f..714fa9ddaa 100644 --- a/src/requirements/Sound/components/SoundArtistCollector.tsx +++ b/src/requirements/Sound/components/SoundArtistCollector.tsx @@ -1,4 +1,4 @@ -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import SoundArtistSelect from "./SoundArtistSelect" import SoundEdition from "./SoundEditionSelect" diff --git a/src/requirements/Sound/components/SoundMinAmount.tsx b/src/requirements/Sound/components/SoundMinAmount.tsx index 7256dc8d83..8585ddf62c 100644 --- a/src/requirements/Sound/components/SoundMinAmount.tsx +++ b/src/requirements/Sound/components/SoundMinAmount.tsx @@ -1,5 +1,5 @@ -import { RequirementFormProps } from "requirements" import MinAmountInput from "requirements/Guild/components/MinAmountInput" +import { RequirementFormProps } from "requirements/types" const SoundMinAmount = ({ baseFieldPath }: RequirementFormProps) => ( diff --git a/src/requirements/Sound/components/SoundOwnASong.tsx b/src/requirements/Sound/components/SoundOwnASong.tsx index 9e872acbed..59f31102e4 100644 --- a/src/requirements/Sound/components/SoundOwnASong.tsx +++ b/src/requirements/Sound/components/SoundOwnASong.tsx @@ -2,7 +2,7 @@ import { FormControl, FormLabel } from "@chakra-ui/react" import ControlledSelect from "components/common/ControlledSelect" import FormErrorMessage from "components/common/FormErrorMessage" import { useFormContext, useWatch } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import useSWRImmutable from "swr/immutable" import parseFromObject from "utils/parseFromObject" import SoundArtistSelect from "./SoundArtistSelect" diff --git a/src/requirements/Sound/components/SoundTopCollector.tsx b/src/requirements/Sound/components/SoundTopCollector.tsx index 8c07090a53..e97800b1b9 100644 --- a/src/requirements/Sound/components/SoundTopCollector.tsx +++ b/src/requirements/Sound/components/SoundTopCollector.tsx @@ -9,7 +9,7 @@ import { } from "@chakra-ui/react" import FormErrorMessage from "components/common/FormErrorMessage" import { Controller, useFormContext } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" import SoundArtistSelect from "./SoundArtistSelect" diff --git a/src/requirements/Sound/providedValue/TopCollectorProvidedValue.tsx b/src/requirements/Sound/providedValue/TopCollectorProvidedValue.tsx index acd407bb08..4a7e7c30da 100644 --- a/src/requirements/Sound/providedValue/TopCollectorProvidedValue.tsx +++ b/src/requirements/Sound/providedValue/TopCollectorProvidedValue.tsx @@ -1,5 +1,5 @@ import { HStack, Text } from "@chakra-ui/react" -import { ProvidedValueDisplayProps } from "requirements" +import type { ProvidedValueDisplayProps } from "requirements/requirementProvidedValues" import useSWRImmutable from "swr/immutable" import { ArtistLink } from "../SoundRequirement" diff --git a/src/requirements/Token/TokenForm.tsx b/src/requirements/Token/TokenForm.tsx index ccf226e061..7ba81190fb 100644 --- a/src/requirements/Token/TokenForm.tsx +++ b/src/requirements/Token/TokenForm.tsx @@ -2,8 +2,8 @@ import { Stack } from "@chakra-ui/react" import useTokenData from "hooks/useTokenData" import { useEffect } from "react" import { useFormContext, useWatch } from "react-hook-form" -import { RequirementFormProps } from "requirements" import TokenPicker from "requirements/common/TokenPicker" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" import ChainPicker from "../common/ChainPicker" import MinMaxAmount from "../common/MinMaxAmount" diff --git a/src/requirements/Token/providedValue/TokenProvidedValue.tsx b/src/requirements/Token/providedValue/TokenProvidedValue.tsx index 3443843b02..7a5185afb4 100644 --- a/src/requirements/Token/providedValue/TokenProvidedValue.tsx +++ b/src/requirements/Token/providedValue/TokenProvidedValue.tsx @@ -1,7 +1,7 @@ import { HStack, Text, useColorModeValue } from "@chakra-ui/react" import RequirementChainIndicator from "components/[guild]/Requirements/components/RequirementChainIndicator" import useTokenData from "hooks/useTokenData" -import { ProvidedValueDisplayProps } from "requirements" +import type { ProvidedValueDisplayProps } from "requirements/requirementProvidedValues" import { NULL_ADDRESS } from "utils/guildCheckout/constants" import { Chain } from "wagmiConfig/chains" diff --git a/src/requirements/Twitter/TwitterForm.tsx b/src/requirements/Twitter/TwitterForm.tsx index 27241e4e54..9550a735b0 100644 --- a/src/requirements/Twitter/TwitterForm.tsx +++ b/src/requirements/Twitter/TwitterForm.tsx @@ -11,8 +11,8 @@ import { } from "@chakra-ui/react" import ControlledSelect from "components/common/ControlledSelect" import { useFormContext, useFormState, useWatch } from "react-hook-form" -import { RequirementFormProps, RequirementType } from "requirements" -import { PROVIDER_TYPES } from "requirements/requirements" +import { PROVIDER_TYPES } from "requirements/requirementProvidedValues" +import { RequirementFormProps, RequirementType } from "requirements/types" import parseFromObject from "utils/parseFromObject" import TwitterAccountAge from "./components/TwitterAccountAge" import TwitterAccountAgeRelative from "./components/TwitterAccountAgeRelative" diff --git a/src/requirements/Twitter/components/TwitterAccountAge.tsx b/src/requirements/Twitter/components/TwitterAccountAge.tsx index e24ae550cf..0cd7fa7ed0 100644 --- a/src/requirements/Twitter/components/TwitterAccountAge.tsx +++ b/src/requirements/Twitter/components/TwitterAccountAge.tsx @@ -2,8 +2,8 @@ import { FormControl, FormLabel } from "@chakra-ui/react" import FormErrorMessage from "components/common/FormErrorMessage" import { ControlledTimestampInput } from "components/common/TimestampInput" import { useFormState } from "react-hook-form" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" -import { RequirementFormProps } from "../../index" const TwitterAccountAge = ({ baseFieldPath }: RequirementFormProps): JSX.Element => { const { errors } = useFormState() diff --git a/src/requirements/Twitter/components/TwitterAccountAgeRelative.tsx b/src/requirements/Twitter/components/TwitterAccountAgeRelative.tsx index 3dda4bb83d..335cf3421b 100644 --- a/src/requirements/Twitter/components/TwitterAccountAgeRelative.tsx +++ b/src/requirements/Twitter/components/TwitterAccountAgeRelative.tsx @@ -2,8 +2,8 @@ import { FormControl, FormLabel } from "@chakra-ui/react" import FormErrorMessage from "components/common/FormErrorMessage" import { ControlledRelativeTimeInput } from "components/common/RelativeTimeInput" import { useFormState } from "react-hook-form" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" -import { RequirementFormProps } from "../../index" const TwitterAccountAgeRelative = ({ baseFieldPath, diff --git a/src/requirements/Twitter/components/TwitterAccountVerified.tsx b/src/requirements/Twitter/components/TwitterAccountVerified.tsx index 3fc4aadcd4..3120ccd331 100644 --- a/src/requirements/Twitter/components/TwitterAccountVerified.tsx +++ b/src/requirements/Twitter/components/TwitterAccountVerified.tsx @@ -1,6 +1,6 @@ import { FormControl, FormLabel } from "@chakra-ui/react" import ControlledSelect from "components/common/ControlledSelect" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import { SelectOption } from "types" type ValueType = "any" | "blue" | "business" | "government" diff --git a/src/requirements/Twitter/components/TwitterListInput.tsx b/src/requirements/Twitter/components/TwitterListInput.tsx index f0531d3600..ea3c752c01 100644 --- a/src/requirements/Twitter/components/TwitterListInput.tsx +++ b/src/requirements/Twitter/components/TwitterListInput.tsx @@ -6,7 +6,7 @@ import { Input, } from "@chakra-ui/react" import { useController, useFormState } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" const TwitterListInput = ({ baseFieldPath }: RequirementFormProps) => { diff --git a/src/requirements/Twitter/components/TwitterMinimumCount.tsx b/src/requirements/Twitter/components/TwitterMinimumCount.tsx index 2b8ecbfa7d..47af0c30ff 100644 --- a/src/requirements/Twitter/components/TwitterMinimumCount.tsx +++ b/src/requirements/Twitter/components/TwitterMinimumCount.tsx @@ -1,5 +1,5 @@ -import { RequirementFormProps } from "requirements" import MinMaxAmount from "requirements/common/MinMaxAmount" +import { RequirementFormProps } from "requirements/types" const TwitterMinimumCount = ({ baseFieldPath, field }: RequirementFormProps) => ( { diff --git a/src/requirements/Twitter/components/TwitterTweetInput.tsx b/src/requirements/Twitter/components/TwitterTweetInput.tsx index d888205bb3..e13fa5382e 100644 --- a/src/requirements/Twitter/components/TwitterTweetInput.tsx +++ b/src/requirements/Twitter/components/TwitterTweetInput.tsx @@ -6,7 +6,7 @@ import { Input, } from "@chakra-ui/react" import { useController, useFormState } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" const TwitterTweetInput = ({ baseFieldPath }: RequirementFormProps) => { diff --git a/src/requirements/Twitter/components/TwitterUserInput.tsx b/src/requirements/Twitter/components/TwitterUserInput.tsx index 4baa2318d4..537a007de6 100644 --- a/src/requirements/Twitter/components/TwitterUserInput.tsx +++ b/src/requirements/Twitter/components/TwitterUserInput.tsx @@ -12,7 +12,7 @@ import { } from "@chakra-ui/react" import useDebouncedState from "hooks/useDebouncedState" import { useController, useFormState } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import useSWRImmutable from "swr/immutable" import parseFromObject from "utils/parseFromObject" diff --git a/src/requirements/Uniswap/UniswapForm.tsx b/src/requirements/Uniswap/UniswapForm.tsx index 7a3ce42467..6aa3417110 100644 --- a/src/requirements/Uniswap/UniswapForm.tsx +++ b/src/requirements/Uniswap/UniswapForm.tsx @@ -18,10 +18,10 @@ import ControlledSelect from "components/common/ControlledSelect" import FormErrorMessage from "components/common/FormErrorMessage" import { useCallback, useState } from "react" import { useFormContext, useWatch } from "react-hook-form" -import { RequirementFormProps } from "requirements" import ChainPicker from "requirements/common/ChainPicker" import MinMaxAmount from "requirements/common/MinMaxAmount" import TokenPicker from "requirements/common/TokenPicker" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" import { CHAIN_CONFIG, Chains } from "wagmiConfig/chains" import { usePairOfTokenId } from "./hooks/usePairOfTokenId" @@ -90,7 +90,7 @@ const UniswapForm = ({ const setTokensAndFee = ([t0, t1, fee]: [ `0x${string}`, `0x${string}`, - number + number, ]) => { setValue(`${baseFieldPath}.data.token0`, t0, { shouldDirty: true }) setValue(`${baseFieldPath}.data.token1`, t1, { shouldDirty: true }) diff --git a/src/requirements/Uniswap/providedValue/PositionsProvidedValue.tsx b/src/requirements/Uniswap/providedValue/PositionsProvidedValue.tsx index 75b5da6f0f..2bb2e7387a 100644 --- a/src/requirements/Uniswap/providedValue/PositionsProvidedValue.tsx +++ b/src/requirements/Uniswap/providedValue/PositionsProvidedValue.tsx @@ -1,6 +1,6 @@ import { HStack, Skeleton, Text } from "@chakra-ui/react" import DataBlock from "components/common/DataBlock" -import { ProvidedValueDisplayProps } from "requirements" +import type { ProvidedValueDisplayProps } from "requirements/requirementProvidedValues" import { Chains } from "wagmiConfig/chains" import { useSymbolsOfPair } from "../hooks/useSymbolsOfPair" diff --git a/src/requirements/Unlock/UnlockForm.tsx b/src/requirements/Unlock/UnlockForm.tsx index 7534898fbf..4bd36d9d28 100644 --- a/src/requirements/Unlock/UnlockForm.tsx +++ b/src/requirements/Unlock/UnlockForm.tsx @@ -10,7 +10,7 @@ import FormErrorMessage from "components/common/FormErrorMessage" import OptionImage from "components/common/StyledSelect/components/CustomSelectOption/components/OptionImage" import { useMemo } from "react" import { useFormContext, useWatch } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" import { Chain } from "wagmiConfig/chains" import ChainPicker from "../common/ChainPicker" diff --git a/src/requirements/VisitLink/VisitLinkForm.tsx b/src/requirements/VisitLink/VisitLinkForm.tsx index de6bed7183..5788ccc027 100644 --- a/src/requirements/VisitLink/VisitLinkForm.tsx +++ b/src/requirements/VisitLink/VisitLinkForm.tsx @@ -12,7 +12,7 @@ import FormErrorMessage from "components/common/FormErrorMessage" import useDebouncedState from "hooks/useDebouncedState" import { LinkMetadata } from "pages/api/link-metadata" import { useController, useFormContext } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import useSWRImmutable from "swr/immutable" import parseFromObject from "utils/parseFromObject" diff --git a/src/requirements/WalletActivity/WalletActivityForm.tsx b/src/requirements/WalletActivity/WalletActivityForm.tsx index 421453f647..51945ea184 100644 --- a/src/requirements/WalletActivity/WalletActivityForm.tsx +++ b/src/requirements/WalletActivity/WalletActivityForm.tsx @@ -2,9 +2,9 @@ import { FormControl, FormLabel, Stack } from "@chakra-ui/react" import ControlledSelect from "components/common/ControlledSelect" import FormErrorMessage from "components/common/FormErrorMessage" import { useFormContext, useWatch } from "react-hook-form" -import { RequirementFormProps, RequirementType } from "requirements" import ChainPicker from "requirements/common/ChainPicker" -import { PROVIDER_TYPES } from "requirements/requirements" +import { PROVIDER_TYPES } from "requirements/requirementProvidedValues" +import { RequirementFormProps, RequirementType } from "requirements/types" import { SelectOption } from "types" import parseFromObject from "utils/parseFromObject" import { Chain } from "wagmiConfig/chains" diff --git a/src/requirements/WalletActivity/components/CovalentContractDeploy.tsx b/src/requirements/WalletActivity/components/CovalentContractDeploy.tsx index 32fb15e429..9104dcd3bb 100644 --- a/src/requirements/WalletActivity/components/CovalentContractDeploy.tsx +++ b/src/requirements/WalletActivity/components/CovalentContractDeploy.tsx @@ -1,5 +1,5 @@ import AbsoluteMinMaxTimeFormControls from "components/common/AbsoluteMinMaxTimeFormControls" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import TxCountFormControl from "./TxCountFormControl" const CovalentContractDeploy = ({ diff --git a/src/requirements/WalletActivity/components/CovalentContractDeployRelative.tsx b/src/requirements/WalletActivity/components/CovalentContractDeployRelative.tsx index 1061c1818e..17d2d68385 100644 --- a/src/requirements/WalletActivity/components/CovalentContractDeployRelative.tsx +++ b/src/requirements/WalletActivity/components/CovalentContractDeployRelative.tsx @@ -1,5 +1,5 @@ import RelativeMinMaxTimeFormControls from "components/common/RelativeMinMaxTimeFormControls" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import TxCountFormControl from "./TxCountFormControl" const CovalentContractDeployRelative = ({ diff --git a/src/requirements/WalletActivity/components/CovalentFirstTx.tsx b/src/requirements/WalletActivity/components/CovalentFirstTx.tsx index 913ec0af63..a28d125640 100644 --- a/src/requirements/WalletActivity/components/CovalentFirstTx.tsx +++ b/src/requirements/WalletActivity/components/CovalentFirstTx.tsx @@ -1,5 +1,5 @@ import AbsoluteMinMaxTimeFormControls from "components/common/AbsoluteMinMaxTimeFormControls" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" const CovalentFirstTx = ({ baseFieldPath }: RequirementFormProps): JSX.Element => ( { const tagBg = useColorModeValue("blackAlpha.100", "blackAlpha.300") diff --git a/src/requirements/WalletActivity/providedValue/TxCountProvidedValue.tsx b/src/requirements/WalletActivity/providedValue/TxCountProvidedValue.tsx index 98a038ce84..034942bdc8 100644 --- a/src/requirements/WalletActivity/providedValue/TxCountProvidedValue.tsx +++ b/src/requirements/WalletActivity/providedValue/TxCountProvidedValue.tsx @@ -1,6 +1,6 @@ import { HStack, Text, useColorModeValue } from "@chakra-ui/react" import RequirementChainIndicator from "components/[guild]/Requirements/components/RequirementChainIndicator" -import { ProvidedValueDisplayProps } from "requirements" +import type { ProvidedValueDisplayProps } from "requirements/requirementProvidedValues" const TxCountProvidedValue = ({ requirement }: ProvidedValueDisplayProps) => { const tagBg = useColorModeValue("blackAlpha.100", "blackAlpha.300") diff --git a/src/requirements/Web3Inbox/Web3InboxForm.tsx b/src/requirements/Web3Inbox/Web3InboxForm.tsx index 272d43ad82..8259c323a5 100644 --- a/src/requirements/Web3Inbox/Web3InboxForm.tsx +++ b/src/requirements/Web3Inbox/Web3InboxForm.tsx @@ -8,7 +8,7 @@ import ControlledSelect from "components/common/ControlledSelect" import FormErrorMessage from "components/common/FormErrorMessage" import OptionImage from "components/common/StyledSelect/components/CustomSelectOption/components/OptionImage" import { useFormState, useWatch } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import parseFromObject from "utils/parseFromObject" export const WEB3INBOX_APPS = ["GUILD", "WEB3INBOX", "SHEFI"] as const diff --git a/src/requirements/Yup/YupForm.tsx b/src/requirements/Yup/YupForm.tsx index cf66e9e0fb..7022d9d843 100644 --- a/src/requirements/Yup/YupForm.tsx +++ b/src/requirements/Yup/YupForm.tsx @@ -11,7 +11,7 @@ import { import ControlledSelect from "components/common/ControlledSelect" import FormErrorMessage from "components/common/FormErrorMessage" import { Controller, useFormContext } from "react-hook-form" -import { RequirementFormProps } from "requirements" +import { RequirementFormProps } from "requirements/types" import { SelectOption } from "types" import parseFromObject from "utils/parseFromObject" import useYupAdapters from "./hooks/useYupAdapters" diff --git a/src/requirements/index.ts b/src/requirements/index.ts index 4e50165d20..73a31c4db0 100644 --- a/src/requirements/index.ts +++ b/src/requirements/index.ts @@ -1,10 +1,5 @@ -import { Schemas } from "@guildxyz/types" -import { Icon } from "@phosphor-icons/react" -import { RequirementProps } from "components/[guild]/Requirements/components/Requirement" -import { ComponentType } from "react" -import { UseControllerProps } from "react-hook-form" -import { Requirement } from "types" import REQUIREMENTS_DATA from "./requirements" +import { RequirementData, RequirementType } from "./types" // transform it to an object with types as keys so we don't have to use .find() every time const REQUIREMENTS: Record = @@ -13,31 +8,5 @@ const REQUIREMENTS: Record = {} as any ) -export type ProvidedValueDisplayProps = { - requirement: Partial -} - -export type RequirementType = Schemas["Requirement"]["type"] - -export type RequirementFormProps = { - baseFieldPath: string - field?: Requirement - addRequirement?: () => void - setOnCloseAttemptToast?: (msg: string | boolean) => void - providerTypesOnly?: boolean -} - -export type RequirementData = { - icon: string | Icon - name: string - readonly types: string[] - disabled?: boolean - isPlatform?: boolean - customNameRules?: UseControllerProps["rules"] - isNegatable?: boolean - displayComponent: ComponentType - formComponent: ComponentType -} - export default REQUIREMENTS export { REQUIREMENTS_DATA } diff --git a/src/requirements/requirementDisplayComponents.ts b/src/requirements/requirementDisplayComponents.ts new file mode 100644 index 0000000000..9a6f2a952e --- /dev/null +++ b/src/requirements/requirementDisplayComponents.ts @@ -0,0 +1,377 @@ +import type { RequirementProps } from "components/[guild]/Requirements/components/Requirement" +import dynamic from "next/dynamic" +import { ComponentType } from "react" +import { RequirementType } from "./types" + +export const REQUIREMENT_DISPLAY_COMPONENTS = { + FREE: dynamic(() => import("requirements/Free/FreeRequirement")), + ERC721: dynamic(() => import("requirements/Nft/NftRequirement")), + ERC1155: dynamic( + () => import("requirements/Nft/NftRequirement") + ), + NOUNS: dynamic(() => import("requirements/Nft/NftRequirement")), + COIN: dynamic( + () => import("requirements/Token/TokenRequirement") + ), + ERC20: dynamic( + () => import("requirements/Token/TokenRequirement") + ), + ALLOWLIST: dynamic( + () => import("requirements/Allowlist/AllowlistRequirement") + ), + ALLOWLIST_EMAIL: dynamic( + () => import("requirements/Allowlist/AllowlistRequirement") + ), + GUILD_SNAPSHOT: dynamic( + () => import("requirements/Airdrop/AirdropRequirement") + ), + PAYMENT: dynamic( + () => import("requirements/Payment/PaymentRequirement") + ), + CONTRACT: dynamic( + () => import("requirements/ContractState/ContractStateRequirement") + ), + // TODO: TX_VALUE requirements are deprecated + COVALENT_TX_VALUE: dynamic( + () => import("requirements/WalletActivity/WalletActivityRequirement") + ), + COVALENT_TX_VALUE_RELATIVE: dynamic( + () => import("requirements/WalletActivity/WalletActivityRequirement") + ), + COVALENT_FIRST_TX: dynamic( + () => import("requirements/WalletActivity/WalletActivityRequirement") + ), + COVALENT_FIRST_TX_RELATIVE: dynamic( + () => import("requirements/WalletActivity/WalletActivityRequirement") + ), + COVALENT_CONTRACT_DEPLOY: dynamic( + () => import("requirements/WalletActivity/WalletActivityRequirement") + ), + COVALENT_CONTRACT_DEPLOY_RELATIVE: dynamic( + () => import("requirements/WalletActivity/WalletActivityRequirement") + ), + COVALENT_TX_COUNT: dynamic( + () => import("requirements/WalletActivity/WalletActivityRequirement") + ), + COVALENT_TX_COUNT_RELATIVE: dynamic( + () => import("requirements/WalletActivity/WalletActivityRequirement") + ), + ALCHEMY_TX_VALUE: dynamic( + () => import("requirements/WalletActivity/WalletActivityRequirement") + ), + ALCHEMY_TX_VALUE_RELATIVE: dynamic( + () => import("requirements/WalletActivity/WalletActivityRequirement") + ), + ALCHEMY_FIRST_TX: dynamic( + () => import("requirements/WalletActivity/WalletActivityRequirement") + ), + ALCHEMY_FIRST_TX_RELATIVE: dynamic( + () => import("requirements/WalletActivity/WalletActivityRequirement") + ), + ALCHEMY_CONTRACT_DEPLOY: dynamic( + () => import("requirements/WalletActivity/WalletActivityRequirement") + ), + ALCHEMY_CONTRACT_DEPLOY_RELATIVE: dynamic( + () => import("requirements/WalletActivity/WalletActivityRequirement") + ), + ALCHEMY_TX_COUNT: dynamic( + () => import("requirements/WalletActivity/WalletActivityRequirement") + ), + ALCHEMY_TX_COUNT_RELATIVE: dynamic( + () => import("requirements/WalletActivity/WalletActivityRequirement") + ), + CAPTCHA: dynamic( + () => import("requirements/Captcha/CaptchaRequirement") + ), + GUILD_ROLE: dynamic( + () => import("requirements/Guild/GuildRequirement") + ), + GUILD_ROLE_RELATIVE: dynamic( + () => import("requirements/Guild/GuildRequirement") + ), + GUILD_MINGUILDS: dynamic( + () => import("requirements/Guild/GuildRequirement") + ), + GUILD_ADMIN: dynamic( + () => import("requirements/Guild/GuildRequirement") + ), + GUILD_USER_SINCE: dynamic( + () => import("requirements/Guild/GuildRequirement") + ), + GUILD_MEMBER: dynamic( + () => import("requirements/Guild/GuildRequirement") + ), + POINTS_AMOUNT: dynamic( + () => import("requirements/Points/PointsRequirement") + ), + POINTS_TOTAL_AMOUNT: dynamic( + () => import("requirements/Points/PointsRequirement") + ), + POINTS_RANK: dynamic( + () => import("requirements/Points/PointsRequirement") + ), + LINK_VISIT: dynamic( + () => import("requirements/VisitLink/VisitLinkRequirement") + ), + EMAIL_VERIFIED: dynamic( + () => import("requirements/Email/EmailRequirement") + ), + EMAIL_DOMAIN: dynamic( + () => import("requirements/Email/EmailRequirement") + ), + FORM_SUBMISSION: dynamic( + () => import("requirements/Form/FormRequirement") + ), + // TODO: this is a deprecated requirement + FORM_APPROVAL: dynamic( + () => import("requirements/Form/FormRequirement") + ), + TWITTER_ACCOUNT_AGE: dynamic( + () => import("requirements/Twitter/TwitterRequirement") + ), + TWITTER_ACCOUNT_AGE_RELATIVE: dynamic( + () => import("requirements/Twitter/TwitterRequirement") + ), + TWITTER_ACCOUNT_PROTECTED: dynamic( + () => import("requirements/Twitter/TwitterRequirement") + ), + TWITTER_ACCOUNT_VERIFIED: dynamic( + () => import("requirements/Twitter/TwitterRequirement") + ), + TWITTER_BIO: dynamic( + () => import("requirements/Twitter/TwitterRequirement") + ), + TWITTER_FOLLOW: dynamic( + () => import("requirements/Twitter/TwitterRequirement") + ), + TWITTER_FOLLOWED_BY: dynamic( + () => import("requirements/Twitter/TwitterRequirement") + ), + TWITTER_FOLLOWER_COUNT: dynamic( + () => import("requirements/Twitter/TwitterRequirement") + ), + TWITTER_FOLLOWING_COUNT: dynamic( + () => import("requirements/Twitter/TwitterRequirement") + ), + TWITTER_FOLLOW_V2: dynamic( + () => import("requirements/Twitter/TwitterRequirement") + ), + TWITTER_LIKE: dynamic( + () => import("requirements/Twitter/TwitterRequirement") + ), + TWITTER_LIKE_COUNT: dynamic( + () => import("requirements/Twitter/TwitterRequirement") + ), + TWITTER_LIKE_V2: dynamic( + () => import("requirements/Twitter/TwitterRequirement") + ), + TWITTER_LIST_MEMBER: dynamic( + () => import("requirements/Twitter/TwitterRequirement") + ), + TWITTER_NAME: dynamic( + () => import("requirements/Twitter/TwitterRequirement") + ), + TWITTER_RETWEET: dynamic( + () => import("requirements/Twitter/TwitterRequirement") + ), + TWITTER_RETWEET_V2: dynamic( + () => import("requirements/Twitter/TwitterRequirement") + ), + TWITTER_TWEET_COUNT: dynamic( + () => import("requirements/Twitter/TwitterRequirement") + ), + // TODO: this is a deprecated requirement + TWITTER_LIST_FOLLOW: dynamic( + () => import("requirements/Twitter/TwitterRequirement") + ), + GITHUB_STARRING: dynamic( + () => import("requirements/Github/GithubRequirement") + ), + GITHUB_ACCOUNT_AGE: dynamic( + () => import("requirements/Github/GithubRequirement") + ), + GITHUB_ACCOUNT_AGE_RELATIVE: dynamic( + () => import("requirements/Github/GithubRequirement") + ), + GITHUB_COMMIT_COUNT: dynamic( + () => import("requirements/Github/GithubRequirement") + ), + GITHUB_COMMIT_COUNT_RELATIVE: dynamic( + () => import("requirements/Github/GithubRequirement") + ), + DISCORD_ROLE: dynamic( + () => import("requirements/Discord/DiscordRequirement") + ), + DISCORD_JOIN: dynamic( + () => import("requirements/Discord/DiscordRequirement") + ), + DISCORD_JOIN_FROM_NOW: dynamic( + () => import("requirements/Discord/DiscordRequirement") + ), + DISCORD_MEMBER_SINCE: dynamic( + () => import("requirements/Discord/DiscordRequirement") + ), + COINBASE_EAS_ATTESTED_BY: dynamic( + () => import("requirements/CoinbaseEAS/CoinbaseEASRequirement") + ), + UNISWAP_V3_POSITIONS: dynamic( + () => import("requirements/Uniswap/UniswapRequirement") + ), + POLYGON_ID_BASIC: dynamic( + () => import("requirements/PolygonID/PolygonIDRequirement") + ), + POLYGON_ID_QUERY: dynamic( + () => import("requirements/PolygonID/PolygonIDRequirement") + ), + GITCOIN_PASS: dynamic( + () => import("requirements/GitcoinPassport/GitcoinPassportRequirement") + ), + GITCOIN_STAMP: dynamic( + () => import("requirements/GitcoinPassport/GitcoinPassportRequirement") + ), + GITCOIN_SCORE: dynamic( + () => import("requirements/GitcoinPassport/GitcoinPassportRequirement") + ), + POAP: dynamic(() => import("requirements/Poap/PoapRequirement")), + GITPOAP: dynamic( + () => import("requirements/GitPoap/GitPoapRequirement") + ), + EAS_ATTEST: dynamic( + () => import("requirements/EthereumAttestation/EthereumAttestationRequirement") + ), + EAS_ATTESTED_BY: dynamic( + () => import("requirements/EthereumAttestation/EthereumAttestationRequirement") + ), + FARCASTER_PROFILE: dynamic( + () => import("requirements/Farcaster/FarcasterRequirement") + ), + FARCASTER_TOTAL_FOLLOWERS: dynamic( + () => import("requirements/Farcaster/FarcasterRequirement") + ), + FARCASTER_FOLLOW: dynamic( + () => import("requirements/Farcaster/FarcasterRequirement") + ), + FARCASTER_FOLLOW_CHANNEL: dynamic( + () => import("requirements/Farcaster/FarcasterRequirement") + ), + FARCASTER_FOLLOWED_BY: dynamic( + () => import("requirements/Farcaster/FarcasterRequirement") + ), + FARCASTER_LIKE: dynamic( + () => import("requirements/Farcaster/FarcasterRequirement") + ), + FARCASTER_RECAST: dynamic( + () => import("requirements/Farcaster/FarcasterRequirement") + ), + FARCASTER_USERNAME: dynamic( + () => import("requirements/Farcaster/FarcasterRequirement") + ), + FARCASTER_BIO: dynamic( + () => import("requirements/Farcaster/FarcasterRequirement") + ), + LENS_PROFILE: dynamic( + () => import("requirements/Lens/LensRequirement") + ), + LENS_FOLLOW: dynamic( + () => import("requirements/Lens/LensRequirement") + ), + LENS_REACT: dynamic( + () => import("requirements/Lens/LensRequirement") + ), + LENS_COLLECT: dynamic( + () => import("requirements/Lens/LensRequirement") + ), + LENS_ACTION: dynamic( + () => import("requirements/Lens/LensRequirement") + ), + LENS_TOTAL_FOLLOWERS: dynamic( + () => import("requirements/Lens/LensRequirement") + ), + LENS_TOTAL_POSTS: dynamic( + () => import("requirements/Lens/LensRequirement") + ), + LENS_FOLLOWED_BY: dynamic( + () => import("requirements/Lens/LensRequirement") + ), + WEB3INBOX_SUBSCRIBERS: dynamic( + () => import("requirements/Web3Inbox/Web3InboxRequirement") + ), + GALAXY: dynamic( + () => import("requirements/Galaxy/GalaxyRequirement") + ), + GALAXY_PARTICIPATION: dynamic( + () => import("requirements/Galaxy/GalaxyRequirement") + ), + SNAPSHOT_STRATEGY: dynamic( + () => import("requirements/Snapshot/SnapshotRequirement") + ), + SNAPSHOT_SPACE_ADMIN: dynamic( + () => import("requirements/Snapshot/SnapshotRequirement") + ), + SNAPSHOT_SPACE_AUTHOR: dynamic( + () => import("requirements/Snapshot/SnapshotRequirement") + ), + SNAPSHOT_FOLLOW: dynamic( + () => import("requirements/Snapshot/SnapshotRequirement") + ), + SNAPSHOT_FOLLOW_SINCE: dynamic( + () => import("requirements/Snapshot/SnapshotRequirement") + ), + SNAPSHOT_USER_SINCE: dynamic( + () => import("requirements/Snapshot/SnapshotRequirement") + ), + SNAPSHOT_VOTES: dynamic( + () => import("requirements/Snapshot/SnapshotRequirement") + ), + SNAPSHOT_PROPOSALS: dynamic( + () => import("requirements/Snapshot/SnapshotRequirement") + ), + SNAPSHOT_MAJORITY_VOTES: dynamic( + () => import("requirements/Snapshot/SnapshotRequirement") + ), + MIRROR_COLLECT: dynamic( + () => import("requirements/Mirror/MirrorRequirement") + ), + SOUND_ARTIST_BACKED: dynamic( + () => import("requirements/Sound/SoundRequirement") + ), + SOUND_COLLECTED: dynamic( + () => import("requirements/Sound/SoundRequirement") + ), + SOUND_ARTIST: dynamic( + () => import("requirements/Sound/SoundRequirement") + ), + SOUND_TOP_COLLECTOR: dynamic( + () => import("requirements/Sound/SoundRequirement") + ), + SOUND_NFTS: dynamic( + () => import("requirements/Sound/SoundRequirement") + ), + DISCO: dynamic( + () => import("requirements/Disco/DiscoRequirement") + ), + UNLOCK: dynamic( + () => import("requirements/Unlock/UnlockRequirement") + ), + JUICEBOX: dynamic( + () => import("requirements/Juicebox/JuiceboxRequirement") + ), + FUEL_BALANCE: dynamic( + () => import("requirements/Fuel/FuelRequirement") + ), + FUEL_TRANSACTIONS: dynamic( + () => import("requirements/Fuel/FuelRequirement") + ), + NOOX: dynamic(() => import("requirements/Noox/NooxRequirement")), + YUP: dynamic(() => import("requirements/Yup/YupRequirement")), + REP3: dynamic(() => import("requirements/Rep3/Rep3Requirement")), + PARALLEL_ID: dynamic( + () => import("requirements/Parallel/ParallelRequirement") + ), + PARALLEL_SANCTIONS_SAFE: dynamic( + () => import("requirements/Parallel/ParallelRequirement") + ), + PARALLEL_TRAIT: dynamic( + () => import("requirements/Parallel/ParallelRequirement") + ), +} as const satisfies Record> diff --git a/src/requirements/requirementFormComponents.ts b/src/requirements/requirementFormComponents.ts new file mode 100644 index 0000000000..ca398b81fb --- /dev/null +++ b/src/requirements/requirementFormComponents.ts @@ -0,0 +1,368 @@ +import dynamic from "next/dynamic" +import { RequirementFormProps, RequirementType } from "./types" + +export const REQUIREMENT_FORM_COMPONENTS = { + FREE: null, + ERC721: dynamic(() => import("requirements/Nft/NftForm")), + ERC1155: dynamic(() => import("requirements/Nft/NftForm")), + NOUNS: dynamic(() => import("requirements/Nft/NftForm")), + COIN: dynamic(() => import("requirements/Token/TokenForm")), + ERC20: dynamic(() => import("requirements/Token/TokenForm")), + ALLOWLIST: dynamic( + () => import("requirements/Allowlist/AllowlistForm") + ), + ALLOWLIST_EMAIL: dynamic( + () => import("requirements/Allowlist/AllowlistForm") + ), + GUILD_SNAPSHOT: null, + PAYMENT: dynamic( + () => import("requirements/Payment/PaymentForm") + ), + CONTRACT: dynamic( + () => import("requirements/ContractState/ContractStateForm") + ), + // TODO: TX_VALUE requirements are deprecated + COVALENT_TX_VALUE: dynamic( + () => import("requirements/WalletActivity/WalletActivityForm") + ), + COVALENT_TX_VALUE_RELATIVE: dynamic( + () => import("requirements/WalletActivity/WalletActivityForm") + ), + COVALENT_FIRST_TX: dynamic( + () => import("requirements/WalletActivity/WalletActivityForm") + ), + COVALENT_FIRST_TX_RELATIVE: dynamic( + () => import("requirements/WalletActivity/WalletActivityForm") + ), + COVALENT_CONTRACT_DEPLOY: dynamic( + () => import("requirements/WalletActivity/WalletActivityForm") + ), + COVALENT_CONTRACT_DEPLOY_RELATIVE: dynamic( + () => import("requirements/WalletActivity/WalletActivityForm") + ), + COVALENT_TX_COUNT: dynamic( + () => import("requirements/WalletActivity/WalletActivityForm") + ), + COVALENT_TX_COUNT_RELATIVE: dynamic( + () => import("requirements/WalletActivity/WalletActivityForm") + ), + ALCHEMY_TX_VALUE: dynamic( + () => import("requirements/WalletActivity/WalletActivityForm") + ), + ALCHEMY_TX_VALUE_RELATIVE: dynamic( + () => import("requirements/WalletActivity/WalletActivityForm") + ), + ALCHEMY_FIRST_TX: dynamic( + () => import("requirements/WalletActivity/WalletActivityForm") + ), + ALCHEMY_FIRST_TX_RELATIVE: dynamic( + () => import("requirements/WalletActivity/WalletActivityForm") + ), + ALCHEMY_CONTRACT_DEPLOY: dynamic( + () => import("requirements/WalletActivity/WalletActivityForm") + ), + ALCHEMY_CONTRACT_DEPLOY_RELATIVE: dynamic( + () => import("requirements/WalletActivity/WalletActivityForm") + ), + ALCHEMY_TX_COUNT: dynamic( + () => import("requirements/WalletActivity/WalletActivityForm") + ), + ALCHEMY_TX_COUNT_RELATIVE: dynamic( + () => import("requirements/WalletActivity/WalletActivityForm") + ), + CAPTCHA: dynamic( + () => import("requirements/Captcha/CaptchaForm") + ), + GUILD_ROLE: dynamic( + () => import("requirements/Guild/GuildForm") + ), + GUILD_ROLE_RELATIVE: dynamic( + () => import("requirements/Guild/GuildForm") + ), + GUILD_MINGUILDS: dynamic( + () => import("requirements/Guild/GuildForm") + ), + GUILD_ADMIN: dynamic( + () => import("requirements/Guild/GuildForm") + ), + GUILD_USER_SINCE: dynamic( + () => import("requirements/Guild/GuildForm") + ), + GUILD_MEMBER: dynamic( + () => import("requirements/Guild/GuildForm") + ), + POINTS_AMOUNT: dynamic( + () => import("requirements/Points/PointsForm") + ), + POINTS_TOTAL_AMOUNT: dynamic( + () => import("requirements/Points/PointsForm") + ), + POINTS_RANK: dynamic( + () => import("requirements/Points/PointsForm") + ), + LINK_VISIT: dynamic( + () => import("requirements/VisitLink/VisitLinkForm") + ), + EMAIL_VERIFIED: dynamic( + () => import("requirements/Email/EmailForm") + ), + EMAIL_DOMAIN: dynamic( + () => import("requirements/Email/EmailForm") + ), + FORM_SUBMISSION: dynamic( + () => import("requirements/Form/FormForm") + ), + // TODO: this is a deprecated requirement + FORM_APPROVAL: dynamic( + () => import("requirements/Form/FormForm") + ), + TWITTER_ACCOUNT_AGE: dynamic( + () => import("requirements/Twitter/TwitterForm") + ), + TWITTER_ACCOUNT_AGE_RELATIVE: dynamic( + () => import("requirements/Twitter/TwitterForm") + ), + TWITTER_ACCOUNT_PROTECTED: dynamic( + () => import("requirements/Twitter/TwitterForm") + ), + TWITTER_ACCOUNT_VERIFIED: dynamic( + () => import("requirements/Twitter/TwitterForm") + ), + TWITTER_BIO: dynamic( + () => import("requirements/Twitter/TwitterForm") + ), + TWITTER_FOLLOW: dynamic( + () => import("requirements/Twitter/TwitterForm") + ), + TWITTER_FOLLOWED_BY: dynamic( + () => import("requirements/Twitter/TwitterForm") + ), + TWITTER_FOLLOWER_COUNT: dynamic( + () => import("requirements/Twitter/TwitterForm") + ), + TWITTER_FOLLOWING_COUNT: dynamic( + () => import("requirements/Twitter/TwitterForm") + ), + TWITTER_FOLLOW_V2: dynamic( + () => import("requirements/Twitter/TwitterForm") + ), + TWITTER_LIKE: dynamic( + () => import("requirements/Twitter/TwitterForm") + ), + TWITTER_LIKE_COUNT: dynamic( + () => import("requirements/Twitter/TwitterForm") + ), + TWITTER_LIKE_V2: dynamic( + () => import("requirements/Twitter/TwitterForm") + ), + TWITTER_LIST_MEMBER: dynamic( + () => import("requirements/Twitter/TwitterForm") + ), + TWITTER_NAME: dynamic( + () => import("requirements/Twitter/TwitterForm") + ), + TWITTER_RETWEET: dynamic( + () => import("requirements/Twitter/TwitterForm") + ), + TWITTER_RETWEET_V2: dynamic( + () => import("requirements/Twitter/TwitterForm") + ), + TWITTER_TWEET_COUNT: dynamic( + () => import("requirements/Twitter/TwitterForm") + ), + // TODO: this is a deprecated requirement + TWITTER_LIST_FOLLOW: dynamic( + () => import("requirements/Twitter/TwitterForm") + ), + GITHUB_STARRING: dynamic( + () => import("requirements/Github/GithubForm") + ), + GITHUB_ACCOUNT_AGE: dynamic( + () => import("requirements/Github/GithubForm") + ), + GITHUB_ACCOUNT_AGE_RELATIVE: dynamic( + () => import("requirements/Github/GithubForm") + ), + GITHUB_COMMIT_COUNT: dynamic( + () => import("requirements/Github/GithubForm") + ), + GITHUB_COMMIT_COUNT_RELATIVE: dynamic( + () => import("requirements/Github/GithubForm") + ), + DISCORD_ROLE: dynamic( + () => import("requirements/Discord/DiscordForm") + ), + DISCORD_JOIN: dynamic( + () => import("requirements/Discord/DiscordForm") + ), + DISCORD_JOIN_FROM_NOW: dynamic( + () => import("requirements/Discord/DiscordForm") + ), + DISCORD_MEMBER_SINCE: dynamic( + () => import("requirements/Discord/DiscordForm") + ), + COINBASE_EAS_ATTESTED_BY: dynamic( + () => import("requirements/CoinbaseEAS/CoinbaseEASForm") + ), + UNISWAP_V3_POSITIONS: dynamic( + () => import("requirements/Uniswap/UniswapForm") + ), + POLYGON_ID_BASIC: dynamic( + () => import("requirements/PolygonID/PolygonIDForm") + ), + POLYGON_ID_QUERY: dynamic( + () => import("requirements/PolygonID/PolygonIDForm") + ), + GITCOIN_PASS: dynamic( + () => import("requirements/GitcoinPassport/GitcoinPassportForm") + ), + GITCOIN_STAMP: dynamic( + () => import("requirements/GitcoinPassport/GitcoinPassportForm") + ), + GITCOIN_SCORE: dynamic( + () => import("requirements/GitcoinPassport/GitcoinPassportForm") + ), + POAP: dynamic(() => import("requirements/Poap/PoapForm")), + GITPOAP: dynamic( + () => import("requirements/GitPoap/GitPoapForm") + ), + EAS_ATTEST: dynamic( + () => import("requirements/EthereumAttestation/EthereumAttestationForm") + ), + EAS_ATTESTED_BY: dynamic( + () => import("requirements/EthereumAttestation/EthereumAttestationForm") + ), + FARCASTER_PROFILE: dynamic( + () => import("requirements/Farcaster/FarcasterForm") + ), + FARCASTER_TOTAL_FOLLOWERS: dynamic( + () => import("requirements/Farcaster/FarcasterForm") + ), + FARCASTER_FOLLOW: dynamic( + () => import("requirements/Farcaster/FarcasterForm") + ), + FARCASTER_FOLLOW_CHANNEL: dynamic( + () => import("requirements/Farcaster/FarcasterForm") + ), + FARCASTER_FOLLOWED_BY: dynamic( + () => import("requirements/Farcaster/FarcasterForm") + ), + FARCASTER_LIKE: dynamic( + () => import("requirements/Farcaster/FarcasterForm") + ), + FARCASTER_RECAST: dynamic( + () => import("requirements/Farcaster/FarcasterForm") + ), + FARCASTER_USERNAME: dynamic( + () => import("requirements/Farcaster/FarcasterForm") + ), + FARCASTER_BIO: dynamic( + () => import("requirements/Farcaster/FarcasterForm") + ), + LENS_PROFILE: dynamic( + () => import("requirements/Lens/LensForm") + ), + LENS_FOLLOW: dynamic( + () => import("requirements/Lens/LensForm") + ), + LENS_REACT: dynamic( + () => import("requirements/Lens/LensForm") + ), + LENS_COLLECT: dynamic( + () => import("requirements/Lens/LensForm") + ), + LENS_ACTION: dynamic( + () => import("requirements/Lens/LensForm") + ), + LENS_TOTAL_FOLLOWERS: dynamic( + () => import("requirements/Lens/LensForm") + ), + LENS_TOTAL_POSTS: dynamic( + () => import("requirements/Lens/LensForm") + ), + LENS_FOLLOWED_BY: dynamic( + () => import("requirements/Lens/LensForm") + ), + WEB3INBOX_SUBSCRIBERS: dynamic( + () => import("requirements/Web3Inbox/Web3InboxForm") + ), + GALAXY: dynamic( + () => import("requirements/Galaxy/GalaxyForm") + ), + GALAXY_PARTICIPATION: dynamic( + () => import("requirements/Galaxy/GalaxyForm") + ), + SNAPSHOT_STRATEGY: dynamic( + () => import("requirements/Snapshot/SnapshotForm") + ), + SNAPSHOT_SPACE_ADMIN: dynamic( + () => import("requirements/Snapshot/SnapshotForm") + ), + SNAPSHOT_SPACE_AUTHOR: dynamic( + () => import("requirements/Snapshot/SnapshotForm") + ), + SNAPSHOT_FOLLOW: dynamic( + () => import("requirements/Snapshot/SnapshotForm") + ), + SNAPSHOT_FOLLOW_SINCE: dynamic( + () => import("requirements/Snapshot/SnapshotForm") + ), + SNAPSHOT_USER_SINCE: dynamic( + () => import("requirements/Snapshot/SnapshotForm") + ), + SNAPSHOT_VOTES: dynamic( + () => import("requirements/Snapshot/SnapshotForm") + ), + SNAPSHOT_PROPOSALS: dynamic( + () => import("requirements/Snapshot/SnapshotForm") + ), + SNAPSHOT_MAJORITY_VOTES: dynamic( + () => import("requirements/Snapshot/SnapshotForm") + ), + MIRROR_COLLECT: dynamic( + () => import("requirements/Mirror/MirrorForm") + ), + SOUND_ARTIST_BACKED: dynamic( + () => import("requirements/Sound/SoundForm") + ), + SOUND_COLLECTED: dynamic( + () => import("requirements/Sound/SoundForm") + ), + SOUND_ARTIST: dynamic( + () => import("requirements/Sound/SoundForm") + ), + SOUND_TOP_COLLECTOR: dynamic( + () => import("requirements/Sound/SoundForm") + ), + SOUND_NFTS: dynamic( + () => import("requirements/Sound/SoundForm") + ), + DISCO: dynamic(() => import("requirements/Disco/DiscoForm")), + UNLOCK: dynamic( + () => import("requirements/Unlock/UnlockForm") + ), + JUICEBOX: dynamic( + () => import("requirements/Juicebox/JuiceboxForm") + ), + FUEL_BALANCE: dynamic( + () => import("requirements/Fuel/FuelForm") + ), + FUEL_TRANSACTIONS: dynamic( + () => import("requirements/Fuel/FuelForm") + ), + NOOX: dynamic(() => import("requirements/Noox/NooxForm")), + YUP: dynamic(() => import("requirements/Yup/YupForm")), + REP3: dynamic(() => import("requirements/Rep3/Rep3Form")), + PARALLEL_ID: dynamic( + () => import("requirements/Parallel/ParallelForm") + ), + PARALLEL_SANCTIONS_SAFE: dynamic( + () => import("requirements/Parallel/ParallelForm") + ), + PARALLEL_TRAIT: dynamic( + () => import("requirements/Parallel/ParallelForm") + ), +} as const satisfies Record< + RequirementType, + ReturnType> | null +> diff --git a/src/requirements/requirementProvidedValues.ts b/src/requirements/requirementProvidedValues.ts new file mode 100644 index 0000000000..b09a2366cc --- /dev/null +++ b/src/requirements/requirementProvidedValues.ts @@ -0,0 +1,89 @@ +import dynamic from "next/dynamic" +import { ComponentType } from "react" +import { Requirement } from "types" +import { RequirementType } from "./types" + +export type ProvidedValueDisplayProps = { + requirement: Partial +} + +export const REQUIREMENT_PROVIDED_VALUES: Partial< + Record> +> = { + ERC20: dynamic( + () => import("requirements/Token/providedValue/TokenProvidedValue") + ), + COIN: dynamic( + () => import("requirements/Token/providedValue/TokenProvidedValue") + ), + GUILD_SNAPSHOT: dynamic( + () => import("requirements/Airdrop/providedValue/AirdropProvidedValue") + ), + UNISWAP_V3_POSITIONS: dynamic( + () => import("requirements/Uniswap/providedValue/PositionsProvidedValue") + ), + + // NFTs + ERC721: dynamic( + () => import("requirements/Nft/providedValue/NftAmountProvidedValue") + ), + ERC1155: dynamic( + () => import("requirements/Nft/providedValue/NftAmountProvidedValue") + ), + NOUNS: dynamic( + () => import("requirements/Nft/providedValue/NftAmountProvidedValue") + ), + + GUILD_MINGUILDS: () => "Guild membership count", + + COVALENT_TX_COUNT: dynamic( + () => import("requirements/WalletActivity/providedValue/TxCountProvidedValue") + ), + COVALENT_TX_COUNT_RELATIVE: dynamic( + () => import("requirements/WalletActivity/providedValue/TxCountProvidedValue") + ), + COVALENT_CONTRACT_DEPLOY: dynamic( + () => + import("requirements/WalletActivity/providedValue/ContractDeployProvidedValue") + ), + COVALENT_CONTRACT_DEPLOY_RELATIVE: dynamic( + () => + import("requirements/WalletActivity/providedValue/ContractDeployProvidedValue") + ), + + POINTS_AMOUNT: dynamic( + () => import("requirements/Points/providedValue/PointsAmountProvidedValue") + ), + POINTS_TOTAL_AMOUNT: () => "Total score summing all points", + POINTS_RANK: dynamic( + () => import("requirements/Points/providedValue/PointsRankProvidedValue") + ), + + TWITTER_FOLLOWER_COUNT: () => "Followers on X", + + FARCASTER_TOTAL_FOLLOWERS: () => "Followers on Farcaster", + + LENS_TOTAL_FOLLOWERS: () => "Followers on Lens Protocol", + LENS_TOTAL_POSTS: () => "Number of posts", + + GITCOIN_SCORE: dynamic( + () => + import("requirements/GitcoinPassport/providedValue/GitcoinScoreProvidedValue") + ), + + SNAPSHOT_VOTES: dynamic( + () => import("requirements/Snapshot/providedValue/VotesProvidedValue") + ), + SNAPSHOT_PROPOSALS: dynamic( + () => import("requirements/Snapshot/providedValue/ProposalsProvidedValue") + ), + + SOUND_TOP_COLLECTOR: dynamic( + () => import("requirements/Sound/providedValue/TopCollectorProvidedValue") + ), + SOUND_NFTS: () => "Songs owned", +} + +export const PROVIDER_TYPES = Object.keys(REQUIREMENT_PROVIDED_VALUES) as Array< + keyof typeof REQUIREMENT_PROVIDED_VALUES +> diff --git a/src/requirements/requirements.ts b/src/requirements/requirements.ts index 619ed99535..e2c68a6232 100644 --- a/src/requirements/requirements.ts +++ b/src/requirements/requirements.ts @@ -10,107 +10,58 @@ import { Wallet, Wrench, } from "@phosphor-icons/react" -import { RequirementProps } from "components/[guild]/Requirements/components/Requirement" -import dynamic from "next/dynamic" -import { ComponentType } from "react" -import { - ProvidedValueDisplayProps, - RequirementFormProps, - RequirementType, -} from "requirements" import { VISIT_LINK_REGEX } from "requirements/VisitLink/VisitLinkRequirement" -import rewards from "rewards" +import { emailData } from "rewards/Email/data" +import { formData } from "rewards/Forms/data" import Star from "static/icons/star.svg" import GuildLogo from "static/logo.svg" +import { RequirementData } from "./types" export const REQUIREMENTS_DATA = [ { icon: LockOpen, name: "Free", - displayComponent: dynamic( - () => import("requirements/Free/FreeRequirement") - ), types: ["FREE"], }, { icon: ImageSquare, name: "NFT", - displayComponent: dynamic( - () => import("requirements/Nft/NftRequirement") - ), - formComponent: dynamic( - () => import("requirements/Nft/NftForm") - ), types: ["ERC721", "ERC1155", "NOUNS"], isNegatable: true, }, { icon: CurrencyCircleDollar, name: "Token", - displayComponent: dynamic( - () => import("requirements/Token/TokenRequirement") - ), - formComponent: dynamic( - () => import("requirements/Token/TokenForm") - ), types: ["ERC20", "COIN"], isNegatable: true, }, { icon: ListChecks, name: "Allowlist", - displayComponent: dynamic( - () => import("requirements/Allowlist/AllowlistRequirement") - ), - formComponent: dynamic( - () => import("requirements/Allowlist/AllowlistForm") - ), types: ["ALLOWLIST", "ALLOWLIST_EMAIL"], isNegatable: true, }, { icon: Parachute, name: "Airdrop", - displayComponent: dynamic( - () => import("requirements/Airdrop/AirdropRequirement") - ), types: ["GUILD_SNAPSHOT"], isNegatable: true, }, { icon: Coins, name: "Payment", - displayComponent: dynamic( - () => import("requirements/Payment/PaymentRequirement") - ), - formComponent: dynamic( - () => import("requirements/Payment/PaymentForm") - ), types: ["PAYMENT"], }, { icon: Wrench, name: "Contract query", - displayComponent: dynamic( - () => import("requirements/ContractState/ContractStateRequirement") - ), - formComponent: dynamic( - () => import("requirements/ContractState/ContractStateForm") - ), types: ["CONTRACT"], isNegatable: true, }, { icon: Wallet, name: "Wallet activity", - displayComponent: dynamic( - () => import("requirements/WalletActivity/WalletActivityRequirement") - ), - formComponent: dynamic( - () => import("requirements/WalletActivity/WalletActivityForm") - ), types: [ - "WALLET_ACTIVITY", "COVALENT_FIRST_TX", "COVALENT_FIRST_TX_RELATIVE", "COVALENT_CONTRACT_DEPLOY", @@ -123,26 +74,13 @@ export const REQUIREMENTS_DATA = [ { icon: Robot, name: "Captcha", - displayComponent: dynamic( - () => import("requirements/Captcha/CaptchaRequirement") - ), - formComponent: dynamic( - () => import("requirements/Captcha/CaptchaForm") - ), types: ["CAPTCHA"], isNegatable: true, }, { icon: GuildLogo, name: "Guild", - displayComponent: dynamic( - () => import("requirements/Guild/GuildRequirement") - ), - formComponent: dynamic( - () => import("requirements/Guild/GuildForm") - ), types: [ - "GUILD", "GUILD_ROLE", "GUILD_ROLE_RELATIVE", "GUILD_MINGUILDS", @@ -155,24 +93,12 @@ export const REQUIREMENTS_DATA = [ { icon: Star, name: "Points", - displayComponent: dynamic( - () => import("requirements/Points/PointsRequirement") - ), - formComponent: dynamic( - () => import("requirements/Points/PointsForm") - ), types: ["POINTS_AMOUNT", "POINTS_TOTAL_AMOUNT", "POINTS_RANK"], isNegatable: true, }, { icon: Link, name: "Visit link", - displayComponent: dynamic( - () => import("requirements/VisitLink/VisitLinkRequirement") - ), - formComponent: dynamic( - () => import("requirements/VisitLink/VisitLinkForm") - ), types: ["LINK_VISIT"], customNameRules: { pattern: { @@ -183,40 +109,21 @@ export const REQUIREMENTS_DATA = [ }, }, { - icon: rewards.EMAIL.icon, - name: rewards.EMAIL.name, - displayComponent: dynamic( - () => import("requirements/Email/EmailRequirement") - ), - formComponent: dynamic( - () => import("requirements/Email/EmailForm") - ), - types: ["EMAIL", "EMAIL_VERIFIED", "EMAIL_DOMAIN"], + icon: emailData.icon, + name: emailData.name, + types: ["EMAIL_VERIFIED", "EMAIL_DOMAIN"], isNegatable: true, }, { - icon: rewards.FORM.icon, - name: rewards.FORM.name, - displayComponent: dynamic( - () => import("requirements/Form/FormRequirement") - ), - formComponent: dynamic( - () => import("requirements/Form/FormForm") - ), + icon: formData.icon, + name: formData.name, types: ["FORM_SUBMISSION"], isNegatable: true, }, { icon: "/requirementLogos/x.svg", name: "X", - displayComponent: dynamic( - () => import("requirements/Twitter/TwitterRequirement") - ), - formComponent: dynamic( - () => import("requirements/Twitter/TwitterForm") - ), types: [ - "TWITTER", "TWITTER_ACCOUNT_AGE", "TWITTER_ACCOUNT_AGE_RELATIVE", "TWITTER_ACCOUNT_PROTECTED", @@ -242,14 +149,7 @@ export const REQUIREMENTS_DATA = [ { icon: "/platforms/github.png", name: "GitHub", - displayComponent: dynamic( - () => import("requirements/Github/GithubRequirement") - ), - formComponent: dynamic( - () => import("requirements/Github/GithubForm") - ), types: [ - "GITHUB", "GITHUB_STARRING", "GITHUB_ACCOUNT_AGE", "GITHUB_ACCOUNT_AGE_RELATIVE", @@ -262,14 +162,7 @@ export const REQUIREMENTS_DATA = [ { icon: "/platforms/discord.png", name: "Discord", - displayComponent: dynamic( - () => import("requirements/Discord/DiscordRequirement") - ), - formComponent: dynamic( - () => import("requirements/Discord/DiscordForm") - ), types: [ - "DISCORD", "DISCORD_ROLE", "DISCORD_JOIN", "DISCORD_JOIN_FROM_NOW", @@ -281,98 +174,49 @@ export const REQUIREMENTS_DATA = [ { icon: "/requirementLogos/coinbase.png", name: "Coinbase", - displayComponent: dynamic( - () => import("requirements/CoinbaseEAS/CoinbaseEASRequirement") - ), - formComponent: dynamic( - () => import("requirements/CoinbaseEAS/CoinbaseEASForm") - ), types: ["COINBASE_EAS_ATTESTED_BY"], isNegatable: true, }, { icon: "/requirementLogos/uniswap.svg", name: "Uniswap Liquidity", - displayComponent: dynamic( - () => import("requirements/Uniswap/UniswapRequirement") - ), - formComponent: dynamic( - () => import("requirements/Uniswap/UniswapForm") - ), types: ["UNISWAP_V3_POSITIONS"], isNegatable: true, }, { icon: "/requirementLogos/polygonId.svg", name: "PolygonID", - displayComponent: dynamic( - () => import("requirements/PolygonID/PolygonIDRequirement") - ), - formComponent: dynamic( - () => import("requirements/PolygonID/PolygonIDForm") - ), types: ["POLYGON_ID_QUERY", "POLYGON_ID_BASIC"], isNegatable: true, }, { icon: "/requirementLogos/gitcoin-passport.svg", name: "Gitcoin Passport", - displayComponent: dynamic( - () => import("requirements/GitcoinPassport/GitcoinPassportRequirement") - ), - formComponent: dynamic( - () => import("requirements/GitcoinPassport/GitcoinPassportForm") - ), - types: ["GITCOIN", "GITCOIN_PASS", "GITCOIN_STAMP", "GITCOIN_SCORE"], + types: ["GITCOIN_PASS", "GITCOIN_STAMP", "GITCOIN_SCORE"], isNegatable: true, }, { icon: "/requirementLogos/poap.svg", name: "POAP", - displayComponent: dynamic( - () => import("requirements/Poap/PoapRequirement") - ), - formComponent: dynamic( - () => import("requirements/Poap/PoapForm") - ), types: ["POAP"], isNegatable: true, }, { icon: "/requirementLogos/gitpoap.svg", name: "GitPOAP", - displayComponent: dynamic( - () => import("requirements/GitPoap/GitPoapRequirement") - ), - formComponent: dynamic( - () => import("requirements/GitPoap/GitPoapForm") - ), types: ["GITPOAP"], isNegatable: true, }, { icon: "/requirementLogos/eas.png", name: "EAS", - displayComponent: dynamic( - () => import("requirements/EthereumAttestation/EthereumAttestationRequirement") - ), - formComponent: dynamic( - () => import("requirements/EthereumAttestation/EthereumAttestationForm") - ), types: ["EAS_ATTESTED_BY", "EAS_ATTEST"], isNegatable: true, }, { icon: "/requirementLogos/farcaster.png", name: "Farcaster", - displayComponent: dynamic( - () => import("requirements/Farcaster/FarcasterRequirement") - ), - formComponent: dynamic( - () => import("requirements/Farcaster/FarcasterForm") - ), types: [ - "FARCASTER", "FARCASTER_PROFILE", "FARCASTER_TOTAL_FOLLOWERS", "FARCASTER_FOLLOW", @@ -388,14 +232,7 @@ export const REQUIREMENTS_DATA = [ { icon: "/requirementLogos/lens.svg", name: "Lens", - displayComponent: dynamic( - () => import("requirements/Lens/LensRequirement") - ), - formComponent: dynamic( - () => import("requirements/Lens/LensForm") - ), types: [ - "LENS", "LENS_PROFILE", "LENS_FOLLOW", "LENS_REACT", @@ -410,37 +247,18 @@ export const REQUIREMENTS_DATA = [ { icon: "/requirementLogos/web3inbox.png", name: "Web3Inbox", - displayComponent: dynamic( - () => import("requirements/Web3Inbox/Web3InboxRequirement") - ), - formComponent: dynamic( - () => import("requirements/Web3Inbox/Web3InboxForm") - ), types: ["WEB3INBOX_SUBSCRIBERS"], }, { icon: "/requirementLogos/galaxy.svg", name: "Galxe", - displayComponent: dynamic( - () => import("requirements/Galaxy/GalaxyRequirement") - ), - formComponent: dynamic( - () => import("requirements/Galaxy/GalaxyForm") - ), types: ["GALAXY", "GALAXY_PARTICIPATION"], isNegatable: true, }, { icon: "/requirementLogos/snapshot.png", name: "Snapshot", - displayComponent: dynamic( - () => import("requirements/Snapshot/SnapshotRequirement") - ), - formComponent: dynamic( - () => import("requirements/Snapshot/SnapshotForm") - ), types: [ - "SNAPSHOT", "SNAPSHOT_STRATEGY", "SNAPSHOT_SPACE_ADMIN", "SNAPSHOT_SPACE_AUTHOR", @@ -456,26 +274,13 @@ export const REQUIREMENTS_DATA = [ { icon: "/requirementLogos/mirror.svg", name: "Mirror", - displayComponent: dynamic( - () => import("requirements/Mirror/MirrorRequirement") - ), - formComponent: dynamic( - () => import("requirements/Mirror/MirrorForm") - ), - types: ["MIRROR_COLLECT", "MIRROR"], + types: ["MIRROR_COLLECT"], isNegatable: true, }, { icon: "/requirementLogos/sound.png", name: "Sound", - displayComponent: dynamic( - () => import("requirements/Sound/SoundRequirement") - ), - formComponent: dynamic( - () => import("requirements/Sound/SoundForm") - ), types: [ - "SOUND", "SOUND_ARTIST_BACKED", "SOUND_COLLECTED", "SOUND_ARTIST", @@ -487,180 +292,52 @@ export const REQUIREMENTS_DATA = [ { icon: "/requirementLogos/disco.png", name: "Disco", - displayComponent: dynamic( - () => import("requirements/Disco/DiscoRequirement") - ), - formComponent: dynamic( - () => import("requirements/Disco/DiscoForm") - ), + types: ["DISCO"], isNegatable: true, }, { icon: "/requirementLogos/unlock.png", name: "Unlock", - displayComponent: dynamic( - () => import("requirements/Unlock/UnlockRequirement") - ), - formComponent: dynamic( - () => import("requirements/Unlock/UnlockForm") - ), types: ["UNLOCK"], isNegatable: true, }, { icon: "/requirementLogos/juicebox.png", name: "Juicebox", - displayComponent: dynamic( - () => import("requirements/Juicebox/JuiceboxRequirement") - ), - formComponent: dynamic( - () => import("requirements/Juicebox/JuiceboxForm") - ), types: ["JUICEBOX"], isNegatable: true, }, { icon: "/walletLogos/fuel.svg", name: "Fuel", - displayComponent: dynamic( - () => import("requirements/Fuel/FuelRequirement") - ), - formComponent: dynamic( - () => import("requirements/Fuel/FuelForm") - ), - types: ["FUEL", "FUEL_BALANCE", "FUEL_TRANSACTIONS"], + types: ["FUEL_BALANCE", "FUEL_TRANSACTIONS"], isNegatable: true, }, { icon: "/requirementLogos/noox.svg", name: "Noox", - displayComponent: dynamic( - () => import("requirements/Noox/NooxRequirement") - ), - formComponent: dynamic( - () => import("requirements/Noox/NooxForm") - ), types: ["NOOX"], isNegatable: true, }, { icon: "/requirementLogos/yup.svg", name: "Yup", - displayComponent: dynamic( - () => import("requirements/Yup/YupRequirement") - ), - formComponent: dynamic( - () => import("requirements/Yup/YupForm") - ), types: ["YUP"], isNegatable: true, }, { icon: "/requirementLogos/rep3.png", name: "Rep3", - displayComponent: dynamic( - () => import("requirements/Rep3/Rep3Requirement") - ), - formComponent: dynamic( - () => import("requirements/Rep3/Rep3Form") - ), types: ["REP3"], isNegatable: true, }, { icon: "/requirementLogos/parallel.png", name: "Parallel", - displayComponent: dynamic( - () => import("requirements/Parallel/ParallelRequirement") - ), - formComponent: dynamic( - () => import("requirements/Parallel/ParallelForm") - ), types: ["PARALLEL_ID", "PARALLEL_SANCTIONS_SAFE", "PARALLEL_TRAIT"], isNegatable: true, }, -] as const - -export const REQUIREMENT_PROVIDED_VALUES: Partial< - Record> -> = { - ERC20: dynamic( - () => import("requirements/Token/providedValue/TokenProvidedValue") - ), - COIN: dynamic( - () => import("requirements/Token/providedValue/TokenProvidedValue") - ), - GUILD_SNAPSHOT: dynamic( - () => import("requirements/Airdrop/providedValue/AirdropProvidedValue") - ), - UNISWAP_V3_POSITIONS: dynamic( - () => import("requirements/Uniswap/providedValue/PositionsProvidedValue") - ), - - // NFTs - ERC721: dynamic( - () => import("requirements/Nft/providedValue/NftAmountProvidedValue") - ), - ERC1155: dynamic( - () => import("requirements/Nft/providedValue/NftAmountProvidedValue") - ), - NOUNS: dynamic( - () => import("requirements/Nft/providedValue/NftAmountProvidedValue") - ), - - GUILD_MINGUILDS: () => "Guild membership count", - - COVALENT_TX_COUNT: dynamic( - () => import("requirements/WalletActivity/providedValue/TxCountProvidedValue") - ), - COVALENT_TX_COUNT_RELATIVE: dynamic( - () => import("requirements/WalletActivity/providedValue/TxCountProvidedValue") - ), - COVALENT_CONTRACT_DEPLOY: dynamic( - () => - import("requirements/WalletActivity/providedValue/ContractDeployProvidedValue") - ), - COVALENT_CONTRACT_DEPLOY_RELATIVE: dynamic( - () => - import("requirements/WalletActivity/providedValue/ContractDeployProvidedValue") - ), - - POINTS_AMOUNT: dynamic( - () => import("requirements/Points/providedValue/PointsAmountProvidedValue") - ), - POINTS_TOTAL_AMOUNT: () => "Total score summing all points", - POINTS_RANK: dynamic( - () => import("requirements/Points/providedValue/PointsRankProvidedValue") - ), - - TWITTER_FOLLOWER_COUNT: () => "Followers on X", - - FARCASTER_TOTAL_FOLLOWERS: () => "Followers on Farcaster", - - LENS_TOTAL_FOLLOWERS: () => "Followers on Lens Protocol", - LENS_TOTAL_POSTS: () => "Number of posts", - - GITCOIN_SCORE: dynamic( - () => - import("requirements/GitcoinPassport/providedValue/GitcoinScoreProvidedValue") - ), - - SNAPSHOT_VOTES: dynamic( - () => import("requirements/Snapshot/providedValue/VotesProvidedValue") - ), - SNAPSHOT_PROPOSALS: dynamic( - () => import("requirements/Snapshot/providedValue/ProposalsProvidedValue") - ), - - SOUND_TOP_COLLECTOR: dynamic( - () => import("requirements/Sound/providedValue/TopCollectorProvidedValue") - ), - SOUND_NFTS: () => "Songs owned", -} - -export const PROVIDER_TYPES = Object.keys(REQUIREMENT_PROVIDED_VALUES) as Array< - keyof typeof REQUIREMENT_PROVIDED_VALUES -> +] as const satisfies RequirementData[] export default REQUIREMENTS_DATA diff --git a/src/requirements/types.ts b/src/requirements/types.ts new file mode 100644 index 0000000000..18d1d07bfa --- /dev/null +++ b/src/requirements/types.ts @@ -0,0 +1,24 @@ +import { Schemas } from "@guildxyz/types" +import { Icon } from "@phosphor-icons/react" +import { UseControllerProps } from "react-hook-form" +import { Requirement } from "types" + +export type RequirementType = Schemas["Requirement"]["type"] + +export type RequirementFormProps = { + baseFieldPath: string + field?: Requirement + addRequirement?: () => void + setOnCloseAttemptToast?: (msg: string | boolean) => void + providerTypesOnly?: boolean +} + +export type RequirementData = { + icon: string | Icon + name: string + readonly types: RequirementType[] + disabled?: boolean + isPlatform?: boolean + customNameRules?: UseControllerProps["rules"] + isNegatable?: boolean +} diff --git a/src/rewards/Token/DynamicRewardCalculationTable.tsx b/src/rewards/Token/DynamicRewardCalculationTable.tsx index 0f957b8c96..d640542c68 100644 --- a/src/rewards/Token/DynamicRewardCalculationTable.tsx +++ b/src/rewards/Token/DynamicRewardCalculationTable.tsx @@ -2,7 +2,7 @@ import { HStack, Icon, Skeleton, Td, Text, Tr } from "@chakra-ui/react" import { LockSimple, X } from "@phosphor-icons/react" import FeesTable from "components/[guild]/Requirements/components/GuildCheckout/components/FeesTable" import OptionImage from "components/common/StyledSelect/components/CustomSelectOption/components/OptionImage" -import { REQUIREMENT_PROVIDED_VALUES } from "requirements/requirements" +import { REQUIREMENT_PROVIDED_VALUES } from "requirements/requirementProvidedValues" import rewardComponents from "rewards/components" import { PlatformType, Requirement, RolePlatform } from "types" import useDynamicRewardUserAmount from "./hooks/useDynamicRewardUserAmount" diff --git a/src/types.ts b/src/types.ts index 6e7d3b5286..1007530436 100644 --- a/src/types.ts +++ b/src/types.ts @@ -7,7 +7,6 @@ import { } from "@guildxyz/types" import { FeatureFlag } from "components/[guild]/EditGuild/components/FeatureFlags" import { ContractCallFunction } from "components/[guild]/RolePlatforms/components/AddRoleRewardModal/components/AddContractCallPanel/components/CreateNftForm/hooks/useCreateNft" -import { RequirementType } from "requirements" import type { Chain, Chains } from "wagmiConfig/chains" import { z } from "zod" @@ -793,7 +792,6 @@ export type { Requirement, RequirementCreateResponseOutput, RequirementCreationPayloadWithTempID, - RequirementType, Rest, Role, RoleFormType, diff --git a/src/utils/guildCheckout/constants.ts b/src/utils/guildCheckout/constants.ts index f91f108ebf..70a687014f 100644 --- a/src/utils/guildCheckout/constants.ts +++ b/src/utils/guildCheckout/constants.ts @@ -1,4 +1,4 @@ -import { RequirementType } from "requirements" +import { RequirementType } from "requirements/types" import oldTokenBuyerAbi from "static/abis/oldTokenBuyer" import tokenBuyerAbi from "static/abis/tokenBuyer" import { Abi, toBytes } from "viem"