Merged PR 420: commit dev branch to testing

Related work items: #5246, #5247, #5248, #5249, #5270, #5271, #5281, #5529
This commit is contained in:
Gary Trembath
2021-09-01 16:22:50 +00:00
83 changed files with 6778 additions and 362 deletions
+100 -3
View File
@@ -50,9 +50,15 @@ const Breadcrumbs = (props) => {
</Link>
</li>
<li className="govuk-breadcrumbs__list-item">
<Link href="/">
<Link
href={
router.pathname.includes("dns") ? "/dns" : "/"
}
>
<a className="govuk-breadcrumbs__link">
{t("common:service-name")}
{router.pathname.includes("dns")
? t("dnsCommon:service-name")
: t("common:service-name")}
</a>
</Link>
</li>
@@ -167,7 +173,31 @@ const Breadcrumbs = (props) => {
</Link>
</li>
<li className="govuk-breadcrumbs__list-item">
Case Reference: CAS-00010-J9W6L5
Case Reference:{" "}
{
props.props.currentView.caseReference
.currentReference
}
</li>
</>
) : (
""
)}
{router.pathname == "/representation" ? (
<>
<li className="govuk-breadcrumbs__list-item">
<Link href="/myportal">
<a className="govuk-breadcrumbs__link">
My Portal
</a>
</Link>
</li>
<li className="govuk-breadcrumbs__list-item">
Make representation for:{" "}
{
props.props.currentView.caseReference
.currentReference
}
</li>
</>
) : (
@@ -214,6 +244,73 @@ const Breadcrumbs = (props) => {
) : (
""
)}
{router.pathname == "/dns" ? (
<>
<li className="govuk-breadcrumbs__list-item">
<Link href="/dns">
<a className="govuk-breadcrumbs__link">
{t("dnsCommon:service-name")}
</a>
</Link>
</li>
</>
) : (
""
)}
{router.pathname == "/dns/application-process" ? (
<>
<li className="govuk-breadcrumbs__list-item">
Guidance
</li>
</>
) : (
""
)}
{router.pathname == "/dns/help" ? (
<>
<li className="govuk-breadcrumbs__list-item">
Help
</li>
</>
) : (
""
)}
{router.pathname == "/dns/contact-us" ? (
<>
<li className="govuk-breadcrumbs__list-item">
Contact us
</li>
</>
) : (
""
)}
{router.pathname == "/dns/applications" ? (
<>
<li className="govuk-breadcrumbs__list-item">
{t("dnsApplications:page-title")}
</li>
</>
) : (
""
)}
{router.pathname == "/dns/application-view" ? (
<>
<li className="govuk-breadcrumbs__list-item">
<Link href="/dns/applications">
<a className="govuk-breadcrumbs__link">
{t(
"dnsApplicationView:page-parent-title"
)}
</a>
</Link>
</li>
<li className="govuk-breadcrumbs__list-item">
TWA - Morlais Demonstration Zone
</li>
</>
) : (
""
)}
{!_.isEmpty(slug) ? (
<>
<li className="govuk-breadcrumbs__list-item">
+14 -3
View File
@@ -5,7 +5,7 @@ import useTranslation from "next-translate/useTranslation";
import Summary from "./case/summary";
import Documents from "./case/documents";
export default function CaseSummary({ children, pages }) {
const CaseSummary = (props) => {
let { t } = useTranslation();
const router = useRouter();
@@ -19,10 +19,21 @@ export default function CaseSummary({ children, pages }) {
>
<div className="govuk-grid-row">
<div className="govuk-grid-column-full">
<Summary />
<Summary
myCases={props.myCases}
myRepresentations={props.myRepresentations}
watchedCases={props.watchedCases}
awaitingSubmission={props.awaitingSubmission}
caseReference={props.caseReference}
currentType={props.currentType}
searchResultsObj={props.searchResultsObj}
searchString={props.searchString}
/>
<Documents />
</div>
</div>
</main>
);
}
};
export default CaseSummary;
@@ -0,0 +1,212 @@
import Link from "next/link";
import { useState, useEffect } from "react";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
import jsonpath from "jsonpath";
import _ from "lodash";
import { Field, FieldArray, reduxForm, formValueSelector } from "redux-form";
import { connect } from "react-redux";
import { useDropzone } from "react-dropzone";
import { setRepresentationCapacity } from "../../../store/currentView/action";
import RepCapacitySelection from "./representationCapacitySelection";
import RepDetails from "./representationDetails";
import RepAppellant from "./representationAppellant";
import RepAgent from "./representationAgent";
import RepInterestedPartyPerson from "./representationInterestedPartyPerson";
import RepLandOwner from "./representationLandowner";
import {
RenderPickList,
RenderRadioList,
RenderTextfield,
} from "./representationElements";
let MakeRepresentation = (props) => {
let { t } = useTranslation();
const { acceptedFiles, getRootProps, getInputProps } = useDropzone();
const [clearRepForm, setClearRepForm] = useState(false);
const router = useRouter();
const { locale } = router;
const {
caseReference,
myCases,
myRepresentations,
watchedCases,
awaitingSubmission,
searchResultsObj,
currentType,
currentView,
setRepresentationCapacity,
} = props;
const formObj = props.props.form;
let setCaseQueryObj = props[currentType];
var casesObj = {};
currentType == "searchResultsObj"
? (casesObj = jsonpath.query(
setCaseQueryObj,
'$..[?(@.title=="' + caseReference + '")]'
))
: (casesObj = jsonpath.query(
setCaseQueryObj,
'$..[?(@.reference=="' + caseReference + '")]'
));
casesObj = Object.assign({}, ...casesObj);
const capacityOptionsArr = [
"Appellant",
"Agent",
"Interested Party/Person",
"Land Owner",
];
const appellantApplicantRepresentationArr = [
"Other",
"Statement",
"Statement of common ground",
"Written statement of evidence",
];
const interestedPersonRepresentationArr = [
"Interested Party/Person correspondence",
];
const landOwnerRepresentationArr = [
"Other",
"Statement",
"Written statement of evidence",
];
const repCapacityType = () => {
currentView.representationCapacity == false
? false
: _.isEmpty(formObj["representationForm"])
? false
: _.isEmpty(formObj["representationForm"].values)
? false
: _.isEmpty(
formObj["representationForm"].values.representationCapacity
)
? setRepresentationCapacity(false)
: setRepresentationCapacity(
formObj["representationForm"].values.representationCapacity
.replace(/[\s\-\+\(\)\,\/]/g, "")
.toLowerCase()
);
return currentView.representationCapacity;
};
const whichControl = () => {
repCapacityType();
switch (currentView.representationCapacity) {
case false:
return (
<RepCapacitySelection
formObj={formObj}
capacityOptionsArr={capacityOptionsArr}
currentType={currentType}
casesObj={casesObj}
setRepresentationCapacity={setRepresentationCapacity}
/>
);
break;
case "appellant":
setRepresentationCapacity("appellant");
return (
<RepAppellant
formObj={formObj}
appellantApplicantRepresentationArr={
appellantApplicantRepresentationArr
}
setRepresentationCapacity={setRepresentationCapacity}
/>
);
break;
case "agent":
setRepresentationCapacity("agent");
return (
<RepAgent
formObj={formObj}
appellantApplicantRepresentationArr={
appellantApplicantRepresentationArr
}
setRepresentationCapacity={setRepresentationCapacity}
/>
);
break;
case "interestedpartyperson":
setRepresentationCapacity("interestedpartyperson");
return (
<RepInterestedPartyPerson
formObj={formObj}
interestedPersonRepresentationArr={
interestedPersonRepresentationArr
}
setRepresentationCapacity={setRepresentationCapacity}
/>
);
break;
case "landowner":
setRepresentationCapacity("landowner");
return (
<RepLandOwner
formObj={formObj}
landOwnerRepresentationArr={landOwnerRepresentationArr}
setRepresentationCapacity={setRepresentationCapacity}
/>
);
break;
default:
return (
<RepCapacitySelection
formObj={formObj}
capacityOptionsArr={capacityOptionsArr}
currentType={currentType}
casesObj={casesObj}
setRepresentationCapacity={setRepresentationCapacity}
/>
);
}
};
return (
<div>
{whichControl()} - {props.firstValue}
</div>
);
};
const mapStateToProps = (state) => {
return {
search: state.search,
searchResultsObj: state.searchResultsObj,
formData: state.formData,
appealType: state.appealType,
currentView: state.currentView,
//form: state.form,
};
};
const mapDispatchToProps = (dispatch) => {
return {
setRepresentationCapacity: (representationCapacity) => {
dispatch(setRepresentationCapacity(representationCapacity));
},
};
};
const selector = formValueSelector("representationForm");
export default connect(
mapStateToProps,
mapDispatchToProps
)(
reduxForm({
form: "representationForm",
destroyOnUnmount: false,
})(MakeRepresentation)
);
+299
View File
@@ -0,0 +1,299 @@
import Link from "next/link";
import { useState, useEffect } from "react";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
import jsonpath from "jsonpath";
import _ from "lodash";
import {
Field,
FieldArray,
reduxForm,
formValueSelector,
reset,
} from "redux-form";
import { connect } from "react-redux";
import { useDropzone } from "react-dropzone";
import {
setRepresentationCapacity,
setRepresentationSubmit,
setSubmitBack,
setRepresentationSubmitConfirmation,
} from "../../../store/currentView/action";
import RepCapacitySelection from "./representationCapacitySelection";
import RepDetails from "./representationDetails";
import RepAppellant from "./representationAppellant";
import RepAgent from "./representationAgent";
import RepInterestedPartyPerson from "./representationInterestedPartyPerson";
import RepLandOwner from "./representationLandowner";
import RepCompleteSubmit from "./representationCompleteSubmit";
import {
RenderPickList,
RenderRadioList,
RenderTextfield,
} from "./representationElements";
let MakeRepresentation = (props) => {
let { t } = useTranslation();
const { acceptedFiles, getRootProps, getInputProps } = useDropzone();
const [clearRepForm, setClearRepForm] = useState(false);
const router = useRouter();
const { locale } = router;
const {
caseReference,
myCases,
myRepresentations,
watchedCases,
awaitingSubmission,
searchResultsObj,
currentType,
currentView,
setRepresentationCapacity,
setRepresentationSubmit,
setSubmitBack,
handleSubmit,
setRepresentationSubmitConfirmation,
} = props;
const formObj = props.props.form;
let setCaseQueryObj = props[currentType];
var casesObj = {};
currentType == "searchResultsObj"
? (casesObj = jsonpath.query(
setCaseQueryObj,
'$..[?(@.title=="' + caseReference + '")]'
))
: (casesObj = jsonpath.query(
setCaseQueryObj,
'$..[?(@.reference=="' + caseReference + '")]'
));
casesObj = Object.assign({}, ...casesObj);
const capacityOptionsArr = [
"Appellant",
"Agent",
"Interested Party/Person",
"Land Owner",
];
const appellantApplicantRepresentationArr = [
"Other",
"Statement",
"Statement of common ground",
"Written statement of evidence",
];
const interestedPersonRepresentationArr = [
"Interested Party/Person correspondence",
];
const landOwnerRepresentationArr = [
"Other",
"Statement",
"Written statement of evidence",
];
const repCapacityType = () => {
return _.isEmpty(formObj["representationForm"])
? false
: _.isEmpty(formObj["representationForm"].values)
? false
: _.isEmpty(
formObj["representationForm"].values.representationCapacity
)
? false
: formObj["representationForm"].values.representationCapacity
.replace(/[\s\-\+\(\)\,\/]/g, "")
.toLowerCase();
};
const whichControl = () => {
switch (currentView.representationCapacity) {
case false:
return (
<RepCapacitySelection
formObj={formObj}
capacityOptionsArr={capacityOptionsArr}
currentType={currentType}
casesObj={casesObj}
setRepresentationCapacity={setRepresentationCapacity}
setRepresentationSubmit={setRepresentationSubmit}
onHandleSubmit={onHandleSubmit}
currentView={currentView}
setSubmitBack={setSubmitBack}
/>
);
break;
case "appellant":
//setRepresentationCapacity("appellant");
return (
<RepAppellant
formObj={formObj}
appellantApplicantRepresentationArr={
appellantApplicantRepresentationArr
}
setRepresentationCapacity={setRepresentationCapacity}
setRepresentationSubmit={setRepresentationSubmit}
onHandleSubmit={onHandleSubmit}
currentView={currentView}
setSubmitBack={setSubmitBack}
/>
);
break;
case "agent":
//setRepresentationCapacity("agent");
return (
<RepAgent
formObj={formObj}
appellantApplicantRepresentationArr={
appellantApplicantRepresentationArr
}
setRepresentationCapacity={setRepresentationCapacity}
setRepresentationSubmit={setRepresentationSubmit}
onHandleSubmit={onHandleSubmit}
currentView={currentView}
setSubmitBack={setSubmitBack}
/>
);
break;
case "interestedpartyperson":
// setRepresentationCapacity("interestedpartyperson");
return (
<RepInterestedPartyPerson
formObj={formObj}
interestedPersonRepresentationArr={
interestedPersonRepresentationArr
}
setRepresentationCapacity={setRepresentationCapacity}
setRepresentationSubmit={setRepresentationSubmit}
onHandleSubmit={onHandleSubmit}
currentView={currentView}
setSubmitBack={setSubmitBack}
/>
);
break;
case "landowner":
//setRepresentationCapacity("landowner");
return (
<RepLandOwner
formObj={formObj}
landOwnerRepresentationArr={landOwnerRepresentationArr}
setRepresentationCapacity={setRepresentationCapacity}
onHandleSubmit={onHandleSubmit}
setRepresentationSubmit={setRepresentationSubmit}
currentView={currentView}
setSubmitBack={setSubmitBack}
/>
);
break;
default:
return (
<RepCapacitySelection
formObj={formObj}
capacityOptionsArr={capacityOptionsArr}
currentType={currentType}
casesObj={casesObj}
setRepresentationCapacity={setRepresentationCapacity}
setRepresentationSubmit={setRepresentationSubmit}
currentView={currentView}
setSubmitBack={setSubmitBack}
/>
);
}
};
const onHandleSubmit = (values) => {
console.log(
values.representationCapacity,
currentView.representationCapacity
);
// console.log(_.isEmpty(currentView.representationCapacity));
// console.log(
// values.representationCapacity
// .replace(/[\s\-\+\(\)\,\/]/g, "")
// .toLowerCase() == currentView.representationCapacity
// );
_.isEmpty(currentView.representationCapacity)
? setRepresentationCapacity(
values.representationCapacity
.replace(/[\s\-\+\(\)\,\/]/g, "")
.toLowerCase()
)
: setRepresentationSubmit(true);
};
const repForm = props.props.form;
return (
<div>
{repForm["representationForm.submitSucceeded"] == true ? (
<RepCompleteSubmit
formObj={formObj}
capacityOptionsArr={capacityOptionsArr}
currentType={currentType}
casesObj={casesObj}
setRepresentationCapacity={setRepresentationCapacity}
setRepresentationSubmit={setRepresentationSubmit}
currentView={currentView}
setSubmitBack={setSubmitBack}
setRepresentationSubmitConfirmation={
setRepresentationSubmitConfirmation
}
/>
) : (
<form onSubmit={handleSubmit(onHandleSubmit)}>
{whichControl()}
</form>
)}
{console.log("is submitted", currentView.representationSubmit)}
</div>
);
};
const mapStateToProps = (state) => {
return {
search: state.search,
searchResultsObj: state.searchResultsObj,
formData: state.formData,
appealType: state.appealType,
currentView: state.currentView,
//form: state.form,
};
};
const mapDispatchToProps = (dispatch) => {
return {
setRepresentationCapacity: (representationCapacity) => {
dispatch(setRepresentationCapacity(representationCapacity));
dispatch(reset("representationForm"));
},
setRepresentationSubmit: (representationSubmit) => {
dispatch(setRepresentationSubmit(representationSubmit));
},
setSubmitBack: () => {
dispatch(setRepresentationSubmit(false));
},
setRepresentationSubmitConfirmation: () => {
dispatch(setRepresentationSubmitConfirmation(true));
},
};
};
const selector = formValueSelector("representationForm");
export default connect(
mapStateToProps,
mapDispatchToProps
)(
reduxForm({
form: "representationForm",
destroyOnUnmount: false,
})(MakeRepresentation)
);
@@ -0,0 +1,235 @@
import Link from "next/link";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
import { Field, reduxForm } from "redux-form";
import {
RenderPickList,
RenderTextfield,
RenderRadioList,
RenderMultiline,
} from "./representationElements";
import {
setRepresentationCapacity,
setRepresentationSubmit,
} from "../../../store/currentView/action";
import { useDropzone } from "react-dropzone";
const RepAgent = (props) => {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
const {
formObj,
appellantApplicantRepresentationArr,
setRepresentationCapacity,
setRepresentationSubmit,
currentView,
} = props;
const { acceptedFiles, getRootProps, getInputProps } = useDropzone();
const files = acceptedFiles.map((file) => (
<li key={file.path}>
{file.path} - {file.size} bytes
</li>
));
return (
<div id="rep-appellant">
<div className="govuk-grid-column-full">
<div className="govuk-grid-row">
<h2 className="govuk-heading-m ">Representation - agent</h2>
<div className="govuk-form-group">
<label
className="govuk-label govuk-body-m"
htmlFor="representationType"
>
What kind of representation are you making?
</label>
<Field
name="representationType"
component={RenderPickList}
datafieldname="representationType"
optionsArr={appellantApplicantRepresentationArr}
/>
</div>
</div>
<div className="govuk-grid-row">
<div className="govuk-form-group">
<Field
className="govuk-input govuk-!-width-three-quarters"
id="representationDescription"
name="representationDescription"
value="email"
data-aria-controls="representationDescription"
type="text"
component={RenderTextfield}
label="Description of representation"
/>
</div>
</div>
<div className="govuk-grid-row">
<div className="govuk-form-group">
<p className="govuk-body">
You can enter your comments in the space provided or
attach a separate document.
</p>
<fieldset
className="govuk-fieldset"
aria-describedby="commentBox-hint"
>
<div id="commentBox-hint" className="govuk-hint">
My comments are set out in:*
</div>
<div
className="govuk-checkboxes"
data-module="govuk-checkboxes"
>
<div className="govuk-checkboxes__item">
<Field
className="govuk-checkboxes__input"
id="commentBox"
name="commentBox"
value="email"
data-aria-controls="commentBox"
type="checkbox"
component={RenderTextfield}
/>
<label
className="govuk-label govuk-checkboxes__label"
htmlFor="commentBox"
>
the box below{" "}
</label>
</div>
<div
className={
_.isEmpty(formObj["representationForm"])
? "govuk-checkboxes__conditional govuk-checkboxes__conditional--hidden rr"
: _.isEmpty(
formObj["representationForm"]
.values
)
? "govuk-checkboxes__conditional govuk-checkboxes__conditional--hidden q11 "
: _.isEmpty(
formObj["representationForm"]
.values.commentBox
)
? formObj["representationForm"]
.values.commentBox == false
? "govuk-checkboxes__conditional govuk-checkboxes__conditional--hidden www"
: "govuk-checkboxes__conditional"
: "govuk-checkboxes__conditional govuk-checkboxes__conditional--hidden wwwaqqqq"
}
id="conditional-commentBox"
>
<div className="govuk-form-group">
<Field
name="representationComments"
id="representationComments"
component={RenderMultiline}
type="text"
rows="5"
className="govuk-textarea govuk-input--width-30"
aria-describedby={
props.name + "-hint"
}
/>
</div>
</div>
<div className="govuk-checkboxes__item">
<Field
className="govuk-checkboxes__input"
id="documentBox"
name="documentBox"
value="email"
data-aria-controls="documentBox"
type="checkbox"
component={RenderTextfield}
/>
<label
className="govuk-label govuk-checkboxes__label"
htmlFor="documentBox"
>
separate documents
</label>
</div>
<div
className={
_.isEmpty(formObj["representationForm"])
? "govuk-checkboxes__conditional govuk-checkboxes__conditional--hidden rr"
: _.isEmpty(
formObj["representationForm"]
.values
)
? "govuk-checkboxes__conditional govuk-checkboxes__conditional--hidden www"
: _.isEmpty(
formObj["representationForm"]
.values.documentBox
)
? formObj["representationForm"]
.values.documentBox == false
? "govuk-checkboxes__conditional govuk-checkboxes__conditional--hidden www"
: "govuk-checkboxes__conditional"
: "govuk-checkboxes__conditional govuk-checkboxes__conditional--hidden"
}
id="conditional-documentBox"
>
<div className="govuk-form-group">
<section className="container">
<div
{...getRootProps({
className: "dropzone",
})}
>
<input {...getInputProps()} />
<p>
Drag and drop files here or
click to select files
</p>
</div>
<aside>
<h4>Files</h4>
<ul>{files}</ul>
</aside>
</section>
</div>
</div>
</div>
</fieldset>
</div>{" "}
</div>
<div className="govuk-grid-row">
<div className="govuk-button-group">
<button
type="submit"
className="govuk-button"
data-module="govuk-button"
>
Continue
</button>
{/* <a
onClick={() => {
setRepresentationSubmit(false);
}}
className="govuk-button"
>
Continue
</a> */}
<a
onClick={() => {
setRepresentationCapacity("false");
}}
className="govuk-link"
>
Back
</a>
</div>
</div>
</div>
</div>
);
};
export default RepAgent;
@@ -0,0 +1,238 @@
import Link from "next/link";
import { connect } from "react-redux";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
import { Field, reduxForm, reset } from "redux-form";
import {
RenderPickList,
RenderTextfield,
RenderRadioList,
RenderMultiline,
} from "./representationElements";
import { useDropzone } from "react-dropzone";
import {
setRepresentationCapacity,
setRepresentationSubmit,
} from "../../../store/currentView/action";
const RepAppellant = (props) => {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
const {
formObj,
appellantApplicantRepresentationArr,
setRepresentationCapacity,
setRepresentationSubmit,
currentView,
} = props;
const { acceptedFiles, getRootProps, getInputProps } = useDropzone();
const files = acceptedFiles.map((file) => (
<li key={file.path}>
{file.path} - {file.size} bytes
</li>
));
return (
<div id="rep-appellant">
<div className="govuk-grid-column-full">
<div className="govuk-grid-row">
<h2 className="govuk-heading-m ">
Representation - appellantApplicant
</h2>
<div className="govuk-form-group">
<label
className="govuk-label govuk-body-m"
htmlFor="representationType"
>
What kind of representation are you making?
</label>
<Field
name="representationType"
component={RenderPickList}
datafieldname="representationType"
optionsArr={appellantApplicantRepresentationArr}
/>
</div>
</div>
<div className="govuk-grid-row">
<div className="govuk-form-group">
<Field
className="govuk-input govuk-!-width-three-quarters"
id="representationDescription"
name="representationDescription"
value="email"
data-aria-controls="representationDescription"
type="text"
component={RenderTextfield}
label="Description of representation"
/>
</div>
</div>
<div className="govuk-grid-row">
<div className="govuk-form-group">
<p className="govuk-body">
You can enter your comments in the space provided or
attach a separate document.
</p>
<fieldset
className="govuk-fieldset"
aria-describedby="commentBox-hint"
>
<div id="commentBox-hint" className="govuk-hint">
My comments are set out in:*
</div>
<div
className="govuk-checkboxes"
data-module="govuk-checkboxes"
>
<div className="govuk-checkboxes__item">
<Field
className="govuk-checkboxes__input"
id="commentBox"
name="commentBox"
value="email"
data-aria-controls="commentBox"
type="checkbox"
component={RenderTextfield}
/>
<label
className="govuk-label govuk-checkboxes__label"
htmlFor="commentBox"
>
the box below{" "}
</label>
</div>
<div
className={
_.isEmpty(formObj["representationForm"])
? "govuk-checkboxes__conditional govuk-checkboxes__conditional--hidden rr"
: _.isEmpty(
formObj["representationForm"]
.values
)
? "govuk-checkboxes__conditional govuk-checkboxes__conditional--hidden q11 "
: _.isEmpty(
formObj["representationForm"]
.values.commentBox
)
? formObj["representationForm"]
.values.commentBox == false
? "govuk-checkboxes__conditional govuk-checkboxes__conditional--hidden www"
: "govuk-checkboxes__conditional"
: "govuk-checkboxes__conditional govuk-checkboxes__conditional--hidden wwwaqqqq"
}
id="conditional-commentBox"
>
<div className="govuk-form-group">
<Field
name="representationComments"
id="representationComments"
component={RenderMultiline}
type="text"
rows="5"
className="govuk-textarea govuk-input--width-30"
aria-describedby={
props.name + "-hint"
}
/>
</div>
</div>
<div className="govuk-checkboxes__item">
<Field
className="govuk-checkboxes__input"
id="documentBox"
name="documentBox"
value="email"
data-aria-controls="documentBox"
type="checkbox"
component={RenderTextfield}
/>
<label
className="govuk-label govuk-checkboxes__label"
htmlFor="documentBox"
>
separate documents
</label>
</div>
<div
className={
_.isEmpty(formObj["representationForm"])
? "govuk-checkboxes__conditional govuk-checkboxes__conditional--hidden rr"
: _.isEmpty(
formObj["representationForm"]
.values
)
? "govuk-checkboxes__conditional govuk-checkboxes__conditional--hidden www"
: _.isEmpty(
formObj["representationForm"]
.values.documentBox
)
? formObj["representationForm"]
.values.documentBox == false
? "govuk-checkboxes__conditional govuk-checkboxes__conditional--hidden www"
: "govuk-checkboxes__conditional"
: "govuk-checkboxes__conditional govuk-checkboxes__conditional--hidden"
}
id="conditional-documentBox"
>
<div className="govuk-form-group">
<section className="container">
<div
{...getRootProps({
className: "dropzone",
})}
>
<input {...getInputProps()} />
<p>
Drag and drop files here or
click to select files
</p>
</div>
<aside>
<h4>Files</h4>
<ul>{files}</ul>
</aside>
</section>
</div>
</div>
</div>
</fieldset>
</div>{" "}
</div>
<div className="govuk-grid-row">
<div className="govuk-button-group">
{currentView.representationCapacity}
<button
type="submit"
className="govuk-button"
data-module="govuk-button"
>
Continue
</button>
{/* <a
onClick={() => {
setRepresentationSubmit(false);
}}
className="govuk-button"
>
Continue
</a> */}
<a
onClick={() => {
setRepresentationCapacity(false);
}}
className="govuk-link"
>
Back
</a>
</div>
</div>
</div>
</div>
);
};
export default RepAppellant;
@@ -0,0 +1,88 @@
import Link from "next/link";
import { connect } from "react-redux";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
import {
Field,
reduxForm,
formValueSelector,
handleSubmit,
reset,
} from "redux-form";
import {
RenderPickList,
RenderTextfield,
RenderRadioList,
RenderMultiline,
} from "./representationElements";
import { useDropzone } from "react-dropzone";
import RepDetails from "./representationDetails";
import { setRepresentationCapacity } from "../../../store/currentView/action";
let RepCapacitySelection = (props) => {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
const {
formObj,
capacityOptionsArr,
currentType,
casesObj,
validate,
handleSubmit,
} = props;
const { acceptedFiles, getRootProps, getInputProps } = useDropzone();
const files = acceptedFiles.map((file) => (
<li key={file.path}>
{file.path} - {file.size} bytes
</li>
));
const required = (value) => (value ? undefined : "Required");
return (
<>
<RepDetails
formObj={formObj}
currentType={currentType}
casesObj={casesObj}
/>{" "}
<div id="rep-details" className="vo_hiddens">
<div className="govuk-grid-column-full">
<div className="govuk-grid-row">
<h2 className="govuk-heading-m ">
Your details - {props.firstValue}
</h2>
<Field
name="representationCapacity"
datafieldname="representationCapacity"
label="In what capacity do you wish to make representations on this case?"
options={capacityOptionsArr}
id="representationCapacity"
className="govuk-radios__input"
errorMsg="Select an option"
component={RenderRadioList}
validate={[required]}
/>
</div>
</div>
<div className="govuk-grid-row">
<div className="govuk-grid-column-full">
<div className="govuk-button-group">
<button
type="submit"
className="govuk-button"
data-module="govuk-button"
>
Continue
</button>
</div>
</div>
</div>
</div>
</>
);
};
export default RepCapacitySelection;
@@ -0,0 +1,76 @@
import Link from "next/link";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
import { Field, reduxForm } from "redux-form";
import {
RenderPickList,
RenderTextfield,
RenderRadioList,
RenderMultiline,
} from "./representationElements";
import {
setRepresentationCapacity,
setRepresentationSubmit,
setSubmitBack,
} from "../../../store/currentView/action";
import { useDropzone } from "react-dropzone";
const RepComplete = (props) => {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
const {
formObj,
appellantApplicantRepresentationArr,
setRepresentationCapacity,
setRepresentationSubmit,
currentView,
setSubmitBack,
setRepresentationSubmitConfirmation,
} = props;
const { acceptedFiles, getRootProps, getInputProps } = useDropzone();
const files = acceptedFiles.map((file) => (
<li key={file.path}>
{file.path} - {file.size} bytes
</li>
));
return (
<div id="rep-appellant">
<div className="govuk-grid-column-full">
<div className="govuk-grid-row">
<h2 className="govuk-heading-m ">
Submission of Representation
</h2>
<p>
Thank you for submitting your representation(s) using
the Appeals Casework Portal.
</p>
<p>
Please remember that any supporting documentation needs
to be received by us within the appropriate deadline for
the case. Anything you send to us must be clearly marked
with the case reference number and the site address
(including the postcode, where known).
</p>
<p>
You will shortly receive confirmation to the email
address you have provided.
</p>
</div>
<div className="govuk-grid-row">
<div className="govuk-button-group">
<Link href="/myportal">
<a className="govuk-button">Continue</a>
</Link>
</div>
</div>
</div>
</div>
);
};
export default RepComplete;
@@ -0,0 +1,122 @@
import Link from "next/link";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
import { Field, reduxForm } from "redux-form";
import {
RenderPickList,
RenderTextfield,
RenderRadioList,
RenderMultiline,
} from "./representationElements";
import {
setRepresentationCapacity,
setRepresentationSubmit,
setSubmitBack,
setRepresentationSubmitConfirmation,
} from "../../../store/currentView/action";
import { useDropzone } from "react-dropzone";
import RepComplete from "./representationComplete";
const RepCompleteSubmit = (props) => {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
const {
formObj,
appellantApplicantRepresentationArr,
setRepresentationCapacity,
setRepresentationSubmit,
currentView,
setSubmitBack,
setRepresentationSubmitConfirmation,
} = props;
const { acceptedFiles, getRootProps, getInputProps } = useDropzone();
const files = acceptedFiles.map((file) => (
<li key={file.path}>
{file.path} - {file.size} bytes
</li>
));
return (
<>
{currentView.representationSubmitConfirmation == true ? (
<RepComplete />
) : (
<div id="rep-appellant">
<div className="govuk-grid-column-full">
<div className="govuk-grid-row">
<h2 className="govuk-heading-m ">Submit</h2>
<p>
The gathering and subsequent processing of the
personal data supplied by you in this form, is
in accordance with the terms of our registration
under the Data Protection Act 2018.
</p>
<p>
The Planning Inspectorate takes its data
protection responsibilities for the information
you provide us with very seriously. To find out
more about how we use and manage your personal
data, please go to our privacy notice.
</p>
<p>
I confirm that all sections of this form have
been fully completed and that the details are
correct to the best of my knowledge.
</p>
<div className="govuk-form-group">
<label
className="govuk-label govuk-body-m"
htmlFor="representationType"
>
I confirm I have read the above.
</label>
{/* <Field
name="representationType"
component={RenderPickList}
datafieldname="representationType"
optionsArr={appellantApplicantRepresentationArr}
/> */}
</div>
</div>
<div className="govuk-grid-row">
<div className="govuk-button-group">
<button
type="submit"
className="govuk-button"
data-module="govuk-button"
onClick={() =>
setRepresentationSubmitConfirmation()
}
>
Continue
</button>
{/* <a
onClick={() => {
setRepresentationSubmit(false);
}}
className="govuk-button"
>
Continue
</a> */}
<a
onClick={() => setSubmitBack()}
className="govuk-link"
>
Back
</a>
</div>
</div>
</div>
</div>
)}
</>
);
};
export default RepCompleteSubmit;
@@ -0,0 +1,84 @@
import Link from "next/link";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
import { Field, reduxForm } from "redux-form";
import { RenderPickList, RenderTextfield } from "./representationElements";
const RepDetails = (props) => {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
const { currentType, casesObj } = props;
return (
<>
{" "}
<div className="govuk-grid-column-full">
<div id="rep-sumamry" className="govuk-grid-row">
<h1 className="govuk-heading-xl govuk-!-margin-bottom-7">
Make a representation
</h1>
<dl className="govuk-summary-list govuk-!-margin-bottom-9">
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
Appeal Reference
</dt>
<dd className="govuk-summary-list__value">
{currentType == "searchResultsObj"
? casesObj.title
: casesObj.reference}
</dd>
</div>
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t("case:summary-applicant-label")}
</dt>
<dd className="govuk-summary-list__value">
{casesObj.appellantApplicant || ""}
</dd>
</div>
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t("case:summary-agent-label")}
</dt>
<dd className="govuk-summary-list__value">
Mr A Agent
</dd>
</div>
<div className="govuk-summary-list__row">
<dt className="govuk-summary-list__key">
{t("case:summary-site-address-label")}
</dt>
<dd className="govuk-summary-list__value">
{casesObj.address1 || ""}
<br />
{casesObj.town || ""}
<br />
{casesObj.postcode || ""}
</dd>
</div>
</dl>
</div>
<div className="govuk-grid-row">
<p className="govuk-body">
This form enables you to submit comments on a case to
The Planning Inspectorate.{" "}
</p>
<p className="govuk-body">
Please note that comments from interested parties need
to be made within the timetable. This can be found on
the previous &lsquo;Case Summary&lsquo; page. Comments
submitted after this date may be considered invalid and
returned to the sender.
</p>
</div>
</div>
</>
);
};
export default RepDetails;
@@ -0,0 +1,194 @@
import { Field, reduxForm } from "redux-form";
import router from "next/router";
import React, { useState } from "react";
export const RenderRadioList = ({
datafieldname,
name,
label,
id,
errorMsg,
options,
input: { onChange, value },
meta: { touched, error },
...custom
}) => {
const required = (value) => (value ? undefined : "Required");
return (
<>
<div
className={
touched && error
? "govuk-form-group govuk-form-group--error"
: "govuk-form-group "
}
>
<fieldset
className="govuk-fieldset"
aria-describedby={name + "-hint"}
>
<legend className="govuk-fieldset__legend govuk-fieldset__legend--s govuk-!-font-weight-regular">
<label
className="govuk-fieldset__heading govuk-body-m"
id={id + "_label"}
>
{label}
</label>
</legend>
{touched && error && (
<span
id={id + "-error"}
className="govuk-error-message"
>
<span className="govuk-visually-hidden">
Error:
</span>{" "}
{errorMsg}
</span>
)}
<div className="govuk-radios govuk-radios--small">
{Object.keys(options).map((key, index) => (
<div
className="govuk-radios__item"
data-children-count={key}
key={key}
>
<Field
id={id + "_" + index}
name={id}
component="input"
type="radio"
className="govuk-radios__input"
value={options[key]}
/>
<label
className="govuk-label govuk-radios__label"
htmlFor={id + "_" + index}
>
{options[key]}
</label>
</div>
))}
</div>
</fieldset>
</div>
</>
);
};
export const RenderPickList = ({
datafieldname,
name,
label,
input,
optionsArr,
meta: { touched, errorStr },
}) => {
return (
<div>
<select {...input} className="govuk-select " id={name} name={name}>
<option>Select...</option>
{Object.keys(optionsArr).map((key, index) => {
return (
<option key={key} value={optionsArr[key]}>
{optionsArr[key]}
</option>
);
})}
</select>
{touched && errorStr && <span>{errorStr}</span>}
</div>
);
};
export const RenderTextfield = ({
id,
rows,
datafieldname,
name,
label,
input,
errorMsg,
type,
className,
meta: { touched, error },
...custom
}) => {
return (
<>
<label className="govuk-label " htmlFor={id} id={id + "_label"}>
{label}
</label>
{touched && error && (
<span id={id + "-error"} className="govuk-error-message">
<span className="govuk-visually-hidden">Error:</span>{" "}
{errorMsg}
</span>
)}
<input
{...input}
className={className}
name={name}
id={id}
type={type}
/>
</>
);
};
export const RenderMultiline = ({
id,
className,
rows,
datafieldname,
name,
label,
input,
meta: { touched, error },
...custom
}) => {
return (
<>
<textarea
{...input}
id={id}
name={name}
rows={rows}
className={className}
></textarea>
</>
);
};
export function MultiLinefield(props) {
const { name, label } = props;
return (
<div className="govuk-form-group">
<h1 className="govuk-label-wrapper">
<label className="govuk-label" htmlFor={props.name}>
{props.label}
</label>
</h1>
<div
id={props.name + "-hint"}
className="govuk-hint govuk-!-font-size-14"
>
Do not include personal or financial information, like your
National Insurance number or credit card details.
</div>
<Field
name={props.name}
id={props.name}
component={RenderMultiline}
type="text"
rows="5"
className="govuk-textarea govuk-input--width-30"
aria-describedby={props.name + "-hint"}
/>
</div>
);
}
@@ -0,0 +1,323 @@
import Link from "next/link";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
import { Field, reduxForm } from "redux-form";
import {
RenderPickList,
RenderTextfield,
RenderRadioList,
RenderMultiline,
} from "./representationElements";
import { useDropzone } from "react-dropzone";
const RepInterestedPartyPerson = (props) => {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
const {
formObj,
interestedPersonRepresentationArr,
setRepresentationCapacity,
setRepresentationSubmit,
} = props;
const { acceptedFiles, getRootProps, getInputProps } = useDropzone();
const files = acceptedFiles.map((file) => (
<li key={file.path}>
{file.path} - {file.size} bytes
</li>
));
return (
<div id="rep-interested">
<div className="govuk-grid-column-full">
<div className="govuk-grid-row">
<h2 className="govuk-heading-m ">
Representation - interested
</h2>
<div className="govuk-form-group">
<label
className="govuk-label govuk-body-m"
htmlFor="representationType"
>
What kind of representation are you making?
</label>
<Field
name="representationType"
component={RenderPickList}
datafieldname="representationType"
optionsArr={interestedPersonRepresentationArr}
/>
</div>
</div>
<div className="govuk-grid-row">
<div className="govuk-form-group">
<Field
className="govuk-input govuk-!-width-three-quarters"
id="representationDescription"
name="representationDescription"
value="email"
data-aria-controls="representationDescription"
type="text"
component={RenderTextfield}
label="Description of representation"
/>
</div>
<div className="govuk-grid-row">
<div className="govuk-form-group">
<fieldset
className="govuk-fieldset"
aria-describedby="contact-hint"
>
<legend className="govuk-fieldset__legend govuk-fieldset__legend--l">
<label
className="govuk-fieldset__heading govuk-body-m"
id="representationCapacity_label"
>
Are you acting on behalf of a company,
group or organisation?
</label>
</legend>
<div id="contact-hint" className="govuk-hint">
e.g. &lsquo;Owners of Numbers 1-5 High
Street&lsquo;, or &lsquo;Mr and Mrs
Smith&lsquo; or &lsquo;The executors of Mr
Evans&lsquo; estate&lsquo;
</div>
<div
className="govuk-radios govuk-radios--conditional"
data-module="govuk-radios"
>
<div className="govuk-radios__item">
<input
className="govuk-radios__input"
id="contact"
name="contact"
type="radio"
value="email"
data-aria-controls="conditional-contact"
/>
<label
className="govuk-label govuk-radios__label"
htmlFor="contact"
>
Yes
</label>
</div>
<div
className="govuk-radios__conditional govuk-radios__conditional--hidden"
id="conditional-contact"
>
<div className="govuk-form-group">
<label
className="govuk-label"
htmlFor="contact-by-email"
>
Enter the name of the
company/group/organisation *
</label>
<input
className="govuk-input govuk-!-width-one-third"
id="contact-by-email"
name="contact-by-email"
type="email"
spellCheck="false"
autoComplete="email"
/>
</div>
</div>
<div className="govuk-radios__item">
<input
className="govuk-radios__input"
id="contact-2"
name="contact"
type="radio"
value="phone"
data-aria-controls="conditional-contact-2"
/>
<label
className="govuk-label govuk-radios__label"
htmlFor="contact-2"
>
No
</label>
</div>
</div>
</fieldset>
</div>
</div>
<div className="govuk-grid-row">
<div className="govuk-form-group">
<p className="govuk-body">
You can enter your comments in the space
provided or attach a separate document.
</p>
<fieldset
className="govuk-fieldset"
aria-describedby="commentBox-hint"
>
<div
id="commentBox-hint"
className="govuk-hint"
>
My comments are set out in:*
</div>
<div
className="govuk-checkboxes"
data-module="govuk-checkboxes"
>
<div className="govuk-checkboxes__item">
<Field
className="govuk-checkboxes__input"
id="commentBox"
name="commentBox"
value="email"
data-aria-controls="commentBox"
type="checkbox"
component={RenderTextfield}
/>
<label
className="govuk-label govuk-checkboxes__label"
htmlFor="commentBox"
>
the box below{" "}
</label>
</div>
<div
className={
_.isEmpty(
formObj["representationForm"]
)
? "govuk-checkboxes__conditional govuk-checkboxes__conditional--hidden rr"
: _.isEmpty(
formObj[
"representationForm"
].values
)
? "govuk-checkboxes__conditional govuk-checkboxes__conditional--hidden q11 "
: _.isEmpty(
formObj[
"representationForm"
].values.commentBox
)
? formObj["representationForm"]
.values.commentBox ==
false
? "govuk-checkboxes__conditional govuk-checkboxes__conditional--hidden www"
: "govuk-checkboxes__conditional"
: "govuk-checkboxes__conditional govuk-checkboxes__conditional--hidden wwwaqqqq"
}
id="conditional-commentBox"
>
<div className="govuk-form-group">
<Field
name="representationComments"
id="representationComments"
component={RenderMultiline}
type="text"
rows="5"
className="govuk-textarea govuk-input--width-30"
aria-describedby={
props.name + "-hint"
}
/>
</div>
</div>
<div className="govuk-checkboxes__item">
<Field
className="govuk-checkboxes__input"
id="documentBox"
name="documentBox"
value="email"
data-aria-controls="documentBox"
type="checkbox"
component={RenderTextfield}
/>
<label
className="govuk-label govuk-checkboxes__label"
htmlFor="documentBox"
>
separate documents
</label>
</div>
<div
className={
_.isEmpty(
formObj["representationForm"]
)
? "govuk-checkboxes__conditional govuk-checkboxes__conditional--hidden rr"
: _.isEmpty(
formObj[
"representationForm"
].values
)
? "govuk-checkboxes__conditional govuk-checkboxes__conditional--hidden www"
: _.isEmpty(
formObj[
"representationForm"
].values.documentBox
)
? formObj["representationForm"]
.values.documentBox ==
false
? "govuk-checkboxes__conditional govuk-checkboxes__conditional--hidden www"
: "govuk-checkboxes__conditional"
: "govuk-checkboxes__conditional govuk-checkboxes__conditional--hidden"
}
id="conditional-documentBox"
>
<div className="govuk-form-group">
<section className="container">
<div
{...getRootProps({
className: "dropzone",
})}
>
<input
{...getInputProps()}
/>
<p>
Drag and drop files here
or click to select files
</p>
</div>
<aside>
<h4>Files</h4>
<ul>{files}</ul>
</aside>
</section>
</div>
</div>
</div>
</fieldset>
</div>{" "}
</div>
<div className="govuk-grid-row">
<div className="govuk-button-group">
<Link href="/representation">
<a
onClick={() => {
setRepresentationSubmit(false);
}}
className="govuk-button"
>
Continue
</a>
</Link>
<a
onClick={() => {
setRepresentationCapacity(false);
}}
className="govuk-link"
>
Back
</a>
</div>
</div>
</div>
</div>
</div>
);
};
export default RepInterestedPartyPerson;
@@ -0,0 +1,230 @@
import Link from "next/link";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
import { Field, reduxForm } from "redux-form";
import {
RenderPickList,
RenderTextfield,
RenderRadioList,
RenderMultiline,
} from "./representationElements";
import { useDropzone } from "react-dropzone";
import {
setRepresentationCapacity,
setRepresentationSubmit,
} from "../../../store/currentView/action";
const RepLandOwner = (props) => {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
const {
formObj,
landOwnerRepresentationArr,
setRepresentationCapacity,
setRepresentationSubmit,
} = props;
const { acceptedFiles, getRootProps, getInputProps } = useDropzone();
const files = acceptedFiles.map((file) => (
<li key={file.path}>
{file.path} - {file.size} bytes
</li>
));
return (
<div id="landowner">
<div className="govuk-grid-column-full">
<div className="govuk-grid-row">
<h2 className="govuk-heading-m ">
Representation - landowner
</h2>
<div className="govuk-form-group">
<label
className="govuk-label govuk-body-m"
htmlFor="representationType"
>
What kind of representation are you making?
</label>
<Field
name="representationType"
component={RenderPickList}
datafieldname="representationType"
optionsArr={landOwnerRepresentationArr}
/>
</div>
</div>
<div className="govuk-grid-row">
<div className="govuk-form-group">
<Field
className="govuk-input govuk-!-width-three-quarters"
id="representationDescription"
name="representationDescription"
value="email"
data-aria-controls="representationDescription"
type="text"
component={RenderTextfield}
label="Description of representation"
/>
</div>
</div>
<div className="govuk-grid-row">
<div className="govuk-form-group">
<p className="govuk-body">
You can enter your comments in the space provided or
attach a separate document.
</p>
<fieldset
className="govuk-fieldset"
aria-describedby="commentBox-hint"
>
<div id="commentBox-hint" className="govuk-hint">
My comments are set out in:*
</div>
<div
className="govuk-checkboxes"
data-module="govuk-checkboxes"
>
<div className="govuk-checkboxes__item">
<Field
className="govuk-checkboxes__input"
id="commentBox"
name="commentBox"
value="email"
data-aria-controls="commentBox"
type="checkbox"
component={RenderTextfield}
/>
<label
className="govuk-label govuk-checkboxes__label"
htmlFor="commentBox"
>
the box below{" "}
</label>
</div>
<div
className={
_.isEmpty(formObj["representationForm"])
? "govuk-checkboxes__conditional govuk-checkboxes__conditional--hidden rr"
: _.isEmpty(
formObj["representationForm"]
.values
)
? "govuk-checkboxes__conditional govuk-checkboxes__conditional--hidden q11 "
: _.isEmpty(
formObj["representationForm"]
.values.commentBox
)
? formObj["representationForm"]
.values.commentBox == false
? "govuk-checkboxes__conditional govuk-checkboxes__conditional--hidden www"
: "govuk-checkboxes__conditional"
: "govuk-checkboxes__conditional govuk-checkboxes__conditional--hidden wwwaqqqq"
}
id="conditional-commentBox"
>
<div className="govuk-form-group">
<Field
name="representationComments"
id="representationComments"
component={RenderMultiline}
type="text"
rows="5"
className="govuk-textarea govuk-input--width-30"
aria-describedby={
props.name + "-hint"
}
/>
</div>
</div>
<div className="govuk-checkboxes__item">
<Field
className="govuk-checkboxes__input"
id="documentBox"
name="documentBox"
value="email"
data-aria-controls="documentBox"
type="checkbox"
component={RenderTextfield}
/>
<label
className="govuk-label govuk-checkboxes__label"
htmlFor="documentBox"
>
separate documents
</label>
</div>
<div
className={
_.isEmpty(formObj["representationForm"])
? "govuk-checkboxes__conditional govuk-checkboxes__conditional--hidden rr"
: _.isEmpty(
formObj["representationForm"]
.values
)
? "govuk-checkboxes__conditional govuk-checkboxes__conditional--hidden www"
: _.isEmpty(
formObj["representationForm"]
.values.documentBox
)
? formObj["representationForm"]
.values.documentBox == false
? "govuk-checkboxes__conditional govuk-checkboxes__conditional--hidden www"
: "govuk-checkboxes__conditional"
: "govuk-checkboxes__conditional govuk-checkboxes__conditional--hidden"
}
id="conditional-documentBox"
>
<div className="govuk-form-group">
<section className="container">
<div
{...getRootProps({
className: "dropzone",
})}
>
<input {...getInputProps()} />
<p>
Drag and drop files here or
click to select files
</p>
</div>
<aside>
<h4>Files</h4>
<ul>{files}</ul>
</aside>
</section>
</div>
</div>
</div>
</fieldset>
</div>
</div>
<div className="govuk-grid-row">
<div className="govuk-button-group">
<Link href="/representation">
<a
onClick={() => {
setRepresentationSubmit(false);
}}
className="govuk-button"
>
Continue
</a>
</Link>
<a
onClick={() => {
setRepresentationCapacity(false);
}}
className="govuk-link"
>
Back
</a>
</div>
</div>
</div>
</div>
);
};
export default RepLandOwner;
+88 -33
View File
@@ -1,18 +1,48 @@
import Link from "next/link";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
import jsonpath from "jsonpath";
import _ from "lodash";
export default function CaseSummary() {
const CaseSummary = (props) => {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
const {
caseReference,
myCases,
myRepresentations,
watchedCases,
awaitingSubmission,
searchResultsObj,
currentType,
} = props;
let setCaseQueryObj = props[currentType];
var casesObj = {};
currentType == "searchResultsObj"
? (casesObj = jsonpath.query(
setCaseQueryObj,
'$..[?(@.title=="' + caseReference + '")]'
))
: (casesObj = jsonpath.query(
setCaseQueryObj,
'$..[?(@.reference=="' + caseReference + '")]'
));
casesObj = Object.assign({}, ...casesObj);
return (
<div>
<div className="govuk-grid-row">
<div className="govuk-grid-column-full">
<h1 className="govuk-heading-xl govuk-!-margin-bottom-7">
Reference: CAS-00010-J9W6L5
Reference:{" "}
{currentType == "searchResultsObj"
? casesObj.title
: casesObj.reference}
</h1>
<dl className="govuk-summary-list govuk-!-margin-bottom-9">
@@ -21,7 +51,7 @@ export default function CaseSummary() {
{t("case:summary-applicant-label")}
</dt>
<dd className="govuk-summary-list__value">
Mr J Pocknell
{casesObj.appellantApplicant || ""}
</dd>
</div>
<div className="govuk-summary-list__row">
@@ -29,7 +59,7 @@ export default function CaseSummary() {
{t("case:summary-agent-label")}
</dt>
<dd className="govuk-summary-list__value">
Mr Cos Polito
Mr A Agent
</dd>
</div>
<div className="govuk-summary-list__row">
@@ -37,11 +67,12 @@ export default function CaseSummary() {
{t("case:summary-site-address-label")}
</dt>
<dd className="govuk-summary-list__value">
72 Guild Street
{casesObj.address1 || ""}
<br />
London
{casesObj.town || ""}
<br />
SE23 6FH
{casesObj.postcode || ""}
</dd>
</div>
</dl>
@@ -50,16 +81,17 @@ export default function CaseSummary() {
<div className="govuk-grid-row">
<div className="govuk-grid-column-full">
<div className="govuk-button-group">
<Link href="/advancedsearch">
<Link href="/representation">
<a className="govuk-button">
{t("case:summary-make-representation-label")}
</a>
</Link>
<Link href="/advancedsearch">
<a className="govuk-button govuk-button--secondary">
{t("case:summary-back-button-label")}
</a>
</Link>
<a
onClick={() => router.back()}
className="govuk-button govuk-button--secondary"
>
{t("case:summary-back-button-label")}
</a>
</div>
</div>
</div>
@@ -78,7 +110,9 @@ export default function CaseSummary() {
{t("case:summary-case-type-label")}
</dt>
<dd className="govuk-summary-list__value">
Planning Appeal (W){" "}
{casesObj[
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
] || "N/A"}
</dd>
</div>
<div className="govuk-summary-list__row">
@@ -86,7 +120,7 @@ export default function CaseSummary() {
{t("case:summary-lpa-label")}
</dt>
<dd className="govuk-summary-list__value">
Hastings Borough Council
{casesObj.lpaname || ""}
</dd>
</div>
<div className="govuk-summary-list__row">
@@ -96,8 +130,8 @@ export default function CaseSummary() {
)}
</dt>
<dd className="govuk-summary-list__value">
Erection of a two-storey chalet
style detached dwelling
{casesObj.caseDetails.caseSummary ||
""}
</dd>
</div>
<div className="govuk-summary-list__row">
@@ -108,7 +142,8 @@ export default function CaseSummary() {
</dt>
<dd className="govuk-summary-list__value">
{" "}
Neale Oliver
{casesObj.caseDetails.caseOfficer ||
""}
</dd>
</div>
<div className="govuk-summary-list__row">
@@ -116,7 +151,8 @@ export default function CaseSummary() {
{t("case:summary-procedure-label")}
</dt>
<dd className="govuk-summary-list__value">
Written representations
{casesObj.caseDetails.procedure ||
""}
</dd>
</div>
<div className="govuk-summary-list__row">
@@ -124,7 +160,9 @@ export default function CaseSummary() {
{t("case:summary-status-label")}
</dt>
<dd className="govuk-summary-list__value">
In Progress
{casesObj[
"statuscode@OData.Community.Display.V1.FormattedValue"
] || ""}
</dd>
</div>
<div className="govuk-summary-list__row">
@@ -132,10 +170,13 @@ export default function CaseSummary() {
{t("case:summary-decision-label")}
</dt>
<dd className="govuk-summary-list__value">
Allowed
{casesObj.caseDetails.decision ||
""}
<br />
<Link href="/">
<a>
3272770 Appeal Decision.pdf
{casesObj.caseDetails
.outcome_document || ""}
</a>
</Link>
</dd>
@@ -147,7 +188,8 @@ export default function CaseSummary() {
)}
</dt>
<dd className="govuk-summary-list__value">
Not Linked
{casesObj.caseDetails
.caseLinkStatus || ""}
</dd>
</div>
<div className="govuk-summary-list__row">
@@ -157,7 +199,8 @@ export default function CaseSummary() {
)}
</dt>
<dd className="govuk-summary-list__value">
0
{casesObj.caseDetails.linkedCases ||
""}
</dd>
</div>
</dl>
@@ -176,7 +219,8 @@ export default function CaseSummary() {
{t("case:summary-start-date-label")}
</dt>
<dd className="govuk-summary-list__value">
26-May-21
{casesObj.caseDates.start_date ||
"N/A"}
</dd>
</div>
@@ -187,7 +231,8 @@ export default function CaseSummary() {
)}
</dt>
<dd className="govuk-summary-list__value">
02-Jun-21
{casesObj.caseDates
.questionnaireDue || "N/A"}
</dd>
</div>
@@ -198,7 +243,8 @@ export default function CaseSummary() {
)}
</dt>
<dd className="govuk-summary-list__value">
30-Jun-21
{casesObj.caseDates.statementsDue ||
"N/A"}
</dd>
</div>
@@ -209,7 +255,9 @@ export default function CaseSummary() {
)}
</dt>
<dd className="govuk-summary-list__value">
30-Jun-21
{casesObj.caseDates
.interestedPartyCommentsdue ||
"N/A"}
</dd>
</div>
@@ -220,7 +268,9 @@ export default function CaseSummary() {
)}
</dt>
<dd className="govuk-summary-list__value">
14-Jul-21
{casesObj.caseDates
.appellantLPAFinalCommentsdue ||
"N/A"}
</dd>
</div>
@@ -231,7 +281,8 @@ export default function CaseSummary() {
)}
</dt>
<dd className="govuk-summary-list__value">
N/A
{casesObj.caseDates
.inquiryEvidenceDue || "N/A"}
</dd>
</div>
@@ -240,7 +291,8 @@ export default function CaseSummary() {
{t("case:summary-event-date-label")}
</dt>
<dd className="govuk-summary-list__value">
Date arranged
{casesObj.caseDates.eventDate ||
"N/A"}
</dd>
</div>
@@ -251,7 +303,8 @@ export default function CaseSummary() {
)}
</dt>
<dd className="govuk-summary-list__value">
Not yet decided
{casesObj.caseDates.decisionDate ||
"N/A"}
</dd>
</div>
</dl>
@@ -273,4 +326,6 @@ export default function CaseSummary() {
</div> */}
</div>
);
}
};
export default CaseSummary;
@@ -0,0 +1,106 @@
import Link from "next/link";
import { useRouter } from "next/router";
import { useContext } from "react";
import useTranslation from "next-translate/useTranslation";
const ApplicationSideBar = (props) => {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
return (
<>
<div className="govuk-grid-row">
<div className="govuk-grid-column-full">
<h3 className="govuk-heading-s">About this application</h3>
<p className="govuk-body-s">
The Project will provide a consented area for the
installation and commercial demonstration of multiple
arrays of tidal energy devices, to a maximum installed
capacity of 240 Megawatts (MW).
</p>
</div>
</div>
<hr className="govuk-section-break govuk-section-break--m govuk-section-break--visible" />
<div className="govuk-grid-row">
<div className="govuk-grid-column-full">
<h3 className="govuk-heading-s">Application location</h3>
<div className="map-responsive ">
<iframe
width="600"
height="500"
id="gmap_canvas"
src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d906124.6839968044!2d-4.849068013831224!3d52.39943863518503!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x486434b66c1c0fed%3A0x1ebb71bc8aa5e8a2!2sWales!5e0!3m2!1sen!2suk!4v1628587620670!5m2!1sen!2suk"
frameBorder="0"
scrolling="no"
marginHeight="0"
marginWidth="0"
></iframe>
</div>
<p className="govuk-body-s govuk-!-margin-top-3">
The location shown on the map is approximate at this
stage
</p>
</div>
</div>
<hr className="govuk-section-break govuk-section-break--m govuk-section-break--visible" />
<div className="govuk-grid-row">
<div className="govuk-grid-column-full">
<h3 className="govuk-heading-s">Contact Information</h3>
<p className="govuk-body-s">
Planning Inspectorate case team:
<br />
<a
className="longLinkBreak"
href="mailto:TWA.morlaistidalarray@planninginspectorate.gov.uk"
>
TWA.morlaistidalarray@planninginspectorate.gov.uk
</a>
</p>
<p className="govuk-body-s">
Tel: <a href="tel:03034445940">0303 444 5940</a>
</p>
<p className="govuk-body-s">
Developer: <br />
Graham Morley
<br />
Tel: +44 (0) 1248 725 713
</p>
</div>
</div>
<hr className="govuk-section-break govuk-section-break--m govuk-section-break--visible" />
<div className="govuk-grid-row">
<div className="govuk-grid-column-full">
<h3 className="govuk-heading-s">Email updates</h3>
<p className="govuk-body-s govuk-!-margin-bottom-0">
Sign up using email address to receive updates about
this application
</p>
<form>
<div className="govuk-form-group govuk-!-margin-bottom-2">
<br />
<input
className="govuk-input govuk-input--width-10 "
id="event-name"
name="event-name"
type="text"
placeholder="Email address"
/>
</div>
<div className="govuk-form-group govuk-!-margin-top-0 govuk-!-margin-bottom-0">
<button
className="govuk-button "
data-module="govuk-button"
>
Sign up
</button>
</div>
</form>
</div>
</div>
</>
);
};
export default ApplicationSideBar;
@@ -0,0 +1,63 @@
import Link from "next/link";
import { useRouter } from "next/router";
import { useContext } from "react";
import useTranslation from "next-translate/useTranslation";
const ApplicationSummary = (props) => {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
return (
<>
<div className="govuk-grid-row">
<div className="govuk-grid-column-full">
<h1>TWA - Morlais Demonstration Zone</h1>
</div>
</div>
<div className="govuk-grid-row">
<div className="govuk-grid-column-two-thirds">
<p className="govuk-body-s">
by Menter Mon <br />
Type: Generating Stations
</p>
<div className="govuk-warning-text">
<span
className="govuk-warning-text__icon"
aria-hidden="true"
>
!
</span>
<strong className="govuk-warning-text__text">
<span className="govuk-warning-text__assistive">
Information
</span>
The Inspectors report into the above has now been
formally submitted to the Welsh Government for
consideration.
<br />
<span className="govuk-body-s">
05 October 2020
</span>
</strong>
</div>
</div>
<div className="govuk-grid-column-one-third">
<p className="govuk-body-s">
Stage: <br />
Next Stage: Decision
<br />
Reference: TWA/3234121
<br />
Developer: Menter Mon
<br />
Procedure: Inquiry
</p>
</div>
</div>
</>
);
};
export default ApplicationSummary;
@@ -0,0 +1,151 @@
import Link from "next/link";
import { useRouter } from "next/router";
import { useContext } from "react";
import { useState } from "react";
import useTranslation from "next-translate/useTranslation";
import ApplicationTabsTimeLine from "./applicationTabsTimeline";
import ApplicationSideBar from "./applicationSideBar";
import ApplicationTabsDocuments from "./applicationTabsDocuments";
import ApplicationTabsComments from "./applicationTabsComments";
import ApplicationTabsRegistrationForm from "./applicationTabsRegistrationForm";
const ApplicationTabs = (props) => {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
const [showTab, setShowTab] = useState(1);
let selectTab = (tabID) => {
setShowTab(tabID);
console.log(showTab);
};
return (
<>
<div className="govuk-tabs" data-module="govuk-tabs">
<h2 className="govuk-tabs__title">Contents</h2>
<ul className="govuk-tabs__list">
<li
className={
showTab == 1
? "govuk-tabs__list-item govuk-tabs__list-item--selected"
: "govuk-tabs__list-item"
}
>
<a
onClick={() => {
selectTab(1);
}}
className="govuk-tabs__tab"
href="#past-day"
>
Overview
</a>
</li>
<li
className={
showTab == 2
? "govuk-tabs__list-item govuk-tabs__list-item--selected"
: "govuk-tabs__list-item"
}
>
<a
onClick={() => {
selectTab(2);
}}
className="govuk-tabs__tab"
href="#past-week"
>
Documents{" "}
</a>
</li>
<li
className={
showTab == 3
? "govuk-tabs__list-item govuk-tabs__list-item--selected"
: "govuk-tabs__list-item"
}
>
<a
onClick={() => {
selectTab(3);
}}
className="govuk-tabs__tab"
href="#past-week"
>
Registration form
</a>
</li>
<li
className={
showTab == 4
? "govuk-tabs__list-item govuk-tabs__list-item--selected"
: "govuk-tabs__list-item"
}
>
<a
onClick={() => {
selectTab(4);
}}
className="govuk-tabs__tab"
href="#past-week"
>
Comments Received
</a>
</li>
</ul>
<div
className={
showTab == 1
? "govuk-tabs__panel "
: "govuk-tabs__panel govuk-tabs__panel--hidden"
}
id="past-day"
>
<div className="govuk-grid-row">
<div className="govuk-grid-column-two-thirds">
<ApplicationTabsTimeLine />
</div>
<div className="govuk-grid-column-one-third">
<ApplicationSideBar />
</div>
</div>
</div>
<div
className={
showTab == 2
? "govuk-tabs__panel "
: "govuk-tabs__panel govuk-tabs__panel--hidden"
}
id="past-week"
>
<ApplicationTabsDocuments />
</div>
<div
className={
showTab == 3
? "govuk-tabs__panel "
: "govuk-tabs__panel govuk-tabs__panel--hidden"
}
id="past-week"
>
<ApplicationTabsRegistrationForm />
</div>
<div
className={
showTab == 4
? "govuk-tabs__panel "
: "govuk-tabs__panel govuk-tabs__panel--hidden"
}
id="past-week"
>
<ApplicationTabsComments />
</div>
</div>
</>
);
};
export default ApplicationTabs;
@@ -0,0 +1,30 @@
import Link from "next/link";
import { useRouter } from "next/router";
import { useContext } from "react";
import useTranslation from "next-translate/useTranslation";
const ApplicationTabsComments = (props) => {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
return (
<>
<div className="govuk-grid-row">
<div className="govuk-grid-column-full">
<h3>
Representations received regarding XXXXXXXX XXXXXXXX
XXXXXXX Order
</h3>
<p className="govuk-body-s">
No comments have been received as yet. Any we receive
will be published on this page.
</p>
</div>
</div>
</>
);
};
export default ApplicationTabsComments;
@@ -0,0 +1,385 @@
import Link from "next/link";
import { useRouter } from "next/router";
import { useContext } from "react";
import useTranslation from "next-translate/useTranslation";
import {
Accordion,
AccordionItem,
AccordionItemHeading,
AccordionItemButton,
AccordionItemPanel,
} from "react-accessible-accordion";
// import "react-accessible-accordion/dist/fancy-example.css";
const ApplicationTabsDocuments = (props) => {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
return (
<>
<div className="govuk-grid-row">
<div className="govuk-grid-column-one-third">
<h3 className="govuk-heading-s">
Filter documents by Application stage
</h3>
<Accordion
allowZeroExpanded
className="accordion govuk-body-s"
>
<AccordionItem>
<AccordionItemHeading>
<AccordionItemButton>
Pre Application (0)
</AccordionItemButton>
</AccordionItemHeading>
<AccordionItemPanel>
<Link href="#">All documents</Link>
<br />
</AccordionItemPanel>
</AccordionItem>
<AccordionItem>
<AccordionItemHeading>
<AccordionItemButton>
Developer&apos;s Application (174)
</AccordionItemButton>
</AccordionItemHeading>
<AccordionItemPanel>
<Link href="#">All documents</Link>
<Accordion allowZeroExpanded>
<AccordionItem>
<AccordionItemHeading>
<AccordionItemButton>
Pre Application{" "}
</AccordionItemButton>
</AccordionItemHeading>
<AccordionItemPanel>
<Link href="#">All documents</Link>
<br />
</AccordionItemPanel>
</AccordionItem>
<AccordionItem>
<AccordionItemHeading>
<AccordionItemButton>
Developer&apos;s Application
</AccordionItemButton>
</AccordionItemHeading>
<AccordionItemPanel>
<Link href="#">All documents</Link>
</AccordionItemPanel>
</AccordionItem>
<AccordionItem>
<AccordionItemHeading>
<AccordionItemButton>
Pre Application{" "}
</AccordionItemButton>
</AccordionItemHeading>
<AccordionItemPanel>
<Link href="#">All documents</Link>
</AccordionItemPanel>
</AccordionItem>
</Accordion>
</AccordionItemPanel>
</AccordionItem>
<AccordionItem>
<AccordionItemHeading>
<AccordionItemButton>
Acceptance (0)
</AccordionItemButton>
</AccordionItemHeading>
<AccordionItemPanel>
<Link href="#">All documents</Link>
</AccordionItemPanel>
</AccordionItem>
<AccordionItem>
<AccordionItemHeading>
<AccordionItemButton>
Examination (0)
</AccordionItemButton>
</AccordionItemHeading>
<AccordionItemPanel>
<Link href="#">All documents</Link>
</AccordionItemPanel>
</AccordionItem>
<AccordionItem>
<AccordionItemHeading>
<AccordionItemButton>
Decision (0)
</AccordionItemButton>
</AccordionItemHeading>
<AccordionItemPanel>
<Link href="#">All documents</Link>
</AccordionItemPanel>
</AccordionItem>
<AccordionItem>
<AccordionItemHeading>
<AccordionItemButton>
Decided (0)
</AccordionItemButton>
</AccordionItemHeading>
<AccordionItemPanel>
<Link href="#">All documents</Link>
</AccordionItemPanel>
</AccordionItem>
</Accordion>
</div>
<div className="govuk-grid-column-two-thirds">
<div className="govuk-grid-row flex-container govuk-!-margin-top-9">
<div className="govuk-grid-column-two-thirds">
<p className="govuk-body-xs govuk-!-margin-top-1">
Showing 1 to 10 of 54 entries
</p>
</div>
<div className=" govuk-grid-column-two-thirds govuk-form-group">
<label className="govuk-label-xs " htmlFor="sort">
Show{" "}
<select
className="govuk-select govuk-select-s"
id="showNo"
name="showNo"
>
<option value="1">10</option>
<option value="1">25</option>
<option value="1">50</option>
<option value="1">100</option>
</select>{" "}
Entries
</label>
</div>
</div>
<div className="govuk-grid-row">
<div className="govuk-grid-column-full">
<div className="documents__list">
<div className="documents__list__item">
<div className="document__list__item__title">
<a
href="#"
className="document__list__item__link govuk-link govuk-link--no-underline"
>
Core Documents List v14
</a>
<span>(Document Size: 715 KB)</span>
</div>
<div className="document__list__meta">
<div className="document__list__stage">
Examination &gt; Inquiry Documents
&gt; Administration
</div>
<div className="document__list__publish_date">
Published: 17/05/2021
</div>
</div>
</div>
<div className="documents__list__item">
<div className="document__list__item__title">
<a
href="#"
className="document__list__item__link govuk-link govuk-link--no-underline"
>
Core Documents List v14
</a>
<span>(Document Size: 715 KB)</span>
</div>
<div className="document__list__meta">
<div className="document__list__stage">
Examination &gt; Inquiry Documents
&gt; Administration
</div>
<div className="document__list__publish_date">
Published: 17/05/2021
</div>
</div>
</div>
<div className="documents__list__item">
<div className="document__list__item__title">
<a
href="#"
className="document__list__item__link govuk-link govuk-link--no-underline"
>
Core Documents List v14
</a>
<span>(Document Size: 715 KB)</span>
</div>
<div className="document__list__meta">
<div className="document__list__stage">
Examination &gt; Inquiry Documents
&gt; Administration
</div>
<div className="document__list__publish_date">
Published: 17/05/2021
</div>
</div>
</div>
<div className="documents__list__item">
<div className="document__list__item__title">
<a
href="#"
className="document__list__item__link govuk-link govuk-link--no-underline"
>
Core Documents List v14
</a>
<span>(Document Size: 715 KB)</span>
</div>
<div className="document__list__meta">
<div className="document__list__stage">
Examination &gt; Inquiry Documents
&gt; Administration
</div>
<div className="document__list__publish_date">
Published: 17/05/2021
</div>
</div>
</div>
<div className="documents__list__item">
<div className="document__list__item__title">
<a
href="#"
className="document__list__item__link govuk-link govuk-link--no-underline"
>
Core Documents List v14
</a>
<span>(Document Size: 715 KB)</span>
</div>
<div className="document__list__meta">
<div className="document__list__stage">
Examination &gt; Inquiry Documents
&gt; Administration
</div>
<div className="document__list__publish_date">
Published: 17/05/2021
</div>
</div>
</div>
<div className="documents__list__item">
<div className="document__list__item__title">
<a
href="#"
className="document__list__item__link govuk-link govuk-link--no-underline"
>
Core Documents List v14
</a>
<span>(Document Size: 715 KB)</span>
</div>
<div className="document__list__meta">
<div className="document__list__stage">
Examination &gt; Inquiry Documents
&gt; Administration
</div>
<div className="document__list__publish_date">
Published: 17/05/2021
</div>
</div>
</div>
<div className="documents__list__item">
<div className="document__list__item__title">
<a
href="#"
className="document__list__item__link govuk-link govuk-link--no-underline"
>
Core Documents List v14
</a>
<span>(Document Size: 715 KB)</span>
</div>
<div className="document__list__meta">
<div className="document__list__stage">
Examination &gt; Inquiry Documents
&gt; Administration
</div>
<div className="document__list__publish_date">
Published: 17/05/2021
</div>
</div>
</div>
<div className="documents__list__item">
<div className="document__list__item__title">
<a
href="#"
className="document__list__item__link govuk-link govuk-link--no-underline"
>
Core Documents List v14
</a>
<span>(Document Size: 715 KB)</span>
</div>
<div className="document__list__meta">
<div className="document__list__stage">
Examination &gt; Inquiry Documents
&gt; Administration
</div>
<div className="document__list__publish_date">
Published: 17/05/2021
</div>
</div>
</div>
<div className="documents__list__item">
<div className="document__list__item__title">
<a
href="#"
className="document__list__item__link govuk-link govuk-link--no-underline"
>
Core Documents List v14
</a>
<span>(Document Size: 715 KB)</span>
</div>
<div className="document__list__meta">
<div className="document__list__stage">
Examination &gt; Inquiry Documents
&gt; Administration
</div>
<div className="document__list__publish_date">
Published: 17/05/2021
</div>
</div>
</div>
<div className="documents__list__item">
<div className="document__list__item__title">
<a
href="#"
className="document__list__item__link govuk-link govuk-link--no-underline"
>
Core Documents List v14
</a>
<span>(Document Size: 715 KB)</span>
</div>
<div className="document__list__meta">
<div className="document__list__stage">
Examination &gt; Inquiry Documents
&gt; Administration
</div>
<div className="document__list__publish_date">
Published: 17/05/2021
</div>
</div>
</div>
</div>
</div>
</div>
<div className="govuk-grid-row ">
<div className="govuk-grid-column-full">
<p className="govuk-body-xs">
Previous <span>1</span>{" "}
<span>
<Link href="#">2</Link>
</span>{" "}
<span>
<Link href="#">3</Link>
</span>{" "}
<span>
<Link href="#">4</Link>
</span>{" "}
<span>
<Link href="#">5</Link>
</span>{" "}
<Link href="#">Next</Link>
</p>
</div>
</div>
</div>
</div>
</>
);
};
export default ApplicationTabsDocuments;
@@ -0,0 +1,23 @@
import Link from "next/link";
import { useRouter } from "next/router";
import { useContext } from "react";
import useTranslation from "next-translate/useTranslation";
const ApplicationTabsRegistrationForm = (props) => {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
return (
<>
<div className="govuk-grid-row">
<div className="govuk-grid-column-full">
<h3>Registration form</h3>
</div>
</div>
</>
);
};
export default ApplicationTabsRegistrationForm;
@@ -0,0 +1,145 @@
import Link from "next/link";
import { useRouter } from "next/router";
import { useContext } from "react";
import useTranslation from "next-translate/useTranslation";
const ApplicationTabsTimeLine = (props) => {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
return (
<>
<div className="govuk-grid-row">
<div className="govuk-grid-column-full">
<h3>Transport & Works Act</h3>
<p className="govuk-body-s">
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Integer in malesuada ligula, sit amet placerat enim.
Suspendisse porta velit auctor enim pretium, et interdum
lectus mollis. Fusce et consectetur nisl. Donec viverra
lectus massa, nec tincidunt orci euismod vel.
</p>
</div>
</div>
<div className="govuk-grid-row ">
<div className="govuk-grid-column-full ">
<div className="results">
<h3>Timeline</h3>
<div className="govuk-timeline-list__row">
<span
className="govuk-warning-text__icon"
aria-hidden="true"
>
i
</span>
<p className="govuk-body-s govuk-timeline-text__text">
The Inspectors report into the above has now
been formally submitted to the Welsh Government
for consideration.
</p>
<p className="govuk-body-xs govuk-!-margin-bottom-0 dateRight">
05 October 2020
</p>
</div>
<div className="govuk-timeline-list__row">
<span
className="govuk-warning-text__icon"
aria-hidden="true"
>
i
</span>
<p className="govuk-body-s govuk-timeline-text__text">
The Procedure for this Transport and Works Act
Application was formally determined, on the
07/08/2020, as an Inquiry. <br />
<br />
Statements of Case from the Applicant, each
Statutory Objector and each other person or body
who have indicated that they wish to provide
oral evidence at the Inquiry are required by
18/09/2020.
</p>
<p className="govuk-body-xs govuk-!-margin-bottom-0 dateRight">
05 October 2020
</p>
</div>
<div className="govuk-timeline-list__row">
<span
className="govuk-warning-text__icon"
aria-hidden="true"
>
i
</span>
<p className="govuk-body-s govuk-timeline-text__text">
The Inspectors report into the above has now
been formally submitted to the Welsh Government
for consideration.
</p>
<p className="govuk-body-xs govuk-!-margin-bottom-0 dateRight">
05 October 2020
</p>
</div>
<div className="govuk-timeline-list__row">
<span
className="govuk-warning-text__icon"
aria-hidden="true"
>
i
</span>
<p className="govuk-body-s govuk-timeline-text__text">
The Inspectors report into the above has now
been formally submitted to the Welsh Government
for consideration.
</p>
<p className="govuk-body-xs govuk-!-margin-bottom-0 dateRight">
05 October 2020
</p>
</div>
<div className="govuk-timeline-list__row">
<span
className="govuk-warning-text__icon"
aria-hidden="true"
>
i
</span>
<p className="govuk-body-s govuk-timeline-text__text">
The Procedure for this Transport and Works Act
Application was formally determined, on the
07/08/2020, as an Inquiry. <br />
<br />
Statements of Case from the Applicant, each
Statutory Objector and each other person or body
who have indicated that they wish to provide
oral evidence at the Inquiry are required by
18/09/2020.
</p>
<p className="govuk-body-xs govuk-!-margin-bottom-0 dateRight">
05 October 2020
</p>
</div>
<div className="govuk-timeline-list__row">
<span
className="govuk-warning-text__icon"
aria-hidden="true"
>
i
</span>
<p className="govuk-body-s govuk-timeline-text__text">
The Inspectors report into the above has now
been formally submitted to the Welsh Government
for consideration.
</p>
<p className="govuk-body-xs govuk-!-margin-bottom-0 dateRight">
05 October 2020
</p>
</div>
</div>
</div>
</div>
</>
);
};
export default ApplicationTabsTimeLine;
@@ -0,0 +1,56 @@
import Link from "next/link";
import { useRouter } from "next/router";
import { useContext } from "react";
import useTranslation from "next-translate/useTranslation";
const ApplicationIntro = (props) => {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
return (
<div className="govuk-grid-row">
<div className="govuk-grid-column-one-half">
<h1 className="govuk-heading-l">
{t("dnsApplications:page-title")}
</h1>
<p className="govuk-body">
{t("dnsApplications:page-intro-paragraph-1")}
</p>
<ul className="govuk-list govuk-list--bullet">
<li> {t("dnsApplications:page-intro-list-item-1")}</li>
<li> {t("dnsApplications:page-intro-list-item-2")}</li>
<li> {t("dnsApplications:page-intro-list-item-3")}</li>
</ul>
<p className="govuk-body">
{t("dnsApplications:page-intro-paragraph-2")}{" "}
<Link href="/dns/calendar">
<a className="govuk-link">
{t("dnsApplications:page-intro-paragraph-2-link")}
</a>
</Link>
.
</p>
</div>
<div className="govuk-grid-column-one-half">
<div className="map-responsive halfWidth">
<iframe
width="600"
height="500"
id="gmap_canvas"
src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d906124.6839968044!2d-4.849068013831224!3d52.39943863518503!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x486434b66c1c0fed%3A0x1ebb71bc8aa5e8a2!2sWales!5e0!3m2!1sen!2suk!4v1628587620670!5m2!1sen!2suk"
frameBorder="0"
scrolling="no"
marginHeight="0"
marginWidth="0"
></iframe>
</div>
</div>
</div>
);
};
export default ApplicationIntro;
@@ -0,0 +1,513 @@
import Link from "next/link";
import { useRouter } from "next/router";
import { useContext } from "react";
import useTranslation from "next-translate/useTranslation";
const ApplicationList = (props) => {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
return (
<>
<div className="govuk-grid-row govuk-!-margin-top-9">
<div className="govuk-grid-column-full">
<div className="govuk-form-group">
<label className="govuk-label-s " htmlFor="sort">
{t("dnsCommon:result-list-show-label")}{" "}
<select
className="govuk-select"
id="showNo"
name="showNo"
>
<option value="1">10</option>
<option value="1">25</option>
<option value="1">50</option>
<option value="1">100</option>
</select>{" "}
{t("dnsCommon:result-list-entries-label")}
</label>
</div>
</div>
</div>
<div className="govuk-grid-row">
<div className="govuk-grid-column-full">
<p className="govuk-body-s">
{t("dnsCommon:result-list-showing-label", {
recordIndex: "1",
pagingIndex: "10",
totalRecords: "55",
})}
</p>
</div>
</div>
<div className="govuk-grid-row ">
<div className="govuk-grid-column-full">
<dl className="govuk-summary-list govuk-!-margin-bottom-0 results">
<div className="govuk-summary-list__row results-headings">
<dd className="govuk-summary-list__key govuk-!-font-size-14 results_wider ">
{t(
"dnsApplications:result-list-heading-label-reference"
)}
</dd>
<dd className="govuk-summary-list__key govuk-!-font-size-14">
{t(
"dnsApplications:result-list-heading-label-application"
)}
</dd>
<dd className="govuk-summary-list__key govuk-!-font-size-14">
{t(
"dnsApplications:result-list-heading-label-developer"
)}
</dd>
<dd className="govuk-summary-list__key govuk-!-font-size-14">
{t(
"dnsApplications:result-list-heading-label-type"
)}
</dd>
<dd className="govuk-summary-list__key govuk-!-font-size-14">
{t(
"dnsApplications:result-list-heading-label-status"
)}
</dd>
</div>
<div className="govuk-summary-list__row">
<dd className="govuk-summary-list__value govuk-!-font-size-14 ">
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-reference"
)}
:
</span>
CAS-00009-W8N6W4
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<Link href="/dns/application-view">
<a>
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-application"
)}
:{" "}
</span>
TWA - Morlais Demonstration Zone
</a>
</Link>
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-developer"
)}
:
</span>
Menter Mon
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-type"
)}
:
</span>
Energy
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-status"
)}
:
</span>
Recommendation
</dd>
</div>
<div className="govuk-summary-list__row">
<dd className="govuk-summary-list__value govuk-!-font-size-14 ">
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-reference"
)}
:
</span>
CAS-00009-W8N6W4
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<Link href="/dns/application-view">
<a>
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-application"
)}
:{" "}
</span>
TWA - Morlais Demonstration Zone
</a>
</Link>
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-developer"
)}
:
</span>
Menter Mon
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-type"
)}
:
</span>
Energy
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-status"
)}
:
</span>
Recommendation
</dd>
</div>
<div className="govuk-summary-list__row">
<dd className="govuk-summary-list__value govuk-!-font-size-14 ">
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-reference"
)}
:
</span>
CAS-00009-W8N6W4
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<Link href="/dns/application-view">
<a>
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-application"
)}
:{" "}
</span>
TWA - Morlais Demonstration Zone
</a>
</Link>
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-developer"
)}
:
</span>
Menter Mon
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-type"
)}
:
</span>
Energy
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-status"
)}
:
</span>
Recommendation
</dd>
</div>
<div className="govuk-summary-list__row">
<dd className="govuk-summary-list__value govuk-!-font-size-14 ">
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-reference"
)}
:
</span>
CAS-00009-W8N6W4
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<Link href="/dns/application-view">
<a>
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-application"
)}
:{" "}
</span>
TWA - Morlais Demonstration Zone
</a>
</Link>
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-developer"
)}
:
</span>
Menter Mon
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-type"
)}
:
</span>
Energy
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-status"
)}
:
</span>
Recommendation
</dd>
</div>
<div className="govuk-summary-list__row">
<dd className="govuk-summary-list__value govuk-!-font-size-14 ">
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-reference"
)}
:
</span>
CAS-00009-W8N6W4
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<Link href="/dns/application-view">
<a>
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-application"
)}
:{" "}
</span>
TWA - Morlais Demonstration Zone
</a>
</Link>
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-developer"
)}
:
</span>
Menter Mon
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-type"
)}
:
</span>
Energy
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-status"
)}
:
</span>
Recommendation
</dd>
</div>
<div className="govuk-summary-list__row">
<dd className="govuk-summary-list__value govuk-!-font-size-14 ">
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-reference"
)}
:
</span>
CAS-00009-W8N6W4
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<Link href="/dns/application-view">
<a>
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-application"
)}
:{" "}
</span>
TWA - Morlais Demonstration Zone
</a>
</Link>
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-developer"
)}
:
</span>
Menter Mon
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-type"
)}
:
</span>
Energy
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-status"
)}
:
</span>
Recommendation
</dd>
</div>
<div className="govuk-summary-list__row">
<dd className="govuk-summary-list__value govuk-!-font-size-14 ">
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-reference"
)}
:
</span>
CAS-00009-W8N6W4
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<Link href="/dns/application-view">
<a>
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-application"
)}
:{" "}
</span>
TWA - Morlais Demonstration Zone
</a>
</Link>
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-developer"
)}
:
</span>
Menter Mon
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-type"
)}
:
</span>
Energy
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-status"
)}
:
</span>
Recommendation
</dd>
</div>
<div className="govuk-summary-list__row">
<dd className="govuk-summary-list__value govuk-!-font-size-14 ">
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-reference"
)}
:
</span>
CAS-00009-W8N6W4
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<Link href="/dns/application-view">
<a>
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-application"
)}
:{" "}
</span>
TWA - Morlais Demonstration Zone
</a>
</Link>
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-developer"
)}
:
</span>
Menter Mon
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-type"
)}
:
</span>
Energy
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
{t(
"dnsApplications:result-list-heading-label-status"
)}
:
</span>
Recommendation
</dd>
</div>
</dl>
</div>
</div>
<div className="govuk-grid-row ">
<div className="govuk-grid-column-full">
<p>
{t("dnsCommon:result-list-previous-label")}{" "}
<span>1</span>{" "}
<span>
<Link href="#">2</Link>
</span>{" "}
<span>
<Link href="#">3</Link>
</span>{" "}
<span>
<Link href="#">4</Link>
</span>{" "}
<span>
<Link href="#">5</Link>
</span>{" "}
<Link href="#">
{t("dnsCommon:result-list-next-label")}
</Link>
</p>
</div>
</div>
</>
);
};
export default ApplicationList;
@@ -0,0 +1,30 @@
import Link from "next/link";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
const ApplicationsForComment = (props) => {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
return (
<div className="govuk-panel govuk-grid-column-one-third govuk-panel--open-for-comments">
<h2 className="govuk-heading-m">
{t("dnsHome:applications-for-comment-title")}
</h2>
<div className="govuk-panel__body">
<ul className="govuk-list">
<li>
<Link href="/dns/application-view">
<a className="govuk-body-s ">
Holyhead Harbour Revision Order
</a>
</Link>
</li>
</ul>
</div>
</div>
);
};
export default ApplicationsForComment;
+75
View File
@@ -0,0 +1,75 @@
import Link from "next/link";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
const DNSLinks = (props) => {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
return (
<div className="govuk-grid-column-two-thirds govuk-panel--dns-links govuk-!-padding-top-5">
<div className="govuk-grid-column-one-half">
<ul className="govuk-list">
<li>
<h3 className="govuk-heading-l govuk-!-font-size-27">
<Link href="/dns/applications">
<a className="govuk-link govuk-link--no-underline">
{t("dnsHome:links-applications-title")}
</a>
</Link>
<p className="govuk-body-s govuk-!-padding-top-2">
{t(
"dnsHome:links-applications-intro-paragraph"
)}
</p>
</h3>
</li>
<li>
<h3 className="govuk-heading-l govuk-!-font-size-27">
<Link href="/dns/help">
<a className="govuk-link govuk-link--no-underline">
{t("dnsHome:links-help-title")}
</a>
</Link>
<p className="govuk-body-s govuk-!-padding-top-2">
{t("dnsHome:links-help-intro-paragraph")}
</p>
</h3>
</li>
</ul>
</div>
<div className="govuk-grid-column-one-half">
<ul className="govuk-list">
<li>
<h3 className="govuk-heading-l govuk-!-font-size-27">
<Link href="/dns/application-process">
<a className="govuk-link govuk-link--no-underline ">
{t("dnsHome:links-help-title")}
</a>
</Link>
<p className="govuk-body-s govuk-!-padding-top-2">
{t("dnsHome:links-guidance-intro-paragraph")}
</p>
</h3>
</li>
<li>
<h3 className="govuk-heading-l govuk-!-font-size-27">
<Link href="/dns/contact-us">
<a className="govuk-link govuk-link--no-underline">
{t("dnsHome:links-contactus-title")}
</a>
</Link>
<p className="govuk-body-s govuk-!-padding-top-2">
{t("dnsHome:links-contactus-intro-paragraph")}
</p>
</h3>
</li>
</ul>
</div>
</div>
);
};
export default DNSLinks;
@@ -0,0 +1,50 @@
import Link from "next/link";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
const LatestApplications = (props) => {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
return (
<div className="govuk-panel govuk-grid-column-one-third govuk-panel--latest">
<h2 className="govuk-heading-m">
{" "}
{t("dnsHome:latest-applications-title")}
</h2>
<div className="govuk-panel__body">
<ul className="govuk-list">
<li className="govuk-body-s ">
{" "}
<Link href="/dns/application-view">
<a href="">Brynrhyd Solar Farm</a>
</Link>
</li>
<li className="govuk-body-s ">
{" "}
<Link href="/dns/application-view">
<a href="">Brynrhyd Solar Farm</a>
</Link>
</li>
<li className="govuk-body-s ">
{" "}
<Link href="/dns/application-view">
<a href="">Brynrhyd Solar Farm</a>
</Link>
</li>
<li className="govuk-body-s ">
{" "}
<Link href="/dns/application-view">
<a href="">Brynrhyd Solar Farm</a>
</Link>
</li>
</ul>
</div>
</div>
);
};
export default LatestApplications;
+133
View File
@@ -0,0 +1,133 @@
import Link from "next/link";
import { useState } from "react";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
import AutoSuggest from "react-autosuggest";
const dnsSites = [
{ id: 1, name: "30MW Energy Plant - Wrexham" },
{ id: 1, name: "Abertillery Wind Farm" },
{ id: 1, name: "Alaw Mon Solar Farm" },
{ id: 1, name: "Alwen Forest - Wind" },
{ id: 1, name: "Blackberry Lane Solar Park" },
{ id: 1, name: "Bretton Hall Solar Farm" },
{ id: 1, name: "Brynllewelyn Farm - Renewable Energy Project" },
{ id: 1, name: "Brynrhyd Solar Farm" },
{ id: 1, name: "Brynwell Farm Renewable Energy Hub" },
{ id: 1, name: "Buttington Quarry - ERF" },
{ id: 1, name: "Coed Darcy - STOR" },
{ id: 1, name: "Coity Road - STOR" },
{ id: 1, name: "Craig Y Perchyll Solar" },
{ id: 1, name: "Egnedol - Sustainable Energy" },
{ id: 1, name: "Elwy Solar Energy" },
{ id: 1, name: "Erebus - Floating Offshore Wind Demonstration Project" },
{ id: 1, name: "Felindre Road - STOR" },
{ id: 1, name: "Gaerwen Wind Farm" },
{ id: 1, name: "Garn Fach Wind Farm" },
{ id: 1, name: "Holyhead Harbour Revision Order" },
{ id: 1, name: "Holyhead Marina Harbour Revision Order" },
{ id: 1, name: "Holyhead Waterfront Regeneration Scheme HRO" },
{ id: 1, name: "Legacy Substation Gas Peaking Plant" },
{ id: 1, name: "Llantarnam - SToR" },
{ id: 1, name: "Llanwern - Solar" },
{ id: 1, name: "Lluest y Gwynt Wind Farm" },
{ id: 1, name: "Llynfi Energy Recovery Facility" },
{ id: 1, name: "Manmoel Wind Farm" },
{ id: 1, name: "Môn Solar Farm" },
{ id: 1, name: "Mor Hafren: Energy Recovery Facility" },
{ id: 1, name: "Mynydd Carn-y-Cefn Wind Farm" },
{ id: 1, name: "Mynydd Llanhilleth Wind Farm" },
{ id: 1, name: "Pancross &amp; Oaklands Solar Farm" },
{ id: 1, name: "Parc Dyffryn Solar Park" },
{ id: 1, name: "Parc Solar Traffwll" },
{ id: 1, name: "Pen March Wind Farm" },
{ id: 1, name: "Pen-y-Fan - Power Plant" },
{ id: 1, name: "Pencaerlan Solar Farm" },
{ id: 1, name: "Penderi Solar Farm" },
{ id: 1, name: "Penpergwm Solar Farm" },
{ id: 1, name: "Pentre Bach Solar Farm" },
{ id: 1, name: "Plas Power Estate Solar Farm" },
{ id: 1, name: "Project Valorous" },
{ id: 1, name: "Rhoscrowther Wind Farm" },
{ id: 1, name: "Rush Wall Solar Park Ltd" },
{ id: 1, name: "Sudbrook - Peaking Gas" },
{ id: 1, name: "TWA - Morlais Demonstration Zone" },
{ id: 1, name: "Twyn Hywel Energy Park" },
{ id: 1, name: "Tycroes Solar" },
{ id: 1, name: "Upper Ogmore - Wind Turbines" },
{ id: 1, name: "Valero - Cogeneration Facility" },
{ id: 1, name: "Vattenfall - Renewable Energy" },
{ id: 1, name: "Wauntysswg - Solar" },
{ id: 1, name: "Wentlooge - renewable energy hub" },
{ id: 1, name: "Y Bryn Wind Farm" },
];
const lowerCasedCompanies = dnsSites.map((company) => {
return {
id: company.id,
name: company.name,
};
});
const TitleContent = (props) => {
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
const [value, setValue] = useState("");
const [suggestions, setSuggestions] = useState([]);
function getSuggestions(value) {
return lowerCasedCompanies.filter((company) =>
company.name.toLowerCase().includes(value.trim().toLowerCase())
);
}
return (
<div className="govuk-panel govuk-grid-column-two-thirds govuk-panel--header">
<h1 className="govuk-panel__title">
{t("dnsCommon:service-name")}
</h1>
<div className="govuk-panel__body">
<p className="govuk-body-s">{t("dnsHome:title-paragraph")}</p>
</div>
<div className="govuk-form-group govuk-!-margin-bottom-0 flex-container">
<AutoSuggest
suggestions={suggestions}
onSuggestionsClearRequested={() => setSuggestions([])}
onSuggestionsFetchRequested={({ value }) => {
console.log(value);
setValue(value);
setSuggestions(getSuggestions(value));
}}
onSuggestionSelected={(_, { suggestionValue }) =>
console.log("Selected: " + suggestionValue)
}
getSuggestionValue={(suggestion) => suggestion.name}
renderSuggestion={(suggestion) => (
<span>{suggestion.name}</span>
)}
inputProps={{
className: "govuk-input govuk-!-font-size-16",
placeholder: t(
"dnsHome:title-application-search-placeholder"
),
value: value,
onChange: (_, { newValue, method }) => {
setValue(newValue);
},
}}
highlightFirstSuggestion={true}
/>
<Link href="/dns/application-view">
<a className="govuk-button govuk-!-margin-bottom-0 govuk-!-margin-left-2">
{t("dnsHome:title-application-search-button")}
</a>
</Link>
</div>
</div>
);
};
export default TitleContent;
+40
View File
@@ -0,0 +1,40 @@
import Link from "next/link";
import { useRouter } from "next/router";
import { useContext } from "react";
import useTranslation from "next-translate/useTranslation";
import TitleContent from "./homepage/titleContent";
import LatestApplications from "./homepage/latestApplications";
import DNSLinks from "./homepage/dnsLinks";
import ApplicationsForComment from "./homepage/applicationsForComment";
export default function Main({ 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 govuk-!-margin-bottom-0">
<div className="govuk-grid-column-full govuk-!-padding-bottom-0">
<div className="flex-container grid-row govuk-body govuk-!-margin-bottom-0 ">
<TitleContent />
<LatestApplications />
</div>
</div>
</div>
<div className="govuk-grid-row govuk-!-margin-top-0">
<div className="govuk-grid-column-full">
<div className="flex-container grid-row govuk-body ">
<DNSLinks />
<ApplicationsForComment />
</div>
</div>
</div>
</main>
);
}
+155 -70
View File
@@ -1,6 +1,7 @@
import Link from "next/link";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
import { useState } from "react";
export default function Footer(props) {
let { t } = useTranslation();
@@ -18,102 +19,186 @@ export default function Footer(props) {
</li>
));
const [showShareState, setShowShareState] = useState(false);
let shareState = () => {
showShareState == true
? setShowShareState(false)
: setShowShareState(true);
};
return (
<footer className="govuk-footer " role="contentinfo">
<>
<div className="sharebar" id="sharebar">
<div className="sharebar__components container-fluid">
<div className="main__sharebar">
<div
id="sharebar__backtotop"
className="btn--outlined btn--arrow-up"
className={
showShareState
? "block-share active"
: "block-share"
}
>
<a href="#page_wrapper">Back to top</a>
</div>
</div>
</div>
</div>
<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"
<button
id="sharePage"
aria-controls="sharePageLinks"
aria-expanded="true"
onClick={() => {
shareState();
}}
>
<li className="govuk-footer__inline-list-item">
{t("common:social-bar-share-link")}
</button>
<ul
className={
showShareState
? "block-share active"
: "block-share"
}
id="sharePageLinks"
aria-labelledby="sharePage"
>
<li>
<a
href="http://www.gov.uk/government/publications/appeals-casework-portal-documentation"
id="aTermsConds"
className="govuk-footer__link"
target="_blank"
rel="noreferrer"
href="https://twitter.com/intent/tweet?url=https%3A//gov.wales/"
className="twitter"
>
{t(
"common:footer-terms-conditions-link"
)}
<span className="vo_hidden">
{t(
"common:social-bar-share-via-link"
)}{" "}
</span>
Twitter
</a>
</li>
<li className="govuk-footer__inline-list-item">
<li>
<a
href="https://www.gov.uk/government/publications/planning-inspectorate-privacy-notices"
id="aPrivacy"
className="govuk-footer__link"
target="_blank"
rel="noreferrer"
href="https://www.facebook.com/sharer/sharer.php?u=https%3A//gov.wales/"
className="facebook"
>
{t("common:footer-privacy-link")}
<span className="vo_hidden">
Share this page via{" "}
</span>
Facebook
</a>
</li>
<li className="govuk-footer__inline-list-item">
<li>
<a
href="https://www.gov.uk/guidance/appeals-casework-portal-privacy-cookies"
id="aCookies"
className="govuk-footer__link"
target="_blank"
rel="noreferrer"
href="mailto:?body=https%3A//gov.wales/&amp;subject=Shared%20from%20gov.wales"
className="email"
>
{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"
rel="noreferrer"
>
{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"
rel="noreferrer"
>
{t("common:footer-feedback-link")}
<span className="vo_hidden">
Share this page via{" "}
</span>
Email
</a>
</li>
</ul>
</nav>
</div>
<div
className="footer_logo container-fluid"
id="footer_logo"
id="sharebar__backtotop"
className="btn--outlined btn--arrow-up"
>
<a
href="https://gov.wales/"
className="footer__logo"
id="footerlogo"
>
<span className="visually-hidden">Home</span>
<a href="#page_wrapper">
{t("common:back-to-top-link")}
</a>
</div>
</div>
</div>
</div>
</footer>
<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"
rel="noreferrer"
>
{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"
rel="noreferrer"
>
{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"
rel="noreferrer"
>
{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"
rel="noreferrer"
>
{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"
rel="noreferrer"
>
{t("common:footer-feedback-link")}
</a>
</li>
</ul>
</nav>
<div
className="footer_logo container-fluid"
id="footer_logo"
>
<a
href="https://gov.wales/"
className="footer__logo"
id="footerlogo"
>
<span className="visually-hidden">
Home
</span>
</a>
</div>
</div>
</div>
</div>
</footer>
</>
);
}
+59 -9
View File
@@ -8,7 +8,25 @@ const Header = (props) => {
const router = useRouter();
const { locale } = router;
const { setLogout } = props;
const { setLogout, serviceName } = props;
const noSignoutLink = [
"/",
"/logout",
"/dns",
"/dns/application-process",
"/dns/help",
"/dns/contact-us",
"/dns/applications",
"/dns/application-view",
];
const hasContactLink = [
"/dns",
"/dns/application-process",
"/dns/help",
"/dns/contact-us",
"/dns/applications",
"/dns/application-view",
];
return (
<header
@@ -65,10 +83,13 @@ const Header = (props) => {
<div className="govuk-header__content govuk-!-width-one-half govuk-!-margin-top-3">
<Link href="/logout">
<a
onClick={() => {
window.localStorage.clear();
}}
className="govuk-header__link
govuk-header__link--service-name"
>
{t("common:service-name")}
{serviceName || t("common:service-name")}
</a>
</Link>
</div>
@@ -95,14 +116,30 @@ const Header = (props) => {
</div>
<div className="content">
<ul>
{router.pathname == "/logout" ? (
{hasContactLink.includes(router.pathname) ==
true ? (
<li>
<Link href="/dns/contact-us">
<a className="govuk-header__link ">
Contact
</a>
</Link>
</li>
) : (
""
) : router.pathname == "/" ? (
)}
{noSignoutLink.includes(router.pathname) ==
true ? (
""
) : (
<li>
<Link href="/logout">
<a className="govuk-header__link ">
<a
onClick={() => {
window.localStorage.clear();
}}
className="govuk-header__link "
>
{t("common:signout-label")}
</a>
</Link>
@@ -149,16 +186,29 @@ const Header = (props) => {
</div>
</div>
<div className="fullNav">
{router.pathname != "/" ||
router.pathname != "/logout" ? (
<Link href="/logout">
{hasContactLink.includes(router.pathname) == true ? (
<Link href="/dns/contact-us">
<a className="govuk-header__link govuk-!-margin-right-3">
{t("common:signout-label")}
Contact
</a>
</Link>
) : (
""
)}
{noSignoutLink.includes(router.pathname) == true ? (
""
) : (
<Link href="/logout">
<a
onClick={() => {
window.localStorage.clear();
}}
className="govuk-header__link govuk-!-margin-right-3"
>
{t("common:signout-label")}
</a>
</Link>
)}
<Link
href={
+1 -1
View File
@@ -11,7 +11,7 @@ export default function SkipLink(props) {
</Head>
<div className="">
<Header courseName="Appeals Casework Portal" />
<Header courseName="Planning Casework Portal" />
<div className="govuk-width-container">
<Banner />
<main
@@ -23,6 +23,7 @@ const AwaitingSubmission = (props) => {
showTopThree={
props.awaitingSubmission.awaitingSubmission
}
topThreeType={"awaitingSubmission"}
/>
</div>
<div className="cardVieAll">
+4 -1
View File
@@ -18,7 +18,10 @@ const MyCases = (props) => {
{t("myportal:mycases-card-title")}
</h3>
<div className="cardModuleContainer">
<TopThree showTopThree={props.myCases.myCases} />
<TopThree
showTopThree={props.myCases.myCases}
topThreeType={"myCases"}
/>
</div>
<div className="cardVieAll">
+1
View File
@@ -21,6 +21,7 @@ const MyRepresentations = (props) => {
<div className="cardModuleContainer">
<TopThree
showTopThree={props.myRepresentations.myRepresentations}
topThreeType={"myRepresentations"}
/>
</div>
+61 -17
View File
@@ -1,35 +1,79 @@
import Link from "next/link";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
import { setCurrentReference } from "../../store/currentView/action";
import { connect } from "react-redux";
const TopThree = (props) => {
let { t } = useTranslation();
const { showTopThree } = props;
const { showTopThree, setCurrentReference, topThreeType } = props;
const router = useRouter();
const { locale } = router;
let topthreeRow = [];
for (var i = 0; i < 3; i++)
topthreeRow.push(
<div className="cardModuleItem" key={i}>
<div className="cardModuleDetails">
<div className="cardModuleReference">
<b>Case reference:</b>{" "}
<Link href="/case">
<a>{props.showTopThree.value[i].reference}</a>
</Link>
</div>
<div className="carModuleAddress">
<b>Address: </b> {props.showTopThree.value[i].address}
for (var i = 0; i < 3; i++) {
(function (i) {
topthreeRow.push(
<div className="cardModuleItem" key={i}>
<div className="cardModuleDetails">
<div className="cardModuleReference">
<b>Case reference:</b>{" "}
<Link
href={
topThreeType == "awaitingSubmission"
? "/representation"
: "/case"
}
>
<a
data-id={i}
onClick={() => {
setCurrentReference({
"currentReference":
showTopThree.value[i].reference,
"currentType": topThreeType,
});
}}
>
{showTopThree.value[i].reference}
</a>
</Link>
</div>
{topThreeType != "awaitingSubmission" ? (
<div className="carModuleAddress">
<b>Address: </b>
{showTopThree.value[i].address1}
</div>
) : (
""
)}
{topThreeType == "awaitingSubmission" ? (
<div className="carModuleAddress">
Make Representation on Case Incomplete, not
submitted
</div>
) : (
""
)}
</div>
<div className="cardModuleRemoveCase"> &mdash;</div>
</div>
<div className="cardModuleRemoveCase"> &mdash;</div>
</div>
);
);
})(i);
}
return <>{topthreeRow}</>;
};
export default TopThree;
const mapDispatchToProps = (dispatch) => {
return {
setCurrentReference: (currentReference) => {
dispatch(setCurrentReference(currentReference));
},
};
};
export default connect(null, mapDispatchToProps)(TopThree);
+32 -7
View File
@@ -1,9 +1,13 @@
import Link from "next/link";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
import { setCurrentReference } from "../../store/currentView/action";
import { connect } from "react-redux";
const ViewAllResults = (props) => {
const { searchString, searchResultsObj, currentView, setCurrentReference } =
props;
export default function ViewAllResults(props) {
const { searchString, searchResultsObj, currentView } = props;
let { t } = useTranslation();
const router = useRouter();
@@ -18,7 +22,15 @@ export default function ViewAllResults(props) {
<div className="govuk-summary-list__row" key={key}>
<dd className="govuk-summary-list__value govuk-!-font-size-14 govuk-!-padding-left-2">
<Link href="/case">
<a>
<a
onClick={() => {
setCurrentReference({
"currentReference":
resultsArr[index].reference,
"currentType": currentView.viewKey,
});
}}
>
<span className="results-visually-hidden">
Case Reference:
</span>
@@ -102,12 +114,25 @@ export default function ViewAllResults(props) {
<div className="govuk-grid-row">
<div className="govuk-grid-column-full">
<div className="govuk-button-group">
<Link href="/myportal">
<a className="govuk-button">Back</a>
</Link>
<a
onClick={() => router.back()}
className="govuk-button"
>
Back
</a>
</div>
</div>
</div>
</>
);
}
};
const mapDispatchToProps = (dispatch) => {
return {
setCurrentReference: (currentReference) => {
dispatch(setCurrentReference(currentReference));
},
};
};
export default connect(null, mapDispatchToProps)(ViewAllResults);
+4 -1
View File
@@ -19,7 +19,10 @@ const WatchedCases = (props) => {
{t("myportal:watchedcases-card-title")}
</h3>
<div className="cardModuleContainer">
<TopThree showTopThree={props.watchedCases.watchedCases} />
<TopThree
showTopThree={props.watchedCases.watchedCases}
topThreeType={"watchedCases"}
/>
</div>
<div className="cardVieAll">
+45 -10
View File
@@ -157,17 +157,52 @@ let CreateCase = (props) => {
return (
<option
key={key}
value={optionsObj[
key
].Label.LocalizedLabels[0].Label.replace(
/[\s\-\+\(\)\,]/g,
""
).toLowerCase()}
>
{
optionsObj[key].Label
.LocalizedLabels[0].Label
value={
_.isEmpty(
optionsObj[key].Label
)
? ""
: _.isEmpty(
optionsObj[key]
.Label
.LocalizedLabels
)
? ""
: _.isEmpty(
optionsObj[key]
.Label
.LocalizedLabels[0]
.Label
)
? ""
: optionsObj[
key
].Label.LocalizedLabels[0].Label.replace(
/[\s\-\+\(\)\,]/g,
""
).toLowerCase()
}
>
{_.isEmpty(optionsObj[key])
? ""
: _.isEmpty(
optionsObj[key].Label
)
? ""
: _.isEmpty(
optionsObj[key].Label
.LocalizedLabels
)
? ""
: _.isEmpty(
optionsObj[key].Label
.LocalizedLabels[0]
.Label
)
? ""
: optionsObj[key].Label
.LocalizedLabels[0]
.Label}
</option>
);
})}
+38
View File
@@ -0,0 +1,38 @@
import Link from "next/link";
import { useRouter } from "next/router";
import { useContext } from "react";
import useTranslation from "next-translate/useTranslation";
import Summary from "./case/representation";
const CaseSummary = (props) => {
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">
<Summary
myCases={props.myCases}
myRepresentations={props.myRepresentations}
watchedCases={props.watchedCases}
awaitingSubmission={props.awaitingSubmission}
caseReference={props.caseReference}
currentType={props.currentType}
searchResultsObj={props.searchResultsObj}
searchString={props.searchString}
props={props.props}
/>
</div>
</div>
</main>
);
};
export default CaseSummary;
+30 -11
View File
@@ -1,18 +1,20 @@
import Link from "next/link";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
import { setCurrentReference } from "../../store/currentView/action";
import { connect } from "react-redux";
export default function SearchResults(props) {
const { searchString, searchResultsObj } = props;
const SearchResults = (props) => {
const { searchString, searchResultsObj, setCurrentReference } = props;
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
var resultsArr = props.searchResultsObj.searchResultsObj.value || [{}];
var resultsArr = searchResultsObj.value || [{}];
const resultRow = Object.keys(resultsArr).map((key, index) => {
<div className="govuk-summary-list__row">
<dd className="govuk-summary-list__value govuk-!-font-size-14 govuk-!-padding-left-2">
<dd className="govuk-summary-list__value govuk-!-font-size-14 ">
<Link href="/case">
<a>
<span className="results-visually-hidden">
@@ -58,15 +60,13 @@ export default function SearchResults(props) {
</h1>
<p className="govuk-body">
{t("search:searchresults-count-label", {
count: props.searchResultsObj.searchResultsObj[
"@odata.count"
].toString(),
count: searchResultsObj["@odata.count"].toString(),
})}
. You searched for <em>&quot;{searchString}&quot;</em>
</p>
<dl className="govuk-summary-list govuk-!-margin-bottom-9 results">
<div className="govuk-summary-list__row results-headings">
<dd className="govuk-summary-list__key govuk-!-font-size-14 results_wider govuk-!-padding-left-2">
<dd className="govuk-summary-list__key govuk-!-font-size-14 results_wider ">
{t("search:searchresults-case-reference-label")}
</dd>
<dd className="govuk-summary-list__key govuk-!-font-size-14">
@@ -89,9 +89,18 @@ export default function SearchResults(props) {
{resultsArr.map((item, key) => {
return (
<div className="govuk-summary-list__row" key={key}>
<dd className="govuk-summary-list__value govuk-!-font-size-14 govuk-!-padding-left-2">
<dd className="govuk-summary-list__value govuk-!-font-size-14 ">
<Link href="/case">
<a>
<a
onClick={() => {
setCurrentReference({
"currentReference":
item.title,
"currentType":
"searchResultsObj",
});
}}
>
<span className="results-visually-hidden">
Case Reference:
</span>
@@ -151,4 +160,14 @@ export default function SearchResults(props) {
</div>
</div>
);
}
};
const mapDispatchToProps = (dispatch) => {
return {
setCurrentReference: (currentReference) => {
dispatch(setCurrentReference(currentReference));
},
};
};
export default connect(null, mapDispatchToProps)(SearchResults);
+10 -8
View File
@@ -20,7 +20,10 @@ export default function Search(props) {
>
<div className="govuk-grid-row">
<div className="govuk-grid-column-full">
<SearchResults searchString={searchString} searchResultsObj={searchResultsObj}/>
<SearchResults
searchString={searchString}
searchResultsObj={searchResultsObj.searchResultsObj}
/>
</div>
</div>
<div className="govuk-grid-row">
@@ -31,13 +34,12 @@ export default function Search(props) {
{t("search:searchresults-search-button-label")}
</a>
</Link>
<Link href="/advancedsearch">
<a className="govuk-button govuk-button--secondary">
{t(
"search:searchresults-new-search-button-label"
)}
</a>
</Link>
<a
onClick={() => router.back()}
className="govuk-button govuk-button--secondary"
>
{t("search:searchresults-new-search-button-label")}
</a>
</div>
</div>
</div>
+18
View File
@@ -29,6 +29,9 @@
"/case": [
"case"
],
"/representation": [
"case"
],
"/newappeal": [
"newappeal"
],
@@ -37,6 +40,21 @@
],
"/newappeal/*": [
"newappeal"
],
"/dns/*": [
"dnsCommon"
],
"/dns": [
"dnsCommon",
"dnsHome"
],
"/dns/applications": [
"dnsCommon",
"dnsApplications"
],
"/dns/application-view": [
"dnsCommon",
"dnsApplicationView"
]
}
}
+4 -1
View File
@@ -13,5 +13,8 @@
"footer-accessibility-link": "Hygyrchedd",
"footer-feedback-link": "Adborth",
"mobile-nav-label": "Dewislen",
"signout-label": "Cofrestrwch allan"
"signout-label": "Cofrestrwch allan",
"back-to-top-link": "Nôl i dop y dudalen",
"social-bar-share-link": "Rhannur dudalen hon",
"social-bar-share-via-link": "Rhannur dudalen hon ar"
}
+3
View File
@@ -0,0 +1,3 @@
{
"page-parent-title": "Tudalen Ceisiadau"
}
+14
View File
@@ -0,0 +1,14 @@
{
"page-title": "Tudalen Ceisiadau",
"page-intro-paragraph-1": "Y ceisiadau a restrir ywr rhai:",
"page-intro-list-item-1": "Lle maer datblygwr wedi hysbysur Arolygiaeth Gynllunio yn ysgrifenedig eu bod yn bwriadu cyflwyno cais i ni yn y dyfodol",
"page-intro-list-item-2": "Lle cafodd cais ei wneud eisoes ir Arolygiaeth Gynllunio ac maen mynd drwyr broses archwilio",
"page-intro-list-item-3": "Lle penderfynwyd ar y cynnig.",
"page-intro-paragraph-2": "Defnyddiwch y tabl isod i ddod o hyd i geisiadau fesul cam neu fath. Fel arall, defnyddiwch y map trwy glicio ar y marcwyr i fynd ir dudalen geisiadau. Mae rhestr o ddigwyddiadau a therfynau amser allweddol ar gyfer pob cais ar gael ar ein ",
"page-intro-paragraph-2-link": "tudalen galendr",
"result-list-heading-label-reference": "Cyfeirnod",
"result-list-heading-label-application": "Cais",
"result-list-heading-label-developer": "Datblygwr",
"result-list-heading-label-type": "Math",
"result-list-heading-label-status": "Statws"
}
+9
View File
@@ -0,0 +1,9 @@
{
"service-name": "Datblygiadau o Arwyddocâd Cenedlaethol",
"result-list-show-label": "Dangos",
"result-list-entries-label": "o gofnodion",
"result-list-showing-label": "Dangos {{recordIndex}} i {{pagingIndex}} o {{totalRecords}} o gofnodion",
"result-list-search-label": "Hidlo",
"result-list-previous-label": "Blaenorol",
"result-list-next-label": "Nesaf"
}
+15
View File
@@ -0,0 +1,15 @@
{
"title-paragraph": "Mae Datblygiad o Arwyddocâd Cenedlaethol (DAC) yn fath o gais cynllunio ar gyfer prosiect seilwaith mawr sydd o bwysigrwydd cenedlaethol yng Nghymru. Yn y fan hon, gallwch gael gwybod am geisiadau DAC arfaethedig. Rheolir y safle hwn gan yr Arolygiaeth Gynllunio.",
"title-application-search-placeholder": "Chwilio enw'r cais",
"title-application-search-button": "Chwilio",
"links-applications-title": "Ceisiadau",
"links-applications-intro-paragraph": "Rhestr or holl Ddatblygiadau o Arwyddocâd Cenedlaethol sydd eisoes wedi cael eu cyflwyno ar rhai hynny rydym yn disgwyl iddynt gael eu cyflwyno.",
"links-help-title": "Cymorth",
"links-help-intro-paragraph": "Gwybodaeth am y wefan hon.",
"links-guidance-title": "Canllawiau",
"links-guidance-intro-paragraph": "Trosolwg a chanllawiau manwl ar y broses ymgeisio ar gyfer Datblygiadau o Arwyddocâd Cenedlaethol.",
"links-contactus-title": "Cysylltu â ni",
"links-contactus-intro-paragraph": "Cysylltu â ni.",
"latest-applications-title": "Ceisiadau Diweddaraf",
"applications-for-comment-title": "Ceisiadau syn agored ar gyfer sylwadau"
}
+4 -1
View File
@@ -13,5 +13,8 @@
"footer-accessibility-link": "Accessibility",
"footer-feedback-link": "Feedback",
"mobile-nav-label": "Menu",
"signout-label": "Sign out"
"signout-label": "Sign out",
"back-to-top-link": "Back to top",
"social-bar-share-link": "Share this page",
"social-bar-share-via-link": "Share this page via"
}
+3
View File
@@ -0,0 +1,3 @@
{
"page-parent-title": "Applications"
}
+14
View File
@@ -0,0 +1,14 @@
{
"page-title": "Applications",
"page-intro-paragraph-1": "The applications listed are those:",
"page-intro-list-item-1": "Where the developer has advised the Planning Inspectorate in writing that they intend to submit an application to us in the future",
"page-intro-list-item-2": "Where an application has already been made to the Planning Inspectorate and is undergoing the examination process",
"page-intro-list-item-3": "Where a proposal has been decided.",
"page-intro-paragraph-2": "Use the table below to find applications by stage or type. Alternatively, use the map by clicking on the markers to go to the applications page. A list of key events and deadlines for all applications is available on our ",
"page-intro-paragraph-2-link": "calendar page",
"result-list-heading-label-reference": "Reference",
"result-list-heading-label-application": "Application",
"result-list-heading-label-developer": "Developer",
"result-list-heading-label-type": "Type",
"result-list-heading-label-status": "Status"
}
+9
View File
@@ -0,0 +1,9 @@
{
"service-name": "Developments of National Significance",
"result-list-show-label": "Show",
"result-list-entries-label": "entries",
"result-list-showing-label": "Showing {{recordIndex}} to {{pagingIndex}} of {{totalRecords}} entries",
"result-list-search-label": "Search",
"result-list-previous-label": "Previous",
"result-list-next-label": "Next"
}
+15
View File
@@ -0,0 +1,15 @@
{
"title-paragraph": "A Development of National Significance (DNS) is a type of planning application for a large infrastructure project of national importance in Wales. Here you can find out about proposed DNS applications. This site is managed by the Planning Inspectorate.",
"title-application-search-placeholder": "Search application name",
"title-application-search-button": "Go",
"links-applications-title": "Applications",
"links-applications-intro-paragraph": "A list of all the Developments of National Significance that have already been submitted and those we are expecting to be submitted.",
"links-help-title": "Help",
"links-help-intro-paragraph": "Information about this website.",
"links-guidance-title": "Guidance",
"links-guidance-intro-paragraph": "An overview and detailed guidance on the Developments of National Significance application process",
"links-contactus-title": "Contact us",
"links-contactus-intro-paragraph": "How to get in touch with The Planning Inspectorate.",
"latest-applications-title": "Latest applications",
"applications-for-comment-title": "Applications open for comments"
}
+6 -3
View File
@@ -5,7 +5,7 @@
"scripts": {
"dev": "next dev",
"dev:app": "node ./server/server.js && yarn lint:js",
"build": "NODE_ENV=production node_modules/next/dist/bin/next build --debug",
"build": "NODE_ENV=production node_modules/next/dist/bin/next build",
"start": "node_modules/next/dist/bin/next start"
},
"dependencies": {
@@ -29,16 +29,19 @@
"next-translate": "^1.0.7",
"pm2": "^5.1.0",
"react": "17.0.2",
"react-accessible-accordion": "^3.3.5",
"react-autosuggest": "^10.1.0",
"react-cookie-consent": "^6.2.4",
"react-datepicker": "^4.1.1",
"react-dom": "17.0.2",
"react-dropzone": "^11.3.4",
"react-redux": "^7.2.4",
"react-xml-parser": "^1.1.8",
"redux-devtools-extension": "^2.13.9",
"redux-form": "^8.3.7",
"redux-persist": "^6.0.0",
"redux-thunk": "^2.3.0",
"sass": "^1.35.1",
"sass": "1.32",
"sass-loader": "^12.1.0",
"swr": "^0.5.6",
"webpack": "^5.40.0",
@@ -52,4 +55,4 @@
"eslint-config-next": "^11.0.1",
"prettier": "2.3.2"
}
}
}
+37 -8
View File
@@ -1,13 +1,42 @@
// 404.js
import Link from "next/link";
import Head from "next/head";
import Header from "../components/header";
import Banner from "../components/banner";
import CookieBanner from "../components/cookieBanner";
import useTranslation from "next-translate/useTranslation";
import Footer from "../components/footer";
const FourOhFour = (props) => {
let { t, lang } = useTranslation();
const { footerLinks, pages } = props;
export default function FourOhFour() {
return (
<>
<h1>404 - Page Not Found</h1>
<Link href="/">
<a>Go back home</a>
</Link>
</>
<div>
<Head>
<title>
{t("case:page-title")} - {t("common:service-name")}
</title>
</Head>
<div id="page_wrapper">
<CookieBanner />
<Header courseName={t("common:service-name")} />
<div className="govuk-width-container govuk-!-padding-bottom-9">
<main className="govuk-main-wrapper govuk-!-padding-top-9 govuk-!-padding-bottom-9">
<div className="govuk-grid-row">
<div className="govuk-grid-column-two-thirds ">
<h1>404 - Page Not Found</h1>
<Link href="/">
<a>Go back home</a>
</Link>
</div>
</div>
</main>
</div>
<Footer footerLinks={footerLinks} />
</div>
</div>
);
}
};
export default FourOhFour;
+1 -1
View File
@@ -22,7 +22,7 @@ class MyDocument extends Document {
return (
<Html lang="en">
<Head />
<body>
<body className="js-enabled">
{!process.browser && (
<script>
window.apiRoot = `{process.env.API_ROOT}`
+41 -7
View File
@@ -1,11 +1,45 @@
function Error({ statusCode }) {
import Link from "next/link";
import Head from "next/head";
import Header from "../components/header";
import Banner from "../components/banner";
import CookieBanner from "../components/cookieBanner";
import useTranslation from "next-translate/useTranslation";
import Footer from "../components/footer";
function Error({ statusCode }, props) {
let { t, lang } = useTranslation();
const { footerLinks, pages } = props;
return (
<p>
An error....
{statusCode
? `An error ${statusCode} occurred on server`
: "An error occurred on client"}
</p>
<div>
<Head>
<title>
{t("case:page-title")} - {t("common:service-name")}
</title>
</Head>
<div id="page_wrapper">
<CookieBanner />
<Header courseName={t("common:service-name")} />
<div className="govuk-width-container govuk-!-padding-bottom-9">
<main className="govuk-main-wrapper govuk-!-padding-top-9 govuk-!-padding-bottom-9">
<div className="govuk-grid-row">
<div className="govuk-grid-column-two-thirds ">
<h1>Error</h1>
<p className="govuk-body">
{statusCode
? `An error ${statusCode} occurred on server`
: "An error occurred on the client"}
</p>
<Link href="/">
<a>Go back home</a>
</Link>
</div>
</div>
</main>
</div>
<Footer footerLinks={footerLinks} />
</div>
</div>
);
}
-34
View File
@@ -41,40 +41,6 @@ const Home = (props) => {
);
};
// export const getServerSideProps = wrapper.getServerSideProps(
// async ({ locale, store, req, res }) => {
// const token = await getToken();
// let accessToken = token.access_token;
// const apiRoot = process.browser ? window.API_ROOT : process.env.API_ROOT;
// const [pages, footerLinks, courseListContent] = await Promise.all([
// await getPages(accessToken, locale),
// await getFooterLinks(accessToken, locale),
// await getCourseList(accessToken, locale),
// ]);
// //const courseID = await getCourseID
// store.dispatch(setApiRoot(apiRoot));
// store.dispatch(setPages(pages));
// store.dispatch(setFooterLinks(footerLinks));
// store.dispatch(setCourseListContent(courseListContent));
// }
// );
// const mapStateToProps = (state) => {
// //console.log(state);
// return {
// apiroot: state.apiroot,
// courseListContent: state.courseListContent.courseListContent,
// pages: state.pages.pages,
// footerLinks: state.footerLinks.footerLinks,
// regions: state.regions,
// sectors: state.sectors,
// form: state.form,
// };
// };
const mapStateToProps = (state) => {
return {
search: state.search,
+111
View File
@@ -11,6 +11,33 @@ const ApiResponse = (req, res) => {
"postcode": "CF24 0JL",
"reference": "CAS-00017-B8X7N0",
"appellantApplicant": "Mrs Denise Williams",
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue":
"Planning Appeal - S78",
"pinswg_appealcasetype": "846040000",
"statuscode@OData.Community.Display.V1.FormattedValue": "",
"statuscode": "1",
"caseDetails": {
"casetype": "",
"lpa": "",
"caseSummary": "",
"caseOfficer": "",
"procedure": "",
"status": "",
"decision": "",
"outcome_document": "",
"caseLinkStatus": "",
"linkedCases": "",
},
"caseDates": {
"start_date": "",
"questionnaireDue": "",
"statementsDue": "",
"interestedPartyCommentsdue": "",
"appellantLPAFinalCommentsdue": "",
"inquiryEvidenceDue": "",
"eventDate": "",
"decisionDate": "",
},
},
{
"@odata.etag": 'W/"547952"',
@@ -21,6 +48,34 @@ const ApiResponse = (req, res) => {
"postcode": "CF24 0JL",
"reference": "CAS-00016-Y9K9Q0",
"appellantApplicant": "Mrs Denise Williams",
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue":
"Planning Appeal - S78",
"pinswg_appealcasetype": "846040000",
"statuscode@OData.Community.Display.V1.FormattedValue":
"In Progress",
"statuscode": "1",
"caseDetails": {
"casetype": "",
"lpa": "",
"caseSummary": "",
"caseOfficer": "",
"procedure": "",
"status": "",
"decision": "",
"outcome_document": "",
"caseLinkStatus": "",
"linkedCases": "",
},
"caseDates": {
"start_date": "",
"questionnaireDue": "",
"statementsDue": "",
"interestedPartyCommentsdue": "",
"appellantLPAFinalCommentsdue": "",
"inquiryEvidenceDue": "",
"eventDate": "",
"decisionDate": "",
},
},
{
"@odata.etag": 'W/"547952"',
@@ -31,6 +86,34 @@ const ApiResponse = (req, res) => {
"postcode": "CF24 0JL",
"reference": "CAS-00011-K1N0J8",
"appellantApplicant": "Mrs Denise Williams",
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue":
"Planning Appeal - S78",
"pinswg_appealcasetype": "846040000",
"statuscode@OData.Community.Display.V1.FormattedValue":
"In Progress",
"statuscode": "1",
"caseDetails": {
"casetype": "",
"lpa": "",
"caseSummary": "",
"caseOfficer": "",
"procedure": "",
"status": "",
"decision": "",
"outcome_document": "",
"caseLinkStatus": "",
"linkedCases": "",
},
"caseDates": {
"start_date": "",
"questionnaireDue": "",
"statementsDue": "",
"interestedPartyCommentsdue": "",
"appellantLPAFinalCommentsdue": "",
"inquiryEvidenceDue": "",
"eventDate": "",
"decisionDate": "",
},
},
{
"@odata.etag": 'W/"547952"',
@@ -41,6 +124,34 @@ const ApiResponse = (req, res) => {
"postcode": "CF24 0JL",
"reference": "CAS-00015-L7J9H1",
"appellantApplicant": "Mrs Denise Williams",
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue":
"Planning Appeal - S78",
"pinswg_appealcasetype": "846040000",
"statuscode@OData.Community.Display.V1.FormattedValue":
"In Progress",
"statuscode": "1",
"caseDetails": {
"casetype": "",
"lpa": "",
"caseSummary": "",
"caseOfficer": "",
"procedure": "",
"status": "",
"decision": "",
"outcome_document": "",
"caseLinkStatus": "",
"linkedCases": "",
},
"caseDates": {
"start_date": "",
"questionnaireDue": "",
"statementsDue": "",
"interestedPartyCommentsdue": "",
"appellantLPAFinalCommentsdue": "",
"inquiryEvidenceDue": "",
"eventDate": "",
"decisionDate": "",
},
},
],
});
+98 -6
View File
@@ -3,7 +3,7 @@ const ApiResponse = (req, res) => {
res.json({
"value": [
{
"@odata.etag": 'W/"547952"',
"@odata.etag": "W547952",
"lpaname": "Vale of Glamorgan Council",
"accountid": "56e7ef63-7e64-eb11-aaba-00224800be9c",
"address1": "21 Courtenay Road",
@@ -17,9 +17,32 @@ const ApiResponse = (req, res) => {
"statuscode@OData.Community.Display.V1.FormattedValue":
"In Progress",
"statuscode": "1",
"caseDetails": {
"casetype": "",
"lpa": "",
"caseSummary":
"Erection of a two-storey chalet style detached dwelling",
"caseOfficer": "Neale Oliver",
"procedure": "Written representations",
"status": "In progress",
"decision": "Allowed",
"outcome_document": "23424Appeal Decision.pdf",
"caseLinkStatus": "not linked",
"linkedCases": "none",
},
"caseDates": {
"start_date": "26-May-21",
"questionnaireDue": "02-Jun-21",
"statementsDue": "30-Jun-21",
"interestedPartyCommentsdue": "30-Jun-21",
"appellantLPAFinalCommentsdue": "4-Jul-21",
"inquiryEvidenceDue": "N/A",
"eventDate": "Date arranged",
"decisionDate": "Not yet decided",
},
},
{
"@odata.etag": 'W/"547952"',
"@odata.etag": "W547952",
"lpaname": "Bridgend CBC",
"accountid": "56e7ef63-7e64-eb11-aaba-00224800be9c",
"address1": "17 Colin Way",
@@ -33,10 +56,33 @@ const ApiResponse = (req, res) => {
"statuscode@OData.Community.Display.V1.FormattedValue":
"In Progress",
"statuscode": "1",
"caseDetails": {
"casetype": "",
"lpa": "",
"caseSummary":
"Erection of a two-storey chalet style detached dwelling",
"caseOfficer": "Neale Oliver",
"procedure": "Written representations",
"status": "In progress",
"decision": "Allowed",
"outcome_document": "23424Appeal Decision.pdf",
"caseLinkStatus": "not linked",
"linkedCases": "none",
},
"caseDates": {
"start_date": "26-May-21",
"questionnaireDue": "02-Jun-21",
"statementsDue": "30-Jun-21",
"interestedPartyCommentsdue": "30-Jun-21",
"appellantLPAFinalCommentsdue": "4-Jul-21",
"inquiryEvidenceDue": "N/A",
"eventDate": "Date arranged",
"decisionDate": "Not yet decided",
},
},
{
"@odata.etag": 'W/"547952"',
"lpaname": "Cardiff County Council Planning (A)",
"@odata.etag": "W547952",
"lpaname": "Cardiff County Council Planning (A)",
"accountid": "56e7ef63-7e64-eb11-aaba-00224800be9c",
"address1": "120 Severn Grove",
"town": "Cardiff",
@@ -49,10 +95,33 @@ const ApiResponse = (req, res) => {
"statuscode@OData.Community.Display.V1.FormattedValue":
"In Progress",
"statuscode": "1",
"caseDetails": {
"casetype": "",
"lpa": "",
"caseSummary":
"Erection of a two-storey chalet style detached dwelling",
"caseOfficer": "Neale Oliver",
"procedure": "Written representations",
"status": "In progress",
"decision": "Allowed",
"outcome_document": "23424Appeal Decision.pdf",
"caseLinkStatus": "not linked",
"linkedCases": "none",
},
"caseDates": {
"start_date": "26-May-21",
"questionnaireDue": "02-Jun-21",
"statementsDue": "30-Jun-21",
"interestedPartyCommentsdue": "30-Jun-21",
"appellantLPAFinalCommentsdue": "4-Jul-21",
"inquiryEvidenceDue": "N/A",
"eventDate": "Date arranged",
"decisionDate": "Not yet decided",
},
},
{
"@odata.etag": 'W/"547952"',
"lpaname": "Cardiff County Council Planning",
"@odata.etag": "W547952",
"lpaname": "Cardiff County Council Planning",
"accountid": "56e7ef63-7e64-eb11-aaba-00224800be9c",
"address1": "25 Merches Gardens",
"town": "Cardiff",
@@ -65,6 +134,29 @@ const ApiResponse = (req, res) => {
"statuscode@OData.Community.Display.V1.FormattedValue":
"In Progress",
"statuscode": "1",
"caseDetails": {
"casetype": "",
"lpa": "",
"caseSummary":
"Erection of a two-storey chalet style detached dwelling",
"caseOfficer": "Neale Oliver",
"procedure": "Written representations",
"status": "In progress",
"decision": "Allowed",
"outcome_document": "23424Appeal Decision.pdf",
"caseLinkStatus": "not linked",
"linkedCases": "none",
},
"caseDates": {
"start_date": "26-May-21",
"questionnaireDue": "02-Jun-21",
"statementsDue": "30-Jun-21",
"interestedPartyCommentsdue": "30-Jun-21",
"appellantLPAFinalCommentsdue": "4-Jul-21",
"inquiryEvidenceDue": "N/A",
"eventDate": "Date arranged",
"decisionDate": "Not yet decided",
},
},
],
});
+116
View File
@@ -11,6 +11,35 @@ const ApiResponse = (req, res) => {
"postcode": "CF24 0JL",
"reference": "CAS-00009-W8N6W4",
"appellantApplicant": "Mrs Denise Williams",
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue":
"Planning Appeal - S78",
"pinswg_appealcasetype": "846040000",
"statuscode@OData.Community.Display.V1.FormattedValue":
"In Progress",
"statuscode": "1",
"caseDetails": {
"casetype": "",
"lpa": "",
"caseSummary":
"Erection of a two-storey chalet style detached dwelling",
"caseOfficer": "Neale Oliver",
"procedure": "Written representations",
"status": "In progress",
"decision": "Allowed",
"outcome_document": "23424Appeal Decision.pdf",
"caseLinkStatus": "not linked",
"linkedCases": "none",
},
"caseDates": {
"start_date": "26-May-21",
"questionnaireDue": "02-Jun-21",
"statementsDue": "30-Jun-21",
"interestedPartyCommentsdue": "30-Jun-21",
"appellantLPAFinalCommentsdue": "4-Jul-21",
"inquiryEvidenceDue": "N/A",
"eventDate": "Date arranged",
"decisionDate": "Not yet decided",
},
},
{
"@odata.etag": 'W/"547952"',
@@ -21,6 +50,35 @@ const ApiResponse = (req, res) => {
"postcode": "CF24 0JL",
"reference": "CAS-00010-J9W6L5",
"appellantApplicant": "Mrs Denise Williams",
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue":
"Planning Appeal - S78",
"pinswg_appealcasetype": "846040000",
"statuscode@OData.Community.Display.V1.FormattedValue":
"In Progress",
"statuscode": "1",
"caseDetails": {
"casetype": "",
"lpa": "",
"caseSummary":
"Erection of a two-storey chalet style detached dwelling",
"caseOfficer": "Neale Oliver",
"procedure": "Written representations",
"status": "In progress",
"decision": "Allowed",
"outcome_document": "23424Appeal Decision.pdf",
"caseLinkStatus": "not linked",
"linkedCases": "none",
},
"caseDates": {
"start_date": "26-May-21",
"questionnaireDue": "02-Jun-21",
"statementsDue": "30-Jun-21",
"interestedPartyCommentsdue": "30-Jun-21",
"appellantLPAFinalCommentsdue": "4-Jul-21",
"inquiryEvidenceDue": "N/A",
"eventDate": "Date arranged",
"decisionDate": "Not yet decided",
},
},
{
"@odata.etag": 'W/"547952"',
@@ -31,6 +89,35 @@ const ApiResponse = (req, res) => {
"postcode": "CF24 0JL",
"reference": "CAS-00011-K1N0J8",
"appellantApplicant": "Mrs Denise Williams",
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue":
"Planning Appeal - S78",
"pinswg_appealcasetype": "846040000",
"statuscode@OData.Community.Display.V1.FormattedValue":
"In Progress",
"statuscode": "1",
"caseDetails": {
"casetype": "",
"lpa": "",
"caseSummary":
"Erection of a two-storey chalet style detached dwelling",
"caseOfficer": "Neale Oliver",
"procedure": "Written representations",
"status": "In progress",
"decision": "Allowed",
"outcome_document": "23424Appeal Decision.pdf",
"caseLinkStatus": "not linked",
"linkedCases": "none",
},
"caseDates": {
"start_date": "26-May-21",
"questionnaireDue": "02-Jun-21",
"statementsDue": "30-Jun-21",
"interestedPartyCommentsdue": "30-Jun-21",
"appellantLPAFinalCommentsdue": "4-Jul-21",
"inquiryEvidenceDue": "N/A",
"eventDate": "Date arranged",
"decisionDate": "Not yet decided",
},
},
{
"@odata.etag": 'W/"547952"',
@@ -41,6 +128,35 @@ const ApiResponse = (req, res) => {
"postcode": "CF24 0JL",
"reference": "CAS-00012-D9W6S8",
"appellantApplicant": "Mrs Denise Williams",
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue":
"Planning Appeal - S78",
"pinswg_appealcasetype": "846040000",
"statuscode@OData.Community.Display.V1.FormattedValue":
"In Progress",
"statuscode": "1",
"caseDetails": {
"casetype": "",
"lpa": "",
"caseSummary":
"Erection of a two-storey chalet style detached dwelling",
"caseOfficer": "Neale Oliver",
"procedure": "Written representations",
"status": "In progress",
"decision": "Allowed",
"outcome_document": "23424Appeal Decision.pdf",
"caseLinkStatus": "not linked",
"linkedCases": "none",
},
"caseDates": {
"start_date": "26-May-21",
"questionnaireDue": "02-Jun-21",
"statementsDue": "30-Jun-21",
"interestedPartyCommentsdue": "30-Jun-21",
"appellantLPAFinalCommentsdue": "4-Jul-21",
"inquiryEvidenceDue": "N/A",
"eventDate": "Date arranged",
"decisionDate": "Not yet decided",
},
},
],
});
+3 -2
View File
@@ -14,7 +14,7 @@ const ApiResponse = (req, res) => {
"LocalizedLabels": [
{
"Label":
"Listed Building and Convention S73 + S79",
"Listed Building and Conservation Area Consent S73 + S79",
"LanguageCode": 1033,
"IsManaged": false,
"MetadataId":
@@ -23,7 +23,8 @@ const ApiResponse = (req, res) => {
},
],
"UserLocalizedLabel": {
"Label": "Listed Building and Convention S73 + S79",
"Label":
"Listed Building and Conservation Area Consent S73 + S79",
"LanguageCode": 1033,
"IsManaged": false,
"MetadataId":
+116
View File
@@ -11,6 +11,35 @@ const ApiResponse = (req, res) => {
"postcode": "CF24 0JL",
"reference": "CAS-00009-W8N6W4",
"appellantApplicant": "Mrs Denise Williams",
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue":
"Planning Appeal - S78",
"pinswg_appealcasetype": "846040000",
"statuscode@OData.Community.Display.V1.FormattedValue":
"In Progress",
"statuscode": "1",
"caseDetails": {
"casetype": "",
"lpa": "",
"caseSummary":
"Erection of a two-storey chalet style detached dwelling",
"caseOfficer": "Neale Oliver",
"procedure": "Written representations",
"status": "In progress",
"decision": "Allowed",
"outcome_document": "23424Appeal Decision.pdf",
"caseLinkStatus": "not linked",
"linkedCases": "none",
},
"caseDates": {
"start_date": "26-May-21",
"questionnaireDue": "02-Jun-21",
"statementsDue": "30-Jun-21",
"interestedPartyCommentsdue": "30-Jun-21",
"appellantLPAFinalCommentsdue": "4-Jul-21",
"inquiryEvidenceDue": "N/A",
"eventDate": "Date arranged",
"decisionDate": "Not yet decided",
},
},
{
"@odata.etag": 'W/"547952"',
@@ -21,6 +50,35 @@ const ApiResponse = (req, res) => {
"postcode": "CF24 0JL",
"reference": "CAS-00010-J9W6L5",
"appellantApplicant": "Mrs Denise Williams",
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue":
"Planning Appeal - S78",
"pinswg_appealcasetype": "846040000",
"statuscode@OData.Community.Display.V1.FormattedValue":
"In Progress",
"statuscode": "1",
"caseDetails": {
"casetype": "",
"lpa": "",
"caseSummary":
"Erection of a two-storey chalet style detached dwelling",
"caseOfficer": "Neale Oliver",
"procedure": "Written representations",
"status": "In progress",
"decision": "Allowed",
"outcome_document": "23424Appeal Decision.pdf",
"caseLinkStatus": "not linked",
"linkedCases": "none",
},
"caseDates": {
"start_date": "26-May-21",
"questionnaireDue": "02-Jun-21",
"statementsDue": "30-Jun-21",
"interestedPartyCommentsdue": "30-Jun-21",
"appellantLPAFinalCommentsdue": "4-Jul-21",
"inquiryEvidenceDue": "N/A",
"eventDate": "Date arranged",
"decisionDate": "Not yet decided",
},
},
{
"@odata.etag": 'W/"547952"',
@@ -31,6 +89,35 @@ const ApiResponse = (req, res) => {
"postcode": "CF24 0JL",
"reference": "CAS-00011-K1N0J8",
"appellantApplicant": "Mrs Denise Williams",
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue":
"Planning Appeal - S78",
"pinswg_appealcasetype": "846040000",
"statuscode@OData.Community.Display.V1.FormattedValue":
"In Progress",
"statuscode": "1",
"caseDetails": {
"casetype": "",
"lpa": "",
"caseSummary":
"Erection of a two-storey chalet style detached dwelling",
"caseOfficer": "Neale Oliver",
"procedure": "Written representations",
"status": "In progress",
"decision": "Allowed",
"outcome_document": "23424Appeal Decision.pdf",
"caseLinkStatus": "not linked",
"linkedCases": "none",
},
"caseDates": {
"start_date": "26-May-21",
"questionnaireDue": "02-Jun-21",
"statementsDue": "30-Jun-21",
"interestedPartyCommentsdue": "30-Jun-21",
"appellantLPAFinalCommentsdue": "4-Jul-21",
"inquiryEvidenceDue": "N/A",
"eventDate": "Date arranged",
"decisionDate": "Not yet decided",
},
},
{
"@odata.etag": 'W/"547952"',
@@ -41,6 +128,35 @@ const ApiResponse = (req, res) => {
"postcode": "CF24 0JL",
"reference": "CAS-00012-D9W6S8",
"appellantApplicant": "Mrs Denise Williams",
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue":
"Planning Appeal - S78",
"pinswg_appealcasetype": "846040000",
"statuscode@OData.Community.Display.V1.FormattedValue":
"In Progress",
"statuscode": "1",
"caseDetails": {
"casetype": "",
"lpa": "",
"caseSummary":
"Erection of a two-storey chalet style detached dwelling",
"caseOfficer": "Neale Oliver",
"procedure": "Written representations",
"status": "In progress",
"decision": "Allowed",
"outcome_document": "23424Appeal Decision.pdf",
"caseLinkStatus": "not linked",
"linkedCases": "none",
},
"caseDates": {
"start_date": "26-May-21",
"questionnaireDue": "02-Jun-21",
"statementsDue": "30-Jun-21",
"interestedPartyCommentsdue": "30-Jun-21",
"appellantLPAFinalCommentsdue": "4-Jul-21",
"inquiryEvidenceDue": "N/A",
"eventDate": "Date arranged",
"decisionDate": "Not yet decided",
},
},
],
});
+36 -35
View File
@@ -35,8 +35,26 @@ const Home = (props) => {
<Header courseName={t("common:service-name")} />
<div className="govuk-width-container">
<Banner />
<Breadcrumbs slug={appealtypes} />
<Case />
<Breadcrumbs slug={appealtypes} props={props} />
<Case
myCases={props.myCases.myCases}
searchResultsObj={
props.searchResultsObj.searchResultsObj
}
myRepresentations={
props.myRepresentations.myRepresentations
}
watchedCases={props.watchedCases.watchedCases}
awaitingSubmission={
props.awaitingSubmission.awaitingSubmission
}
caseReference={
props.currentView.caseReference.currentReference
}
currentType={
props.currentView.caseReference.currentType
}
/>
</div>
<Footer footerLinks={footerLinks} />
</div>
@@ -44,38 +62,21 @@ const Home = (props) => {
);
};
// export const getServerSideProps = wrapper.getServerSideProps(
// async ({ locale, store, req, res }) => {
// const token = await getToken();
// let accessToken = token.access_token;
const mapStateToProps = (state) => {
//console.log(state);
// const apiRoot = process.browser ? window.API_ROOT : process.env.API_ROOT;
return {
currentView: state.currentView,
search: state.search,
searchResultsObj: state.searchResultsObj,
formData: state.formData,
appealType: state.appealType,
form: state.form,
myCases: state.myCases,
watchedCases: state.watchedCases,
myRepresentations: state.myRepresentations,
awaitingSubmission: state.awaitingSubmission,
};
};
// const [pages, footerLinks, courseListContent] = await Promise.all([
// await getPages(accessToken, locale),
// await getFooterLinks(accessToken, locale),
// await getCourseList(accessToken, locale),
// ]);
// //const courseID = await getCourseID
// store.dispatch(setApiRoot(apiRoot));
// store.dispatch(setPages(pages));
// store.dispatch(setFooterLinks(footerLinks));
// store.dispatch(setCourseListContent(courseListContent));
// }
// );
// const mapStateToProps = (state) => {
// //console.log(state);
// return {
// apiroot: state.apiroot,
// courseListContent: state.courseListContent.courseListContent,
// pages: state.pages.pages,
// footerLinks: state.footerLinks.footerLinks,
// regions: state.regions,
// sectors: state.sectors,
// form: state.form,
// };
// };
export default Home; //connect(mapStateToProps)(Home);
export default connect(mapStateToProps)(Home);
+153
View File
@@ -0,0 +1,153 @@
import _ from "lodash";
import Link from "next/link";
import Head from "next/head";
import Header from "../../components/header";
import Banner from "../../components/banner";
import CookieBanner from "../../components/cookieBanner";
import Breadcrumbs from "../../components/breadcrumbs";
import Footer from "../../components/footer";
import Errorpage from "../../components/errorpage";
import styles from "../../styles/Home.module.css";
import { useSelector, shallowEqual, connect } from "react-redux";
import { wrapper } from "../../store/store";
import Cookies from "cookies";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
import Main from "../../components/dns//main";
const Home = (props) => {
const { footerLinks, pages } = props;
let { t, lang } = useTranslation();
const router = useRouter();
const { locale } = router;
const { appealtypes } = router.query;
return (
<div>
<Head>
<title>Developments of National Significance</title>
</Head>
<div id="page_wrapper">
<CookieBanner />
<Header serviceName="Developments of National Significance" />
<div className="govuk-width-container">
<Banner />
<Breadcrumbs slug={appealtypes} />
<main className="govuk-main-wrapper">
<div className="govuk-row">
<h1>Guidance</h1>
<p>
Applications for Developments of National
Significance (DNS) projects are dealt with by
the Planning Inspectorate on behalf of Welsh
Government.
</p>
<p>
A DNS is a type of planning application for a
large infrastructure project of national
importance for example, a wind farm, power
station or reservoir.
</p>
<p>
A DNS differs from a normal planning application
in the way that it is decided. Instead of your
Local Planning Authority making the decision, an
Inspector examines the application and makes a
recommendation to the Welsh Minister based on
planning merits and national priorities. The
Minister then decides whether or not to grant
permission.
</p>
</div>
<div className="govuk-row">
<h2>About the process</h2>
<p>
The DNS process is designed to encourage the
applicants on such a scheme to undertake early
engagement with:
</p>
<ul className="govuk-list govuk-list--bullet">
<li>the relevant Local Planning Authority,</li>
<li>local communities,</li>
<li>statutory consultees and</li>
<li>other stakeholders.</li>
</ul>
<p>
Anyone considering a DNS project should contact
the Planning Inspectorate as soon as possible
after a site has been chosen. This will ensure
that as much work can be done to reduce
objections to a scheme as possible before
submission. This in turn allows the formal
application process to be streamlined.
</p>
</div>
<div className="govuk-row">
<h2>Information and guidance</h2>
<p>
There is a{" "}
<a href="https://gov.wales/developments-national-significance-dns-guidance">
suite of detailed Guidance for the DNS
process
</a>{" "}
on the Welsh Government site. The{" "}
<a href="https://gov.wales/developments-national-significance-dns-engaging-process">
DNS Guide for Communities
</a>{" "}
has been written with community groups or
interested parties who are not familiar with the
DNS process in mind.
</p>
</div>
<div className="govuk-row">
<h2>Forms</h2>
<p>
Applicants who wish to submit a request for
Pre-Application Advice, submit formal
notification of intention to submit a DNS
application or submit an application should
contact the Planning Inspectorate:
</p>
<p>
e-mail:{" "}
<a href="mailto:dns.wales@planninginspectorate.gov.uk">
dns.wales@planninginspectorate.gov.uk
</a>
</p>
<p>Telephone: 0303 444 5958</p>
<p>
Interested parties who wish to make a
Representation on a DNS project that has been
formally accepted by the Planning Inspectorate
can use the Representation form and submit it
via e-mail using the relevant reference number.
</p>
<p>
We strongly encourage you to discuss your
application with us in advance of submitting any
of our forms, so that we can ensure that the
resources necessary are in place and
arrangements for the invoicing of fees are in
place. If you do not provide advance notice,
this may delay the handling of your request or
the provision of our advice.
</p>
</div>
</main>
</div>
<Footer footerLinks={footerLinks} />
</div>
</div>
);
};
export default Home; //connect(mapStateToProps)(Home);
+81
View File
@@ -0,0 +1,81 @@
import _ from "lodash";
import Head from "next/head";
import Header from "../../components/header";
import Banner from "../../components/banner";
import CookieBanner from "../../components/cookieBanner";
import Breadcrumbs from "../../components/breadcrumbs";
import SearchResults from "../../components/searchresults";
import Footer from "../../components/footer";
import Errorpage from "../../components/errorpage";
import styles from "../../styles/Home.module.css";
import { useSelector, shallowEqual, connect } from "react-redux";
import { wrapper } from "../../store/store";
import Cookies from "cookies";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
import ApplicationTabs from "../../components/dns/applications/applicationTabs";
import ApplicationSummary from "../../components/dns/applications/applicationSummary";
const ApplicationView = (props) => {
const { footerLinks, pages } = props;
let { t, lang } = useTranslation();
const router = useRouter();
const { locale } = router;
const { appealtypes } = router.query;
return (
<div>
<Head>
<title>
{" "}
Applications - Developments of National Significance
</title>
</Head>
<div id="page_wrapper">
<CookieBanner />
<Header serviceName="Developments of National Significance" />
<div className="govuk-width-container">
<Banner />
<Breadcrumbs slug={appealtypes} />
<main className="govuk-main-wrapper">
<ApplicationSummary />
<div className="govuk-grid-row">
<div className="govuk-grid-column-full">
<ApplicationTabs />
</div>
</div>
</main>
</div>
<Footer footerLinks={footerLinks} />
</div>
</div>
);
};
export const getServerSideProps = wrapper.getServerSideProps(
(store) =>
async ({ query, req, res }) => {
console.log("query-", query);
// const searchResultsObj = (await getBasicSearch(query.q)) || null;
// store.dispatch(setSearchResults(searchResultsObj));
//store.dispatch(setSearch(query.q));
}
);
const mapStateToProps = (state) => {
return {
currentView: state.currentView,
search: state.search,
searchResultsObj: state.searchResultsObj,
formData: state.formData,
appealType: state.appealType,
form: state.form,
myCases: state.myCases,
watchedCases: state.watchedCases,
myRepresentations: state.myRepresentations,
awaitingSubmission: state.awaitingSubmission,
};
};
export default connect(mapStateToProps)(ApplicationView);
+78
View File
@@ -0,0 +1,78 @@
import _ from "lodash";
import Head from "next/head";
import Header from "../../components/header";
import Banner from "../../components/banner";
import CookieBanner from "../../components/cookieBanner";
import Breadcrumbs from "../../components/breadcrumbs";
import SearchResults from "../../components/searchresults";
import Footer from "../../components/footer";
import Errorpage from "../../components/errorpage";
import styles from "../../styles/Home.module.css";
import { useSelector, shallowEqual, connect } from "react-redux";
import { wrapper } from "../../store/store";
import Cookies from "cookies";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
import ApplicationIntro from "../../components/dns/applications/applicationsIntro";
import ApplicationList from "../../components/dns/applications/applicationsList";
const Applications = (props) => {
const { footerLinks, pages } = props;
let { t, lang } = useTranslation();
const router = useRouter();
const { locale } = router;
const { appealtypes } = router.query;
return (
<div>
<Head>
<title>
{" "}
{t("dnsApplications:page-title")} -{" "}
{t("dnsCommon:service-name")}
</title>
</Head>
<div id="page_wrapper">
<CookieBanner />
<Header serviceName="Developments of National Significance" />
<div className="govuk-width-container">
<Banner />
<Breadcrumbs slug={appealtypes} />
<main className="govuk-main-wrapper">
<ApplicationIntro />
<ApplicationList />
</main>
</div>
<Footer footerLinks={footerLinks} />
</div>
</div>
);
};
export const getServerSideProps = wrapper.getServerSideProps(
(store) =>
async ({ query, req, res }) => {
console.log("query-", query);
// const searchResultsObj = (await getBasicSearch(query.q)) || null;
// store.dispatch(setSearchResults(searchResultsObj));
//store.dispatch(setSearch(query.q));
}
);
const mapStateToProps = (state) => {
return {
currentView: state.currentView,
search: state.search,
searchResultsObj: state.searchResultsObj,
formData: state.formData,
appealType: state.appealType,
form: state.form,
myCases: state.myCases,
watchedCases: state.watchedCases,
myRepresentations: state.myRepresentations,
awaitingSubmission: state.awaitingSubmission,
};
};
export default connect(mapStateToProps)(Applications);
+156
View File
@@ -0,0 +1,156 @@
import _ from "lodash";
import Link from "next/link";
import Head from "next/head";
import Header from "../../components/header";
import Banner from "../../components/banner";
import CookieBanner from "../../components/cookieBanner";
import Breadcrumbs from "../../components/breadcrumbs";
import Footer from "../../components/footer";
import Errorpage from "../../components/errorpage";
import styles from "../../styles/Home.module.css";
import { useSelector, shallowEqual, connect } from "react-redux";
import { wrapper } from "../../store/store";
import Cookies from "cookies";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
import Main from "../../components/dns/main";
const Home = (props) => {
const { footerLinks, pages } = props;
let { t, lang } = useTranslation();
const router = useRouter();
const { locale } = router;
const { appealtypes } = router.query;
return (
<div>
<Head>
<title>
Contact us - Developments of National Significance
</title>
</Head>
<div id="page_wrapper">
<CookieBanner />
<Header serviceName="Developments of National Significance" />
<div className="govuk-width-container">
<Banner />
<Breadcrumbs slug={appealtypes} />
<main className="govuk-main-wrapper">
<div className="govuk-grid-row">
<div className="govuk-grid-column-two-thirds">
<h1 className="govuk-heading-l">Contact us</h1>
<p className="govuk-body">
We are located in The Welsh Government
Building, Cathays Park in Cardiff
</p>
<p className="govuk-body">
{" "}
The Planning Inspectorate
<br />
Crown Buildings <br />
Welsh Government <br />
Cathays Park
<br /> Cardiff <br />
CF10 3NQ
</p>
</div>
</div>
<div className="govuk-row govuk-!-margin-bottom-6">
<div className="map-responsive">
<iframe
width="600"
height="500"
id="gmap_canvas"
src="https://maps.google.com/maps?q=CF10%203NQ&t=&z=17&ie=UTF8&iwloc=&output=embed"
frameBorder="0"
scrolling="no"
marginHeight="0"
marginWidth="0"
></iframe>
</div>
</div>
<div className="govuk-row">
<p className="govuk-body">
{" "}
If you are contacting us regarding a Development
of National Significance, please use the
following details:
</p>
<p className="govuk-body">
Tel: <a href="tel:03034445940">03034 445 940</a>
<br />
E-mail:{" "}
<a href="mailto:dns.wales@planninginspectorate.gov.uk">
dns.wales@planninginspectorate.gov.uk
</a>
<br />
Follow us on Twitter{" "}
<a href="https://twitter.com/pinsgov">
@PINSgov
</a>
</p>
<p className="govuk-body">
Further information about contacting the
Planning Inspectorate customer services can be
viewed on GOV.Wales.
</p>
<p className="govuk-body">
The Planning Inspectorate gives advice about
applying for a Development of National
Significance or making representations about an
application (or a proposed application) although
you should note that any advice given does not
constitute legal advice upon which you can rely
and you should obtain your own legal advice and
professional advice as required. We will protect
the privacy of any personal information which
you choose to share with us and we will not hold
the information any longer than is necessary.
See our Privacy notice on GOV.UK.
</p>
<p className="govuk-body">
You should note that we have a policy commitment
to openness and transparency and you should not
provide us with confidential or commercial
information which you do not wish to be put in
the public domain.
</p>
<h3>Feedback and complaints</h3>
<p className="govuk-body">
The Planning Inspectorate aims to provide the
best possible service for its customers. We try
hard to ensure that everyone is satisfied with
the service they receive. It is inevitable that
there will sometimes be concerns about the
Examination process or the appointed inspectors
final report. We will carefully consider and
respond to any matters that you wish to raise:
contact details are on GOV.Wales.
</p>
<h3>Press and media</h3>
<p className="govuk-body">
If you are a journalist please contact our press
office directly:{" "}
</p>
<p className="govuk-body">
Telephone:{" "}
<a href="tel:03034445004">0303 444 5004</a> or{" "}
<a href="tel:03034445005">0303 444 5005</a>{" "}
<br />
Email:{" "}
<a href="mailto:press.office@planninginspectorate.gov.uk">
press.office@planninginspectorate.gov.uk
</a>
</p>
</div>
</main>
</div>
<Footer footerLinks={footerLinks} />
</div>
</div>
);
};
export default Home; //connect(mapStateToProps)(Home);
+125
View File
@@ -0,0 +1,125 @@
import _ from "lodash";
import Link from "next/link";
import Head from "next/head";
import Header from "../../components/header";
import Banner from "../../components/banner";
import CookieBanner from "../../components/cookieBanner";
import Breadcrumbs from "../../components/breadcrumbs";
import Footer from "../../components/footer";
import Errorpage from "../../components/errorpage";
import styles from "../../styles/Home.module.css";
import { useSelector, shallowEqual, connect } from "react-redux";
import { wrapper } from "../../store/store";
import Cookies from "cookies";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
import Main from "../../components/dns/main";
const Home = (props) => {
const { footerLinks, pages } = props;
let { t, lang } = useTranslation();
const router = useRouter();
const { locale } = router;
const { appealtypes } = router.query;
return (
<div>
<Head>
<title>Developments of National Significance</title>
</Head>
<div id="page_wrapper">
<CookieBanner />
<Header serviceName="Developments of National Significance" />
<div className="govuk-width-container">
<Banner />
<Breadcrumbs slug={appealtypes} />
<main className="govuk-main-wrapper">
<div className="govuk-row">
<h1>Help</h1>
<p>
Welcome to the website help page. This section
contains the following:
</p>
<h2 className="govuk-heading-s">
<Link href="#">
<a className="govuk-link">Accessibility</a>
</Link>
</h2>
<p>
For information about accessing the website and
help using the site.
</p>
<h2 className="govuk-heading-s">
<Link href="#">
<a className="govuk-link">
Terms and conditions
</a>
</Link>
</h2>
<p>
Outlines the terms and conditions of using the
site.
</p>
<h2 className="govuk-heading-s">
<Link href="#">
<a className="govuk-link">Cookies</a>
</Link>
</h2>
<p>
Provides information on cookies and how the
website uses them.
</p>
<h2 className="govuk-heading-s">
<Link href="#">
<a className="govuk-link">Privacy</a>
</Link>
</h2>
<p>View our Privacy Notice on GOV.UK.</p>
<h2 className="govuk-heading-s">
<Link href="#">
<a className="govuk-link">Welsh language</a>
</Link>
</h2>
<p>
Our commitment to providing information in Welsh
under the Planning Inspectorate Welsh Language
Scheme.
</p>
<h2 className="govuk-heading-s">
<Link href="#">
<a className="govuk-link">Sitemap</a>
</Link>
</h2>
<p>
A view of all the pages within the site and the
heirarchy of the site.
</p>
<h2 className="govuk-heading-s">
<Link href="#">
<a className="govuk-link">Useful links</a>
</Link>
</h2>
<p>
Links to other related websites and documents.
</p>
<h2 className="govuk-heading-s">
<Link href="#">
<a className="govuk-link">Contact</a>
</Link>
</h2>
<p>
Find out contact details for the Planning
Inspectorate.
</p>
</div>
</main>{" "}
</div>
<Footer footerLinks={footerLinks} />
</div>
</div>
);
};
export default Home; //connect(mapStateToProps)(Home);
+46
View File
@@ -0,0 +1,46 @@
import _ from "lodash";
import Head from "next/head";
import Header from "../../components/header";
import Banner from "../../components/banner";
import CookieBanner from "../../components/cookieBanner";
import Breadcrumbs from "../../components/breadcrumbs";
import Footer from "../../components/footer";
import Errorpage from "../../components/errorpage";
import styles from "../../styles/Home.module.css";
import { useSelector, shallowEqual, connect } from "react-redux";
import { wrapper } from "../../store/store";
import Cookies from "cookies";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
import Main from "../../components/dns//main";
const Home = (props) => {
const { footerLinks, pages } = props;
let { t, lang } = useTranslation();
const router = useRouter();
const { locale } = router;
try {
return (
<div>
<Head>
<title>Developments of National Significance</title>
</Head>
<div id="page_wrapper">
<CookieBanner />
<Header serviceName="Developments of National Significance" />
<div className="govuk-width-container">
<Banner />
<Main />
</div>
<Footer footerLinks={footerLinks} />
</div>
</div>
);
} catch (e) {
console.log(e);
return <h1>oooops</h1>;
}
};
export default Home; //connect(mapStateToProps)(Home);
-23
View File
@@ -40,27 +40,4 @@ const Home = (props) => {
);
};
// export const getServerSideProps = wrapper.getServerSideProps(
// (store) =>
// async ({ query, req, res }) => {
// const incidents = await getIncidents;
// console.log(incidents);
// }
// );
// const mapStateToProps = (state) => {
// //console.log(state);
// return {
// apiroot: state.apiroot,
// courseListContent: state.courseListContent.courseListContent,
// pages: state.pages.pages,
// footerLinks: state.footerLinks.footerLinks,
// regions: state.regions,
// sectors: state.sectors,
// form: state.form,
// };
// };
export default Home; //connect(mapStateToProps)(Home);
+17 -4
View File
@@ -70,10 +70,22 @@ export const getServerSideProps = wrapper.getServerSideProps(
async ({ query, req, res }) => {
//console.log("the query", query);
const myCases = await getMyCases();
const myRepresentations = await getMyRepresentations();
const watchedCases = await getWatchedCases();
const awaitingSubmission = await getAwaitingSubmission();
res.setHeader(
"Cache-Control",
"public, s-maxage=604800, stale-while-revalidate"
);
const [
myCases,
myRepresentations,
watchedCases,
awaitingSubmission,
] = await Promise.all([
await getMyCases(),
await getMyRepresentations(),
await getWatchedCases(),
await getAwaitingSubmission(),
]);
store.dispatch(setMyCases(myCases));
store.dispatch(setMyRepresentations(myRepresentations));
@@ -86,6 +98,7 @@ const mapStateToProps = (state) => {
//console.log(state);
return {
currentView: state.currentView,
search: state.search,
searchResultsObj: state.searchResultsObj,
formData: state.formData,
+5 -3
View File
@@ -154,15 +154,17 @@ export const getServerSideProps = wrapper.getServerSideProps(
(store) =>
async ({ query, req, res }) => {
//console.log("the query", query);
store.dispatch(setAppealTypeID(query.appealtypes));
const appealTypeData = await getAppealsTypes();
const formdata = (await getFormData(query.appealtypes)) || null;
const [appealTypeData, formdata] = await Promise.all([
await getAppealsTypes(),
await getFormData(query.appealtypes),
]);
const caseReference = createCase("asasa", "asasa");
let xmlStr = formdata;
xmlStr = formdata.value[0].formxml;
xmlStr = xmlStr.replace(/\\"/g, "");
store.dispatch(setAppealTypeID(query.appealtypes));
store.dispatch(setCaseReference(caseReference));
store.dispatch(setForm(xmlStr));
store.dispatch(setAppealType(appealTypeData));
+8 -4
View File
@@ -75,10 +75,14 @@ const Home = (props) => {
export const getServerSideProps = wrapper.getServerSideProps(
(store) =>
async ({ query, req, res }) => {
const appealTypeData = await getAppealsTypes();
const lpaData = await getLPA();
console.log("appeal types", appealTypeData);
console.log("lpa typeswwwww", lpaData);
res.setHeader(
"Cache-Control",
"public, s-maxage=604800, stale-while-revalidate"
);
const [appealTypeData, lpaData] = await Promise.all([
await getAppealsTypes(),
await getLPA(),
]);
store.dispatch(setAppealType(appealTypeData));
store.dispatch(setLPA(lpaData));
}
+83
View File
@@ -0,0 +1,83 @@
import _ from "lodash";
import Head from "next/head";
import Header from "../components/header";
import Banner from "../components/banner";
import CookieBanner from "../components/cookieBanner";
import Breadcrumbs from "../components/breadcrumbs";
import CaseSummary from "../components/case";
import Footer from "../components/footer";
import Errorpage from "../components/errorpage";
import styles from "../styles/Home.module.css";
import { useSelector, shallowEqual, connect } from "react-redux";
import { wrapper } from "../store/store";
import Cookies from "cookies";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
import Case from "../components/representation";
const Home = (props) => {
const { footerLinks, pages } = props;
let { t, lang } = useTranslation();
const router = useRouter();
const { locale } = router;
const { appealtypes } = router.query;
return (
<div>
<Head>
<title>
{t("case:page-title")} - {t("common:service-name")}
</title>
</Head>
<div id="page_wrapper">
<CookieBanner />
<Header courseName={t("common:service-name")} />
<div className="govuk-width-container">
<Banner />
<Breadcrumbs slug={appealtypes} props={props} />
<Case
myCases={props.myCases.myCases}
searchResultsObj={
props.searchResultsObj.searchResultsObj
}
myRepresentations={
props.myRepresentations.myRepresentations
}
watchedCases={props.watchedCases.watchedCases}
awaitingSubmission={
props.awaitingSubmission.awaitingSubmission
}
caseReference={
props.currentView.caseReference.currentReference
}
currentType={
props.currentView.caseReference.currentType
}
props={props}
/>
</div>
<Footer footerLinks={footerLinks} />
</div>
</div>
);
};
const mapStateToProps = (state) => {
//console.log(state);
return {
currentView: state.currentView,
search: state.search,
searchResultsObj: state.searchResultsObj,
formData: state.formData,
appealType: state.appealType,
form: state.form,
myCases: state.myCases,
watchedCases: state.watchedCases,
myRepresentations: state.myRepresentations,
awaitingSubmission: state.awaitingSubmission,
};
};
export default connect(mapStateToProps)(Home);
+8 -29
View File
@@ -63,39 +63,18 @@ export const getServerSideProps = wrapper.getServerSideProps(
}
);
// export const getServerSideProps = wrapper.getServerSideProps(
// async ({ locale, store, query, req, res }) => {
// // const token = await getToken();
// // let accessToken = token.access_token;
// // const apiRoot = process.browser ? window.API_ROOT : process.env.API_ROOT;
// // const [pages, footerLinks, courseListContent] = await Promise.all([
// // await getPages(accessToken, locale),
// // await getFooterLinks(accessToken, locale),
// // await getCourseList(accessToken, locale),
// // ]);
// // //const courseID = await getCourseID
// // store.dispatch(setApiRoot(apiRoot));
// // store.dispatch(setPages(pages));
// // store.dispatch(setFooterLinks(footerLinks));
// // store.dispatch(setCourseListContent(courseListContent));
// console.log(query);
// //store.dispatch(setSearch(query.search));
// }
// );
const mapStateToProps = (state) => {
return {
currentView: state.currentView,
search: state.search,
searchResultsObj: state.searchResultsObj,
// // apiroot: state.apiroot,
// // courseListContent: state.courseListContent.courseListContent,
// // pages: state.pages.pages,
// // footerLinks: state.footerLinks.footerLinks,
// // regions: state.regions,
// // sectors: state.sectors,
// // form: state.form,
formData: state.formData,
appealType: state.appealType,
form: state.form,
myCases: state.myCases,
watchedCases: state.watchedCases,
myRepresentations: state.myRepresentations,
awaitingSubmission: state.awaitingSubmission,
};
};
-22
View File
@@ -63,28 +63,6 @@ export const getServerSideProps = wrapper.getServerSideProps(
}
);
// export const getServerSideProps = wrapper.getServerSideProps(
// async ({ locale, store, query, req, res }) => {
// // const token = await getToken();
// // let accessToken = token.access_token;
// // const apiRoot = process.browser ? window.API_ROOT : process.env.API_ROOT;
// // const [pages, footerLinks, courseListContent] = await Promise.all([
// // await getPages(accessToken, locale),
// // await getFooterLinks(accessToken, locale),
// // await getCourseList(accessToken, locale),
// // ]);
// // //const courseID = await getCourseID
// // store.dispatch(setApiRoot(apiRoot));
// // store.dispatch(setPages(pages));
// // store.dispatch(setFooterLinks(footerLinks));
// // store.dispatch(setCourseListContent(courseListContent));
// console.log(query);
// //store.dispatch(setSearch(query.search));
// }
// );
const mapStateToProps = (state) => {
return {
search: state.search,
Binary file not shown.

After

Width:  |  Height:  |  Size: 901 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

+41
View File
@@ -1,6 +1,10 @@
export const currentViewActionTypes = {
GETCURRENTVIEW: "GETCURRENTVIEW",
SETCURRENTVIEW: "SETCURRENTVIEW",
SETCURRENTREFERENCE: "SETCURRENTREFERENCE",
SETREPRESENTATIONCAPACITY: "SETREPRESENTATIONCAPACITY",
SETREPRESENTATIONSUBMIT: "SETREPRESENTATIONSUBMIT",
SETREPRESENTATIONSUBMITCONFIRMATION: "SETREPRESENTATIONSUBMITCONFIRMATION",
};
export const getCurrentViewObj = () => (dispatch) => {
@@ -15,3 +19,40 @@ export const setCurrentView = (currentView) => (dispatch) => {
currentView: currentView,
});
};
export const setCurrentReference = (caseReference) => (dispatch) => {
return dispatch({
type: currentViewActionTypes.SETCURRENTREFERENCE,
caseReference: caseReference,
});
};
export const setRepresentationCapacity =
(representationCapacity) => (dispatch) => {
return dispatch({
type: currentViewActionTypes.SETREPRESENTATIONCAPACITY,
representationCapacity: representationCapacity,
});
};
export const setRepresentationSubmit = (representationSubmit) => (dispatch) => {
return dispatch({
type: currentViewActionTypes.SETREPRESENTATIONSUBMIT,
representationSubmit: representationSubmit,
});
};
export const setSubmitBack = (representationSubmit) => (dispatch) => {
return dispatch({
type: currentViewActionTypes.SETREPRESENTATIONSUBMIT,
representationSubmit: representationSubmit,
});
};
export const setRepresentationSubmitConfirmation =
(representationSubmitConfirmation) => (dispatch) => {
return dispatch({
type: currentViewActionTypes.SETREPRESENTATIONSUBMITCONFIRMATION,
representationSubmitConfirmation: representationSubmitConfirmation,
});
};
+20
View File
@@ -2,6 +2,10 @@ import { currentViewActionTypes } from "./action";
const currentViewInitialState = {
currentView: {},
caseReference: {},
representationCapacity: {},
representationSubmit: null,
representationSubmitConfirmation: {},
};
export default function reducer(state = currentViewInitialState, action) {
@@ -11,6 +15,22 @@ export default function reducer(state = currentViewInitialState, action) {
...state,
currentView: action.currentView,
};
case currentViewActionTypes.SETCURRENTREFERENCE:
return {
...state,
caseReference: action.caseReference,
};
case currentViewActionTypes.SETREPRESENTATIONCAPACITY:
return {
...state,
representationCapacity: action.representationCapacity,
};
case currentViewActionTypes.SETREPRESENTATIONSUBMITCONFIRMATION:
return {
...state,
representationSubmitConfirmation:
action.representationSubmitConfirmation,
};
default:
return state;
}
+7 -2
View File
@@ -95,11 +95,15 @@ const makeStore = ({ isServer }) => {
return createStore(reducer, bindMiddleware([thunkMiddleware]));
} else {
//If it's on client side, create a store which will persist
const { persistStore, persistReducer } = require("redux-persist");
const {
persistStore,
persistReducer,
createMigrate,
} = require("redux-persist");
const storage = require("redux-persist/lib/storage").default;
const persistConfig = {
key: "acp",
key: "acp_" + Math.floor(100000 + Math.random() * 900000),
whitelist: [
"currentView",
"search",
@@ -114,6 +118,7 @@ const makeStore = ({ isServer }) => {
"watchedCases",
"form",
],
version: 1,
storage: storage,
stateReconciler: autoMergeLevel2, // if needed, use a safer storage
};
+1 -1
View File
@@ -3,7 +3,7 @@
// Add extra styles here, or re-organise the Sass files in whichever way makes most sense to you
@import "welshgov/_variables";
@import "welshgov/_application";
@import "welshgov/application_old";
// @import "welshgov/application_old";
// global styles for <a> and <p> tags
$govuk-global-styles: true;
+732 -2
View File
@@ -4,12 +4,14 @@ html {
*,
.govuk-body,
.govuk-body-xs,
.govuk-body-s,
.govuk-body-m,
.govuk-footer,
.govuk-heading-xl,
.govuk-heading-l,
.govuk-heading-m,
s .govuk-header-l,
.govuk-header-l,
.govuk-header-m,
.govuk-header__link,
.govuk-button,
@@ -18,6 +20,9 @@ s .govuk-header-l,
.govuk-breadcrumbs__link,
.govuk-fieldset__legend--s,
.govuk-input,
.govuk-panel,
.govuk-panel__title,
.govuk-warning-text__text,
h1,
h2,
h3,
@@ -26,10 +31,80 @@ h5,
a {
font-family: Arial, Helvetica, "Nimbus Sans L", sans-serif;
}
.govuk-label-s {
font-size: 1rem;
}
.govuk-label-xs {
font-size: 0.875rem;
}
.govuk-select-s {
font-size: 1rem;
padding: 2px;
height: 1.8rem;
}
body {
margin: 0;
background-color: #ffffff;
}
.app-cookie-banner {
.consentBanner {
.govuk-button {
display: inline;
width: 28%;
margin-right: 45px;
}
}
}
.skiplink {
position: absolute;
left: -9999em;
}
.skiplink:focus,
.skiplink:visited {
color: #0b0c0c;
}
.skiplink:focus {
left: 0;
z-index: 1;
}
#skiplink-container {
text-align: center;
background: #0b0c0c;
}
#skiplink-container div {
text-align: left;
margin: 0 auto;
max-width: 1020px;
}
#skiplink-container .skiplink {
display: -moz-inline-stack;
display: inline-block;
margin: 0.75em 0 0 30px;
}
a.longLinkBreak {
word-wrap: break-word;
}
.govuk-header {
background-color: #323232;
}
.govuk-breadcrumbs__link:link,
.govuk-breadcrumbs__link:visited {
color: #0360a6;
font-weight: bold;
text-decoration: none;
font-size: 16px;
}
.govuk-grid-row {
@media screen and (max-width: 900px) {
// margin-right: 0px;
@@ -37,6 +112,10 @@ a {
}
}
.govuk-checkboxes__conditional--hidden {
display: none;
}
.govuk-button {
background-color: $red;
@@ -69,6 +148,14 @@ a {
margin-right: auto;
padding-left: 60px;
padding-right: 20px;
@media screen and (max-width: 1024px) {
padding-left: 20px;
}
@media screen and (max-width: 376px) {
padding-left: 0px;
padding-right: 0px;
}
}
.btn--arrow-up a {
@@ -123,7 +210,7 @@ a {
display: block;
position: relative;
clear: both;
margin-top: 40px;
margin-top: -10px;
margin-right: -10px;
.mobileMenu {
@@ -243,6 +330,8 @@ a {
.govuk-footer {
padding-top: 0px;
padding: 70px 0 0 0;
border: none;
}
#footer_logo {
@@ -295,6 +384,73 @@ a {
word-wrap: normal;
}
.at-nav {
border-top: 5px solid #1d70b8;
padding-top: 25px;
}
.at-nav ul.govuk-list.js-hidden {
display: none;
}
.at-nav__section-title {
width: 84%;
}
.at-nav h4 {
font-weight: 300;
font-size: 19px;
}
.at-nav h3 {
}
.at-nav__chapter {
}
.at-nav__section {
cursor: pointer;
}
.at-nav__controls {
position: relative;
text-align: right;
top: 20px;
}
.at-nav__page .govuk-list,
.accordion__panel .govuk-list {
margin-left: 20px;
}
.at-nav__page .govuk-list > li {
font-size: 16px;
font-weight: 300;
font-stretch: normal;
font-style: normal;
line-height: 1.25;
letter-spacing: normal;
}
.at-nav__page .govuk-list > li b:before {
border-left: 4px solid #1d70b8;
position: relative;
right: 10px;
content: " ";
margin-left: -6px;
}
.at-nav h4 {
border-bottom: 1px solid #b1b4b6;
padding-bottom: 20px;
}
.at-nav .currentSection h2 {
border: none;
padding-bottom: 10px;
margin-bottom: 0px;
}
.form-inline-label {
.inlineFieldset {
display: flex;
@@ -322,6 +478,12 @@ a {
background: #f3f2f1;
}
.results .govuk-summary-list__row {
@media screen and (max-width: 900px) {
padding: 20px 10px;
}
}
.results_wider {
width: 170px;
}
@@ -377,3 +539,571 @@ a {
font-size: 1.1875rem;
line-height: 1.3157894737;
}
//sharebar
.btn--arrow-up a {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg id=%22Layer_1%22 data-name=%22Layer 1%22 xmlns=%22http://www.w3.org/2000/svg%22 width=%22159.5%22 height=%22102.4%22 viewBox=%220 0 159.5 102.4%22%3E%3Ctitle%3Eblack-arrow-up%3C/title%3E%3Cpath d=%22M159.5,79.8,79.8,0,0,79.8l22.6,22.6L79.7,45.3l57.1,57.1Z%22/%3E%3C/svg%3E");
background-size: 18px 13px;
background-position: 10px center;
background-repeat: no-repeat;
padding-left: 36px;
margin-top: 1px;
}
.btn--arrow-hero a:hover {
color: #fff !important;
}
ul#sharePageLinks {
display: none;
}
ul#sharePageLinks.active {
display: block;
border: none;
}
.block-share button,
.block-share h2 {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
border: none;
padding: 12px 12px 12px 36px;
margin: 0;
color: #323232;
font-size: 16px;
font-size: 1rem;
line-height: 17px;
line-height: 1.0625rem;
letter-spacing: -0.0208333333rem;
font-weight: bold;
float: left;
z-index: 2;
position: relative;
background-color: inherit;
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg id=%22Layer_1%22 data-name=%22Layer 1%22 xmlns=%22http://www.w3.org/2000/svg%22 width=%2217.9%22 height=%2220%22 viewBox=%220 0 17.9 20%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill:%23333;%7D%3C/style%3E%3C/defs%3E%3Ctitle%3Eshare%3C/title%3E%3Cpath class=%22cls-1%22 d=%22M15.4,14.1a3,3,0,0,0-2,.8L6.2,10.7a1.7,1.7,0,0,0,.1-.7,1.7,1.7,0,0,0-.1-.7l7.1-4.1a3,3,0,0,0,5-2.2,3,3,0,0,0-6,0,1.7,1.7,0,0,0,.1.7l-7,4.1a2.79,2.79,0,0,0-2-.8,3,3,0,1,0,0,6,2.79,2.79,0,0,0,2-.8l7.1,4.2c0,.2-.1.4-.1.7a2.9,2.9,0,0,0,5.8,0,2.84,2.84,0,0,0-2.68-3Z%22 transform=%22translate%28-0.4 0%29%22/%3E%3C/svg%3E");
background-repeat: no-repeat;
background-position: 10px 10px;
background-size: 20px 20px;
}
.vo_hidden,
.page-node-type-global-keyword-search
.main__body-content
#block-govwales-content
.components__form
form
.form-item
label,
.header__components .components__form form .form-item label {
border: 0;
clip: rect(0, 0, 0, 0);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
width: 1px;
position: absolute;
}
.block-share {
position: relative;
float: left;
margin-right: 20px;
border: 1px solid #999999;
}
@media screen and (min-width: 480px) {
.main__sharebar > div {
margin-bottom: 0;
}
}
.block-share.active {
border: 1px solid #999999;
background-color: #cccccc;
@media screen and (max-width: 376px) {
margin-right: 0px;
margin-bottom: 20px;
}
}
.block-share ul {
margin: 0;
padding: 0;
float: left;
z-index: 1;
position: relative;
}
.block-share ul li {
display: inline-block;
margin: 10px 15px;
padding: 0;
}
.block-share ul li a {
font-size: 16px;
font-size: 1rem;
line-height: 20px;
line-height: 1.25rem;
display: block;
padding-top: 2px;
padding-left: 25px;
height: 24px;
color: #0360a6;
}
.block-share ul li a {
font-size: 16px;
font-size: 1rem;
line-height: 20px;
line-height: 1.25rem;
display: block;
padding-top: 2px;
padding-left: 25px;
height: 24px;
background-color: inherit;
color: #0360a6;
font-weight: bold;
text-decoration: none;
}
@media (min-width: 480px) {
.block-share ul li a {
background-size: 20px 20px;
background-position: 0 2px;
}
}
.block-share ul li a,
.block-share-top ul li a,
.page-header__block-share__list ul li a,
.page-header__block-share ul li a {
background-size: 20px 20px;
background-position: 0 6px;
height: 22px;
display: block;
@media (max-width: 376px) {
background-position: 0 2px;
}
}
.block-share ul li a:hover,
.block-share-top ul li a:hover,
.page-header__block-share__list ul li a:hover,
.page-header__block-share ul li a:hover {
background-size: 20px 20px;
background-position: 0 6px;
@media (max-width: 376px) {
background-position: 0 2px;
}
}
@media all and (min-width: 480px) {
.block-share ul li a,
.block-share-top ul li a,
.page-header__block-share__list ul li a,
.page-header__block-share ul li a {
background-size: 20px 20px;
background-position: 0 2px;
}
.block-share ul li a:hover,
.block-share-top ul li a:hover,
.page-header__block-share__list ul li a:hover,
.page-header__block-share ul li a:hover {
background-size: 20px 20px;
background-position: 0px 2px;
}
}
.block-share ul li a:focus,
.block-share-top ul li a:focus,
.page-header__block-share__list ul li a:focus,
.page-header__block-share ul li a:focus {
-webkit-box-shadow: 0 0 #ffd530, 0 2px #1f1f1f;
box-shadow: 0 0 #ffd530, 0 2px #1f1f1f;
}
.block-share ul li a.twitter,
.block-share-top ul li a.twitter,
.page-header__block-share__list ul li a.twitter,
.page-header__block-share ul li a.twitter {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%2220%22 height=%2220%22 viewBox=%220 0 20 20%22%3E%3Ctitle%3EAsset 1%3C/title%3E%3Cpath d=%22M0,0V20H20V0ZM16,6.9v.4a8.79,8.79,0,0,1-8.7,8.8,9,9,0,0,1-4.8-1.4h.7A6.46,6.46,0,0,0,7,13.4a3.13,3.13,0,0,1-2.9-2.1c.2,0,.4.1.6.1a2.2,2.2,0,0,0,.8-.1A3.1,3.1,0,0,1,3,8.3H3a4,4,0,0,0,1.5.3,3.05,3.05,0,0,1-1-4.1A8.86,8.86,0,0,0,9.9,7.7,3,3,0,0,1,12.2,4a3.06,3.06,0,0,1,2.9.9,5,5,0,0,0,2-.8,2.91,2.91,0,0,1-1.4,1.7,6.07,6.07,0,0,0,1.8-.5A4.63,4.63,0,0,1,16,6.9Z%22 style=%22fill:%230360a6%22/%3E%3C/svg%3E");
background-repeat: no-repeat;
}
.block-share ul li a.twitter:hover,
.block-share-top ul li a.twitter:hover,
.page-header__block-share__list ul li a.twitter:hover,
.page-header__block-share ul li a.twitter:hover {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%2220%22 height=%2220%22 viewBox=%220 0 20 20%22%3E%3Ctitle%3EAsset 1%3C/title%3E%3Cpath d=%22M0,0V20H20V0ZM16,6.9v.4a8.79,8.79,0,0,1-8.7,8.8,9,9,0,0,1-4.8-1.4h.7A6.46,6.46,0,0,0,7,13.4a3.13,3.13,0,0,1-2.9-2.1c.2,0,.4.1.6.1a2.2,2.2,0,0,0,.8-.1A3.1,3.1,0,0,1,3,8.3H3a4,4,0,0,0,1.5.3,3.05,3.05,0,0,1-1-4.1A8.86,8.86,0,0,0,9.9,7.7,3,3,0,0,1,12.2,4a3.06,3.06,0,0,1,2.9.9,5,5,0,0,0,2-.8,2.91,2.91,0,0,1-1.4,1.7,6.07,6.07,0,0,0,1.8-.5A4.63,4.63,0,0,1,16,6.9Z%22 style=%22fill:%233b7dc5%22/%3E%3C/svg%3E");
background-repeat: no-repeat;
}
.block-share ul li a.twitter:focus,
.block-share-top ul li a.twitter:focus,
.page-header__block-share__list ul li a.twitter:focus,
.page-header__block-share ul li a.twitter:focus {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%2220%22 height=%2220%22 viewBox=%220 0 20 20%22%3E%3Ctitle%3EAsset 1%3C/title%3E%3Cpath d=%22M0,0V20H20V0ZM16,6.9v.4a8.79,8.79,0,0,1-8.7,8.8,9,9,0,0,1-4.8-1.4h.7A6.46,6.46,0,0,0,7,13.4a3.13,3.13,0,0,1-2.9-2.1c.2,0,.4.1.6.1a2.2,2.2,0,0,0,.8-.1A3.1,3.1,0,0,1,3,8.3H3a4,4,0,0,0,1.5.3,3.05,3.05,0,0,1-1-4.1A8.86,8.86,0,0,0,9.9,7.7,3,3,0,0,1,12.2,4a3.06,3.06,0,0,1,2.9.9,5,5,0,0,0,2-.8,2.91,2.91,0,0,1-1.4,1.7,6.07,6.07,0,0,0,1.8-.5A4.63,4.63,0,0,1,16,6.9Z%22 style=%22fill:%23111%22/%3E%3C/svg%3E ");
background-repeat: no-repeat;
}
.block-share ul li a.facebook,
.block-share-top ul li a.facebook,
.page-header__block-share__list ul li a.facebook,
.page-header__block-share ul li a.facebook {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%2220%22 height=%2220%22 viewBox=%220 0 20 20%22%3E%3Ctitle%3Efacebook%3C/title%3E%3Cpath d=%22M0,0V20H20V0ZM15.6,5.1a.27.27,0,0,1-.3.3H14c-.9,0-1.1.3-1.1,1V7.9h2.3a.27.27,0,0,1,.3.3h0v2.5a.27.27,0,0,1-.3.3H12.9v6.2a.27.27,0,0,1-.3.3H10a.27.27,0,0,1-.3-.3V11h-2a.27.27,0,0,1-.3-.3h0V8.2a.27.27,0,0,1,.3-.3h2V6.2a3.45,3.45,0,0,1,3.1-3.7h2.4a.27.27,0,0,1,.3.3h0Z%22 style=%22fill:%230360a6%22/%3E%3C/svg%3E");
background-repeat: no-repeat;
}
.block-share ul li a.facebook:hover,
.block-share-top ul li a.facebook:hover,
.page-header__block-share__list ul li a.facebook:hover,
.page-header__block-share ul li a.facebook:hover {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%2220%22 height=%2220%22 viewBox=%220 0 20 20%22%3E%3Ctitle%3Efacebook_on%3C/title%3E%3Cpath d=%22M0,0V20H20V0ZM15.6,5.1a.27.27,0,0,1-.3.3H14c-.9,0-1.1.3-1.1,1V7.9h2.3a.27.27,0,0,1,.3.3h0v2.5a.27.27,0,0,1-.3.3H12.9v6.2a.27.27,0,0,1-.3.3H10a.27.27,0,0,1-.3-.3V11h-2a.27.27,0,0,1-.3-.3h0V8.2a.27.27,0,0,1,.3-.3h2V6.2a3.45,3.45,0,0,1,3.1-3.7h2.4a.27.27,0,0,1,.3.3h0Z%22 style=%22fill:%233b7dc5%22/%3E%3C/svg%3E");
background-repeat: no-repeat;
}
.block-share ul li a.facebook:focus,
.block-share-top ul li a.facebook:focus,
.page-header__block-share__list ul li a.facebook:focus,
.page-header__block-share ul li a.facebook:focus {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%2220%22 height=%2220%22 viewBox=%220 0 20 20%22%3E%3Ctitle%3Efacebook%3C/title%3E%3Cpath d=%22M0,0V20H20V0ZM15.6,5.1a.27.27,0,0,1-.3.3H14c-.9,0-1.1.3-1.1,1V7.9h2.3a.27.27,0,0,1,.3.3h0v2.5a.27.27,0,0,1-.3.3H12.9v6.2a.27.27,0,0,1-.3.3H10a.27.27,0,0,1-.3-.3V11h-2a.27.27,0,0,1-.3-.3h0V8.2a.27.27,0,0,1,.3-.3h2V6.2a3.45,3.45,0,0,1,3.1-3.7h2.4a.27.27,0,0,1,.3.3h0Z%22 style=%22fill:%23111%22/%3E%3C/svg%3E ");
background-repeat: no-repeat;
}
.block-share ul li a.email,
.block-share-top ul li a.email,
.page-header__block-share__list ul li a.email,
.page-header__block-share ul li a.email {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%2220%22 height=%2220%22 viewBox=%220 0 20 20%22%3E%3Ctitle%3Eat%3C/title%3E%3Cpath d=%22M9.6,8.2a1.61,1.61,0,0,0-1.3.6,2.11,2.11,0,0,0-.5,1.3,1.75,1.75,0,0,0,.4,1.2,1.46,1.46,0,0,0,1.3.7,1.38,1.38,0,0,0,1.1-.6,2.39,2.39,0,0,0,.5-1.4,2,2,0,0,0-.6-1.5A2.39,2.39,0,0,0,9.6,8.2Z%22 style=%22fill:%230360a6%22/%3E%3Cpath d=%22M0,0V20H20V0ZM15.4,12.5l-.4.7H11.5l-.2-.6a2.73,2.73,0,0,1-1.9.8h0a2.66,2.66,0,0,1-2.2-1.1A3.46,3.46,0,0,1,7.2,8,2.87,2.87,0,0,1,9.4,7a3.55,3.55,0,0,1,1,.2c.2.1.5.2.6.4V6.8h1.5v5.3h1.6a5.75,5.75,0,0,0,.5-2.6,4,4,0,0,0-1.3-3A4.44,4.44,0,0,0,9.9,5.2,4.76,4.76,0,0,0,6.5,6.6,5.55,5.55,0,0,0,5.3,9.9a4.84,4.84,0,0,0,1.3,3.4A4.48,4.48,0,0,0,10,14.8h.2V16H10a5.62,5.62,0,0,1-4.4-1.9A6.26,6.26,0,0,1,4,9.9,5.91,5.91,0,0,1,9.9,4H10a6.56,6.56,0,0,1,4.4,1.7A5.46,5.46,0,0,1,16,9.5,8,8,0,0,1,15.4,12.5Z%22 style=%22fill:%230360a6%22/%3E%3C/svg%3E");
background-repeat: no-repeat;
}
.block-share ul li a.email:hover,
.block-share-top ul li a.email:hover,
.page-header__block-share__list ul li a.email:hover,
.page-header__block-share ul li a.email:hover {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%2220%22 height=%2220%22 viewBox=%220 0 20 20%22%3E%3Ctitle%3Eat_on%3C/title%3E%3Cpath d=%22M9.6,8.2a1.61,1.61,0,0,0-1.3.6,2.11,2.11,0,0,0-.5,1.3,1.75,1.75,0,0,0,.4,1.2,1.46,1.46,0,0,0,1.3.7,1.38,1.38,0,0,0,1.1-.6,2.39,2.39,0,0,0,.5-1.4,2,2,0,0,0-.6-1.5A2.39,2.39,0,0,0,9.6,8.2Z%22 style=%22fill:%233b7dc5%22/%3E%3Cpath d=%22M0,0V20H20V0ZM15.4,12.5l-.4.7H11.5l-.2-.6a2.73,2.73,0,0,1-1.9.8h0a2.66,2.66,0,0,1-2.2-1.1A3.46,3.46,0,0,1,7.2,8,2.87,2.87,0,0,1,9.4,7a3.55,3.55,0,0,1,1,.2c.2.1.5.2.6.4V6.8h1.5v5.3h1.6a5.75,5.75,0,0,0,.5-2.6,4,4,0,0,0-1.3-3A4.44,4.44,0,0,0,9.9,5.2,4.76,4.76,0,0,0,6.5,6.6,5.55,5.55,0,0,0,5.3,9.9a4.84,4.84,0,0,0,1.3,3.4A4.48,4.48,0,0,0,10,14.8h.2V16H10a5.62,5.62,0,0,1-4.4-1.9A6.26,6.26,0,0,1,4,9.9,5.91,5.91,0,0,1,9.9,4H10a6.56,6.56,0,0,1,4.4,1.7A5.46,5.46,0,0,1,16,9.5,8,8,0,0,1,15.4,12.5Z%22 style=%22fill:%233b7dc5%22/%3E%3C/svg%3E");
background-repeat: no-repeat;
}
.block-share ul li a.email:focus,
.block-share-top ul li a.email:focus,
.page-header__block-share__list ul li a.email:focus,
.page-header__block-share ul li a.email:focus {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%2220%22 height=%2220%22 viewBox=%220 0 20 20%22%3E%3Ctitle%3Eat%3C/title%3E%3Cpath d=%22M9.6,8.2a1.61,1.61,0,0,0-1.3.6,2.11,2.11,0,0,0-.5,1.3,1.75,1.75,0,0,0,.4,1.2,1.46,1.46,0,0,0,1.3.7,1.38,1.38,0,0,0,1.1-.6,2.39,2.39,0,0,0,.5-1.4,2,2,0,0,0-.6-1.5A2.39,2.39,0,0,0,9.6,8.2Z%22 style=%22fill:%23111%22/%3E%3Cpath d=%22M0,0V20H20V0ZM15.4,12.5l-.4.7H11.5l-.2-.6a2.73,2.73,0,0,1-1.9.8h0a2.66,2.66,0,0,1-2.2-1.1A3.46,3.46,0,0,1,7.2,8,2.87,2.87,0,0,1,9.4,7a3.55,3.55,0,0,1,1,.2c.2.1.5.2.6.4V6.8h1.5v5.3h1.6a5.75,5.75,0,0,0,.5-2.6,4,4,0,0,0-1.3-3A4.44,4.44,0,0,0,9.9,5.2,4.76,4.76,0,0,0,6.5,6.6,5.55,5.55,0,0,0,5.3,9.9a4.84,4.84,0,0,0,1.3,3.4A4.48,4.48,0,0,0,10,14.8h.2V16H10a5.62,5.62,0,0,1-4.4-1.9A6.26,6.26,0,0,1,4,9.9,5.91,5.91,0,0,1,9.9,4H10a6.56,6.56,0,0,1,4.4,1.7A5.46,5.46,0,0,1,16,9.5,8,8,0,0,1,15.4,12.5Z%22 style=%22fill:%23111%22/%3E%3C/svg%3E ");
background-repeat: no-repeat;
}
//dropzone
.dropzone {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
padding: 20px;
border-width: 2px;
border-radius: 2px;
border-color: #eeeeee;
border-style: dashed;
background-color: #fafafa;
color: #bdbdbd;
outline: none;
transition: border 0.24s ease-in-out;
}
// dns
.govuk-panel--header {
background-color: #8b272d;
padding: 15px;
color: #fff;
text-align: left;
margin-bottom: 0px;
.govuk-panel__title {
font-size: 36px;
}
p {
color: #fff;
}
}
.govuk-panel--latest {
background-color: #000;
color: #fff;
padding: 15px;
text-align: left;
margin-bottom: 0px;
.govuk-panel__title {
font-size: 24px;
}
.govuk-heading-m {
color: #fff;
}
.govuk-panel__body {
font-size: initial;
}
.govuk-list li a {
color: #fff;
}
}
.govuk-panel--dns-links {
background-color: #fff;
}
.govuk-panel--open-for-comments {
background-color: #8b272d;
color: #fff;
padding: 15px;
text-align: left;
margin-bottom: 0px;
.govuk-panel__title {
font-size: 24px;
}
.govuk-heading-m {
color: #fff;
}
.govuk-panel__body {
font-size: initial;
}
.govuk-list li a {
color: #fff;
}
}
.map-responsive {
overflow: hidden;
padding-bottom: 56.25%;
position: relative;
height: 0;
&.halfWidth {
padding-bottom: 100%;
}
}
.map-responsive iframe {
left: 0;
top: 0;
height: 100%;
width: 100%;
position: absolute;
}
//dns application view
.govuk-warning-text__icon {
margin-top: 5px;
}
.govuk-timeline-list__row {
position: relative;
padding-top: 10px;
padding-right: 20px;
padding-bottom: 10px;
padding-left: 10px;
border: 1px solid #b1b4b6;
border-top: none;
&:first-of-type {
border-top: 1px solid #b1b4b6;
}
&:nth-child(odd) {
background: #f3f2f1;
}
.govuk-timeline-text__text {
position: relative;
font-weight: normal;
padding-left: 45px;
}
.govuk-warning-text__icon {
margin-left: 10px;
border-color: grey;
background-color: white;
color: grey;
font-weight: bold;
font-size: 16px;
min-height: 25px;
min-width: 25px;
line-height: 21px;
}
.dateRight {
text-align: right;
}
}
// dns docs filter accordion
.accordion {
border: 1px solid rgba(0, 0, 0, 0.1);
border-radius: 2px;
font-size: 16px;
}
.accordion__item + .accordion__item {
border-top: 1px solid rgba(0, 0, 0, 0.1);
}
.accordion__button {
background-color: #f4f4f4;
color: #444;
cursor: pointer;
padding: 18px;
// width: 100%;
text-align: left;
border: none;
}
.accordion__button:hover {
background-color: #ddd;
}
.accordion__button:before {
display: inline-block;
content: "";
height: 10px;
width: 10px;
margin-right: 12px;
border-bottom: 2px solid currentColor;
border-right: 2px solid currentColor;
transform: rotate(-45deg);
}
.accordion__button[aria-expanded="true"]::before,
.accordion__button[aria-selected="true"]::before {
transform: rotate(45deg);
}
[hidden] {
display: none;
}
.accordion__panel {
padding: 20px 10px;
animation: fadein 0.35s ease-in;
.accordion__button {
background-color: #f4f4f43d;
}
}
/* -------------------------------------------------- */
/* ---------------- Animation part ------------------ */
/* -------------------------------------------------- */
@keyframes fadein {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
//dns document list
.documents__list {
.documents__list__item {
border-bottom: 1px solid #b1b4b6;
padding: 20px 10px;
&:hover {
background-color: #e3e3e3;
}
}
.document__list__item__link {
font-weight: bold;
margin-right: 10px;
padding-bottom: 20px;
display: inline-block;
}
.document__list__meta {
display: flex;
justify-content: space-between;
font-size: 0.875rem;
color: #333;
}
}
// dns autocomplete search
.react-autosuggest__container {
position: relative;
width: 50%;
}
.react-autosuggest__input {
width: 100%;
height: 36px;
padding: 10px;
border: 1px solid lightgray;
border-radius: 4px;
border-bottom-right-radius: 0;
border-top-right-radius: 0;
font-size: 0.875rem;
}
.react-autosuggest__input--focused {
outline: none;
}
.react-autosuggest__input--open {
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
}
.react-autosuggest__suggestions-container {
display: none;
}
.react-autosuggest__suggestions-container--open {
display: block;
position: absolute;
top: 40px;
width: auto;
min-width: 160px;
margin-left: 1px;
background-color: #ffffff;
border-radius: 0 0 5px 5px;
z-index: 20;
-webkit-box-shadow: 0 6px 12px rgb(0 0 0 / 18%);
box-shadow: 0 6px 12px rgb(0 0 0 / 18%);
background-clip: padding-box;
border: 1px solid black;
border-top: none;
font-size: 0.875rem;
max-height: 400px;
overflow-y: scroll;
}
.react-autosuggest__suggestions-list {
margin: 0;
padding: 0;
list-style-type: none;
}
.react-autosuggest__suggestion {
cursor: pointer;
padding: 10px 20px;
color: #333;
border-bottom: 1px solid #c3c3c3;
}
.react-autosuggest__suggestion--highlighted {
background-color: #c3c3c3;
}