| @@ -1,8 +1,8 @@ | |||
| import { useState, useEffect, createContext } from 'react'; | |||
| import { useState, useEffect, createContext, useMemo } from 'react'; | |||
| import { IntlProvider } from 'react-intl'; | |||
| import enMessages from '../translations/en.json'; | |||
| import cnMessages from '../translations/zh-CN.json'; | |||
| import hkMessages from '../translations/zh-HK.json'; | |||
| import enBase from '../translations/en.json'; | |||
| import cnBase from '../translations/zh-CN.json'; | |||
| import hkBase from '../translations/zh-HK.json'; | |||
| import { GET_COMBO, GET_CONTENT } from "utils/ApiPathConst"; | |||
| import { get } from "utils/HttpUtils"; | |||
| @@ -10,72 +10,106 @@ import { get } from "utils/HttpUtils"; | |||
| const LocaleContext = createContext(); | |||
| export const I18nProvider = ({ children }) => { | |||
| const systemMessages = { | |||
| "en": enMessages, | |||
| "zh": hkMessages, | |||
| "zh-HK": hkMessages, | |||
| "zh-CN": cnMessages | |||
| }; | |||
| const [locale, setLocale] = useState('en'); | |||
| // keep base messages immutable | |||
| const [systemMessages, setSystemMessages] = useState({ | |||
| en: { ...enBase }, | |||
| zh: { ...hkBase }, | |||
| 'zh-HK': { ...hkBase }, | |||
| 'zh-CN': { ...cnBase } | |||
| }); | |||
| const [loaded, setLoaded] = useState(false); | |||
| useEffect(() => { | |||
| const saved = localStorage.getItem('locale'); | |||
| if (!saved) localStorage.setItem('locale', 'en'); | |||
| else setLocale(saved); | |||
| }, []); | |||
| const [locale, setLocale] = useState('en'); // Default locale, you can change this as per your requirement | |||
| const [messages, setMessages] = useState(systemMessages[locale]); | |||
| useEffect(() => { | |||
| let alive = true; | |||
| const loadTermsAndConditions = () => { | |||
| // load both endpoints then merge into state | |||
| const p1 = new Promise((resolve) => { | |||
| get({ | |||
| url: GET_CONTENT, | |||
| onSuccess: (responseData) => { | |||
| for (const key in responseData) { | |||
| const value = responseData[key]; | |||
| enMessages[key] = value.en??""; | |||
| cnMessages[key] = value.cn??""; | |||
| hkMessages[key] = value.zh??""; | |||
| } | |||
| } | |||
| url: GET_CONTENT, | |||
| onSuccess: (resp) => resolve(resp || {}), | |||
| onError: () => resolve({}) | |||
| }); | |||
| }); | |||
| const p2 = new Promise((resolve) => { | |||
| get({ | |||
| url: GET_COMBO, | |||
| onSuccess: (responseData) => { | |||
| for (let i = 0; i < responseData.length; i++) { | |||
| let item = responseData[i]; | |||
| enMessages[item.key] = item.en; | |||
| cnMessages[item.key] = item.cn; | |||
| hkMessages[item.key] = item.zh; | |||
| } | |||
| } | |||
| url: GET_COMBO, | |||
| onSuccess: (resp) => resolve(resp || []), | |||
| onError: () => resolve([]) | |||
| }); | |||
| }); | |||
| Promise.all([p1, p2]).then(([contentMap, comboList]) => { | |||
| if (!alive) return; | |||
| setSystemMessages((prev) => { | |||
| // clone prev first (immutably) | |||
| const next = { | |||
| ...prev, | |||
| en: { ...prev.en }, | |||
| 'zh-CN': { ...prev['zh-CN'] }, | |||
| 'zh-HK': { ...prev['zh-HK'] }, | |||
| zh: { ...prev.zh } | |||
| }; | |||
| // merge GET_CONTENT (object) | |||
| for (const key in contentMap) { | |||
| const v = contentMap[key] || {}; | |||
| next.en[key] = v.en ?? ""; | |||
| next['zh-CN'][key] = v.cn ?? ""; | |||
| next['zh-HK'][key] = v.zh ?? ""; | |||
| next.zh[key] = v.zh ?? ""; | |||
| } | |||
| // merge GET_COMBO (array) | |||
| for (const item of comboList) { | |||
| if (!item?.key) continue; | |||
| next.en[item.key] = item.en ?? ""; | |||
| next['zh-CN'][item.key] = item.cn ?? ""; | |||
| next['zh-HK'][item.key] = item.zh ?? ""; | |||
| next.zh[item.key] = item.zh ?? ""; | |||
| } | |||
| return next; | |||
| }); | |||
| } | |||
| useEffect(() => { | |||
| loadTermsAndConditions(); | |||
| if (localStorage.getItem('locale') === null) { | |||
| //no locale case | |||
| localStorage.setItem('locale', 'en'); | |||
| } | |||
| else { | |||
| setLocale(localStorage.getItem('locale')); | |||
| } | |||
| }, []); | |||
| useEffect(() => { | |||
| // Load the messages for the selected locale | |||
| const fetchMessages = async () => { | |||
| setMessages(systemMessages[locale]); | |||
| }; | |||
| fetchMessages(); | |||
| }, [locale]); | |||
| return ( | |||
| <LocaleContext.Provider value={{ locale, setLocale }} > | |||
| <IntlProvider locale={locale} messages={messages}> | |||
| {children} | |||
| </IntlProvider> | |||
| </LocaleContext.Provider> | |||
| ); | |||
| } | |||
| export default LocaleContext; | |||
| setLoaded(true); | |||
| }); | |||
| }; | |||
| loadTermsAndConditions(); | |||
| return () => { | |||
| alive = false; | |||
| }; | |||
| }, []); | |||
| const messages = useMemo(() => { | |||
| return systemMessages[locale] || systemMessages.en; | |||
| }, [systemMessages, locale]); | |||
| return ( | |||
| <LocaleContext.Provider value={{ locale, setLocale }}> | |||
| <IntlProvider | |||
| key={locale} | |||
| locale={locale} | |||
| messages={messages} | |||
| defaultLocale="en" | |||
| > | |||
| {loaded ? children : <div />} | |||
| </IntlProvider> | |||
| </LocaleContext.Provider> | |||
| ); | |||
| }; | |||
| export default LocaleContext; | |||
| @@ -98,6 +98,7 @@ const LocaleSelector = () => { | |||
| onClick={() => { | |||
| setLocale("en") | |||
| localStorage.setItem('locale','en'); | |||
| setOpen(false); | |||
| }} | |||
| > | |||
| <ListItemText | |||
| @@ -108,8 +109,9 @@ const LocaleSelector = () => { | |||
| <ListItem disablePadding> | |||
| <ListItemButton | |||
| onClick={() => { | |||
| setLocale("zh-HK") | |||
| setLocale("zh-HK"); | |||
| localStorage.setItem('locale','zh-HK'); | |||
| setOpen(false); | |||
| }} | |||
| > | |||
| <ListItemText | |||
| @@ -122,6 +124,7 @@ const LocaleSelector = () => { | |||
| onClick={() => { | |||
| setLocale("zh-CN") | |||
| localStorage.setItem('locale','zh-CN'); | |||
| setOpen(false); | |||
| }} | |||
| > | |||
| <ListItemText | |||
| @@ -33,6 +33,7 @@ import { FormattedMessage, useIntl } from "react-intl"; | |||
| import Loadable from 'components/Loadable'; | |||
| import { useState, useEffect, lazy } from 'react'; | |||
| const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingComponent'))); | |||
| import { checkPaymentSuspension } from "utils/Utils"; | |||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | |||
| @@ -372,8 +373,28 @@ const PublicNoticeApplyForm = ({ loadedData, _selections, gazetteIssueList }) => | |||
| <th style={tabelStyle} width="300" align="left"><FormattedMessage id="PaymentCoonpletDealine" /></th> | |||
| </tr> | |||
| <tr> | |||
| <td style={tabelStyle}> | |||
| <td style={{ ...tabelStyle, verticalAlign: 'top'}}> | |||
| <FormattedMessage id="payOnline" /> | |||
| {checkPaymentSuspension() && ( | |||
| <Typography | |||
| variant="body2" | |||
| sx={{ | |||
| color: 'error.main', | |||
| fontWeight: 600, | |||
| mt: 0.5, | |||
| ml:2 | |||
| }} | |||
| > | |||
| <span | |||
| dangerouslySetInnerHTML={{ | |||
| __html: intl.formatMessage({ | |||
| id: "suspensionMessageText", | |||
| defaultMessage: "" | |||
| }) | |||
| }} | |||
| /> | |||
| </Typography> | |||
| )} | |||
| <br /><a href="#payOnlineDetails" color='#fff' onClick={() => { | |||
| setWarningTitle(intl.formatMessage({ id: "paymentMeans" }) + ": " + intl.formatMessage({ id: "payOnline" })) | |||
| setWarningText( | |||
| @@ -388,8 +409,8 @@ const PublicNoticeApplyForm = ({ loadedData, _selections, gazetteIssueList }) => | |||
| setIsWarningPopUp(true); | |||
| }}><u><FormattedMessage id="viewDetail" /></u></a> | |||
| </td> | |||
| <td style={tabelStyle}>{DateUtils.dateFormat(closeDate, dft)} {locale==='en'?"2:00 p.m.":"下午2時"}</td> | |||
| <td style={tabelStyle}> | |||
| <td style={{ ...tabelStyle, verticalAlign: 'top'}}>{DateUtils.dateFormat(closeDate, dft)} {locale==='en'?"2:00 p.m.":"下午2時"}</td> | |||
| <td style={{ ...tabelStyle, verticalAlign: 'top'}}> | |||
| <FormattedMessage id="payOnlineRemark" values={{ | |||
| date: DateUtils.dateFormat(closeDate, dft) | |||
| }} /> | |||
| @@ -0,0 +1,178 @@ | |||
| import { Grid, Typography, Stack, } from '@mui/material'; | |||
| import { useState, useEffect, lazy } from "react"; | |||
| import Loadable from 'components/Loadable'; | |||
| import { useIntl, FormattedMessage } from "react-intl"; | |||
| import titleBackgroundImg from 'assets/images/dashboard/gazette-bar.png' | |||
| const BackgroundHead = { | |||
| backgroundImage: `url(${titleBackgroundImg})`, | |||
| width: 'auto', | |||
| height: 'auto', | |||
| backgroundSize: 'contain', | |||
| backgroundRepeat: 'no-repeat', | |||
| backgroundColor: '#0C489E', | |||
| backgroundPosition: 'right' | |||
| } | |||
| const LoadingComponent = Loadable(lazy(() => import('pages/extra-pages/LoadingComponent'))); | |||
| import DownloadIcon from '@mui/icons-material/Download'; | |||
| const UserMenu1 = () => { | |||
| const intl = useIntl(); | |||
| const { locale } = intl; | |||
| const [onReady, setOnReady] = useState(false); | |||
| const pnspsurl = "https://"+window.location.hostname; | |||
| useEffect(() => { | |||
| setOnReady(true); | |||
| }, [locale]); | |||
| const tableStyle = { | |||
| fontFamily: "arial, sans-serif", | |||
| borderCollapse: "collapse", | |||
| width: "100%", | |||
| } | |||
| const cellStyle = { | |||
| border: "1px solid #dddddd", | |||
| textAlign: "left", | |||
| padding: "8px" | |||
| }; | |||
| const getRow = ({ title, en, zh, cn }) => { | |||
| return <> | |||
| <tr> | |||
| <td style={cellStyle}>{title}</td> | |||
| <td style={cellStyle}><a href={en} target='_brank'><DownloadIcon /></a></td> | |||
| <td style={cellStyle}><a href={zh} target='_brank'><DownloadIcon /></a></td> | |||
| <td style={cellStyle}><a href={cn} target='_brank'><DownloadIcon /></a></td> | |||
| </tr> | |||
| </> | |||
| ; | |||
| } | |||
| return ( | |||
| !onReady ? | |||
| <Grid container sx={{ minHeight: '87vh', mb: 3 }} direction="column" justifyContent="center" alignItems="center"> | |||
| <Grid item> | |||
| <LoadingComponent /> | |||
| </Grid> | |||
| </Grid> | |||
| : | |||
| ( | |||
| <Grid container sx={{ minHeight: '87vh', mb: 3}} direction="column" alignItems="center" > | |||
| <Grid item xs={12} md={12} width="100%"> | |||
| <div style={BackgroundHead}> | |||
| <Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center"> | |||
| <Typography ml={15} color='#FFF' variant="h4" sx={{ display: { xs: 'none', sm: 'none', md: 'block', pt: 2 } }}> | |||
| <FormattedMessage id="userGuide" /> | |||
| </Typography> | |||
| </Stack> | |||
| </div> | |||
| </Grid> | |||
| <Grid container justifyContent="center" alignItems="center" > | |||
| <Grid item xs={10} md={8} lg={6}> | |||
| <div style={{ | |||
| textAlign: "justify", | |||
| textJustify: "interWord", | |||
| fontStyle: "normal" | |||
| }}> | |||
| <p> | |||
| <FormattedMessage id="userGuideDes" /> | |||
| <table style={tableStyle}> | |||
| <tr> | |||
| <th style={cellStyle} width="70%"></th> | |||
| <th style={cellStyle} width="10%">English</th> | |||
| <th style={cellStyle} width="10%">繁體中文</th> | |||
| <th style={cellStyle} width="10%">简体中文</th> | |||
| </tr> | |||
| {getRow({ | |||
| title: <FormattedMessage id="userGuide1" />, | |||
| en: pnspsurl + "/user-guide/eng/01 - Create account - 1.pdf", | |||
| zh: pnspsurl + "/user-guide/cht/01c - Create account - 1.pdf", | |||
| cn: pnspsurl + "/user-guide/chs/01sc - Create account - 1.pdf" | |||
| })} | |||
| {getRow({ | |||
| title: <FormattedMessage id="userGuide2" />, | |||
| en: pnspsurl + "/user-guide/eng/02 - Login - 1.pdf", | |||
| zh: pnspsurl + "/user-guide/cht/02c - Login - 1.pdf", | |||
| cn: pnspsurl + "/user-guide/chs/02sc - Login - 1.pdf" | |||
| })} | |||
| {getRow({ | |||
| title: <FormattedMessage id="userGuide3" />, | |||
| en: pnspsurl + "/user-guide/eng/03 - Application for publishing a Public Notice in the Gazette - 1.pdf", | |||
| zh: pnspsurl + "/user-guide/cht/03c - Application for publishing a Public Notice in the Gazette - 1.pdf", | |||
| cn: pnspsurl + "/user-guide/chs/03sc - Application for publishing a Public Notice in the Gazette - 1.pdf" | |||
| })} | |||
| {getRow({ | |||
| title: <FormattedMessage id="userGuide4" />, | |||
| en: pnspsurl + "/user-guide/eng/04 - Proofreading reply (with correction) - 1.pdf", | |||
| zh: pnspsurl + "/user-guide/cht/04c - Proofreading reply (with correction) - 1.pdf", | |||
| cn: pnspsurl + "/user-guide/chs/04sc - Proofreading reply (with correction) - 1.pdf" | |||
| })} | |||
| {getRow({ | |||
| title: <FormattedMessage id="userGuide5" />, | |||
| en: pnspsurl + "/user-guide/eng/05 - Proofreading reply (pass for printing) - 1.pdf", | |||
| zh: pnspsurl + "/user-guide/cht/05c - Proofreading reply (pass for printing) - 1.pdf", | |||
| cn: pnspsurl + "/user-guide/chs/05sc - Proofreading reply (pass for printing) - 1.pdf" | |||
| })} | |||
| {getRow({ | |||
| title: <FormattedMessage id="userGuide6" />, | |||
| en: pnspsurl + "/user-guide/eng/06 - Cancellation of application for publishing a Public Notice in the Gazette - 1.pdf", | |||
| zh: pnspsurl + "/user-guide/cht/06c - Cancellation of application for publishing a Public Notice in the Gazette - 1.pdf", | |||
| cn: pnspsurl + "/user-guide/chs/06sc - Cancellation of application for publishing a Public Notice in the Gazette - 1.pdf" | |||
| })} | |||
| {getRow({ | |||
| title: <FormattedMessage id="userGuide7" />, | |||
| en: pnspsurl + "/user-guide/eng/07 - Forgot password - 1.pdf", | |||
| zh: pnspsurl + "/user-guide/cht/07c - Forgot password - 1.pdf", | |||
| cn: pnspsurl + "/user-guide/chs/07sc - Forgot password - 1.pdf" | |||
| })} | |||
| {getRow({ | |||
| title: <FormattedMessage id="userGuide8" />, | |||
| en: pnspsurl + "/user-guide/eng/08 - Change password - 1.pdf", | |||
| zh: pnspsurl + "/user-guide/cht/08c - Change password - 1.pdf", | |||
| cn: pnspsurl + "/user-guide/chs/08sc - Change password - 1.pdf" | |||
| })} | |||
| {getRow({ | |||
| title: <FormattedMessage id="userGuide9" />, | |||
| en: pnspsurl + "/user-guide/eng/09 - Language of email notification - 1.pdf", | |||
| zh: pnspsurl + "/user-guide/cht/09c - Language of email notification - 1.pdf", | |||
| cn: pnspsurl + "/user-guide/chs/09sc - Language of email notification - 1.pdf" | |||
| })} | |||
| {getRow({ | |||
| title: <FormattedMessage id="userGuide10" />, | |||
| en: pnspsurl + "/user-guide/eng/10 - Download General Demand Note for making payment(s) - 1.pdf", | |||
| zh: pnspsurl + "/user-guide/cht/10c - Download General Demand Note for making payment(s) - 1.pdf", | |||
| cn: pnspsurl + "/user-guide/chs/10sc - Download General Demand Note for making payment(s) - 1.pdf" | |||
| })} | |||
| </table> | |||
| </p> | |||
| </div> | |||
| </Grid> | |||
| </Grid> | |||
| </Grid> | |||
| ) | |||
| ); | |||
| } | |||
| export default UserMenu1; | |||
| @@ -19,7 +19,7 @@ const LoadingComponent = Loadable(lazy(() => import('pages/extra-pages/LoadingCo | |||
| import DownloadIcon from '@mui/icons-material/Download'; | |||
| const UserMenu = () => { | |||
| const UserMenuPub = () => { | |||
| const intl = useIntl(); | |||
| const { locale } = intl; | |||
| const [onReady, setOnReady] = useState(false); | |||
| @@ -204,4 +204,4 @@ const UserMenu = () => { | |||
| } | |||
| export default UserMenu; | |||
| export default UserMenuPub; | |||
| @@ -0,0 +1,207 @@ | |||
| import { Grid, Typography, Stack, } from '@mui/material'; | |||
| import { useState, useEffect, lazy } from "react"; | |||
| import Loadable from 'components/Loadable'; | |||
| import { useIntl, FormattedMessage } from "react-intl"; | |||
| import titleBackgroundImg from 'assets/images/dashboard/gazette-bar.png' | |||
| const BackgroundHead = { | |||
| backgroundImage: `url(${titleBackgroundImg})`, | |||
| width: 'auto', | |||
| height: 'auto', | |||
| backgroundSize: 'contain', | |||
| backgroundRepeat: 'no-repeat', | |||
| backgroundColor: '#0C489E', | |||
| backgroundPosition: 'right' | |||
| } | |||
| const LoadingComponent = Loadable(lazy(() => import('pages/extra-pages/LoadingComponent'))); | |||
| import DownloadIcon from '@mui/icons-material/Download'; | |||
| const UserMenuPub1 = () => { | |||
| const intl = useIntl(); | |||
| const { locale } = intl; | |||
| const [onReady, setOnReady] = useState(false); | |||
| useEffect(() => { | |||
| setOnReady(true); | |||
| }, [locale]); | |||
| const tableStyle = { | |||
| fontFamily: "arial, sans-serif", | |||
| borderCollapse: "collapse", | |||
| width: "100%", | |||
| } | |||
| const cellStyle = { | |||
| border: "1px solid #dddddd", | |||
| textAlign: "left", | |||
| padding: "8px" | |||
| }; | |||
| const getRow = ({ title, orgEn, orgZh, orgCn, indEn, indZh, indCn }) => { | |||
| return <> | |||
| <tr> | |||
| <td style={cellStyle}>{title}</td> | |||
| <td style={cellStyle}><a href={locale=="zh-HK"?orgZh: locale=="en"?orgEn:orgCn} target='_brank'><DownloadIcon /></a></td> | |||
| <td style={cellStyle}><a href={locale=="zh-HK"?indZh: locale=="en"?indEn:indCn} target='_brank'><DownloadIcon /></a></td> | |||
| </tr> | |||
| </> | |||
| ; | |||
| } | |||
| const pnspsurl = "https://"+window.location.hostname; | |||
| return ( | |||
| !onReady ? | |||
| <Grid container sx={{ minHeight: '87vh', mb: 3 }} direction="column" justifyContent="center" alignItems="center"> | |||
| <Grid item> | |||
| <LoadingComponent /> | |||
| </Grid> | |||
| </Grid> | |||
| : | |||
| ( | |||
| <Grid container sx={{ minHeight: '87vh', mb: 3}} direction="column" alignItems="center" > | |||
| <Grid item xs={12} md={12} width="100%"> | |||
| <div style={BackgroundHead}> | |||
| <Stack direction="row" height='70px' justifyContent="flex-start" alignItems="center"> | |||
| <Typography ml={15} color='#FFF' variant="h4" sx={{ display: { xs: 'none', sm: 'none', md: 'block'} }}> | |||
| <FormattedMessage id="userGuide" /> | |||
| </Typography> | |||
| </Stack> | |||
| </div> | |||
| </Grid> | |||
| <Grid container justifyContent="center" alignItems="center" > | |||
| <Grid item xs={10} md={8} lg={6}> | |||
| <div style={{ | |||
| textAlign: "justify", | |||
| textJustify: "interWord", | |||
| fontStyle: "normal" | |||
| }}> | |||
| <p> | |||
| <table style={tableStyle}> | |||
| <tr> | |||
| <th style={cellStyle} width="70%"></th> | |||
| <th style={cellStyle} width="15%"> <FormattedMessage id="forOrgUser" /></th> | |||
| <th style={cellStyle} width="15%"> <FormattedMessage id="forIndUser" /></th> | |||
| </tr> | |||
| {getRow({ | |||
| title: <FormattedMessage id="userGuide1" />, | |||
| orgEn: pnspsurl + "/user-guide-pub/eng/01 - Create account - c 1.pdf", | |||
| orgZh: pnspsurl + "/user-guide-pub/cht/01c - Create account - c 1.pdf", | |||
| orgCn: pnspsurl + "/user-guide-pub/chs/01sc - Create account - c 1.pdf", | |||
| indEn: pnspsurl + "/user-guide-pub/eng/01 - Create account - p 1.pdf", | |||
| indZh: pnspsurl + "/user-guide-pub/cht/01c - Create account - p 1.pdf", | |||
| indCn: pnspsurl + "/user-guide-pub/chs/01sc - Create account - p 1.pdf" | |||
| })} | |||
| {getRow({ | |||
| title: <FormattedMessage id="userGuide2" />, | |||
| orgEn: pnspsurl + "/user-guide-pub/eng/02 - Login - c 1.pdf", | |||
| orgZh: pnspsurl + "/user-guide-pub/cht/02c - Login - c 1.pdf", | |||
| orgCn: pnspsurl + "/user-guide-pub/chs/02sc - Login - c 1.pdf", | |||
| indEn: pnspsurl + "/user-guide-pub/eng/02 - Login - p 1.pdf", | |||
| indZh: pnspsurl + "/user-guide-pub/cht/02c - Login - p 1.pdf", | |||
| indCn: pnspsurl + "/user-guide-pub/chs/02sc - Login - p 1.pdf" | |||
| })} | |||
| {getRow({ | |||
| title: <FormattedMessage id="userGuide3" />, | |||
| orgEn: pnspsurl + "/user-guide-pub/eng/03 - Application for publishing a Public Notice in the Gazette - c 1.pdf", | |||
| orgZh: pnspsurl + "/user-guide-pub/cht/03c - Application for publishing a Public Notice in the Gazette - c 1.pdf", | |||
| orgCn: pnspsurl + "/user-guide-pub/chs/03sc - Application for publishing a Public Notice in the Gazette - c 1.pdf", | |||
| indEn: pnspsurl + "/user-guide-pub/eng/03 - Application for publishing a Public Notice in the Gazette - p 1.pdf", | |||
| indZh: pnspsurl + "/user-guide-pub/cht/03c - Application for publishing a Public Notice in the Gazette - p 1.pdf", | |||
| indCn: pnspsurl + "/user-guide-pub/chs/03sc - Application for publishing a Public Notice in the Gazette - p 1.pdf" | |||
| })} | |||
| {getRow({ | |||
| title: <FormattedMessage id="userGuide4" />, | |||
| orgEn: pnspsurl + "/user-guide-pub/eng/04 - Proofreading reply (with correction) - c 1.pdf", | |||
| orgZh: pnspsurl + "/user-guide-pub/cht/04c - Proofreading reply (with correction) - c 1.pdf", | |||
| orgCn: pnspsurl + "/user-guide-pub/chs/04sc - Proofreading reply (with correction) - c 1.pdf", | |||
| indEn: pnspsurl + "/user-guide-pub/eng/04 - Proofreading reply (with correction) - p 1.pdf", | |||
| indZh: pnspsurl + "/user-guide-pub/cht/04c - Proofreading reply (with correction) - p 1.pdf", | |||
| indCn: pnspsurl + "/user-guide-pub/chs/04sc - Proofreading reply (with correction) - p 1.pdf" | |||
| })} | |||
| {getRow({ | |||
| title: <FormattedMessage id="userGuide5" />, | |||
| orgEn: pnspsurl + "/user-guide-pub/eng/05 - Proofreading reply (pass for printing) - c 1.pdf", | |||
| orgZh: pnspsurl + "/user-guide-pub/cht/05c - Proofreading reply (pass for printing) - c 1.pdf", | |||
| orgCn: pnspsurl + "/user-guide-pub/chs/05sc - Proofreading reply (pass for printing) - c 1.pdf", | |||
| indEn: pnspsurl + "/user-guide-pub/eng/05 - Proofreading reply (pass for printing) - p 1.pdf", | |||
| indZh: pnspsurl + "/user-guide-pub/cht/05c - Proofreading reply (pass for printing) - p 1.pdf", | |||
| indCn: pnspsurl + "/user-guide-pub/chs/05sc - Proofreading reply (pass for printing) - p 1.pdf" | |||
| })} | |||
| {getRow({ | |||
| title: <FormattedMessage id="userGuide6" />, | |||
| orgEn: pnspsurl + "/user-guide-pub/eng/06 - Cancellation of application for publishing a Public Notice in the Gazette - c 1.pdf", | |||
| orgZh: pnspsurl + "/user-guide-pub/cht/06c - Cancellation of application for publishing a Public Notice in the Gazette - c 1.pdf", | |||
| orgCn: pnspsurl + "/user-guide-pub/chs/06sc - Cancellation of application for publishing a Public Notice in the Gazette - c 1.pdf", | |||
| indEn: pnspsurl + "/user-guide-pub/eng/06 - Cancellation of application for publishing a Public Notice in the Gazette - p 1.pdf", | |||
| indZh: pnspsurl + "/user-guide-pub/cht/06c - Cancellation of application for publishing a Public Notice in the Gazette - p 1.pdf", | |||
| indCn: pnspsurl + "/user-guide-pub/chs/06sc - Cancellation of application for publishing a Public Notice in the Gazette - p 1.pdf" | |||
| })} | |||
| {getRow({ | |||
| title: <FormattedMessage id="userGuide7" />, | |||
| orgEn: pnspsurl + "/user-guide-pub/eng/07 - Forgot password - c 1.pdf", | |||
| orgZh: pnspsurl + "/user-guide-pub/cht/07c - Forgot password - c 1.pdf", | |||
| orgCn: pnspsurl + "/user-guide-pub/chs/07sc - Forgot password - c 1.pdf", | |||
| indEn: pnspsurl + "/user-guide-pub/eng/07 - Forgot password - p 1.pdf", | |||
| indZh: pnspsurl + "/user-guide-pub/cht/07c - Forgot password - p 1.pdf", | |||
| indCn: pnspsurl + "/user-guide-pub/chs/07sc - Forgot password - p 1.pdf" | |||
| })} | |||
| {getRow({ | |||
| title: <FormattedMessage id="userGuide8" />, | |||
| orgEn: pnspsurl + "/user-guide-pub/eng/08 - Change password - c 1.pdf", | |||
| orgZh: pnspsurl + "/user-guide-pub/cht/08c - Change password - c 1.pdf", | |||
| orgCn: pnspsurl + "/user-guide-pub/chs/08sc - Change password - c 1.pdf", | |||
| indEn: pnspsurl + "/user-guide-pub/eng/08 - Change password - p 1.pdf", | |||
| indZh: pnspsurl + "/user-guide-pub/cht/08c - Change password - p 1.pdf", | |||
| indCn: pnspsurl + "/user-guide-pub/chs/08sc - Change password - p 1.pdf" | |||
| })} | |||
| {getRow({ | |||
| title: <FormattedMessage id="userGuide9" />, | |||
| orgEn: pnspsurl + "/user-guide-pub/eng/09 - Language of email notification - c 1.pdf", | |||
| orgZh: pnspsurl + "/user-guide-pub/cht/09c - Language of email notification - c 1.pdf", | |||
| orgCn: pnspsurl + "/user-guide-pub/chs/09sc - Language of email notification - c 1.pdf", | |||
| indEn: pnspsurl + "/user-guide-pub/eng/09 - Language of email notification - p 1.pdf", | |||
| indZh: pnspsurl + "/user-guide-pub/cht/09c - Language of email notification - p 1.pdf", | |||
| indCn: pnspsurl + "/user-guide-pub/chs/09sc - Language of email notification - p 1.pdf" | |||
| })} | |||
| {getRow({ | |||
| title: <FormattedMessage id="userGuidePub10" />, | |||
| orgEn: pnspsurl + "/user-guide-pub/eng/10-Payment-c1.pdf", | |||
| orgZh: pnspsurl + "/user-guide-pub/cht/10c-Payment-c1.pdf", | |||
| orgCn: pnspsurl + "/user-guide-pub/chs/10sc-Payment-c1.pdf", | |||
| indEn: pnspsurl + "/user-guide-pub/eng/10-Payment-p1.pdf", | |||
| indZh: pnspsurl + "/user-guide-pub/cht/10c-Payment-p1.pdf", | |||
| indCn: pnspsurl + "/user-guide-pub/chs/10sc-Payment-p1.pdf" | |||
| })} | |||
| </table> | |||
| <FormattedMessage id="userGuidePubNote" /> | |||
| </p> | |||
| </div> | |||
| </Grid> | |||
| </Grid> | |||
| </Grid> | |||
| ) | |||
| ); | |||
| } | |||
| export default UserMenuPub1; | |||
| @@ -16,7 +16,9 @@ const PrivacyPolicyPage = Loadable(lazy(() => import('pages/extra-pages/PrivacyP | |||
| const ImportantNoticePage = Loadable(lazy(() => import('pages/extra-pages/ImportantNoticePage'))); | |||
| const AboutUsPage = Loadable(lazy(() => import('pages/extra-pages/AboutUs'))); | |||
| const UserMenuPage = Loadable(lazy(() => import('pages/extra-pages/UserMenu'))); | |||
| // const UserMenuPubPage = Loadable(lazy(() => import('pages/extra-pages/UserMenuPub'))); | |||
| const UserMenuPubPage = Loadable(lazy(() => import('pages/extra-pages/UserMenuPub'))); | |||
| const UserMenu1Page = Loadable(lazy(() => import('pages/extra-pages/UserMenu1'))); | |||
| const UserMenuPub1Page = Loadable(lazy(() => import('pages/extra-pages/UserMenuPub1'))); | |||
| const DatabaseHealthCheckPage = Loadable(lazy(() => import('pages/extra-pages/DatabaseHealthCheck'))); | |||
| @@ -88,10 +90,18 @@ const LoginRoutes = { | |||
| path: 'userGuide', | |||
| element: <UserMenuPage/> | |||
| }, | |||
| // { | |||
| // path: 'userGuidePub', | |||
| // element: <UserMenuPubPage/> | |||
| // }, | |||
| { | |||
| path: 'userGuidePub', | |||
| element: <UserMenuPubPage/> | |||
| }, | |||
| { | |||
| path: 'userGuide1', | |||
| element: <UserMenu1Page/> | |||
| }, | |||
| { | |||
| path: 'userGuidePub1', | |||
| element: <UserMenuPub1Page/> | |||
| }, | |||
| { | |||
| path: 'databaseHealthCheck', | |||
| element: <DatabaseHealthCheckPage/> | |||