// File: src/pages/userGuide/UserMenuPub1.jsx
// Notes:
// - No new libraries.
// - Fixes: target="_blank", rel="noopener noreferrer"
// - Adds aria-label for icon-only download links (WCAG 2.4.4 / 1.1.1 friendly)
// - Fixes invalid HTML: no
wrapping
// - Adds /, scope, and React keys
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 usePageTitle from "components/usePageTitle";
import DownloadIcon from "@mui/icons-material/Download";
import titleBackgroundImg from "assets/images/dashboard/gazette-bar.png";
const LoadingComponent = Loadable(lazy(() => import("pages/extra-pages/LoadingComponent")));
const BackgroundHead = {
backgroundImage: `url(${titleBackgroundImg})`,
width: "auto",
height: "auto",
backgroundSize: "contain",
backgroundRepeat: "no-repeat",
backgroundColor: "#0c489e",
backgroundPosition: "right",
};
const tableStyle = {
fontFamily: "arial, sans-serif",
borderCollapse: "collapse",
width: "100%",
};
const cellStyle = {
border: "1px solid #dddddd",
textAlign: "left",
padding: "8px",
};
const UserMenuPub1 = () => {
const intl = useIntl();
const { locale } = intl;
const [onReady, setOnReady] = useState(false);
// Localized document title/meta for /userGuidePub
usePageTitle("userGuide");
useEffect(() => {
setOnReady(true);
}, [locale]);
const pnspsurl = `https://${window.location.hostname}`;
const pickByLocale = (en, zhHK, zhCN) => (locale === "zh-HK" ? zhHK : locale === "en" ? en : zhCN);
// If you already created downloadPdfAria in i18n, keep it.
// Example en: "Download {guide} PDF ({userType})"
const buildAria = (guideId, userTypeId) => {
const guideTitle = intl.formatMessage({ id: guideId });
const userType = intl.formatMessage({ id: userTypeId });
return intl.formatMessage(
{ id: "downloadPdfAria", defaultMessage: "Download {guide} PDF ({userType})" },
{ guide: guideTitle, userType }
);
};
const rows = [
{
id: "userGuide1",
org: {
en: `${pnspsurl}/user-guide-pub-1/eng/01 - Create account - c 1.pdf`,
zhHK: `${pnspsurl}/user-guide-pub-1/cht/01c - Create account - c 1.pdf`,
zhCN: `${pnspsurl}/user-guide-pub-1/chs/01sc - Create account - c 1.pdf`,
},
ind: {
en: `${pnspsurl}/user-guide-pub-1/eng/01 - Create account - p 1.pdf`,
zhHK: `${pnspsurl}/user-guide-pub-1/cht/01c - Create account - p 1.pdf`,
zhCN: `${pnspsurl}/user-guide-pub-1/chs/01sc - Create account - p 1.pdf`,
},
},
{
id: "userGuide2",
org: {
en: `${pnspsurl}/user-guide-pub-1/eng/02 - Login - c 1.pdf`,
zhHK: `${pnspsurl}/user-guide-pub-1/cht/02c - Login - c 1.pdf`,
zhCN: `${pnspsurl}/user-guide-pub-1/chs/02sc - Login - c 1.pdf`,
},
ind: {
en: `${pnspsurl}/user-guide-pub-1/eng/02 - Login - p 1.pdf`,
zhHK: `${pnspsurl}/user-guide-pub-1/cht/02c - Login - p 1.pdf`,
zhCN: `${pnspsurl}/user-guide-pub-1/chs/02sc - Login - p 1.pdf`,
},
},
{
id: "userGuide3", // UPDATED TO v2
org: {
en: `${pnspsurl}/user-guide-pub-1/eng/03 - Application for publishing a Public Notice in the Gazette - c 2.pdf`,
zhHK: `${pnspsurl}/user-guide-pub-1/cht/03c - Application for publishing a Public Notice in the Gazette - c 2.pdf`,
zhCN: `${pnspsurl}/user-guide-pub-1/chs/03sc - Application for publishing a Public Notice in the Gazette - c 2.pdf`,
},
ind: {
en: `${pnspsurl}/user-guide-pub-1/eng/03 - Application for publishing a Public Notice in the Gazette - p 2.pdf`,
zhHK: `${pnspsurl}/user-guide-pub-1/cht/03c - Application for publishing a Public Notice in the Gazette - p 2.pdf`,
zhCN: `${pnspsurl}/user-guide-pub-1/chs/03sc - Application for publishing a Public Notice in the Gazette - p 2.pdf`,
},
},
{
id: "userGuide4",
org: {
en: `${pnspsurl}/user-guide-pub-1/eng/04 - Proofreading reply (with correction) - c 2.pdf`,
zhHK: `${pnspsurl}/user-guide-pub-1/cht/04c - Proofreading reply (with correction) - c 2.pdf`,
zhCN: `${pnspsurl}/user-guide-pub-1/chs/04sc - Proofreading reply (with correction) - c 2.pdf`,
},
ind: {
en: `${pnspsurl}/user-guide-pub-1/eng/04 - Proofreading reply (with correction) - p 2.pdf`,
zhHK: `${pnspsurl}/user-guide-pub-1/cht/04c - Proofreading reply (with correction) - p 2.pdf`,
zhCN: `${pnspsurl}/user-guide-pub-1/chs/04sc - Proofreading reply (with correction) - p 2.pdf`,
},
},
{
id: "userGuide5",
org: {
en: `${pnspsurl}/user-guide-pub-1/eng/05 - Proofreading reply (pass for printing) - c 2.pdf`,
zhHK: `${pnspsurl}/user-guide-pub-1/cht/05c - Proofreading reply (pass for printing) - c 2.pdf`,
zhCN: `${pnspsurl}/user-guide-pub-1/chs/05sc - Proofreading reply (pass for printing) - c 2.pdf`,
},
ind: {
en: `${pnspsurl}/user-guide-pub-1/eng/05 - Proofreading reply (pass for printing) - p 2.pdf`,
zhHK: `${pnspsurl}/user-guide-pub-1/cht/05c - Proofreading reply (pass for printing) - p 2.pdf`,
zhCN: `${pnspsurl}/user-guide-pub-1/chs/05sc - Proofreading reply (pass for printing) - p 2.pdf`,
},
},
{
id: "userGuide6",
org: {
en: `${pnspsurl}/user-guide-pub-1/eng/06 - Cancellation of application for publishing a Public Notice in the Gazette - c 1.pdf`,
zhHK: `${pnspsurl}/user-guide-pub-1/cht/06c - Cancellation of application for publishing a Public Notice in the Gazette - c 1.pdf`,
zhCN: `${pnspsurl}/user-guide-pub-1/chs/06sc - Cancellation of application for publishing a Public Notice in the Gazette - c 1.pdf`,
},
ind: {
en: `${pnspsurl}/user-guide-pub-1/eng/06 - Cancellation of application for publishing a Public Notice in the Gazette - p 1.pdf`,
zhHK: `${pnspsurl}/user-guide-pub-1/cht/06c - Cancellation of application for publishing a Public Notice in the Gazette - p 1.pdf`,
zhCN: `${pnspsurl}/user-guide-pub-1/chs/06sc - Cancellation of application for publishing a Public Notice in the Gazette - p 1.pdf`,
},
},
{
id: "userGuide7",
org: {
en: `${pnspsurl}/user-guide-pub-1/eng/07 - Forgot password - c 1.pdf`,
zhHK: `${pnspsurl}/user-guide-pub-1/cht/07c - Forgot password - c 1.pdf`,
zhCN: `${pnspsurl}/user-guide-pub-1/chs/07sc - Forgot password - c 1.pdf`,
},
ind: {
en: `${pnspsurl}/user-guide-pub-1/eng/07 - Forgot password - p 1.pdf`,
zhHK: `${pnspsurl}/user-guide-pub-1/cht/07c - Forgot password - p 1.pdf`,
zhCN: `${pnspsurl}/user-guide-pub-1/chs/07sc - Forgot password - p 1.pdf`,
},
},
{
id: "userGuide8",
org: {
en: `${pnspsurl}/user-guide-pub-1/eng/08 - Change password - c 1.pdf`,
zhHK: `${pnspsurl}/user-guide-pub-1/cht/08c - Change password - c 1.pdf`,
zhCN: `${pnspsurl}/user-guide-pub-1/chs/08sc - Change password - c 1.pdf`,
},
ind: {
en: `${pnspsurl}/user-guide-pub-1/eng/08 - Change password - p 1.pdf`,
zhHK: `${pnspsurl}/user-guide-pub-1/cht/08c - Change password - p 1.pdf`,
zhCN: `${pnspsurl}/user-guide-pub-1/chs/08sc - Change password - p 1.pdf`,
},
},
{
id: "userGuide9",
org: {
en: `${pnspsurl}/user-guide-pub-1/eng/09 - Language of email notification - c 1.pdf`,
zhHK: `${pnspsurl}/user-guide-pub-1/cht/09c - Language of email notification - c 1.pdf`,
zhCN: `${pnspsurl}/user-guide-pub-1/chs/09sc - Language of email notification - c 1.pdf`,
},
ind: {
en: `${pnspsurl}/user-guide-pub-1/eng/09 - Language of email notification - p 1.pdf`,
zhHK: `${pnspsurl}/user-guide-pub-1/cht/09c - Language of email notification - p 1.pdf`,
zhCN: `${pnspsurl}/user-guide-pub-1/chs/09sc - Language of email notification - p 1.pdf`,
},
},
{
id: "userGuidePub10",
org: {
en: `${pnspsurl}/user-guide-pub-1/eng/10-Payment-c1.pdf`,
zhHK: `${pnspsurl}/user-guide-pub-1/cht/10c-Payment-c1.pdf`,
zhCN: `${pnspsurl}/user-guide-pub-1/chs/10sc-Payment-c1.pdf`,
},
ind: {
en: `${pnspsurl}/user-guide-pub-1/eng/10-Payment-p1.pdf`,
zhHK: `${pnspsurl}/user-guide-pub-1/cht/10c-Payment-p1.pdf`,
zhCN: `${pnspsurl}/user-guide-pub-1/chs/10sc-Payment-p1.pdf`,
},
},
];
const renderDownloadLink = (href, ariaLabel) => (
);
if (!onReady) {
return (
);
}
return (
|
|
|
{rows.map((r) => {
const orgHref = pickByLocale(r.org.en, r.org.zhHK, r.org.zhCN);
const indHref = pickByLocale(r.ind.en, r.ind.zhHK, r.ind.zhCN);
const guideTitle = intl.formatMessage({ id: r.id });
return (
| {guideTitle} |
{renderDownloadLink(orgHref, buildAria(r.id, "forOrgUser"))}
|
{renderDownloadLink(indHref, buildAria(r.id, "forIndUser"))}
|
);
})}
);
};
export default UserMenuPub1;