From 7ce1f2705e90fc609309e61807366a568e3f2472 Mon Sep 17 00:00:00 2001 From: Shaily Mishra Date: Tue, 28 Jul 2026 19:11:10 +0530 Subject: [PATCH] Changes done in ui screens --- .../{alarmRules => alarmRule}/page.tsx | 2 +- components/common/dataTable.tsx | 2 +- .../dashboard/compliance/auditAndSurvey.tsx | 10 +- components/dashboard/compliance/contracts.tsx | 10 +- .../dashboard/compliance/fireAndSafety.tsx | 12 +- .../compliance/statutoryCompliance.tsx | 12 +- components/dashboard/compliance/training.tsx | 16 +- .../dashboard/compliance/wasteAndEsg.tsx | 12 +- components/dashboard/configure/masterData.tsx | 54 +- .../dashboard/configure/rolesaccess.tsx | 76 +- components/dashboard/configure/settings.tsx | 38 +- .../dashboard/configure/userLocation.tsx | 81 +- .../configure/workflowAutomation.tsx | 22 +- components/dashboard/finance/budget.tsx | 89 +- components/dashboard/finance/costInvoice.tsx | 10 +- components/dashboard/insight/reports.tsx | 16 +- .../dashboard/iotapplication/alarmsRules.tsx | 34 +- .../iotapplication/commandCenter.tsx | 16 +- .../dashboard/iotapplication/deviceFleet.tsx | 16 +- .../iotapplication/energyUtility.tsx | 12 +- .../dashboard/iotapplication/hvacPlant.tsx | 33 +- components/dashboard/operations/energy.tsx | 36 +- components/dashboard/operations/inventory.tsx | 130 +- .../dashboard/operations/vendorService.tsx | 108 +- .../dashboard/operations/workpermit.tsx | 152 +- components/dashboard/overview/dashboard.tsx | 3 +- .../dashboard/workplace/meetingRoom.tsx | 22 +- .../dashboard/workplace/visitorManagement.tsx | 10 +- components/dashboard/workplace/workspace.tsx | 21 +- components/layouts/sidebar.tsx | 2 +- constants/constant.ts | 592 ++----- constants/sidebarConstant.ts | 160 ++ constants/tabledata.tsx | 1383 +++++++++++++++++ 33 files changed, 1944 insertions(+), 1248 deletions(-) rename app/dashboard/iot-app/{alarmRules => alarmRule}/page.tsx (76%) create mode 100644 constants/sidebarConstant.ts diff --git a/app/dashboard/iot-app/alarmRules/page.tsx b/app/dashboard/iot-app/alarmRule/page.tsx similarity index 76% rename from app/dashboard/iot-app/alarmRules/page.tsx rename to app/dashboard/iot-app/alarmRule/page.tsx index 1d6a417..60580d5 100644 --- a/app/dashboard/iot-app/alarmRules/page.tsx +++ b/app/dashboard/iot-app/alarmRule/page.tsx @@ -4,7 +4,7 @@ import AlarmRulesPortal from "@/components/dashboard/iotapplication/alarmsRules"; -import DeviceFleetPortal from "@/components/dashboard/iotapplication/deviceFleet"; + diff --git a/components/common/dataTable.tsx b/components/common/dataTable.tsx index 99da179..0b8d37a 100644 --- a/components/common/dataTable.tsx +++ b/components/common/dataTable.tsx @@ -7,7 +7,7 @@ type TableProps = { export default function Table({ headers, rows }: TableProps) { return ( -
diff --git a/components/dashboard/compliance/auditAndSurvey.tsx b/components/dashboard/compliance/auditAndSurvey.tsx index c344655..05edd13 100644 --- a/components/dashboard/compliance/auditAndSurvey.tsx +++ b/components/dashboard/compliance/auditAndSurvey.tsx @@ -22,12 +22,12 @@ export default function AuditSurveyPortal() { {/* --- HEADER SECTION --- */}
-
+
Apple One — HQ Tower - - COMPLIANCE - - AUDIT & SURVEY + + COMPLIANCE + + AUDIT & SURVEY

Audit & survey management diff --git a/components/dashboard/compliance/contracts.tsx b/components/dashboard/compliance/contracts.tsx index aff6de6..a451bf2 100644 --- a/components/dashboard/compliance/contracts.tsx +++ b/components/dashboard/compliance/contracts.tsx @@ -21,12 +21,12 @@ export default function ContractsPortal() { {/* --- HEADER SECTION --- */}
-
+
Apple One — HQ Tower - - COMPLIANCE - - Contracts + + COMPLIANCE + + Contracts

Contract management diff --git a/components/dashboard/compliance/fireAndSafety.tsx b/components/dashboard/compliance/fireAndSafety.tsx index 4e488ff..7aea49d 100644 --- a/components/dashboard/compliance/fireAndSafety.tsx +++ b/components/dashboard/compliance/fireAndSafety.tsx @@ -23,12 +23,12 @@ export default function FireSafetyPortal() { {/* --- HEADER SECTION --- */}
-
+
Apple One — HQ Tower - - COMPLIANCE - - FIRE & SAFETY + + COMPLIANCE + + FIRE & SAFETY

Fire & safety management @@ -102,7 +102,7 @@ export default function FireSafetyPortal() { {/* --- MAIN CONTENT LAYOUT --- */}
{/* Left Column: Safety equipment inspection Table */} -
+

Safety equipment inspection diff --git a/components/dashboard/compliance/statutoryCompliance.tsx b/components/dashboard/compliance/statutoryCompliance.tsx index 8c4ead3..9a66d5a 100644 --- a/components/dashboard/compliance/statutoryCompliance.tsx +++ b/components/dashboard/compliance/statutoryCompliance.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react'; + import { Layers, ShieldCheck, @@ -32,12 +32,12 @@ export default function StatutoryCompliancePortal() { {/* --- HEADER SECTION --- */}
-
+
Apple One — HQ Tower - - Compliance - - Statutory + + Compliance + + Statutory

Statutory compliance tracker diff --git a/components/dashboard/compliance/training.tsx b/components/dashboard/compliance/training.tsx index 17871c2..b419bd1 100644 --- a/components/dashboard/compliance/training.tsx +++ b/components/dashboard/compliance/training.tsx @@ -1,10 +1,8 @@ import { useState } from 'react'; import { - ShieldCheck, - Clock, + AlertTriangle, - Calendar, - Layers, + Plus, GraduationCap, Star, @@ -28,12 +26,12 @@ export default function TrainingPortal() { {/* --- HEADER SECTION --- */}
-
+
Apple One — HQ Tower - - COMPLIANCE - - TRAINING + + COMPLIANCE + + TRAINING

Training & onboarding diff --git a/components/dashboard/compliance/wasteAndEsg.tsx b/components/dashboard/compliance/wasteAndEsg.tsx index 614fc1a..951ad22 100644 --- a/components/dashboard/compliance/wasteAndEsg.tsx +++ b/components/dashboard/compliance/wasteAndEsg.tsx @@ -20,12 +20,12 @@ export default function WasteESGPortal() { {/* --- HEADER SECTION --- */}
-
+
Apple One — HQ Tower - - SUSTAINABILITY - - WASTE + + SUSTAINABILITY + + WASTE

Waste management @@ -97,7 +97,7 @@ export default function WasteESGPortal() {

{/* --- MAIN CONTENT SECTION BELOW STAT CARDS --- */} -
+
{/* Waste by Stream Progress Chart */}
diff --git a/components/dashboard/configure/masterData.tsx b/components/dashboard/configure/masterData.tsx index c753e20..5398750 100644 --- a/components/dashboard/configure/masterData.tsx +++ b/components/dashboard/configure/masterData.tsx @@ -1,25 +1,24 @@ "use client"; -import React, { useState } from "react"; -import { Plus, QrCode, Sparkles } from "lucide-react"; +import { useState } from "react"; +import { Plus, } from "lucide-react"; +import Button from "@/components/common/button"; +import { blocks, floors, zones } from "@/constants/constant"; export default function MasterDataPortal() { const [activeTab, setActiveTab] = useState("Block / Floor / Zone"); // Sample data for the hierarchy cards - const blocks = ["Block 1", "Block 2", "Tower A"]; - const floors = ["Ground", "Floor 1", "Floor 2"]; - const zones = ["Zone N", "Zone Z1", "Zone Z2"]; - + return (
{/* --- BREADCRUMB --- */} -
+
APPLE ONE — HQ TOWER - CONFIGURE + CONFIGURE - MASTER DATA + MASTER DATA
{/* --- PAGE HEADER --- */} @@ -40,7 +39,7 @@ export default function MasterDataPortal() { SITE & LOCATION - +
{/* ASSETS */} @@ -59,7 +58,7 @@ export default function MasterDataPortal() {
{["Manufacturer", "Service Provider", "Criticality"].map((item) => ( - + ))}
@@ -81,7 +80,7 @@ export default function MasterDataPortal() {
{["Service Type", "Unit", "Store", "Partners"].map((item) => ( - + ))}
@@ -103,7 +102,7 @@ export default function MasterDataPortal() {
{["Budget Category", "Budget Type"].map((item) => ( - + ))}
@@ -125,7 +124,7 @@ export default function MasterDataPortal() { PEOPLE
- +
@@ -200,18 +199,18 @@ export default function MasterDataPortal() { ACTIVE - +
))}

- +
{/* Zone Column */} @@ -229,22 +228,23 @@ export default function MasterDataPortal() { ACTIVE - +

))}

- +
+ ); } \ No newline at end of file diff --git a/components/dashboard/configure/rolesaccess.tsx b/components/dashboard/configure/rolesaccess.tsx index 9dc2f57..f26326e 100644 --- a/components/dashboard/configure/rolesaccess.tsx +++ b/components/dashboard/configure/rolesaccess.tsx @@ -3,61 +3,9 @@ import React, { useState } from "react"; import { Check } from "lucide-react"; import Button from "@/components/common/button"; +import { initialPermissions, rolesList } from "@/constants/constant"; -// Initial roles state -const rolesList = [ - { id: "admin", label: "Admin", badge: "all" }, - { id: "helpdesk", label: "Helpdesk", badge: "scoped" }, - { id: "mne_supervisor", label: "M&E Supervisor", badge: "scoped" }, - { id: "technician", label: "Technician", badge: "scoped" }, - { id: "tenant", label: "Tenant", badge: "scoped" }, -]; -// Initial permissions table data -const initialPermissions = [ - { - id: 1, - module: "Help Desk", - menu: "Daily Location Checklist", - permissions: { all: false, view: true, add: true, edit: true, delete: false, cancel: true, print: true }, - }, - { - id: 2, - module: "Equipment", - menu: "Site-Wise Equipment", - permissions: { all: false, view: true, add: true, edit: true, delete: false, cancel: true, print: true }, - }, - { - id: 3, - module: "Equipment", - menu: "AMC Schedule", - permissions: { all: false, view: true, add: true, edit: true, delete: false, cancel: true, print: true }, - }, - { - id: 4, - module: "Request", - menu: "TFM Request", - permissions: { all: false, view: true, add: true, edit: true, delete: false, cancel: true, print: true }, - }, - { - id: 5, - module: "Energy", - menu: "Meter Reading", - permissions: { all: false, view: true, add: true, edit: true, delete: false, cancel: true, print: true }, - }, - { - id: 6, - module: "Master", - menu: "Request Location", - permissions: { all: false, view: true, add: true, edit: true, delete: false, cancel: true, print: true }, - }, - { - id: 7, - module: "Security", - menu: "Users", - permissions: { all: false, view: true, add: true, edit: true, delete: false, cancel: true, print: true }, - }, -]; export default function RolesAccessPortal() { const [activeTopTab, setActiveTopTab] = useState("Roles & Permissions"); @@ -68,16 +16,16 @@ export default function RolesAccessPortal() { return (
{/* --- BREADCRUMB --- */} -
+
APPLE ONE — HQ TOWER - CONFIGURE + CONFIGURE - ROLES & ACCESS + ROLES & ACCESS
{/* --- PAGE HEADER --- */} -

+

Roles & access

@@ -88,7 +36,7 @@ export default function RolesAccessPortal() { {/* --- MAIN TABS --- */}

{["Roles & Permissions", "Tenant Access", "Escalation Matrix"].map((tab) => ( - + ))}
@@ -112,7 +60,7 @@ export default function RolesAccessPortal() { {rolesList.map((role) => { const isSelected = selectedRole === role.id; return ( - + ); })}
@@ -176,8 +124,8 @@ export default function RolesAccessPortal() { const isChecked = row.permissions[permKey]; return (

); } diff --git a/components/dashboard/configure/settings.tsx b/components/dashboard/configure/settings.tsx index 32e8410..242de95 100644 --- a/components/dashboard/configure/settings.tsx +++ b/components/dashboard/configure/settings.tsx @@ -26,29 +26,23 @@ export default function SettingsPortal() { return (
{/* Top Header & Breadcrumb */} -
-
-
- - APPLE ONE — HQ TOWER - {" "} - • CONFIGURE{" "} - • SETTINGS -
-

Settings

-

- Personal and notification preferences for this tenant workspace. -

-
- - {/* Save Changes Button */} -
- -
+
+ APPLE ONE — HQ TOWER + + CONFIGURE + + SETTINGS
+ {/* --- PAGE HEADER --- */} +

+ Settings +

+

+ Personal and notification preferences for this tenant workspace. +

+ + {/* Main Grid Layout */}
{/* Left Column: App Settings */} @@ -66,7 +60,7 @@ export default function SettingsPortal() {

Workspace loaded on sign-in

- +
- - - - - - - - - - - - {categoryData.map((row, idx) => ( - - - - - - - - - ))} - -
CategoryTypePlannedActualVarianceUtilization
- {row.category} - - - {row.type} - - - {row.planned} - - {row.actual} - - {row.variance} - -
-
-
- - {row.utilization}% - -
-
- +
+
+

+ Planned vs actual·by category

+ +
+ + {/* Corrected column layout and removed horizontal scrollbar to align with the right UI. */} + + + + + + {/* Approval Queue Panel (Right 1 Column) */} @@ -174,9 +137,9 @@ export default function BudgetPortal() { {item.status === "pending" ? ( - + ) : ( diff --git a/components/dashboard/finance/costInvoice.tsx b/components/dashboard/finance/costInvoice.tsx index 24d0e2f..0161671 100644 --- a/components/dashboard/finance/costInvoice.tsx +++ b/components/dashboard/finance/costInvoice.tsx @@ -22,12 +22,12 @@ export default function CostInvoicePortal() { {/* --- HEADER SECTION WITH BUTTONS --- */}
-
+
Apple One — HQ Tower - - FINANCE - - COSTING & INVOICING + + FINANCE + + COSTING & INVOICING

diff --git a/components/dashboard/insight/reports.tsx b/components/dashboard/insight/reports.tsx index fd64ed3..3b56ca8 100644 --- a/components/dashboard/insight/reports.tsx +++ b/components/dashboard/insight/reports.tsx @@ -1,5 +1,5 @@ import { useState } from 'react'; -import { Plus, Download } from 'lucide-react'; + import Button from "@/components/common/button"; import NavigationTabs from '@/components/common/tabs'; import { reportFilters, reporttabs, Reqeusttabs, statusFilters } from '@/constants/constant'; @@ -22,12 +22,12 @@ export default function ReportPortal() { {/* --- HEADER SECTION --- */}
-
+
Apple One — HQ Tower - - INSIGHT - - REPORTS + + INSIGHT + + REPORTS

Reports & MMR @@ -59,11 +59,11 @@ export default function ReportPortal() { onChange={setActiveFilter} /> - +

diff --git a/components/dashboard/iotapplication/alarmsRules.tsx b/components/dashboard/iotapplication/alarmsRules.tsx index cabc81f..d6dcf51 100644 --- a/components/dashboard/iotapplication/alarmsRules.tsx +++ b/components/dashboard/iotapplication/alarmsRules.tsx @@ -22,12 +22,12 @@ export default function AlarmRulesPortal() { {/* --- HEADER SECTION --- */}
-
+
APPLE ONE — HQ TOWER - - IOT - - ALARMS & RULES + + IOT + + ALARMS & RULES

Alarms & automation rules @@ -237,8 +237,8 @@ export default function AlarmRulesPortal() { Raises a Help Desk request with the asset and fault pre-filled

- +
{/* Rule 2 */} @@ -262,8 +262,8 @@ export default function AlarmRulesPortal() { Notifies the escalation matrix after 15 minutes

- +
{/* Rule 3 */} @@ -287,8 +287,8 @@ export default function AlarmRulesPortal() { Widens comfort bands 22:00–06:00 to save energy

- +
{/* Rule 4 */} @@ -312,8 +312,8 @@ export default function AlarmRulesPortal() { Adds a filter change to the next PPM visit automatically

- +
diff --git a/components/dashboard/iotapplication/commandCenter.tsx b/components/dashboard/iotapplication/commandCenter.tsx index 8fd8d75..d2e5f0a 100644 --- a/components/dashboard/iotapplication/commandCenter.tsx +++ b/components/dashboard/iotapplication/commandCenter.tsx @@ -14,17 +14,17 @@ export default function CommandCenterPortal() { {/* --- HEADER SECTION --- */}
-
+
APPLE ONE — HQ TOWER - - IOT - - COMMAND CENTER + + IOT + + COMMAND CENTER

IoT command center

-

+

Every gateway, controller and sensor across the portfolio on one live board — scoped to Apple One.

@@ -192,9 +192,9 @@ export default function CommandCenterPortal() {

Live alarm feed

- +

streaming

diff --git a/components/dashboard/iotapplication/deviceFleet.tsx b/components/dashboard/iotapplication/deviceFleet.tsx index f23815d..09aba69 100644 --- a/components/dashboard/iotapplication/deviceFleet.tsx +++ b/components/dashboard/iotapplication/deviceFleet.tsx @@ -1,17 +1,17 @@ -import { useState } from 'react'; + import { Grid2X2, AlertTriangle, Sun, Disc, Smartphone, - FileText + } 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 { contractheaders, contractrows, devicefleetheaders, devicefleetrows } from '@/constants/tabledata'; +import { devicefleetheaders, devicefleetrows } from '@/constants/tabledata'; export default function DeviceFleetPortal() { return ( @@ -19,12 +19,12 @@ export default function DeviceFleetPortal() { {/* --- HEADER SECTION --- */}
-
+
APPLE ONE — HQ TOWER - - IOT - - DEVICE FLEET + + IOT + + DEVICE FLEET

Gateways, controllers & sensors diff --git a/components/dashboard/iotapplication/energyUtility.tsx b/components/dashboard/iotapplication/energyUtility.tsx index 540b872..eb4dd5a 100644 --- a/components/dashboard/iotapplication/energyUtility.tsx +++ b/components/dashboard/iotapplication/energyUtility.tsx @@ -13,17 +13,17 @@ export default function EnergyUtilityPortal() { {/* --- HEADER SECTION --- */}
-
+
APPLE ONE — HQ TOWER - - IOT - - ENERGY & UTILITIES + + IOT + + ENERGY & UTILITIES

Energy & utilities telemetry

-

+

Live smart-meter streams for power, water and gas — the same spine that feeds the Energy module and ESG reporting.

diff --git a/components/dashboard/iotapplication/hvacPlant.tsx b/components/dashboard/iotapplication/hvacPlant.tsx index 8b87057..1976cbe 100644 --- a/components/dashboard/iotapplication/hvacPlant.tsx +++ b/components/dashboard/iotapplication/hvacPlant.tsx @@ -4,22 +4,9 @@ import Button from "@/components/common/button"; import { Card } from '@/components/common/cardWrapper'; import BarChart from "@/components/charts/barchart"; // Replace path with your actual BarChart component import path +import { plantLoadData } from '@/constants/constant'; -const plantLoadData = [ - { month: '08', height: 'h-[35%]' }, - { month: '09', height: 'h-[38%]' }, - { month: '10', height: 'h-[32%]' }, - { month: '11', height: 'h-[40%]' }, - { month: '12', height: 'h-[52%]' }, - { month: '13', height: 'h-[68%]' }, - { month: '14', height: 'h-[78%]' }, - { month: '15', height: 'h-[78%]' }, - { month: '16', height: 'h-[78%]' }, - { month: '17', height: 'h-[78%]' }, - { month: '18', height: 'h-[78%]' }, - { month: '19', height: 'h-[78%]' } -]; - + export default function HVACPlantPortal() { return (
@@ -27,17 +14,17 @@ export default function HVACPlantPortal() { {/* --- HEADER SECTION --- */}
-
+
APPLE ONE — HQ TOWER - - IOT - - HVAC PLANT + + IOT + + HVAC PLANT

Chiller plant & air side

-

+

Live chiller, AHU and plant telemetry with start/stop control — commands are audit-logged.

@@ -221,9 +208,9 @@ export default function HVACPlantPortal() {

diff --git a/components/dashboard/operations/energy.tsx b/components/dashboard/operations/energy.tsx index ea9bfc2..91435e5 100644 --- a/components/dashboard/operations/energy.tsx +++ b/components/dashboard/operations/energy.tsx @@ -42,17 +42,35 @@ export default function EnergyPortal() { - - {/* --- TABLES GRID (SIDE-BY-SIDE) --- */} -
+
- {/* LEFT TABLE: METER MASTER */} -
— / — 0 - +
- {/* Right table */} -
- + {/* LEFT TABLE: STOCK MASTER */} +
+
+

Meter Master

+ +
+ {/* Corrected column layout and removed horizontal scrollbar to align with the right UI. */} +
+ + + {/* RIGHT TABLE: CONSUMPTION LEDGER */} +
+
+

Latest Readings

+ +
+ +
+ + + ); -} \ No newline at end of file +} + + \ No newline at end of file diff --git a/components/dashboard/operations/inventory.tsx b/components/dashboard/operations/inventory.tsx index 31d822a..4937d72 100644 --- a/components/dashboard/operations/inventory.tsx +++ b/components/dashboard/operations/inventory.tsx @@ -9,7 +9,8 @@ import { import Button from "@/components/common/button"; import StatCard from "@/components/common/dashStatCard"; import InfoBanner from "@/components/common/infoBanner"; -import { consumptionLedger, stockItems } from "@/constants/constant"; +import Table from "@/components/common/dataTable"; +import { consumptionHeaders, consumptionRows, inventoryHeaders, inventoryRows, } from "@/constants/tabledata"; @@ -104,87 +105,19 @@ export default function InventoryPortal() {
{/* LEFT TABLE: STOCK MASTER */} -
-
+
+

Stock master

7 items
{/* Corrected column layout and removed horizontal scrollbar to align with the right UI. */} -
-
- - - - - - - - - - - - {stockItems.map((row, index) => { - const isOverdue = row.status === "OVERDUE"; - return ( - - - - - - - - - ); - })} - -
ItemGroupStoreMinPresentStatus
- {row.isHighlighted && ( -
- )} - {row.item} -
- {row.group} - - {row.store} - - {row.min} - - - {row.presentValue}{" "} - - - {row.unit} - - - {row.status === "COMPLETED" ? ( - - - COMPLETED - - ) : ( - - - OVERDUE - - )} -
-
+ {/* RIGHT TABLE: CONSUMPTION LEDGER */} -
+

Consumption ledger

@@ -192,54 +125,7 @@ export default function InventoryPortal() {
-
-
- - - - - - - - - - - - {consumptionLedger.map((row, index) => ( - - - - - - - - - ))} - -
TxnItemTypeQtyJob CardDate
- {row.txn} - - {row.item} - - {row.type === "Consume" ? ( - - - Consume - - ) : ( - - - Receipt - - )} - - {row.qty} - - {row.jobCard} - - {row.date} -
-
+ diff --git a/components/dashboard/operations/vendorService.tsx b/components/dashboard/operations/vendorService.tsx index ba7e050..24606d6 100644 --- a/components/dashboard/operations/vendorService.tsx +++ b/components/dashboard/operations/vendorService.tsx @@ -1,16 +1,18 @@ -import { useState } from 'react'; + import { Star, ShieldCheck, Activity, Clock, BarChart2, - Plus + Plus, + } from "lucide-react"; import Button from "@/components/common/button"; import StatCard from "@/components/common/dashStatCard"; import InfoBanner from "@/components/common/infoBanner"; -import { fieldCrewData, vendorData } from '@/constants/constant'; +import Table from "@/components/common/dataTable"; +import { teamStatusRows, teamStatusHeaders, vendorPerformanceHeaders, vendorPerformanceRows } from "@/constants/tabledata"; export default function VendorServicePortal() { @@ -99,111 +101,23 @@ export default function VendorServicePortal() {
{/* LEFT TABLE: VENDOR SCORECARD */} -
+

Vendor scorecard

- - SLA • rating • jobs - +
-
-
- - - - - - - - - - - - {vendorData.map((row, index) => ( - - - - - - - - - ))} - -
VendorScopeRatingSLAResponseOpen
-
{row.name}
-
{row.id}
-
- {row.scope} - -
- {row.rating} - -
-
- {row.sla} - - {row.response} - - {row.openJobs} -
- + {/* RIGHT TABLE: FIELD CREW • LIVE */} -
+

Field crew • live

- - 4 on site - +
-
- {fieldCrewData.map((crew, index) => { - return ( -
-
-
- {crew.initials} -
-
-
{crew.name}
-
{crew.role}
-
-
- -
- {crew.statusType === "onsite" && ( - - - {crew.status} - - )} - {crew.statusType === "enroute" && ( - - - {crew.status} - - )} - {crew.statusType === "offsite" && ( - - - {crew.status} - - )} -
- {crew.time} -
-
-
- ); - })} -
+
diff --git a/components/dashboard/operations/workpermit.tsx b/components/dashboard/operations/workpermit.tsx index e05766e..f3deea3 100644 --- a/components/dashboard/operations/workpermit.tsx +++ b/components/dashboard/operations/workpermit.tsx @@ -5,6 +5,8 @@ import { permitsData, workPermitFilters } from '@/constants/constant'; import FilterTabs from '@/components/common/roundedFilters'; import StatCard from '@/components/common/dashStatCard'; import InfoBanner from '@/components/common/infoBanner'; +import Table from '@/components/common/dataTable'; +import { workPermitHeaders, workPermitRows } from '@/constants/tabledata'; export default function WorkPermitPortal() { @@ -13,61 +15,7 @@ export default function WorkPermitPortal() { // Permit Data matching the UI - const renderStatusBadge = (status: string) => { - switch (status) { - case "ACTIVE": - return ( - - - ACTIVE - - ); - case "SUBMITTED": - return ( - - - SUBMITTED - - ); - case "APPROVED": - return ( - - - APPROVED - - ); - case "EXPIRED": - return ( - - - EXPIRED - - ); - case "CLOSED": - return ( - - - CLOSED - - ); - case "REJECTED": - return ( - - - REJECTED - - ); - case "DRAFT": - return ( - - - DRAFT - - ); - default: - return null; - } - }; + return (
@@ -103,10 +51,7 @@ export default function WorkPermitPortal() {
- {/* --- NAVIGATION TABS & TOP ACTION BUTTONS --- */} -
- {/* Navigation tabs component if needed */} -
+ {/* --- STAT CARDS --- */}
@@ -166,94 +111,7 @@ export default function WorkPermitPortal() { {/* --- PERMIT TABLE SECTION --- */}
-
- - - - - - - - - - - - - - {permitsData.map((row, index) => ( - - {/* Permit ID */} - - - {/* Working Type */} - - - {/* Location */} - - - {/* Contractor */} - - - {/* Validity */} - - - {/* Crew */} - - - {/* Status Badge */} - - - {/* Actions */} - - - ))} - -
PermitWorking TypeLocationContractorValidityCrewStatus
- {row.isHighlighted && ( -
- )} - {row.permit} -
- {row.workingType} - - {row.location} - - {row.contractor} - -
{row.validityDate}
-
{row.validityTime}
-
- {row.crew} - - {renderStatusBadge(row.status)} - -
- {row.hasViewIconOnly ? ( -
- - -
- ) : ( -
- - -
- )} -
-
+
diff --git a/components/dashboard/overview/dashboard.tsx b/components/dashboard/overview/dashboard.tsx index 4fd021e..d85eb50 100644 --- a/components/dashboard/overview/dashboard.tsx +++ b/components/dashboard/overview/dashboard.tsx @@ -3,12 +3,13 @@ import { Check } from 'lucide-react'; import BarChart from "@/components/charts/barchart"; import StatCard from "@/components/common/dashStatCard"; import ActivityFeed from "@/components/dashboard/overview/activityFeed"; -import {activities, chartData, schedulePerformanceHeaders, schedulePerformanceRows} from "@/constants/constant" +import {activities, chartData} from "@/constants/constant" import { Card } from '@/components/common/cardWrapper'; import {CardHeader} from '@/components/common/cardHeader'; import {ProgressBarRow }from '@/components/charts/progressBarRow'; import {StatusProgressRow} from '@/components/charts/statusProgressRow'; import Table from '@/components/common/dataTable'; +import { schedulePerformanceHeaders, schedulePerformanceRows } from '@/constants/tabledata'; export default function Dashboard() { diff --git a/components/dashboard/workplace/meetingRoom.tsx b/components/dashboard/workplace/meetingRoom.tsx index 68679a3..ebbe9ca 100644 --- a/components/dashboard/workplace/meetingRoom.tsx +++ b/components/dashboard/workplace/meetingRoom.tsx @@ -22,12 +22,12 @@ export default function MeetingRoomPortal() { {/* --- HEADER SECTION --- */}
-
+
Apple One — HQ Tower - - WORKPLACE - - MEETING ROOMS + + WORKPLACE + + MEETING ROOMS

Meeting room booking @@ -136,15 +136,15 @@ export default function MeetingRoomPortal() {
{room.subtitle}
- - + - + +
diff --git a/components/dashboard/workplace/visitorManagement.tsx b/components/dashboard/workplace/visitorManagement.tsx index ecb305f..c3fd76d 100644 --- a/components/dashboard/workplace/visitorManagement.tsx +++ b/components/dashboard/workplace/visitorManagement.tsx @@ -23,12 +23,12 @@ const [activeFilter, setActiveFilter] = useState('All'); {/* --- HEADER SECTION --- */}
-
+
Apple One — HQ Tower - - Workplace - - Visitors + + Workplace + + Visitors

Visitor management diff --git a/components/dashboard/workplace/workspace.tsx b/components/dashboard/workplace/workspace.tsx index e4fdf39..8657800 100644 --- a/components/dashboard/workplace/workspace.tsx +++ b/components/dashboard/workplace/workspace.tsx @@ -22,8 +22,7 @@ import { CardHeader } from '@/components/common/cardHeader'; export default function WorkSpacePortal() { const [activeTab, setActiveTab] = useState("Desk Booking"); - // Grid state matching the UI: 4 rows x 12 columns (48 seats) - // Types: 'occupied' (red/purple outline), 'free' (teal), 'reserved' (amber) + const deskGrid = Array.from({ length: 48 }).map((_, index) => { if (index === 42) return "reserved"; // 1 Reserved desk if (index >= 36) return "free"; // Free desks on the bottom row @@ -35,12 +34,12 @@ export default function WorkSpacePortal() { {/* --- HEADER SECTION WITH BUTTONS --- */}
-
+
Apple One — HQ Tower - - WORKPLACE - - WORKSPACE + + WORKPLACE + + WORKSPACE

@@ -192,12 +191,12 @@ export default function WorkSpacePortal() { {/* Value & Actions */}
{zone.current}/{zone.max} - - + +

); diff --git a/components/layouts/sidebar.tsx b/components/layouts/sidebar.tsx index 59c7d0b..34605f2 100644 --- a/components/layouts/sidebar.tsx +++ b/components/layouts/sidebar.tsx @@ -1,6 +1,6 @@ "use client"; -import { OPERATIONS_SIDEBAR_ITEMS, ADMIN_SIDEBAR_ITEMS } from "@/constants/constant"; +import { OPERATIONS_SIDEBAR_ITEMS, ADMIN_SIDEBAR_ITEMS } from "@/constants/sidebarConstant"; import SidebarItem from "./sideBarItem"; import { ShieldCheck, Activity, ChevronDown, ChevronsLeft } from "lucide-react"; import { useSession, signOut } from "next-auth/react"; diff --git a/constants/constant.ts b/constants/constant.ts index e5cee78..189ae40 100644 --- a/constants/constant.ts +++ b/constants/constant.ts @@ -1,178 +1,6 @@ -import { - LayoutGrid, - Smile, - Building2, - User, - Target, - CheckSquare, - FileText, - Box, - Zap, - ClipboardList, - Star, - Monitor, - UserCheck, - Calendar, - Layers, - Coins, - Receipt, - ShieldCheck, - Flame, - Recycle, - GraduationCap, - Brain, - Activity, - Bot, - Gauge, - Snowflake, - Leaf, - MapPin, - BarChart3, - Sun, - Shield, - Settings, - Wallet, - Radar, - Cog, - Smartphone, - Users, - Database, - Globe, - LayoutDashboard, -} from "lucide-react"; - -//Side bar Drop Down menu - -export const OPERATIONS_SIDEBAR_ITEMS = [ - { - title: "Overview", - icon: LayoutGrid, - children: [ - { title: "Dashboard", href: "/dashboard/overview/dashboard", icon: LayoutGrid }, - { title: "Engagement", href: "/dashboard/overview/engagement", icon: Smile }, - { title: "Building Owner", href: "/dashboard/overview/buildingOwner", icon: Building2 }, - { title: "Property Manager", href: "/dashboard/overview/propertyManager", icon: User }, - { title: "Service Engineer", href: "/dashboard/overview/serviceEngineer", icon: Target }, - ], - }, - { - title: "Operations", - icon: Settings, - children: [ - { title: "Help Desk", href: "/dashboard/operations/helpDesk", icon: CheckSquare, badge: 6, badgeColor: "bg-amber-500 text-black" }, - { title: "Equipment", href: "/dashboard/operations/equipment", icon: Target }, - { title: "Requests", href: "/dashboard/operations/request", icon: FileText, badge: 15, badgeColor: "bg-amber-400 text-black" }, - { title: "Inventory", href: "/dashboard/operations/inventory", icon: Box }, - { title: "Energy", href: "/dashboard/operations/energy", icon: Zap }, - { title: "Work Permit", href: "/dashboard/operations/workPermit", icon: ClipboardList, badge: 3, badgeColor: "bg-amber-500 text-black" }, - { title: "Vendor & Field Service", href: "/dashboard/operations/vendorFieldService", icon: Star, badge: 12, badgeColor: "bg-sky-400 text-black" }, - ], - }, - { - title: "Workplace", - icon: Monitor, - children: [ - { title: "Visitor Management", href: "/dashboard/workplace/visitorManagement", icon: UserCheck }, - { title: "Meeting Rooms", href: "/dashboard/workplace/meetingRoom", icon: Calendar }, - { title: "Workspace", href: "/dashboard/workplace/workspace", icon: Layers }, - ], - }, - { - title: "Finance", - icon: Wallet, - children: [ - { title: "O&M Budget", href: "/dashboard/finance/budget", icon: Coins }, - { title: "Costing & Invoicing", href: "/dashboard/finance/costinvoice", icon: Receipt }, - ], - }, - { - title: "Compliance & Safety", - icon: ShieldCheck, - children: [ - { title: "Statutory Compliance", href: "/dashboard/compliance-safety/statutoryCompliance", icon: ShieldCheck }, - { title: "Contracts & SLA", href: "/dashboard/compliance-safety/contracts", icon: FileText }, - { title: "Fire & Safety", href: "/dashboard/compliance-safety/fireAndSafety", icon: Flame }, - { title: "Waste & ESG", href: "/dashboard/compliance-safety/wasteAndEsg", icon: Recycle }, - { title: "Training", href: "/dashboard/compliance-safety/training", icon: GraduationCap }, - { title: "Audit & Survey", href: "/dashboard/compliance-safety/auditAndSurvey", icon: GraduationCap }, - ], - }, - { - title: "Intelligence", - icon: Brain, - children: [{ title: "AI & Predictive", href: "/dashboard/intelligence/aiPredictive", icon: Brain }, - { title: "Asset Health", href: "/dashboard/intelligence/assetHealth", icon: ShieldCheck }, - { title: "Energy Benchmarking", href: "/dashboard/intelligence/energyBenchmarking", icon: Activity }, - { title: "AI Helpdesk", href: "/dashboard/intelligence/aiHelpdesk", icon: Bot }, - { title: "Connected Ops", href: "/dashboard/intelligence/connectedOps", icon: Gauge }, - { title: "Connected Assets", href: "/dashboard/intelligence/connectedAsset", icon: Snowflake }, - { title: "Sustainability", href: "/dashboard/intelligence/sustainability", icon: Leaf }, - { title: "GPS Tracking", href: "/dashboard/intelligence/gpstracking", icon: MapPin },], - }, - { - title: "IoT Application", - icon: Radar, - children: [{ title: "Command Center", href: "/dashboard/iot-app/commandCenter", icon: Gauge }, - { title: "HVAC Plant", href: "/dashboard/iot-app/hvacPlant", icon: Snowflake }, - { title: "Energy & Utilities", href: "/dashboard/iot-app/energyUtility", icon: Zap }, - { title: "Device Fleet", href: "/dashboard/iot-app/deviceFleet", icon: LayoutGrid }, - { title: "Alarms & Rules", href: "/dashboard/iot-app/alarmsRules", icon: Shield, badge: 7, badgeColor: "bg-rose-500 text-white" },], - }, - { - title: "Insight", - icon: BarChart3, - children: [{ title: "Reports & MMR", href: "/dashboard/insight/report", icon: BarChart3 },], - }, - { - title: "Configure", - icon: Cog, - children: [{ title: "Master Data", href: "/dashboard/configure/masterdata", icon: Layers }, - { title: "Roles & Access", href: "/dashboard/configure/rolesAndAccess", icon: Shield }, - { title: "Workflow Automation", href: "/dashboard/configure/workflowautomation", icon: Bot }, - { title: "User Location", href: "/dashboard/configure/userLocation", icon: MapPin }, - { title: "Settings", href: "/dashboard/configure/settings", icon: Sun },], - }, -]; -export const ADMIN_SIDEBAR_ITEMS = [ - { - title: "Platform", - icon: Building2, - children: [ - { title: "Overview", href: "/dashboard/admin/overview", icon: LayoutGrid }, - { title: "Tenants", href: "/dashboard/admin/tenants", icon: Building2 }, - { title: "Users", href: "/dashboard/admin/users", icon: Users }, - { title: "Sites", href: "/dashboard/admin/site", icon: MapPin }, - { title: "Security", href: "/dashboard/admin/security", icon: Shield }, - ], - }, - { - title: "Configuration", - icon: LayoutGrid, - children: [ - { title: "Modules", href: "/dashboard/admin/modules", icon: LayoutGrid }, - { title: "Language", href: "/dashboard/admin/language", icon: Globe }, - { title: "Dynamic Dashboard", href: "/dashboard/admin/dynamicDashboard", icon: LayoutDashboard }, - { title: "Mobile Flows", href: "/dashboard/admin/mobileFlow", icon: Smartphone }, - ], - }, -]; - -export const schedulePerformanceHeaders = [ - "Schedule", - "Total", - "Done", - "On Time", - "Delayed", -]; -export const schedulePerformanceRows = [ - ["PPM", 24, 19, 17, 2], - ["AMC", 8, 6, 6, 0], -]; - -//Overview dashboard data export const chartData = [ { month: 'J', height: 'h-24' }, @@ -562,325 +390,117 @@ export const scheduleItems = [ { frequency: "On call", stream: "Hazardous", vendor: "Ramky Enviro" }, ]; - export const stockItems = [ - { - item: "Cooling tower fan belt", - group: "HVAC", - store: "Block Store", - min: 5, - presentValue: 8, - unit: "Gallon", - status: "COMPLETED", - isHighlighted: false, - }, - { - item: "Air filter 24×24", - group: "HVAC", - store: "Block Store", - min: 5, - presentValue: 2, - unit: "Nos", - status: "OVERDUE", - isHighlighted: true, - }, - { - item: "MCB 32A", - group: "Electrical", - store: "Block Store", - min: 5, - presentValue: 8, - unit: "Nos", - status: "COMPLETED", - isHighlighted: false, - }, - { - item: "Contactor 40A", - group: "Electrical", - store: "Block Store", - min: 2, - presentValue: 2, - unit: "Nos", - status: "OVERDUE", - isHighlighted: false, - }, - { - item: "PVC pipe 1\"", - group: "Plumbing", - store: "Main Store", - min: 3, - presentValue: 0, - unit: "Mtr", - status: "OVERDUE", - isHighlighted: false, - }, - { - item: "Submersible pump seal", - group: "Plumbing", - store: "Main Store", - min: 3, - presentValue: 2, - unit: "Nos", - status: "OVERDUE", - isHighlighted: false, - }, - { - item: "Refrigerant R410a", - group: "HVAC", - store: "Block Store", - min: 5, - presentValue: 0, - unit: "Kg", - status: "OVERDUE", - isHighlighted: false, - }, - ]; - export const consumptionLedger = [ - { - txn: "TXN-5200", - item: "Cooling tower fan belt", - type: "Consume", - qty: "2 Gallon", - jobCard: "026/1009", - date: "Jun 20, 2026", - }, - { - txn: "TXN-5201", - item: "MCB 32A", - type: "Consume", - qty: "1 Nos", - jobCard: "026/1016", - date: "Jun 21, 2026", - }, - { - txn: "TXN-5202", - item: "Air filter 24×24", - type: "Receipt", - qty: "10 Nos", - jobCard: "—", - date: "Jun 22, 2026", - }, - { - txn: "TXN-5203", - item: "Submersible pump seal", - type: "Consume", - qty: "1 Nos", - jobCard: "026/1023", - date: "Jun 23, 2026", - }, - { - txn: "TXN-5204", - item: "Air filter 24×24", - type: "Consume", - qty: "3 Nos", - jobCard: "026/1030", - date: "Jun 24, 2026", - }, - { - txn: "TXN-5205", - item: "PVC pipe 1\"", - type: "Receipt", - qty: "20 Mtr", - jobCard: "—", - date: "Jun 25, 2026", - }, - { - txn: "TXN-5406", - item: "Cooling tower fan belt", - type: "Consume", - qty: "2 Gallon", - jobCard: "026/1009", - date: "Jun 7, 2026", - }, - { - txn: "TXN-5407", - item: "MCB 32A", - type: "Consume", - qty: "1 Nos", - jobCard: "026/1016", - date: "Jun 7, 2026", - }, - { - txn: "TXN-5200", - item: "Cooling tower fan belt", - type: "Consume", - qty: "2 Gallon", - jobCard: "026/1009", - date: "Jun 20, 2026", - }, - { - txn: "TXN-5201", - item: "MCB 32A", - type: "Consume", - qty: "1 Nos", - jobCard: "026/1016", - date: "Jun 21, 2026", - }, - { - txn: "TXN-5202", - item: "Air filter 24×24", - type: "Receipt", - qty: "10 Nos", - jobCard: "—", - date: "Jun 22, 2026", - }, - { - txn: "TXN-5203", - item: "Submersible pump seal", - type: "Consume", - qty: "1 Nos", - jobCard: "026/1023", - date: "Jun 23, 2026", - }, - { - txn: "TXN-5204", - item: "Air filter 24×24", - type: "Consume", - qty: "3 Nos", - jobCard: "026/1030", - date: "Jun 24, 2026", - }, - { - txn: "TXN-5205", - item: "PVC pipe 1\"", - type: "Receipt", - qty: "20 Mtr", - jobCard: "—", - date: "Jun 25, 2026", - }, - { - txn: "TXN-5406", - item: "Cooling tower fan belt", - type: "Consume", - qty: "2 Gallon", - jobCard: "026/1009", - date: "Jun 7, 2026", - }, - { - txn: "TXN-5407", - item: "MCB 32A", - type: "Consume", - qty: "1 Nos", - jobCard: "026/1016", - date: "Jun 7, 2026", - }, - ]; +export const plantLoadData = [ + { month: '08', height: 'h-[35%]' }, + { month: '09', height: 'h-[38%]' }, + { month: '10', height: 'h-[32%]' }, + { month: '11', height: 'h-[40%]' }, + { month: '12', height: 'h-[52%]' }, + { month: '13', height: 'h-[68%]' }, + { month: '14', height: 'h-[78%]' }, + { month: '15', height: 'h-[78%]' }, + { month: '16', height: 'h-[78%]' }, + { month: '17', height: 'h-[78%]' }, + { month: '18', height: 'h-[78%]' }, + { month: '19', height: 'h-[78%]' } +]; +// Initial roles state +export const rolesList = [ + { id: "admin", label: "Admin", badge: "all" }, + { id: "helpdesk", label: "Helpdesk", badge: "scoped" }, + { id: "mne_supervisor", label: "M&E Supervisor", badge: "scoped" }, + { id: "technician", label: "Technician", badge: "scoped" }, + { id: "tenant", label: "Tenant", badge: "scoped" }, +]; - export const vendorData = [ - { - name: "Voltas Ltd", - id: "CTR-700", - scope: "HVAC AMC & breakdown", - rating: "4.6", - sla: "95%", - slaColor: "text-emerald-400", - response: "4.0h", - openJobs: "2", - }, - { - name: "Blue Star", - id: "CTR-701", - scope: "Chiller & VRV service", - rating: "4.1", - sla: "88%", - slaColor: "text-amber-400", - response: "1.2h", - openJobs: "2", - }, - { - name: "Sterling FM", - id: "CTR-702", - scope: "Integrated FM / soft services", - rating: "3.4", - sla: "94%", - slaColor: "text-emerald-400", - response: "2.4h", - openJobs: "4", - }, - { - name: "OTIS Elevators", - id: "CTR-704", - scope: "Elevator AMC", - rating: "4.8", - sla: "95%", - slaColor: "text-emerald-400", - response: "2.8h", - openJobs: "—", - }, - { - name: "Sodexo", - id: "CTR-705", - scope: "Soft services & cafeteria", - rating: "4.3", - sla: "90%", - slaColor: "text-amber-400", - response: "2.8h", - openJobs: "1", - }, - { - name: "In-house team", - id: "—", - scope: "Day-to-day maintenance", - rating: "4.0", - sla: "93%", - slaColor: "text-amber-400", - response: "3.2h", - openJobs: "3", - }, - ]; +// Initial permissions table data +export const initialPermissions = [ + { + id: 1, + module: "Help Desk", + menu: "Daily Location Checklist", + permissions: { all: false, view: true, add: true, edit: true, delete: false, cancel: true, print: true }, + }, + { + id: 2, + module: "Equipment", + menu: "Site-Wise Equipment", + permissions: { all: false, view: true, add: true, edit: true, delete: false, cancel: true, print: true }, + }, + { + id: 3, + module: "Equipment", + menu: "AMC Schedule", + permissions: { all: false, view: true, add: true, edit: true, delete: false, cancel: true, print: true }, + }, + { + id: 4, + module: "Request", + menu: "TFM Request", + permissions: { all: false, view: true, add: true, edit: true, delete: false, cancel: true, print: true }, + }, + { + id: 5, + module: "Energy", + menu: "Meter Reading", + permissions: { all: false, view: true, add: true, edit: true, delete: false, cancel: true, print: true }, + }, + { + id: 6, + module: "Master", + menu: "Request Location", + permissions: { all: false, view: true, add: true, edit: true, delete: false, cancel: true, print: true }, + }, + { + id: 7, + module: "Security", + menu: "Users", + permissions: { all: false, view: true, add: true, edit: true, delete: false, cancel: true, print: true }, + }, +]; - export const fieldCrewData = [ - { - initials: "RK", - name: "Ravi Kumar", - role: "M&E Technician • Chiller plant", - status: "ON-SITE", - statusType: "onsite", - time: "6.4h today", - }, - { - initials: "SI", - name: "Sana Iqbal", - role: "HVAC Engineer • AHU room L7", - status: "ON-SITE", - statusType: "onsite", - time: "6.1h today", - }, - { - initials: "MD", - name: "Mohan D.", - role: "Electrician • En route", - status: "EN-ROUTE", - statusType: "enroute", - time: "—", - }, - { - initials: "LN", - name: "Lakshmi N.", - role: "Housekeeping Lead • Lobby + L2", - status: "ON-SITE", - statusType: "onsite", - time: "6.7h today", - }, - { - initials: "AP", - name: "Arjun P.", - role: "Plumber • Off-site", - status: "OFF-SITE", - statusType: "offsite", - time: "—", - }, - { - initials: "FR", - name: "Fatima R.", - role: "BMS Operator • Control room", - status: "ON-SITE", - statusType: "onsite", - time: "7.6h today", - }, - ]; + +export const blocks = ["Block 1", "Block 2", "Tower A"]; + export const floors = ["Ground", "Floor 1", "Floor 2"]; + export const zones = ["Zone N", "Zone Z1", "Zone Z2"]; +// Mock user location data matching the screenshot + export const userData = [ + { + name: "Dhananjay T.", + email: "dhananjay@kafm.io", + mobile: "7489477369", + latitude: "18.5450", + longitude: "73.7935", + site: "Apple One", + // Relative coordinates for the map visual dots (X%, Y%) + x: "19%", + y: "38%", + }, + { + name: "ME Local", + email: "me.local@kafm.io", + mobile: "9876543210", + latitude: "18.5469", + longitude: "73.7945", + site: "Apple One", + x: "44%", + y: "43%", + }, + { + name: "TECH Local", + email: "tech.local@kafm.io", + mobile: "9123456780", + latitude: "18.5441", + longitude: "73.7951", + site: "Apple One", + x: "69%", + y: "48%", + }, +]; + export const permitsData = [ { permit: "PTW-2663", diff --git a/constants/sidebarConstant.ts b/constants/sidebarConstant.ts new file mode 100644 index 0000000..9c7ff97 --- /dev/null +++ b/constants/sidebarConstant.ts @@ -0,0 +1,160 @@ + + +import { + LayoutGrid, + Smile, + Building2, + User, + Target, + CheckSquare, + FileText, + Box, + Zap, + ClipboardList, + Star, + Monitor, + UserCheck, + Calendar, + Layers, + Coins, + Receipt, + ShieldCheck, + Flame, + Recycle, + GraduationCap, + Brain, + Activity, + Bot, + Gauge, + Snowflake, + Leaf, + MapPin, + BarChart3, + Sun, + Shield, + Settings, + Wallet, + Radar, + Cog, + Smartphone, + Users, + Globe, + LayoutDashboard, +} from "lucide-react"; + + + + +export const OPERATIONS_SIDEBAR_ITEMS = [ + { + title: "Overview", + icon: LayoutGrid, + children: [ + { title: "Dashboard", href: "/dashboard/overview/dashboard", icon: LayoutGrid }, + { title: "Engagement", href: "/dashboard/overview/engagement", icon: Smile }, + { title: "Building Owner", href: "/dashboard/overview/buildingOwner", icon: Building2 }, + { title: "Property Manager", href: "/dashboard/overview/propertyManager", icon: User }, + { title: "Service Engineer", href: "/dashboard/overview/serviceEngineer", icon: Target }, + ], + }, + { + title: "Operations", + icon: Settings, + children: [ + { title: "Help Desk", href: "/dashboard/operations/helpDesk", icon: CheckSquare, badge: 6, badgeColor: "bg-amber-500 text-black" }, + { title: "Equipment", href: "/dashboard/operations/equipment", icon: Target }, + { title: "Requests", href: "/dashboard/operations/request", icon: FileText, badge: 15, badgeColor: "bg-amber-400 text-black" }, + { title: "Inventory", href: "/dashboard/operations/inventory", icon: Box }, + { title: "Energy", href: "/dashboard/operations/energy", icon: Zap }, + { title: "Work Permit", href: "/dashboard/operations/workPermit", icon: ClipboardList, badge: 3, badgeColor: "bg-amber-500 text-black" }, + { title: "Vendor & Field Service", href: "/dashboard/operations/vendorFieldService", icon: Star, badge: 12, badgeColor: "bg-sky-400 text-black" }, + ], + }, + { + title: "Workplace", + icon: Monitor, + children: [ + { title: "Visitor Management", href: "/dashboard/workplace/visitorManagement", icon: UserCheck }, + { title: "Meeting Rooms", href: "/dashboard/workplace/meetingRoom", icon: Calendar }, + { title: "Workspace", href: "/dashboard/workplace/workspace", icon: Layers }, + ], + }, + { + title: "Finance", + icon: Wallet, + children: [ + { title: "O&M Budget", href: "/dashboard/finance/budget", icon: Coins }, + { title: "Costing & Invoicing", href: "/dashboard/finance/costinvoice", icon: Receipt }, + ], + }, + { + title: "Compliance & Safety", + icon: ShieldCheck, + children: [ + { title: "Statutory Compliance", href: "/dashboard/compliance-safety/statutoryCompliance", icon: ShieldCheck }, + { title: "Contracts & SLA", href: "/dashboard/compliance-safety/contracts", icon: FileText }, + { title: "Fire & Safety", href: "/dashboard/compliance-safety/fireAndSafety", icon: Flame }, + { title: "Waste & ESG", href: "/dashboard/compliance-safety/wasteAndEsg", icon: Recycle }, + { title: "Training", href: "/dashboard/compliance-safety/training", icon: GraduationCap }, + { title: "Audit & Survey", href: "/dashboard/compliance-safety/auditAndSurvey", icon: GraduationCap }, + ], + }, + { + title: "Intelligence", + icon: Brain, + children: [{ title: "AI & Predictive", href: "/dashboard/intelligence/aiPredictive", icon: Brain }, + { title: "Asset Health", href: "/dashboard/intelligence/assetHealth", icon: ShieldCheck }, + { title: "Energy Benchmarking", href: "/dashboard/intelligence/energyBenchmarking", icon: Activity }, + { title: "AI Helpdesk", href: "/dashboard/intelligence/aiHelpdesk", icon: Bot }, + { title: "Connected Ops", href: "/dashboard/intelligence/connectedOps", icon: Gauge }, + { title: "Connected Assets", href: "/dashboard/intelligence/connectedAsset", icon: Snowflake }, + { title: "Sustainability", href: "/dashboard/intelligence/sustainability", icon: Leaf }, + { title: "GPS Tracking", href: "/dashboard/intelligence/gpstracking", icon: MapPin },], + }, + { + title: "IoT Application", + icon: Radar, + children: [{ title: "Command Center", href: "/dashboard/iot-app/commandCenter", icon: Gauge }, + { title: "HVAC Plant", href: "/dashboard/iot-app/hvacPlant", icon: Snowflake }, + { title: "Energy & Utilities", href: "/dashboard/iot-app/energyUtility", icon: Zap }, + { title: "Device Fleet", href: "/dashboard/iot-app/deviceFleet", icon: LayoutGrid }, + { title: "Alarms & Rules", href: "/dashboard/iot-app/alarmRule", icon: Shield, badge: 7, badgeColor: "bg-rose-500 text-white" },], + }, + { + title: "Insight", + icon: BarChart3, + children: [{ title: "Reports & MMR", href: "/dashboard/insight/report", icon: BarChart3 },], + }, + { + title: "Configure", + icon: Cog, + children: [{ title: "Master Data", href: "/dashboard/configure/masterdata", icon: Layers }, + { title: "Roles & Access", href: "/dashboard/configure/rolesAndAccess", icon: Shield }, + { title: "Workflow Automation", href: "/dashboard/configure/workflowautomation", icon: Bot }, + { title: "User Location", href: "/dashboard/configure/userLocation", icon: MapPin }, + { title: "Settings", href: "/dashboard/configure/settings", icon: Sun },], + }, +]; +export const ADMIN_SIDEBAR_ITEMS = [ + { + title: "Platform", + icon: Building2, + children: [ + { title: "Overview", href: "/dashboard/admin/overview", icon: LayoutGrid }, + { title: "Tenants", href: "/dashboard/admin/tenants", icon: Building2 }, + { title: "Users", href: "/dashboard/admin/users", icon: Users }, + { title: "Sites", href: "/dashboard/admin/site", icon: MapPin }, + { title: "Security", href: "/dashboard/admin/security", icon: Shield }, + ], + }, + { + title: "Configuration", + icon: LayoutGrid, + children: [ + { title: "Modules", href: "/dashboard/admin/modules", icon: LayoutGrid }, + { title: "Language", href: "/dashboard/admin/language", icon: Globe }, + { title: "Dynamic Dashboard", href: "/dashboard/admin/dynamicDashboard", icon: LayoutDashboard }, + { title: "Mobile Flows", href: "/dashboard/admin/mobileFlow", icon: Smartphone }, + ], + }, +]; diff --git a/constants/tabledata.tsx b/constants/tabledata.tsx index 5115854..50b262b 100644 --- a/constants/tabledata.tsx +++ b/constants/tabledata.tsx @@ -1,7 +1,310 @@ import ActionButtons from "@/components/common/actionButton"; import Button from "@/components/common/button"; import { StatusBadge } from "@/components/common/statusBadge"; +import { FileText, Eye } from "lucide-react"; +//Vendor field Service + +export const vendorPerformanceHeaders = [ + "VENDOR", + "SCOPE", + "RATING", + "SLA", + "RESPONSE", + "OPEN", +]; + +export const vendorPerformanceRows = [ + [ +
+ Voltas Ltd + CTR-700 +
, + + + HVAC AMC & breakdown + , + + + 4.6 + , + + 95%, + + 4.0h, + + 2, + ], + + [ +
+ Blue Star + CTR-701 +
, + + + Chiller & VRV service + , + + + 4.1 + , + + 88%, + + 1.2h, + + 2, + ], + + [ +
+ Sterling FM + CTR-702 +
, + + + Integrated FM / soft services + , + + + 3.4 + , + + 94%, + + 2.4h, + + 4, + ], + + [ +
+ OTIS Elevators + CTR-704 +
, + + + Elevator AMC + , + + + 4.8 + , + + 95%, + + 2.8h, + + , + ], + + [ +
+ Sodexo + CTR-705 +
, + + + Soft services & cafeteria + , + + + 4.3 + , + + 90%, + + 2.8h, + + 1, + ], + + [ +
+ In-house team + +
, + + + Day-to-day maintenance + , + + + 4.0 + , + + 93%, + + 3.2h, + + 3, + ], +]; + +export const teamStatusHeaders = [ + "TEAM MEMBER", + "STATUS", +]; +export const teamStatusRows = [ + [ +
+
+ RK +
+ +
+ + Ravi Kumar + + + M&E Technician · Chiller plant + +
+
, + +
+ + + 6.4h today + +
, + ], + + [ +
+
+ SI +
+ +
+ + Sana Iqbal + + + HVAC Engineer · AHU room L7 + +
+
, + +
+ + + 6.1h today + +
, + ], + + [ +
+
+ MD +
+ +
+ + Mohan D. + + + Electrician · En route + +
+
, + +
+ + +
, + ], + + [ +
+
+ LN +
+ +
+ + Lakshmi N. + + + Housekeeping Lead · Lobby + L2 + +
+
, + +
+ + + 6.7h today + +
, + ], + + [ +
+
+ AP +
+ +
+ + Arjun P. + + + Plumber · Off-site + +
+
, + +
+ + +
, + ], + + [ +
+
+ FR +
+ +
+ + Fatima R. + + + BMS Operator · Control room + +
+
, + +
+ + + 7.6h today + +
, + ], +]; //Device Fleet export const devicefleetheaders = [ @@ -187,8 +490,939 @@ export const devicefleetrows = [
, ], ]; +export const schedulePerformanceHeaders = [ + "Schedule", + "Total", + "Done", + "On Time", + "Delayed", +]; + +export const schedulePerformanceRows = [ + ["PPM", 24, 19, 17, 2], + ["AMC", 8, 6, 6, 0], +]; + +//Inventory page + +export const inventoryHeaders = [ + "Item", + "Group", + "Store", + "Min", + "Present", + "Status", + "Actions", +]; + +export const inventoryRows = [ + [ +
+ + Cooling tower fan belt + +
, + + HVAC, + +
+ Block + Store +
, + + 5, + + + 8 Gallon + , + + , + +
+ + + +
, + ], + + [ + + Air filter 24×24 + , + + HVAC, + +
+ Block + Store +
, + + 5, + + + 4 Nos + , + + , + +
+ + + + +
, + ], + + [ + + MCB 32A + , + + Electrical, + +
+ Block + Store +
, + + 3, + + + 2 Nos + , + + , + +
+ + + +
, + ], + + [ + + Contactor 40A + , + + Electrical, + +
+ Block + Store +
, + + 2, + + + 8 Nos + , + + , + +
+ + + +
, + ], + + [ + + PVC pipe 1" + , + + Plumbing, + +
+ Block + Store +
, + + 3, + + + 8 Mtr + , + + , + +
+ + + +
, + ], + + [ + + Submersible pump seal + , + + Plumbing, + +
+ Block + Store +
, + + 5, + + + 0 Nos + , + + , + +
+ + + +
, + ], + + [ + + Refrigerant R410a + , + + HVAC, + +
+ Main + Store +
, + + 2, + + + 2 Kg + , + + , + +
+ + + +
, + ], +]; +export const consumptionHeaders = [ + "TXN", + "ITEM", + "TYPE", + "QTY", + "JOB CARD", + "DATE", +]; + +export const workPermitHeaders = [ + "PERMIT", + "WORKING TYPE", + "LOCATION", + "CONTRACTOR", + "VALIDITY", + "CREW", + "STATUS", + "", +]; + + + +export const workPermitRows = [ + [ + + PTW-2663 + , + + + Work at Height + , + + + Atrium void + , + + + Blue Star + , + +
+ Jun 26, 2026 + 08:30–17:00 +
, + + 2, + + , + +
+ + +
, + ], + + [ + + PTW-2664 + , + + + Electrical Isolation + , + + + STP wet well + , + + + Sterling FM + , + +
+ Jun 26, 2026 + 09:00–13:00 +
, + + 3, + + , + +
+ + +
, + ], + + [ + + PTW-2665 + , + + + Confined Space + , + + + DG yard + , + + + In-house team + , + +
+ Jun 26, 2026 + 14:00–18:00 +
, + + 4, + + , + +
+ + +
, + ], + + [ + + PTW-2666 + , + + + Hot Work + , + + + Roof terrace + , + + + Voltas Ltd + , + +
+ Jun 25, 2026 + 08:00–12:00 +
, + + 5, + + , + +
+ + + +
, + ], + + [ + + PTW-2667 + , + + + Work at Height + , + + + LT panel room + , + + + Blue Star + , + +
+ Jun 25, 2026 + 10:00–16:00 +
, + + 2, + + , + +
+ + + +
, + ], + + [ + + PTW-2668 + , + + + Electrical Isolation + , + + + Chiller plant + , + + + Sterling FM + , + +
+ Jun 26, 2026 + 11:00–15:00 +
, + + 3, + + , + +
+ + + +
, + ], + + [ + + PTW-2726 + , + + + Work at Height + , + + + Atrium void + , + + + Blue Star + , + +
+ Jun 26, 2026 + 08:30–17:00 +
, + + 2, + + , + +
+ + +
, + ], +]; +export const consumptionRows = [ + [ + + TXN-5200 + , + +
+ Cooling tower fan belt +
, + + , + + + 2 Gallon + , + + + 026/1009 + , + + + Jun 20, 2026 + , + ], + + [ + + TXN-5201 + , + +
+ MCB 32A +
, + + , + + + 1 Nos + , + + + 026/1016 + , + + + Jun 21, 2026 + , + ], + + [ + + TXN-5202 + , + +
+ Air filter 24×24 +
, + + , + + + 10 Nos + , + + + — + , + + + Jun 22, 2026 + , + ], + + [ + + TXN-5203 + , + +
+ Submersible pump seal +
, + + , + + + 1 Nos + , + + + 026/1023 + , + + + Jun 23, 2026 + , + ], + + [ + + TXN-5204 + , + +
+ Air filter 24×24 +
, + + , + + + 3 Nos + , + + + 026/1030 + , + + + Jun 24, 2026 + , + ], + + [ + + TXN-5205 + , + +
+ PVC pipe 1" +
, + + , + + + 20 Mtr + , + + + — + , + + + Jun 25, 2026 + , + ], + + [ + + TXN-5406 + , + +
+ Cooling tower fan belt +
, + + , + + + 2 Gallon + , + + + 026/1009 + , + + + Jun 7, 2026 + , + ], + + [ + + TXN-5407 + , + +
+ MCB 32A +
, + + , + + + 1 Nos + , + + + 026/1016 + , + + + Jun 8, 2026 + , + ], + [ + + TXN-5203 + , + +
+ Submersible pump seal +
, + + , + + + 1 Nos + , + + + 026/1023 + , + + + Jun 23, 2026 + , + ], + + [ + + TXN-5204 + , + +
+ Air filter 24×24 +
, + + , + + + 3 Nos + , + + + 026/1030 + , + + + Jun 24, 2026 + , + ], + + [ + + TXN-5205 + , + +
+ PVC pipe 1" +
, + + , + + + 20 Mtr + , + + + — + , + + + Jun 25, 2026 + , + ], + + [ + + TXN-5406 + , + +
+ Cooling tower fan belt +
, + + , + + + 2 Gallon + , + + + 026/1009 + , + + + Jun 7, 2026 + , + ], + + [ + + TXN-5407 + , + +
+ MCB 32A +
, + + , + + + 1 Nos + , + + + 026/1016 + , + + + Jun 8, 2026 + , + ], +]; //Energy Utility in IOT app export const energyUtilityHeaders = [ @@ -1917,6 +3151,155 @@ export const trainingrows = [ ]; +export const budgetPerformanceHeaders = [ + "CATEGORY", + "TYPE", + "PLANNED", + "ACTUAL", + "VARIANCE", + "UTILIZATION", +]; + +export const budgetPerformanceRows = [ + [ + + PPM & AMC contracts + , + + + OPEX + , + + ₹48.0 L, + + ₹31.2 L, + + +₹16.8 L, + +
+
+
+
+ 65% +
, + ], + + [ + + Reactive repairs + , + + + OPEX + , + + ₹15.0 L, + + ₹16.8 L, + + −₹1.8 L, + +
+
+
+
+ 112% +
, + ], + + [ + + Energy & utilities + , + + + OPEX + , + + ₹62.0 L, + + ₹54.1 L, + + +₹7.9 L, + +
+
+
+
+ 87% +
, + ], + + [ + + Consumables & spares + , + + + OPEX + , + + ₹9.0 L, + + ₹7.4 L, + + +₹1.6 L, + +
+
+
+
+ 82% +
, + ], + + [ + + Equipment upgrades + , + + + CAPEX + , + + ₹35.0 L, + + ₹12.0 L, + + +₹23.0 L, + +
+
+
+
+ 34% +
, + ], + + [ + + Soft services + , + + + OPEX + , + + ₹22.0 L, + + ₹20.5 L, + + +₹1.5 L, + +
+
+
+
+ 93% +
, + ], +]; + //Statutory Compliance Page export const statutoryheaders = [