From 0c9151b3a07b0c0315b5403a49d160d51a580c83 Mon Sep 17 00:00:00 2001 From: Shaily Mishra Date: Mon, 20 Jul 2026 18:06:04 +0530 Subject: [PATCH] Operations dashboard screens are added --- app/dashboard/layout.tsx | 8 +- app/dashboard/operations/equipment/page.tsx | 14 ++ app/dashboard/operations/helpDesk/page.tsx | 14 ++ app/dashboard/operations/inventory/page.tsx | 0 app/dashboard/operations/request/page.tsx | 14 ++ app/dashboard/overview/buildingOwner/page.tsx | 2 +- app/dashboard/overview/dashboard/page.tsx | 2 +- app/dashboard/overview/engagement/page.tsx | 2 +- .../overview/propertyManager/page.tsx | 2 +- .../overview/serviceEngineer/page.tsx | 2 +- app/dashboard/page.tsx | 3 +- app/globals.css | 7 +- components/auth/authlayout.tsx | 8 +- components/auth/forgetPassword.tsx | 3 + components/auth/leftpanel.tsx | 4 +- components/auth/loginForm.tsx | 10 +- components/auth/verifyCode.tsx | 5 +- components/dashboard/buildingOwner.tsx | 7 +- components/dashboard/engagement.tsx | 12 +- components/dashboard/equipment.tsx | 168 +++++++++++++ components/dashboard/helpDesk.tsx | 155 ++++++++++++ components/dashboard/inventory.tsx | 0 components/dashboard/propertyManager.tsx | 8 +- components/dashboard/request.tsx | 96 ++++++++ components/dashboard/serviceEngineer.tsx | 9 +- constants/constant.ts | 24 ++ constants/types.ts | 18 ++ utils/formInput.tsx | 12 +- {components/dashboard => utils}/navbar.tsx | 0 .../dashboard => utils}/sideBarItem.tsx | 0 {components/dashboard => utils}/sidebar.tsx | 2 +- utils/table.tsx | 226 ++++++++++++++++++ utils/tabs.tsx | 36 +++ 33 files changed, 826 insertions(+), 47 deletions(-) create mode 100644 app/dashboard/operations/equipment/page.tsx create mode 100644 app/dashboard/operations/helpDesk/page.tsx create mode 100644 app/dashboard/operations/inventory/page.tsx create mode 100644 app/dashboard/operations/request/page.tsx create mode 100644 components/dashboard/equipment.tsx create mode 100644 components/dashboard/helpDesk.tsx create mode 100644 components/dashboard/inventory.tsx create mode 100644 components/dashboard/request.tsx rename {components/dashboard => utils}/navbar.tsx (100%) rename {components/dashboard => utils}/sideBarItem.tsx (100%) rename {components/dashboard => utils}/sidebar.tsx (97%) create mode 100644 utils/table.tsx create mode 100644 utils/tabs.tsx diff --git a/app/dashboard/layout.tsx b/app/dashboard/layout.tsx index fb84f7e..037892c 100644 --- a/app/dashboard/layout.tsx +++ b/app/dashboard/layout.tsx @@ -1,6 +1,6 @@ "use client"// app/dashboard/layout.tsx -import Sidebar from "@/components/dashboard/sidebar"; -import Navbar from "@/components/dashboard/navbar"; +import Sidebar from "@/utils/sidebar"; +import Navbar from "@/utils/navbar"; import { Sparkles } from "lucide-react"; export default function DashboardLayout({ @@ -14,7 +14,7 @@ export default function DashboardLayout({
- {/* Shared Navbar */} + {/*Common Navbar for every webpage */} @@ -23,7 +23,7 @@ export default function DashboardLayout({
- {/* Shared Ask AI Floating Button */} + {/* Ask AI Floating Button common */} - {/* Bottom Legal Info */} + {/* Bottom Info */}

Protected by 2-factor auth • every sign-in is
audit-logged diff --git a/components/auth/verifyCode.tsx b/components/auth/verifyCode.tsx index a07fefd..2354ad5 100644 --- a/components/auth/verifyCode.tsx +++ b/components/auth/verifyCode.tsx @@ -8,6 +8,7 @@ import {Props} from "@/constants/types" export default function VerifyCode({ onBack }: Props) { const [timer, setTimer] = useState(30); + //Timer Functionality Sets 30s to 0s useEffect(() => { if (timer === 0) return; @@ -21,7 +22,7 @@ export default function VerifyCode({ onBack }: Props) { const handleResend = () => { if (timer > 0) return; - // Call your resend OTP API here + // Call your resend OTP setTimer(30); }; @@ -49,6 +50,8 @@ export default function VerifyCode({ onBack }: Props) {

+ + {/* OTP input box */}
diff --git a/components/dashboard/buildingOwner.tsx b/components/dashboard/buildingOwner.tsx index 9d794bb..084accc 100644 --- a/components/dashboard/buildingOwner.tsx +++ b/components/dashboard/buildingOwner.tsx @@ -15,7 +15,7 @@ export default function BuildingOwnerPortal() {
{/* --- HEADER SECTION --- */} -
+
Apple One — HQ Tower @@ -33,7 +33,10 @@ export default function BuildingOwnerPortal() {
{/* Action Button */} - diff --git a/components/dashboard/engagement.tsx b/components/dashboard/engagement.tsx index d620ede..cf41d98 100644 --- a/components/dashboard/engagement.tsx +++ b/components/dashboard/engagement.tsx @@ -18,14 +18,16 @@ import { CardHeader } from "@/utils/cardHeader"; export default function EngagementPage() { return ( -
+
{/* Page Header Section */} -
+
-
+
Apple One — HQ Tower · Intelligence @@ -41,7 +43,9 @@ export default function EngagementPage() { {/* Action Buttons */}
diff --git a/components/dashboard/equipment.tsx b/components/dashboard/equipment.tsx new file mode 100644 index 0000000..a4196b7 --- /dev/null +++ b/components/dashboard/equipment.tsx @@ -0,0 +1,168 @@ +import { useState } from 'react'; +import { + Target, + AlertTriangle, + Clock, + ShieldCheck, + Search, + QrCode, + Plus, + Download, + Upload +} from 'lucide-react'; +import Button from "@/utils/button"; +import StatCard from "@/utils/dashStatCard"; +import LocationTable from '../../utils/table'; + +export default function EquipmentPortal() { + const [activeTab, setActiveTab] = useState('Site-Wise Equipment'); + + const tabs: string[] = [ + 'Equipment Groups', + 'Site-Wise Equipment', + 'PPM Checklist', + 'AMC Checklist', + 'PPM Schedule', + 'AMC Schedule', + 'Maintenance Calendar' + ]; + + return ( +
+ {/* --- HEADER SECTION --- */} +
+
+
+ Apple One — HQ Tower + + Operations + + Equipment +
+

+ Equipment & maintenance +

+

+ Asset register, preventive (PPM) and contract (AMC) maintenance, scoped to the active tenant. +

+
+
+ + {/* --- NAVIGATION TABS --- */} +
+ {tabs.map((tab) => ( + + ))} +
+ + {/* --- STAT CARDS --- */} +
+ {/* Total Equipment */} + + + {/* Critical Assets */} + + + {/* PPM Attention */} + + + {/* On Plan */} + +
+ + {/* --- ROW 2: SEARCH, FILTERS & ACTION BUTTONS --- */} +
+ {/* Search & Select Filters */} +
+ {/* Search Bar */} +
+ + +
+ + {/* Groups Dropdown */} + +
+ + {/* Action Buttons */} +
+ + + + + + + +
+
+ + +
+ ); +} \ No newline at end of file diff --git a/components/dashboard/helpDesk.tsx b/components/dashboard/helpDesk.tsx new file mode 100644 index 0000000..8d08ee1 --- /dev/null +++ b/components/dashboard/helpDesk.tsx @@ -0,0 +1,155 @@ + + +import { useState } from 'react'; +import { + Layers, + ShieldCheck, + CheckSquare, + Clock, + Search, + QrCode, + Plus, +} from 'lucide-react'; +import Button from "@/utils/button"; +import StatCard from "@/utils/dashStatCard"; +import LocationTable from '../../utils/table'; +import NavigationTabs from '@/utils/tabs'; + + +export default function HelpDeskPortal() { + const [activeTab, setActiveTab] = useState('Location'); + + const tabs: string[] = ['Location', 'Technical', 'Missed', 'Departments', 'HSQE']; + + return ( +
+ {/* --- HEADER SECTION --- */} +
+
+
+ Apple One — HQ Tower + + Operations + + Help Desk +
+

+ Help Desk & checklists +

+

+ Scheduled location and equipment inspections, missed-checklist recovery, and HSQE incident management. +

+
+
+ +
+ {/* Reusable Navigation Tabs */} + + + {/* Rest of your page content */} +
+
+ {/* Total Checklists */} + + + {/* Active */} + + + {/* Approval Set */} + + + {/* Avg TAT */} + +
+ + + + {/* --- ROW 2: SEARCH, FILTERS & ACTION BUTTONS --- */} +
+ {/* Search & Select Filters */} +
+ {/* Search Bar */} +
+ + +
+ + {/* Block Dropdown */} + + +{/* Status Dropdown (Active State matching the screenshot) */} + +
+ + {/* Action Buttons */} +
+ + + +
+
+ + + + + + +
+ ); +} + diff --git a/components/dashboard/inventory.tsx b/components/dashboard/inventory.tsx new file mode 100644 index 0000000..e69de29 diff --git a/components/dashboard/propertyManager.tsx b/components/dashboard/propertyManager.tsx index 5dc89b7..08f1a80 100644 --- a/components/dashboard/propertyManager.tsx +++ b/components/dashboard/propertyManager.tsx @@ -16,11 +16,11 @@ import { Card } from "@/utils/cardWrapper"; import { CardHeader } from "@/utils/cardHeader"; export default function PropertyManagerPortal() { return ( -
{/* --- HEADER SECTION --- */} -
+
Apple One — HQ Tower @@ -29,7 +29,7 @@ export default function PropertyManagerPortal() { Property Manager
-

+

Property manager portal

@@ -38,7 +38,7 @@ export default function PropertyManagerPortal() {

{/* Action Buttons */} -
+
+ + +
+
+ + {/* --- STATUS PILL FILTERS --- */} +
+ {statusFilters.map((filter) => { + const isActive = activeFilter === filter.label; + return ( + + ); + })} +
+ +
+ ); +} \ No newline at end of file diff --git a/components/dashboard/serviceEngineer.tsx b/components/dashboard/serviceEngineer.tsx index f5af2c4..9e92a85 100644 --- a/components/dashboard/serviceEngineer.tsx +++ b/components/dashboard/serviceEngineer.tsx @@ -16,10 +16,11 @@ import { CardHeader } from "@/utils/cardHeader"; export default function ServiceEngineerPortal() { return ( -
+
{/* --- HEADER SECTION --- */} -
+
Apple One — HQ Tower @@ -28,7 +29,7 @@ export default function ServiceEngineerPortal() { Service Engineer
-

+

Service engineer portal

@@ -37,7 +38,7 @@ export default function ServiceEngineerPortal() {

{/* Action Buttons */} -
+
+ ))} +
+ ); +} \ No newline at end of file