From 4ce99be598c359e3a9dbd57b0eb007d1f51d3dc8 Mon Sep 17 00:00:00 2001 From: kumaryash90 Date: Wed, 14 Aug 2024 21:17:22 +0000 Subject: [PATCH] Modular contracts - rename extensions to modules (#3969) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## PR-Codex overview The focus of this PR is to refactor the codebase to replace `ModularExtension` with `ModularModule` and update related components and schemas. ### Detailed summary - Replaced `ModularExtension` with `ModularModule` in various files - Updated component names and paths accordingly - Updated schemas and JSON files related to `ModularModule` - Removed unused files and imports > The following files were skipped due to too many changes: `apps/dashboard/src/components/contract-components/contract-publish-form/factory-fieldset.tsx`, `packages/thirdweb/src/extensions/modular/__generated__/ModularCore/events/ExtensionInstalled.ts`, `packages/thirdweb/src/extensions/modular/__generated__/ModularCore/events/ExtensionUninstalled.ts`, `apps/dashboard/src/components/contract-components/contract-publish-form/modular-contract-fieldset.tsx`, `packages/thirdweb/src/contract/actions/resolve-abi.ts`, `apps/dashboard/src/contract-ui/tabs/manage/components/getModuleInstalledParams.ts`, `packages/thirdweb/src/extensions/modular/ModularCore/write/uninstallModuleByProxy.ts`, `packages/thirdweb/scripts/generate/abis/modular/IModularCore.json`, `apps/dashboard/src/components/contract-components/contract-publish-form/index.tsx`, `legacy_packages/sdk/src/evm/common/any-evm-utils/getModularDeploymentInfo.ts`, `legacy_packages/sdk/src/evm/core/sdk.ts`, `apps/dashboard/src/components/contract-components/contract-publish-form/default-factory.tsx`, `apps/dashboard/src/contract-ui/tabs/manage/components/install-extension-params.tsx`, `packages/thirdweb/src/extensions/modular/ModularCore/write/uninstallPublishedExtension.ts`, `apps/dashboard/src/components/contract-components/contract-publish-form/module-input.tsx`, `packages/thirdweb/src/extensions/modular/ModularCore/write/installPublishedExtension.ts`, `packages/thirdweb/src/exports/extensions/modular.ts`, `packages/thirdweb/src/extensions/modular/__generated__/MintableERC20/read/getModuleConfig.ts`, `packages/thirdweb/src/extensions/modular/__generated__/RoyaltyERC721/read/getModuleConfig.ts`, `packages/thirdweb/src/extensions/modular/__generated__/MintableERC721/read/getModuleConfig.ts`, `packages/thirdweb/src/extensions/modular/__generated__/RoyaltyERC1155/read/getModuleConfig.ts`, `packages/thirdweb/src/extensions/modular/__generated__/ClaimableERC721/read/getModuleConfig.ts`, `packages/thirdweb/src/extensions/modular/__generated__/MintableERC1155/read/getModuleConfig.ts`, `packages/thirdweb/src/extensions/modular/__generated__/SimpleMetadataERC721/read/getModuleConfig.ts`, `packages/thirdweb/src/extensions/modular/__generated__/SimpleMetadataERC1155/read/getModuleConfig.ts`, `packages/thirdweb/src/extensions/modular/__generated__/OpenEditionMetadataERC721/read/getModuleConfig.ts`, `packages/thirdweb/src/extensions/modular/__generated__/OpenEditionMetadataERC1155/read/getModuleConfig.ts`, `packages/thirdweb/src/extensions/modular/__generated__/DelayedRevealBatchMetadataERC721/read/getModuleConfig.ts`, `legacy_packages/sdk/test/evm/modular-publish-deploy.test.ts`, `packages/thirdweb/scripts/generate/abis/modular/SimpleMetadataERC721.json`, `packages/thirdweb/scripts/generate/abis/modular/SimpleMetadataERC1155.json`, `packages/thirdweb/scripts/generate/abis/modular/ModularCore.json`, `apps/dashboard/src/contract-ui/tabs/manage/page.tsx`, `packages/thirdweb/src/extensions/modular/__generated__/ModularExtension/read/getExtensionConfig.ts`, `packages/thirdweb/src/extensions/modular/__generated__/IModularExtension/read/getExtensionConfig.ts`, `packages/thirdweb/src/extensions/modular/__generated__/ClaimableERC20/read/getExtensionConfig.ts`, `packages/thirdweb/src/extensions/modular/__generated__/ClaimableERC1155/read/getExtensionConfig.ts`, `packages/thirdweb/src/extensions/modular/__generated__/BatchMetadataERC721/read/getExtensionConfig.ts`, `packages/thirdweb/src/extensions/modular/__generated__/BatchMetadataERC1155/read/getExtensionConfig.ts`, `legacy_packages/sdk/test/evm/mock/mockModuleWithInterface.ts`, `legacy_packages/sdk/src/evm/common/modular/compatibleExtensions.ts`, `packages/thirdweb/src/extensions/modular/__generated__/IModularCore/read/getInstalledExtensions.ts`, `packages/thirdweb/src/extensions/modular/__generated__/ModularCore/read/getInstalledExtensions.ts`, `apps/dashboard/src/components/contract-components/contract-deploy-form/custom-contract.tsx`, `apps/dashboard/src/contract-ui/tabs/manage/components/InstalledExtensionsTable.tsx`, `legacy_packages/sdk/src/evm/constants/thirdweb-features.ts`, `packages/thirdweb/scripts/generate/abis/modular/OpenEditionMetadataERC721.json`, `packages/thirdweb/scripts/generate/abis/modular/OpenEditionMetadataERC1155.json`, `packages/thirdweb/src/extensions/prebuilts/deploy-modular-core.test.ts`, `packages/thirdweb/src/extensions/modular/__generated__/ModularCore/write/installExtension.ts`, `packages/thirdweb/scripts/generate/abis/modular/BatchMetadataERC721.json`, `packages/thirdweb/scripts/generate/abis/modular/BatchMetadataERC1155.json`, `packages/thirdweb/src/extensions/modular/__generated__/ModularCore/write/uninstallExtension.ts`, `packages/thirdweb/src/extensions/modular/__generated__/IModularCore/write/installExtension.ts`, `packages/thirdweb/src/extensions/modular/__generated__/IModularCore/write/uninstallExtension.ts`, `apps/dashboard/src/components/contract-components/contract-deploy-form/modular-contract-default-extensions-fieldset.tsx`, `packages/thirdweb/scripts/generate/abis/modular/RoyaltyERC721.json`, `packages/thirdweb/scripts/generate/abis/modular/RoyaltyERC1155.json`, `packages/thirdweb/scripts/generate/abis/modular/DelayedRevealBatchMetadataERC721.json`, `packages/thirdweb/scripts/generate/abis/modular/MintableERC1155.json`, `apps/dashboard/src/contract-ui/tabs/manage/components/ExtensionForm.tsx`, `packages/thirdweb/scripts/generate/abis/modular/MintableERC721.json`, `packages/thirdweb/scripts/generate/abis/modular/ClaimableERC20.json`, `packages/thirdweb/scripts/generate/abis/modular/ClaimableERC721.json`, `packages/thirdweb/scripts/generate/abis/modular/ClaimableERC1155.json`, `packages/thirdweb/scripts/generate/abis/modular/MintableERC20.json`, `legacy_packages/sdk/test/evm/mock/mockExtensionWithFunctionsMetadata.ts`, `legacy_packages/sdk/test/evm/mock/mockCoreMetadata.ts` > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- apps/dashboard/src/@/components/ui/alert.tsx | 2 +- .../contract-deploy-form/custom-contract.tsx | 49 +- ...lar-contract-default-modules-fieldset.tsx} | 94 +- .../contract-publish-form/default-factory.tsx | 28 +- .../dynamic-contract-fieldset.tsx | 15 +- .../contract-publish-form/extension-input.tsx | 4 - .../factory-fieldset.tsx | 9 +- .../contract-publish-form/index.tsx | 17 +- .../modular-contract-fieldset.tsx | 46 + .../contract-publish-form/module-input.tsx | 118 +++ ...elector.tsx => modules-param-selector.tsx} | 10 +- .../explore/contract-card/index.tsx | 8 +- .../src/contract-ui/hooks/useRouteConfig.tsx | 11 +- ...onsTable.tsx => InstalledModulesTable.tsx} | 63 +- .../{ExtensionForm.tsx => ModuleForm.tsx} | 193 ++--- .../components/getExtensionInstalledParams.ts | 56 -- .../components/getModuleInstalledParams.ts | 53 ++ ...n-params.tsx => install-module-params.tsx} | 36 +- ...nContractInfo.ts => moduleContractInfo.ts} | 2 +- .../src/contract-ui/tabs/manage/page.tsx | 48 +- .../overview/helpers/getGuidesAndTemplates.ts | 4 +- .../any-evm-utils/getModularDeploymentInfo.ts | 24 +- ...ibleExtensions.ts => compatibleModules.ts} | 46 +- .../src/evm/constants/contract-features.ts | 6 +- .../src/evm/constants/thirdweb-features.ts | 69 +- legacy_packages/sdk/src/evm/core/sdk.ts | 22 +- legacy_packages/sdk/src/evm/index.ts | 2 +- .../sdk/src/evm/schema/contracts/custom.ts | 12 +- .../sdk/src/evm/types/any-evm/deploy-data.ts | 1 + .../sdk/test/evm/mock/mockCoreMetadata.ts | 453 +++------- .../evm/mock/mockExtensionWithInterface.ts | 1 - ....ts => mockModuleWithFunctionsMetadata.ts} | 169 ++-- .../test/evm/mock/mockModuleWithInterface.ts | 1 + .../test/evm/modular-publish-deploy.test.ts | 38 +- .../abis/modular/BatchMetadataERC1155.json | 310 +++---- .../abis/modular/BatchMetadataERC721.json | 310 +++---- .../abis/modular/ClaimableERC1155.json | 710 +++++++-------- .../generate/abis/modular/ClaimableERC20.json | 690 +++++++-------- .../abis/modular/ClaimableERC721.json | 700 +++++++-------- .../DelayedRevealBatchMetadataERC721.json | 430 ++++----- .../generate/abis/modular/IModularCore.json | 20 +- .../abis/modular/IModularExtension.json | 61 -- .../generate/abis/modular/IModularModule.json | 61 ++ .../abis/modular/MintableERC1155.json | 588 ++++++------- .../generate/abis/modular/MintableERC20.json | 818 +++++++++--------- .../generate/abis/modular/MintableERC721.json | 638 +++++++------- .../generate/abis/modular/ModularCore.json | 53 +- .../abis/modular/ModularExtension.json | 61 -- .../generate/abis/modular/ModularModule.json | 61 ++ .../modular/OpenEditionMetadataERC1155.json | 302 +++---- .../modular/OpenEditionMetadataERC721.json | 302 +++---- .../generate/abis/modular/RoyaltyERC1155.json | 408 ++++----- .../generate/abis/modular/RoyaltyERC721.json | 408 ++++----- .../abis/modular/SimpleMetadataERC1155.json | 190 ++-- .../abis/modular/SimpleMetadataERC721.json | 190 ++-- .../src/contract/actions/resolve-abi.ts | 12 +- .../src/exports/extensions/modular.ts | 42 +- ...Extension.ts => installPublishedModule.ts} | 36 +- .../write/uninstallExtensionByProxy.ts | 60 -- .../write/uninstallModuleByProxy.ts | 57 ++ ...tension.ts => uninstallPublishedModule.ts} | 36 +- ...tExtensionConfig.ts => getModuleConfig.ts} | 36 +- ...tExtensionConfig.ts => getModuleConfig.ts} | 36 +- .../read/getModuleConfig.ts} | 36 +- .../read/getModuleConfig.ts} | 36 +- .../read/getExtensionConfig.ts | 122 --- .../ClaimableERC721/read/getModuleConfig.ts | 122 +++ .../read/getExtensionConfig.ts | 122 --- .../read/getModuleConfig.ts | 122 +++ ...edExtensions.ts => getInstalledModules.ts} | 38 +- .../{installExtension.ts => installModule.ts} | 71 +- ...installExtension.ts => uninstallModule.ts} | 73 +- .../read/getModuleConfig.ts} | 36 +- .../read/getExtensionConfig.ts | 122 --- .../MintableERC1155/read/getModuleConfig.ts | 122 +++ .../MintableERC20/read/getExtensionConfig.ts | 122 --- .../MintableERC20/read/getModuleConfig.ts | 122 +++ .../MintableERC721/read/getExtensionConfig.ts | 122 --- .../MintableERC721/read/getModuleConfig.ts | 122 +++ ...tensionInstalled.ts => ModuleInstalled.ts} | 10 +- ...ionUninstalled.ts => ModuleUninstalled.ts} | 10 +- ...edExtensions.ts => getInstalledModules.ts} | 40 +- .../{installExtension.ts => installModule.ts} | 68 +- ...installExtension.ts => uninstallModule.ts} | 70 +- .../read/getModuleConfig.ts} | 36 +- .../read/getExtensionConfig.ts | 122 --- .../read/getModuleConfig.ts | 122 +++ .../read/getExtensionConfig.ts | 122 --- .../read/getModuleConfig.ts | 122 +++ .../RoyaltyERC1155/read/getExtensionConfig.ts | 122 --- .../RoyaltyERC1155/read/getModuleConfig.ts | 122 +++ .../RoyaltyERC721/read/getExtensionConfig.ts | 122 --- .../RoyaltyERC721/read/getModuleConfig.ts | 122 +++ .../read/getExtensionConfig.ts | 122 --- .../read/getModuleConfig.ts | 122 +++ .../read/getExtensionConfig.ts | 122 --- .../read/getModuleConfig.ts | 122 +++ .../prebuilts/deploy-modular-core.test.ts | 68 +- 98 files changed, 6272 insertions(+), 6340 deletions(-) rename apps/dashboard/src/components/contract-components/contract-deploy-form/{modular-contract-default-extensions-fieldset.tsx => modular-contract-default-modules-fieldset.tsx} (62%) create mode 100644 apps/dashboard/src/components/contract-components/contract-publish-form/modular-contract-fieldset.tsx create mode 100644 apps/dashboard/src/components/contract-components/contract-publish-form/module-input.tsx rename apps/dashboard/src/components/contract-components/contract-publish-form/{extensions-param-selector.tsx => modules-param-selector.tsx} (84%) rename apps/dashboard/src/contract-ui/tabs/manage/components/{InstalledExtensionsTable.tsx => InstalledModulesTable.tsx} (82%) rename apps/dashboard/src/contract-ui/tabs/manage/components/{ExtensionForm.tsx => ModuleForm.tsx} (62%) delete mode 100644 apps/dashboard/src/contract-ui/tabs/manage/components/getExtensionInstalledParams.ts create mode 100644 apps/dashboard/src/contract-ui/tabs/manage/components/getModuleInstalledParams.ts rename apps/dashboard/src/contract-ui/tabs/manage/components/{install-extension-params.tsx => install-module-params.tsx} (64%) rename apps/dashboard/src/contract-ui/tabs/manage/components/{extensionContractInfo.ts => moduleContractInfo.ts} (94%) rename legacy_packages/sdk/src/evm/common/modular/{compatibleExtensions.ts => compatibleModules.ts} (76%) delete mode 100644 legacy_packages/sdk/test/evm/mock/mockExtensionWithInterface.ts rename legacy_packages/sdk/test/evm/mock/{mockExtensionWithFunctionsMetadata.ts => mockModuleWithFunctionsMetadata.ts} (55%) create mode 100644 legacy_packages/sdk/test/evm/mock/mockModuleWithInterface.ts delete mode 100644 packages/thirdweb/scripts/generate/abis/modular/IModularExtension.json create mode 100644 packages/thirdweb/scripts/generate/abis/modular/IModularModule.json delete mode 100644 packages/thirdweb/scripts/generate/abis/modular/ModularExtension.json create mode 100644 packages/thirdweb/scripts/generate/abis/modular/ModularModule.json rename packages/thirdweb/src/extensions/modular/ModularCore/write/{installPublishedExtension.ts => installPublishedModule.ts} (57%) delete mode 100644 packages/thirdweb/src/extensions/modular/ModularCore/write/uninstallExtensionByProxy.ts create mode 100644 packages/thirdweb/src/extensions/modular/ModularCore/write/uninstallModuleByProxy.ts rename packages/thirdweb/src/extensions/modular/ModularCore/write/{uninstallPublishedExtension.ts => uninstallPublishedModule.ts} (55%) rename packages/thirdweb/src/extensions/modular/__generated__/BatchMetadataERC1155/read/{getExtensionConfig.ts => getModuleConfig.ts} (66%) rename packages/thirdweb/src/extensions/modular/__generated__/BatchMetadataERC721/read/{getExtensionConfig.ts => getModuleConfig.ts} (66%) rename packages/thirdweb/src/extensions/modular/__generated__/{ClaimableERC20/read/getExtensionConfig.ts => ClaimableERC1155/read/getModuleConfig.ts} (66%) rename packages/thirdweb/src/extensions/modular/__generated__/{ClaimableERC1155/read/getExtensionConfig.ts => ClaimableERC20/read/getModuleConfig.ts} (66%) delete mode 100644 packages/thirdweb/src/extensions/modular/__generated__/ClaimableERC721/read/getExtensionConfig.ts create mode 100644 packages/thirdweb/src/extensions/modular/__generated__/ClaimableERC721/read/getModuleConfig.ts delete mode 100644 packages/thirdweb/src/extensions/modular/__generated__/DelayedRevealBatchMetadataERC721/read/getExtensionConfig.ts create mode 100644 packages/thirdweb/src/extensions/modular/__generated__/DelayedRevealBatchMetadataERC721/read/getModuleConfig.ts rename packages/thirdweb/src/extensions/modular/__generated__/IModularCore/read/{getInstalledExtensions.ts => getInstalledModules.ts} (67%) rename packages/thirdweb/src/extensions/modular/__generated__/IModularCore/write/{installExtension.ts => installModule.ts} (60%) rename packages/thirdweb/src/extensions/modular/__generated__/IModularCore/write/{uninstallExtension.ts => uninstallModule.ts} (59%) rename packages/thirdweb/src/extensions/modular/__generated__/{IModularExtension/read/getExtensionConfig.ts => IModularModule/read/getModuleConfig.ts} (66%) delete mode 100644 packages/thirdweb/src/extensions/modular/__generated__/MintableERC1155/read/getExtensionConfig.ts create mode 100644 packages/thirdweb/src/extensions/modular/__generated__/MintableERC1155/read/getModuleConfig.ts delete mode 100644 packages/thirdweb/src/extensions/modular/__generated__/MintableERC20/read/getExtensionConfig.ts create mode 100644 packages/thirdweb/src/extensions/modular/__generated__/MintableERC20/read/getModuleConfig.ts delete mode 100644 packages/thirdweb/src/extensions/modular/__generated__/MintableERC721/read/getExtensionConfig.ts create mode 100644 packages/thirdweb/src/extensions/modular/__generated__/MintableERC721/read/getModuleConfig.ts rename packages/thirdweb/src/extensions/modular/__generated__/ModularCore/events/{ExtensionInstalled.ts => ModuleInstalled.ts} (52%) rename packages/thirdweb/src/extensions/modular/__generated__/ModularCore/events/{ExtensionUninstalled.ts => ModuleUninstalled.ts} (52%) rename packages/thirdweb/src/extensions/modular/__generated__/ModularCore/read/{getInstalledExtensions.ts => getInstalledModules.ts} (66%) rename packages/thirdweb/src/extensions/modular/__generated__/ModularCore/write/{installExtension.ts => installModule.ts} (61%) rename packages/thirdweb/src/extensions/modular/__generated__/ModularCore/write/{uninstallExtension.ts => uninstallModule.ts} (60%) rename packages/thirdweb/src/extensions/modular/__generated__/{ModularExtension/read/getExtensionConfig.ts => ModularModule/read/getModuleConfig.ts} (66%) delete mode 100644 packages/thirdweb/src/extensions/modular/__generated__/OpenEditionMetadataERC1155/read/getExtensionConfig.ts create mode 100644 packages/thirdweb/src/extensions/modular/__generated__/OpenEditionMetadataERC1155/read/getModuleConfig.ts delete mode 100644 packages/thirdweb/src/extensions/modular/__generated__/OpenEditionMetadataERC721/read/getExtensionConfig.ts create mode 100644 packages/thirdweb/src/extensions/modular/__generated__/OpenEditionMetadataERC721/read/getModuleConfig.ts delete mode 100644 packages/thirdweb/src/extensions/modular/__generated__/RoyaltyERC1155/read/getExtensionConfig.ts create mode 100644 packages/thirdweb/src/extensions/modular/__generated__/RoyaltyERC1155/read/getModuleConfig.ts delete mode 100644 packages/thirdweb/src/extensions/modular/__generated__/RoyaltyERC721/read/getExtensionConfig.ts create mode 100644 packages/thirdweb/src/extensions/modular/__generated__/RoyaltyERC721/read/getModuleConfig.ts delete mode 100644 packages/thirdweb/src/extensions/modular/__generated__/SimpleMetadataERC1155/read/getExtensionConfig.ts create mode 100644 packages/thirdweb/src/extensions/modular/__generated__/SimpleMetadataERC1155/read/getModuleConfig.ts delete mode 100644 packages/thirdweb/src/extensions/modular/__generated__/SimpleMetadataERC721/read/getExtensionConfig.ts create mode 100644 packages/thirdweb/src/extensions/modular/__generated__/SimpleMetadataERC721/read/getModuleConfig.ts diff --git a/apps/dashboard/src/@/components/ui/alert.tsx b/apps/dashboard/src/@/components/ui/alert.tsx index 6840380c2ec..50d2cafcc55 100644 --- a/apps/dashboard/src/@/components/ui/alert.tsx +++ b/apps/dashboard/src/@/components/ui/alert.tsx @@ -10,7 +10,7 @@ const alertVariants = cva( variant: { default: "bg-background text-foreground", destructive: - "bg-destructive/10 border-destructive/50 dark:border-destructive [&>svg]:text-destructive", + "bg-destructive/30 border-destructive/50 dark:border-destructive [&>svg]:text-destructive", info: "bg-primary/10 border-primary/50 dark:border-primary [&>svg]:text-primary", warning: "bg-warning/10 border-warning/50 dark:border-warning [&>svg]:text-warning", diff --git a/apps/dashboard/src/components/contract-components/contract-deploy-form/custom-contract.tsx b/apps/dashboard/src/components/contract-components/contract-deploy-form/custom-contract.tsx index 8ee38839a76..c5dc20705a4 100644 --- a/apps/dashboard/src/components/contract-components/contract-deploy-form/custom-contract.tsx +++ b/apps/dashboard/src/components/contract-components/contract-deploy-form/custom-contract.tsx @@ -49,11 +49,11 @@ import { useDeployStatusModal, } from "./deploy-context-modal"; import { - ModularContractDefaultExtensionsFieldset, + ModularContractDefaultModulesFieldset, showPrimarySaleFiedset, showRoyaltyFieldset, - useModularContractsDefaultExtensionsInstallParams, -} from "./modular-contract-default-extensions-fieldset"; + useModularContractsDefaultModulesInstallParams, +} from "./modular-contract-default-modules-fieldset"; import { Param } from "./param"; import { PlatformFeeFieldset } from "./platform-fee-fieldset"; import { PrimarySaleFieldset } from "./primary-sale-fieldset"; @@ -77,7 +77,7 @@ export type CustomContractDeploymentFormData = { saltForCreate2: string; signerAsSalt: boolean; deployParams: Record; - modularContractDefaultExtensionsInstallParams: Record[]; + modularContractDefaultModulesInstallParams: Record[]; contractMetadata?: { name: string; description: string; @@ -160,11 +160,11 @@ const CustomContractForm: React.FC = ({ fullPublishMetadata.data?.deployType === "customFactory"; const isModular = fullPublishMetadata.data?.routerType === "modular"; - const defaultExtensions = fullPublishMetadata.data?.defaultExtensions; + const defaultModules = fullPublishMetadata.data?.defaultModules; - const modularContractDefaultExtensionsInstallParams = - useModularContractsDefaultExtensionsInstallParams({ - defaultExtensions, + const modularContractDefaultModulesInstallParams = + useModularContractsDefaultModulesInstallParams({ + defaultModules, isQueryEnabled: isModular, }); @@ -219,11 +219,11 @@ const CustomContractForm: React.FC = ({ signerAsSalt: true, deployParams: parsedDeployParams, recipients: [{ address: connectedWallet || "", sharesBps: 10000 }], - // set default values for modular contract extensions with custom components - modularContractDefaultExtensionsInstallParams: + // set default values for modular contract modules with custom components + modularContractDefaultModulesInstallParams: (activeAccount && isTWPublisher && - modularContractDefaultExtensionsInstallParams.data?.map((ext) => { + modularContractDefaultModulesInstallParams.data?.map((ext) => { const paramNames = ext.params.map((param) => param.name); const returnVal: Record = {}; @@ -245,7 +245,7 @@ const CustomContractForm: React.FC = ({ parsedDeployParams, isAccountFactory, connectedWallet, - modularContractDefaultExtensionsInstallParams.data, + modularContractDefaultModulesInstallParams.data, isTWPublisher, activeAccount, ], @@ -413,17 +413,17 @@ const CustomContractForm: React.FC = ({ const deployParams = { ...formData.deployParams }; - // if Modular contract has extensions - if (isModular && modularContractDefaultExtensionsInstallParams.data) { - const extensionInstallData: string[] = - modularContractDefaultExtensionsInstallParams.data.map( + // if Modular contract has modules + if (isModular && modularContractDefaultModulesInstallParams.data) { + const moduleInstallData: string[] = + modularContractDefaultModulesInstallParams.data.map( (ext, extIndex) => { return encodeAbiParameters( // param name+type [] ext.params.map((p) => ({ name: p.name, type: p.type })), // value [] Object.values( - formData.modularContractDefaultExtensionsInstallParams[ + formData.modularContractDefaultModulesInstallParams[ extIndex ] || {}, ), @@ -431,8 +431,7 @@ const CustomContractForm: React.FC = ({ }, ); - deployParams._extensionInstallData = - JSON.stringify(extensionInstallData); + deployParams._moduleInstallData = JSON.stringify(moduleInstallData); } deploy.mutate( @@ -649,8 +648,8 @@ const CustomContractForm: React.FC = ({ .filter((paramName) => { if ( isModular && - (paramName === "_extensionInstallData" || - paramName === "_extensions") + (paramName === "_moduleInstallData" || + paramName === "_modules") ) { return false; } @@ -681,12 +680,10 @@ const CustomContractForm: React.FC = ({ {isModular && ( <> - {modularContractDefaultExtensionsInstallParams.data ? ( - ) : ( diff --git a/apps/dashboard/src/components/contract-components/contract-deploy-form/modular-contract-default-extensions-fieldset.tsx b/apps/dashboard/src/components/contract-components/contract-deploy-form/modular-contract-default-modules-fieldset.tsx similarity index 62% rename from apps/dashboard/src/components/contract-components/contract-deploy-form/modular-contract-default-extensions-fieldset.tsx rename to apps/dashboard/src/components/contract-components/contract-deploy-form/modular-contract-default-modules-fieldset.tsx index 95953bb936e..e22488b52e8 100644 --- a/apps/dashboard/src/components/contract-components/contract-deploy-form/modular-contract-default-extensions-fieldset.tsx +++ b/apps/dashboard/src/components/contract-components/contract-deploy-form/modular-contract-default-modules-fieldset.tsx @@ -1,72 +1,72 @@ import { FormControl } from "@chakra-ui/react"; import { useQuery } from "@tanstack/react-query"; import { SolidityInput } from "contract-ui/components/solidity-inputs"; -import { getExtensionInstalledParams } from "contract-ui/tabs/manage/components/getExtensionInstalledParams"; +import { getModuleInstalledParams } from "contract-ui/tabs/manage/components/getModuleInstalledParams"; import invariant from "tiny-invariant"; import { FormErrorMessage, FormLabel } from "tw-components"; import type { CustomContractDeploymentForm } from "./custom-contract"; import { PrimarySaleFieldset } from "./primary-sale-fieldset"; import { RoyaltyFieldset } from "./royalty-fieldset"; -type ExtensionMeta = { - extensionName: string; - extensionVersion: string; +type ModuleMeta = { + moduleName: string; + moduleVersion: string; publisherAddress: string; }; /** - * Get the install params for all given extensions + * Get the install params for all given modules */ -export function useModularContractsDefaultExtensionsInstallParams(props: { - defaultExtensions?: ExtensionMeta[]; +export function useModularContractsDefaultModulesInstallParams(props: { + defaultModules?: ModuleMeta[]; isQueryEnabled: boolean; }) { - const { defaultExtensions, isQueryEnabled } = props; + const { defaultModules, isQueryEnabled } = props; return useQuery({ queryKey: [ - "useModularContractsDefaultExtensionsInstallParams", - defaultExtensions, + "useModularContractsDefaultModulesInstallParams", + defaultModules, ], queryFn: async () => { - invariant(defaultExtensions, "defaultExtensions must be defined"); - return Promise.all(defaultExtensions.map(getExtensionInstalledParams)); + invariant(defaultModules, "defaultModules must be defined"); + return Promise.all(defaultModules.map(getModuleInstalledParams)); }, - enabled: !!(isQueryEnabled && defaultExtensions), + enabled: !!(isQueryEnabled && defaultModules), refetchOnWindowFocus: false, }); } -export type UseModularContractsDefaultExtensionsInstallParams = ReturnType< - typeof useModularContractsDefaultExtensionsInstallParams +export type UseModularContractsDefaultModulesInstallParams = ReturnType< + typeof useModularContractsDefaultModulesInstallParams >; -type Extensions = NonNullable< - UseModularContractsDefaultExtensionsInstallParams["data"] +type Modules = NonNullable< + UseModularContractsDefaultModulesInstallParams["data"] >; -type ExtensionWithIndex = Extensions[number] & { extensionIndex: number }; +type ModuleWithIndex = Modules[number] & { moduleIndex: number }; -export function ModularContractDefaultExtensionsFieldset(props: { - extensions: Extensions; +export function ModularContractDefaultModulesFieldset(props: { + modules: Modules; form: CustomContractDeploymentForm; isTWPublisher: boolean; }) { - // save the index of the extension before filtering out - const extensionsWithIndex: ExtensionWithIndex[] = props.extensions + // save the index of the module before filtering out + const modulesWithIndex: ModuleWithIndex[] = props.modules .map((v, i) => ({ ...v, - extensionIndex: i, + moduleIndex: i, })) .filter((v) => v.params.length > 0); return (
- {extensionsWithIndex.map((ext) => { + {modulesWithIndex.map((ext) => { return ( - @@ -77,34 +77,26 @@ export function ModularContractDefaultExtensionsFieldset(props: { ); } -function RenderExtension(props: { - extension: ExtensionWithIndex; +function RenderModule(props: { + module: ModuleWithIndex; form: CustomContractDeploymentForm; isTWPublisher: boolean; }) { - const { extension, form } = props; + const { module, form } = props; // only consider mapping if published by thirdweb, else show the generic form if (props.isTWPublisher) { - const paramNames = extension.params.map((param) => param.name); + const paramNames = module.params.map((param) => param.name); if (showRoyaltyFieldset(paramNames)) { return ( - + ); } if (showPrimarySaleFiedset(paramNames)) { return ( - + ); } } @@ -112,12 +104,12 @@ function RenderExtension(props: { return (

- {extension.extensionName} + {module.moduleName}

- {extension.params.map((param) => { + {module.params.map((param) => { const formFieldKey = - `modularContractDefaultExtensionsInstallParams.${extension.extensionIndex}.${param.name}` as const; + `modularContractDefaultModulesInstallParams.${module.moduleIndex}.${param.name}` as const; return ( | ReturnType; @@ -23,7 +25,8 @@ interface DefaultFactoryProps { export const DefaultFactory: React.FC = ({ abi, shouldShowDynamicFactoryInput, - shouldShowExtensionsParamInput, + shouldShowModularFactoryInput, + shouldShowModulesParamInput, deployParams, }) => { const form = useFormContext(); @@ -78,24 +81,24 @@ export const DefaultFactory: React.FC = ({ /> - {shouldShowExtensionsParamInput && ( + {shouldShowModulesParamInput && ( <> - Extension Param + Modules Param - The contract uses extensions. Choose the extension param name - from the initializer params below. + The contract uses modules. Choose the modules param name from + the initializer params below. - form.setValue( - "factoryDeploymentData.modularFactoryInput.extensionsParamName", + "factoryDeploymentData.modularFactoryInput.modulesParamName", selectedParam, ) } @@ -105,9 +108,8 @@ export const DefaultFactory: React.FC = ({ )} - {shouldShowDynamicFactoryInput && ( - - )} + {shouldShowDynamicFactoryInput && } + {shouldShowModularFactoryInput && } ); }; diff --git a/apps/dashboard/src/components/contract-components/contract-publish-form/dynamic-contract-fieldset.tsx b/apps/dashboard/src/components/contract-components/contract-publish-form/dynamic-contract-fieldset.tsx index 77d15d86896..0a03e9c076d 100644 --- a/apps/dashboard/src/components/contract-components/contract-publish-form/dynamic-contract-fieldset.tsx +++ b/apps/dashboard/src/components/contract-components/contract-publish-form/dynamic-contract-fieldset.tsx @@ -4,13 +4,7 @@ import { FiPlus } from "react-icons/fi"; import { Button, Heading, Text } from "tw-components"; import { ExtensionInput } from "./extension-input"; -interface DynamicContractsFieldsetInputProps { - isModular: boolean; -} - -export const DynamicContractsFieldset: React.FC< - DynamicContractsFieldsetInputProps -> = ({ isModular }) => { +export const DynamicContractsFieldset = () => { const form = useFormContext(); const { fields, append, remove } = useFieldArray({ @@ -26,12 +20,7 @@ export const DynamicContractsFieldset: React.FC< {fields.map((item, index) => ( - + ))} + + + + ); +}; diff --git a/apps/dashboard/src/components/contract-components/contract-publish-form/module-input.tsx b/apps/dashboard/src/components/contract-components/contract-publish-form/module-input.tsx new file mode 100644 index 00000000000..b0fc2a11ebb --- /dev/null +++ b/apps/dashboard/src/components/contract-components/contract-publish-form/module-input.tsx @@ -0,0 +1,118 @@ +import { + Divider, + Flex, + FormControl, + Icon, + IconButton, + Input, + Select, + Skeleton, +} from "@chakra-ui/react"; +import { useFormContext } from "react-hook-form"; +import { FiTrash } from "react-icons/fi"; +import { FormLabel } from "tw-components"; +import { useAllVersions, usePublishedContractsQuery } from "../hooks"; + +interface ModuleInputProps { + index: number; + remove: (index: number) => void; +} + +export const ModuleInput: React.FC = ({ index, remove }) => { + const form = useFormContext(); + const feature = "ModularModule"; + + const publishedContractsQuery = usePublishedContractsQuery( + form.watch(`defaultModules.${index}.publisherAddress`), + feature, + ); + + const allVersions = useAllVersions( + form.watch(`defaultModules.${index}.publisherAddress`), + form.watch(`defaultModules.${index}.moduleName`), + ); + + return ( + + + + Publisher + + + + Module Name + + + + + + + Module Version + + + + + } + aria-label="Remove row" + onClick={() => remove(index)} + alignSelf="end" + /> + + + + ); +}; diff --git a/apps/dashboard/src/components/contract-components/contract-publish-form/extensions-param-selector.tsx b/apps/dashboard/src/components/contract-components/contract-publish-form/modules-param-selector.tsx similarity index 84% rename from apps/dashboard/src/components/contract-components/contract-publish-form/extensions-param-selector.tsx rename to apps/dashboard/src/components/contract-components/contract-publish-form/modules-param-selector.tsx index df809e0163d..f319402f70e 100644 --- a/apps/dashboard/src/components/contract-components/contract-publish-form/extensions-param-selector.tsx +++ b/apps/dashboard/src/components/contract-components/contract-publish-form/modules-param-selector.tsx @@ -12,7 +12,7 @@ import type { useFunctionParamsFromABI, } from "../hooks"; -interface ExtensionsParamSelectorProps { +interface ModulesParamSelectorProps { deployParams: | ReturnType | ReturnType; @@ -20,9 +20,11 @@ interface ExtensionsParamSelectorProps { onChange: (fn: string) => void; } -export const ExtensionsParamSelector: React.FC< - ExtensionsParamSelectorProps -> = ({ deployParams, value, onChange }) => { +export const ModulesParamSelector: React.FC = ({ + deployParams, + value, + onChange, +}) => { return ( - {!isExtensionCompatibleQuery.isFetching && - isExtensionCompatibleQuery.data === false && - "Extension is not compatible"} - {errors.extensionContract?.message} + {!isModuleCompatibleQuery.isFetching && + isModuleCompatibleQuery.data === false && + "Module is not compatible"} + {errors.moduleContract?.message} - {isExtensionCompatibleQuery.isFetching && selectedExtension && ( + {isModuleCompatibleQuery.isFetching && selectedModule && (

Checking Compatibility

)} - {isExtensionCompatibleQuery.isError && ( + {isModuleCompatibleQuery.isError && (

- Extension may not be compatible + Module may not be compatible

)}
- Extension Version + Module Version