initial commit

This commit is contained in:
2021-06-28 16:36:49 +01:00
parent 992d88a6c8
commit c712d41599
103 changed files with 44862 additions and 0 deletions
+12
View File
@@ -0,0 +1,12 @@
import Link from "next/link";
export default function Banner() {
return (
<div className="govuk-phase-banner">
<p className="govuk-phase-banner__content">
<span className="govuk-tag govuk-phase-banner__content__tag">beta</span>
<span className="govuk-phase-banner__text">This is a new service</span>
</p>
</div>
);
}
+95
View File
@@ -0,0 +1,95 @@
import Link from "next/link";
import jsonpath from "jsonpath";
import _ from "lodash";
import { useRouter } from "next/router";
const Breadcrumbs = (props) => {
const {
courseContent,
slug,
activitysub,
activity,
applicant_id,
course_id,
applicant_ref,
} = props;
const router = useRouter();
const { course, section } = router.query;
function Breadcrumb() {
if (slug) {
var coursePageURL = course + "/" + slug;
if (_.isEmpty(courseContent)) {
return null;
} else {
var sectionObj = jsonpath.query(
courseContent,
'$..sections[?(@.path=="/' + coursePageURL + '")]'
);
var breadcrumb = sectionObj[0].chapter.title; //sectionObj[0].chapter
return (
<li className="govuk-breadcrumbs__list-item" aria-current="page">
{breadcrumb}
</li>
);
}
} else {
return null;
}
}
return (
<nav
aria-label={"Breadcrumb for " + _.startCase(_.toLower(course))}
role="navigation"
data-module="track-click"
>
<div className="govuk-breadcrumbs ">
<ol className="govuk-breadcrumbs__list">
<li className="govuk-breadcrumbs__list-item">
<Link href="http://www.gov.uk">
<a className="govuk-breadcrumbs__link">GOV.UK</a>
</Link>
</li>
<li className="govuk-breadcrumbs__list-item">
<Link href="/">
<a className="govuk-breadcrumbs__link">
Understand the Prevent Duty
</a>
</Link>
</li>
<li className="govuk-breadcrumbs__list-item">
<Link href="/portal">
<a className="govuk-breadcrumbs__link">Find the right training</a>
</Link>
</li>
{!_.isEmpty(course) ? (
<li className="govuk-breadcrumbs__list-item">
<Link
href={
"/" +
course +
"?id=" +
applicant_id +
"&refno=" +
applicant_ref +
"&courseid=" +
course_id
}
>
<a className="govuk-breadcrumbs__link">
{_.startCase(_.toLower(course))}
</a>
</Link>
</li>
) : (
""
)}
<Breadcrumb />
</ol>
</div>
</nav>
);
};
export default Breadcrumbs;
+52
View File
@@ -0,0 +1,52 @@
import CookieConsent from "react-cookie-consent";
import Link from "next/link";
const CookieBanner = () => {
return (
<CookieConsent
style={{ position: "inherit", background: "#f3f2f1", display: "block" }}
containerClasses="app-cookie-banner"
buttonClasses="govuk-button"
buttonWrapperClasses="govuk-width-container consentBanner"
declineButtonClasses="govuk-button"
buttonText="Accept all cookies"
disableStyles={true}
enableDeclineButton={true}
flipButtons={true}
hideOnAccept={true}
cookieName="preventTrainingConsent"
>
<div className="app-cookie-banner">
<div
id="global-cookie-message"
className="govuk-clearfix"
data-module="cookie-banner"
role="region"
aria-label="cookie banner"
data-nosnippet=""
>
<div className="govuk-width-container">
<div className="govuk-grid-row">
<div className="govuk-grid-column-two-thirds">
<div className="">
<h2 className="govuk-heading-m">
Tell us whether you accept cookies
</h2>
<p className="govuk-body">
GOV.UK uses cookies which are essential for the site to
work. We also use non-essential cookies to help us improve
government digital services. Any data collected is
anonymised. By continuing to use this site, you agree to our
use of cookies.
</p>
</div>
</div>
</div>
</div>
</div>
</div>
</CookieConsent>
);
};
export default CookieBanner;
+58
View File
@@ -0,0 +1,58 @@
import Link from "next/link";
import Header from "./header";
import Banner from "./breadcrumbs";
import Breadcrumbs from "./banner";
import Footer from "./footer";
const Errorpage = () => {
var m = new Date();
var dateString =
m.getUTCDate() +
"/" +
(m.getUTCMonth() + 1) +
"/" +
m.getUTCFullYear() +
" " +
m.getUTCHours() +
":" +
m.getUTCMinutes() +
":" +
m.getUTCSeconds();
return (
<div className="">
<Header courseName="An error has occured" />
<div className="govuk-width-container">
<main
className="govuk-main-wrapper govuk-main-wrapper--auto-spacing"
id="main-content"
role="main"
>
<div className="govuk-grid-row">
<div className="govuk-grid-column-two-thirds">
<h1 className="govuk-heading-xl">There has been a problem</h1>
<p className="govuk-body">
Unfortunately something has gone wrong!
</p>
<p className="govuk-body govuk-!-margin-top-9">{dateString}</p>
<Link href="/">
<a
role="button"
draggable="false"
className="govuk-button govuk-button--start govuk-!-margin-top-2 govuk-!-margin-bottom-8"
data-module="govuk-button"
>
Try again
</a>
</Link>
<br />
</div>
</div>
</main>
</div>
<Footer footerLinks="" />
</div>
);
};
export default Errorpage;
+84
View File
@@ -0,0 +1,84 @@
import Link from "next/link";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
export default function Footer(props) {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
var linksArr = props.footerLinks || [{}];
const linksBlock = Object.keys(linksArr).map((key) => (
<li className="govuk-footer__inline-list-item" key={key}>
<Link href={linksArr[key].path || "/"}>
<a className="govuk-footer__link">{linksArr[key].title}</a>
</Link>
</li>
));
return (
<footer className="govuk-footer " role="contentinfo">
<div className="govuk-width-container ">
<div className="govuk-footer__meta">
<div className="govuk-footer__meta-item govuk-footer__meta-item--grow">
<h2 className="govuk-visually-hidden">Support links</h2>
<nav role="navigation" aria-labelledby="footer_links">
<ul className="govuk-footer__inline-list" id="footer_links">
<li className="govuk-footer__inline-list-item">
<a href="http://www.gov.uk/government/publications/appeals-casework-portal-documentation" id="aTermsConds" className="govuk-footer__link" target="_blank">{t("common:footer-terms-conditions-link")}</a>
</li>
<li className="govuk-footer__inline-list-item">
<a href="https://www.gov.uk/government/publications/planning-inspectorate-privacy-notices" id="aPrivacy" className="govuk-footer__link"target="_blank">{t("common:footer-privacy-link")}</a>
</li>
<li className="govuk-footer__inline-list-item">
<a href="https://www.gov.uk/guidance/appeals-casework-portal-privacy-cookies" id="aCookies" className="govuk-footer__link" target="_blank">{t("common:footer-cookies-link")}</a>
</li>
<li className="govuk-footer__inline-list-item">
<a href="http://www.gov.uk/government/publications/appeals-casework-portal-documentation" className="govuk-footer__link" id="aAccess" target="_blank">{t("common:footer-accessibility-link")}</a>
</li>
<li className="govuk-footer__inline-list-item">
<a href="http://www.gov.uk/guidance/feedback" id="feedback" target="_blank">{t("common:footer-feedback-link")}</a>
</li>
</ul>
</nav>
<svg
aria-hidden="true"
focusable="false"
className="govuk-footer__licence-logo"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 483.2 195.7"
height="17"
width="41"
>
<path
fill="currentColor"
d="M421.5 142.8V.1l-50.7 32.3v161.1h112.4v-50.7zm-122.3-9.6A47.12 47.12 0 0 1 221 97.8c0-26 21.1-47.1 47.1-47.1 16.7 0 31.4 8.7 39.7 21.8l42.7-27.2A97.63 97.63 0 0 0 268.1 0c-36.5 0-68.3 20.1-85.1 49.7A98 98 0 0 0 97.8 0C43.9 0 0 43.9 0 97.8s43.9 97.8 97.8 97.8c36.5 0 68.3-20.1 85.1-49.7a97.76 97.76 0 0 0 149.6 25.4l19.4 22.2h3v-87.8h-80l24.3 27.5zM97.8 145c-26 0-47.1-21.1-47.1-47.1s21.1-47.1 47.1-47.1 47.2 21 47.2 47S123.8 145 97.8 145"
></path>
</svg>
<span className="govuk-footer__licence-description">
All content is available under the{" "}
<a
className="govuk-footer__link"
href="https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/"
rel="license"
>
Open Government Licence v3.0
</a>
, except where otherwise stated
</span>
</div>
<div className="govuk-footer__meta-item">
<a
className="govuk-footer__link govuk-footer__copyright-logo"
href="https://www.nationalarchives.gov.uk/information-management/re-using-public-sector-information/uk-government-licensing-framework/crown-copyright/"
>
© Crown copyright
</a>
</div>
</div>
</div>
</footer>
);
}
File diff suppressed because one or more lines are too long
+21
View File
@@ -0,0 +1,21 @@
import Link from "next/link";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
export default function CaseComment() {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
return (
<div className="card" id="casescomment-card">
<div className="card-body">
<h3 className="heading-small card-heading">
{t("home:casescomment-card-title")}
</h3>
<p className="govuk-body-s">{t("home:casescomment-card-paragraph-one")}</p>
<p className="govuk-body-s">{t("home:casescomment-card-paragraph-two")}</p>
</div>
</div>
);
}
+49
View File
@@ -0,0 +1,49 @@
import Link from "next/link";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
export default function CaseSearch() {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
return (
<div className="card" id="casesearch-card">
<div className="card-body">
<h3 className="heading-small card-heading">{t("home:casesearch-card-title")}</h3>
<div class="govuk-form-group">
<div id="event-name-hint" classNAme="govuk-hint ">
{t("home:casesearch-card-search-hint")}:
<br />
<span className="govuk-body-s">
{" "}
<span className="govuk-!-font-weight-bold">{t("home:casesearch-card-search-example-label")}:</span>{" "}
APP/A1234/A/99/1234567
</span>
</div>
<input
className="govuk-input"
id="event-name"
name="event-name"
type="text"
aria-describedby="event-name-hint"
/>
</div>
<div class="govuk-form-group">
<button
type="submit"
class="govuk-button"
data-module="govuk-button"
id="submit-search"
formnovalidate=""
>
{t("home:casesearch-card-button")}
</button>
</div>
<Link href="/">
<a>{t("home:casesearch-card-advanced-link")}</a>
</Link>
</div>
</div>
);
}
+23
View File
@@ -0,0 +1,23 @@
import Link from "next/link";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
export default function Inspectorate() {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
return (
<div className="card clear" id="inspectorate-card">
<div className="card-body">
<img src="assets/images/PINS_dual_logo_400.png" />
<p className="govuk-body-s">
{t("home:inspectorate-card-visit-label")}:{" "}
<Link href="/">
<a>{t("home:inspectorate-card-visit-link")}</a>
</Link>
</p>
</div>
</div>
);
}
+84
View File
@@ -0,0 +1,84 @@
import Link from "next/link";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
export default function Login() {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
return (
<div className="card" id="login-card">
<div className="card-body active">
<h3 className="heading-small card-heading">{t("home:login-card-title")}</h3>
<form action="/myportal" method="POST" id="loginForm">
<div class="govuk-form-group">
{" "}
<label
for="user_id"
class="govuk-label"
aria-describedby="user_id-hint"
>
{t("home:login-card-id-label")}
</label>
<div class="govuk-hint" id="user_id-hint">
{t("home:login-card-id-hint")}
</div>
<input
type="text"
name="user_id"
id="user_id"
class="govuk-input govuk-!-width-one-half"
value=""
maxlength="22"
aria-describedby="user_id-hint"
autocomplete="username"
/>
</div>
<div class="govuk-form-group">
{" "}
<label for="password" class="govuk-label">
{t("home:login-card-password-label")}
</label>
<input
type="password"
name="password"
id="password"
class="govuk-input govuk-!-width-three-quarters"
autocomplete="current-password"
/>
</div>
<div class="govuk-form-group">
{/* <button
type="submit"
class="govuk-button"
data-module="govuk-button"
id="continue"
formnovalidate=""
>
{t("home:login-card-button")}
</button> */}
<Link href="/myportal">
<a className="govuk-button">{t("home:login-card-button")}</a>
</Link>
</div>
</form>
<div class="govuk-form-group govuk-!-margin-top-4">
<p className="govuk-body-s">
{t("home:login-card-register-label")}{" "}
<Link href="/">
<a>{t("home:login-card-register-link")}</a>
</Link>
</p>
<p className="govuk-body-s">
{t("home:login-card-forgotten-label")}{" "}
<Link href="/">
<a>{t("home:login-card-forgotten-link")}</a>
</Link>
</p>
</div>
</div>
</div>
);
}
+36
View File
@@ -0,0 +1,36 @@
import Head from "next/head";
import Banner from "../components/banner";
import Footer from "../components/footer";
import Header from "../components/header";
export default function SkipLink(props) {
return (
<div>
<Head>
<title>Appeals Casework Portal</title>
</Head>
<div className="">
<Header courseName="Understand the Prevent Duty" />
<div className="govuk-width-container">
<Banner />
<main
className="govuk-main-wrapper govuk-main-wrapper--auto-spacing"
id="main-content"
role="main"
>
<div className="govuk-grid-row">
<div className="govuk-grid-column-two-thirds">
<noscript>
<h1 className="govuk-heading-l">Please enable javascript</h1>
</noscript>
<h1 className="govuk-heading-m">Loading...</h1>
</div>
</div>
</main>
</div>
<Footer />
</div>
</div>
);
}
+36
View File
@@ -0,0 +1,36 @@
import Link from "next/link";
import { useRouter } from "next/router";
import { useContext } from "react";
import useTranslation from "next-translate/useTranslation";
import Login from "./homepage/login";
import CaseSearch from "./homepage/casesearch";
import Inspectorate from "./homepage/inspectorate";
import CaseComment from "./homepage/casecomment";
export default function Home({ children, pages }) {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
return (
<main
className="govuk-main-wrapper govuk-main-wrapper--auto-spacing"
id="main-content"
role="main"
>
<div className="govuk-grid-row">
<div className="govuk-grid-column-full">
<div className="flex-container grid-row govuk-body ">
<Login />
<CaseSearch/>
<CaseComment/>
<Inspectorate/>
</div>
</div>
</div>
</main>
);
}
+42
View File
@@ -0,0 +1,42 @@
import Link from "next/link";
import { useRouter } from "next/router";
import { useContext } from "react";
import useTranslation from "next-translate/useTranslation";
import MakeNewAppeal from "./myportal/makenewappeal";
import MyCases from "./myportal/mycases";
import SearchCases from "./myportal/searchcases";
import AwaitingSubmission from "./myportal/awaitingsubmission";
import MyRepresentations from "./myportal/myrepresentations";
import WatchedCases from "./myportal/watchedcases";
export default function MyPortal({ children, pages }) {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
return (
<main
className="govuk-main-wrapper govuk-main-wrapper--auto-spacing"
id="main-content"
role="main"
>
<div className="govuk-grid-row">
<div className="govuk-grid-column-full">
<div className="flex-container grid-row govuk-body ">
<MakeNewAppeal />
<MyCases/>
<SearchCases/>
<AwaitingSubmission/>
<MyRepresentations/>
<WatchedCases/>
</div>
</div>
</div>
</main>
);
}
+24
View File
@@ -0,0 +1,24 @@
import Link from "next/link";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
export default function AwaitingSubmission() {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
return (
<div className="card card-3" id="casescomment-card">
<div className="card-body">
<h3 className="heading-small card-heading">
{t("myportal:awatitingsubmission-card-title")}
</h3>
<div className="cardVieAll">
<Link href="/">
<a>{t("myportal:viewall-link")}</a>
</Link>
</div>
</div>
</div>
);
}
+26
View File
@@ -0,0 +1,26 @@
import Link from "next/link";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
export default function MakeNewAppeal() {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
return (
<div className="card card-3" id="casescomment-card">
<div className="card-body">
<h3 className="heading-small card-heading">
{t("myportal:makenewappeal-card-title")}
</h3>
<p className="govuk-body-s">{t("myportal:makenewappeal-card-paragraph-one")}</p>
<p className="govuk-body-s">{t("myportal:makenewappeal-card-paragraph-two")}</p>
<div>
<Link href="/">
<a className="govuk-button">{t("myportal:makenewappeal-card-button-label")}</a>
</Link>
</div>
</div>
</div>
);
}
+24
View File
@@ -0,0 +1,24 @@
import Link from "next/link";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
export default function MyCases() {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
return (
<div className="card card-3" id="casescomment-card">
<div className="card-body">
<h3 className="heading-small card-heading">
{t("myportal:mycases-card-title")}
</h3>
<div className="cardVieAll">
<Link href="/">
<a>{t("myportal:viewall-link")}</a>
</Link>
</div>
</div>
</div>
);
}
+24
View File
@@ -0,0 +1,24 @@
import Link from "next/link";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
export default function MyRepresentations() {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
return (
<div className="card card-3" id="casescomment-card">
<div className="card-body">
<h3 className="heading-small card-heading">
{t("myportal:myrepresentations-card-title")}
</h3>
<div className="cardVieAll">
<Link href="/">
<a>{t("myportal:viewall-link")}</a>
</Link>
</div>
</div>
</div>
);
}
+53
View File
@@ -0,0 +1,53 @@
import Link from "next/link";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
export default function SearchCases() {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
return (
<div className="card card-3" id="casescomment-card">
<div className="card-body">
<h3 className="heading-small card-heading">
{t("myportal:searchcases-card-title")}
</h3>
<div class="govuk-form-group">
<div id="event-name-hint" classNAme="govuk-hint ">
{t("myportal:searchcases-card-search-hint")}:
<br />
<span className="govuk-body-s">
{" "}
<span className="govuk-!-font-weight-bold">
{t("myportal:searchcases-card-search-example-label")}:
</span>{" "}
APP/A1234/A/99/1234567
</span>
</div>
<input
className="govuk-input"
id="event-name"
name="event-name"
type="text"
aria-describedby="event-name-hint"
/>
</div>
<div class="govuk-form-group">
<button
type="submit"
class="govuk-button"
data-module="govuk-button"
id="submit-search"
formnovalidate=""
>
{t("myportal:searchcases-card-button")}
</button>
</div>
<Link href="/">
<a>{t("myportal:searchcases-card-advanced-link")}</a>
</Link>
</div>
</div>
);
}
+24
View File
@@ -0,0 +1,24 @@
import Link from "next/link";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
export default function WatchedCases() {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
return (
<div className="card card-3" id="casescomment-card">
<div className="card-body">
<h3 className="heading-small card-heading">
{t("myportal:watchedcases-card-title")}
</h3>
<div className="cardVieAll">
<Link href="/">
<a>{t("myportal:viewall-link")}</a>
</Link>
</div>
</div>
</div>
);
}