diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/users/components/AdvancedSearchInput.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/users/components/AdvancedSearchInput.tsx index 16d3a84c71f..f6c35dff1f1 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/users/components/AdvancedSearchInput.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/users/components/AdvancedSearchInput.tsx @@ -55,6 +55,7 @@ export function AdvancedSearchInput(props: { Phone ID Address + External Wallet diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/users/components/SearchResults.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/users/components/SearchResults.tsx index d24ad8b489a..701d0e71161 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/users/components/SearchResults.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/users/components/SearchResults.tsx @@ -52,6 +52,11 @@ export function SearchResults(props: { const email = mainDetail?.email as string | undefined; const phone = mainDetail?.phone as string | undefined; + // Get external wallet addresses from linkedAccounts where type is 'siwe' + const externalWalletAccounts = + user.linkedAccounts?.filter((account) => account.type === "siwe") || + []; + return ( @@ -96,6 +101,29 @@ export function SearchResults(props: { )} + {externalWalletAccounts.length > 0 && ( +
+

+ External Wallets +

+
+ {externalWalletAccounts.map((account, index) => { + const address = account.details?.address as + | string + | undefined; + return address ? ( +
+ +
+ ) : null; + })} +
+
+ )} + {createdAt && (

diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/users/components/index.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/users/components/index.tsx index da1e0cfdff1..bec59030051 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/users/components/index.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/users/components/index.tsx @@ -36,6 +36,10 @@ const getUserIdentifier = (accounts: WalletUser["linkedAccounts"]) => { ); }; +const getExternalWallets = (accounts: WalletUser["linkedAccounts"]) => { + return accounts?.filter((account) => account.type === "siwe") || []; +}; + const columnHelper = createColumnHelper(); export function InAppWalletUsersPageContent( @@ -69,6 +73,36 @@ export function InAppWalletUsersPageContent( header: "Address", id: "address", }), + columnHelper.accessor("linkedAccounts", { + cell: (cell) => { + const externalWallets = getExternalWallets(cell.getValue()); + if (externalWallets.length === 0) { + return None; + } + return ( +

+ {externalWallets.slice(0, 2).map((account) => { + const address = account.details?.address as string | undefined; + return address ? ( +
+ +
+ ) : null; + })} + {externalWallets.length > 2 && ( + + +{externalWallets.length - 2} more + + )} +
+ ); + }, + header: "External Wallets", + id: "external_wallets", + }), columnHelper.accessor("wallets", { cell: (cell) => { const value = cell.getValue()[0]?.createdAt; @@ -172,11 +206,18 @@ export function InAppWalletUsersPageContent( }); const csv = Papa.unparse( usersWallets.map((row) => { + const externalWallets = getExternalWallets(row.linkedAccounts); + const externalWalletAddresses = externalWallets + .map((account) => account.details?.address) + .filter(Boolean) + .join(", "); + return { address: row.wallets[0]?.address || "Uninitialized", created: row.wallets[0]?.createdAt ? format(new Date(row.wallets[0].createdAt), "MMM dd, yyyy") : "Wallet not created yet", + external_wallets: externalWalletAddresses || "None", login_methods: row.linkedAccounts.map((acc) => acc.type).join(", "), user_identifier: getUserIdentifier(row.linkedAccounts), }; diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/users/components/searchUsers.ts b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/users/components/searchUsers.ts index 3f60e0ae105..b772bab0c57 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/users/components/searchUsers.ts +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/users/components/searchUsers.ts @@ -33,6 +33,9 @@ export async function searchUsers( case "address": url.searchParams.append("address", query); break; + case "externalWallet": + url.searchParams.append("externalWalletAddress", query); + break; } const response = await fetch(url.toString(), { diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/users/components/types.ts b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/users/components/types.ts index 207189d8897..fa825d6a8d1 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/users/components/types.ts +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/users/components/types.ts @@ -1 +1,6 @@ -export type SearchType = "email" | "phone" | "id" | "address"; +export type SearchType = + | "email" + | "phone" + | "id" + | "address" + | "externalWallet";