diff --git a/components/dashboard/admin/Configuration/dynamicDashboard.tsx b/components/dashboard/admin/Configuration/dynamicDashboard.tsx index daa6258..a8301d9 100644 --- a/components/dashboard/admin/Configuration/dynamicDashboard.tsx +++ b/components/dashboard/admin/Configuration/dynamicDashboard.tsx @@ -1,32 +1,8 @@ -import { ChevronDown, Trash2, X, Plus, Sparkles } from "lucide-react"; +import Button from "@/components/common/button"; +import { initialRows } from "@/constants/constant"; +import { ChevronDown, Trash2, X, Plus, } from "lucide-react"; + -const initialRows = [ - // Row 1 (2 cards) - { - id: "row-1", - widgets: [ - { id: "w1", title: "TFM Requests · Monthly", type: "report.widget" }, - { id: "w2", title: "Recent Activity", type: "report.widget" }, - ], - }, - // Row 2 (2 cards) - { - id: "row-2", - widgets: [ - { id: "w3", title: "Schedule Performance", type: "report.widget" }, - { id: "w4", title: "Energy · Today", type: "report.widget" }, - ], - }, - // Row 3 (3 cards) - { - id: "row-3", - widgets: [ - { id: "w5", title: "Top 5 Requester", type: "report.widget" }, - { id: "w6", title: "Asset Register", type: "report.widget" }, - { id: "w7", title: "PM Plan vs Started", type: "report.widget" }, - ], - }, -]; // Note the 'export default' keyword here: export default function DynamicDashboardPortal() { @@ -35,10 +11,10 @@ export default function DynamicDashboardPortal() { {/* --- HEADER SECTION --- */}
-
- PLATFORM - - DYNAMIC DASHBOARD +
+ PLATFORM + + DYNAMIC DASHBOARD

Dynamic dashboard @@ -55,12 +31,12 @@ export default function DynamicDashboardPortal() { PUBLISHED - - + +

@@ -152,18 +128,18 @@ export default function DynamicDashboardPortal() { Add row: - - + - + +
diff --git a/components/dashboard/admin/Configuration/language.tsx b/components/dashboard/admin/Configuration/language.tsx index bc1961f..377b895 100644 --- a/components/dashboard/admin/Configuration/language.tsx +++ b/components/dashboard/admin/Configuration/language.tsx @@ -2,36 +2,7 @@ import { useState } from "react"; import { Plus, ChevronDown } from "lucide-react"; - -const initialLanguageValues = [ - { - id: 1, - app: "Web Console", - menu: "Tenant", - screen: "Tenant List", - uiKey: "btn.add_tenant", - code: "EN", - value: "Add Tenant", - }, - { - id: 2, - app: "Web Console", - menu: "Site", - screen: "Site List", - uiKey: "btn.add_site", - code: "EN", - value: "Add Site", - }, - { - id: 3, - app: "Mobile App", - menu: "Inspections", - screen: "QR Round", - uiKey: "lbl.scan_qr", - code: "EN", - value: "Scan QR to begin round", - }, -]; +import { initialLanguageValues } from "@/constants/constant"; export default function LanguagePortal() { @@ -43,12 +14,12 @@ export default function LanguagePortal() {
{/* --- HEADER SECTION --- */}
-
- PLATFORM - - LANGUAGE +
+ PLATFORM + + LANGUAGE
-

Language

+

Language

Manage translation keys across apps, menus and screens — then resolve their values per tenant.

diff --git a/components/dashboard/admin/Configuration/mobileFlows.tsx b/components/dashboard/admin/Configuration/mobileFlows.tsx index 6dd09c0..d8ae639 100644 --- a/components/dashboard/admin/Configuration/mobileFlows.tsx +++ b/components/dashboard/admin/Configuration/mobileFlows.tsx @@ -1,3 +1,4 @@ +import Button from "@/components/common/button"; import { Smartphone } from "lucide-react"; export default function MobileFlowsPortal() { @@ -7,10 +8,10 @@ export default function MobileFlowsPortal() {
{/* Breadcrumb */} -
- PLATFORM - - MOBILE +
+ PLATFORM + + MOBILE
{/* Title */} @@ -26,10 +27,10 @@ export default function MobileFlowsPortal() { {/* Action Button */}
- +
diff --git a/components/dashboard/admin/Configuration/modules.tsx b/components/dashboard/admin/Configuration/modules.tsx index 0a80589..2af0d57 100644 --- a/components/dashboard/admin/Configuration/modules.tsx +++ b/components/dashboard/admin/Configuration/modules.tsx @@ -2,78 +2,14 @@ import { useState } from "react"; import { - LayoutGrid, - CheckSquare, - Crosshair, - FileText, - Box, - Zap, - ClipboardCheck, - BarChart2, + Pencil, Plus, - Sparkles, + } from "lucide-react"; +import { initialModules } from "@/constants/constant"; +import Button from "@/components/common/button"; -// Mock Data matching the design -const initialModules = [ - { - id: "MOD-01", - title: "Dashboard", - description: "Operational overview & live KPIs", - icon: LayoutGrid, - menus: [], // Currently empty as per screenshot - }, - { - id: "MOD-02", - title: "Helpdesk", - description: "Tickets, requests & SLA tracking", - icon: CheckSquare, - menus: ["Tickets", "SLA Settings", "Queues"], - }, - { - id: "MOD-03", - title: "Equipment", - description: "Asset register & equipment groups", - icon: Crosshair, - menus: ["Asset Register", "Categories"], - }, - { - id: "MOD-04", - title: "Request", - description: "Service requests & approvals", - icon: FileText, - menus: ["My Requests", "Approvals"], - }, - { - id: "MOD-05", - title: "Inventory", - description: "Stock, spares & consumables", - icon: Box, - menus: ["Stock Levels", "Suppliers"], - }, - { - id: "MOD-06", - title: "Energy", - description: "Meters, consumption & analytics", - icon: Zap, - menus: ["Meters", "Analytics"], - }, - { - id: "MOD-07", - title: "Inspections", - description: "QR rounds & checklists", - icon: ClipboardCheck, - menus: ["Rounds", "Checklists"], - }, - { - id: "MOD-08", - title: "Reports", - description: "Analytics & export tools", - icon: BarChart2, - menus: ["Scheduled Reports", "Custom Builder"], - }, -]; export default function ModulesPortal() { const [selectedModuleId, setSelectedModuleId] = useState("MOD-01"); @@ -84,12 +20,12 @@ export default function ModulesPortal() {
{/* Header Section */}
-
- PLATFORM - - MODULES +
+ PLATFORM + + MODULES
-

Modules

+

Modules

The catalog of system modules and their menus. These are what you switch on per tenant under feature access.

@@ -107,10 +43,10 @@ export default function ModulesPortal() { {initialModules.length} available
- +
{/* Module Items */} @@ -181,10 +117,10 @@ export default function ModulesPortal() { Under {activeModule?.title || "Module"}
- +
{/* Empty State / Menus List */} diff --git a/components/dashboard/admin/Platform/overview.tsx b/components/dashboard/admin/Platform/overview.tsx index 09c039f..d93ae2a 100644 --- a/components/dashboard/admin/Platform/overview.tsx +++ b/components/dashboard/admin/Platform/overview.tsx @@ -1,17 +1,14 @@ -import { useState } from 'react'; + import { - ClipboardCheck, - Clock, - AlertTriangle, - Activity, Building2, Users, MapPin, Grid, ArrowRight, - Sparkles + } from "lucide-react"; import StatCard from "@/components/common/dashStatCard"; +import Button from "@/components/common/button"; export default function AdminOverviewPortal() { // Sample data for the recent audits table below @@ -37,10 +34,11 @@ export default function AdminOverviewPortal() { {/* --- HEADER SECTION --- */}
-
- PLATFORM - - KAFM +
+ PLATFORM + + KAFM

Platform overview @@ -52,7 +50,7 @@ export default function AdminOverviewPortal() { {/* Top Right Status Badge */}
- + PRODUCTION region us-east-1 @@ -117,9 +115,9 @@ export default function AdminOverviewPortal() {

Recently onboarded tenants

Newest organizations on the platform

- +

{/* Table Header */} diff --git a/components/dashboard/admin/Platform/security.tsx b/components/dashboard/admin/Platform/security.tsx index 87f4324..5b7202e 100644 --- a/components/dashboard/admin/Platform/security.tsx +++ b/components/dashboard/admin/Platform/security.tsx @@ -5,183 +5,14 @@ import { AlertTriangle, ShieldCheck, BarChart3, - Sparkles, - ChevronDown + ChevronDown, } from "lucide-react"; import Button from "@/components/common/button"; import StatCard from "@/components/common/dashStatCard"; import InfoBanner from '@/components/common/infoBanner'; import Table from '@/components/common/dataTable'; -import { StatusBadge } from "@/components/common/statusBadge"; +import { auditLogHeaders, auditLogRows, trustedDeviceHeaders, trustedDeviceRows } from "@/constants/tabledata"; -export const trustedDeviceHeaders = [ - "USER", - "DEVICE", - "IP", - "LAST SEEN", - "EXPIRES", - "STATUS", - "ACTIONS", -]; - -export const trustedDeviceRows = [ - [ - Dhananjay T., - "Chrome 126 · Windows 11", - 103.212.14.8, - Today, 08:12, - Jul 30, 2026, - , - , - ], - - [ - Kavya Raghunathan, - "Safari 18 · macOS", - 49.37.201.55, - Yesterday, 17:40, - Jul 21, 2026, - , - , - ], - - [ - Rahul Iyer, - "KAFM Mobile · Android 15", - 152.58.33.104, - Today, 06:58, - Jul 12, 2026, - , - , - ], - - [ - Meera Pillai, - "Edge 126 · Windows 10", - 103.212.14.31, - Jun 18, 2026, - Expired, - , - , - ], -]; - -export const auditLogHeaders = [ - "WHEN", - "USER", - "EVENT", - "IP", - "RESULT", -]; - -export const auditLogRows = [ - [ - Today 08:12, - dhananjay@kafm.io, - Sign-in · password + MFA, - 103.212.14.8, - , - ], - - [ - Today 07:56, - kavya@kafm.io, - - Role changed · Technician → M&E Supervisor - , - 49.37.201.55, - , - ], - - [ - Today 07:31, - unknown@ext.net, - - Sign-in · wrong password (3rd attempt) - , - 91.240.118.7, - , - ], - - [ - Today 06:58, - rahul@kafm.io, - - Device trusted · KAFM Mobile (30 days) - , - 152.58.33.104, - , - ], - - [ - Yesterday 17:40, - kavya@kafm.io, - - Password reset · self-service link - , - 49.37.201.55, - , - ], - - [ - Yesterday 14:05, - meera@kafm.io, - - MFA reset by admin · device revoked - , - 103.212.14.31, - , - ], - - [ - Jun 30 09:12, - admin@kafm.io, - - Sign-in policy updated · idle timeout 30 min - , - 103.212.14.8, - , - ], -]; export default function SecurityPortal() { const [enforceMfa, setEnforceMfa] = useState(true); @@ -193,12 +24,12 @@ export default function SecurityPortal() { {/* --- HEADER SECTION --- */}
-
- PLATFORM - - SECURITY +
+ PLATFORM + + SECURITY
-

+

Security & sessions

@@ -299,12 +130,12 @@ export default function SecurityPortal() { 6-digit code required on every untrusted device

- +
{/* Select 1: Idle Session Timeout */} @@ -333,12 +164,12 @@ export default function SecurityPortal() { Pre-checks the persistent-session option at sign-in

- +
{/* Toggle 3: Re-authenticate */} @@ -349,12 +180,12 @@ export default function SecurityPortal() { Password prompt before user, role or policy changes

- +
{/* Select 2: Trusted device window */} diff --git a/components/dashboard/admin/Platform/site.tsx b/components/dashboard/admin/Platform/site.tsx index d73baf5..5fa4e21 100644 --- a/components/dashboard/admin/Platform/site.tsx +++ b/components/dashboard/admin/Platform/site.tsx @@ -1,158 +1,18 @@ import { useState } from 'react'; import { - Building2, - Users, - MapPin, - Grid, + Plus, - Eye, - Settings, - Pencil, - GitBranch, + Search, ChevronDown, - Sparkles + } from "lucide-react"; import Button from "@/components/common/button"; import Table from '@/components/common/dataTable'; -import { StatusBadge } from '@/components/common/statusBadge'; -import ActionButtons from '@/components/common/actionButton'; -export const siteHeaders = [ - "Site", - "Tenant", - "Coordinates", - "Radius", - "Status", - "Actions", -]; +import { siteHeaders, siteRows } from "@/constants/adminTableDatat"; -export const siteRows = [ - [ -
-

Apple One — HQ Tower

-

AO-HQ · SIT-3001

-
, - "Apple One", - 19.0760, 72.8777, - 200 m, -
-
-
-
- -
, - , - ], - - [ -
-

Apple One — Annexe

-

AO-AX · SIT-3002

-
, - "Apple One", - 19.1020, 72.8895, - 150 m, -
-
-
-
- -
, - , - ], - - [ -
-

Novotel Pune — Main

-

NP-M · SIT-3003

-
, - "Novotel Pune", - 18.5604, 73.9090, - 180 m, -
-
-
-
- -
, - , - ], - - [ -
-

- SRM Campus — Academic Block -

-

SRM-AB · SIT-3004

-
, - "SRM Campus", - 12.8230, 80.0444, - 400 m, -
-
-
-
- -
, - , - ], - - [ -
-

- SRM Campus — Hostel Block -

-

SRM-HB · SIT-3005

-
, - "SRM Campus", - 12.8255, 80.0478, - 350 m, -
-
-
-
- -
, - , - ], - - [ -
-

Local 1 — Site

-

L1-S · SIT-3006

-
, - "Local 1", - 19.2183, 72.9781, - 120 m, -
-
-
-
- -
, - , - ], -]; export default function SitePortal() { const [searchQuery, setSearchQuery] = useState(''); @@ -162,12 +22,12 @@ export default function SitePortal() { {/* --- HEADER SECTION --- */}
-
- PLATFORM - - SITES +
+ PLATFORM + + SITES
-

+

Sites

diff --git a/components/dashboard/admin/Platform/tenants.tsx b/components/dashboard/admin/Platform/tenants.tsx index 243bcce..b0e2a19 100644 --- a/components/dashboard/admin/Platform/tenants.tsx +++ b/components/dashboard/admin/Platform/tenants.tsx @@ -1,9 +1,6 @@ -import { useState } from 'react'; + import { - Building2, - Users, - MapPin, - Grid, + Plus, Eye, Settings, @@ -13,164 +10,12 @@ import { ChevronDown } from "lucide-react"; import Button from "@/components/common/button"; -import StatCard from "@/components/common/dashStatCard"; + import Table from '@/components/common/dataTable'; -import { StatusBadge } from '@/components/common/statusBadge'; +import { organizationHeaders, organizationRows } from "@/constants/adminTableDatat"; -export const organizationHeaders = [ - "Organization", - "Tenant ID", - "Contact", - "Time Zone", - "Status", - "Actions", -]; -const ActionButtons = () => ( -

- - - - - - -
-); - -export const organizationRows = [ - [ -
-
- AO -
- -
-
Apple One
-
ops@appleone.com
-
-
, - - - TNT-1001 - , - -
-
Dhananjay T.
-
+91 98200 10001
-
, - - Asia/Kolkata, - - , - - , - ], - - [ -
-
- NP -
- -
-
Novotel Pune
-
fm@novotelpune.com
-
-
, - - - TNT-1002 - , - -
-
Site FM Lead
-
+91 98220 20002
-
, - - Asia/Kolkata, - - , - - , - ], - - [ -
-
- SC -
- -
-
SRM Campus
-
estates@srm.edu
-
-
, - - - TNT-1003 - , - -
-
Estates Office
-
+91 98430 30003
-
, - - Asia/Kolkata, - - , - - , - ], - - [ -
-
- L1 -
- -
-
Local 1
-
admin@local1.com
-
-
, - - - TNT-1004 - , - -
-
Local Admin
-
+91 98000 40004
-
, - - Asia/Kolkata, - - , - - , - ], -]; export default function TenantsPortal() { @@ -180,12 +25,12 @@ export default function TenantsPortal() { {/* --- HEADER SECTION --- */}
-
- PLATFORM - - TENANTS +
+ PLATFORM + + TENANTS
-

+

Tenants

diff --git a/components/dashboard/admin/Platform/users.tsx b/components/dashboard/admin/Platform/users.tsx index 1453d79..2e0ec9d 100644 --- a/components/dashboard/admin/Platform/users.tsx +++ b/components/dashboard/admin/Platform/users.tsx @@ -4,245 +4,14 @@ import { Eye, KeyRound, Search, - Sparkles + } from "lucide-react"; import Button from "@/components/common/button"; import Table from '@/components/common/dataTable'; -import { StatusBadge } from '@/components/common/statusBadge'; +import { userHeaders, userRows } from '@/constants/adminTableDatat'; -export const userHeaders = [ - "Name", - "Email", - "Phone", - "Tenants", - "MFA", - "User ID", - "Actions", -]; -const UserActionButtons = () => ( -

- - -
-); - -export const userRows = [ - [ -
-
- DT -
- - - Dhananjay T. - -
, - - - dhananjay@kafm.io - , - - - +91 98200 10001 - , - - - 4 assigned - , - - , - - - USR-5001 - , - - , - ], - - [ -
-
- MS -
- - - ME Supervisor - -
, - - - me.local@kafm.io - , - - - +91 98201 10010 - , - - - 1 assigned - , - - , - - - USR-5002 - , - - , - ], - - [ -
-
- T -
- - - Technician - -
, - - - tech.local@kafm.io - , - - - +91 98202 10011 - , - - - 2 assigned - , - - , - - - USR-5003 - , - - , - ], - - [ -
-
- TC -
- - - Tenant Customer - -
, - - - tenant@kafm.io - , - - - +91 98203 10012 - , - - - 1 assigned - , - - , - - - USR-5004 - , - - , - ], - - [ -
-
- HA -
- - - Helpdesk Agent - -
, - - - help@kafm.io - , - - - +91 98204 10013 - , - - - 2 assigned - , - - , - - - USR-5005 - , - - , - ], - - [ -
-
- EA -
- - - Energy Analyst - -
, - - - energy@kafm.io - , - - - +91 98430 30030 - , - - - 1 assigned - , - - , - - - USR-5006 - , - - , - ], -]; export default function UserPortal() { const [searchQuery, setSearchQuery] = useState(''); @@ -252,12 +21,12 @@ export default function UserPortal() { {/* --- HEADER SECTION --- */}
-
- PLATFORM - - USERS +
+ PLATFORM + + USERS
-

+

Users

diff --git a/components/dashboard/compliance/training.tsx b/components/dashboard/compliance/training.tsx index b419bd1..f485ea0 100644 --- a/components/dashboard/compliance/training.tsx +++ b/components/dashboard/compliance/training.tsx @@ -13,7 +13,7 @@ import Button from "@/components/common/button"; import StatCard from "@/components/common/dashStatCard"; import Table from '@/components/common/dataTable'; import NavigationTabs from '@/components/common/tabs'; -import { trainingtabs } from '@/constants/constant'; +import { trainingtabs } from '@/constants/tabConstant'; import InfoBanner from '@/components/common/infoBanner'; import { trainingheaders, trainingrows } from '@/constants/tabledata'; diff --git a/components/dashboard/insight/reports.tsx b/components/dashboard/insight/reports.tsx index 3b56ca8..d8a0e55 100644 --- a/components/dashboard/insight/reports.tsx +++ b/components/dashboard/insight/reports.tsx @@ -2,9 +2,10 @@ import { useState } from 'react'; import Button from "@/components/common/button"; import NavigationTabs from '@/components/common/tabs'; -import { reportFilters, reporttabs, Reqeusttabs, statusFilters } from '@/constants/constant'; +import { reportFilters, } from '@/constants/constant'; import FilterTabs from '@/components/common/roundedFilters'; import Table from '@/components/common/dataTable'; +import { reporttabs } from '@/constants/tabConstant'; import { reportheaders, reportrows } from '@/constants/tabledata'; diff --git a/components/dashboard/intelligence/aiAndPredictive.tsx b/components/dashboard/intelligence/aiAndPredictive.tsx index 645487f..c15e9b9 100644 --- a/components/dashboard/intelligence/aiAndPredictive.tsx +++ b/components/dashboard/intelligence/aiAndPredictive.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react'; + import { Zap, AlertTriangle, @@ -6,7 +6,7 @@ import { Plus, Sparkles, ShieldAlert, - IndianRupee + } from "lucide-react"; import Button from "@/components/common/button"; import StatCard from "@/components/common/dashStatCard"; @@ -20,12 +20,12 @@ export default function AiPredictivePortal() { {/* --- HEADER SECTION --- */}

-
+
Apple One — HQ Tower - - INTELLIGENCE - - AI + + INTELLIGENCE + + AI

AI & predictive intelligence diff --git a/components/dashboard/intelligence/aiHelpDesk.tsx b/components/dashboard/intelligence/aiHelpDesk.tsx index 2fed429..f9f626f 100644 --- a/components/dashboard/intelligence/aiHelpDesk.tsx +++ b/components/dashboard/intelligence/aiHelpDesk.tsx @@ -6,7 +6,7 @@ import { ReceiptIndianRupee, } from "lucide-react"; -import InfoBanner from "@/components/common/infoBanner"; + import Button from "@/components/common/button"; import NavigationTabs from "@/components/common/tabs"; @@ -15,7 +15,8 @@ import { useState } from "react"; import StatCard from "@/components/common/dashStatCard"; import { Card } from "@/components/common/cardWrapper"; import { CardHeader } from "@/components/common/cardHeader"; -import { aiHelpdeskTabs, HANDLES_DATA, LIVE_ACTIVITIES } from "@/constants/constant"; +import { HANDLES_DATA, LIVE_ACTIVITIES } from "@/constants/constant"; +import { aiHelpdeskTabs } from "@/constants/tabConstant"; // Sample mock data for Agent Activity @@ -27,12 +28,12 @@ export default function AiHelpdeskPortal() { {/* --- HEADER SECTION WITH BUTTONS --- */}
-
+
Apple One — HQ Tower - - INTELLIGENCE - - AI HELPDESK + + INTELLIGENCE + + AI HELPDESK

diff --git a/components/dashboard/intelligence/assetHealth.tsx b/components/dashboard/intelligence/assetHealth.tsx index fdeb8ea..e67c882 100644 --- a/components/dashboard/intelligence/assetHealth.tsx +++ b/components/dashboard/intelligence/assetHealth.tsx @@ -4,17 +4,13 @@ import { AlertTriangle, Activity, Plus, - Sparkles, - ShieldAlert, - IndianRupee, Clock, ShieldCheck } from "lucide-react"; import Button from "@/components/common/button"; import StatCard from "@/components/common/dashStatCard"; import InfoBanner from '@/components/common/infoBanner'; -import { Card } from '@/components/common/cardWrapper'; // Assuming Card wrapper location -import { CardHeader } from '@/components/common/cardHeader'; // Assuming CardHeader location + import Table from '@/components/common/dataTable'; import { assetHealthheaders, assetHealthrows } from '@/constants/tabledata'; @@ -24,12 +20,12 @@ export default function AssetHealthPortal() { {/* --- HEADER SECTION --- */}
-
+
Apple One — HQ Tower - - INTELLIGENCE - - ASSET HEALTH + + INTELLIGENCE + + ASSET HEALTH

Asset health & reliability diff --git a/components/dashboard/intelligence/connectedAssets.tsx b/components/dashboard/intelligence/connectedAssets.tsx index 426c438..6d1de95 100644 --- a/components/dashboard/intelligence/connectedAssets.tsx +++ b/components/dashboard/intelligence/connectedAssets.tsx @@ -12,8 +12,7 @@ import StatCard from "@/components/common/dashStatCard"; import Table from '@/components/common/dataTable'; import NavigationTabs from '@/components/common/tabs'; -import InfoBanner from '@/components/common/infoBanner'; -import { connectedassettabs } from '@/constants/constant'; +import { connectedassettabs } from '@/constants/tabConstant'; import { connectedassetheaders, connectedassetrows } from '@/constants/tabledata'; export default function ConnectedAssetPortal() { @@ -24,12 +23,12 @@ export default function ConnectedAssetPortal() { {/* --- HEADER SECTION --- */}
-
+
Apple One — HQ Tower - - INTELLIGENCE - - CONNECTED ASSETS + + INTELLIGENCE + + CONNECTED ASSETS

Connected refrigeration & HVAC diff --git a/components/dashboard/intelligence/connectedOps.tsx b/components/dashboard/intelligence/connectedOps.tsx index e2bd4fb..e75dfca 100644 --- a/components/dashboard/intelligence/connectedOps.tsx +++ b/components/dashboard/intelligence/connectedOps.tsx @@ -4,7 +4,7 @@ import { Globe } from "lucide-react"; -import { SATISFACTION_DRIVERS, TICKETS_DATA } from "@/constants/constant"; + import Button from "@/components/common/button"; import InfoBanner from "@/components/common/infoBanner"; @@ -13,95 +13,10 @@ import { Card } from "@/components/common/cardWrapper"; import { CardHeader } from "@/components/common/cardHeader"; import Table from "@/components/common/dataTable"; import { connectedheaders, connectedrows } from "@/constants/tabledata"; +import { LIVE_FEED, RISK_RADAR_ITEMS, STAT_CARDS_DATA, VENDOR_PERFORMANCE } from "@/constants/constant"; -// Custom Stat Card Data matching the UI image exactly -const STAT_CARDS_DATA = [ - { - title: "SLA ADHERENCE", - value: "90%", - subtext: "target 90% · automated tracking", - progress: 90, - color: "bg-[#00c985]", // Vibrant emerald green - valueColor: "text-[#00c985]", - }, - { - title: "AVG WO RESOLUTION", - value: "22.4 h", - subtext: "target < 24 h · portfolio median", - progress: 93, - color: "bg-[#2dd4bf]", // Mint / Teal - valueColor: "text-white", - }, - { - title: "MANUAL DATA ENTRY", - value: "-80%", - subtext: "agent-captured requests & readings", - progress: 80, - color: "bg-[#2dd4bf]", // Mint / Teal - valueColor: "text-[#2dd4bf]", - }, - { - title: "REPORTING EFFORT", - value: "-75%", - subtext: "metrics ready for review — no compiling", - progress: 75, - color: "bg-[#2dd4bf]", // Mint / Teal - valueColor: "text-[#2dd4bf]", - }, -]; -// Data for Risk Radar -const RISK_RADAR_ITEMS = [ - { - title: "Coastal One · vendor gap", - desc: "HVAC vendor completion rate fell to 61% — 8 PPMs at risk of slipping this month. Backup vendor suggested.", - tag: "Escalates in ~6 days", - tagColor: "text-rose-400", - dotColor: "bg-rose-500", - action: "Assign backup", - }, - { - title: "Lakeside · SLA drift", - desc: "P2 response times trending +18% over 3 weeks; correlated with night-shift staffing.", - tag: "Breach risk · next week", - tagColor: "text-amber-400", - dotColor: "bg-amber-400", - action: "Adjust roster", - }, - { - title: "Monsoon readiness", - desc: "4 of 11 waterproofing checks pending across portfolio with rains forecast in 10 days.", - tag: "Window closing", - tagColor: "text-amber-400", - dotColor: "bg-amber-400", - action: "Schedule now", - }, - { - title: "Spares shortfall", - desc: "AHU belt stock below reorder level at 2 sites; next PPM cycle consumes remaining stock.", - tag: "3 weeks of stock left", - tagColor: "text-sky-400", - dotColor: "bg-sky-400", - action: "Raise PO", - }, -]; -// Data for Vendor Performance -const VENDOR_PERFORMANCE = [ - { name: "CoolServ HVAC", score: 94, barColor: "bg-emerald-400" }, - { name: "Apex Elevators", score: 91, barColor: "bg-emerald-400" }, - { name: "SecureWatch", score: 86, barColor: "bg-emerald-400" }, - { name: "AquaPure", score: 82, barColor: "bg-amber-400" }, - { name: "GreenScape", score: 61, barColor: "bg-rose-400" }, -]; - -// Data for Live Context Feed -const LIVE_FEED = [ - { time: "now", text: "Vendor CoolServ acknowledged P1 · Chiller-02 — tenant portal updated" }, - { time: "4 min", text: "Energy spike at Lakeside auto-linked to AHU-07 alert" }, - { time: "11 min", text: "Coastal One WO-1221 completed · SLA met · invoice draft created" }, - { time: "26 min", text: "Tenant satisfaction pulse: 4.4 ★ this week (+0.2)" }, -]; export default function ConnectedOpsPortal() { return ( @@ -110,15 +25,15 @@ export default function ConnectedOpsPortal() { {/* Page Header Section */}
-
+
APPLE ONE — HQ TOWER - - INTELLIGENCE - - CONNECTED OPS + + INTELLIGENCE + + CONNECTED OPS

Connected operations

-

+

Every team, vendor and system on the same live context — portfolio-wide work orders, costs, SLAs and vendor performance in one place, with risks flagged before they escalate.

diff --git a/components/dashboard/intelligence/energybenchmarking.tsx b/components/dashboard/intelligence/energybenchmarking.tsx index ee3b5d7..408d91e 100644 --- a/components/dashboard/intelligence/energybenchmarking.tsx +++ b/components/dashboard/intelligence/energybenchmarking.tsx @@ -6,10 +6,8 @@ import { Database, Sliders, Download, - Sparkles } from "lucide-react"; -import { SATISFACTION_DRIVERS, TICKETS_DATA } from "@/constants/constant"; import StatCard from "../../common/dashStatCard"; import Button from "@/components/common/button"; import InfoBanner from "@/components/common/infoBanner"; @@ -27,12 +25,12 @@ export default function EnergyBenchmarkingPortal() { {/* Page Header Section */}
-
+
APPLE ONE — HQ TOWER - - INTELLIGENCE - - BENCHMARKING + + INTELLIGENCE + + BENCHMARKING

Portfolio energy benchmarking

diff --git a/components/dashboard/intelligence/gpsTracking.tsx b/components/dashboard/intelligence/gpsTracking.tsx index 2e271aa..e8b0905 100644 --- a/components/dashboard/intelligence/gpsTracking.tsx +++ b/components/dashboard/intelligence/gpsTracking.tsx @@ -16,17 +16,10 @@ import { Card } from "@/components/common/cardWrapper"; import { CardHeader } from "@/components/common/cardHeader"; import InfoBanner from '@/components/common/infoBanner'; -import { gpsTrackingtabs } from '@/constants/constant'; +import { STAFF_DATA } from '@/constants/constant'; +import { gpsTrackingtabs } from '@/constants/tabConstant'; + -// Staff Table Data -const STAFF_DATA = [ - { name: "Ravi Kumar", role: "M&E Technician", zone: "Chiller plant", inTime: "08:02", hrs: "6.4", status: "ON-SITE", statusType: "success" }, - { name: "Sana Iqbal", role: "HVAC Engineer", zone: "AHU room L7", inTime: "08:15", hrs: "6.1", status: "ON-SITE", statusType: "success" }, - { name: "Mohan D.", role: "Electrician", zone: "En route", inTime: "—", hrs: "0", status: "EN-ROUTE", statusType: "warning" }, - { name: "Lakshmi N.", role: "Housekeeping Lead", zone: "Lobby + L2", inTime: "07:48", hrs: "6.7", status: "ON-SITE", statusType: "success" }, - { name: "Arjun P.", role: "Plumber", zone: "Off-site", inTime: "—", hrs: "0", status: "OFF-SITE", statusType: "neutral" }, - { name: "Fatima R.", role: "BMS Operator", zone: "Control room", inTime: "06:55", hrs: "7.6", status: "ON-SITE", statusType: "success" }, -]; export default function GpsTrackingPortal() { const [activeTab, setActiveTab] = useState('Live tracking'); @@ -36,12 +29,12 @@ export default function GpsTrackingPortal() { {/* --- HEADER SECTION --- */}

-
+
Apple One — HQ Tower - - INTELLIGENCE - - GPS TRACKING + + INTELLIGENCE + + GPS TRACKING

GPS staff tracking & geo-fencing diff --git a/components/dashboard/intelligence/sustainability.tsx b/components/dashboard/intelligence/sustainability.tsx index d02694d..fdcb8a1 100644 --- a/components/dashboard/intelligence/sustainability.tsx +++ b/components/dashboard/intelligence/sustainability.tsx @@ -6,8 +6,6 @@ import { Star, BarChart2, Plus, - ShieldCheck, - Clock } from "lucide-react"; import Button from "@/components/common/button"; import StatCard from "@/components/common/dashStatCard"; @@ -21,25 +19,11 @@ import { CardHeader } from "@/components/common/cardHeader"; import BarChart from "@/components/charts/barchart"; import InfoBanner from '@/components/common/infoBanner'; -import { sustainabilitytabs } from '@/constants/constant'; +import { EMISSION_SOURCES, energyData, } from '@/constants/constant'; +import { sustainabilitytabs } from '@/constants/tabConstant'; + -// Sample Bar Chart Data for Carbon Emissions -const CARBON_EMISSIONS_DATA = [ - { month: 'Jan', height: 'h-32' }, - { month: 'Feb', height: 'h-32' }, - { month: 'Mar', height: 'h-32' }, - { month: 'Apr', height: 'h-32' }, - { month: 'May', height: 'h-32' }, - { month: 'Jun', height: 'h-28' }, -]; -// Emission Sources Progress Data -const EMISSION_SOURCES = [ - { name: "Purchased electricity", percentage: "58%", width: "w-[58%]", color: "bg-sky-400" }, - { name: "DG / fuel combustion", percentage: "21%", width: "w-[21%]", color: "bg-amber-400" }, - { name: "Refrigerants (fugitive)", percentage: "12%", width: "w-[12%]", color: "bg-rose-400" }, - { name: "Water & waste", percentage: "9%", width: "w-[9%]", color: "bg-slate-400" }, -]; export default function SustainabilityPortal() { const [activeTab, setActiveTab] = useState('ESG Data Hub'); @@ -49,12 +33,12 @@ export default function SustainabilityPortal() { {/* --- HEADER SECTION --- */}
-
+
Apple One — HQ Tower - - INTELLIGENCE - - SUSTAINABILITY + + INTELLIGENCE + + SUSTAINABILITY

ESG One — sustainability platform @@ -140,7 +124,7 @@ export default function SustainabilityPortal() { {/* --- ESG CARDS SECTION BELOW TABS --- */}
{/* Environmental Card */} - +
@@ -175,7 +159,7 @@ export default function SustainabilityPortal() { {/* Social Card */} - +
@@ -210,7 +194,7 @@ export default function SustainabilityPortal() { {/* Governance Card */} - +
@@ -249,17 +233,17 @@ export default function SustainabilityPortal() {
{/* Left: Carbon Emissions BarChart */}
- +
- +
{/* Right: Emission Sources */}
- +
{EMISSION_SOURCES.map((source, idx) => ( diff --git a/components/dashboard/operations/equipment.tsx b/components/dashboard/operations/equipment.tsx index 0ecb831..4e395c9 100644 --- a/components/dashboard/operations/equipment.tsx +++ b/components/dashboard/operations/equipment.tsx @@ -14,7 +14,7 @@ import Table from "@/components/common/dataTable"; import InfoBanner from "@/components/common/infoBanner"; import Button from "@/components/common/button"; import NavigationTabs from "@/components/common/tabs"; -import { equipmentTabs } from "@/constants/constant"; +import { equipmentTabs } from "@/constants/tabConstant"; import { useState } from "react"; import StatCard from "@/components/common/dashStatCard"; import { equipmentheaders, equipmentrows } from "@/constants/tabledata"; diff --git a/components/dashboard/operations/helpDesk.tsx b/components/dashboard/operations/helpDesk.tsx index 31e8023..4bc0a3a 100644 --- a/components/dashboard/operations/helpDesk.tsx +++ b/components/dashboard/operations/helpDesk.tsx @@ -12,7 +12,7 @@ import Button from "@/components/common/button"; import StatCard from "@/components/common/dashStatCard"; import Table from "@/components/common/dataTable"; import NavigationTabs from '@/components/common/tabs'; -import { helpdeskTtabs } from '@/constants/constant'; +import { helpdeskTtabs } from '@/constants/tabConstant'; import { helpdeskheaders, helpdeskrows } from '@/constants/tabledata'; diff --git a/components/dashboard/operations/request.tsx b/components/dashboard/operations/request.tsx index ec16955..b9ffa90 100644 --- a/components/dashboard/operations/request.tsx +++ b/components/dashboard/operations/request.tsx @@ -3,7 +3,8 @@ import { Plus } from 'lucide-react'; import Button from "@/components/common/button"; import LocationTable from '@/components/common/dataTable'; import NavigationTabs from '@/components/common/tabs'; -import { Reqeusttabs,statusFilters } from '@/constants/constant'; +import { statusFilters } from '@/constants/constant'; +import { Reqeusttabs } from '@/constants/tabConstant'; import FilterTabs from '@/components/common/roundedFilters'; import Table from '@/components/common/dataTable'; import { requestheaders, requestrows } from '@/constants/tabledata'; diff --git a/components/dashboard/workplace/workspace.tsx b/components/dashboard/workplace/workspace.tsx index 8657800..4058ca1 100644 --- a/components/dashboard/workplace/workspace.tsx +++ b/components/dashboard/workplace/workspace.tsx @@ -14,10 +14,11 @@ import Button from "@/components/common/button"; import NavigationTabs from "@/components/common/tabs"; import { useState } from "react"; -import { workspaceTabs, zoneUtilizationData } from "@/constants/constant"; +import { zoneUtilizationData } from "@/constants/constant"; import StatCard from "@/components/common/dashStatCard"; import { Card } from '@/components/common/cardWrapper'; import { CardHeader } from '@/components/common/cardHeader'; +import { workspaceTabs } from '@/constants/tabConstant'; export default function WorkSpacePortal() { const [activeTab, setActiveTab] = useState("Desk Booking"); diff --git a/components/layouts/sidebar.tsx b/components/layouts/sidebar.tsx index 34605f2..79d44be 100644 --- a/components/layouts/sidebar.tsx +++ b/components/layouts/sidebar.tsx @@ -65,15 +65,15 @@ export default function Sidebar() { ))}
-
-
{/* Profile Card */} -
+
diff --git a/constants/adminTableDatat.tsx b/constants/adminTableDatat.tsx new file mode 100644 index 0000000..2122635 --- /dev/null +++ b/constants/adminTableDatat.tsx @@ -0,0 +1,516 @@ +import Button from "@/components/common/button"; +import { StatusBadge } from "@/components/common/statusBadge"; +import { Eye, GitBranch, KeyRound, Pencil, Settings } from "lucide-react"; +import ActionButtons from "@/components/common/actionButton"; + + + + + +export const siteHeaders = [ + "Site", + "Tenant", + "Coordinates", + "Radius", + "Status", + "Actions", +]; + +export const siteRows = [ + [ +
+

Apple One — HQ Tower

+

AO-HQ · SIT-3001

+
, + "Apple One", + 19.0760, 72.8777, + 200 m, +
+
+
+
+ +
, + , + ], + + [ +
+

Apple One — Annexe

+

AO-AX · SIT-3002

+
, + "Apple One", + 19.1020, 72.8895, + 150 m, +
+
+
+
+ +
, + , + ], + + [ +
+

Novotel Pune — Main

+

NP-M · SIT-3003

+
, + "Novotel Pune", + 18.5604, 73.9090, + 180 m, +
+
+
+
+ +
, + , + ], + + [ +
+

+ SRM Campus — Academic Block +

+

SRM-AB · SIT-3004

+
, + "SRM Campus", + 12.8230, 80.0444, + 400 m, +
+
+
+
+ +
, + , + ], + + [ +
+

+ SRM Campus — Hostel Block +

+

SRM-HB · SIT-3005

+
, + "SRM Campus", + 12.8255, 80.0478, + 350 m, +
+
+
+
+ +
, + , + ], + + [ +
+

Local 1 — Site

+

L1-S · SIT-3006

+
, + "Local 1", + 19.2183, 72.9781, + 120 m, +
+
+
+
+ +
, + , + ], +]; + +export const organizationHeaders = [ + "Organization", + "Tenant ID", + "Contact", + "Time Zone", + "Status", + "Actions", +]; + + + +export const organizationRows = [ + [ +
+
+ AO +
+ +
+
Apple One
+
ops@appleone.com
+
+
, + + + TNT-1001 + , + +
+
Dhananjay T.
+
+91 98200 10001
+
, + + Asia/Kolkata, + + , + + , + ], + + [ +
+
+ NP +
+ +
+
Novotel Pune
+
fm@novotelpune.com
+
+
, + + + TNT-1002 + , + +
+
Site FM Lead
+
+91 98220 20002
+
, + + Asia/Kolkata, + + , + + , + ], + + [ +
+
+ SC +
+ +
+
SRM Campus
+
estates@srm.edu
+
+
, + + + TNT-1003 + , + +
+
Estates Office
+
+91 98430 30003
+
, + + Asia/Kolkata, + + , + + , + ], + + [ +
+
+ L1 +
+ +
+
Local 1
+
admin@local1.com
+
+
, + + + TNT-1004 + , + +
+
Local Admin
+
+91 98000 40004
+
, + + Asia/Kolkata, + + , + + , + ], +]; + + + +export const userHeaders = [ + "Name", + "Email", + "Phone", + "Tenants", + "MFA", + "User ID", + "Actions", +]; + +const UserActionButtons = () => ( +
+ + + +
+); + +export const userRows = [ + [ +
+
+ DT +
+ + + Dhananjay T. + +
, + + + dhananjay@kafm.io + , + + + +91 98200 10001 + , + + + 4 assigned + , + + , + + + USR-5001 + , + + , + ], + + [ +
+
+ MS +
+ + + ME Supervisor + +
, + + + me.local@kafm.io + , + + + +91 98201 10010 + , + + + 1 assigned + , + + , + + + USR-5002 + , + + , + ], + + [ +
+
+ T +
+ + + Technician + +
, + + + tech.local@kafm.io + , + + + +91 98202 10011 + , + + + 2 assigned + , + + , + + + USR-5003 + , + + , + ], + + [ +
+
+ TC +
+ + + Tenant Customer + +
, + + + tenant@kafm.io + , + + + +91 98203 10012 + , + + + 1 assigned + , + + , + + + USR-5004 + , + + , + ], + + [ +
+
+ HA +
+ + + Helpdesk Agent + +
, + + + help@kafm.io + , + + + +91 98204 10013 + , + + + 2 assigned + , + + , + + + USR-5005 + , + + , + ], + + [ +
+
+ EA +
+ + + Energy Analyst + +
, + + + energy@kafm.io + , + + + +91 98430 30030 + , + + + 1 assigned + , + + , + + + USR-5006 + , + + , + ], +]; \ No newline at end of file diff --git a/constants/constant.ts b/constants/constant.ts index 189ae40..b151799 100644 --- a/constants/constant.ts +++ b/constants/constant.ts @@ -1,3 +1,5 @@ +import { BarChart2, Box, CheckSquare, + ClipboardCheck, Crosshair, FileText, LayoutGrid, Zap } from "lucide-react"; @@ -26,6 +28,14 @@ export const chartData = [ { month: "May", height: 'h-18' }, { month: "Jun", height: 'h-20' }, ]; +// Emission Sources Progress Data +export const EMISSION_SOURCES = [ + { name: "Purchased electricity", percentage: "58%", width: "w-[58%]", color: "bg-sky-400" }, + { name: "DG / fuel combustion", percentage: "21%", width: "w-[21%]", color: "bg-amber-400" }, + { name: "Refrigerants (fugitive)", percentage: "12%", width: "w-[12%]", color: "bg-rose-400" }, + { name: "Water & waste", percentage: "9%", width: "w-[9%]", color: "bg-slate-400" }, +]; + export const activities = [ { time: '09:42', text: '6/1009 assigned to ME Local', boldText: '6/1009' }, @@ -501,6 +511,103 @@ export const blocks = ["Block 1", "Block 2", "Tower A"]; }, ]; +export const STAT_CARDS_DATA = [ + { + title: "SLA ADHERENCE", + value: "90%", + subtext: "target 90% · automated tracking", + progress: 90, + color: "bg-[#00c985]", // Vibrant emerald green + valueColor: "text-[#00c985]", + }, + { + title: "AVG WO RESOLUTION", + value: "22.4 h", + subtext: "target < 24 h · portfolio median", + progress: 93, + color: "bg-[#2dd4bf]", // Mint / Teal + valueColor: "text-white", + }, + { + title: "MANUAL DATA ENTRY", + value: "-80%", + subtext: "agent-captured requests & readings", + progress: 80, + color: "bg-[#2dd4bf]", // Mint / Teal + valueColor: "text-[#2dd4bf]", + }, + { + title: "REPORTING EFFORT", + value: "-75%", + subtext: "metrics ready for review — no compiling", + progress: 75, + color: "bg-[#2dd4bf]", // Mint / Teal + valueColor: "text-[#2dd4bf]", + }, +]; + +// Data for Risk Radar +export const RISK_RADAR_ITEMS = [ + { + title: "Coastal One · vendor gap", + desc: "HVAC vendor completion rate fell to 61% — 8 PPMs at risk of slipping this month. Backup vendor suggested.", + tag: "Escalates in ~6 days", + tagColor: "text-rose-400", + dotColor: "bg-rose-500", + action: "Assign backup", + }, + { + title: "Lakeside · SLA drift", + desc: "P2 response times trending +18% over 3 weeks; correlated with night-shift staffing.", + tag: "Breach risk · next week", + tagColor: "text-amber-400", + dotColor: "bg-amber-400", + action: "Adjust roster", + }, + { + title: "Monsoon readiness", + desc: "4 of 11 waterproofing checks pending across portfolio with rains forecast in 10 days.", + tag: "Window closing", + tagColor: "text-amber-400", + dotColor: "bg-amber-400", + action: "Schedule now", + }, + { + title: "Spares shortfall", + desc: "AHU belt stock below reorder level at 2 sites; next PPM cycle consumes remaining stock.", + tag: "3 weeks of stock left", + tagColor: "text-sky-400", + dotColor: "bg-sky-400", + action: "Raise PO", + }, +]; + +// Data for Vendor Performance +export const VENDOR_PERFORMANCE = [ + { name: "CoolServ HVAC", score: 94, barColor: "bg-emerald-400" }, + { name: "Apex Elevators", score: 91, barColor: "bg-emerald-400" }, + { name: "SecureWatch", score: 86, barColor: "bg-emerald-400" }, + { name: "AquaPure", score: 82, barColor: "bg-amber-400" }, + { name: "GreenScape", score: 61, barColor: "bg-rose-400" }, +]; + +// Data for Live Context Feed + export const LIVE_FEED = [ + { time: "now", text: "Vendor CoolServ acknowledged P1 · Chiller-02 — tenant portal updated" }, + { time: "4 min", text: "Energy spike at Lakeside auto-linked to AHU-07 alert" }, + { time: "11 min", text: "Coastal One WO-1221 completed · SLA met · invoice draft created" }, + { time: "26 min", text: "Tenant satisfaction pulse: 4.4 ★ this week (+0.2)" }, +]; + +export const STAFF_DATA = [ + { name: "Ravi Kumar", role: "M&E Technician", zone: "Chiller plant", inTime: "08:02", hrs: "6.4", status: "ON-SITE", statusType: "success" }, + { name: "Sana Iqbal", role: "HVAC Engineer", zone: "AHU room L7", inTime: "08:15", hrs: "6.1", status: "ON-SITE", statusType: "success" }, + { name: "Mohan D.", role: "Electrician", zone: "En route", inTime: "—", hrs: "0", status: "EN-ROUTE", statusType: "warning" }, + { name: "Lakshmi N.", role: "Housekeeping Lead", zone: "Lobby + L2", inTime: "07:48", hrs: "6.7", status: "ON-SITE", statusType: "success" }, + { name: "Arjun P.", role: "Plumber", zone: "Off-site", inTime: "—", hrs: "0", status: "OFF-SITE", statusType: "neutral" }, + { name: "Fatima R.", role: "BMS Operator", zone: "Control room", inTime: "06:55", hrs: "7.6", status: "ON-SITE", statusType: "success" }, +]; + export const permitsData = [ { permit: "PTW-2663", @@ -664,3 +771,123 @@ export const HANDLES_DATA = [ subtitle: "assigns per contract & skill", }, ]; + + +export const initialRows = [ + // Row 1 (2 cards) + { + id: "row-1", + widgets: [ + { id: "w1", title: "TFM Requests · Monthly", type: "report.widget" }, + { id: "w2", title: "Recent Activity", type: "report.widget" }, + ], + }, + // Row 2 (2 cards) + { + id: "row-2", + widgets: [ + { id: "w3", title: "Schedule Performance", type: "report.widget" }, + { id: "w4", title: "Energy · Today", type: "report.widget" }, + ], + }, + // Row 3 (3 cards) + { + id: "row-3", + widgets: [ + { id: "w5", title: "Top 5 Requester", type: "report.widget" }, + { id: "w6", title: "Asset Register", type: "report.widget" }, + { id: "w7", title: "PM Plan vs Started", type: "report.widget" }, + ], + }, +]; + + +export const initialLanguageValues = [ + { + id: 1, + app: "Web Console", + menu: "Tenant", + screen: "Tenant List", + uiKey: "btn.add_tenant", + code: "EN", + value: "Add Tenant", + }, + { + id: 2, + app: "Web Console", + menu: "Site", + screen: "Site List", + uiKey: "btn.add_site", + code: "EN", + value: "Add Site", + }, + { + id: 3, + app: "Mobile App", + menu: "Inspections", + screen: "QR Round", + uiKey: "lbl.scan_qr", + code: "EN", + value: "Scan QR to begin round", + }, +]; + + +export const initialModules = [ + { + id: "MOD-01", + title: "Dashboard", + description: "Operational overview & live KPIs", + icon: LayoutGrid, + menus: [], // Currently empty as per screenshot + }, + { + id: "MOD-02", + title: "Helpdesk", + description: "Tickets, requests & SLA tracking", + icon: CheckSquare, + menus: ["Tickets", "SLA Settings", "Queues"], + }, + { + id: "MOD-03", + title: "Equipment", + description: "Asset register & equipment groups", + icon: Crosshair, + menus: ["Asset Register", "Categories"], + }, + { + id: "MOD-04", + title: "Request", + description: "Service requests & approvals", + icon: FileText, + menus: ["My Requests", "Approvals"], + }, + { + id: "MOD-05", + title: "Inventory", + description: "Stock, spares & consumables", + icon: Box, + menus: ["Stock Levels", "Suppliers"], + }, + { + id: "MOD-06", + title: "Energy", + description: "Meters, consumption & analytics", + icon: Zap, + menus: ["Meters", "Analytics"], + }, + { + id: "MOD-07", + title: "Inspections", + description: "QR rounds & checklists", + icon: ClipboardCheck, + menus: ["Rounds", "Checklists"], + }, + { + id: "MOD-08", + title: "Reports", + description: "Analytics & export tools", + icon: BarChart2, + menus: ["Scheduled Reports", "Custom Builder"], + }, +]; \ No newline at end of file diff --git a/constants/tabConstant.ts b/constants/tabConstant.ts new file mode 100644 index 0000000..e371429 --- /dev/null +++ b/constants/tabConstant.ts @@ -0,0 +1,82 @@ +//Tabs used in Operations dashboards + +export const equipmentTabs: string[] = [ + 'Equipment Groups', + 'Site-Wise Equipment', + 'PPM Checklist', + 'AMC Checklist', + 'PPM Schedule', + 'AMC Schedule', + 'Maintenance Calendar' + ]; + + + + export const helpdeskTtabs: string[] = + ['Location', + 'Technical', + 'Missed', + 'Departments', + 'HSQE']; + + + +export const aiHelpdeskTabs: string[] = [ + 'Live triage', + 'Invoice verification', + 'SLA Enforecment', + 'Automation rules', + + ]; + +export const Reqeusttabs: string[] = [ + 'TFM Requests', + 'Engineering', + 'Schedule Complaints' + ]; + + + export const trainingtabs: string[] = [ + 'Courses', + 'Certificates & history', + + ]; + + + export const workspaceTabs: string[] = [ + 'Desk Booking', + 'Floor Plan', + 'TimeTable', + + ]; + export const connectedassettabs:string[]=[ + 'Asset Fleet', + 'Excursions', + 'Optimisation', + ] + + export const sustainabilitytabs:string[]=[ + 'ESG Data Hub', + 'IoT sensor', + 'Reporting engine', + 'Target & forecasts', + 'Social & goverance', + ] + export const gpsTrackingtabs:string[]=[ + 'Live tracking', + 'Geo-fences', + 'Entry/exit logs', + 'Route history', + 'Mobile app', + ] + export const reporttabs: string[] = [ + 'Equipment', + 'Maintance', + 'Checklists', + 'Requests', + 'Inventory', + 'Energy', + 'HSQE', + 'MMR', + ]; + diff --git a/constants/tabledata.tsx b/constants/tabledata.tsx index 50b262b..5409cd9 100644 --- a/constants/tabledata.tsx +++ b/constants/tabledata.tsx @@ -1,7 +1,7 @@ import ActionButtons from "@/components/common/actionButton"; import Button from "@/components/common/button"; import { StatusBadge } from "@/components/common/statusBadge"; -import { FileText, Eye } from "lucide-react"; +import { FileText, Eye, Pencil, GitBranch, Settings } from "lucide-react"; //Vendor field Service @@ -3301,6 +3301,177 @@ export const budgetPerformanceRows = [ ]; + +export const trustedDeviceHeaders = [ + "USER", + "DEVICE", + "IP", + "LAST SEEN", + "EXPIRES", + "STATUS", + "ACTIONS", +]; + +export const trustedDeviceRows = [ + [ + Dhananjay T., + "Chrome 126 · Windows 11", + 103.212.14.8, + Today, 08:12, + Jul 30, 2026, + , + , + ], + + [ + Kavya Raghunathan, + "Safari 18 · macOS", + 49.37.201.55, + Yesterday, 17:40, + Jul 21, 2026, + , + , + ], + + [ + Rahul Iyer, + "KAFM Mobile · Android 15", + 152.58.33.104, + Today, 06:58, + Jul 12, 2026, + , + , + ], + + [ + Meera Pillai, + "Edge 126 · Windows 10", + 103.212.14.31, + Jun 18, 2026, + Expired, + , + , + ], +]; + +export const auditLogHeaders = [ + "WHEN", + "USER", + "EVENT", + "IP", + "RESULT", +]; + +export const auditLogRows = [ + [ + Today 08:12, + dhananjay@kafm.io, + Sign-in · password + MFA, + 103.212.14.8, + , + ], + + [ + Today 07:56, + kavya@kafm.io, + + Role changed · Technician → M&E Supervisor + , + 49.37.201.55, + , + ], + + [ + Today 07:31, + unknown@ext.net, + + Sign-in · wrong password (3rd attempt) + , + 91.240.118.7, + , + ], + + [ + Today 06:58, + rahul@kafm.io, + + Device trusted · KAFM Mobile (30 days) + , + 152.58.33.104, + , + ], + + [ + Yesterday 17:40, + kavya@kafm.io, + + Password reset · self-service link + , + 49.37.201.55, + , + ], + + [ + Yesterday 14:05, + meera@kafm.io, + + MFA reset by admin · device revoked + , + 103.212.14.31, + , + ], + + [ + Jun 30 09:12, + admin@kafm.io, + + Sign-in policy updated · idle timeout 30 min + , + 103.212.14.8, + , + ], +]; + + //Statutory Compliance Page export const statutoryheaders = [ "Obligation", @@ -3914,4 +4085,138 @@ export const auditrows = [
, ], -]; \ No newline at end of file +]; +export const siteHeaders = [ + "Site", + "Tenant", + "Coordinates", + "Radius", + "Status", + "Actions", +]; + +export const siteRows = [ + [ +
+

Apple One — HQ Tower

+

AO-HQ · SIT-3001

+
, + "Apple One", + 19.0760, 72.8777, + 200 m, +
+
+
+
+ +
, + , + ], + + [ +
+

Apple One — Annexe

+

AO-AX · SIT-3002

+
, + "Apple One", + 19.1020, 72.8895, + 150 m, +
+
+
+
+ +
, + , + ], + + [ +
+

Novotel Pune — Main

+

NP-M · SIT-3003

+
, + "Novotel Pune", + 18.5604, 73.9090, + 180 m, +
+
+
+
+ +
, + , + ], + + [ +
+

+ SRM Campus — Academic Block +

+

SRM-AB · SIT-3004

+
, + "SRM Campus", + 12.8230, 80.0444, + 400 m, +
+
+
+
+ +
, + , + ], + + [ +
+

+ SRM Campus — Hostel Block +

+

SRM-HB · SIT-3005

+
, + "SRM Campus", + 12.8255, 80.0478, + 350 m, +
+
+
+
+ +
, + , + ], + + [ +
+

Local 1 — Site

+

L1-S · SIT-3006

+
, + "Local 1", + 19.2183, 72.9781, + 120 m, +
+
+
+
+ +
, + , + ], +];