app.ts[medicalclaim]

 import { Suspense, useEffect, useState } from "react";

import { CookiesProvider } from "react-cookie";
import { ThemeProvider } from "@ebh/capsule/theme";
import { createBrowserRouter, RouterProvider } from "react-router-dom";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import GuestRoutes from "./modules/layout/guest-routes.tsx";
import LoadingScreen from "./modules/loading-screen.tsx";
import ErrorBoundary from "./components/error-boundary";
import { TPAEnrollmentProvider } from "./context/use-tpa-enrollment-context.tsx";
import { QuickConsultationProvider } from "./context/quick-consultation-context.tsx";
import ProtectedRoute from "./common/protected-route/index.tsx";
import lazyLoadingRoutes from "./utils/lazy-loading-routes.ts";
import QuickConsultation from "./modules/quick-consultation/index.tsx";
import ConditionDetails from "./modules/quick-consultation/quick-consultation-condition-form/index.tsx";
import PhoneConsultation from "./modules/quick-consultation/phone-consultation/index.tsx";
import PaymentConfirmation from "./components/payment-confirmation/index.tsx";
import SecondOpinionHome from "./modules/second-opinion/index.tsx";
import SecondOpinion from "./modules/second-opinion/treatement-details-form/index.tsx";
import SecondMedicalPatientDetail from "./modules/second-opinion/second-medical-patient-detail/index.tsx";
import SecondMedicalSummaryDetail from "./modules/second-opinion/second-medical-summary-detail/index.tsx";
import AppointmentHistory from "./modules/second-opinion/appoinments-history-mobile/index.tsx";
import AskQueryHome from "./modules/first-opinion/index.tsx";
import AskQuerMedical from "./modules/first-opinion/medical-details-form/index.tsx";
import ReviewDetails from "./modules/first-opinion/review-details/index.tsx";

import { SecondOpinionProvider } from "./context/second-opinion-context.tsx";
import FemmeConnect from "./modules/femme/index.tsx";
import Register from "./modules/femme/partials/pages/register.tsx";
import BodyFat from "./modules/femme/partials/tools/body-fat-calc.tsx";
import HeightPredictor from "./modules/femme/partials/tools/height-predictor.tsx";
import BabyBumpTracker from "./modules/femme/partials/tools/baby-bump-tracker.tsx";
import NotFound from "./components/not-found/index.tsx";
import BookingJourney from "./modules/femme/partials/pages/bookings-journey.tsx";
import NewsLetters from "./modules/femme/partials/pages/news-letters.tsx";
import WebinarDetails from "./modules/femme/partials/pages/webinar-details.tsx";
import ErrorPage from "./components/error-page/index.tsx";
import useGetRecommenderData from "./api/hooks/cms-data-hook/use-get-recommender.ts";
import convertColors, { ConvertedColors } from "./utils/convert-colors.ts";
import { USER_DATA } from "./constants.ts";
import InactivityHandler from "./components/session-timeout";
import cookiesManager from "./utils/cookies-manager.ts";
import { THEME_COLORS } from "./theme/color.ts";
import IPDClaimHistory from "./modules/claims-history/ipd-claim-history/index.tsx";
import { identifyUser } from "./modules/clevertap-events/ipd-events.ts";
//non-medical-claims
import NonMedicalHome from "./modules/non-medical-claims/index.tsx";
import SubmitClaim from "./modules/non-medical-claims/submitclaim/index.tsx";

// Add all routes inside lazyLoadingRoutes.
const {
Home,
Redirections,
NewClaimSubmissionIpd,
HealthBlog,
HealthBlogDetails,
LoginPage,
NewClaimSubmissionOpd,
Intimation,
IntimationHistory,
TermsandConditions,
ViewAllDrafts,
OPDClaimHistory,
OPDClaimSubmission,
LandingPage,
OpdIpdPage,
IPDClaimSubmissionPage,
CashlessHistory,
Feedback,
HealthCheckUp,
AppointmentHistoryMobile,
SelectCityOrPincode,
SelectProvider,
SelectDateTime,
AddAddress,
AppointmentSummary,
HelpCenter,
AppointmentConfirmation,
Pharmacy,
HealthCareProductsLayout,
HealthCareProducts,
PatientDetailsFormSubmission,
PharmacyOrderHistory,
OrderMedicines,
AddOrSelectAddress,
UsefulLinks,
MedicinesLayout,
} = lazyLoadingRoutes;

// Group related features into feature bundles
const BASE_PATH = import.meta.env.VITE_BASE_URL || "/";
const queryClient = new QueryClient();
const router = createBrowserRouter(
[
{
path: "/vhc-portal",
errorElement: <ErrorPage />,
element: (
<TPAEnrollmentProvider>
<InactivityHandler>
<QuickConsultationProvider>
<SecondOpinionProvider>
<ProtectedRoute />
</SecondOpinionProvider>
</QuickConsultationProvider>
</InactivityHandler>
</TPAEnrollmentProvider>
),
hydrateFallbackElement: <LoadingScreen />,
children: [
{
path: "home",
element: <Home />,
},
{
path: "redirections",
element: <Redirections />,
},
{
path: "opdipd",
element: <OpdIpdPage />,
},
{
path: "feedback",
element: <Feedback />,
},
{
path: "pharmacy",
children: [
{
index: true,
element: <Pharmacy />,
},
{
path: "health-care-products",
element: <HealthCareProductsLayout />,
children: [
{
index: true,
element: <HealthCareProducts />,
},
{
path: "address",
element: <AddOrSelectAddress />,
},
{
path: "submit-details",
element: <PatientDetailsFormSubmission />,
},
],
},
{
path: "history",
element: <PharmacyOrderHistory />,
},
{
path: "medicines",
element: <MedicinesLayout />,
children: [
{
index: true,
element: <OrderMedicines />,
},
{
path: "address",
element: <AddOrSelectAddress />,
},
{
path: "submit-details",
element: <PatientDetailsFormSubmission />,
},
],
},
],
},
{
path: "useful-links",
element: <UsefulLinks />,
},
{
path: "claims",
children: [
{
path: "ipd",
element: <IPDClaimSubmissionPage />,
},
{
path: "opd",
element: <OPDClaimSubmission />,
},
{
path: "ipd/submitclaim",
element: <NewClaimSubmissionIpd />,
},
{
path: "opd/submitclaim",
element: <NewClaimSubmissionOpd />,
},
{
path: "ipd/view-all",
element: <ViewAllDrafts />,
},
{
path: "opd/view-all",
element: <ViewAllDrafts />,
},
{
path: "ipd/history",
element: <IPDClaimHistory />,
},
{
path: "opd/history",
element: <OPDClaimHistory />,
},
{
path: "cashless-history",
element: <CashlessHistory />,
},
],
},
{
path: "healthblog",
children: [
{
index: true,
element: <HealthBlog />,
},
{
path: ":blogFile",
element: <HealthBlogDetails />,
},
],
},

{
path: "quickconsultation",
children: [
{
index: true,
element: <QuickConsultation />,
},
{
path: "condition",
element: <ConditionDetails />,
},
{
path: "consultation",
element: <PhoneConsultation />,
},
],
},
{
path: "payment-confirmation",
children: [
{
index: true,
element: <PaymentConfirmation />,
},
],
},

{
path: ":source/treatmentdetails",
children: [
{
index: true,
element: <SecondOpinion />,
},
],
},

{
path: "secondopinion",
children: [
{
index: true,
element: <SecondOpinionHome />, //SecondOpinionHome
},

{
path: "patientdetail",
element: <SecondMedicalPatientDetail />,
},
{
path: "summarydetail",
element: <SecondMedicalSummaryDetail />,
},
{
path: "appointmentHistory/:query",
element: <AppointmentHistory />,
},
],
},
{
path: "ask-query",
children: [
{
index: true,
element: <AskQueryHome />, //AskQueryHome
},

{
path: "medicaldetail",
element: <AskQuerMedical />,
},
{
path: "reviewdetail",
element: <ReviewDetails />,
},
],
},
//non-medical-claim
{
path: "non-medical-claims",
children: [
{
index: true,
element: <NonMedicalHome/>, //non-medical-Home
},
{
path:"submit-claim",
element: <SubmitClaim/>, //SubmitClaim
}]
},

{
path: "femme-connect",
children: [
{
index: true,
element: <FemmeConnect />,
},
{
path: "register",
element: <Register />,
},
{
path: "body-fat-calculator",
element: <BodyFat />,
},
{
path: "height-predictor",
element: <HeightPredictor />,
},
{
path: "baby-bump-tracker",
element: <BabyBumpTracker />,
},
{
path: "bookings",
element: <BookingJourney />,
},
{
path: "news-letters",
element: <NewsLetters />,
},
{
path: "webinars",
element: <WebinarDetails />,
},
],
},
{
path: "intimation", // http://localhost:5173/vhc-portal/intimation?claimType=CLM
children: [
{
index: true,
element: <IntimationHistory />,
},
{
path: "history",
element: <Intimation />,
},
],
},
{
path: "reimbursement",
element: <LandingPage />,
},
// Health Checkup
{
path: "health-check-up", // http://localhost:5173/vhc-portal/health-check-up?email=vuppu.lokraj@vidalhealth.com&mobile=9959730629&corporateId=NIIT&patientSlug=puxrCKGL3Ce2XIdIcrR7bpQn&token=abecd8b265c10e307d8b4126c29cf2ee35ad0b02
children: [
{ index: true, element: <HealthCheckUp /> },
{ path: "history-mobile", element: <AppointmentHistoryMobile /> },
{
path: "select-city-or-pincode",
element: <SelectCityOrPincode />,
},
{ path: "select-provider", element: <SelectProvider /> },
{ path: "select-date-and-time", element: <SelectDateTime /> },
{ path: "add-address", element: <AddAddress /> },
{ path: "appointment-summary", element: <AppointmentSummary /> },
{ path: "help-center", element: <HelpCenter /> },
{ path: "confirmation", element: <AppointmentConfirmation /> },
],
},
],
},
{
element: <GuestRoutes />,
path: "/vhc-portal",
hydrateFallbackElement: <LoadingScreen />,
children: [
{
path: "login",
element: <LoginPage />,
},
{
path: "terms-and-conditions",
element: <TermsandConditions />,
},
],
},
{
path: "*",
element: <NotFound />,
},
],
{ basename: BASE_PATH }
);

function Theme() {
const [grpId, setGrpId] = useState<string>(
cookiesManager.get(USER_DATA.GROUP_ID) || ""
);
const [themeColors, setThemeColors] = useState<ConvertedColors | null>(null);
const [shouldFetchColors, setShouldFetchColors] = useState<boolean>(false);

useEffect(() => {
const cachedColors = localStorage.getItem(USER_DATA.COLORS);
if (cachedColors) {
try {
const parsed = JSON.parse(cachedColors);
setThemeColors(parsed);
setShouldFetchColors(false);
} catch (error) {
console.error('Error parsing cached colors:', error);
setShouldFetchColors(true);
}
} else {
setShouldFetchColors(true);
}

const alreadyIdentified = localStorage.getItem("user_identified");

if (!alreadyIdentified) {
const profile = {
identity: cookiesManager.get(USER_DATA.USER_ID),
name: cookiesManager.get(USER_DATA.NAME),
email: cookiesManager.get(USER_DATA.EMAIL),
phone: cookiesManager.get(USER_DATA.MOBILE),
user_type: cookiesManager.get(USER_DATA.USER_TYPE),
};

identifyUser(profile);
localStorage.setItem("user_identified", "true");
}

}, []);

useEffect(() => {
const interval = setInterval(() => {
const newGrpId = cookiesManager.get(USER_DATA.GROUP_ID) || "";
if (newGrpId !== grpId) {
setGrpId(newGrpId);
localStorage.removeItem(USER_DATA.COLORS);
setShouldFetchColors(true);
}
}, 1000);

return () => clearInterval(interval);
}, [grpId]);

const payload = {
pageType: "theme",
collectionType: "theme",
headers: {
"x-grp-id": grpId,
"x-source": 'vidal'
},
};

const { recommenderData, isRecommenderLoading } = useGetRecommenderData(payload, shouldFetchColors);

useEffect(() => {
if (recommenderData?.data?.[0]?.MetaData?.theme?.light?.colors) {
const newColors = convertColors(recommenderData.data[0].MetaData.theme.light.colors);
localStorage.setItem(USER_DATA.COLORS, JSON.stringify(newColors));
setThemeColors(newColors);
setShouldFetchColors(false);
}
}, [recommenderData]);

const colors = themeColors || convertColors(THEME_COLORS);

if (isRecommenderLoading) {
return <LoadingScreen />;
}

return (
<ThemeProvider themeKey="vidal-vhc-portal" colors={colors}>
<RouterProvider router={router} />
</ThemeProvider>
);
}

function App() {
return (
<ErrorBoundary>
<Suspense fallback={<LoadingScreen />}>
<CookiesProvider>
<QueryClientProvider client={queryClient}>
<Theme />
</QueryClientProvider>
</CookiesProvider>
</Suspense>
</ErrorBoundary>
);
}

export default App;

Comments

Popular posts from this blog

interview questions js[ Anurag Singh ProCodrr]

reactnative_creation