| @@ -1,8 +1,8 @@ | |||||
| import { useState, useEffect, createContext } from 'react'; | |||||
| import { useState, useEffect, createContext, useMemo } from 'react'; | |||||
| import { IntlProvider } from 'react-intl'; | 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_COMBO, GET_CONTENT } from "utils/ApiPathConst"; | ||||
| import { get } from "utils/HttpUtils"; | import { get } from "utils/HttpUtils"; | ||||
| @@ -10,72 +10,106 @@ import { get } from "utils/HttpUtils"; | |||||
| const LocaleContext = createContext(); | const LocaleContext = createContext(); | ||||
| export const I18nProvider = ({ children }) => { | 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 = () => { | const loadTermsAndConditions = () => { | ||||
| // load both endpoints then merge into state | |||||
| const p1 = new Promise((resolve) => { | |||||
| get({ | 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({ | 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={() => { | onClick={() => { | ||||
| setLocale("en") | setLocale("en") | ||||
| localStorage.setItem('locale','en'); | localStorage.setItem('locale','en'); | ||||
| setOpen(false); | |||||
| }} | }} | ||||
| > | > | ||||
| <ListItemText | <ListItemText | ||||
| @@ -108,8 +109,9 @@ const LocaleSelector = () => { | |||||
| <ListItem disablePadding> | <ListItem disablePadding> | ||||
| <ListItemButton | <ListItemButton | ||||
| onClick={() => { | onClick={() => { | ||||
| setLocale("zh-HK") | |||||
| setLocale("zh-HK"); | |||||
| localStorage.setItem('locale','zh-HK'); | localStorage.setItem('locale','zh-HK'); | ||||
| setOpen(false); | |||||
| }} | }} | ||||
| > | > | ||||
| <ListItemText | <ListItemText | ||||
| @@ -122,6 +124,7 @@ const LocaleSelector = () => { | |||||
| onClick={() => { | onClick={() => { | ||||
| setLocale("zh-CN") | setLocale("zh-CN") | ||||
| localStorage.setItem('locale','zh-CN'); | localStorage.setItem('locale','zh-CN'); | ||||
| setOpen(false); | |||||
| }} | }} | ||||
| > | > | ||||
| <ListItemText | <ListItemText | ||||
| @@ -33,6 +33,7 @@ import { FormattedMessage, useIntl } from "react-intl"; | |||||
| import Loadable from 'components/Loadable'; | import Loadable from 'components/Loadable'; | ||||
| import { useState, useEffect, lazy } from 'react'; | import { useState, useEffect, lazy } from 'react'; | ||||
| const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingComponent'))); | const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingComponent'))); | ||||
| import { checkPaymentSuspension } from "utils/Utils"; | |||||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | // ==============================|| DASHBOARD - DEFAULT ||============================== // | ||||
| @@ -372,8 +373,28 @@ const PublicNoticeApplyForm = ({ loadedData, _selections, gazetteIssueList }) => | |||||
| <th style={tabelStyle} width="300" align="left"><FormattedMessage id="PaymentCoonpletDealine" /></th> | <th style={tabelStyle} width="300" align="left"><FormattedMessage id="PaymentCoonpletDealine" /></th> | ||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td style={tabelStyle}> | |||||
| <td style={{ ...tabelStyle, verticalAlign: 'top'}}> | |||||
| <FormattedMessage id="payOnline" /> | <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={() => { | <br /><a href="#payOnlineDetails" color='#fff' onClick={() => { | ||||
| setWarningTitle(intl.formatMessage({ id: "paymentMeans" }) + ": " + intl.formatMessage({ id: "payOnline" })) | setWarningTitle(intl.formatMessage({ id: "paymentMeans" }) + ": " + intl.formatMessage({ id: "payOnline" })) | ||||
| setWarningText( | setWarningText( | ||||
| @@ -388,8 +409,8 @@ const PublicNoticeApplyForm = ({ loadedData, _selections, gazetteIssueList }) => | |||||
| setIsWarningPopUp(true); | setIsWarningPopUp(true); | ||||
| }}><u><FormattedMessage id="viewDetail" /></u></a> | }}><u><FormattedMessage id="viewDetail" /></u></a> | ||||
| </td> | </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={{ | <FormattedMessage id="payOnlineRemark" values={{ | ||||
| date: DateUtils.dateFormat(closeDate, dft) | date: DateUtils.dateFormat(closeDate, dft) | ||||
| }} /> | }} /> | ||||
| @@ -85,11 +85,11 @@ const UserInformationCard_Organization = ({ userData, loadDataFun, orgData }) => | |||||
| countryCode: values.fax_countryCode, | countryCode: values.fax_countryCode, | ||||
| faxNumber: values.faxNumber | faxNumber: values.faxNumber | ||||
| }, | }, | ||||
| identification: values.identification, | |||||
| // identification: values.identification, | |||||
| emailBus: values.emailBus, | emailBus: values.emailBus, | ||||
| contactPerson: values.contactPerson, | contactPerson: values.contactPerson, | ||||
| orgId: values.orgId?.id, | orgId: values.orgId?.id, | ||||
| preferLocale: values.preferLocale.type | |||||
| preferLocale: values.preferLocale?.type | |||||
| }, | }, | ||||
| onSuccess: function () { | onSuccess: function () { | ||||
| notifySaveSuccess() | notifySaveSuccess() | ||||
| @@ -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'; | import DownloadIcon from '@mui/icons-material/Download'; | ||||
| const UserMenu = () => { | |||||
| const UserMenuPub = () => { | |||||
| const intl = useIntl(); | const intl = useIntl(); | ||||
| const { locale } = intl; | const { locale } = intl; | ||||
| const [onReady, setOnReady] = useState(false); | 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 ImportantNoticePage = Loadable(lazy(() => import('pages/extra-pages/ImportantNoticePage'))); | ||||
| const AboutUsPage = Loadable(lazy(() => import('pages/extra-pages/AboutUs'))); | const AboutUsPage = Loadable(lazy(() => import('pages/extra-pages/AboutUs'))); | ||||
| const UserMenuPage = Loadable(lazy(() => import('pages/extra-pages/UserMenu'))); | 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'))); | const DatabaseHealthCheckPage = Loadable(lazy(() => import('pages/extra-pages/DatabaseHealthCheck'))); | ||||
| @@ -88,10 +90,18 @@ const LoginRoutes = { | |||||
| path: 'userGuide', | path: 'userGuide', | ||||
| element: <UserMenuPage/> | element: <UserMenuPage/> | ||||
| }, | }, | ||||
| // { | |||||
| // path: 'userGuidePub', | |||||
| // element: <UserMenuPubPage/> | |||||
| // }, | |||||
| { | |||||
| path: 'userGuidePub', | |||||
| element: <UserMenuPubPage/> | |||||
| }, | |||||
| { | |||||
| path: 'userGuide1', | |||||
| element: <UserMenu1Page/> | |||||
| }, | |||||
| { | |||||
| path: 'userGuidePub1', | |||||
| element: <UserMenuPub1Page/> | |||||
| }, | |||||
| { | { | ||||
| path: 'databaseHealthCheck', | path: 'databaseHealthCheck', | ||||
| element: <DatabaseHealthCheckPage/> | element: <DatabaseHealthCheckPage/> | ||||