<!-- start pr-codex -->
## PR-Codex overview
This PR deprecates functions, updates types, refactors components, and adds modules for contract deployment.
### Detailed summary
- Deprecated functions in favor of new ones
- Updated types and added necessary type assertions
- Refactored components with new props and imports
- Added modules for contract deployment and handling metadata
> The following files were skipped due to too many changes: `apps/dashboard/src/app/(dashboard)/published-contract/utils/module-base-64.ts`, `apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/components/module-list.client.tsx`, `apps/dashboard/src/app/(dashboard)/published-contract/components/uri-based-deploy.tsx`, `pnpm-lock.yaml`, `apps/dashboard/src/app/(dashboard)/published-contract/components/contract-actions-deploy.client.tsx`, `apps/dashboard/src/app/(dashboard)/published-contract/components/contract-info.tsx`, `apps/dashboard/src/app/(dashboard)/published-contract/components/contract-actions-published.client.tsx`, `packages/thirdweb/src/utils/any-evm/deploy-metadata.ts`, `apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/utils/getPublishedContractsWithPublisherMapping.ts`, `packages/thirdweb/package.json`, `apps/dashboard/src/app/(dashboard)/contracts/deploy/[compiler_uri]/page.tsx`, `apps/dashboard/src/contract-ui/tabs/code/components/code-overview.tsx`, `apps/dashboard/src/components/contract-components/contract-deploy-form/trusted-forwarders-fieldset.tsx`, `apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/layout.tsx`, `apps/dashboard/src/components/contract-components/contract-deploy-form/contract-metadata-fieldset.tsx`, `apps/dashboard/src/app/(dashboard)/published-contract/components/contract-header.tsx`, `apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/components/breadcrumbs.client.tsx`, `apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/opengraph-image.tsx`, `apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/page.tsx`, `apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/[version]/opengraph-image.tsx`, `packages/thirdweb/src/utils/abi/normalizeFunctionParams.ts`, `apps/dashboard/src/app/(dashboard)/published-contract/components/version-selector.tsx`, `packages/thirdweb/src/contract/deployment/deploy-with-abi.ts`, `apps/dashboard/src/contract-ui/tabs/manage/components/getModuleInstalledParams.ts`, `packages/thirdweb/src/extensions/prebuilts/get-required-transactions.test.ts`, `apps/dashboard/src/app/(dashboard)/published-contract/[publisher]/[contract_id]/[version]/page.tsx`, `apps/dashboard/src/app/(dashboard)/published-contract/components/publish-based-deploy.tsx`, `apps/dashboard/src/components/contract-components/fetch-contracts-with-versions.ts`, `apps/dashboard/src/components/contract-functions/contract-function.tsx`, `apps/dashboard/src/components/contract-components/contract-deploy-form/modular-contract-default-modules-fieldset.tsx`, `packages/thirdweb/src/extensions/prebuilts/get-required-transactions.ts`, `apps/dashboard/src/pages/api/og/publishedContract.tsx`, `apps/dashboard/src/components/contract-components/published-contract/index.tsx`, `apps/dashboard/src/components/contract-components/hooks.ts`, `apps/dashboard/src/components/contract-components/contract-deploy-form/custom-contract.tsx`
> ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}`
<!-- end pr-codex -->
77 lines
2.0 KiB
TypeScript
77 lines
2.0 KiB
TypeScript
import {
|
|
Select,
|
|
SelectContent,
|
|
SelectItem,
|
|
SelectTrigger,
|
|
SelectValue,
|
|
} from "@/components/ui/select";
|
|
import { useDashboardRouter } from "@/lib/DashboardRouter";
|
|
import { usePathname, useSearchParams } from "next/navigation";
|
|
import { useMemo } from "react";
|
|
|
|
type DeployContractVersionSelectorProps = {
|
|
availableVersions: string[];
|
|
version: string;
|
|
};
|
|
|
|
export function DeployContractVersionSelector({
|
|
availableVersions,
|
|
version,
|
|
}: DeployContractVersionSelectorProps) {
|
|
const router = useDashboardRouter();
|
|
const pathname = usePathname() || "";
|
|
const searchParams = useSearchParams();
|
|
|
|
const { isDeploy, rootPathName } = useMemo(() => {
|
|
return {
|
|
isDeploy: pathname.endsWith("/deploy"),
|
|
rootPathName: pathname
|
|
.replace(/\/deploy$/, "")
|
|
.replace(`/${version}`, ""),
|
|
};
|
|
}, [pathname, version]);
|
|
|
|
return (
|
|
<Select
|
|
value={version}
|
|
onValueChange={(val) => {
|
|
if (availableVersions.includes(val)) {
|
|
const stringifiedSearchParams = searchParams?.toString();
|
|
const isLatestVersion = val === availableVersions[0];
|
|
let pathName = isLatestVersion
|
|
? rootPathName
|
|
: `${rootPathName}/${val}`;
|
|
|
|
if (isDeploy) {
|
|
// append the /deploy to the path
|
|
pathName = `${pathName}/deploy`;
|
|
}
|
|
|
|
// if any search params, add them to the path
|
|
if (stringifiedSearchParams) {
|
|
pathName = `${pathName}?${stringifiedSearchParams}`;
|
|
}
|
|
|
|
router.push(pathName);
|
|
}
|
|
}}
|
|
>
|
|
<SelectTrigger className="min-w-[180px] bg-transparent hover:bg-accent">
|
|
<SelectValue />
|
|
</SelectTrigger>
|
|
<SelectContent>
|
|
{availableVersions.map((v, idx) => {
|
|
return (
|
|
<SelectItem value={v || "latest"} key={v}>
|
|
{v}
|
|
{idx === 0 && (
|
|
<span className="text-muted-foreground"> (latest) </span>
|
|
)}
|
|
</SelectItem>
|
|
);
|
|
})}
|
|
</SelectContent>
|
|
</Select>
|
|
);
|
|
}
|