-
Notifications
You must be signed in to change notification settings - Fork 549
[TOOL-4892] Dashboard Project navigation updates #7377
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
The latest updates on your projects. Learn more about Vercel for Git ↗︎
1 Skipped Deployment
|
|
WalkthroughThis change refactors major dashboard navigation, routing, and terminology: "assets" are renamed to "tokens," "In-App Wallets" to "Wallets," and "Engine" to "Transactions." Numerous files are updated to reflect new paths, labels, and sidebar structures. Tracking props are removed from upsell banners. Analytics and Nebula-related components are deleted or replaced. Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant Sidebar
participant ProjectSidebarLayout
participant ProjectLayout
participant getEngineLinkType
User->>Sidebar: Clicks sidebar link
Sidebar->>ProjectSidebarLayout: Render with engineLinkType
ProjectSidebarLayout->>getEngineLinkType: Determine engine link type ("cloud" or "dedicated")
getEngineLinkType-->>ProjectSidebarLayout: Returns link type
ProjectSidebarLayout->>Sidebar: Renders links with updated labels/paths
Sidebar-->>User: Shows updated navigation
sequenceDiagram
participant User
participant WebhooksPage
participant ContractsWebhooksPageContent
participant API
User->>WebhooksPage: Navigate to /webhooks
WebhooksPage->>ContractsWebhooksPageContent: Render with project/authToken
ContractsWebhooksPageContent->>API: Fetch webhooks and supported chains
API-->>ContractsWebhooksPageContent: Return data or error
ContractsWebhooksPageContent-->>User: Show webhooks table or creation prompt
Possibly related PRs
Suggested labels
Warning Review ran into problems🔥 ProblemsErrors were encountered while retrieving linked issues. Errors (1)
✨ Finishing Touches
🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
How to use the Graphite Merge QueueAdd either label to this PR to merge it via the merge queue:
You must have a Graphite account in order to use the merge queue. Sign up using this link. An organization admin has enabled the Graphite Merge Queue in this repository. Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue. This stack of pull requests is managed by Graphite. Learn more about stacking. |
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## main #7377 +/- ##
==========================================
- Coverage 52.44% 52.43% -0.01%
==========================================
Files 941 941
Lines 63199 63199
Branches 4226 4225 -1
==========================================
- Hits 33142 33140 -2
- Misses 29950 29952 +2
Partials 107 107
🚀 New features to boost your workflow:
|
size-limit report 📦
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
🧹 Nitpick comments (1)
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/cards.tsx (1)
65-66
: Consider improving terminology consistency.The title uses "Token" (singular) while the description uses "coins or NFTs" which might be confusing. Consider one of these approaches for better clarity:
- Use "Import Existing Tokens" (plural) in the title to match the description's scope
- Or use "Import coins and NFTs you own to the project" in the description for better flow
- title="Import Existing Token" - description="Import coins or NFTs you own to the project" + title="Import Existing Tokens" + description="Import coins and NFTs you own to the project"
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (32)
apps/dashboard/src/@/components/blocks/UpsellBannerCard.stories.tsx
(0 hunks)apps/dashboard/src/@/components/blocks/UpsellBannerCard.tsx
(0 hunks)apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/ContractOverviewPage.tsx
(0 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/(team)/_components/FreePlanUpsellBannerUI.tsx
(0 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/cards.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/page.tsx
(2 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectSidebarLayout.tsx
(3 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/connect/in-app-wallets/_components/header.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/connect/in-app-wallets/_constants.ts
(0 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/connect/in-app-wallets/users/page.tsx
(0 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/cloud/analytics/ftux.client.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/cloud/analytics/tx-chart/tx-chart-ui.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/cloud/layout.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/cloud/server-wallets/components/create-server-wallet.client.tsx
(2 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/cloud/vault/components/key-management.tsx
(0 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(general)/layout.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/nebula/components/analytics/fetch-nebula-analytics.tsx
(0 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/nebula/components/analytics/nebula-analytics-filter.tsx
(0 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/nebula/components/analytics/nebula-analytics-page.tsx
(0 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/nebula/components/analytics/nebula-analytics-ui.stories.tsx
(0 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/nebula/components/analytics/nebula-analytics-ui.tsx
(0 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/nebula/components/analytics/utils.ts
(0 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/nebula/layout.tsx
(0 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/nebula/nebula-ftux.tsx
(0 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/nebula/page.tsx
(0 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/vault/components/create-vault-account.client.tsx
(2 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/vault/components/key-management.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/vault/components/list-access-tokens.client.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/vault/components/rotate-admin-key.client.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/vault/layout.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/vault/page.tsx
(1 hunks)apps/dashboard/src/components/embedded-wallets/Users/index.tsx
(0 hunks)
💤 Files with no reviewable changes (17)
- apps/dashboard/src/app/(app)/team/[team_slug]/(team)/_components/FreePlanUpsellBannerUI.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/connect/in-app-wallets/users/page.tsx
- apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/ContractOverviewPage.tsx
- apps/dashboard/src/@/components/blocks/UpsellBannerCard.stories.tsx
- apps/dashboard/src/components/embedded-wallets/Users/index.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/connect/in-app-wallets/_constants.ts
- apps/dashboard/src/@/components/blocks/UpsellBannerCard.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/nebula/components/analytics/utils.ts
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/nebula/components/analytics/nebula-analytics-filter.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/nebula/page.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/nebula/nebula-ftux.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/nebula/layout.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/nebula/components/analytics/nebula-analytics-ui.stories.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/nebula/components/analytics/fetch-nebula-analytics.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/cloud/vault/components/key-management.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/nebula/components/analytics/nebula-analytics-ui.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/nebula/components/analytics/nebula-analytics-page.tsx
🧰 Additional context used
🧬 Code Graph Analysis (3)
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/cloud/layout.tsx (1)
apps/portal/src/icons/products/EngineIcon.tsx (1)
EngineIcon
(1-21)
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/vault/layout.tsx (1)
apps/dashboard/src/tw-components/link.tsx (1)
Link
(33-56)
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectSidebarLayout.tsx (1)
apps/portal/src/icons/products/InsightIcon.tsx (1)
InsightIcon
(1-21)
⏰ Context from checks skipped due to timeout of 90000ms (8)
- GitHub Check: Size
- GitHub Check: E2E Tests (pnpm, vite)
- GitHub Check: E2E Tests (pnpm, webpack)
- GitHub Check: Unit Tests
- GitHub Check: E2E Tests (pnpm, esbuild)
- GitHub Check: Build Packages
- GitHub Check: Lint Packages
- GitHub Check: Analyze (javascript)
🔇 Additional comments (23)
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/connect/in-app-wallets/_components/header.tsx (1)
7-7
: LGTM! Simplified terminology improves clarity.The change from "In-App Wallets" to "Wallets" aligns with the PR objectives to simplify naming conventions and improve user experience.
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/vault/page.tsx (1)
2-2
: ```shell
#!/bin/bashDisplay the beginning of tsconfig.json to verify baseUrl and paths configuration
echo "=== apps/dashboard/tsconfig.json (lines 1-40) ==="
sed -n '1,40p' apps/dashboard/tsconfig.json</details> <details> <summary>apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/vault/components/rotate-admin-key.client.tsx (1)</summary> `30-34`: ```shell #!/bin/bash # Locate the vault.client file and inspect for the required exports # Find the vault.client file under engine/cloud/lib file_path=$(fd vault.client --type f --extension ts --extension js | grep 'engine/cloud/lib/vault.client.ts') echo "==> Inspecting file: $file_path" # Search for function definitions or re-exports of the required identifiers rg -n 'createWalletAccessToken|initVaultClient|maskSecret' "$file_path" -A2 -B2
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(general)/layout.tsx (2)
28-28
: Header text updated for improved clarity.The change from "Engine" to "Transactions" improves clarity by better describing the functionality of this section.
33-33
: Badge text enhanced with more context.The change from "Dedicated" to "Dedicated Engine" provides clearer context about the type of engine being referenced.
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/cloud/layout.tsx (3)
38-38
: Header updated for consistency with navigation changes.The change from "Engine" to "Transactions" maintains consistency with the broader renaming effort across the dashboard.
43-43
: Badge text enhanced for better context.The change from "Cloud" to "Engine Cloud" provides clearer identification of the service type.
74-88
: ```shell
#!/bin/bashInspect the main sidebar component for a Vault link
SIDEBAR_COMPONENT="apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectSidebarLayout.tsx"
echo "=== Checking for Vault in ProjectSidebarLayout.tsx ==="
rg -C3 "Vault" "$SIDEBAR_COMPONENT" || trueecho "=== Full content of ProjectSidebarLayout.tsx ==="
cat "$SIDEBAR_COMPONENT"</details> <details> <summary>apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/cloud/analytics/ftux.client.tsx (1)</summary> `8-8`: **LGTM - Import path correctly updated for vault reorganization.** The relative path adjustment correctly reflects moving vault components from `engine/cloud/vault` to `vault` at the sidebar level. </details> <details> <summary>apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/vault/components/list-access-tokens.client.tsx (1)</summary> `23-23`: **LGTM - Import path correctly updated for vault utilities reorganization.** The path change correctly reflects moving vault client utilities to the `engine/cloud/lib` directory while maintaining the same imported functions. </details> <details> <summary>apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/cloud/analytics/tx-chart/tx-chart-ui.tsx (1)</summary> `188-188`: **LGTM - Route correctly simplified for new vault structure.** The path change removes the `/engine/cloud` segment, aligning with the vault routing simplification described in the PR objectives. </details> <details> <summary>apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/cloud/server-wallets/components/create-server-wallet.client.tsx (1)</summary> `89-89`: **LGTM - Routes correctly simplified for new vault structure.** Both router paths have been properly updated to remove the `/engine/cloud` segment, maintaining consistent navigation to the vault when management access tokens are unavailable. Also applies to: 107-107 </details> <details> <summary>apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/vault/components/create-vault-account.client.tsx (3)</summary> `159-159`: **Icon change improves semantic clarity.** The change from `LockIcon` to `UserLockIcon` better represents the action of creating a vault account for a user. --- `34-34`: ```shell #!/bin/bash echo "Searching for CreateVaultAccountButton usages and imports across the repo:" rg "CreateVaultAccountButton" -n -C2 .
18-32
: To accurately verify the updated imports and the switch to a named export, let’s broaden our search without relying on undefined file types:#!/bin/bash echo "Checking all usages of storeUserAccessToken:" rg "storeUserAccessToken" --glob '*.ts' --glob '*.tsx' -A2 -B2 echo -e "\nChecking all vault.client imports:" rg "from.*vault\.client" --glob '*.ts' --glob '*.tsx' -A1 -B1 echo -e "\nChecking imports of CreateVaultAccountButton (named vs default):" rg "CreateVaultAccountButton" --glob '*.ts' --glob '*.tsx' -A2 -B2apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/assets/page.tsx (2)
56-59
: Terminology update improves consistency.The change from "Assets" to "Tokens" in both the heading and description provides clearer, more consistent terminology throughout the application.
82-82
: Header terminology aligns with page content.The header change from "Assets" to "Tokens" maintains consistency with the page content and sidebar navigation.
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/vault/layout.tsx (1)
3-31
: Well-structured layout component.The VaultLayout component follows good practices with clear structure, responsive design, and appropriate spacing. The educational content and documentation link provide good user guidance.
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectSidebarLayout.tsx (3)
5-14
: Icon imports updated appropriately.The change from local custom icons to lucide-react icons (
ArrowLeftRightIcon
for transactions,LockIcon
for vault) improves consistency and reduces maintenance overhead.
56-63
: Badge addition highlights new feature.The addition of the "New" badge to the Tokens section effectively communicates the feature update to users.
36-78
: Verify routing consistency for path changes.The sidebar navigation has been updated with new labels and paths. Ensure that the corresponding route handlers exist for the updated paths.
#!/bin/bash # Check if route files exist for the updated paths echo "Checking route files for updated paths:" fd "page.tsx" | grep -E "(tokens|vault|engine)" | head -10 echo -e "\nChecking for assets to tokens route updates:" rg "/assets" --type tsx --type ts | grep -v "node_modules" | head -5apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/vault/components/key-management.tsx (2)
9-46
: Well-designed component with clear conditional logic.The KeyManagement component effectively handles different states with appropriate UI for each scenario. The conditional rendering based on
maskedAdminKey
provides a smooth user experience.
48-81
: Educational content enhances user understanding.The CreateVaultAccountAlert provides comprehensive information about Vault functionality, helping users understand the value proposition before creating an account.
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/vault/layout.tsx
Outdated
Show resolved
Hide resolved
.../src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/vault/components/key-management.tsx
Outdated
Show resolved
Hide resolved
4d378d5
to
ece89a8
Compare
365626b
to
37ad1df
Compare
37ad1df
to
6113f3d
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🔭 Outside diff range comments (4)
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/analytics/utils.ts (1)
1-21
: Add consistent localStorage safety checks to all functions.While
getUserAccessToken
now safely handles undefined localStorage, the other two functions (storeUserAccessToken
anddeleteUserAccessToken
) lack the same protection and could throw errors in non-browser environments.Apply this diff to add consistent safety checks:
export function storeUserAccessToken(projectId: string, accessToken: string) { + if (typeof localStorage === "undefined") { + return; + } localStorage.setItem( `thirdweb:engine-cloud-user-access-token-${projectId}`, accessToken, ); } export function deleteUserAccessToken(projectId: string) { + if (typeof localStorage === "undefined") { + return; + } localStorage.removeItem( `thirdweb:engine-cloud-user-access-token-${projectId}`, ); }apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/cards.tsx (3)
3-7
: Update analytics function names to match new "tokens" terminology.The analytics imports still use "Asset" terminology while the UI has been updated to use "Token" terminology. This creates inconsistency in tracking and may cause confusion.
Consider updating the analytics function names or creating token-specific analytics functions:
import { - reportAssetCreationStarted, - reportAssetImportStarted, - reportAssetImportSuccessful, + reportTokenCreationStarted, + reportTokenImportStarted, + reportTokenImportSuccessful, } from "@/analytics/report";
34-34
: Update ImportModal type prop to match new terminology.The ImportModal component still uses
type="asset"
which is inconsistent with the new "tokens" terminology used throughout the UI.- type="asset" + type="token"
46-48
: Analytics function calls need to be updated consistently.The analytics function calls still use the old "Asset" terminology. If the function names are updated as suggested above, these calls will also need to be updated.
Update the function calls to match the new terminology:
onClick={() => { - reportAssetCreationStarted({ - assetType: "coin", + reportTokenCreationStarted({ + tokenType: "coin", }); }}onClick={() => { - reportAssetCreationStarted({ - assetType: "nft", + reportTokenCreationStarted({ + tokenType: "nft", }); }}onClick={() => { - reportAssetImportStarted(); + reportTokenImportStarted(); setImportModalOpen(true); }}Also applies to: 58-60, 70-70
🧹 Nitpick comments (2)
apps/dashboard/src/@/components/ui/NavLink.tsx (1)
19-25
: Implementation looks solid with good fallback logic.The logic correctly prioritizes the custom
isActive
function when provided and falls back to the existing active state determination. The nested ternary is acceptable here given the clear logic flow.For slightly improved readability, you could consider extracting the fallback logic:
- const isActive = props.isActive - ? props.isActive(pathname) - : pathname - ? props.exactMatch - ? pathname === props.href - : pathname.startsWith(props.href) - : false; + const isActive = props.isActive + ? props.isActive(pathname) + : getDefaultActiveState(pathname, props.href, props.exactMatch); + +function getDefaultActiveState(pathname: string | null, href: string, exactMatch?: boolean): boolean { + if (!pathname) return false; + return exactMatch ? pathname === href : pathname.startsWith(href); +}However, the current implementation is perfectly acceptable.
apps/dashboard/src/app/(app)/account/contracts/_components/DeployedContractsPage.tsx (1)
32-61
: Consider error handling for the async data fetching.The
DeployedContractsPageAsync
function doesn't include explicit error handling for thegetSortedDeployedContracts
call. While this might be handled at a higher level, consider adding error boundaries or try-catch blocks for better user experience.Consider wrapping the async operation in error handling:
async function DeployedContractsPageAsync(props: { teamId: string; projectId: string; authToken: string; client: ThirdwebClient; teamSlug: string; projectSlug: string; }) { + try { const deployedContracts = await getSortedDeployedContracts({ teamId: props.teamId, projectId: props.projectId, authToken: props.authToken, deploymentType: undefined, }); + } catch (error) { + return <div>Error loading contracts. Please try again.</div>; + } return ( <ClientOnly ssr={<Loading />}> <ContractTable variant="contract" contracts={deployedContracts} pageSize={10} teamId={props.teamId} projectId={props.projectId} client={props.client} teamSlug={props.teamSlug} projectSlug={props.projectSlug} /> </ClientOnly> ); }
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (68)
apps/dashboard/redirects.js
(2 hunks)apps/dashboard/src/@/analytics/report.ts
(3 hunks)apps/dashboard/src/@/components/blocks/Sidebar.tsx
(1 hunks)apps/dashboard/src/@/components/blocks/SidebarLayout.tsx
(1 hunks)apps/dashboard/src/@/components/ui/NavLink.tsx
(1 hunks)apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_layout/primary-dashboard-button.tsx
(1 hunks)apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/ContractOverviewPage.tsx
(1 hunks)apps/dashboard/src/app/(app)/account/contracts/DeployedContractsPageHeader.tsx
(2 hunks)apps/dashboard/src/app/(app)/account/contracts/_components/DeployedContractsPage.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/account-abstraction/AAFooterSection.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/account-abstraction/AccountAbstractionPage.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/account-abstraction/factories/page.tsx
(2 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/account-abstraction/page.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/account-abstraction/settings/page.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectSidebarLayout.tsx
(3 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/contracts/layout.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/contracts/page.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/contracts/webhooks/page.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(general)/layout.tsx
(3 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/overview/components/engine-overview.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/page.tsx
(0 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/layout.tsx
(5 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/page.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/settings/ProjectGeneralSettingsPage.tsx
(3 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/cards.tsx
(3 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/_common/PageHeader.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/nft/create-nft-page.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/nft/page.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/nft/sales/sales-settings.tsx
(3 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/token/create-token-page-impl.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/token/page.tsx
(2 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/page.tsx
(3 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/analytics/ftux.client.tsx
(2 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/analytics/send-test-tx.client.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/analytics/tx-chart/tx-chart-ui.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/analytics/tx-table/tx-table-ui.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/analytics/utils.ts
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/layout.tsx
(4 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/lib/analytics.ts
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/page.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/server-wallets/components/create-server-wallet.client.tsx
(2 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/server-wallets/components/try-it-out.tsx
(5 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/server-wallets/page.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/server-wallets/wallet-table/wallet-table-ui.client.tsx
(3 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/tx/[id]/layout.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/tx/[id]/page.tsx
(2 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/layout.tsx
(2 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/page.tsx
(2 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/settings/page.tsx
(3 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/vault/components/create-vault-account.client.tsx
(2 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/vault/components/list-access-tokens.client.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/vault/components/rotate-admin-key.client.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/_components/footer.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/_components/header.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/analytics/page.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/layout.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/settings/page.tsx
(2 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/users/page.tsx
(2 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/components/CreateWebhookModal.tsx
(3 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/components/WebhooksTable.tsx
(3 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/contract-webhooks/contract-webhooks-page.tsx
(1 hunks)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/page.tsx
(2 hunks)apps/dashboard/src/components/contract-components/import-contract/modal.tsx
(1 hunks)apps/dashboard/src/components/contract-components/tables/contract-table.tsx
(2 hunks)apps/dashboard/src/components/dashboard/StepsCard.tsx
(1 hunks)apps/dashboard/src/components/shared/FileInput.tsx
(1 hunks)apps/dashboard/src/components/smart-wallets/AccountAbstractionAnalytics/index.tsx
(1 hunks)apps/dashboard/src/core-ui/batch-upload/batch-table.tsx
(1 hunks)
💤 Files with no reviewable changes (1)
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/page.tsx
✅ Files skipped from review due to trivial changes (39)
- apps/dashboard/src/components/shared/FileInput.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/account-abstraction/settings/page.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/page.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/account-abstraction/page.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/_components/header.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/server-wallets/page.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/account-abstraction/AccountAbstractionPage.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/contracts/page.tsx
- apps/dashboard/src/components/smart-wallets/AccountAbstractionAnalytics/index.tsx
- apps/dashboard/src/@/analytics/report.ts
- apps/dashboard/src/components/contract-components/import-contract/modal.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/tx/[id]/page.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/_common/PageHeader.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/tx/[id]/layout.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/nft/create-nft-page.tsx
- apps/dashboard/src/components/dashboard/StepsCard.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/_components/footer.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/analytics/tx-chart/tx-chart-ui.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/nft/page.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/server-wallets/components/create-server-wallet.client.tsx
- apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_layout/primary-dashboard-button.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/page.tsx
- apps/dashboard/src/@/components/blocks/Sidebar.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/server-wallets/components/try-it-out.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/page.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/analytics/tx-table/tx-table-ui.tsx
- apps/dashboard/src/core-ui/batch-upload/batch-table.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/token/create-token-page-impl.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/account-abstraction/AAFooterSection.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/lib/analytics.ts
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/analytics/send-test-tx.client.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/page.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/nft/sales/sales-settings.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/layout.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/account-abstraction/factories/page.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/analytics/ftux.client.tsx
- apps/dashboard/src/components/contract-components/tables/contract-table.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/layout.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/settings/ProjectGeneralSettingsPage.tsx
🚧 Files skipped from review as they are similar to previous changes (6)
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/vault/components/rotate-admin-key.client.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/vault/components/list-access-tokens.client.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(general)/layout.tsx
- apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/ContractOverviewPage.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/vault/components/create-vault-account.client.tsx
- apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectSidebarLayout.tsx
🧰 Additional context used
🧠 Learnings (1)
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/contracts/webhooks/page.tsx (1)
Learnt from: jnsdls
PR: thirdweb-dev/js#6929
File: apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/insight/webhooks/page.tsx:14-19
Timestamp: 2025-05-21T05:17:31.283Z
Learning: In Next.js server components, the `params` object can sometimes be a Promise that needs to be awaited, despite type annotations suggesting otherwise. In apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/insight/webhooks/page.tsx, it's necessary to await the params object before accessing its properties.
🧬 Code Graph Analysis (4)
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/layout.tsx (1)
apps/dashboard/src/tw-components/link.tsx (1)
Link
(33-56)
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/page.tsx (1)
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/contract-webhooks/contract-webhooks-page.tsx (1)
ContractsWebhooksPageContent
(11-93)
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/components/WebhooksTable.tsx (2)
apps/dashboard/src/components/shared/TWTable.tsx (1)
TWTable
(63-276)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/components/CreateWebhookModal.tsx (1)
CreateContractWebhookButton
(48-304)
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/layout.tsx (3)
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectSidebarLayout.tsx (1)
ProjectSidebarLayout
(20-123)apps/dashboard/src/@/api/projects.ts (1)
Project
(6-6)apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/_utils/getEngineInstances.ts (1)
getEngineInstances
(4-33)
⏰ Context from checks skipped due to timeout of 90000ms (8)
- GitHub Check: E2E Tests (pnpm, webpack)
- GitHub Check: E2E Tests (pnpm, esbuild)
- GitHub Check: Size
- GitHub Check: E2E Tests (pnpm, vite)
- GitHub Check: Unit Tests
- GitHub Check: Build Packages
- GitHub Check: Lint Packages
- GitHub Check: Analyze (javascript)
🔇 Additional comments (57)
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/analytics/utils.ts (1)
9-11
: Good defensive programming practice!The localStorage safety check correctly prevents errors in server-side rendering and non-browser environments.
apps/dashboard/src/@/components/blocks/SidebarLayout.tsx (1)
126-126
: LGTM! Clean integration of custom active state logic.The addition of the
isActive
prop to the NavLink component enables flexible active state determination for sidebar links, which aligns well with the broader sidebar restructuring in this PR.apps/dashboard/src/@/components/ui/NavLink.tsx (1)
14-14
: LGTM! Good type definition for custom active state logic.The optional
isActive
prop with a clear function signature enables flexible active state determination while maintaining backward compatibility.apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/cards.tsx (2)
43-43
: URL path updates look good.The URL paths have been correctly updated from
/assets/create/
to/tokens/create/
which aligns with the PR objectives.Also applies to: 55-55
65-66
: Title and description updates are consistent.The changes from "Import Existing Asset" to "Import Existing Token" and the updated description properly reflect the new terminology.
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/token/page.tsx (3)
5-8
: Import path refactoring looks good.The change from relative imports to absolute imports using the
@app/
prefix improves code maintainability and consistency across the codebase.
27-27
: Login redirect URL correctly updated.The URL path has been properly updated from
/assets/create/token
to/tokens/create/token
, which is consistent with the routing changes in this PR.
9-9
: Import reordering is fine.The reordering of the
redirect
import doesn't affect functionality and maintains clean import organization.apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/universal-bridge/settings/page.tsx (3)
5-6
: LGTM: Import path improvementsThe change from relative imports to absolute
@app/
imports improves maintainability and clarity.
26-28
: LGTM: URL simplification aligns with routing refactorRemoving the
/connect
segment from the redirect URL is consistent with the broader routing simplification across the dashboard.
66-66
: LGTM: Minor styling adjustmentRemoving the
p-5
class is a minor styling change that appears intentional.apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/layout.tsx (5)
1-1
: LGTM: Clean import additionAdding the
Project
type import is necessary for the new utility function.
19-19
: LGTM: Required import for engine instance checkingThe import is necessary for the new
getEngineLinkType
function to check legacy engine instances.
63-66
: LGTM: Clean integration of engine link type logicThe async call to determine engine link type is properly integrated into the existing Promise.all pattern.
97-100
: LGTM: Proper prop passing to sidebar layoutThe
engineLinkType
prop is correctly passed to theProjectSidebarLayout
component.
122-149
: Well-designed engine link type determination logicThe
getEngineLinkType
function implements a clear decision tree:
- Check for engine cloud management access token first
- Fall back to checking for legacy engine instances
- Default to "cloud" type
The logic is sound and handles both new and legacy engine configurations appropriately.
apps/dashboard/redirects.js (3)
65-65
: LGTM: Clean constant definitionThe
projectRoute
constant improves maintainability by avoiding repetition.
67-108
: Comprehensive redirect restructuring aligns with routing changesThe
projectPageRedirects
array consolidates all project-level redirects and properly implements the routing changes:
/connect/*
→ simplified paths (removing connect segment)in-app-wallets
→wallets
(terminology change)engine/cloud
→transactions
(feature rename)assets
→tokens
(terminology change)nebula
→ base project route (feature removal)All redirects are appropriately marked as non-permanent for this refactoring.
423-423
: LGTM: Proper integration of new redirect arrayThe spread of
projectPageRedirects
correctly integrates the new redirect rules.apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/analytics/page.tsx (1)
13-13
: LGTM: Redirect URL updated for wallets restructuringThe redirect properly reflects the URL simplification from
/connect/in-app-wallets
to/wallets
, maintaining the redirect behavior while using the new routing structure.apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/settings/page.tsx (2)
5-7
: LGTM: Consistent import path improvementsConverting to absolute
@app/
imports improves maintainability and consistency across the codebase.
24-24
: LGTM: Redirect URL simplified consistentlyThe redirect URL properly reflects the wallets restructuring, removing the
/connect/in-app-wallets
segment in favor of the simplified/wallets
path.apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/overview/components/engine-overview.tsx (1)
144-145
: LGTM! UI refinements align with the broader refactoring.The popover width reduction and disabling chain ID selection are reasonable UI improvements that likely support the Engine → Transactions restructuring mentioned in the PR objectives.
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/users/page.tsx (2)
3-4
: Good practice: Using absolute imports.The change from relative to absolute imports improves maintainability and reduces path resolution issues.
19-19
: Path simplification aligns with the wallets restructuring.The redirect URL change from
/connect/in-app-wallets/users
to/wallets/users
correctly reflects the "In-App Wallets" → "Wallets" renaming and path simplification mentioned in the PR objectives.apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/components/CreateWebhookModal.tsx (3)
22-22
: Added PlusIcon import for the new button design.The icon import supports the UI change from text button to icon button.
48-48
: Component renamed to better reflect its specific purpose.The rename from
CreateWebhookModal
toCreateContractWebhookButton
better indicates this component is specifically for contract webhooks, aligning with the webhook restructuring mentioned in the AI summary.
227-230
: UI improved with icon button and consistent styling.The change from a text button to an icon button with
PlusIcon
and "Create Webhook" label provides better visual consistency and user experience.apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/page.tsx (3)
3-3
: Improved import path consistency.Using absolute import path for
getAuthToken
improves maintainability and follows better practices.
5-5
: Good separation of concerns with new component.Extracting webhook logic to
ContractsWebhooksPageContent
improves code organization and maintainability.
46-46
: Excellent refactoring that simplifies the page component.The page component is now focused on layout and presentation, while
ContractsWebhooksPageContent
handles all the complex data fetching, error handling, and conditional rendering logic. This follows good separation of concerns principles and makes the code more maintainable.apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/components/WebhooksTable.tsx (3)
40-40
: Component rename looks good.The rename from
WebhooksTable
toContractsWebhooksTable
aligns with the broader refactoring to distinguish contract-specific webhooks.
219-235
: UI improvements enhance the layout.The styling changes improve the visual hierarchy:
- Added border and rounded corners to the container
- Removed bottom border from table to seamlessly integrate with footer
- Added footer section with proper spacing and borders
The conditional rendering and styling create a cohesive design.
21-21
: Verify the import path consistency.The import is referencing
CreateContractWebhookButton
from./CreateWebhookModal
. This suggests either the file should be renamed to match the exported component, or the component export needs verification.#!/bin/bash # Description: Verify the exported component name in CreateWebhookModal.tsx # Expected: Should export CreateContractWebhookButton cat "apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/components/CreateWebhookModal.tsx" | grep -E "export.*CreateContractWebhookButton"apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/contracts/webhooks/page.tsx (3)
11-11
: Correct params handling.Good implementation following the retrieved learning about awaiting params in Next.js server components, even when TypeScript types don't indicate it's a Promise.
13-31
: Robust authentication and error handling.The parallel fetching with
Promise.all
and comprehensive redirect logic ensures proper access control:
- Redirects unauthenticated users to login with correct callback URL
- Handles missing team/project gracefully
- Uses appropriate redirect paths
34-36
: Clean component delegation.The page component properly delegates UI logic to
ContractsWebhooksPageContent
, maintaining separation of concerns between routing/auth and presentation logic.apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/server-wallets/wallet-table/wallet-table-ui.client.tsx (3)
92-92
: Border styling improvement.Adding
border-b-0
creates a seamless visual connection between the table and pagination section, improving the overall layout consistency.
141-196
: Conditional pagination enhances UX.Only showing pagination when
totalPages > 1
reduces UI clutter and improves user experience. The pagination URLs are correctly updated to use the new/transactions/server-wallets
path structure.
266-266
: Consistent URL structure update.The "Send test transaction" button URL correctly updated from
/engine/cloud
to/transactions
, maintaining consistency with the broader refactoring while preserving the query parameter.apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/contract-webhooks/contract-webhooks-page.tsx (3)
21-38
: Comprehensive error handling.The error handling covers multiple failure scenarios:
- API response errors from webhook fetching
- API response errors from supported chains fetching
- General exception handling with fallback message
The approach ensures users get meaningful feedback regardless of failure type.
58-92
: Well-structured conditional rendering.The three-state conditional rendering provides appropriate UI for each scenario:
- Error state with destructive styling and clear messaging
- Table view for existing webhooks
- Empty state with call-to-action for webhook creation
The consistent styling and messaging create a polished user experience.
53-56
: Proper client initialization.The thirdweb client initialization correctly uses the auth token and team ID, following the established pattern for authenticated API calls.
apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/layout.tsx (4)
25-26
: Clear variable naming improvement.The rename from
engineBaseSlug
/engineLayoutSlug
toprojectLayoutPath
/layoutPath
better reflects the actual purpose and makes the code more readable.
37-43
: Consistent terminology update.The change from "Engine Cloud" to "Transactions" with a generic "Beta" badge aligns with the broader refactoring and simplifies the user-facing terminology.
68-82
: Navigation structure updated correctly.The navigation links are properly updated to use the new
/transactions
path structure while maintaining the same navigation hierarchy and functionality.
47-47
: ```shell
#!/bin/bashList all sidebar layout.tsx files to compare documentation links
echo "Sidebar layout.tsx files:"
find apps/dashboard/src/app/(app)/team -type f -path "/(sidebar)//layout.tsx"Inspect each for reference links
echo -e "\nReference links in sidebar layout.tsx files:"
grep -R "href=.*reference" -n apps/dashboard/src/app/(app)/team</details> <details> <summary>apps/dashboard/src/app/(app)/account/contracts/_components/DeployedContractsPage.tsx (1)</summary> `18-29`: **LGTM: Clean component structure with proper async handling.** The refactoring effectively simplifies the component by moving the header to the layout level and properly wraps the async component in Suspense. The container classes and spacing are appropriate. </details> <details> <summary>apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/contracts/layout.tsx (3)</summary> `16-32`: **Excellent concurrent data fetching and error handling pattern.** The use of `Promise.all` for concurrent fetching of auth token, team, and project data is efficient. The authentication and entity validation with appropriate redirects follows Next.js best practices. --- `42-66`: **Well-structured layout with proper tab navigation.** The layout structure is clean and the tab navigation implementation using `TabPathLinks` is appropriate. Moving the `DeployedContractsPageHeader` to the layout level is a good architectural decision for consistency across contract-related pages. --- `22-24`: ```shell #!/bin/bash # Searching for loginRedirect calls across TS and TSX files to verify path consistency rg -n "loginRedirect" -A2 -B2 --glob "*.ts" --glob "*.tsx"
apps/dashboard/src/app/(app)/account/contracts/DeployedContractsPageHeader.tsx (6)
19-19
: LGTM! Simplified container structure.The removal of additional styling/border from the outer container div simplifies the layout structure as intended.
31-31
: LGTM! Improved spacing and layout.The updated container classes with
pt-10 pb-5
provide better vertical spacing and the layout adjustments improve the overall visual hierarchy.
36-38
: LGTM! Added helpful descriptive subtitle.The new subtitle "Deploy and manage contracts for your project" provides clear context about the page's functionality, improving the user experience.
42-43
: LGTM! Consistent button styling.The addition of
bg-card
background and explicitsize="sm"
creates visual consistency across the interface.
49-49
: LGTM! Improved visual hierarchy with muted icon.The
text-muted-foreground
class on the download icon creates better visual hierarchy by reducing the prominence of secondary actions.
52-52
: LGTM! Consistent button sizing.The explicit
size="sm"
ensures consistent button sizing across the action buttons in the header.
c5fa3b1
to
6113f3d
Compare
PR-Codex overview
This PR focuses on significant refactoring and renaming within the codebase, particularly around the "vault" and "engine" components, changing terminology and structure for clarity and consistency.
Detailed summary
nebula
andin-app-wallets
.In-App Wallets
toWallets
in various components.Engine
references toTransactions
across several files.Assets
toTokens
for clarity.Vault
components and alerts for better functionality.Summary by CodeRabbit
New Features
Refactor
Bug Fixes
Style
Chores