From 51f7418d1ffa281ee3c40a1192e54e357143d69f Mon Sep 17 00:00:00 2001 From: MananTank Date: Thu, 28 Aug 2025 21:26:54 +0000 Subject: [PATCH] [MNY-128] Dashboard: UI tweaks in token creation flow (#7939) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ## PR-Codex overview This PR focuses on improving the user interface and error handling in the token and NFT launch processes, as well as refining the layout and component interactions in the distribution section. ### Detailed summary - Removed `isPending` state checks from token and NFT launch components. - Updated button layouts to improve user experience in `launch-token.tsx` and `launch-nft.tsx`. - Changed error message text in `token-distribution.tsx`. - Added `errorMessage` prop to `StepCard` for better error display. - Adjusted layout and styling for improved responsiveness and alignment. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` ## Summary by CodeRabbit - New Features - Step headers can now display error messages. - Distribution chart moved into the main form flow for clearer visibility. - Post-launch actions updated: show “View NFT Collection” or “View Coin” when available; show “Cancel” before completion. - Refactor - Simplified bottom action areas and removed pending-based button disabling for a more predictable flow. - Style - Improved spacing, alignment, and responsiveness in forms. - Updated error text to “Token allocation exceeds total supply” for clearer guidance. --- .../tokens/create/_common/step-card.tsx | 73 +++++++++++-------- .../tokens/create/nft/launch/launch-nft.tsx | 44 +++++------ .../token/distribution/token-distribution.tsx | 23 +++--- .../create/token/launch/launch-token.tsx | 44 +++++------ 4 files changed, 89 insertions(+), 95 deletions(-) diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/_common/step-card.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/_common/step-card.tsx index 316ee8b824f..97da9169891 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/_common/step-card.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/_common/step-card.tsx @@ -3,6 +3,7 @@ import { Button } from "@/components/ui/button"; export function StepCard(props: { title: string; + errorMessage?: string; prevButton: | undefined | { @@ -35,40 +36,50 @@ export function StepCard(props: { {props.children} {(props.prevButton || props.nextButton) && ( -
- {props.prevButton && ( - +
+ {props.errorMessage ? ( +
+ {props.errorMessage} +
+ ) : ( +
)} - {nextButton && nextButton.type !== "custom" && ( - - )} +
+ {props.prevButton && ( + + )} + + {nextButton && nextButton.type !== "custom" && ( + + )} - {props.nextButton && - props.nextButton.type === "custom" && - props.nextButton.custom} + {props.nextButton && + props.nextButton.type === "custom" && + props.nextButton.custom} +
)}
diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/nft/launch/launch-nft.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/nft/launch/launch-nft.tsx index d9c044a3dd6..9200b9d2300 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/nft/launch/launch-nft.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/nft/launch/launch-nft.tsx @@ -303,7 +303,6 @@ export function LaunchNFT(props: { } const isComplete = steps.every((step) => step.status.type === "completed"); - const isPending = steps.some((step) => step.status.type === "pending"); const isPriceSame = props.values.nfts.every( (nft) => nft.price_amount === props.values.nfts[0]?.price_amount, @@ -392,30 +391,25 @@ export function LaunchNFT(props: { />
-
- {isComplete && contractLink ? ( -
- -
- ) : ( -
- )} - - +
+ {!isComplete ? ( + + ) : contractLink ? ( + + ) : null}
diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/token/distribution/token-distribution.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/token/distribution/token-distribution.tsx index e184db1c4ba..d3efec55651 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/token/distribution/token-distribution.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/token/distribution/token-distribution.tsx @@ -50,6 +50,7 @@ export function TokenDistributionFieldset(props: { onClick: props.onPrevious, }} title="Coin Distribution" + errorMessage={distributionError} >
@@ -60,13 +61,19 @@ export function TokenDistributionFieldset(props: { isRequired label="Total Supply" > -
+
{props.tokenSymbol || "Tokens"}
+ +
+ +
{form.watch("saleMode") === "drop-erc20:token-drop" ? ( @@ -85,18 +92,6 @@ export function TokenDistributionFieldset(props: { )} - -
- - - {distributionError && ( -
- {distributionError} -
- )} -
@@ -125,7 +120,7 @@ function getDistributionError(form: TokenDistributionForm) { const totalSumOfSupply = totalAirdrop + saleSupply + ownerSupply; if (totalSumOfSupply > supply) { - return "Token distribution exceeds total supply"; + return "Token allocation exceeds total supply"; } return undefined; diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/token/launch/launch-token.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/token/launch/launch-token.tsx index b70ce5fdd92..84e35db2587 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/token/launch/launch-token.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/token/launch/launch-token.tsx @@ -166,7 +166,6 @@ export function LaunchTokenStatus(props: { } const isComplete = steps.every((step) => step.status.type === "completed"); - const isPending = steps.some((step) => step.status.type === "pending"); async function executeStep(stepId: StepId, gasless: boolean) { const params = { @@ -435,30 +434,25 @@ export function LaunchTokenStatus(props: { />
-
- {isComplete && contractLink ? ( -
- -
- ) : ( -
- )} - - +
+ {!isComplete ? ( + + ) : contractLink ? ( + + ) : null}