| @@ -8,10 +8,10 @@ | |||||
| <meta name="viewport" content="width=device-width, initial-scale=1" /> | <meta name="viewport" content="width=device-width, initial-scale=1" /> | ||||
| <meta name="theme-color" content="#ffffff" /> | <meta name="theme-color" content="#ffffff" /> | ||||
| <meta name="msapplication-TileColor" content="#da532c"> | <meta name="msapplication-TileColor" content="#da532c"> | ||||
| <meta name="title" content="PNSPS" /> | |||||
| <meta name="title" content="PNSPS - Public Notice Submission and Payment System" /> | |||||
| <meta | <meta | ||||
| name="description" | name="description" | ||||
| content="The Government of the Hong Kong Special Administrative Region Gazette Public Notice Submission and Payment System." | |||||
| content="Public Notice Submission and Payment System - Government Logistics Department" | |||||
| /> | /> | ||||
| <meta | <meta | ||||
| name="keywords" | name="keywords" | ||||
| @@ -19,7 +19,7 @@ | |||||
| /> | /> | ||||
| <meta name="author" content="Government Logistics Department" /> | <meta name="author" content="Government Logistics Department" /> | ||||
| <link rel="apple-touch-icon" href="%PUBLIC_URL%/apple-touch-icon.png" /> | <link rel="apple-touch-icon" href="%PUBLIC_URL%/apple-touch-icon.png" /> | ||||
| <title>PNSPS</title> | |||||
| <title>PNSPS - Public Notice Submission and Payment System</title> | |||||
| <link rel="preconnect" href="https://fonts.gstatic.com" /> | <link rel="preconnect" href="https://fonts.gstatic.com" /> | ||||
| <link | <link | ||||
| href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Poppins:wght@400;500;600;700&family=Roboto:wght@400;500;700&display=swap&family=Public+Sans:wght@400;500;600;700" | href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Poppins:wght@400;500;600;700&family=Roboto:wght@400;500;700&display=swap&family=Public+Sans:wght@400;500;600;700" | ||||
| @@ -18,6 +18,25 @@ export default function usePageTitle(messageIdOrText) { | |||||
| pageTitle = messageIdOrText; | pageTitle = messageIdOrText; | ||||
| } | } | ||||
| document.title = `${pageTitle} - ${systemName} | ${gldName}`; | |||||
| const fullTitle = `${pageTitle} - ${systemName} | ${gldName}`; | |||||
| // Update document title (tab title) | |||||
| document.title = fullTitle; | |||||
| // Update <meta name="title"> and <meta name="description"> so they're language-dependent too | |||||
| const metaTitle = document.querySelector('meta[name="title"]'); | |||||
| if (metaTitle) { | |||||
| metaTitle.setAttribute("content", fullTitle); | |||||
| } | |||||
| const metaDescription = document.querySelector('meta[name="description"]'); | |||||
| if (metaDescription) { | |||||
| metaDescription.setAttribute("content", fullTitle); | |||||
| } | |||||
| // Keep <html lang="..."> in sync with current locale | |||||
| if (document.documentElement) { | |||||
| document.documentElement.lang = intl.locale || "en"; | |||||
| } | |||||
| }, [messageIdOrText, intl]); | }, [messageIdOrText, intl]); | ||||
| } | } | ||||
| @@ -22,6 +22,7 @@ import { | |||||
| isORGLoggedIn, | isORGLoggedIn, | ||||
| isPrimaryLoggedIn | isPrimaryLoggedIn | ||||
| } from "utils/Utils"; | } from "utils/Utils"; | ||||
| import usePageTitle from "components/usePageTitle"; | |||||
| const BackgroundHead = { | const BackgroundHead = { | ||||
| backgroundImage: `url(${titleBackgroundImg})`, | backgroundImage: `url(${titleBackgroundImg})`, | ||||
| @@ -42,6 +43,9 @@ import { | |||||
| const OrganizationDetailPage = () => { | const OrganizationDetailPage = () => { | ||||
| // Localized document title/meta for organisation details (GLD) | |||||
| usePageTitle("organizationProfile"); | |||||
| const params = useParams(); | const params = useParams(); | ||||
| const [formData, setFormData] = React.useState({}) | const [formData, setFormData] = React.useState({}) | ||||
| const [list, setList] = React.useState([]) | const [list, setList] = React.useState([]) | ||||
| @@ -25,10 +25,14 @@ const BackgroundHead = { | |||||
| backgroundColor: '#0C489E', | backgroundColor: '#0C489E', | ||||
| backgroundPosition: 'right' | backgroundPosition: 'right' | ||||
| } | } | ||||
| import usePageTitle from "components/usePageTitle"; | |||||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | // ==============================|| DASHBOARD - DEFAULT ||============================== // | ||||
| const OrganizationDetailPage_FromUser = () => { | const OrganizationDetailPage_FromUser = () => { | ||||
| // Localized document title/meta for organisation details (from user) | |||||
| usePageTitle("organizationProfile"); | |||||
| const params = useParams(); | const params = useParams(); | ||||
| const [formData, setFormData] = useState({}) | const [formData, setFormData] = useState({}) | ||||
| const [isLoading, setLoding] = useState(true); | const [isLoading, setLoding] = useState(true); | ||||
| @@ -6,6 +6,7 @@ import MainCard from "components/MainCard"; | |||||
| import { useEffect, useState } from "react"; | import { useEffect, useState } from "react"; | ||||
| import * as React from "react"; | import * as React from "react"; | ||||
| import { getSearchCriteria } from "auth/utils"; | import { getSearchCriteria } from "auth/utils"; | ||||
| import usePageTitle from "components/usePageTitle"; | |||||
| // import LoadingComponent from "../extra-pages/LoadingComponent"; | // import LoadingComponent from "../extra-pages/LoadingComponent"; | ||||
| // import SearchForm from "./OrganizationSearchForm"; | // import SearchForm from "./OrganizationSearchForm"; | ||||
| @@ -29,6 +30,8 @@ const BackgroundHead = { | |||||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | // ==============================|| DASHBOARD - DEFAULT ||============================== // | ||||
| const OrganizationSearchPage = () => { | const OrganizationSearchPage = () => { | ||||
| // Localized document title/meta for organisation search | |||||
| usePageTitle("organizationProfile"); | |||||
| const [searchCriteria, setSearchCriteria] = useState({}); | const [searchCriteria, setSearchCriteria] = useState({}); | ||||
| const [onReady, setOnReady] = useState(false); | const [onReady, setOnReady] = useState(false); | ||||
| @@ -12,6 +12,7 @@ import {GET_PUBLIC_ORG_USER_LIST, GET_USER_UNLOCK, GET_SET_PRIMARY_USER, GET_SET | |||||
| import * as DateUtils from "utils/DateUtils"; | import * as DateUtils from "utils/DateUtils"; | ||||
| import { FormattedMessage, useIntl } from "react-intl"; | import { FormattedMessage, useIntl } from "react-intl"; | ||||
| import { useTheme } from "@emotion/react"; | import { useTheme } from "@emotion/react"; | ||||
| import usePageTitle from "components/usePageTitle"; | |||||
| const BackgroundHead = { | const BackgroundHead = { | ||||
| backgroundImage: `url(${titleBackgroundImg})`, | backgroundImage: `url(${titleBackgroundImg})`, | ||||
| @@ -28,6 +29,9 @@ const BackgroundHead = { | |||||
| const ManageOrgUserPage = () => { | const ManageOrgUserPage = () => { | ||||
| // Localized document title/meta for manage org users | |||||
| usePageTitle("companyOrUserRecord"); | |||||
| const intl = useIntl(); | const intl = useIntl(); | ||||
| const theme = useTheme(); | const theme = useTheme(); | ||||
| const isMdOrLg = useMediaQuery(theme.breakpoints.up('md')); | const isMdOrLg = useMediaQuery(theme.breakpoints.up('md')); | ||||
| @@ -8,6 +8,7 @@ import Loadable from 'components/Loadable'; | |||||
| import * as HttpUtils from "utils/HttpUtils"; | import * as HttpUtils from "utils/HttpUtils"; | ||||
| import {GET_ORG_COMBO} from "utils/ApiPathConst"; | import {GET_ORG_COMBO} from "utils/ApiPathConst"; | ||||
| import { getSearchCriteria } from "auth/utils"; | import { getSearchCriteria } from "auth/utils"; | ||||
| import usePageTitle from "components/usePageTitle"; | |||||
| const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingComponent'))); | const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingComponent'))); | ||||
| const SearchForm = Loadable(lazy(() => import('./UserSearchForm_Organization'))); | const SearchForm = Loadable(lazy(() => import('./UserSearchForm_Organization'))); | ||||
| @@ -27,6 +28,9 @@ const BackgroundHead = { | |||||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | // ==============================|| DASHBOARD - DEFAULT ||============================== // | ||||
| const UserSearchPage_Organization = () => { | const UserSearchPage_Organization = () => { | ||||
| // Localized document title/meta for organization user search | |||||
| usePageTitle("organizationProfile"); | |||||
| const [orgCombo, setOrgCombo] = useState([]); | const [orgCombo, setOrgCombo] = useState([]); | ||||
| const [searchCriteria, setSearchCriteria] = useState({}); | const [searchCriteria, setSearchCriteria] = useState({}); | ||||
| const [onReady, setOnReady] = useState(false); | const [onReady, setOnReady] = useState(false); | ||||
| @@ -18,10 +18,14 @@ import { useNavigate } from "react-router-dom"; | |||||
| import {PNSPS_LONG_BUTTON_THEME} from "themes/buttonConst"; | import {PNSPS_LONG_BUTTON_THEME} from "themes/buttonConst"; | ||||
| import {ThemeProvider} from "@emotion/react"; | import {ThemeProvider} from "@emotion/react"; | ||||
| import {FormattedMessage, useIntl} from "react-intl"; | import {FormattedMessage, useIntl} from "react-intl"; | ||||
| import usePageTitle from "components/usePageTitle"; | |||||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | // ==============================|| DASHBOARD - DEFAULT ||============================== // | ||||
| const AfterForgotPasswordPage = () => { | const AfterForgotPasswordPage = () => { | ||||
| // Localized document title/meta for forgot password "sent" page | |||||
| usePageTitle("forgotUserPassword"); | |||||
| const intl = useIntl(); | const intl = useIntl(); | ||||
| const navigate = useNavigate(); | const navigate = useNavigate(); | ||||
| @@ -14,11 +14,15 @@ import MainCard from 'components/MainCard'; | |||||
| import {FormattedMessage,} from "react-intl"; | import {FormattedMessage,} from "react-intl"; | ||||
| import { Link } from 'react-router-dom'; | import { Link } from 'react-router-dom'; | ||||
| import CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline'; | import CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline'; | ||||
| import usePageTitle from "components/usePageTitle"; | |||||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | // ==============================|| DASHBOARD - DEFAULT ||============================== // | ||||
| const ResetPasswordSuccess = () => { | const ResetPasswordSuccess = () => { | ||||
| // Localized document title/meta for reset password success | |||||
| usePageTitle("resetPasswordSuccess"); | |||||
| const [isLoading, setLoding] = React.useState(true); | const [isLoading, setLoding] = React.useState(true); | ||||
| React.useEffect(() => { | React.useEffect(() => { | ||||
| @@ -11,6 +11,7 @@ import { | |||||
| import Loadable from 'components/Loadable'; | import Loadable from 'components/Loadable'; | ||||
| import { lazy } from 'react'; | import { lazy } from 'react'; | ||||
| import usePageTitle from "components/usePageTitle"; | |||||
| const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingComponent'))); | const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingComponent'))); | ||||
| const ForgotPasswordApplyForm = Loadable(lazy(() => import('./ForgotPasswordApplyForm'))); | const ForgotPasswordApplyForm = Loadable(lazy(() => import('./ForgotPasswordApplyForm'))); | ||||
| @@ -18,6 +19,8 @@ const ForgotPasswordApplyForm = Loadable(lazy(() => import('./ForgotPasswordAppl | |||||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | // ==============================|| DASHBOARD - DEFAULT ||============================== // | ||||
| const ApplyForm = () => { | const ApplyForm = () => { | ||||
| // Localized document title/meta for forgot password | |||||
| usePageTitle("forgotUserPassword"); | |||||
| // const [userData, setUserData] = React.useState(null); | // const [userData, setUserData] = React.useState(null); | ||||
| // const [selections, setSelection] = React.useState([]); | // const [selections, setSelection] = React.useState([]); | ||||
| const [isLoading, setLoding] = React.useState(true); | const [isLoading, setLoding] = React.useState(true); | ||||
| @@ -18,10 +18,14 @@ import { useNavigate } from "react-router-dom"; | |||||
| import {PNSPS_LONG_BUTTON_THEME} from "themes/buttonConst"; | import {PNSPS_LONG_BUTTON_THEME} from "themes/buttonConst"; | ||||
| import {ThemeProvider} from "@emotion/react"; | import {ThemeProvider} from "@emotion/react"; | ||||
| import {FormattedMessage, useIntl} from "react-intl"; | import {FormattedMessage, useIntl} from "react-intl"; | ||||
| import usePageTitle from "components/usePageTitle"; | |||||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | // ==============================|| DASHBOARD - DEFAULT ||============================== // | ||||
| const AfterForgotUsernamePage = () => { | const AfterForgotUsernamePage = () => { | ||||
| // Localized document title/meta for forgot username "sent" page | |||||
| usePageTitle("forgotUsername"); | |||||
| const intl = useIntl(); | const intl = useIntl(); | ||||
| const navigate = useNavigate(); | const navigate = useNavigate(); | ||||
| @@ -15,12 +15,16 @@ import { | |||||
| Link | Link | ||||
| } from 'react-router-dom'; | } from 'react-router-dom'; | ||||
| import CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline'; | import CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline'; | ||||
| import usePageTitle from "components/usePageTitle"; | |||||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | // ==============================|| DASHBOARD - DEFAULT ||============================== // | ||||
| const ResetPasswordSuccess = () => { | const ResetPasswordSuccess = () => { | ||||
| // Localized document title/meta for forgot-username success | |||||
| usePageTitle("sendUsernameSuccess"); | |||||
| const [isLoading, setLoding] = React.useState(true); | const [isLoading, setLoding] = React.useState(true); | ||||
| React.useEffect(() => { | React.useEffect(() => { | ||||
| @@ -11,6 +11,7 @@ import { | |||||
| import Loadable from 'components/Loadable'; | import Loadable from 'components/Loadable'; | ||||
| import { lazy } from 'react'; | import { lazy } from 'react'; | ||||
| import usePageTitle from "components/usePageTitle"; | |||||
| const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingComponent'))); | const LoadingComponent = Loadable(lazy(() => import('../../extra-pages/LoadingComponent'))); | ||||
| const ForgotUsernameApplyForm = Loadable(lazy(() => import('./ForgotUsernameApplyForm'))); | const ForgotUsernameApplyForm = Loadable(lazy(() => import('./ForgotUsernameApplyForm'))); | ||||
| @@ -18,6 +19,8 @@ const ForgotUsernameApplyForm = Loadable(lazy(() => import('./ForgotUsernameAppl | |||||
| // ==============================|| DASHBOARD - DEFAULT ||============================== // | // ==============================|| DASHBOARD - DEFAULT ||============================== // | ||||
| const ApplyForm = () => { | const ApplyForm = () => { | ||||
| // Localized document title/meta for forgot username | |||||
| usePageTitle("forgotUsername"); | |||||
| // const [userData, setUserData] = React.useState(null); | // const [userData, setUserData] = React.useState(null); | ||||
| // const [selections, setSelection] = React.useState([]); | // const [selections, setSelection] = React.useState([]); | ||||
| const [isLoading, setLoding] = React.useState(true); | const [isLoading, setLoding] = React.useState(true); | ||||
| @@ -23,6 +23,7 @@ import { lazy } from 'react'; | |||||
| import { notifyActionError } from 'utils/CommonFunction'; | import { notifyActionError } from 'utils/CommonFunction'; | ||||
| import axios from "axios"; | import axios from "axios"; | ||||
| import {FormattedMessage, useIntl} from "react-intl"; | import {FormattedMessage, useIntl} from "react-intl"; | ||||
| import usePageTitle from "components/usePageTitle"; | |||||
| const CustomFormWizard = Loadable(lazy(() => import('./auth-forms/CustomFormWizard'))); | const CustomFormWizard = Loadable(lazy(() => import('./auth-forms/CustomFormWizard'))); | ||||
| const AuthWrapper = Loadable(lazy(() => import('./AuthWrapperCustom'))); | const AuthWrapper = Loadable(lazy(() => import('./AuthWrapperCustom'))); | ||||
| // ================================|| REGISTER ||================================ // | // ================================|| REGISTER ||================================ // | ||||
| @@ -35,6 +36,8 @@ const Register = () => { | |||||
| const [base64Url, setBase64Url] = useState("") | const [base64Url, setBase64Url] = useState("") | ||||
| const [checkCode, setCheckCode] = useState("") | const [checkCode, setCheckCode] = useState("") | ||||
| const intl = useIntl(); | const intl = useIntl(); | ||||
| // Localized document title/meta for register flow | |||||
| usePageTitle("register"); | |||||
| const steps = [ | const steps = [ | ||||
| intl.formatMessage({id: 'personalInformation'}), | intl.formatMessage({id: 'personalInformation'}), | ||||
| intl.formatMessage({id: 'preview'}), | intl.formatMessage({id: 'preview'}), | ||||
| @@ -16,6 +16,7 @@ import { I_AM_SMART_PATH } from "utils/ApiPathConst"; | |||||
| import * as React from 'react'; | import * as React from 'react'; | ||||
| import { FormattedMessage, useIntl } from "react-intl"; | import { FormattedMessage, useIntl } from "react-intl"; | ||||
| import usePageTitle from "components/usePageTitle"; | |||||
| // ================================|| LOGIN ||================================ // | // ================================|| LOGIN ||================================ // | ||||
| @@ -24,6 +25,9 @@ const RegisterCustom = () => { | |||||
| const intl = useIntl(); | const intl = useIntl(); | ||||
| const { locale } = intl; | const { locale } = intl; | ||||
| // Localized document title/meta on register landing page | |||||
| usePageTitle("register"); | |||||
| const registerWithIAmSmart = () => { | const registerWithIAmSmart = () => { | ||||
| getQRWithIAmSmart(); | getQRWithIAmSmart(); | ||||
| setIsPopUp(false); | setIsPopUp(false); | ||||
| @@ -46,6 +46,7 @@ import { FormattedMessage, useIntl } from "react-intl"; | |||||
| import { SysContext } from "components/SysSettingProvider" | import { SysContext } from "components/SysSettingProvider" | ||||
| import { IAmSmartButton } from "components/iAmSmartButton"; | import { IAmSmartButton } from "components/iAmSmartButton"; | ||||
| import usePageTitle from "components/usePageTitle"; | |||||
| const LoadingComponent = Loadable(lazy(() => import('pages/extra-pages/LoadingComponent'))); | const LoadingComponent = Loadable(lazy(() => import('pages/extra-pages/LoadingComponent'))); | ||||
| // ============================|| FIREBASE - LOGIN ||============================ // | // ============================|| FIREBASE - LOGIN ||============================ // | ||||
| @@ -57,6 +58,9 @@ const AuthLoginCustom = () => { | |||||
| const { locale } = intl; | const { locale } = intl; | ||||
| const { sysSetting } = useContext(SysContext); | const { sysSetting } = useContext(SysContext); | ||||
| // Localized document title/meta on login page | |||||
| usePageTitle("login"); | |||||
| const [showPassword, setShowPassword] = useState(false); | const [showPassword, setShowPassword] = useState(false); | ||||
| const handleClickShowPassword = () => { | const handleClickShowPassword = () => { | ||||
| setShowPassword(!showPassword); | setShowPassword(!showPassword); | ||||
| @@ -4,11 +4,14 @@ import { | |||||
| import { useNavigate } from "react-router-dom"; | import { useNavigate } from "react-router-dom"; | ||||
| import { useIntl } from 'react-intl'; | import { useIntl } from 'react-intl'; | ||||
| import MainCard from 'components/MainCard'; | import MainCard from 'components/MainCard'; | ||||
| import usePageTitle from "components/usePageTitle"; | |||||
| //import errorImg from '@src/assets/images/pages/error.svg' | //import errorImg from '@src/assets/images/pages/error.svg' | ||||
| const ErrorPage = () => { | const ErrorPage = () => { | ||||
| const intl = useIntl(); | const intl = useIntl(); | ||||
| // Localized document title/meta for error page | |||||
| usePageTitle("error"); | |||||
| let navigate = useNavigate(); | let navigate = useNavigate(); | ||||
| const handleToHomePage = () =>{ | const handleToHomePage = () =>{ | ||||
| let path = `/`; | let path = `/`; | ||||
| @@ -1,5 +1,6 @@ | |||||
| import { Grid, Typography, Stack } from '@mui/material'; | import { Grid, Typography, Stack } from '@mui/material'; | ||||
| import { useIntl, FormattedMessage } from 'react-intl'; | import { useIntl, FormattedMessage } from 'react-intl'; | ||||
| import usePageTitle from "components/usePageTitle"; | |||||
| import titleBackgroundImg from 'assets/images/dashboard/gazette-bar.png'; | import titleBackgroundImg from 'assets/images/dashboard/gazette-bar.png'; | ||||
| @@ -15,6 +16,8 @@ const BackgroundHead = { | |||||
| const ImportantNotice = () => { | const ImportantNotice = () => { | ||||
| const intl = useIntl(); | const intl = useIntl(); | ||||
| // Localized document title/meta for Important Notice | |||||
| usePageTitle("importantNotice"); | |||||
| const htmlContent = intl.formatMessage({ id: 'importantNoticeContent', defaultMessage: '' }); | const htmlContent = intl.formatMessage({ id: 'importantNoticeContent', defaultMessage: '' }); | ||||
| return ( | return ( | ||||
| @@ -1,5 +1,6 @@ | |||||
| import { Grid, Typography, Stack } from '@mui/material'; | import { Grid, Typography, Stack } from '@mui/material'; | ||||
| import { useIntl, FormattedMessage } from 'react-intl'; | import { useIntl, FormattedMessage } from 'react-intl'; | ||||
| import usePageTitle from "components/usePageTitle"; | |||||
| import titleBackgroundImg from 'assets/images/dashboard/gazette-bar.png'; | import titleBackgroundImg from 'assets/images/dashboard/gazette-bar.png'; | ||||
| @@ -15,6 +16,8 @@ const BackgroundHead = { | |||||
| const PrivacyPolicy = () => { | const PrivacyPolicy = () => { | ||||
| const intl = useIntl(); | const intl = useIntl(); | ||||
| // Localized document title/meta for Privacy Policy | |||||
| usePageTitle("privacyPolicy"); | |||||
| const htmlContent = intl.formatMessage({ id: 'privacyPolicyContent', defaultMessage: '' }); | const htmlContent = intl.formatMessage({ id: 'privacyPolicyContent', defaultMessage: '' }); | ||||
| return ( | return ( | ||||
| @@ -10,6 +10,7 @@ import { Grid, Typography, Stack } from "@mui/material"; | |||||
| import { useState, useEffect, lazy } from "react"; | import { useState, useEffect, lazy } from "react"; | ||||
| import Loadable from "components/Loadable"; | import Loadable from "components/Loadable"; | ||||
| import { useIntl, FormattedMessage } from "react-intl"; | import { useIntl, FormattedMessage } from "react-intl"; | ||||
| import usePageTitle from "components/usePageTitle"; | |||||
| import DownloadIcon from "@mui/icons-material/Download"; | import DownloadIcon from "@mui/icons-material/Download"; | ||||
| import titleBackgroundImg from "assets/images/dashboard/gazette-bar.png"; | import titleBackgroundImg from "assets/images/dashboard/gazette-bar.png"; | ||||
| @@ -44,6 +45,9 @@ const UserMenuPub1 = () => { | |||||
| const [onReady, setOnReady] = useState(false); | const [onReady, setOnReady] = useState(false); | ||||
| // Localized document title/meta for /userGuidePub | |||||
| usePageTitle("userGuide"); | |||||
| useEffect(() => { | useEffect(() => { | ||||
| setOnReady(true); | setOnReady(true); | ||||
| }, [locale]); | }, [locale]); | ||||