@@ -225,10 +334,12 @@ export function ClaimTokenCardUI(props: {
skeletonData={`0.00 ${props.claimConditionCurrency.symbol}`}
loadedData={
claimParamsData
- ? `${toTokens(
- claimParamsData.pricePerTokenWei,
- claimParamsData.decimals,
- )} ${claimParamsData.symbol}`
+ ? claimParamsData.pricePerTokenWei === 0n
+ ? "FREE"
+ : `${toTokens(
+ claimParamsData.pricePerTokenWei,
+ claimParamsData.decimals,
+ )} ${claimParamsData.symbol}`
: undefined
}
render={(v) => {
@@ -251,14 +362,16 @@ export function ClaimTokenCardUI(props: {
skeletonData={"0.00 ETH"}
loadedData={
claimParamsData
- ? `${
- Number(
- toTokens(
- claimParamsData.pricePerTokenWei,
- claimParamsData.decimals,
- ),
- ) * Number(quantity)
- } ${claimParamsData.symbol}`
+ ? claimParamsData.pricePerTokenWei === 0n
+ ? "FREE"
+ : `${
+ Number(
+ toTokens(
+ claimParamsData.pricePerTokenWei,
+ claimParamsData.decimals,
+ ),
+ ) * Number(quantity)
+ } ${claimParamsData.symbol}`
: undefined
}
render={(v) => {
@@ -353,7 +466,6 @@ function PriceInput(props: {
id={props.id}
value={String(props.quantity)}
onChange={(value) => {
- console.log("value", value);
props.setQuantity(value);
}}
className="!text-2xl h-auto truncate bg-muted/50 pr-14 font-bold"
diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/create-token-page-impl.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/create-token-page-impl.tsx
index f704d2b8a84..9ed0077c31b 100644
--- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/create-token-page-impl.tsx
+++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/create-token-page-impl.tsx
@@ -62,7 +62,10 @@ export function CreateTokenAssetPage(props: {
);
trackEvent(
- getTokenDeploymentTrackingData("attempt", Number(formValues.chain)),
+ getTokenDeploymentTrackingData({
+ type: "attempt",
+ chainId: Number(formValues.chain),
+ }),
);
const socialUrls = formValues.socialUrls.reduce(
@@ -109,7 +112,10 @@ export function CreateTokenAssetPage(props: {
);
trackEvent(
- getTokenDeploymentTrackingData("success", Number(formValues.chain)),
+ getTokenDeploymentTrackingData({
+ type: "success",
+ chainId: Number(formValues.chain),
+ }),
);
// add contract to project in background
@@ -133,11 +139,16 @@ export function CreateTokenAssetPage(props: {
action: "deploy",
chainId: Number(formValues.chain),
status: "error",
+ errorMessage: e instanceof Error ? e.message : "Unknown error",
}),
);
trackEvent(
- getTokenDeploymentTrackingData("error", Number(formValues.chain)),
+ getTokenDeploymentTrackingData({
+ type: "error",
+ chainId: Number(formValues.chain),
+ errorMessage: e instanceof Error ? e.message : "Unknown error",
+ }),
);
throw e;
}
@@ -201,6 +212,7 @@ export function CreateTokenAssetPage(props: {
action: "airdrop",
chainId: Number(formValues.chain),
status: "error",
+ errorMessage: e instanceof Error ? e.message : "Unknown error",
}),
);
throw e;
@@ -270,6 +282,7 @@ export function CreateTokenAssetPage(props: {
action: "mint",
chainId: Number(formValues.chain),
status: "error",
+ errorMessage: e instanceof Error ? e.message : "Unknown error",
}),
);
throw e;
@@ -368,6 +381,7 @@ export function CreateTokenAssetPage(props: {
action: "claim-conditions",
chainId: Number(formValues.chain),
status: "error",
+ errorMessage: e instanceof Error ? e.message : "Unknown error",
}),
);
throw e;
diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/launch/launch-token.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/launch/launch-token.tsx
index 1a66ac53d2f..ab756374369 100644
--- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/launch/launch-token.tsx
+++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/launch/launch-token.tsx
@@ -46,18 +46,29 @@ export function LaunchTokenStatus(props: {
const trackEvent = useTrack();
async function handleSubmitClick() {
- function launchTracking(type: "attempt" | "success" | "error") {
+ function launchTracking(
+ params:
+ | {
+ type: "attempt" | "success";
+ }
+ | {
+ type: "error";
+ errorMessage: string;
+ },
+ ) {
trackEvent(
getLaunchTrackingData({
chainId: Number(formValues.chain),
airdropEnabled: formValues.airdropEnabled,
saleEnabled: formValues.saleEnabled,
- type,
+ ...params,
}),
);
}
- launchTracking("attempt");
+ launchTracking({
+ type: "attempt",
+ });
function updateStatus(index: number, newStatus: MultiStepState["status"]) {
setSteps((prev) => {
@@ -84,12 +95,18 @@ export function LaunchTokenStatus(props: {
// do not use await next step
nextStep.execute();
} else {
- launchTracking("success");
+ launchTracking({
+ type: "success",
+ });
props.onLaunchSuccess();
}
} catch (error) {
updateStatus(index, "error");
- launchTracking("error");
+ launchTracking({
+ type: "error",
+ errorMessage:
+ error instanceof Error ? error.message : "Unknown error",
+ });
console.error(error);
}
};
diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/tracking.ts b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/tracking.ts
index 2da4e7e7cbc..412058fa8c3 100644
--- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/tracking.ts
+++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/create/tracking.ts
@@ -1,40 +1,72 @@
export function getTokenDeploymentTrackingData(
- type: "attempt" | "success" | "error",
- chainId: number,
+ params: {
+ chainId: number;
+ } & (
+ | {
+ type: "attempt" | "success";
+ }
+ | {
+ type: "error";
+ errorMessage: string;
+ }
+ ),
) {
// using "custom-contract" because it has to match the main deployment tracking format
return {
category: "custom-contract",
action: "deploy",
- label: type,
+ label: params.type,
publisherAndContractName: "deployer.thirdweb.eth/DropERC20",
- chainId: chainId,
+ chainId: params.chainId,
deploymentType: "asset",
};
}
// example: asset.claim-conditions.attempt
-export function getTokenStepTrackingData(params: {
- action: "claim-conditions" | "airdrop" | "mint" | "deploy";
- chainId: number;
- status: "attempt" | "success" | "error";
-}) {
+export function getTokenStepTrackingData(
+ params: {
+ action: "claim-conditions" | "airdrop" | "mint" | "deploy";
+ chainId: number;
+ } & (
+ | {
+ status: "attempt" | "success";
+ }
+ | {
+ status: "error";
+ errorMessage: string;
+ }
+ ),
+) {
return {
category: "asset",
action: params.action,
contractType: "DropERC20",
label: params.status,
chainId: params.chainId,
+ ...(params.status === "error"
+ ? {
+ errorMessage: params.errorMessage,
+ }
+ : {}),
};
}
// example: asset.launch.attempt
-export function getLaunchTrackingData(params: {
- chainId: number;
- airdropEnabled: boolean;
- saleEnabled: boolean;
- type: "attempt" | "success" | "error";
-}) {
+export function getLaunchTrackingData(
+ params: {
+ chainId: number;
+ airdropEnabled: boolean;
+ saleEnabled: boolean;
+ } & (
+ | {
+ type: "attempt" | "success";
+ }
+ | {
+ type: "error";
+ errorMessage: string;
+ }
+ ),
+) {
return {
category: "asset",
action: "launch",
@@ -43,6 +75,11 @@ export function getLaunchTrackingData(params: {
chainId: params.chainId,
airdropEnabled: params.airdropEnabled,
saleEnabled: params.saleEnabled,
+ ...(params.type === "error"
+ ? {
+ errorMessage: params.errorMessage,
+ }
+ : {}),
};
}
diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectSidebarLayout.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectSidebarLayout.tsx
index 8ce108a67d0..f0393114cf6 100644
--- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectSidebarLayout.tsx
+++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectSidebarLayout.tsx
@@ -75,11 +75,7 @@ export function ProjectSidebarLayout(props: {
},
{
href: `${layoutPath}/engine`,
- label: (
-
- Engine New
-
- ),
+ label: "Engine",
icon: EngineIcon,
tracking: tracking("engine"),
},