Merged PR 349: Create basic search and search results screen

Related work items: #5176
This commit is contained in:
Robert Bond
2021-07-06 11:40:45 +00:00
30 changed files with 3649 additions and 1168 deletions
View File
+1
View File
@@ -1,2 +1,3 @@
node_modules
.next
package-lock.json
+15
View File
@@ -0,0 +1,15 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "pwa-chrome",
"request": "launch",
"name": "Launch Chrome against localhost",
"url": "https://localhost:3000",
"webRoot": "${workspaceFolder}"
}
]
}
+166
View File
@@ -0,0 +1,166 @@
import axios from "axios";
import https from 'https';
//import {XMLHttpRequest} from 'xmlhttprequest';
process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0
const agent = new https.Agent({
rejectUnauthorized: false,
})
const crmHeaders = {
withCredentials: true,
headers:{
"Content-Type": "application/json; charset=utf-8",
"OData-MaxVersion": "4.0",
"OData-Version": "4.0",
"Accept": "application/json",
"Prefer": "odata.include-annotations=\"*\"",
agent
},
auth:{
username: 'xm\bondr',
password: '!Sky9fish1972'
}
}
export const getBasicSearch = (searchString) => {
console.log('got to axios', searchString)
return axios
//.get("https://devcrm2016.llcdt.gov.wales/DVPINS/api/data/v8.2/incidents?$select=_accountid_value,_customerid_value,pinswg_appealcasetype,statuscode,ticketnumber,title&$filter=contains(title, '" + searchString + "')&$count=true", crmHeaders)
//.get("https://jsonplaceholder.typicode.com/todos/1",{proxy:{protocol: 'http',host:'lon3.sme.zscloud.net',port: 80}})
.get("https://localhost:3000/api/searchresults2",{httpsAgent: new https.Agent({rejectUnauthorized:false})})
.then((res)=>res.data)
.catch((error)=>{
console.log('thiserror',error)
})
}
export const getBasicSearch2 = (searchString) =>{
var req = new XMLHttpRequest();
req.open("GET", "https://devcrm2016.llcdt.gov.wales/DVPINS/api/data/v8.2/incidents?$select=_accountid_value,_customerid_value,pinswg_appealcasetype,statuscode,ticketnumber,title&$filter=contains(title, '"+ searchString +"')&$count=true", true);
req.setRequestHeader("OData-MaxVersion", "4.0");
req.setRequestHeader("OData-Version", "4.0");
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.setRequestHeader("Prefer", "odata.include-annotations=\"*\"");
req.onreadystatechange = function() {
if (this.readyState === 4) {
req.onreadystatechange = null;
if (this.status === 200) {
var results = JSON.parse(this.response);
var recordCount = results["@odata.count"];
for (var i = 0; i < results.value.length; i++) {
var _accountid_value = results.value[i]["_accountid_value"];
var _accountid_value_formatted = results.value[i]["_accountid_value@OData.Community.Display.V1.FormattedValue"];
var _accountid_value_lookuplogicalname = results.value[i]["_accountid_value@Microsoft.Dynamics.CRM.lookuplogicalname"];
var _customerid_value = results.value[i]["_customerid_value"];
var _customerid_value_formatted = results.value[i]["_customerid_value@OData.Community.Display.V1.FormattedValue"];
var _customerid_value_lookuplogicalname = results.value[i]["_customerid_value@Microsoft.Dynamics.CRM.lookuplogicalname"];
var pinswg_appealcasetype = results.value[i]["pinswg_appealcasetype"];
var pinswg_appealcasetype_formatted = results.value[i]["pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"];
var statuscode = results.value[i]["statuscode"];
var ticketnumber = results.value[i]["ticketnumber"];
var title = results.value[i]["title"];
}
} else {
console.log(this.statusText);
}
}
};
return (req.send());
}
//get list of entitydefinitions
//https://devcrm2016.llcdt.gov.wales/DVPINS/api/data/v8.2/EntityDefinitions?$select=LogicalName
// get list of appealtypes
//https://devcrm2016.llcdt.gov.wales/DVPINS/api/data/v8.2/stringmaps?$filter=attributename%20eq%20%27pinswg_appealcasetype%27&$count=true
//get crm xml form for appealtype
//https://devcrm2016.llcdt.gov.wales/DVPINS/api/data/v8.2/systemforms?$select=formid,name,formxml&$filter=(objecttypecode%20eq%20%27pinswg_dns%27and%20type%20eq%202)&$count=true
// then use regex to remove the escape
// convert xml to json and return
// promise example
// var xml2js = require('xml2js');
// var xml = '<foo></foo>';
// // With parser
// var parser = new xml2js.Parser(/* options */);
// parser.parseStringPromise(data).then(function (result) {
// console.dir(result);
// console.log('Done');
// })
// .catch(function (err) {
// // Failed
// });
export const getAppealTypeDetail = (caseReference,appealcasetype) =>{
console.log('got to axios', searchString)
// example appealcasetype type pinswg_householderappealhases
return axios
.get("https://devcrm2016.llcdt.gov.wales/DVPINS/api/data/v8.2/" + appealcasetype + "?$filter=pinswg_name eq '" + caseReference + "'",{httpsAgent: new https.Agent({rejectUnauthorized:false})})
.then((res)=>res.data)
.catch((error)=>{
console.log('thi serror',error)
})
}
//https://devcrm2016.llcdt.gov.wales/DVPINS/api/data/v8.2/pinswg_planningappeals78s?$filter=pinswg_name eq 'CAS-00015-L7J9H1'
export const getLPA = () =>{
console.log('got to axios', searchString)
return axios
.get("https://devcrm2016.llcdt.gov.wales/DVPINS/api/data/v8.2/accounts?$select=name",{httpsAgent: new https.Agent({rejectUnauthorized:false})})
.then((res)=>res.data)
.catch((error)=>{
console.log('thi serror',error)
})
}
// var req = new XMLHttpRequest();
// req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v8.2/incidents?$select=_accountid_value,_customerid_value,pinswg_appealcasetype,statuscode,ticketnumber,title&$filter=contains(title, '000')&$count=true", true);
// req.setRequestHeader("OData-MaxVersion", "4.0");
// req.setRequestHeader("OData-Version", "4.0");
// req.setRequestHeader("Accept", "application/json");
// req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
// req.setRequestHeader("Prefer", "odata.include-annotations=\"*\"");
// req.onreadystatechange = function() {
// if (this.readyState === 4) {
// req.onreadystatechange = null;
// if (this.status === 200) {
// var results = JSON.parse(this.response);
// var recordCount = results["@odata.count"];
// for (var i = 0; i < results.value.length; i++) {
// var _accountid_value = results.value[i]["_accountid_value"];
// var _accountid_value_formatted = results.value[i]["_accountid_value@OData.Community.Display.V1.FormattedValue"];
// var _accountid_value_lookuplogicalname = results.value[i]["_accountid_value@Microsoft.Dynamics.CRM.lookuplogicalname"];
// var _customerid_value = results.value[i]["_customerid_value"];
// var _customerid_value_formatted = results.value[i]["_customerid_value@OData.Community.Display.V1.FormattedValue"];
// var _customerid_value_lookuplogicalname = results.value[i]["_customerid_value@Microsoft.Dynamics.CRM.lookuplogicalname"];
// var pinswg_appealcasetype = results.value[i]["pinswg_appealcasetype"];
// var pinswg_appealcasetype_formatted = results.value[i]["pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"];
// var statuscode = results.value[i]["statuscode"];
// var ticketnumber = results.value[i]["ticketnumber"];
// var title = results.value[i]["title"];
// }
// } else {
// Xrm.Utility.alertDialog(this.statusText);
// }
// }
// };
// req.send();
+22
View File
@@ -0,0 +1,22 @@
-----BEGIN CERTIFICATE-----
MIIDjTCCAnWgAwIBAgIUVcGexO0o2d+pgVMwkIdrnBI9L5QwDQYJKoZIhvcNAQEL
BQAwVjELMAkGA1UEBhMCVUsxDzANBgNVBAgMBlN1c3NleDETMBEGA1UEBwwKRWFz
dGJvdXJuZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMB4XDTIx
MDcwNTExMTcwNVoXDTIyMDcwNTExMTcwNVowVjELMAkGA1UEBhMCVUsxDzANBgNV
BAgMBlN1c3NleDETMBEGA1UEBwwKRWFzdGJvdXJuZTEhMB8GA1UECgwYSW50ZXJu
ZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
AQEAxzfQqGriUq8sKeWmgkgFssCDfsBLwijhP9nMVSCSwyWgxMZlGtj/Wbyf20Sl
cg7X3jj2rGEWU3TkJtNUwjQcYRRK2+QlC3bQMIJEfe0JXqkeMWSwR3Fs0IE7lzYf
CVHtcu7Z8muSEvinGULhg8jjBYp9mknjokjdwEy/eI7UYHEQx0sziapgAUITgSpL
45qZvgw3BJShq/En3DYX0dIiX2yswagOFUBPtCeFaP3LsPh0kTOPxhv9Y3SxQfPV
dTq3719HGVSLgQs18F82HxZeXjxAUqV+Sl5an5DnArRtFA3U34IDXkpc9RiLtoYb
GDrJuyt1TzpAxoBr8Ld5ySRDqQIDAQABo1MwUTAdBgNVHQ4EFgQUNZqF/sycnZe5
t6scKrWbEnW4Dc8wHwYDVR0jBBgwFoAUNZqF/sycnZe5t6scKrWbEnW4Dc8wDwYD
VR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEALs3OiGk6Xj7d51rChPsg
JL05Vj/DbI7Rr3jj2vGcNVd0GfIH9zrX0AMj6Uzxt8LCyI3QtrgzYSw9sKh9Q9I3
3h7sIBm9zXV5gbMSG3rAl965ryiQt4INKUamz1XLQKvaMRvHD/DmRmIbFo399gYN
duZQdwqdKavZ6wOw3GRmtjBlUzxO7DCrJMFsj7dfNqHSrZiwScNItArLecYeYQYg
npjsvJekpSQLjvvjVuHLfEp+vNH6liL7qFFcBzUgwISFvcAI99e/zZtewkb3Vw+7
+7wbMgpibU1kbL9Bpru8PS89CsVGEh1TmzO3e8j1GnYAcnzRe70IzOTdMUE0AEg6
FA==
-----END CERTIFICATE-----
+28
View File
@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDHN9CoauJSrywp
5aaCSAWywIN+wEvCKOE/2cxVIJLDJaDExmUa2P9ZvJ/bRKVyDtfeOPasYRZTdOQm
01TCNBxhFErb5CULdtAwgkR97QleqR4xZLBHcWzQgTuXNh8JUe1y7tnya5IS+KcZ
QuGDyOMFin2aSeOiSN3ATL94jtRgcRDHSzOJqmABQhOBKkvjmpm+DDcElKGr8Sfc
NhfR0iJfbKzBqA4VQE+0J4Vo/cuw+HSRM4/GG/1jdLFB89V1OrfvX0cZVIuBCzXw
XzYfFl5ePEBSpX5KXlqfkOcCtG0UDdTfggNeSlz1GIu2hhsYOsm7K3VPOkDGgGvw
t3nJJEOpAgMBAAECggEBAKkkd5F25l+jgRC1fhEhS01AbKTCadAY215V8knYlSMB
IKXReGg6E1vCbctCVmInvhpcLPugls8W8NsSFOWqTuoRy5k09Erufsag47wy9ACe
ABeZ0J1n7SZ+gvTYq7NDDyLFLuDHekeHPICTK1uzxSSgOBI2aAISccxinTKjuieC
eEtcBSu66g+cvyKGZglzfd4ugNDIaH9ibIFYPJzexw3lAz9j3mKpccxGsokFGw7T
qwovML2I9+laD1N23H9lJ2YLr73uqusI0cxsCvGwRtBHHIEsR6aL43GAMG7TtWw/
BoSECBZHRE+RxDjAab0XmrhcD3kf5v1DFk+Bnh+2rYECgYEA57w/tw9SmJ//PLMz
6siHkx6vzvD2bdAKsinXkR987vYHmlpISKf2VeN02aj6BND2KM9OSCMNzaD+Hz0c
Uv+5RInpr4LpBmDiRPOyTkJjFEuM1ZSgAm01wGY8k8CuHnZs3ueJaSZMmCXmEC8G
F4v/K+nMiOcbl8f23tUOmmJ1KnECgYEA3BPtb64DfBTcnbGvBzZU1WoPOWe8ujFg
yjICX4elKr2jlOzrdw4eU4peU3jVXl+sDPw++NKWUimhdcuimLF7lfOi3VUM8DWr
cCMWfvwFc7URv/42UltN58p6/FceU5WzF+785r8N2tyOtKi81Dsz5uDIytMuqmft
MRlu56FeGLkCgYAiyklKg1tkHIkmJMVDl017Ud0VFWn5vIUOkGeTmwWXnoovqyQ0
/DpoVJijYNIATRrXr5/SBqk42NWt/O+2qju3RXk251FyqrLtpSR8yUy0rE79da28
D4dFVlP73q6FVkQsBtjDV4OiR/ZNMbIZcOQjRJt3ZjLnS5cNhzEFDokGkQKBgQCm
th295NbU7sS0XD4XO4wF4oLH3JJ1hSQp5rovfYSbnO5GyTYRiMtmQ0Hy/2y6QcUG
TSqyuGuQr+KUZf60pnXVAKtV+LCFYlKM7reC2AyVOwvIIZ0qw+l+9b42WxQpAxSY
w7wmW4H2Ue90YQIxzushMRRJuLH3+iQOdpKxumaaWQKBgH5HMvJLiueY1pRMomnQ
fAirquPPeqILTGmnfNhNm+8Fv2HHNUHmfSdMOxK15g+RPEJRDERRDhdLHOep0Lx9
AVcINmkeQVChWcPu1LwoNt0c0AZbB/vDUSh5GadC/dFV85xb58C+Fc7WYvOIYwS4
KvvWnCWcue5qxZCd2G+6oNx/
-----END PRIVATE KEY-----
+50 -32
View File
@@ -1,4 +1,5 @@
import Link from "next/link";
import { useState } from "react";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
@@ -7,44 +8,61 @@ export default function CaseSearch() {
const router = useRouter();
const { locale } = router;
const [query, setQuery] = useState("");
const handleParam = (setValue) => (e) => setValue(e.target.value);
const basicSearch = (event) => {
event.preventDefault();
console.log(query);
// /searchresults
router.push({
pathname: "/searchresults",
query: { q: query },
});
};
return (
<div className="card" id="casesearch-card">
<div className="card-body">
<h3 className="heading-small card-heading">
{t("home:casesearch-card-title")}
</h3>
<div className="govuk-form-group">
<div id="event-name-hint" className="govuk-hint ">
{t("home:casesearch-card-search-hint")}:
<br />
<span className="govuk-body-s">
{" "}
<span className="govuk-!-font-weight-bold">
{t("home:casesearch-card-search-example-label")}
:
</span>{" "}
APP/A1234/A/99/1234567
</span>
<form onSubmit={basicSearch}>
<div className="card-body">
<h3 className="heading-small card-heading">
{t("home:casesearch-card-title")}
</h3>
<div className="govuk-form-group">
<div id="event-name-hint" className="govuk-hint ">
{t("home:casesearch-card-search-hint")}:
<br />
<span className="govuk-body-s">
{" "}
<span className="govuk-!-font-weight-bold">
{t(
"home:casesearch-card-search-example-label"
)}
:
</span>{" "}
APP/A1234/A/99/1234567
</span>
</div>
<input
className="govuk-input"
id="event-name"
name="event-name"
type="text"
aria-describedby="event-name-hint"
onChange={handleParam(setQuery)}
/>
</div>
<input
className="govuk-input"
id="event-name"
name="event-name"
type="text"
aria-describedby="event-name-hint"
/>
</div>
<div className="govuk-form-group">
<Link href="/searchresults">
<a className="govuk-button">
<div className="govuk-form-group">
<button type="submit" className="govuk-button">
{t("home:casesearch-card-button")}
</a>
</button>
</div>
<Link href="/advancedsearch">
<a>{t("home:casesearch-card-advanced-link")}</a>
</Link>
</div>
<Link href="/advancedsearch">
<a>{t("home:casesearch-card-advanced-link")}</a>
</Link>
</div>
</form>
</div>
);
}
+54 -34
View File
@@ -1,4 +1,5 @@
import Link from "next/link";
import { useState } from "react";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
@@ -7,46 +8,65 @@ export default function SearchCases() {
const router = useRouter();
const { locale } = router;
const [query, setQuery] = useState("");
const handleParam = (setValue) => (e) => setValue(e.target.value);
const basicSearch = (event) => {
event.preventDefault();
console.log(query);
// /searchresults
router.push({
pathname: "/searchresults",
query: { q: query },
});
};
return (
<div className="card card-3" id="casescomment-card">
<div className="card-body">
<h3 className="heading-small card-heading">
{t("myportal:searchcases-card-title")}
</h3>
<div className="govuk-form-group">
<div id="event-name-hint" className="govuk-hint ">
{t("myportal:searchcases-card-search-hint")}:
<br />
<span className="govuk-body-s">
{" "}
<span className="govuk-!-font-weight-bold">
{t(
"myportal:searchcases-card-search-example-label"
)}
:
</span>{" "}
APP/A1234/A/99/1234567
</span>
<form onSubmit={basicSearch}>
<div className="card-body">
<h3 className="heading-small card-heading">
{t("myportal:searchcases-card-title")}
</h3>
<div className="govuk-form-group">
<div id="event-name-hint" className="govuk-hint ">
{t("myportal:searchcases-card-search-hint")}:
<br />
<span className="govuk-body-s">
{" "}
<span className="govuk-!-font-weight-bold">
{t(
"myportal:searchcases-card-search-example-label"
)}
:
</span>{" "}
APP/A1234/A/99/1234567
</span>
</div>
<input
className="govuk-input"
id="event-name"
name="event-name"
type="text"
aria-describedby="event-name-hint"
onChange={handleParam(setQuery)}
/>
</div>
<input
className="govuk-input"
id="event-name"
name="event-name"
type="text"
aria-describedby="event-name-hint"
/>
</div>
<div className="govuk-form-group">
<Link href="/searchresults">
<a className="govuk-button">
<div className="govuk-form-group">
<button
type="submit"
name="search"
className="govuk-button"
>
{t("myportal:searchcases-card-button")}
</a>
</button>
</div>
<Link href="/advancedsearch">
<a>{t("myportal:searchcases-card-advanced-link")}</a>
</Link>
</div>
<Link href="/advancedsearch">
<a>{t("myportal:searchcases-card-advanced-link")}</a>
</Link>
</div>
</form>
</div>
);
}
+1 -17
View File
@@ -17,23 +17,7 @@ export default function Search({ children, pages }) {
id="main-content"
role="main"
>
<div className="govuk-grid-row">
<div className="govuk-grid-column-full">
<SearchForCase />
</div>
</div>
<div className="govuk-grid-row">
<div className="govuk-grid-column-full">
<AdvancedSearch />
</div>
</div>
<div className="govuk-grid-row">
<div className="govuk-grid-column-full">
<Link href="/searchresults">
<a className="govuk-button ">Search</a>
</Link>
</div>
</div>
<AdvancedSearch />
</main>
);
}
File diff suppressed because it is too large Load Diff
+107 -230
View File
@@ -2,11 +2,62 @@ import Link from "next/link";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
export default function SearchResults() {
export default function SearchResults(props) {
const { searchString, searchResultsObj } = props;
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
var resultsArr = props.searchResultsObj.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">
<Link href="/case">
<a>
<span className="results-visually-hidden">
wwwwwwwCase Reference:
</span>
{resultsArr[key].title}
</a>
</Link>
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Site Address:{" "}
</span>
23 Martineau Lane
<br /> HASTINGS
<br />
TN35 5DS
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Appellant/Applicant:
</span>
Mr J Pocknell
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Authority:
</span>
Hastings Borough Council{" "}
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Case Type:
</span>
Planning (W){" "}
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Status:
</span>
In Progress
</dd>
</div>
});
return (
<div className="govuk-grid-row">
<div className="govuk-grid-column-full">
@@ -14,8 +65,8 @@ export default function SearchResults() {
{t("search:searchresults-title-label")}
</h1>
<p className="govuk-body">
{t("search:searchresults-count-label-part-1")} 99{" "}
{t("search:searchresults-count-label-part-2")}
{t("search:searchresults-count-label", { count: props.searchResultsObj.searchResultsObj["@odata.count"].toString()})}. You
searched for <em>"{searchString}"</em>
</p>
<dl className="govuk-summary-list govuk-!-margin-bottom-9 results">
<div className="govuk-summary-list__row results-headings">
@@ -32,238 +83,64 @@ export default function SearchResults() {
{t("search:searchresults-authority-label")}
</dd>
<dd className="govuk-summary-list__key govuk-!-font-size-14">
{t("search:searchresults-case-type-label")}
{t("search:searchresults-case-type-label")}
</dd>
<dd className="govuk-summary-list__key govuk-!-font-size-14">
{t("search:searchresults-status-label")}
</dd>
</div>
<div className="govuk-summary-list__row">
<dd className="govuk-summary-list__value govuk-!-font-size-14 govuk-!-padding-left-2">
<Link href="/case">
<a>
<span className="results-visually-hidden">
Case Reference:
</span>
APP/Z2830/D/21/3272770
</a>
</Link>
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Site Address:{" "}
</span>
23 Martineau Lane
<br /> HASTINGS
<br />
TN35 5DS
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Appellant/Applicant:
</span>
Mr J Pocknell
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Authority:
</span>
Hastings Borough Council{" "}
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Case Type:
</span>
Planning (W){" "}
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Status:
</span>
In Progress
</dd>
</div>
<div className="govuk-summary-list__row">
<dd className="govuk-summary-list__value govuk-!-font-size-14 govuk-!-padding-left-2">
<Link href="/">
<a>
<span className="results-visually-hidden">
Case Reference:
</span>
APP/Z2830/D/21/3272770
</a>
</Link>
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Site Address:{" "}
</span>
23 Martineau Lane
<br /> HASTINGS
<br />
TN35 5DS
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Appellant/Applicant:
</span>
Mr J Pocknell
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Authority:
</span>
Hastings Borough Council{" "}
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Case Type:
</span>
Planning (W){" "}
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Status:
</span>
In Progress
</dd>
</div>
<div className="govuk-summary-list__row">
<dd className="govuk-summary-list__value govuk-!-font-size-14 govuk-!-padding-left-2">
<Link href="/">
<a>
<span className="results-visually-hidden">
Case Reference:
</span>
APP/Z2830/D/21/3272770
</a>
</Link>
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Site Address:{" "}
</span>
23 Martineau Lane
<br /> HASTINGS
<br />
TN35 5DS
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Appellant/Applicant:
</span>
Mr J Pocknell
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Authority:
</span>
Hastings Borough Council{" "}
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Case Type:
</span>
Planning (W){" "}
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Status:
</span>
In Progress
</dd>
</div>
<div className="govuk-summary-list__row">
<dd className="govuk-summary-list__value govuk-!-font-size-14 govuk-!-padding-left-2">
<Link href="/">
<a>
<span className="results-visually-hidden">
Case Reference:
</span>
APP/Z2830/D/21/3272770
</a>
</Link>
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Site Address:{" "}
</span>
23 Martineau Lane
<br /> HASTINGS
<br />
TN35 5DS
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Appellant/Applicant:
</span>
Mr J Pocknell
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Authority:
</span>
Hastings Borough Council{" "}
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Case Type:
</span>
Planning (W){" "}
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Status:
</span>
In Progress
</dd>
</div>
<div className="govuk-summary-list__row">
<dd className="govuk-summary-list__value govuk-!-font-size-14 govuk-!-padding-left-2">
<Link href="/">
<a>
<span className="results-visually-hidden">
Case Reference:
</span>
APP/Z2830/D/21/3272770
</a>
</Link>
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Site Address:{" "}
</span>
23 Martineau Lane
<br /> HASTINGS
<br />
TN35 5DS
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Appellant/Applicant:
</span>
Mr J Pocknell
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Authority:
</span>
Hastings Borough Council{" "}
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Case Type:
</span>
Planning (W){" "}
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Status:
</span>
In Progress
</dd>
</div>
</dl>
{ resultsArr.map((item,key) => {
return(
<div className="govuk-summary-list__row">
<dd className="govuk-summary-list__value govuk-!-font-size-14 govuk-!-padding-left-2">
<Link href="/case">
<a>
<span className="results-visually-hidden">
Case Reference:
</span>
{item.title}
</a>
</Link>
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Site Address:{" "}
</span>
23 Martineau Lane
<br /> HASTINGS
<br />
TN35 5DS
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Appellant/Applicant:
</span>
Mr J Pocknell
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Authority:
</span>
{item.["_customerid_value@OData.Community.Display.V1.FormattedValue"]}
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Case Type:
</span>
{item.["pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"]}
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Status:
</span>
{item.["statuscode@OData.Community.Display.V1.FormattedValue"]}
</dd>
</div>
)
})}
</dl>
</div>
</div>
);
+3 -2
View File
@@ -5,7 +5,8 @@ import useTranslation from "next-translate/useTranslation";
import SearchForCase from "./search/searchforcase";
import SearchResults from "./search/searchresults";
export default function Search({ children, pages }) {
export default function Search(props) {
const { searchString, searchResultsObj } = props;
let { t } = useTranslation();
const router = useRouter();
@@ -19,7 +20,7 @@ export default function Search({ children, pages }) {
>
<div className="govuk-grid-row">
<div className="govuk-grid-column-full">
<SearchResults />
<SearchResults searchString={searchString} searchResultsObj={searchResultsObj}/>
</div>
</div>
<div className="govuk-grid-row">
+1 -2
View File
@@ -46,8 +46,7 @@
"clear-button-label": "Cliriwch",
"clear-all-button-label": "Clirio Pob Un",
"searchresults-title-label": "Crynodeb or Achos ar gyfer",
"searchresults-count-label-part-1": "Cafodd eich chwiliad",
"searchresults-count-label-part-2": "o ganlyniadau",
"searchresults-count-label": "Cafodd eich chwiliad {{count}} o ganlyniadau",
"searchresults-case-reference-label": "Cyfeirnod yr Achos",
"searchresults-site-address-label": "Cyfeiriad y Safle",
"searchresults-applicant-label": "Apelydd/Ymgeisydd",
+2 -3
View File
@@ -46,12 +46,11 @@
"clear-button-label": "Clear",
"clear-all-button-label": "Clear all",
"searchresults-title-label": "Search for a case",
"searchresults-count-label-part-1": "Your search returned",
"searchresults-count-label-part-2": "results",
"searchresults-count-label": "Your search returned {{count}} results",
"searchresults-case-reference-label": "Case reference",
"searchresults-site-address-label": "Site address",
"searchresults-applicant-label": "Appellant/Applicant",
"searchresults-authority-label": "Authorty",
"searchresults-authority-label": "Authority",
"searchresults-case-type-label": "Case type",
"searchresults-status-label": "Status",
"searchresults-watch-label": "Watch",
+1636 -3
View File
File diff suppressed because it is too large Load Diff
+6 -2
View File
@@ -3,7 +3,7 @@
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev",
"dev": "node server.js",
"build": "next build",
"start": "next start"
},
@@ -11,7 +11,9 @@
"@webdeb/next-styles": "^1.1.1",
"axios": "^0.21.1",
"cookies": "^0.8.0",
"dynamics-web-api": "^1.7.4",
"govuk-frontend": "^3.13.0",
"https": "^1.0.0",
"jsonpath": "^1.1.1",
"jsonpath-plus": "^5.1.0",
"lodash": "^4.17.21",
@@ -29,7 +31,9 @@
"redux-thunk": "^2.3.0",
"sass": "^1.35.1",
"sass-loader": "^12.1.0",
"webpack": "^5.40.0"
"webpack": "^5.40.0",
"xml2js": "^0.4.23",
"xmlhttprequest": "^1.8.0"
},
"devDependencies": {
"eslint": "^7.29.0",
+9 -1
View File
@@ -75,4 +75,12 @@ const Home = (props) => {
// };
// };
export default Home; //connect(mapStateToProps)(Home);
const mapStateToProps = (state) => {
console.log(state);
return {
search: state.search,
};
};
export default connect(mapStateToProps)(Home);
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+101
View File
@@ -0,0 +1,101 @@
export default(req, res) =>{
res.statusCode= 200;
res.json(
{
"@odata.context": "https://devcrm2016.llcdt.gov.wales/DVPINS/api/data/v8.2/$metadata#incidents(_accountid_value,_customerid_value,pinswg_appealcasetype,statuscode,ticketnumber,title)",
"@odata.count": 9,
"value": [
{
"@odata.etag": "W/\"704047\"",
"_accountid_value": null,
"_customerid_value": "56e7ef63-7e64-eb11-aaba-00224800be9c",
"pinswg_appealcasetype": 846040000,
"statuscode": 1,
"ticketnumber": "CAS-00009-W8N6W4",
"title": "CAS-00009-W8N6W4",
"incidentid": "9919eac3-21af-eb11-aac3-00224800be9c"
},
{
"@odata.etag": "W/\"704095\"",
"_accountid_value": null,
"_customerid_value": "56e7ef63-7e64-eb11-aaba-00224800be9c",
"pinswg_appealcasetype": 846040011,
"statuscode": 1,
"ticketnumber": "CAS-00010-J9W6L5",
"title": "CAS-00010-J9W6L5",
"incidentid": "55f4fc74-33af-eb11-aac3-00224800be9c"
},
{
"@odata.etag": "W/\"709250\"",
"_accountid_value": null,
"_customerid_value": "41fead24-29ba-eb11-aac4-00224800be9c",
"pinswg_appealcasetype": 846040001,
"statuscode": 1,
"ticketnumber": "CAS-00011-K1N0J8",
"title": "CAS-00011-K1N0J8",
"incidentid": "6bd04d33-29ba-eb11-aac4-00224800be9c"
},
{
"@odata.etag": "W/\"710463\"",
"_accountid_value": null,
"_customerid_value": "56e7ef63-7e64-eb11-aaba-00224800be9c",
"pinswg_appealcasetype": 846040000,
"statuscode": 1,
"ticketnumber": "CAS-00012-D9W6S8",
"title": "CAS-00012-D9W6S8",
"incidentid": "b9c9cbe4-6abc-eb11-aac4-00224800be9c"
},
{
"@odata.etag": "W/\"746096\"",
"_accountid_value": null,
"_customerid_value": "80d99a34-82ad-eb11-aac3-00224800be9c",
"pinswg_appealcasetype": 846040025,
"statuscode": 1,
"ticketnumber": "CAS-00013-Z0B5Z9",
"title": "CAS-00013-Z0B5Z9",
"incidentid": "34071ec4-54d3-eb11-aac5-00224800be9c"
},
{
"@odata.etag": "W/\"749764\"",
"_accountid_value": null,
"_customerid_value": "56e7ef63-7e64-eb11-aaba-00224800be9c",
"pinswg_appealcasetype": 846040021,
"statuscode": 1,
"ticketnumber": "CAS-00014-S3L9B4",
"title": "CAS-00014-S3L9B4",
"incidentid": "2230700b-ebd7-eb11-aac5-00224800be9c"
},
{
"@odata.etag": "W/\"750875\"",
"_accountid_value": null,
"_customerid_value": "cfb7b446-a7d8-eb11-aac5-00224800be9c",
"pinswg_appealcasetype": 846040000,
"statuscode": 1,
"ticketnumber": "CAS-00015-L7J9H1",
"title": "CAS-00015-L7J9H1",
"incidentid": "d5b7b446-a7d8-eb11-aac5-00224800be9c"
},
{
"@odata.etag": "W/\"755001\"",
"_accountid_value": null,
"_customerid_value": "cfb7b446-a7d8-eb11-aac5-00224800be9c",
"pinswg_appealcasetype": 846040004,
"statuscode": 1,
"ticketnumber": "CAS-00016-Y9K9Q0",
"title": "CAS-00016-Y9K9Q0",
"incidentid": "cc6f93ea-bdd9-eb11-aac5-00224800be9c"
},
{
"@odata.etag": "W/\"755216\"",
"_accountid_value": null,
"_customerid_value": "243c0009-49da-eb11-aac5-00224800be9c",
"pinswg_appealcasetype": 846040004,
"statuscode": 1,
"ticketnumber": "CAS-00017-B8X7N0",
"title": "CAS-00017-B8X7N0",
"incidentid": "73895a1b-68dd-eb11-aac5-00224800be9c"
}
]
}
)
};
+146
View File
@@ -0,0 +1,146 @@
export default(req, res) =>{
res.statusCode= 200;
res.json(
{
"@odata.context": "https://devcrm2016.llcdt.gov.wales/DVPINS/api/data/v8.2/$metadata#incidents(_accountid_value,_customerid_value,pinswg_appealcasetype,statuscode,ticketnumber,title)",
"@odata.count": "9",
"value": [
{
"@odata.etag": "W/\"704047\"",
"_accountid_value": null,
"_customerid_value@OData.Community.Display.V1.FormattedValue": "Bridgend CBC",
"_customerid_value@Microsoft.Dynamics.CRM.associatednavigationproperty": "customerid_account",
"_customerid_value@Microsoft.Dynamics.CRM.lookuplogicalname": "account",
"_customerid_value": "56e7ef63-7e64-eb11-aaba-00224800be9c",
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue": "Planning Appeal - S78",
"pinswg_appealcasetype": "846040000",
"statuscode@OData.Community.Display.V1.FormattedValue": "In Progress",
"statuscode": "1",
"ticketnumber": "CAS-00009-W8N6W4",
"title": "CAS-00009-W8N6W4",
"incidentid": "9919eac3-21af-eb11-aac3-00224800be9c"
},
{
"@odata.etag": "W/\"704095\"",
"_accountid_value": null,
"_customerid_value@OData.Community.Display.V1.FormattedValue": "Bridgend CBC",
"_customerid_value@Microsoft.Dynamics.CRM.associatednavigationproperty": "customerid_account",
"_customerid_value@Microsoft.Dynamics.CRM.lookuplogicalname": "account",
"_customerid_value": "56e7ef63-7e64-eb11-aaba-00224800be9c",
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue": "DNS",
"pinswg_appealcasetype": "846040011",
"statuscode@OData.Community.Display.V1.FormattedValue": "In Progress",
"statuscode": "1",
"ticketnumber": "CAS-00010-J9W6L5",
"title": "CAS-00010-J9W6L5",
"incidentid": "55f4fc74-33af-eb11-aac3-00224800be9c"
},
{
"@odata.etag": "W/\"709250\"",
"_accountid_value": null,
"_customerid_value@OData.Community.Display.V1.FormattedValue": "Zoe",
"_customerid_value@Microsoft.Dynamics.CRM.associatednavigationproperty": "customerid_account",
"_customerid_value@Microsoft.Dynamics.CRM.lookuplogicalname": "account",
"_customerid_value": "41fead24-29ba-eb11-aac4-00224800be9c",
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue": "Planning Conditions - S73 + S79",
"pinswg_appealcasetype": "846040001",
"statuscode@OData.Community.Display.V1.FormattedValue": "In Progress",
"statuscode": "1",
"ticketnumber": "CAS-00011-K1N0J8",
"title": "CAS-00011-K1N0J8",
"incidentid": "6bd04d33-29ba-eb11-aac4-00224800be9c"
},
{
"@odata.etag": "W/\"710463\"",
"_accountid_value": null,
"_customerid_value@OData.Community.Display.V1.FormattedValue": "Bridgend CBC",
"_customerid_value@Microsoft.Dynamics.CRM.associatednavigationproperty": "customerid_account",
"_customerid_value@Microsoft.Dynamics.CRM.lookuplogicalname": "account",
"_customerid_value": "56e7ef63-7e64-eb11-aaba-00224800be9c",
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue": "Planning Appeal - S78",
"pinswg_appealcasetype": "846040000",
"statuscode@OData.Community.Display.V1.FormattedValue": "In Progress",
"statuscode": "1",
"ticketnumber": "CAS-00012-D9W6S8",
"title": "CAS-00012-D9W6S8",
"incidentid": "b9c9cbe4-6abc-eb11-aac4-00224800be9c"
},
{
"@odata.etag": "W/\"74609\"",
"_accountid_value": null,
"_customerid_value@OData.Community.Display.V1.FormattedValue": "Barry Boys High School",
"_customerid_value@Microsoft.Dynamics.CRM.associatednavigationproperty": "customerid_account",
"_customerid_value@Microsoft.Dynamics.CRM.lookuplogicalname": "account",
"_customerid_value": "80d99a34-82ad-eb11-aac3-00224800be9c",
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue": "Listed Building and Convention S73 + S79",
"pinswg_appealcasetype": "846040025",
"statuscode@OData.Community.Display.V1.FormattedValue": "In Progress",
"statuscode": "1",
"ticketnumber": "CAS-00013-Z0B5Z9",
"title": "CAS-00013-Z0B5Z9",
"incidentid": "34071ec4-54d3-eb11-aac5-00224800be9c"
},
{
"@odata.etag": "W/\"749764\"",
"_accountid_value": null,
"_customerid_value@OData.Community.Display.V1.FormattedValue": "Bridgend CBC",
"_customerid_value@Microsoft.Dynamics.CRM.associatednavigationproperty": "customerid_account",
"_customerid_value@Microsoft.Dynamics.CRM.lookuplogicalname": "account",
"_customerid_value": "56e7ef63-7e64-eb11-aaba-00224800be9c",
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue": "Wayleave",
"pinswg_appealcasetype": "846040021",
"statuscode@OData.Community.Display.V1.FormattedValue": "In Progress",
"statuscode": "1",
"ticketnumber": "CAS-00014-S3L9B4",
"title": "CAS-00014-S3L9B4",
"incidentid": "2230700b-ebd7-eb11-aac5-00224800be9c"
},
{
"@odata.etag": "W/\"750875\"",
"_accountid_value": null,
"_customerid_value@OData.Community.Display.V1.FormattedValue": "test customer",
"_customerid_value@Microsoft.Dynamics.CRM.associatednavigationproperty": "customerid_contact",
"_customerid_value@Microsoft.Dynamics.CRM.lookuplogicalname": "contact",
"_customerid_value": "cfb7b446-a7d8-eb11-aac5-00224800be9c",
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue": "Planning Appeal - S78",
"pinswg_appealcasetype": "846040000",
"statuscode@OData.Community.Display.V1.FormattedValue": "In Progress",
"statuscode": "1",
"ticketnumber": "CAS-00015-L7J9H1",
"title": "CAS-00015-L7J9H1",
"incidentid": "d5b7b446-a7d8-eb11-aac5-00224800be9c"
},
{
"@odata.etag": "W/\"755001\"",
"_accountid_value": null,
"_customerid_value@OData.Community.Display.V1.FormattedValue": "test customer",
"_customerid_value@Microsoft.Dynamics.CRM.associatednavigationproperty": "customerid_contact",
"_customerid_value@Microsoft.Dynamics.CRM.lookuplogicalname": "contact",
"_customerid_value": "cfb7b446-a7d8-eb11-aac5-00224800be9c",
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue": "Householder Appeal (HAS)",
"pinswg_appealcasetype": "846040004",
"statuscode@OData.Community.Display.V1.FormattedValue": "In Progress",
"statuscode": "1",
"ticketnumber": "CAS-00016-Y9K9Q0",
"title": "CAS-00016-Y9K9Q0",
"incidentid": "cc6f93ea-bdd9-eb11-aac5-00224800be9c"
},
{
"@odata.etag": "W/\"755216\"",
"_accountid_value": null,
"_customerid_value@OData.Community.Display.V1.FormattedValue": "Caerphilly County Borough Council",
"_customerid_value@Microsoft.Dynamics.CRM.associatednavigationproperty": "customerid_account",
"_customerid_value@Microsoft.Dynamics.CRM.lookuplogicalname": "account",
"_customerid_value": "243c0009-49da-eb11-aac5-00224800be9c",
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue": "Householder Appeal (HAS)",
"pinswg_appealcasetype": "846040004",
"statuscode@OData.Community.Display.V1.FormattedValue": "In Progress",
"statuscode": "1",
"ticketnumber": "CAS-00017-B8X7N0",
"title": "CAS-00017-B8X7N0",
"incidentid": "73895a1b-68dd-eb11-aac5-00224800be9c"
}
]
}
)
};
+47 -29
View File
@@ -14,6 +14,10 @@ import Cookies from "cookies";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
import { setSearch, getSearchObj } from "../store/search/action";
import { setSearchResults, getSearchResultsObj } from "../store/searchOutput/action";
import {getBasicSearch} from "../actions"
const Home = (props) => {
const { footerLinks, pages } = props;
let { t, lang } = useTranslation();
@@ -33,7 +37,7 @@ const Home = (props) => {
<Header courseName={t("common:service-name")} />
<div className="govuk-width-container">
<Banner />
<SearchResults />
<SearchResults searchString={props.search.searchString} searchResultsObj={props.searchResultsObj} />
</div>
<Footer footerLinks={footerLinks} />
</div>
@@ -41,38 +45,52 @@ const Home = (props) => {
);
};
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));
}
);
// export const getServerSideProps = wrapper.getServerSideProps(
// async ({ locale, store, req, res }) => {
// const token = await getToken();
// let accessToken = token.access_token;
// 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 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 [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) => {
// //console.log(state);
const mapStateToProps = (state) => {
console.log('mapstate',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,
// };
// };
return {
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,
};
};
export default Home; //connect(mapStateToProps)(Home);
export default connect(mapStateToProps)(Home);
+25
View File
@@ -0,0 +1,25 @@
const { createServer } = require('https');
const { parse } = require('url');
const { readFileSync } = require('fs');
const next = require('next');
const port = 3000;
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handle = app.getRequestHandler();
const httpsOptions = {
key: readFileSync('./certificates/privateKey.key'),
cert: readFileSync('./certificates/certificate.crt')
};
app.prepare()
.then(() => {
createServer(httpsOptions, (req, res) => {
const parsedUrl = parse(req.url, true);
handle(req, res, parsedUrl);
}).listen(port, err => {
if (err) throw err;
console.log(`> Ready on https://localhost:${port}`);
})
});
+18
View File
@@ -0,0 +1,18 @@
export const searchActionTypes = {
GETSEARCH: "GETSEARCH",
SETSEARCH: "SETSEARCH",
UPDATESEARCH: "UPDATESEARCH",
};
export const getSearchObj = () => (dispatch) => {
return dispatch({
type: searchActionTypes.GETSEARCH,
});
};
export const setSearch = (search) => (dispatch) => {
return dispatch({
type: searchActionTypes.SETSEARCH,
searchString: search,
});
};
+16
View File
@@ -0,0 +1,16 @@
import { searchActionTypes } from "./action";
const searchInitialState = {
search: {},
};
export default function reducer(state = searchInitialState, action) {
switch (action.type) {
case searchActionTypes.SETSEARCH:
return {
searchString: action.searchString,
};
default:
return state;
}
}
+18
View File
@@ -0,0 +1,18 @@
export const searchResultsActionTypes = {
GETSEARCHRESULTS: "GETSEARCHRESULTS",
SETSEARCHRESULTS: "SETSEARCHRESULTS",
UPDATESEARCHRESULTS: "UPDATESEARCHRESULTS",
};
export const getSearchResultshObj = () => (dispatch) => {
return dispatch({
type: searchResultsActionTypes.GETSEARCHRESULTS,
});
};
export const setSearchResults = (searchResults) => (dispatch) => {
return dispatch({
type: searchResultsActionTypes.SETSEARCHRESULTS,
searchResultsObj: searchResults,
});
};
+16
View File
@@ -0,0 +1,16 @@
import { searchResultsActionTypes } from "./action";
const searchResultsInitialState = {
searchResultsObj: {},
};
export default function reducer(state = searchResultsInitialState, action) {
switch (action.type) {
case searchResultsActionTypes.SETSEARCHRESULTS:
return {
searchResultsObj: action.searchResultsObj,
};
default:
return state;
}
}
+68 -66
View File
@@ -2,94 +2,96 @@ import { createStore, applyMiddleware, combineReducers } from "redux";
import { createWrapper, HYDRATE } from "next-redux-wrapper";
import thunkMiddleware from "redux-thunk";
import progress from "./progress/reducer";
import search from "./search/reducer";
import searchResultsObj from "./searchOutput/reducer";
import { reducer as formReducer } from "redux-form";
import autoMergeLevel2 from "redux-persist/lib/stateReconciler/autoMergeLevel2";
//COMBINING ALL REDUCERS
const combinedReducer = combineReducers({
progress,
progress,
search,
searchResultsObj
});
const reducer = (state = { progress: "{}" }, action) => {
switch (action.type) {
case HYDRATE:
//if (action.payload.progress === '{}') delete action.payload.progress;
return { ...state, ...action.payload };
case "SERVER_ACTION":
return {
...state,
server: {
...state.server,
progress: action.payload,
},
};
case "CLIENT_ACTION":
return {
...state,
client: {
...state.client,
progress: action.payload,
},
};
case "GET_ITEMS":
return {
...state,
items: action.payload,
loading: false,
};
case "SET_ITEMS":
return {
...state,
items: action.payload,
loading: false,
};
default:
return combinedReducer(state, action);
}
switch (action.type) {
case HYDRATE:
//if (action.payload.progress === '{}') delete action.payload.progress;
return { ...state, ...action.payload };
case "SERVER_ACTION":
return {
...state,
server: {
...state.server,
progress: action.payload,
},
};
case "CLIENT_ACTION":
return {
...state,
client: {
...state.client,
progress: action.payload,
},
};
case "GET_ITEMS":
return {
...state,
items: action.payload,
loading: false,
};
case "SET_ITEMS":
return {
...state,
items: action.payload,
loading: false,
};
default:
return combinedReducer(state, action);
}
};
// BINDING MIDDLEWARE
const bindMiddleware = (middleware) => {
if (process.env.NODE_ENV !== "production") {
const { composeWithDevTools } = require("redux-devtools-extension");
return composeWithDevTools(applyMiddleware(...middleware));
}
return applyMiddleware(...middleware);
if (process.env.NODE_ENV !== "production") {
const { composeWithDevTools } = require("redux-devtools-extension");
return composeWithDevTools(applyMiddleware(...middleware));
}
return applyMiddleware(...middleware);
};
const makeStore = ({ isServer }) => {
if (isServer) {
//If it's on server side, create a store
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 storage = require("redux-persist/lib/storage").default;
if (isServer) {
//If it's on server side, create a store
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 storage = require("redux-persist/lib/storage").default;
const persistConfig = {
key: "nextjs",
whitelist: [
"progress"
],
storage,
stateReconciler: autoMergeLevel2, // if needed, use a safer storage
};
const persistConfig = {
key: "nextjs",
whitelist: ["progress,search,searchResults"],
storage,
stateReconciler: autoMergeLevel2, // if needed, use a safer storage
};
const persistedReducer = persistReducer(persistConfig, reducer); // Create a new reducer with our existing reducer
const persistedReducer = persistReducer(persistConfig, reducer); // Create a new reducer with our existing reducer
const store = createStore(
persistedReducer,
bindMiddleware([thunkMiddleware])
); // Creating the store again
const store = createStore(
persistedReducer,
bindMiddleware([thunkMiddleware])
); // Creating the store again
store.__persistor = persistStore(store); // This creates a persistor object & push that persisted object to .__persistor, so that we can avail the persistability feature
store.__persistor = persistStore(store); // This creates a persistor object & push that persisted object to .__persistor, so that we can avail the persistability feature
return store;
}
return store;
}
};
export const setClientState = (clientState) => ({
type: SET_CLIENT_STATE,
payload: clientState,
type: SET_CLIENT_STATE,
payload: clientState,
});
// Export the wrapper & wrap the pages/_app.js with this wrapper only
export const wrapper = createWrapper(makeStore);
+144 -134
View File
File diff suppressed because it is too large Load Diff