client/components/helpCentre/HelpCentrePage.tsx (122 lines of code) (raw):

import { css, Global } from '@emotion/react'; import { lazy, Suspense, useEffect, useState } from 'react'; import { BrowserRouter, Navigate, Route, Routes } from 'react-router-dom'; import { fonts } from '@/client/styles/fonts'; import { initFeatureSwitchUrlParamOverride } from '../../../shared/featureSwitches'; import { global } from '../../styles/global'; import { useAnalytics } from '../../utilities/hooks/useAnalytics'; import { useConsent } from '../../utilities/hooks/useConsent'; import { useScrollToHashElement } from '../../utilities/hooks/useScrollToHashElement'; import { useScrollToTop } from '../../utilities/hooks/useScrollToTop'; import { setPageTitle } from '../../utilities/pageTitle'; import type { SignInStatus } from '../../utilities/signInStatus'; import { isSignedIn } from '../../utilities/signInStatus'; import { ErrorBoundary } from '../shared/ErrorBoundary'; import { GenericErrorScreen } from '../shared/GenericErrorScreen'; import { Main } from '../shared/Main'; import { HelpCenterContentWrapper } from './HelpCenterContentWrapper'; import { HelpCentreLoadingContent } from './HelpCentreLoadingContent'; import type { KnownIssueObj } from './KnownIssues'; import { LiveChat } from './liveChat/LiveChat'; initFeatureSwitchUrlParamOverride(); // The code below uses magic comments to instruct Webpack on // how to name the chunks these dynamic imports produce // More information: https://webpack.js.org/api/module-methods/#magic-comments const HelpCentre = lazy(() => import(/* webpackChunkName: "HelpCentre" */ './HelpCentre').then( ({ HelpCentre }) => ({ default: HelpCentre }), ), ); const HelpCentreArticle = lazy(() => import( /* webpackChunkName: "HelpCentreArticle" */ './HelpCentreArticle' ).then(({ HelpCentreArticle }) => ({ default: HelpCentreArticle })), ); const HelpCentreTopic = lazy(() => import(/* webpackChunkName: "HelpCentreTopic" */ './HelpCentreTopic').then( ({ HelpCentreTopic }) => ({ default: HelpCentreTopic }), ), ); const ContactUs = lazy(() => import(/* webpackChunkName: "ContactUs" */ './contactUs/ContactUs').then( ({ ContactUs }) => ({ default: ContactUs }), ), ); const DiagnosticInformation = lazy(() => import( /* webpackChunkName: "DiagnosticInformation" */ './diagnosticInformation/DiagnosticInformation' ).then(({ DiagnosticInformation }) => ({ default: DiagnosticInformation })), ); const HelpCentreRouter = () => { const [signInStatus, setSignInStatus] = useState<SignInStatus>('init'); useEffect(() => { setSignInStatus(isSignedIn() ? 'signedIn' : 'signedOut'); }, []); useAnalytics(); setPageTitle(); useConsent(); useScrollToTop(); useScrollToHashElement(); /* * EXAMPLE ISSUE: * leave as a blank array if there are no issues to render [ { "date": "29 Aug 1997 02:40", "message": "No papers today, it's judgment day" } ] */ const knownIssues: KnownIssueObj[] = []; return ( <Main signInStatus={signInStatus} isHelpCentrePage> <Global styles={css(`${global}`)} /> <Global styles={css(`${fonts}`)} /> <HelpCenterContentWrapper knownIssues={knownIssues}> <Suspense fallback={<HelpCentreLoadingContent />}> <ErrorBoundary fallback={(error) => ( <GenericErrorScreen loggingMessage={error} /> )} > <Routes> <Route path="/help-centre" element={<HelpCentre />} /> <Route path="/help-centre/article/:articleCode" element={<HelpCentreArticle />} /> <Route path="/help-centre/topic/:topicCode" element={<HelpCentreTopic />} /> <Route path="/help-centre/contact-us" element={<ContactUs />} /> <Route path="/help-centre/contact-us/:urlTopicId" element={<ContactUs />} /> <Route path="/help-centre/contact-us/:urlTopicId/:urlSubTopicId" element={<ContactUs />} /> <Route path="/help-centre/contact-us/:urlTopicId/:urlSubTopicId/:urlSubSubTopicId" element={<ContactUs />} /> <Route path="/help-centre/contact-us/:urlTopicId/:urlSubTopicId/:urlSubSubTopicId/:urlSuccess" element={<ContactUs />} /> <Route path="/help-centre/diagnostic-information" element={<DiagnosticInformation />} /> <Route path="/*" element={<Navigate to="/help-centre" />} /> </Routes> </ErrorBoundary> </Suspense> </HelpCenterContentWrapper> <LiveChat /> </Main> ); }; export const HelpCentrePage = ( <BrowserRouter> <HelpCentreRouter /> </BrowserRouter> );