From d36c34aa9f1041a4b616643a48a6c0ab8474307a Mon Sep 17 00:00:00 2001 From: Yashwin Date: Mon, 11 May 2026 13:12:08 +0530 Subject: [PATCH] refactor: update tenant dashboard UI with styled GradientStatCard components and refreshed layout header --- src/components/shared/DataTable.tsx | 8 +- src/components/shared/GradientStatCard.tsx | 12 +- src/pages/superadmin/TenantDetails.tsx | 272 +++++++++++---------- 3 files changed, 153 insertions(+), 139 deletions(-) diff --git a/src/components/shared/DataTable.tsx b/src/components/shared/DataTable.tsx index 7a19e50..88851c0 100644 --- a/src/components/shared/DataTable.tsx +++ b/src/components/shared/DataTable.tsx @@ -87,7 +87,7 @@ export const DataTable = ({ return ( {column.label} @@ -97,7 +97,7 @@ export const DataTable = ({ - + {emptyMessage} @@ -134,7 +134,7 @@ export const DataTable = ({ return ( {column.label} @@ -175,7 +175,7 @@ export const DataTable = ({ ? 'text-center' : 'text-left'; return ( - + {column.render ? column.render(item) : String((item as any)[column.key])} ); diff --git a/src/components/shared/GradientStatCard.tsx b/src/components/shared/GradientStatCard.tsx index 66834cc..6b9d675 100644 --- a/src/components/shared/GradientStatCard.tsx +++ b/src/components/shared/GradientStatCard.tsx @@ -16,18 +16,18 @@ export const GradientStatCard: React.FC = ({ icon: Icon, return (
-
-
+
+
{badge && (
= ({ icon: Icon,
-

+

{value}

-

+

{label}

diff --git a/src/pages/superadmin/TenantDetails.tsx b/src/pages/superadmin/TenantDetails.tsx index 2c993e6..9fbcc75 100644 --- a/src/pages/superadmin/TenantDetails.tsx +++ b/src/pages/superadmin/TenantDetails.tsx @@ -14,6 +14,7 @@ import { Building2, BadgeCheck, GitBranch, + Zap, } from "lucide-react"; import { Layout } from "@/components/layout/Layout"; import { @@ -23,8 +24,14 @@ import { SuppliersTable, type Column, PrimaryButton, + GradientStatCard, } from "@/components/shared"; -import { UsersTable, RolesTable, DepartmentsTable, type DepartmentsTableRef } from "@/components/superadmin"; +import { + UsersTable, + RolesTable, + DepartmentsTable, + type DepartmentsTableRef, +} from "@/components/superadmin"; import { Plus } from "lucide-react"; import { tenantService } from "@/services/tenant-service"; import { moduleService } from "@/services/module-service"; @@ -210,41 +217,52 @@ const TenantDetails = (): ReactElement => { ]} pageHeader={{ title: tenant.name, - action: activeTab === "departments" ? ( - departmentsRef.current?.openNewModal()} - className="flex items-center gap-2" - > - - New Department - - ) : undefined + action: + activeTab === "departments" ? ( + departmentsRef.current?.openNewModal()} + className="flex items-center gap-2" + > + + New Department + + ) : undefined, }} >
{/* Tenant Header Card */} -
-
-
-
- - {getTenantInitials(tenant.name)} - +
+ {/* Left Section */} +
+ {/* Avatar */} +
+ + {getTenantInitials(tenant.name)} + +
+ + {/* Content */} +
+ {/* Name + Status */} +
+

+ {tenant.name} +

+ + + {tenant.status} +
-
-
-

- {tenant.name} -

- - {tenant.status} - -
-
+ + {/* Meta Information */} +
+ {/* First Row */} + + + {/* Second Row */} +
+
+ + Created: {formatDate(tenant.created_at)} +
+ + {/* {tenant.primary_contact && ( +
+ + Admin: {tenant.primary_contact} +
+ )} */} +
-
+ + {/* Edit Button */} +
{/* Tabs */} -
+
{tabs.map((tab) => ( @@ -310,7 +341,11 @@ const TenantDetails = (): ReactElement => { )} {activeTab === "departments" && id && ( - + )} {activeTab === "designations" && id && ( @@ -367,105 +402,85 @@ const OverviewTab = ({ tenant, stats }: OverviewTabProps): ReactElement => {
{/* Stats Cards */}
-
-
- Total Users -
-
- {stats?.totalUsers || 0} -
-
-
-
- Total Modules -
-
- {stats?.totalModules || 0} -
-
-
-
- Active Modules -
-
- {stats?.activeModules || 0} -
-
-
-
- Subscription Tier -
-
- {stats?.subscriptionTier || "N/A"} -
-
+ + + 0 + ? { text: "Running", variant: "success" } + : undefined + } + /> +
{/* General Information */} -
-

- General Information -

-
-
-
+
+ {/* Header Section */} +
+

+ General Information +

+
+ + {/* Content Section */} +
+
+ {/* Tenant Name */} +
Tenant Name
-
+
{tenant.name}
-
-
-
Slug
-
+ + {/* Slug */} +
Slug
+
{tenant.slug}
-
-
-
- Status + + {/* Status */} +
Status
+
+ + {tenant.status} +
- - {tenant.status} - -
-
-
+ + {/* Subscription Tier */} +
Subscription Tier
-
+
{tenant.subscription_tier || "N/A"}
-
- {/*
-
- Max Users -
-
- {tenant.max_users || "Unlimited"} -
-
-
-
- Max Modules -
-
- {tenant.max_modules || "Unlimited"} -
-
*/} -
-
- Created At -
-
+ + {/* Created At */} +
Created At
+
{formatDate(tenant.created_at)}
-
-
-
- Updated At -
-
+ + {/* Updated At */} +
Updated At
+
{formatDate(tenant.updated_at)}
@@ -644,7 +659,6 @@ const LicenseTab = ({ tenant: _tenant }: LicenseTabProps): ReactElement => { ); }; - // Billing Tab Component interface BillingTabProps { tenant: Tenant;