diff --git a/src/AppRoutes.tsx b/src/AppRoutes.tsx index c6abb0f..28cfc4d 100644 --- a/src/AppRoutes.tsx +++ b/src/AppRoutes.tsx @@ -1,7 +1,7 @@ import { lazy, Suspense } from 'react' import { Route, Routes, Navigate } from 'react-router-dom' import Layout from './layout/AppLayout' -import CustomAppLoader from './components/custom/CustomAppLoader' + const HomePage = lazy(() => import('./app/dashboard')) const CohortManage = lazy(() => import('./app/cohartManage')) @@ -15,7 +15,7 @@ const ConfigurationPage = lazy(() => import('./app/configuration')) function AppRoutes() { return ( - }> + } /> } /> diff --git a/src/app/configuration/actionBuilder/components/ConfigurationFieldsColumn.tsx b/src/app/configuration/actionBuilder/components/ConfigurationFieldsColumn.tsx index de8a510..2c8ec28 100644 --- a/src/app/configuration/actionBuilder/components/ConfigurationFieldsColumn.tsx +++ b/src/app/configuration/actionBuilder/components/ConfigurationFieldsColumn.tsx @@ -7,7 +7,7 @@ import { TrashIcon, DotsSixVerticalIcon, } from '@phosphor-icons/react'; -import { CustomInput, CustomLoader, CustomButton } from '../../../../components/custom'; +import { CustomInput, CustomLoader, CustomButton, Skeleton } from '../../../../components/custom'; import type { FieldDefinition } from '../ActionBuilderTypes'; interface ConfigurationFieldsColumnProps { @@ -73,8 +73,10 @@ export function ConfigurationFieldsColumn({ {/* Field Cards List */}
{loading ? ( -
- +
+ + +
) : !selectedActionTypeId ? (
diff --git a/src/app/configuration/actionBuilder/index.tsx b/src/app/configuration/actionBuilder/index.tsx index b9ef2b8..c7d8a6c 100644 --- a/src/app/configuration/actionBuilder/index.tsx +++ b/src/app/configuration/actionBuilder/index.tsx @@ -1,6 +1,6 @@ import { useState, useEffect } from 'react'; import { CheckCircleIcon } from '@phosphor-icons/react'; -import { CustomConfirmationModal, CustomLoader } from '../../../components/custom'; +import { CustomConfirmationModal, CustomLoader, Skeleton } from '../../../components/custom'; import { CategoriesColumn, @@ -507,8 +507,27 @@ export default function ActionBuilderPage() { {/* 3-Column Drilldown Layout */} {loadingCategories && categories.length === 0 ? ( -
- +
+
+ + + + + +
+
+ + + + + +
+
+ + + + +
) : (
diff --git a/src/app/configuration/masterData/components/CategorySidebar.tsx b/src/app/configuration/masterData/components/CategorySidebar.tsx index 7bfa628..c6cd528 100644 --- a/src/app/configuration/masterData/components/CategorySidebar.tsx +++ b/src/app/configuration/masterData/components/CategorySidebar.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { ListBulletsIcon, MagnifyingGlassIcon, DatabaseIcon } from '@phosphor-icons/react'; -import { CustomInput, CustomLoader } from '../../../../components/custom'; +import { CustomInput, Skeleton } from '../../../../components/custom'; import type { MasterDataCategoryItem } from '../MasterDataTypes'; interface CategorySidebarProps { @@ -43,8 +43,10 @@ export const CategorySidebar: React.FC = ({ {/* Categories Selector List */} {loading ? ( -
- +
+ {Array.from({ length: 12 }).map((_, i) => ( + + ))}
) : filteredCategories.length === 0 ? (
diff --git a/src/app/configuration/masterData/components/MasterItemTable.tsx b/src/app/configuration/masterData/components/MasterItemTable.tsx index b2d572f..ac7ab20 100644 --- a/src/app/configuration/masterData/components/MasterItemTable.tsx +++ b/src/app/configuration/masterData/components/MasterItemTable.tsx @@ -10,7 +10,7 @@ import { import { CustomButton, CustomInput, - CustomLoader, + Skeleton, CustomStatus, } from '../../../../components/custom'; import type { MasterDataCategoryItem, MasterDataItem } from '../MasterDataTypes'; @@ -87,8 +87,29 @@ export const MasterItemTable: React.FC = ({ {/* Items Table */} {loading ? ( -
- +
+ + + + + + + + + + + + {Array.from({ length: 6 }).map((_, i) => ( + + + + + + + + ))} + +
SeqValue / LabelCodeStatusActions
) : !selectedCategory ? (
diff --git a/src/app/dashboard/index.tsx b/src/app/dashboard/index.tsx index d53f19b..5a83efa 100644 --- a/src/app/dashboard/index.tsx +++ b/src/app/dashboard/index.tsx @@ -53,11 +53,11 @@ export default function HomePage() { if (loading) { return ( -
+
{/* Top Stat Cards Skeleton */}
{Array.from({ length: 5 }).map((_, i) => ( -
+
@@ -72,7 +72,7 @@ export default function HomePage() { {/* Middle Section Skeleton */}
-
+
@@ -85,7 +85,7 @@ export default function HomePage() {
-
+
@@ -102,7 +102,7 @@ export default function HomePage() {
{/* Bottom Table Skeleton */} -
+
@@ -119,7 +119,7 @@ export default function HomePage() { } return ( -
+
{/* 1. Top Stat Cards Row */}
{metrics.map((metric) => ( diff --git a/src/app/recoveryIncidents/tabs/index.tsx b/src/app/recoveryIncidents/tabs/index.tsx index ba7b5a4..e30e1bc 100644 --- a/src/app/recoveryIncidents/tabs/index.tsx +++ b/src/app/recoveryIncidents/tabs/index.tsx @@ -1,7 +1,7 @@ import { useState, useEffect } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; import { User, Checks, X, ClockCounterClockwiseIcon, ArrowLeftIcon, ArrowsClockwiseIcon, AirplaneTiltIcon } from '@phosphor-icons/react'; -import { CustomButton, CustomTabs, CustomBackButton, CustomStatus } from '../../../components/custom'; +import { CustomButton, CustomTabs, CustomBackButton, CustomStatus, Skeleton } from '../../../components/custom'; import SummaryTab from './SummaryTab'; import CaseDetailsTab from './CaseDetailsTab'; import RecoveryPlanTab from './RecoveryPlanTab'; @@ -96,7 +96,58 @@ export default function RecoveryIncidentTabs() { ]; if (loading) { - return
Loading incident...
; + return ( +
+ {/* Header Skeleton */} +
+
+
+ + + +
+
+ + +
+
+ +
+ + {/* Tabs Row Skeleton */} +
+
+ + + + +
+
+ + +
+
+ + {/* Main Content Area Skeleton */} +
+
+
+ + + +
+
+
+
+ + + + +
+
+
+
+ ); } const currentStatus = incident?.status || "Pending"; @@ -220,7 +271,7 @@ export default function RecoveryIncidentTabs() {
{/* Bottom Sticky Action Bar */} -
+
setIsSidebarOpen(true)} /> -
+
{children}