From fb5d9bdf334fbe2e2a18fb14f9a1caecbd3f2ae9 Mon Sep 17 00:00:00 2001
From: 0xFirekeeper <0xFirekeeper@gmail.com>
Date: Thu, 9 Oct 2025 20:04:31 +0700
Subject: [PATCH] Refactor project wallet setup and controls UI
Extracted project wallet setup logic into a new ProjectWalletSetup component, replacing the previous inline implementation in ProjectFTUX. Updated ProjectWalletControls to use a Select dropdown for wallet selection instead of a radio group. Improved user feedback messages and streamlined wallet selection and creation flows.
Closes BLD-388
---
.../components/ProjectFTUX/ProjectFTUX.tsx | 24 +-
.../ProjectWalletControls.client.tsx | 110 +++++----
.../ProjectFTUX/ProjectWalletSetup.client.tsx | 215 ++++++++++++++++++
.../wallet-table/wallet-table-ui.client.tsx | 4 +-
4 files changed, 289 insertions(+), 64 deletions(-)
create mode 100644 apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectFTUX/ProjectWalletSetup.client.tsx
diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectFTUX/ProjectFTUX.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectFTUX/ProjectFTUX.tsx
index 1f637d9b0e3..ab2c95ede86 100644
--- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectFTUX/ProjectFTUX.tsx
+++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectFTUX/ProjectFTUX.tsx
@@ -7,7 +7,6 @@ import {
import Link from "next/link";
import type { Project } from "@/api/project/projects";
import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert";
-import { AlertDialogFooter } from "@/components/ui/alert-dialog";
import { CodeServer } from "@/components/ui/code/code.server";
import { UnderlineLink } from "@/components/ui/UnderlineLink";
import { DotNetIcon } from "@/icons/brand-icons/DotNetIcon";
@@ -25,10 +24,10 @@ import {
getProjectWallet,
type ProjectWalletSummary,
} from "@/lib/server/project-wallet";
-import CreateServerWallet from "../../transactions/server-wallets/components/create-server-wallet.client";
import { ClientIDSection } from "./ClientIDSection";
import { IntegrateAPIKeyCodeTabs } from "./IntegrateAPIKeyCodeTabs";
import { ProjectWalletControls } from "./ProjectWalletControls.client";
+import { ProjectWalletSetup } from "./ProjectWalletSetup.client";
import { SecretKeySection } from "./SecretKeySection";
export async function ProjectFTUX(props: {
@@ -108,22 +107,11 @@ export function ProjectWalletSection(props: {
>
) : (
-
-
- No default project wallet set
-
- Set a default project wallet to use for dashboard and API
- integrations.
-
-
-
-
-
+
)}
diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectFTUX/ProjectWalletControls.client.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectFTUX/ProjectWalletControls.client.tsx
index 97fb9d328f2..eb9ea652eba 100644
--- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectFTUX/ProjectWalletControls.client.tsx
+++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectFTUX/ProjectWalletControls.client.tsx
@@ -48,9 +48,14 @@ import {
FormMessage,
} from "@/components/ui/form";
import { Input } from "@/components/ui/input";
-import { Label } from "@/components/ui/label";
-import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group";
import { Spinner } from "@/components/ui/Spinner";
+import {
+ Select,
+ SelectContent,
+ SelectItem,
+ SelectTrigger,
+ SelectValue,
+} from "@/components/ui/select";
import { getClientThirdwebClient } from "@/constants/thirdweb-client.client";
import { useV5DashboardChain } from "@/hooks/chains/v5-adapter";
import { useDashboardRouter } from "@/lib/DashboardRouter";
@@ -163,7 +168,7 @@ export function ProjectWalletControls(props: ProjectWalletControlsProps) {
},
onSuccess: async (_, wallet) => {
const descriptionLabel = wallet.label ?? wallet.address;
- toast.success("Default project wallet updated", {
+ toast.success("Project wallet updated", {
description: `Now pointing to ${descriptionLabel}`,
});
await queryClient.invalidateQueries({
@@ -347,49 +352,66 @@ export function ProjectWalletControls(props: ProjectWalletControlsProps) {
default.
) : (
- setSelectedWalletId(value)}
- value={selectedWalletId}
- >
- {serverWallets.map((wallet) => {
- const isCurrent =
- wallet.address.toLowerCase() === currentWalletAddressLower;
- const isSelected = wallet.id === selectedWalletId;
-
- return (
-