From 8e8797418ae535f66d75cb8728006fca16200b50 Mon Sep 17 00:00:00 2001 From: "robert.bond@test.gov.wales" Date: Tue, 7 Sep 2021 12:46:59 +0100 Subject: [PATCH 01/15] added crm driven form via oauth --- actions/index.js | 136 +++++++++++++++++++++----- components/elements/index.js | 35 ++----- components/newappeal/buildcheckrow.js | 76 +++++++------- components/newappeal/buildfield.js | 1 + components/newappeal/buildrow.js | 32 +++--- components/newappeal/createCase.js | 45 +++------ pages/newappeal/[appealtypes].js | 26 +++-- pages/searchresults.js | 9 +- store/formData/action.js | 15 +-- store/formData/reducer.js | 4 + store/searchOutput/action.js | 8 ++ store/searchOutput/reducer.js | 7 ++ 12 files changed, 245 insertions(+), 149 deletions(-) diff --git a/actions/index.js b/actions/index.js index 015e296e..1ab22b86 100644 --- a/actions/index.js +++ b/actions/index.js @@ -13,6 +13,10 @@ if (process.browser) { BASE_URL = process.env.API_ROOT || `http://localhost:${port}`; } +const WEBAPI_URL = "https://devcrm2016.llcdt.gov.wales/DVPINS"; + +const API_PATH = "/api/data/v8.2/"; + const agent = new https.Agent({ rejectUnauthorized: false, }); @@ -24,11 +28,8 @@ const crmHeaders = { "OData-Version": "4.0", "Accept": "application/json", "Prefer": 'odata.include-annotations="*"', - agent, - }, - auth: { - username: "xm\bondr", - password: "!Sky9fish1972", + "Authorization": + "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IlVXelVaa0U3OEx0NVBGRkJ0LV9seVdoMjdjTSIsImtpZCI6IlVXelVaa0U3OEx0NVBGRkJ0LV9seVdoMjdjTSJ9.eyJhdWQiOiJodHRwczovL2RldmNybTIwMTYubGxjZHQuZ292LndhbGVzLyIsImlzcyI6Imh0dHA6Ly9mcy50ZXN0Lmdvdi53YWxlcy9hZGZzL3NlcnZpY2VzL3RydXN0IiwiaWF0IjoxNjMxMDAwMjUxLCJuYmYiOjE2MzEwMDAyNTEsImV4cCI6MTYzMTAyOTA1MSwidXBuIjpbIlJvYmVydC5Cb25kQHRlc3QuZ292LndhbGVzIiwicm9iZXJ0LmJvbmRAdGVzdC5nb3Yud2FsZXMiXSwicHJpbWFyeXNpZCI6IlMtMS01LTIxLTE4MDA4NDIwNzYtMjQ1NTYwNjU5LTQyMTU3NzU0NjktMTY2MjgiLCJ1bmlxdWVfbmFtZSI6IlhNXFxCb25kUiIsImFwcHR5cGUiOiJQdWJsaWMiLCJhcHBpZCI6IjQyN2ZhNzljLWI1ZmMtNDJhZC04M2Q0LTQxMGIwMzk0OGFiNiIsImF1dGhtZXRob2QiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvYXV0aGVudGljYXRpb25tZXRob2Qvd2luZG93cyIsImF1dGhfdGltZSI6IjIwMjEtMDktMDdUMDc6Mzc6MjIuMzM3WiIsInZlciI6IjEuMCJ9.L8husDSMXMtZxpxKDS0cpPplG6xoHQjSdd17qMfgKZaEUPUOKPy4rznxNwAMp7WxussNeK__nOKE9vHNgc5Nk4lzxbvcYy3jeE7bLWHsB5UYFa1FIrPZpzuEdPIgoWAzhTa4k-anzsA0YNMHpV6QHT14F9wkBTsT8MUtpT2BiNfbflQQ_xtQavp_pCww-1-guysM6USv5NJkuvrHpXjA5_HpaGbprLI8Or3Htjsdgq9c4uCxfjoAGZsjUmtvaIL-jQnkR6-ndYezo12tes7ql2iV4iZT4-fvcib8sUdzHkgFvNmyzMblhogUo8QciTBcvF7-syCfNzLG2vvWSZJ9_g", }, }; @@ -39,9 +40,17 @@ export const getBasicSearch = (searchString) => { 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(BASE_URL + "/api/searchresults2", { - httpsAgent: new https.Agent({ rejectUnauthorized: false }), - }) + // .get(BASE_URL + "/api/searchresults2", { + // httpsAgent: new https.Agent({ rejectUnauthorized: false }), + // }) + .get( + WEBAPI_URL + + API_PATH + + "incidents?$select=_accountid_value,_customerid_value,pinswg_appealcasetype,statuscode,ticketnumber,title&$filter=contains(title, '" + + searchString + + "')&$count=true", + crmHeaders + ) .then((res) => res.data) .catch((error) => { console.log("thiserror", error); @@ -49,6 +58,24 @@ export const getBasicSearch = (searchString) => { ); }; +export const getBasicSearchDetails = (appealType, caseReference) => { + return axios + .get( + WEBAPI_URL + + API_PATH + + "/pinswg_ " + + appealType + + "?$filter=pinswg_name eq '" + + caseReference + + "'&$count=true", + crmHeaders + ) + .then((res) => res.data) + .catch((error) => { + console.log("thiserror", error); + }); +}; + export const getFormData = (whichForm) => { console.log("got to axios", whichForm); console.log("api_root: ", BASE_URL); @@ -62,9 +89,18 @@ export const getFormData = (whichForm) => { //.get("api/appealforms/pinswg_harbourrevisionorder", { //.get("api/appealforms/pinswg_planningappeals78", { //.get(api/appealforms/pinswg_householderappealhas", { - .get(BASE_URL + "/api/appealforms/pinswg_" + whichForm, { - httpsAgent: new https.Agent({ rejectUnauthorized: false }), - }) + // .get(BASE_URL + "/api/appealforms/pinswg_" + whichForm, { + // httpsAgent: new https.Agent({ rejectUnauthorized: false }), + // }) + + .get( + WEBAPI_URL + + API_PATH + + "systemforms?$select=formid,name,formxml,type,objecttypecode&$filter=(objecttypecode%20eq%20%27pinswg_" + + whichForm + + "%27and%20type%20eq%202)&$count=true", + crmHeaders + ) .then((res) => res.data) .catch((error) => { console.log("thiserror", error); @@ -72,19 +108,59 @@ export const getFormData = (whichForm) => { ); }; -export const getAppealsTypes = () => { - console.log("got to axios: appeal types"); - console.log("api_root: ", BASE_URL); +export const getMandatoryFields = (whichForm) => { return axios - .get(BASE_URL + "/api/lookups/pinswg_appealcasetype", { - httpsAgent: new https.Agent({ rejectUnauthorized: false }), - }) + .get( + WEBAPI_URL + + API_PATH + + "EntityDefinitions(LogicalName='pinswg_" + + whichForm + + "')/Attributes?$count=true&$select=LogicalName,RequiredLevel", + crmHeaders + ) .then((res) => res.data) .catch((error) => { console.log("thiserror", error); }); }; +export const getPickLists = (whichForm) => { + return axios + .get( + WEBAPI_URL + + API_PATH + + "EntityDefinitions(LogicalName='pinswg_" + + whichForm + + "')/Attributes/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?$select=LogicalName&$expand=OptionSet,GlobalOptionSet&$count=true", + crmHeaders + ) + .then((res) => res.data) + .catch((error) => { + console.log("thiserror", error); + }); +}; + +export const getAppealsTypes = () => { + console.log("got to axios: appeal types"); + console.log("api_root: ", BASE_URL); + return ( + axios + // .get(BASE_URL + "/api/lookups/pinswg_appealcasetype", { + // httpsAgent: new https.Agent({ rejectUnauthorized: false }), + // }) + .get( + WEBAPI_URL + + API_PATH + + "stringmaps?$filter=attributename%20eq%20%27pinswg_appealcasetype%27&$count=true&$select=value,stringmapid,organizationid,attributevalue", + crmHeaders + ) + .then((res) => res.data) + .catch((error) => { + console.log("thiserror", error); + }) + ); +}; + export const getBasicSearch2 = (searchString) => { var req = new XMLHttpRequest(); req.open( @@ -189,17 +265,23 @@ export const getAppealTypeDetail = (caseReference, appealcasetype) => { export const getLPA = () => { console.log("api_root: ", BASE_URL); - return axios + return ( + axios - .get( - BASE_URL + "/api/lookups/pinswg_lpa", - //.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); - }); + // .get( + // BASE_URL + "/api/lookups/pinswg_lpa", + // //.get("https://devcrm2016.llcdt.gov.wales/DVPINS/api/data/v8.2/accounts?$select=name", + // { httpsAgent: new https.Agent({ rejectUnauthorized: false }) } + // ) + .get( + WEBAPI_URL + API_PATH + "accounts?$count=true&$select=name", + crmHeaders + ) + .then((res) => res.data) + .catch((error) => { + console.log("thi serror", error); + }) + ); }; export const getPersonalAccount = () => { diff --git a/components/elements/index.js b/components/elements/index.js index 60e6afe2..207c2036 100644 --- a/components/elements/index.js +++ b/components/elements/index.js @@ -5,6 +5,7 @@ import DatePicker from "react-datepicker"; import React, { useState } from "react"; import "react-datepicker/dist/react-datepicker.css"; import moment from "moment"; +import jsonpath from "jsonpath"; const RenderTextfield = ({ id, @@ -356,35 +357,17 @@ export function YesNofield(props) { const RenderPickList = ({ datafieldname, + picklistData, name, label, input, meta: { touched, errorStr }, }) => { - const fetcher = (url) => fetch(url).then((res) => res.json()); - - const { data, error } = useSWR("/api/lookups/" + datafieldname, fetcher); - if (error) - return ( -
- - -
- ); - if (!data) - return ( -
-
{label} loading...
-
- ); - //console.log(JSON.stringify(data.GlobalOptionSet.Options)); - - const dropdownObj = data.GlobalOptionSet.Options; - + var dropdownObj = jsonpath.query( + picklistData, + "$..value[?(@.LogicalName=='" + datafieldname + "')]..Options" + ); + dropdownObj = dropdownObj[0]; return (
+
+ ); + } else { + return ( + + ); + } } const RenderMultiline = ({ @@ -349,7 +367,7 @@ export function YesNofield(props) { id={props.name} className="govuk-radios__input" //validate={[required]} - errorMsg="Select and option" + errorMsg="Select an option" component={RenderYesNo} /> ); @@ -414,7 +432,7 @@ export function NumericField(props) { ); break; @@ -57,9 +62,17 @@ export default function BuildField(props) { /> ); break; - case "{ 4273EDBD-AC1D-40d3-9FB2-095C621B552D}": + case "{4273EDBD-AC1D-40d3-9FB2-095C621B552D}": return ( - + ); break; case "{5B773807-9FB2-42db-97C3-7A91EFF8ADFF}": diff --git a/components/newappeal/complete.js b/components/newappeal/complete.js index 5feaf6fe..77ace2f4 100644 --- a/components/newappeal/complete.js +++ b/components/newappeal/complete.js @@ -11,12 +11,22 @@ import { updateCase } from "../../actions"; let CompleteAppeal = (props) => { // un comment to update incident with an appealtype id - // useEffect(() => { - // updateCase( - // props.appealType.caseReference.incidentid, - // props.appealType.appealTypeID - // ); - // }, []); + useEffect(() => { + // updateCase( + // props.appealType.caseReference.incidentid, + // props.appealType.appealTypeID, + // props.form.appealform.values, + // pinswg_appealcasetype@OData.Community.Display.V1.Formatted + // ); + console.log(props.appealType.caseReference.incidentid); + console.log(props.appealType.appealTypeID); + console.log(props.form); + console.log( + props.appealType.caseReference[ + "pinswg_appealcasetype@OData.Community.Display.V1.Formatted" + ] + ); + }, []); let { t } = useTranslation(); @@ -57,6 +67,7 @@ let CompleteAppeal = (props) => { setCurrentSection(currentSection + 1); }; + console.log(JSON.stringify(props.props.form.appealForm.values, null, 2)); alert(JSON.stringify(props.props.form.appealForm.values, null, 2)); return ( From b7815c112e8a4fe96f2eca30210403680e251df7 Mon Sep 17 00:00:00 2001 From: "robert.bond@test.gov.wales" Date: Tue, 14 Sep 2021 12:23:43 +0100 Subject: [PATCH 08/15] appeal update case --- actions/index.js | 27 +++----------- components/elements/index.js | 10 +++--- components/newappeal/complete.js | 61 ++++++++++++++++++++++++-------- 3 files changed, 57 insertions(+), 41 deletions(-) diff --git a/actions/index.js b/actions/index.js index 2970eb72..c43c6f44 100644 --- a/actions/index.js +++ b/actions/index.js @@ -335,14 +335,7 @@ export const createCase = (appealTypeId) => { var config = { method: "post", url: WEBAPI_URL + "incidents", - headers: { - "OData-MaxVersion": "4.0", - "OData-Version": "4.0", - "Accept": "application/json", - "Prefer": 'odata.include-annotations="*",return=representation', - "Content-Type": "application/json", - "ServiceBusAuthorization": SASToken, - }, + azureHeaders, data: data, }; console.log(config); @@ -356,23 +349,13 @@ export const createCase = (appealTypeId) => { }); }; -export const updateCase = (incidentID, appealTypeId) => { - appealTypeId = parseInt(appealTypeId); - var data = JSON.stringify({ - "pinswg_appealcasetype": appealTypeId, - }); +export const updateCase = (incidentId, updateBody, updateFormCollection) => { + var data = JSON.stringify(updateBody); var config = { method: "patch", - url: WEBAPI_URL + `incidents(${incidentID})`, - headers: { - "OData-MaxVersion": "4.0", - "OData-Version": "4.0", - "Accept": "application/json", - "Prefer": "return=representation", - "Authorization": "Bearer " + accessToken, - "Content-Type": "application/json", - }, + url: WEBAPI_URL + updateFormCollection + "(" + incidentId + ")", + azureHeaders, data: data, }; // console.log(config); diff --git a/components/elements/index.js b/components/elements/index.js index fc7f20b9..e3824ff1 100644 --- a/components/elements/index.js +++ b/components/elements/index.js @@ -432,14 +432,15 @@ export function NumericField(props) { ); @@ -455,14 +456,15 @@ export function DecimalField(props) { ); diff --git a/components/newappeal/complete.js b/components/newappeal/complete.js index 77ace2f4..2fef3643 100644 --- a/components/newappeal/complete.js +++ b/components/newappeal/complete.js @@ -8,26 +8,57 @@ import { reduxForm, formValueSelector } from "redux-form"; import { useDispatch, useSelector, shallowEqual, connect } from "react-redux"; import { setCurrentSection } from "../../store/appealType/action"; import { updateCase } from "../../actions"; +import jsonpath from "jsonpath"; + +import data from "../../data/collections.json"; let CompleteAppeal = (props) => { // un comment to update incident with an appealtype id useEffect(() => { - // updateCase( - // props.appealType.caseReference.incidentid, - // props.appealType.appealTypeID, - // props.form.appealform.values, - // pinswg_appealcasetype@OData.Community.Display.V1.Formatted - // ); - console.log(props.appealType.caseReference.incidentid); - console.log(props.appealType.appealTypeID); - console.log(props.form); - console.log( - props.appealType.caseReference[ - "pinswg_appealcasetype@OData.Community.Display.V1.Formatted" - ] + // console.log(props.appealType.caseReference.incidentid); + // console.log(props.appealType.appealTypeID); + // console.log(props.props.form.appealForm.values); + + // console.log(updateBody); + // console.log( + // getFormCollection( + // "pinswg_" + + // props.appealType.caseReference[ + // "pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" + // ] + // .replace(/[\s\-\+\(\)\,\&\.]/g, "") + // .toLowerCase() + // ) + // ); + + let incidentId = props.appealType.caseReference.incidentid; + let updateBody = props.props.form.appealForm.values; + updateBody = JSON.stringify(updateBody); + + updateBody = updateBody.replace(/:"Yes"/gm, `:true`); + updateBody = updateBody.replace(/:"No"/gm, `:false`); + updateBody = JSON.parse(updateBody); + let updateFormCollection = getFormCollection( + "pinswg_" + + props.appealType.caseReference[ + "pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" + ] + .replace(/[\s\-\+\(\)\,\&\.]/g, "") + .toLowerCase() ); + + updateCase(incidentId, updateBody, updateFormCollection); }, []); + const getFormCollection = (formtype) => { + const collectionName = jsonpath.query( + data, + "$..[?(@.LogicalName=='" + formtype + "')].LogicalCollectionName" + ); + //console.log(collectionName[0]); + return collectionName[0]; + }; + let { t } = useTranslation(); const router = useRouter(); @@ -67,8 +98,8 @@ let CompleteAppeal = (props) => { setCurrentSection(currentSection + 1); }; - console.log(JSON.stringify(props.props.form.appealForm.values, null, 2)); - alert(JSON.stringify(props.props.form.appealForm.values, null, 2)); + // console.log(JSON.stringify(props.props.form.appealForm.values, null, 2)); + //alert(JSON.stringify(props.props.form.appealForm.values, null, 2)); return (
From 855b8b1bd93874b47acdede274537b3e9931ad7b Mon Sep 17 00:00:00 2001 From: "robert.bond@test.gov.wales" Date: Tue, 14 Sep 2021 12:32:21 +0100 Subject: [PATCH 09/15] updated header on create case --- actions/index.js | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/actions/index.js b/actions/index.js index c43c6f44..627215b9 100644 --- a/actions/index.js +++ b/actions/index.js @@ -335,7 +335,14 @@ export const createCase = (appealTypeId) => { var config = { method: "post", url: WEBAPI_URL + "incidents", - azureHeaders, + headers: { + "OData-MaxVersion": "4.0", + "OData-Version": "4.0", + "Accept": "application/json", + "Prefer": 'odata.include-annotations="*",return=representation', + "Content-Type": "application/json", + "ServiceBusAuthorization": SASToken, + }, data: data, }; console.log(config); @@ -355,7 +362,14 @@ export const updateCase = (incidentId, updateBody, updateFormCollection) => { var config = { method: "patch", url: WEBAPI_URL + updateFormCollection + "(" + incidentId + ")", - azureHeaders, + headers: { + "OData-MaxVersion": "4.0", + "OData-Version": "4.0", + "Accept": "application/json", + "Prefer": 'odata.include-annotations="*",return=representation', + "Content-Type": "application/json", + "ServiceBusAuthorization": SASToken, + }, data: data, }; // console.log(config); From 1a1ad02fcf85f65d929d397a3439271438b1edfc Mon Sep 17 00:00:00 2001 From: "robert.bond@test.gov.wales" Date: Tue, 14 Sep 2021 14:36:26 +0100 Subject: [PATCH 10/15] added proxy updting case to avoid cors and be SSR --- actions/index.js | 5 +- api/proxy/[...route].js | 26 -------- components/newappeal/complete.js | 4 ++ pages/api/proxy/[...route].js | 110 +++++++++++++++++++++++++++++++ 4 files changed, 117 insertions(+), 28 deletions(-) delete mode 100644 api/proxy/[...route].js create mode 100644 pages/api/proxy/[...route].js diff --git a/actions/index.js b/actions/index.js index 627215b9..28b80bd6 100644 --- a/actions/index.js +++ b/actions/index.js @@ -348,7 +348,7 @@ export const createCase = (appealTypeId) => { console.log(config); return axios(config) .then((res) => { - console.log("posted ", res.data); + // console.log("posted ", res.data); return res.data; }) .catch((error) => { @@ -361,7 +361,8 @@ export const updateCase = (incidentId, updateBody, updateFormCollection) => { var config = { method: "patch", - url: WEBAPI_URL + updateFormCollection + "(" + incidentId + ")", + //url: WEBAPI_URL + updateFormCollection + "(" + incidentId + ")", + url: "/api/proxy/" + updateFormCollection + "(" + incidentId + ")", headers: { "OData-MaxVersion": "4.0", "OData-Version": "4.0", diff --git a/api/proxy/[...route].js b/api/proxy/[...route].js deleted file mode 100644 index fa5688f4..00000000 --- a/api/proxy/[...route].js +++ /dev/null @@ -1,26 +0,0 @@ -import axios from "axios"; - -const API_PATH = "/api/data/v8.2/"; - -const WEBAPI_URL = "https://devcrm2016.llcdt.gov.wales/DVPINS" + API_PATH; - -const accessToken = - "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IlVXelVaa0U3OEx0NVBGRkJ0LV9seVdoMjdjTSIsImtpZCI6IlVXelVaa0U3OEx0NVBGRkJ0LV9seVdoMjdjTSJ9.eyJhdWQiOiJodHRwczovL2RldmNybTIwMTYubGxjZHQuZ292LndhbGVzLyIsImlzcyI6Imh0dHA6Ly9mcy50ZXN0Lmdvdi53YWxlcy9hZGZzL3NlcnZpY2VzL3RydXN0IiwiaWF0IjoxNjMxMTcwMjI1LCJuYmYiOjE2MzExNzAyMjUsImV4cCI6MTYzMTE5OTAyNSwidXBuIjpbIlJvYmVydC5Cb25kQHRlc3QuZ292LndhbGVzIiwicm9iZXJ0LmJvbmRAdGVzdC5nb3Yud2FsZXMiXSwicHJpbWFyeXNpZCI6IlMtMS01LTIxLTE4MDA4NDIwNzYtMjQ1NTYwNjU5LTQyMTU3NzU0NjktMTY2MjgiLCJ1bmlxdWVfbmFtZSI6IlhNXFxCb25kUiIsImFwcHR5cGUiOiJQdWJsaWMiLCJhcHBpZCI6IjQyN2ZhNzljLWI1ZmMtNDJhZC04M2Q0LTQxMGIwMzk0OGFiNiIsImF1dGhtZXRob2QiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvYXV0aGVudGljYXRpb25tZXRob2Qvd2luZG93cyIsImF1dGhfdGltZSI6IjIwMjEtMDktMDlUMDY6NTA6MjIuMTgzWiIsInZlciI6IjEuMCJ9.jds1ILVmVonh1g_KDDzFHZV7_iFpR4GZ6m_uw7YDQpQLXQlFXkPLf-Fan1h61Jl78ZmsBnhPKREvqALQ13tcMPPDg4SK5i6BYI7Jw8eKnqCjNb_mFAnnSCL0NeqZY4JV-HYzgY5tpvuCWgpjL2v_5BKOtU9mRL_700D7Fjt_R6nlI89dOKy3iT88lUxPostTVEC1nBxvh1AjjACG6103ymtRBtRy2ONowk4PClhCO3ZWwnVg1kb4GmXqhKNsXBvEscuZQuAzvawwTIXMvjwUBFSu4fsGdxxjfdsXVGACPdcUn7FekJIzaDtS2I_DvzrWLn9B1BDyBEctUqoVWOWqBw"; - -const crmHeadersReturn = { - withCredentials: true, - headers: { - "Content-Type": "application/json; charset=utf-8", - "OData-MaxVersion": "4.0", - "OData-Version": "4.0", - "Accept": "application/json", - "Prefer": "return=representation", - "Authorization": "Bearer " + accessToken, - }, -}; - -export default async function (res, req) { - return new Promise((resolve, reject) => { - axios.patch(); - }); -} diff --git a/components/newappeal/complete.js b/components/newappeal/complete.js index 2fef3643..7989b388 100644 --- a/components/newappeal/complete.js +++ b/components/newappeal/complete.js @@ -33,6 +33,10 @@ let CompleteAppeal = (props) => { let incidentId = props.appealType.caseReference.incidentid; let updateBody = props.props.form.appealForm.values; + + Object.assign(updateBody, { + "pinswg_name": props.appealType.caseReference.ticketnumber, + }); updateBody = JSON.stringify(updateBody); updateBody = updateBody.replace(/:"Yes"/gm, `:true`); diff --git a/pages/api/proxy/[...route].js b/pages/api/proxy/[...route].js new file mode 100644 index 00000000..479e5ddc --- /dev/null +++ b/pages/api/proxy/[...route].js @@ -0,0 +1,110 @@ +import axios from "axios"; +import https from "https"; +import CryptoJS from "crypto-js"; + +const WEBAPI_URL = "https://dev-pedw-ns.servicebus.windows.net/dev-pedw-hc/"; + +// const azureHeaders = { +// headers: { +// "OData-MaxVersion": "4.0", +// "OData-Version": "4.0", +// "Accept": "application/json", +// "Prefer": 'odata.include-annotations="*",return=representation', +// "Content-Type": "application/json", +// "ServiceBusAuthorization": SASToken, +// }, +// }; + +const getSASToken = () => { + var m_ResourceURI = "dev-pedw-ns.servicebus.windows.net"; + var m_Path = "dev-pedw-hc"; + var m_SasKey = "Ml0Y/S/nfRcmIrHFRkO4jNm2J3iH52TSxPiak7+E1+Y="; + var m_SasKeyName = "devpedwnspolicy"; + + var encodedResourceUri = encodeURIComponent( + "https://" + m_ResourceURI + "/" + m_Path + "/" + ); + + var t0 = new Date(1970, 1, 1, 0, 0, 0, 0); + var t1 = new Date(); + var expireInSeconds = + +(31 * 24 * 3600) + 3600 + (((t1.getTime() - t0.getTime()) / 1000) | 0); + + //the line below is a hack that converts to UTF8 + var plainSignature = JSON.parse( + JSON.stringify(encodedResourceUri + "\n" + expireInSeconds) + ); + + var hash = CryptoJS.HmacSHA256(plainSignature, m_SasKey); + var base64HashValue = CryptoJS.enc.Base64.stringify(hash); + + var token = + "SharedAccessSignature sr=" + + encodedResourceUri + + "&sig=" + + encodeURIComponent(base64HashValue) + + "&se=" + + expireInSeconds + + "&skn=" + + m_SasKeyName; + + return token; +}; + +export default async function (req, res) { + // console.log(req.method); + + var updateBody = { + "pinswg_areaofsiteinhectaresdec": 21, + "pinswg_developmentaffectsettingifalisted": false, + "pinswg_floorspaceinsquaremeters": "123123124", + "pinswg_incarelatestoca": false, + "pinswg_isfloodinganissue": true, + "pinswg_isthesitewithinanaonb": false, + "pinswg_landuse": "846040002", + "pinswg_sitewithinsssi": true, + "pinswg_sitewithinagreenbelt": false, + "pinswg_siteviewablefromroad": false, + "pinswg_typeofplanningapplication": "846040000", + }; + var data = JSON.stringify(req.body); + const SASToken = getSASToken(); + + // console.log(SASToken); + + var config = { + method: req.method, + //url: WEBAPI_URL + updateFormCollection + "(" + incidentId + ")", + url: WEBAPI_URL + req.query.route[0], + headers: { + "OData-MaxVersion": "4.0", + "OData-Version": "4.0", + "Accept": "application/json", + "Prefer": 'odata.include-annotations="*",return=representation', + "Authorization": SASToken, + "Content-Type": "application/json", + }, + data: data, + }; + + console.log(config); + + return new Promise((resolve, reject) => { + // console.log(config); + axios(config) + .then((response) => { + res.statusCode = 200; + res.setHeader("Content-Type", "application/json"); + res.setHeader("Cache-Control", "max-age=1800000"); + res.end(JSON.stringify(response.data)); + console.log("response data", response.data); + resolve(); + }) + .catch((error) => { + console.log("proxy response error", error); + res.json(error); + res.status(405).end(); + return resolve(); + }); + }); +} From bb38c6d0016b640d6194f1a8dde6f7a49688f014 Mon Sep 17 00:00:00 2001 From: rdbsolutions Date: Tue, 14 Sep 2021 15:05:11 +0100 Subject: [PATCH 11/15] fixed some build issues stopping deployment --- components/newappeal/buildchecksection.js | 1 - components/newappeal/complete.js | 18 +----------------- pages/api/proxy/[...route].js | 2 +- 3 files changed, 2 insertions(+), 19 deletions(-) diff --git a/components/newappeal/buildchecksection.js b/components/newappeal/buildchecksection.js index aa252a3d..6f53e25f 100644 --- a/components/newappeal/buildchecksection.js +++ b/components/newappeal/buildchecksection.js @@ -76,7 +76,6 @@ let BuildCheckSection = (props) => { props={props} key={key} mandatoryFieldsData={mandatoryFieldsData} - props={props} /> ))} diff --git a/components/newappeal/complete.js b/components/newappeal/complete.js index 7989b388..f66f1900 100644 --- a/components/newappeal/complete.js +++ b/components/newappeal/complete.js @@ -15,22 +15,6 @@ import data from "../../data/collections.json"; let CompleteAppeal = (props) => { // un comment to update incident with an appealtype id useEffect(() => { - // console.log(props.appealType.caseReference.incidentid); - // console.log(props.appealType.appealTypeID); - // console.log(props.props.form.appealForm.values); - - // console.log(updateBody); - // console.log( - // getFormCollection( - // "pinswg_" + - // props.appealType.caseReference[ - // "pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" - // ] - // .replace(/[\s\-\+\(\)\,\&\.]/g, "") - // .toLowerCase() - // ) - // ); - let incidentId = props.appealType.caseReference.incidentid; let updateBody = props.props.form.appealForm.values; @@ -52,7 +36,7 @@ let CompleteAppeal = (props) => { ); updateCase(incidentId, updateBody, updateFormCollection); - }, []); + }, [props.appealType.caseReference, props.props.form.appealForm.values]); const getFormCollection = (formtype) => { const collectionName = jsonpath.query( diff --git a/pages/api/proxy/[...route].js b/pages/api/proxy/[...route].js index 479e5ddc..d8c2e4cc 100644 --- a/pages/api/proxy/[...route].js +++ b/pages/api/proxy/[...route].js @@ -51,7 +51,7 @@ const getSASToken = () => { return token; }; -export default async function (req, res) { +export default async function ApiProxy(req, res) { // console.log(req.method); var updateBody = { From 6ad60b990be21bdeb9d013e23ca081ff0494a2e5 Mon Sep 17 00:00:00 2001 From: "robert.bond@test.gov.wales" Date: Wed, 15 Sep 2021 16:43:17 +0100 Subject: [PATCH 12/15] update proxy for get - update appeal record data --- actions/index.js | 86 ++++++++++++++++++-------------- components/newappeal/complete.js | 35 ++++++++++++- data/collections.json | 66 ++++++++++++++++++++++-- pages/api/proxy/[...route].js | 20 ++++++-- 4 files changed, 161 insertions(+), 46 deletions(-) diff --git a/actions/index.js b/actions/index.js index 28b80bd6..e470de66 100644 --- a/actions/index.js +++ b/actions/index.js @@ -137,8 +137,8 @@ export const getBasicSearchDetails = (appealType, caseReference) => { }; export const getFormData = (whichForm) => { - console.log("got to axios", whichForm); - console.log("api_root: ", BASE_URL); + //console.log("got to axios", whichForm); + //console.log("api_root: ", BASE_URL); return axios .get( WEBAPI_URL + @@ -299,7 +299,7 @@ export const getAppealTypeDetail = (caseReference, appealcasetype) => { //https://devcrm2016.llcdt.gov.wales/DVPINS/api/data/v8.2/pinswg_planningappeals78s?$filter=pinswg_name eq 'CAS-00015-L7J9H1' export const getLPA = () => { - console.log("api_root: ", BASE_URL); + // console.log("api_root: ", BASE_URL); return axios .get(WEBAPI_URL + "accounts?$count=true&$select=name", azureHeaders) .then((res) => res.data) @@ -323,6 +323,32 @@ export const getPersonalAccount = () => { }); }; +export const getAppealID = ( + caseReference, + updateFormCollection, + primaryAttribute +) => { + const weburl = + "/api/proxy/" + + updateFormCollection + + "?$count=true&$select=_" + + primaryAttribute + + "s_value&$filter=pinswg_name eq '" + + caseReference + + "'"; + + console.log("proxy url", weburl); + return axios + .get(weburl, azureHeaders) + .then((res) => { + var appealID = res.data.value[0][primaryAttribute]; + return appealID; + }) + .catch((error) => { + console.log("thi serror", error); + }); +}; + export const createCase = (appealTypeId) => { appealTypeId = parseInt(appealTypeId); var data = JSON.stringify({ @@ -345,7 +371,7 @@ export const createCase = (appealTypeId) => { }, data: data, }; - console.log(config); + // console.log(config); return axios(config) .then((res) => { // console.log("posted ", res.data); @@ -356,13 +382,27 @@ export const createCase = (appealTypeId) => { }); }; -export const updateCase = (incidentId, updateBody, updateFormCollection) => { +export const updateCase = async ( + incidentId, + updateBody, + updateFormCollection, + primaryAttribute, + caseReference +) => { var data = JSON.stringify(updateBody); + var appealObj = await getAppealID( + caseReference, + updateFormCollection, + primaryAttribute + ); + + console.log("appeal obj ", appealObj); + var config = { method: "patch", //url: WEBAPI_URL + updateFormCollection + "(" + incidentId + ")", - url: "/api/proxy/" + updateFormCollection + "(" + incidentId + ")", + url: "/api/proxy/" + updateFormCollection + "(" + appealObj + ")", headers: { "OData-MaxVersion": "4.0", "OData-Version": "4.0", @@ -373,7 +413,8 @@ export const updateCase = (incidentId, updateBody, updateFormCollection) => { }, data: data, }; - // console.log(config); + + console.log(config); return axios(config) .then((res) => { console.log("patched ", res.data); @@ -384,37 +425,6 @@ export const updateCase = (incidentId, updateBody, updateFormCollection) => { }); }; -// //jquery version to get case number from an lpa and an appeal type -// var entity = {}; -// entity.caseorigincode = 3; -// entity["customerid_account@odata.bind"] = "/accounts(c75f6f84-49da-eb11-aabd-00224800d1bd)"; -// entity.pinswg_appealcasetype = 846040004; - -// $.ajax({ -// type: "POST", -// contentType: "application/json; charset=utf-8", -// datatype: "json", -// url: Xrm.Page.context.getClientUrl() + "/api/data/v8.2/incidents", -// data: JSON.stringify(entity), -// beforeSend: function(XMLHttpRequest) { -// XMLHttpRequest.setRequestHeader("OData-MaxVersion", "4.0"); -// XMLHttpRequest.setRequestHeader("OData-Version", "4.0"); -// XMLHttpRequest.setRequestHeader("Accept", "application/json"); -// XMLHttpRequest.setRequestHeader("Prefer", "odata.include-annotations=\"*\",return=representation"); -// }, -// async: true, -// success: function(data, textStatus, xhr) { -// var uri = xhr.getResponseHeader("OData-EntityId"); -// var regExp = /\(([^)]+)\)/; -// var matches = regExp.exec(uri); -// var newEntityId = matches[1]; -// //Handle returned attributes -// }, -// error: function(xhr, textStatus, errorThrown) { -// Xrm.Utility.alertDialog(textStatus + " " + errorThrown); -// } -// }); - export const getMyCases = () => { return ( axios diff --git a/components/newappeal/complete.js b/components/newappeal/complete.js index f66f1900..dfdb09b5 100644 --- a/components/newappeal/complete.js +++ b/components/newappeal/complete.js @@ -18,9 +18,19 @@ let CompleteAppeal = (props) => { let incidentId = props.appealType.caseReference.incidentid; let updateBody = props.props.form.appealForm.values; + let updateBindAppealTypeToIncident = + "pinswg_" + + props.appealType.caseReference[ + "pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" + ].replace(/[\s\-\+\(\)\,\&\.]/g, "") + + "Ids"; + Object.assign(updateBody, { "pinswg_name": props.appealType.caseReference.ticketnumber, + [updateBindAppealTypeToIncident + "@odata.bind"]: + "/incidents(" + incidentId + ")", }); + updateBody = JSON.stringify(updateBody); updateBody = updateBody.replace(/:"Yes"/gm, `:true`); @@ -35,7 +45,22 @@ let CompleteAppeal = (props) => { .toLowerCase() ); - updateCase(incidentId, updateBody, updateFormCollection); + let primaryAttribute = getPrimaryAttr( + "pinswg_" + + props.appealType.caseReference[ + "pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" + ] + .replace(/[\s\-\+\(\)\,\&\.]/g, "") + .toLowerCase() + ); + + updateCase( + incidentId, + updateBody, + updateFormCollection, + primaryAttribute, + props.appealType.caseReference.ticketnumber + ); }, [props.appealType.caseReference, props.props.form.appealForm.values]); const getFormCollection = (formtype) => { @@ -47,6 +72,14 @@ let CompleteAppeal = (props) => { return collectionName[0]; }; + const getPrimaryAttr = (formtype) => { + const attrName = jsonpath.query( + data, + "$..[?(@.LogicalName=='" + formtype + "')].PrimaryIdAttribute" + ); + return attrName[0]; + }; + let { t } = useTranslation(); const router = useRouter(); diff --git a/data/collections.json b/data/collections.json index af477149..2b8f258f 100644 --- a/data/collections.json +++ b/data/collections.json @@ -3,309 +3,367 @@ { "LogicalCollectionName": "pinswg_planningobligationss106flows", "LogicalName": "pinswg_planningobligationss106flow", + "PrimaryIdAttribute": "businessprocessflowinstanceid", "MetadataId": "efb4c590-19be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_dnsflows", "LogicalName": "pinswg_dnsflow", + "PrimaryIdAttribute": "businessprocessflowinstanceid", "MetadataId": "328e015f-dabe-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_harbourrevisionorderflows", "LogicalName": "pinswg_harbourrevisionorderflow", + "PrimaryIdAttribute": "businessprocessflowinstanceid", "MetadataId": "98bbb26e-e7be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_transportandworkactflows", "LogicalName": "pinswg_transportandworkactflow", + "PrimaryIdAttribute": "businessprocessflowinstanceid", "MetadataId": "ad4bfc8c-e1be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_maintenanceoflands127flows", "LogicalName": "pinswg_maintenanceoflands127flow", + "PrimaryIdAttribute": "businessprocessflowinstanceid", "MetadataId": "2b26362c-d3be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_environmentalpermittingflows", "LogicalName": "pinswg_environmentalpermittingflow", + "PrimaryIdAttribute": "businessprocessflowinstanceid", "MetadataId": "74dd4767-f2be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_dnses", "LogicalName": "pinswg_dns", + "PrimaryIdAttribute": "pinswg_dnsid", "MetadataId": "36f07225-4a82-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_planningobligationappeals106s", "LogicalName": "pinswg_planningobligationappeals106", + "PrimaryIdAttribute": "pinswg_planningobligationappeals106id", "MetadataId": "cb8beeae-8f81-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_planningconditionss73s79s", "LogicalName": "pinswg_planningconditionss73s79", + "PrimaryIdAttribute": "pinswg_planningconditionss73s79id", "MetadataId": "093bf9ff-8d81-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_rows", "LogicalName": "pinswg_row", + "PrimaryIdAttribute": "pinswg_rowid", "MetadataId": "4ccc6e93-4f82-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_transportandworkacts", "LogicalName": "pinswg_transportandworkact", + "PrimaryIdAttribute": "pinswg_transportandworkactid", "MetadataId": "bc3edc4b-7d82-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_transportandworkacts", "LogicalName": "pinswg_transportandworksact", + "PrimaryIdAttribute": "pinswg_transportandworkactid", "MetadataId": "bc3edc4b-7d82-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_wayleaveflows", "LogicalName": "pinswg_wayleaveflow", + "PrimaryIdAttribute": "businessprocessflowinstanceid", "MetadataId": "a28054b9-e3be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_planningappeals78flows", "LogicalName": "pinswg_planningappeals78flow", + "PrimaryIdAttribute": "businessprocessflowinstanceid", "MetadataId": "ddaebde1-0fbe-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_harbourrevisionorders", "LogicalName": "pinswg_harbourrevisionorder", + "PrimaryIdAttribute": "pinswg_harbourrevisionorderid", "MetadataId": "dc8dcd0d-4f82-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_miscellaneouscaseworks", "LogicalName": "pinswg_miscellaneouscasework", + "PrimaryIdAttribute": "pinswg_miscellaneouscaseworkid", "MetadataId": "f519aa8e-5782-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_miscellaneouscaseworks", "LogicalName": "pinswg_misccasework", + "PrimaryIdAttribute": "pinswg_miscellaneouscaseworkid", "MetadataId": "f519aa8e-5782-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_localdevelopmentplanses", "LogicalName": "pinswg_localdevelopmentplans", + "PrimaryIdAttribute": "businessprocessflowinstanceid", "MetadataId": "38ed3835-c1e0-eb11-aac5-00224800be9c" }, { "LogicalCollectionName": "pinswg_planningappeals78s", "LogicalName": "pinswg_planningappeals78", + "PrimaryIdAttribute": "pinswg_planningappeals78id", "MetadataId": "8d7f813a-4183-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_enforcementnoticeappealsflow174s", "LogicalName": "pinswg_enforcementnoticeappealsflow174", + "PrimaryIdAttribute": "businessprocessflowinstanceid", "MetadataId": "a933cf28-20be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_lawfuldevelopmentcertificates", "LogicalName": "pinswg_lawfuldevelopmentcertificate", + "PrimaryIdAttribute": "pinswg_lawfuldevelopmentcertificateid", "MetadataId": "184e4861-9681-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_lawfuldevelopmentcertificates", "LogicalName": "pinswg_lawfuldevelopmentcertificateappeals194195", + "PrimaryIdAttribute": "pinswg_lawfuldevelopmentcertificateid", "MetadataId": "184e4861-9681-eb11-aac0-00224800be9c" }, - - - { "LogicalCollectionName": "pinswg_highhedgestreepreservationflows", "LogicalName": "pinswg_highhedgestreepreservationflow", + "PrimaryIdAttribute": "businessprocessflowinstanceid", "MetadataId": "c365b924-f3be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_householderappealhases", "LogicalName": "pinswg_householderappealhas", + "PrimaryIdAttribute": "pinswg_householderappealhasid", "MetadataId": "a6c728b0-9081-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_enforcementlistedbuildingconservationaps", "LogicalName": "pinswg_enforcementlistedbuildingconservationap", + "PrimaryIdAttribute": "pinswg_enforcementlistedbuildingconservationapid", "MetadataId": "c697be96-9481-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_enforcementlistedbuildingconservationaps", "LogicalName": "pinswg_enforcementlistedbuildingandconservationappeals39", + "PrimaryIdAttribute": "pinswg_enforcementlistedbuildingconservationapid", "MetadataId": "c697be96-9481-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_callinss77s", "LogicalName": "pinswg_callinss77", + "PrimaryIdAttribute": "pinswg_callinss77id", "MetadataId": "dd309e51-4982-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_commonlands", "LogicalName": "pinswg_commonland", + "PrimaryIdAttribute": "pinswg_commonlandid", "MetadataId": "4161a618-5082-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_advertses", "LogicalName": "pinswg_adverts", + "PrimaryIdAttribute": "pinswg_advertsid", "MetadataId": "0735866b-5482-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_hedgeshedgerowstreepreservationreplacems", "LogicalName": "pinswg_hedgeshedgerowstreepreservationreplacem", + "PrimaryIdAttribute": "pinswg_hedgeshedgerowstreepreservationreplacemid", "MetadataId": "60f38fed-5382-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_hedgeshedgerowstreepreservationreplacems", "LogicalName": "pinswg_highhedgestreepreservationordershedgerowstreereplacementnotice", + "PrimaryIdAttribute": "pinswg_hedgeshedgerowstreepreservationreplacemid", "MetadataId": "60f38fed-5382-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_compulsorypurchaseorderses", "LogicalName": "pinswg_compulsorypurchaseorders", + "PrimaryIdAttribute": "pinswg_compulsorypurchaseordersid", "MetadataId": "054da4c7-5582-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_communityinfrastructurelevys117118119s", "LogicalName": "pinswg_communityinfrastructurelevys117118119", + "PrimaryIdAttribute": "pinswg_communityinfrastructurelevys117118119id", "MetadataId": "0c309f3c-4882-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_objectiveconfigs", "LogicalName": "pinswg_objectiveconfig", + "PrimaryIdAttribute": "pinswg_objectiveconfigid", "MetadataId": "f89ae20c-4777-eb11-aabd-00224800be9c" }, { "LogicalCollectionName": "pinswg_nonvalidations", "LogicalName": "pinswg_nonvalidation", + "PrimaryIdAttribute": "pinswg_nonvalidationid", "MetadataId": "37f31a93-5882-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_rightofwayflows", "LogicalName": "pinswg_rightofwayflow", + "PrimaryIdAttribute": "businessprocessflowinstanceid", "MetadataId": "b26c1d43-efbe-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_caseinvolvements", "LogicalName": "pinswg_caseinvolvement", + "PrimaryIdAttribute": "pinswg_caseinvolvementid", "MetadataId": "65677cd9-4aae-eb11-aac3-00224800be9c" }, { "LogicalCollectionName": "pinswg_commonlandflows", "LogicalName": "pinswg_commonlandflow", + "PrimaryIdAttribute": "businessprocessflowinstanceid", "MetadataId": "338fac85-e6be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_lawfuldevelopmentcertificates195flows", "LogicalName": "pinswg_lawfuldevelopmentcertificates195flow", + "PrimaryIdAttribute": "businessprocessflowinstanceid", "MetadataId": "0b8f5046-1dbe-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_advertisementappealanddiscontinuances", "LogicalName": "pinswg_advertisementappealanddiscontinuance", + "PrimaryIdAttribute": "businessprocessflowinstanceid", "MetadataId": "79b9ab3a-f1be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_documenthistories", "LogicalName": "pinswg_documenthistory", + "PrimaryIdAttribute": "pinswg_documenthistoryid", "MetadataId": "0d8e78a7-33a3-eb11-aac3-00224800be9c" }, { "LogicalCollectionName": "pinswg_documents", "LogicalName": "pinswg_document", + "PrimaryIdAttribute": "pinswg_documentid", "MetadataId": "e6cbbbca-026a-eb11-aabb-00224800be9c" }, { "LogicalCollectionName": "pinswg_electricityactflows", "LogicalName": "pinswg_electricityactflow", + "PrimaryIdAttribute": "businessprocessflowinstanceid", "MetadataId": "699c4318-e3be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_planningconditionss73s79flows", "LogicalName": "pinswg_planningconditionss73s79flow", + "PrimaryIdAttribute": "businessprocessflowinstanceid", "MetadataId": "510154b1-15be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_wayleaves", "LogicalName": "pinswg_wayleave", + "PrimaryIdAttribute": "pinswg_wayleaveid", "MetadataId": "a0652117-5782-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_listedbuildingandconservationareaconsens", "LogicalName": "pinswg_listedbuildingandconservationareaconsen", + "PrimaryIdAttribute": "pinswg_listedbuildingandconservationareaconsenid", "MetadataId": "4cd95405-8f81-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_listedbuildingandconservationareaconsens", "LogicalName": "pinswg_listedbuildingandconservationareaconsents73s79", + "PrimaryIdAttribute": "pinswg_listedbuildingandconservationareaconsenid", "MetadataId": "4cd95405-8f81-eb11-aac0-00224800be9c" - }, + }, { "LogicalCollectionName": "pinswg_callinapplicationss77flows", "LogicalName": "pinswg_callinapplicationss77flow", + "PrimaryIdAttribute": "businessprocessflowinstanceid", "MetadataId": "2a4f3d43-d4be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_transfercodes", "LogicalName": "pinswg_transfercode", + "PrimaryIdAttribute": "pinswg_transfercodeid", "MetadataId": "a551ad5c-29f5-eb11-aac7-00224800be9c" }, { "LogicalCollectionName": "pinswg_compulsorypurchaseordersflows", "LogicalName": "pinswg_compulsorypurchaseordersflow", + "PrimaryIdAttribute": "businessprocessflowinstanceid", "MetadataId": "a94f098b-f0be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_environmentalpermittings", "LogicalName": "pinswg_environmentalpermitting", + "PrimaryIdAttribute": "pinswg_environmentalpermittingid", "MetadataId": "62d4aa9a-5682-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_nonvaidationflows", "LogicalName": "pinswg_nonvaidationflow", + "PrimaryIdAttribute": "businessprocessflowinstanceid", "MetadataId": "e5ca3ceb-c1e0-eb11-aac5-00224800be9c" }, { "LogicalCollectionName": "pinswg_enforcementnoticeappeals174s", "LogicalName": "pinswg_enforcementnoticeappeals174", + "PrimaryIdAttribute": "pinswg_enforcementnoticeappeals174id", "MetadataId": "930a3cc4-9181-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_ldps", "LogicalName": "pinswg_ldp", + "PrimaryIdAttribute": "pinswg_ldpid", "MetadataId": "af424d4d-5882-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_maintenanceoflands217s", "LogicalName": "pinswg_maintenanceoflands217", + "PrimaryIdAttribute": "pinswg_maintenanceoflands217id", "MetadataId": "bb302784-9581-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_enforcelistbuild39flows", "LogicalName": "pinswg_enforcelistbuild39flow", + "PrimaryIdAttribute": "businessprocessflowinstanceid", "MetadataId": "9423206e-d2be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_householderappealflows", "LogicalName": "pinswg_householderappealflow", + "PrimaryIdAttribute": "businessprocessflowinstanceid", "MetadataId": "330541bd-d5be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_miscellaneouscaseworkflows", "LogicalName": "pinswg_miscellaneouscaseworkflow", + "PrimaryIdAttribute": "businessprocessflowinstanceid", "MetadataId": "87db8649-f4be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_communityinfrastructurelevyflows", "LogicalName": "pinswg_communityinfrastructurelevyflow", + "PrimaryIdAttribute": "businessprocessflowinstanceid", "MetadataId": "92bc1e3d-e0be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_listedbuildconserv20flows", "LogicalName": "pinswg_listedbuildconserv20flow", + "PrimaryIdAttribute": "businessprocessflowinstanceid", "MetadataId": "4c11cbe9-27be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_electricityacts", "LogicalName": "pinswg_electricityact", + "PrimaryIdAttribute": "pinswg_electricityactid", "MetadataId": "6aedaab1-4a82-eb11-aac0-00224800be9c" } ] diff --git a/pages/api/proxy/[...route].js b/pages/api/proxy/[...route].js index d8c2e4cc..444dfdcb 100644 --- a/pages/api/proxy/[...route].js +++ b/pages/api/proxy/[...route].js @@ -72,6 +72,20 @@ export default async function ApiProxy(req, res) { // console.log(SASToken); + var configNoData = { + method: req.method, + //url: WEBAPI_URL + updateFormCollection + "(" + incidentId + ")", + url: WEBAPI_URL + req.url.split("/api/proxy/")[1], + headers: { + "OData-MaxVersion": "4.0", + "OData-Version": "4.0", + "Accept": "application/json", + "Prefer": 'odata.include-annotations="*",return=representation', + "Authorization": SASToken, + "Content-Type": "application/json", + }, + }; + var config = { method: req.method, //url: WEBAPI_URL + updateFormCollection + "(" + incidentId + ")", @@ -87,17 +101,17 @@ export default async function ApiProxy(req, res) { data: data, }; - console.log(config); + console.log(req.url.split("/api/proxy/")[1]); return new Promise((resolve, reject) => { // console.log(config); - axios(config) + axios(req.method == "GET" ? configNoData : config) .then((response) => { res.statusCode = 200; res.setHeader("Content-Type", "application/json"); res.setHeader("Cache-Control", "max-age=1800000"); res.end(JSON.stringify(response.data)); - console.log("response data", response.data); + // console.log("response data", response.data); resolve(); }) .catch((error) => { From c96a72f124ebae59818758f9da0cf5615e743c86 Mon Sep 17 00:00:00 2001 From: "robert.bond@test.gov.wales" Date: Fri, 17 Sep 2021 16:37:06 +0100 Subject: [PATCH 13/15] my cases portal module by loggedin user --- actions/index.js | 49 +++++--- components/case.js | 1 + components/case/summary.js | 22 ++-- components/myportal/mycases.js | 1 + components/myportal/topthree.js | 170 ++++++++++++++++++++-------- components/newappeal/complete.js | 4 + components/newappeal/createCase.js | 28 ++++- data/collections.json | 113 ++++++++++++++++-- pages/account/forgottenpassword.js | 93 +++++++++++++++ pages/account/forgottenuser.js | 93 +++++++++++++++ pages/case.js | 1 + pages/myportal/index.js | 101 +++++++++++++++-- pages/myportal/viewall.js | 1 + pages/newappeal/[appealtypes].js | 20 +++- pages/newappeal/index.js | 1 + store/accountDetails/action.js | 8 ++ store/accountDetails/reducer.js | 6 + store/awaitingSubmission/action.js | 9 ++ store/awaitingSubmission/reducer.js | 7 ++ store/myCases/action.js | 7 ++ store/myCases/reducer.js | 7 ++ store/myRepresentations/action.js | 9 ++ store/myRepresentations/reducer.js | 7 ++ store/store.js | 7 +- store/watchedCases/action.js | 8 ++ store/watchedCases/reducer.js | 7 ++ 26 files changed, 673 insertions(+), 107 deletions(-) create mode 100644 pages/account/forgottenpassword.js create mode 100644 pages/account/forgottenuser.js diff --git a/actions/index.js b/actions/index.js index e470de66..707d41d7 100644 --- a/actions/index.js +++ b/actions/index.js @@ -425,22 +425,19 @@ export const updateCase = async ( }); }; -export const getMyCases = () => { - return ( - axios - // .get(BASE_URL + "/api/lookups/myCases", { - // httpsAgent: new https.Agent({ rejectUnauthorized: false }), - // }) - .get( - WEBAPI_URL + - "incidents?$select=_accountid_value,_customerid_value,pinswg_appealcasetype,statuscode,ticketnumber,title, _primarycontactid_value&$expand=primarycontactid($select=fullname)&$filter=pinswg_appealcasetype ne null &$count=true", - azureHeaders - ) - .then((res) => res.data) - .catch((error) => { - console.log("thi serror", error); - }) - ); +export const getMyCases = (loggedInUserId) => { + return axios + .get( + WEBAPI_URL + + "incidents?$select=ticketnumber,casetypecode,createdon,_customerid_value,description,incidentid,pinswg_appealcasetype,_pinswg_assignedinspectrids_value,statecode,statuscode,title&$filter=_customerid_value eq " + + loggedInUserId + + " and pinswg_appealcasetype ne null&$orderby=createdon desc&$count=true&$top=3", + azureHeaders + ) + .then((res) => res.data) + .catch((error) => { + console.log("thi serror", error); + }); }; export const getMyRepresentations = () => { @@ -451,7 +448,7 @@ export const getMyRepresentations = () => { // }) .get( WEBAPI_URL + - "incidents?$select=_accountid_value,_customerid_value,pinswg_appealcasetype,statuscode,ticketnumber,title, _primarycontactid_value&$expand=primarycontactid($select=fullname)&$filter=pinswg_appealcasetype ne null &$count=true", + "incidents?$select=_accountid_value,_customerid_value,pinswg_appealcasetype,statuscode,ticketnumber,title, _primarycontactid_value&$expand=primarycontactid($select=fullname)&$filter=pinswg_appealcasetype ne null &$count=true&$top=3", azureHeaders ) .then((res) => res.data) @@ -470,7 +467,7 @@ export const getWatchedCases = () => { // }) .get( WEBAPI_URL + - "incidents?$select=_accountid_value,_customerid_value,pinswg_appealcasetype,statuscode,ticketnumber,title, _primarycontactid_value&$expand=primarycontactid($select=fullname)&$filter=pinswg_appealcasetype ne null &$count=true", + "incidents?$select=_accountid_value,_customerid_value,pinswg_appealcasetype,statuscode,ticketnumber,title, _primarycontactid_value&$expand=primarycontactid($select=fullname)&$filter=pinswg_appealcasetype ne null &$count=true&$top=3", azureHeaders ) .then((res) => res.data) @@ -490,3 +487,19 @@ export const getAwaitingSubmission = () => { console.log("thi serror", error); }); }; + +export const getPortalModuelDetails = (appealType, caseReference) => { + return axios + .get( + WEBAPI_URL + + appealType + + "?$filter=pinswg_name eq '" + + caseReference + + "'&$count=true", + azureHeaders + ) + .then((res) => res.data) + .catch((error) => { + console.log("thiserror", error); + }); +}; diff --git a/components/case.js b/components/case.js index 2c06f59c..3f82e98c 100644 --- a/components/case.js +++ b/components/case.js @@ -21,6 +21,7 @@ const CaseSummary = (props) => {
{ } = props; let setCaseQueryObj = props[currentType]; + let setCaseDetailsObj = props[currentType][currentType + "Details"]; var casesObj = {}; @@ -38,10 +39,15 @@ const CaseSummary = (props) => { var detailsObj = {}; - detailsObj = jsonpath.query( - searchDetailsObj, - '$..[?(@.pinswg_name=="' + caseReference + '")]' - ); + currentType == "searchResultsObj" + ? (detailsObj = jsonpath.query( + searchDetailsObj, + '$..[?(@.pinswg_name=="' + caseReference + '")]' + )) + : (detailsObj = jsonpath.query( + setCaseDetailsObj, + '$..[?(@.pinswg_name=="' + caseReference + '")]' + )); detailsObj = detailsObj[0]; return ( @@ -61,11 +67,9 @@ const CaseSummary = (props) => { {t("case:summary-applicant-label")}
- { - detailsObj[ - "_pinswg_appellant_value@OData.Community.Display.V1.FormattedValue" - ] - } + {detailsObj[ + "_pinswg_appellant_value@OData.Community.Display.V1.FormattedValue" + ] || "not entered"}
diff --git a/components/myportal/mycases.js b/components/myportal/mycases.js index 5d0b55aa..1726e8a7 100644 --- a/components/myportal/mycases.js +++ b/components/myportal/mycases.js @@ -20,6 +20,7 @@ const MyCases = (props) => {
diff --git a/components/myportal/topthree.js b/components/myportal/topthree.js index de81f1ee..108fdf51 100644 --- a/components/myportal/topthree.js +++ b/components/myportal/topthree.js @@ -1,4 +1,5 @@ import Link from "next/link"; +import _ from "lodash"; import { useRouter } from "next/router"; import useTranslation from "next-translate/useTranslation"; import { setCurrentReference } from "../../store/currentView/action"; @@ -6,65 +7,134 @@ import { connect } from "react-redux"; const TopThree = (props) => { let { t } = useTranslation(); - const { showTopThree, setCurrentReference, topThreeType } = props; + const { showTopThree, showDetails, setCurrentReference, topThreeType } = + props; const router = useRouter(); const { locale } = router; let topthreeRow = []; - for (var i = 0; i < 3; i++) { - (function (i) { - topthreeRow.push( -
-
- - {topThreeType != "awaitingSubmission" ? ( -
- Address: - {showTopThree.value[i].address1} -
- ) : ( - "" - )} + // for (var i = 0; i < 3; i++) { + // (function (i) { + // topthreeRow.push( + //
+ //
+ // + // {topThreeType != "awaitingSubmission" ? ( + //
+ // Addressaa: + // {showDetails[i].value[0] + // .pinswg_siteaddressline1 == null + // ? "not entered" + // : showDetails[i].value[0] + // .pinswg_siteaddressline1} + //
+ // ) : ( + // "" + // )} - {topThreeType == "awaitingSubmission" ? ( -
- Make Representation on Case Incomplete, not - submitted -
- ) : ( - "" - )} + // {topThreeType == "awaitingSubmission" ? ( + //
+ // Make Representation on Case Incomplete, not + // submitted + //
+ // ) : ( + // "" + // )} + //
+ //
+ //
+ // ); + // })(i); + // } + + let showTopThreeArr = showTopThree.value; + + Object.keys(showTopThreeArr).map((key, index) => { + topthreeRow.push( +
+
+ -
+ {topThreeType != "awaitingSubmission" ? ( +
+ Addressa:{" "} + {_.isEmpty(showDetails) + ? "not entered" + : _.isEmpty(showDetails[index]) + ? "not entered" + : _.isEmpty(showDetails[index].value[0]) + ? "not entered" + : _.isEmpty( + showDetails[index].value[0] + .pinswg_siteaddressline1 + ) + ? "not entered" + : showDetails[index].value[0] + .pinswg_siteaddressline1} +
+ ) : ( + "" + )} + + {topThreeType == "awaitingSubmission" ? ( +
+ Make Representation on Case Incomplete, not + submitted +
+ ) : ( + "" + )}
- ); - })(i); - } +
+
+ ); + }); return <>{topthreeRow}; }; diff --git a/components/newappeal/complete.js b/components/newappeal/complete.js index dfdb09b5..9a713a68 100644 --- a/components/newappeal/complete.js +++ b/components/newappeal/complete.js @@ -26,6 +26,10 @@ let CompleteAppeal = (props) => { "Ids"; Object.assign(updateBody, { + "pinswg_Appellant@odata.bind": + "/contacts(" + props.props.accountDetails.loggedinUserId + ")", + "pinswg_AssociatedLPA@odata.bind": + "/accounts(" + props.appealType.appealLPA + ")", "pinswg_name": props.appealType.caseReference.ticketnumber, [updateBindAppealTypeToIncident + "@odata.bind"]: "/incidents(" + incidentId + ")", diff --git a/components/newappeal/createCase.js b/components/newappeal/createCase.js index a10bd7f9..952cd50b 100644 --- a/components/newappeal/createCase.js +++ b/components/newappeal/createCase.js @@ -7,6 +7,8 @@ import BuildRow from "./buildrow"; import { reduxForm, formValueSelector, Field } from "redux-form"; import { useDispatch, useSelector, shallowEqual, connect } from "react-redux"; import jsonpath from "jsonpath"; + +import data from "../../data/collections.json"; import { setAppealType, setAppealTypeTitle, @@ -174,7 +176,7 @@ let CreateCase = (props) => { "," + optionsObj[key].value .replace( - /[\s\-\+\(\)\,]/g, + /(\band|[\s\-\+\(\)\,\&])/g, "" ) .toLowerCase() @@ -201,11 +203,33 @@ let CreateCase = (props) => { const required = (value) => (value ? undefined : "Required"); + const getFormCollection = (formtype) => { + formtype = + "pinswg_" + + (formtype.length > 39 ? formtype.slice(0, 39) : formtype); + + const collectionName = jsonpath.query( + data, + "$..[?(@.LogicalName=='" + formtype + "')].UrlName" + ); + //console.log(collectionName[0]); + return collectionName[0]; + }; + const onHandleSubmit = (values) => { event.preventDefault(); + + var appTypeCollection = values.appealTypes.split(",")[1]; + + appTypeCollection = getFormCollection( + appTypeCollection.length > 39 + ? appTypeCollection.slice(0, 39) + : appTypeCollection + ); + router.replace( "/newappeal/" + - values.appealTypes.split(",")[1] + + appTypeCollection + "?lpa=" + values.lpaTypes + "&apt=" + diff --git a/data/collections.json b/data/collections.json index 2b8f258f..16d57a78 100644 --- a/data/collections.json +++ b/data/collections.json @@ -4,366 +4,455 @@ "LogicalCollectionName": "pinswg_planningobligationss106flows", "LogicalName": "pinswg_planningobligationss106flow", "PrimaryIdAttribute": "businessprocessflowinstanceid", + "UrlName": "", "MetadataId": "efb4c590-19be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_dnsflows", "LogicalName": "pinswg_dnsflow", "PrimaryIdAttribute": "businessprocessflowinstanceid", + "UrlName": "", "MetadataId": "328e015f-dabe-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_harbourrevisionorderflows", "LogicalName": "pinswg_harbourrevisionorderflow", "PrimaryIdAttribute": "businessprocessflowinstanceid", + "UrlName": "", "MetadataId": "98bbb26e-e7be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_transportandworkactflows", "LogicalName": "pinswg_transportandworkactflow", "PrimaryIdAttribute": "businessprocessflowinstanceid", + "UrlName": "", "MetadataId": "ad4bfc8c-e1be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_maintenanceoflands127flows", "LogicalName": "pinswg_maintenanceoflands127flow", "PrimaryIdAttribute": "businessprocessflowinstanceid", + "UrlName": "", "MetadataId": "2b26362c-d3be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_environmentalpermittingflows", "LogicalName": "pinswg_environmentalpermittingflow", "PrimaryIdAttribute": "businessprocessflowinstanceid", + "UrlName": "", "MetadataId": "74dd4767-f2be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_dnses", "LogicalName": "pinswg_dns", "PrimaryIdAttribute": "pinswg_dnsid", + "UrlName": "dns", "MetadataId": "36f07225-4a82-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_planningobligationappeals106s", "LogicalName": "pinswg_planningobligationappeals106", "PrimaryIdAttribute": "pinswg_planningobligationappeals106id", + "UrlName": "planningobligationappeals106", "MetadataId": "cb8beeae-8f81-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_planningconditionss73s79s", "LogicalName": "pinswg_planningconditionss73s79", "PrimaryIdAttribute": "pinswg_planningconditionss73s79id", + "UrlName": "planningconditionss73s79", "MetadataId": "093bf9ff-8d81-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_rows", "LogicalName": "pinswg_row", "PrimaryIdAttribute": "pinswg_rowid", + "UrlName": "row", "MetadataId": "4ccc6e93-4f82-eb11-aac0-00224800be9c" }, + { + "LogicalCollectionName": "pinswg_transportandworkacts", + "LogicalName": "pinswg_transportworksact", + "PrimaryIdAttribute": "pinswg_transportandworkactid", + "UrlName": "transportandworkact", + "MetadataId": "bc3edc4b-7d82-eb11-aac0-00224800be9c" + }, { "LogicalCollectionName": "pinswg_transportandworkacts", "LogicalName": "pinswg_transportandworkact", - "PrimaryIdAttribute": "pinswg_transportandworkactid", + "PrimaryIdAttribute": "pinswg_transportandworkactid", + "UrlName": "transportandworkact", "MetadataId": "bc3edc4b-7d82-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_transportandworkacts", "LogicalName": "pinswg_transportandworksact", "PrimaryIdAttribute": "pinswg_transportandworkactid", + "UrlName": "transportandworksact", "MetadataId": "bc3edc4b-7d82-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_wayleaveflows", "LogicalName": "pinswg_wayleaveflow", "PrimaryIdAttribute": "businessprocessflowinstanceid", + "UrlName": "", "MetadataId": "a28054b9-e3be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_planningappeals78flows", "LogicalName": "pinswg_planningappeals78flow", "PrimaryIdAttribute": "businessprocessflowinstanceid", + "UrlName": "", "MetadataId": "ddaebde1-0fbe-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_harbourrevisionorders", "LogicalName": "pinswg_harbourrevisionorder", "PrimaryIdAttribute": "pinswg_harbourrevisionorderid", + "UrlName": "harbourrevisionorder", "MetadataId": "dc8dcd0d-4f82-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_miscellaneouscaseworks", "LogicalName": "pinswg_miscellaneouscasework", - "PrimaryIdAttribute": "pinswg_miscellaneouscaseworkid", + "PrimaryIdAttribute": "pinswg_miscellaneouscaseworkid", + "UrlName": "miscellaneouscasework", "MetadataId": "f519aa8e-5782-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_miscellaneouscaseworks", "LogicalName": "pinswg_misccasework", - "PrimaryIdAttribute": "pinswg_miscellaneouscaseworkid", + "PrimaryIdAttribute": "pinswg_miscellaneouscaseworkid", + "UrlName": "miscellaneouscasework", "MetadataId": "f519aa8e-5782-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_localdevelopmentplanses", "LogicalName": "pinswg_localdevelopmentplans", "PrimaryIdAttribute": "businessprocessflowinstanceid", + "UrlName": "localdevelopmentplans", "MetadataId": "38ed3835-c1e0-eb11-aac5-00224800be9c" }, { "LogicalCollectionName": "pinswg_planningappeals78s", "LogicalName": "pinswg_planningappeals78", "PrimaryIdAttribute": "pinswg_planningappeals78id", + "UrlName": "planningappeals78", "MetadataId": "8d7f813a-4183-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_enforcementnoticeappealsflow174s", "LogicalName": "pinswg_enforcementnoticeappealsflow174", "PrimaryIdAttribute": "businessprocessflowinstanceid", + "UrlName": "enforcementnoticeappealsflow174", "MetadataId": "a933cf28-20be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_lawfuldevelopmentcertificates", "LogicalName": "pinswg_lawfuldevelopmentcertificate", - "PrimaryIdAttribute": "pinswg_lawfuldevelopmentcertificateid", + "PrimaryIdAttribute": "pinswg_lawfuldevelopmentcertificateid", + "UrlName": "lawfuldevelopmentcertificate", "MetadataId": "184e4861-9681-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_lawfuldevelopmentcertificates", "LogicalName": "pinswg_lawfuldevelopmentcertificateappeals194195", - "PrimaryIdAttribute": "pinswg_lawfuldevelopmentcertificateid", + "PrimaryIdAttribute": "pinswg_lawfuldevelopmentcertificateid", + "UrlName": "lawfuldevelopmentcertificateappeals1941", + "MetadataId": "184e4861-9681-eb11-aac0-00224800be9c" + }, + { + "LogicalCollectionName": "pinswg_lawfuldevelopmentcertificates", + "LogicalName": "pinswg_lawfuldevelopmentcertificateappeals1941", + "PrimaryIdAttribute": "pinswg_lawfuldevelopmentcertificateid", + "UrlName": "lawfuldevelopmentcertificate", "MetadataId": "184e4861-9681-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_highhedgestreepreservationflows", "LogicalName": "pinswg_highhedgestreepreservationflow", "PrimaryIdAttribute": "businessprocessflowinstanceid", + "UrlName": "", "MetadataId": "c365b924-f3be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_householderappealhases", "LogicalName": "pinswg_householderappealhas", "PrimaryIdAttribute": "pinswg_householderappealhasid", + "UrlName": "householderappealhas", "MetadataId": "a6c728b0-9081-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_enforcementlistedbuildingconservationaps", "LogicalName": "pinswg_enforcementlistedbuildingconservationap", - "PrimaryIdAttribute": "pinswg_enforcementlistedbuildingconservationapid", + "PrimaryIdAttribute": "pinswg_enforcementlistedbuildingconservationapid", + "UrlName": "enforcementlistedbuildingconservationap", "MetadataId": "c697be96-9481-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_enforcementlistedbuildingconservationaps", "LogicalName": "pinswg_enforcementlistedbuildingandconservationappeals39", - "PrimaryIdAttribute": "pinswg_enforcementlistedbuildingconservationapid", + "PrimaryIdAttribute": "pinswg_enforcementlistedbuildingconservationapid", + "UrlName": "enforcementlistedbuildingconservationap", + "MetadataId": "c697be96-9481-eb11-aac0-00224800be9c" + }, + { + "LogicalCollectionName": "pinswg_enforcementlistedbuildingconservationaps", + "LogicalName": "pinswg_enforcementlistedbuildingandconservationap", + "PrimaryIdAttribute": "pinswg_enforcementlistedbuildingconservationapid", + "UrlName": "enforcementlistedbuildingconservationap", "MetadataId": "c697be96-9481-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_callinss77s", "LogicalName": "pinswg_callinss77", "PrimaryIdAttribute": "pinswg_callinss77id", + "UrlName": "callinss77", "MetadataId": "dd309e51-4982-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_commonlands", "LogicalName": "pinswg_commonland", "PrimaryIdAttribute": "pinswg_commonlandid", + "UrlName": "commonland", "MetadataId": "4161a618-5082-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_advertses", "LogicalName": "pinswg_adverts", "PrimaryIdAttribute": "pinswg_advertsid", + "UrlName": "adverts", "MetadataId": "0735866b-5482-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_hedgeshedgerowstreepreservationreplacems", "LogicalName": "pinswg_hedgeshedgerowstreepreservationreplacem", - "PrimaryIdAttribute": "pinswg_hedgeshedgerowstreepreservationreplacemid", + "PrimaryIdAttribute": "pinswg_hedgeshedgerowstreepreservationreplacemid", + "UrlName": "hedgeshedgerowstreepreservationreplacem", "MetadataId": "60f38fed-5382-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_hedgeshedgerowstreepreservationreplacems", "LogicalName": "pinswg_highhedgestreepreservationordershedgerowstreereplacementnotice", - "PrimaryIdAttribute": "pinswg_hedgeshedgerowstreepreservationreplacemid", + "PrimaryIdAttribute": "pinswg_hedgeshedgerowstreepreservationreplacemid", + "UrlName": "hedgeshedgerowstreepreservationreplacem", + "MetadataId": "60f38fed-5382-eb11-aac0-00224800be9c" + }, + { + "LogicalCollectionName": "pinswg_hedgeshedgerowstreepreservationreplacems", + "LogicalName": "pinswg_highhedgestreepreservationordershedgero", + "PrimaryIdAttribute": "pinswg_hedgeshedgerowstreepreservationreplacemid", + "UrlName": "hedgeshedgerowstreepreservationreplacem", "MetadataId": "60f38fed-5382-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_compulsorypurchaseorderses", "LogicalName": "pinswg_compulsorypurchaseorders", "PrimaryIdAttribute": "pinswg_compulsorypurchaseordersid", + "UrlName": "compulsorypurchaseorders", "MetadataId": "054da4c7-5582-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_communityinfrastructurelevys117118119s", "LogicalName": "pinswg_communityinfrastructurelevys117118119", "PrimaryIdAttribute": "pinswg_communityinfrastructurelevys117118119id", + "UrlName": "communityinfrastructurelevys117118119", "MetadataId": "0c309f3c-4882-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_objectiveconfigs", "LogicalName": "pinswg_objectiveconfig", "PrimaryIdAttribute": "pinswg_objectiveconfigid", + "UrlName": "objectiveconfig", "MetadataId": "f89ae20c-4777-eb11-aabd-00224800be9c" }, { "LogicalCollectionName": "pinswg_nonvalidations", "LogicalName": "pinswg_nonvalidation", "PrimaryIdAttribute": "pinswg_nonvalidationid", + "UrlName": "nonvalidation", "MetadataId": "37f31a93-5882-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_rightofwayflows", "LogicalName": "pinswg_rightofwayflow", "PrimaryIdAttribute": "businessprocessflowinstanceid", + "UrlName": "", "MetadataId": "b26c1d43-efbe-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_caseinvolvements", "LogicalName": "pinswg_caseinvolvement", "PrimaryIdAttribute": "pinswg_caseinvolvementid", + "UrlName": "caseinvolvement", "MetadataId": "65677cd9-4aae-eb11-aac3-00224800be9c" }, { "LogicalCollectionName": "pinswg_commonlandflows", "LogicalName": "pinswg_commonlandflow", "PrimaryIdAttribute": "businessprocessflowinstanceid", + "UrlName": "", "MetadataId": "338fac85-e6be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_lawfuldevelopmentcertificates195flows", "LogicalName": "pinswg_lawfuldevelopmentcertificates195flow", "PrimaryIdAttribute": "businessprocessflowinstanceid", + "UrlName": "", "MetadataId": "0b8f5046-1dbe-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_advertisementappealanddiscontinuances", "LogicalName": "pinswg_advertisementappealanddiscontinuance", "PrimaryIdAttribute": "businessprocessflowinstanceid", + "UrlName": "advertisementappealanddiscontinuance", "MetadataId": "79b9ab3a-f1be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_documenthistories", "LogicalName": "pinswg_documenthistory", "PrimaryIdAttribute": "pinswg_documenthistoryid", + "UrlName": "documenthistory", "MetadataId": "0d8e78a7-33a3-eb11-aac3-00224800be9c" }, { "LogicalCollectionName": "pinswg_documents", "LogicalName": "pinswg_document", "PrimaryIdAttribute": "pinswg_documentid", + "UrlName": "documents", "MetadataId": "e6cbbbca-026a-eb11-aabb-00224800be9c" }, { "LogicalCollectionName": "pinswg_electricityactflows", "LogicalName": "pinswg_electricityactflow", "PrimaryIdAttribute": "businessprocessflowinstanceid", + "UrlName": "", "MetadataId": "699c4318-e3be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_planningconditionss73s79flows", "LogicalName": "pinswg_planningconditionss73s79flow", "PrimaryIdAttribute": "businessprocessflowinstanceid", + "UrlName": "", "MetadataId": "510154b1-15be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_wayleaves", "LogicalName": "pinswg_wayleave", "PrimaryIdAttribute": "pinswg_wayleaveid", + "UrlName": "wayleave", "MetadataId": "a0652117-5782-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_listedbuildingandconservationareaconsens", "LogicalName": "pinswg_listedbuildingandconservationareaconsen", - "PrimaryIdAttribute": "pinswg_listedbuildingandconservationareaconsenid", + "PrimaryIdAttribute": "pinswg_listedbuildingandconservationareaconsenid", + "UrlName": "listedbuildingandconservationareaconsen", "MetadataId": "4cd95405-8f81-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_listedbuildingandconservationareaconsens", - "LogicalName": "pinswg_listedbuildingandconservationareaconsents73s79", - "PrimaryIdAttribute": "pinswg_listedbuildingandconservationareaconsenid", + "LogicalName": "pinswg_listedbuildingconservationareaconsents7", + "PrimaryIdAttribute": "pinswg_listedbuildingandconservationareaconsenid", + "UrlName": "listedbuildingandconservationareaconsen", "MetadataId": "4cd95405-8f81-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_callinapplicationss77flows", "LogicalName": "pinswg_callinapplicationss77flow", "PrimaryIdAttribute": "businessprocessflowinstanceid", + "UrlName": "", "MetadataId": "2a4f3d43-d4be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_transfercodes", "LogicalName": "pinswg_transfercode", "PrimaryIdAttribute": "pinswg_transfercodeid", + "UrlName": "transfercode", "MetadataId": "a551ad5c-29f5-eb11-aac7-00224800be9c" }, { "LogicalCollectionName": "pinswg_compulsorypurchaseordersflows", "LogicalName": "pinswg_compulsorypurchaseordersflow", "PrimaryIdAttribute": "businessprocessflowinstanceid", + "UrlName": "", "MetadataId": "a94f098b-f0be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_environmentalpermittings", "LogicalName": "pinswg_environmentalpermitting", "PrimaryIdAttribute": "pinswg_environmentalpermittingid", + "UrlName": "environmentalpermitting", "MetadataId": "62d4aa9a-5682-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_nonvaidationflows", "LogicalName": "pinswg_nonvaidationflow", "PrimaryIdAttribute": "businessprocessflowinstanceid", + "UrlName": "", "MetadataId": "e5ca3ceb-c1e0-eb11-aac5-00224800be9c" }, { "LogicalCollectionName": "pinswg_enforcementnoticeappeals174s", "LogicalName": "pinswg_enforcementnoticeappeals174", "PrimaryIdAttribute": "pinswg_enforcementnoticeappeals174id", + "UrlName": "enforcementnoticeappeals174", "MetadataId": "930a3cc4-9181-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_ldps", "LogicalName": "pinswg_ldp", "PrimaryIdAttribute": "pinswg_ldpid", + "UrlName": "ldp", "MetadataId": "af424d4d-5882-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_maintenanceoflands217s", "LogicalName": "pinswg_maintenanceoflands217", "PrimaryIdAttribute": "pinswg_maintenanceoflands217id", + "UrlName": "maintenanceoflands217", "MetadataId": "bb302784-9581-eb11-aac0-00224800be9c" }, { "LogicalCollectionName": "pinswg_enforcelistbuild39flows", "LogicalName": "pinswg_enforcelistbuild39flow", "PrimaryIdAttribute": "businessprocessflowinstanceid", + "UrlName": "", "MetadataId": "9423206e-d2be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_householderappealflows", "LogicalName": "pinswg_householderappealflow", "PrimaryIdAttribute": "businessprocessflowinstanceid", + "UrlName": "", "MetadataId": "330541bd-d5be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_miscellaneouscaseworkflows", "LogicalName": "pinswg_miscellaneouscaseworkflow", "PrimaryIdAttribute": "businessprocessflowinstanceid", + "UrlName": "", "MetadataId": "87db8649-f4be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_communityinfrastructurelevyflows", "LogicalName": "pinswg_communityinfrastructurelevyflow", "PrimaryIdAttribute": "businessprocessflowinstanceid", + "UrlName": "", "MetadataId": "92bc1e3d-e0be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_listedbuildconserv20flows", "LogicalName": "pinswg_listedbuildconserv20flow", "PrimaryIdAttribute": "businessprocessflowinstanceid", + "UrlName": "", "MetadataId": "4c11cbe9-27be-eb11-aac4-00224800be9c" }, { "LogicalCollectionName": "pinswg_electricityacts", "LogicalName": "pinswg_electricityact", "PrimaryIdAttribute": "pinswg_electricityactid", + "UrlName": "electricityact", "MetadataId": "6aedaab1-4a82-eb11-aac0-00224800be9c" } ] diff --git a/pages/account/forgottenpassword.js b/pages/account/forgottenpassword.js new file mode 100644 index 00000000..1675f022 --- /dev/null +++ b/pages/account/forgottenpassword.js @@ -0,0 +1,93 @@ +import Link from "next/link"; +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 { useSelector, shallowEqual, connect } from "react-redux"; +import { wrapper } from "../../store/store"; +import Cookies from "cookies"; +import { useRouter } from "next/router"; +import { useState } from "react"; +import useTranslation from "next-translate/useTranslation"; +import jsonpath from "jsonpath"; +import { reduxForm, formValueSelector } from "redux-form"; + +import RegisterForm from "../../components/account/registerform"; + +const Home = (props) => { + const { footerLinks, formData } = props; + let { t, lang } = useTranslation(); + + const router = useRouter(); + const { locale } = router; + const { appealtypes } = router.query; + + const [registerFormComplete, setRegisterFormComplete] = useState(false); + const [accountCreatedComplete, setAccountCreatedComplete] = useState(false); + + return ( +
+ + + {t("search:page-title")} - {t("common:service-name")} + + +
+ +
+ +
+
+
+ + +
+
+
+

Forgotten password

+
+
+
+
+
+
+ +
+
+
+ ); +}; + +// 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); +// store.dispatch(setAppealType(appealTypeData)); +// store.dispatch(setLPA(lpaData)); +// } +// ); + +const mapStateToProps = (state) => { + return { + search: state.search, + searchResultsObj: state.searchResultsObj, + formData: state.formData, + appealType: state.appealType, + LPAData: state.LPAData, + form: state.form, + accountDetails: state.accountDetails, + }; +}; + +export default connect(mapStateToProps)(Home); diff --git a/pages/account/forgottenuser.js b/pages/account/forgottenuser.js new file mode 100644 index 00000000..01d7f7e5 --- /dev/null +++ b/pages/account/forgottenuser.js @@ -0,0 +1,93 @@ +import Link from "next/link"; +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 { useSelector, shallowEqual, connect } from "react-redux"; +import { wrapper } from "../../store/store"; +import Cookies from "cookies"; +import { useRouter } from "next/router"; +import { useState } from "react"; +import useTranslation from "next-translate/useTranslation"; +import jsonpath from "jsonpath"; +import { reduxForm, formValueSelector } from "redux-form"; + +import RegisterForm from "../../components/account/registerform"; + +const Home = (props) => { + const { footerLinks, formData } = props; + let { t, lang } = useTranslation(); + + const router = useRouter(); + const { locale } = router; + const { appealtypes } = router.query; + + const [registerFormComplete, setRegisterFormComplete] = useState(false); + const [accountCreatedComplete, setAccountCreatedComplete] = useState(false); + + return ( +
+ + + {t("search:page-title")} - {t("common:service-name")} + + +
+ +
+ +
+
+
+ + +
+
+
+

Forgotten user

+
+
+
+
+
+
+ +
+
+
+ ); +}; + +// 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); +// store.dispatch(setAppealType(appealTypeData)); +// store.dispatch(setLPA(lpaData)); +// } +// ); + +const mapStateToProps = (state) => { + return { + search: state.search, + searchResultsObj: state.searchResultsObj, + formData: state.formData, + appealType: state.appealType, + LPAData: state.LPAData, + form: state.form, + accountDetails: state.accountDetails, + }; +}; + +export default connect(mapStateToProps)(Home); diff --git a/pages/case.js b/pages/case.js index 4b651b81..b5db691e 100644 --- a/pages/case.js +++ b/pages/case.js @@ -37,6 +37,7 @@ const Home = (props) => { { @@ -69,35 +85,96 @@ export const getServerSideProps = wrapper.getServerSideProps( (store) => async ({ query, req, res }) => { //console.log("the query", query); - - res.setHeader( - "Cache-Control", - "public, s-maxage=604800, stale-while-revalidate" - ); - const [ myCases, myRepresentations, watchedCases, awaitingSubmission, ] = await Promise.all([ - await getMyCases(), + await getMyCases("f8b454ed-eded-eb11-aac7-00224800be9c"), await getMyRepresentations(), await getWatchedCases(), await getAwaitingSubmission(), ]); + const cookies = new Cookies(req, res); + + cookies.set("pinsUser", "f8b454ed-eded-eb11-aac7-00224800be9c", { + httpOnly: true, // true by default + }); + + const [ + myCasesDetails, + // myRepresentationsDetails, + // watchedCasesDetails, + // awaitingSubmissionDetails, + ] = await Promise.all([ + await getDetails(myCases), + // await getDetails(myRepresentations), + // await getDetails(watchedCases), + // await getDetails(awaitingSubmission), + ]); + + store.dispatch( + setLoggedInUserId("f8b454ed-eded-eb11-aac7-00224800be9c") + ); store.dispatch(setMyCases(myCases)); + store.dispatch(setMyCasesDetails(myCasesDetails)); store.dispatch(setMyRepresentations(myRepresentations)); + // store.dispatch( + // setMyRepresentationsDetails(myRepresentationsDetails) + // ); store.dispatch(setWatchedCases(watchedCases)); + //store.dispatch(setWatchedCasesDetails(watchedCasesDetails)); store.dispatch(setAwaitingSubmission(awaitingSubmission)); + // store.dispatch( + // setAwaitingSubmissionDetails(awaitingSubmissionDetails) + // ); } ); +const getFormCollection = (formtype) => { + const collectionName = jsonpath.query( + data, + "$..[?(@.LogicalName=='" + formtype + "')].LogicalCollectionName" + ); + //console.log(collectionName[0]); + return collectionName[0]; +}; + +const getDetails = (resultsObj) => { + // console.log(resultsObj); + + let detailsArr = []; + resultsObj = resultsObj.value; + const detailsObj = resultsObj.map((searchDetail, index) => { + if (searchDetail.pinswg_appealcasetype == null) { + console.log(searchDetail.ticketnumber); + } else { + detailsArr.push( + getPortalModuelDetails( + getFormCollection( + "pinswg_" + + searchDetail[ + "pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" + ] + .replace(/[\s\-\+\(\)\,\&\.]/g, "") + .toLowerCase() + ), + searchDetail.ticketnumber + ) + ); + } + }); + //console.log(detailsArr); + return Promise.all(detailsArr); +}; + const mapStateToProps = (state) => { //console.log(state); return { + accountDetails: state.accountDetails, currentView: state.currentView, search: state.search, searchResultsObj: state.searchResultsObj, diff --git a/pages/myportal/viewall.js b/pages/myportal/viewall.js index a8927000..67c79465 100644 --- a/pages/myportal/viewall.js +++ b/pages/myportal/viewall.js @@ -72,6 +72,7 @@ const Home = (props) => { const mapStateToProps = (state) => { return { + accountDetails: state.accountDetails, search: state.search, searchResultsObj: state.searchResultsObj, formData: state.formData, diff --git a/pages/newappeal/[appealtypes].js b/pages/newappeal/[appealtypes].js index ddb60651..6ae4b039 100644 --- a/pages/newappeal/[appealtypes].js +++ b/pages/newappeal/[appealtypes].js @@ -14,6 +14,10 @@ import { useRouter } from "next/router"; import useTranslation from "next-translate/useTranslation"; import jsonpath from "jsonpath"; import { useEffect } from "react"; +import { + setLoggedInUserId, + setAccountDetails, +} from "../../store/accountDetails/action"; import { setAppealType, setAppealTypeTitle, @@ -73,8 +77,9 @@ let Home = (props) => { const optionsTitleObj = selectedObj.reduce( (obj, arrValue) => ( (obj[arrValue] = arrValue - .replace(/[\s\-\+\(\)\,]/g, "") - .toLowerCase()), + .replace(/(\band|[\s\-\+\(\)\,\&])/g, "") + .toLowerCase() + .slice(0, 39)), obj ), {} @@ -164,7 +169,7 @@ let Home = (props) => { export const getServerSideProps = wrapper.getServerSideProps( (store) => async ({ query, req, res }) => { - //console.log("the query", query); + console.log("the query", query); const [ caseReferenceData, @@ -185,12 +190,20 @@ export const getServerSideProps = wrapper.getServerSideProps( // query.apt // ); + const cookies = new Cookies(req, res); + // Get a cookie + + console.log(cookies.get("pipinsUser")); + let caseReference = caseReferenceData; let xmlStr = formdata; xmlStr = formdata.value[0].formxml; xmlStr = xmlStr.replace(/\\"/g, ""); //console.log(caseReference, query.appealtypes, formdata); + store.dispatch( + setLoggedInUserId("f8b454ed-eded-eb11-aac7-00224800be9c") + ); store.dispatch(setAppealLPA(query.lpa)); store.dispatch(setAppealTypeID(query.apt)); store.dispatch(setCaseReference(caseReference)); @@ -206,6 +219,7 @@ const mapStateToProps = (state) => { formData: state.formData, appealType: state.appealType, form: state.form, + accountDetails: state.accountDetails, }; }; diff --git a/pages/newappeal/index.js b/pages/newappeal/index.js index e23e2652..183d2d06 100644 --- a/pages/newappeal/index.js +++ b/pages/newappeal/index.js @@ -98,6 +98,7 @@ const mapStateToProps = (state) => { appealType: state.appealType, LPAData: state.LPAData, form: state.form, + accountDetails: state.accountDetails, }; }; diff --git a/store/accountDetails/action.js b/store/accountDetails/action.js index efc3a7f2..884c3090 100644 --- a/store/accountDetails/action.js +++ b/store/accountDetails/action.js @@ -1,6 +1,7 @@ export const AccountDetailsDataActionTypes = { GETACCOUNTDETAILSDATA: "GETACCOUNTDETAILSDATA", SETACCOUNTDETAILSDATA: "SETACCOUNTDETAILSDATA", + SETLOGGEDINUSER: "SETLOGGEDINUSER", }; export const getAccountDetailsObj = () => (dispatch) => { @@ -16,6 +17,13 @@ export const setAccountDetails = (accountDetails) => (dispatch) => { }); }; +export const setLoggedInUserId = (loggedinUserId) => (dispatch) => { + return dispatch({ + type: AccountDetailsDataActionTypes.SETLOGGEDINUSER, + loggedinUserId: loggedinUserId, + }); +}; + export const setLogout = () => (dispatch) => { return dispatch({ type: "USER_LOGOUT", diff --git a/store/accountDetails/reducer.js b/store/accountDetails/reducer.js index 71ac673b..24a102c3 100644 --- a/store/accountDetails/reducer.js +++ b/store/accountDetails/reducer.js @@ -2,6 +2,7 @@ import { AccountDetailsDataActionTypes } from "./action"; const AccountDetailsDataInitialState = { accountDetails: {}, + loggedinUserId: "", }; export default function reducer( @@ -14,6 +15,11 @@ export default function reducer( ...state, accountDetails: action.accountDetails, }; + case AccountDetailsDataActionTypes.SETLOGGEDINUSER: + return { + ...state, + loggedinUserId: action.loggedinUserId, + }; default: return state; } diff --git a/store/awaitingSubmission/action.js b/store/awaitingSubmission/action.js index 1af673dd..82905994 100644 --- a/store/awaitingSubmission/action.js +++ b/store/awaitingSubmission/action.js @@ -1,6 +1,7 @@ export const awaitingSubmissionActionTypes = { GETAWAITINGSUBMISSION: "GETAWAITINGSUBMISSION", SETAWAITINGSUBMISSION: "SETAWAITINGSUBMISSION", + SETAWAITINGSUBMISSIONDETAILS: "SETAWAITINGSUBMISSIONDETAILS", UPDATEAWAITINGSUBMISSION: "UPDATEAWAITINGSUBMISSION", }; @@ -16,3 +17,11 @@ export const setAwaitingSubmission = (awaitingSubmission) => (dispatch) => { awaitingSubmission: awaitingSubmission, }); }; + +export const setAwaitingSubmissionDetails = + (awaitingSubmissionDetails) => (dispatch) => { + return dispatch({ + type: awaitingSubmissionActionTypes.SETAWAITINGSUBMISSIONDETAILS, + awaitingSubmissionDetails: awaitingSubmissionDetails, + }); + }; diff --git a/store/awaitingSubmission/reducer.js b/store/awaitingSubmission/reducer.js index 7d66f2f6..75c94f5d 100644 --- a/store/awaitingSubmission/reducer.js +++ b/store/awaitingSubmission/reducer.js @@ -2,6 +2,7 @@ import { awaitingSubmissionActionTypes } from "./action"; const awaitingSubmissionInitialState = { awaitingSubmission: {}, + awaitingSubmissionDetails: {}, }; export default function reducer( @@ -11,8 +12,14 @@ export default function reducer( switch (action.type) { case awaitingSubmissionActionTypes.SETAWAITINGSUBMISSION: return { + ...state, awaitingSubmission: action.awaitingSubmission, }; + case awaitingSubmissionActionTypes.SETAWAITINGSUBMISSIONDETAILS: + return { + ...state, + awaitingSubmissionDetails: action.awaitingSubmissionDetails, + }; default: return state; } diff --git a/store/myCases/action.js b/store/myCases/action.js index 5856e7ba..7233dd2c 100644 --- a/store/myCases/action.js +++ b/store/myCases/action.js @@ -2,6 +2,7 @@ export const myCasesActionTypes = { GETMYCASES: "GETMYCASES", SETMYCASES: "SETMYCASES", UPDATEMYCASES: "UPDATEMYCASES", + SETMYCASESDETAILS: "SETMYCASESDETAILS", }; export const getMyCasesObj = () => (dispatch) => { @@ -16,3 +17,9 @@ export const setMyCases = (myCases) => (dispatch) => { myCases: myCases, }); }; +export const setMyCasesDetails = (myCasesDetails) => (dispatch) => { + return dispatch({ + type: myCasesActionTypes.SETMYCASESDETAILS, + myCasesDetails: myCasesDetails, + }); +}; diff --git a/store/myCases/reducer.js b/store/myCases/reducer.js index 0623940d..6d813aa9 100644 --- a/store/myCases/reducer.js +++ b/store/myCases/reducer.js @@ -2,14 +2,21 @@ import { myCasesActionTypes } from "./action"; const myCasesInitialState = { myCases: {}, + myCasesDetails: {}, }; export default function reducer(state = myCasesInitialState, action) { switch (action.type) { case myCasesActionTypes.SETMYCASES: return { + ...state, myCases: action.myCases, }; + case myCasesActionTypes.SETMYCASESDETAILS: + return { + ...state, + myCasesDetails: action.myCasesDetails, + }; default: return state; } diff --git a/store/myRepresentations/action.js b/store/myRepresentations/action.js index c483fa58..9a02b160 100644 --- a/store/myRepresentations/action.js +++ b/store/myRepresentations/action.js @@ -1,6 +1,7 @@ export const myRepresentationsActionTypes = { GETMYREPRESENTATIONS: "GETMYREPRESENTATIONS", SETMYREPRESENTATIONS: "SETMYREPRESENTATIONS", + SETMYREPRESENTATIONSDETAILS: "SETMYREPRESENTATIONSDETAILS", UPDATEMYREPRESENTATIONS: "UPDATEMYREPRESENTATIONS", }; @@ -16,3 +17,11 @@ export const setMyRepresentations = (myRepresentations) => (dispatch) => { myRepresentations: myRepresentations, }); }; + +export const setMyRepresentationsDetails = + (myRepresentationsDetails) => (dispatch) => { + return dispatch({ + type: myRepresentationsActionTypes.SETMYREPRESENTATIONSDETAILS, + myRepresentationsDetails: myRepresentationsDetails, + }); + }; diff --git a/store/myRepresentations/reducer.js b/store/myRepresentations/reducer.js index 5c7bc8be..960f1d28 100644 --- a/store/myRepresentations/reducer.js +++ b/store/myRepresentations/reducer.js @@ -2,14 +2,21 @@ import { myRepresentationsActionTypes } from "./action"; const myRepresentationsInitialState = { myRepresentations: {}, + myRepresentationsDetails: {}, }; export default function reducer(state = myRepresentationsInitialState, action) { switch (action.type) { case myRepresentationsActionTypes.SETMYREPRESENTATIONS: return { + ...state, myRepresentations: action.myRepresentations, }; + case myRepresentationsActionTypes.SETMYREPRESENTATIONSDETAILS: + return { + ...state, + myRepresentationsDetails: action.myRepresentationsDetails, + }; default: return state; } diff --git a/store/store.js b/store/store.js index e59d8bdb..1ed943ee 100644 --- a/store/store.js +++ b/store/store.js @@ -1,5 +1,5 @@ import { createStore, applyMiddleware, combineReducers } from "redux"; -import { createWrapper, HYDRATE } from "next-redux-wrapper"; +import { createWrapper, HYDRATE, REHYDRATE } from "next-redux-wrapper"; import thunkMiddleware from "redux-thunk"; import { reducer as formReducer } from "redux-form"; import autoMergeLevel2 from "redux-persist/lib/stateReconciler/autoMergeLevel2"; @@ -47,6 +47,11 @@ const reducer = (state = {}, action) => { switch (action.type) { case HYDRATE: return { ...state, ...action.payload }; + case REHYDRATE: { + console.log("am rhydrating........"); + return { ...state, ...action.payload }; + } + case "SERVER_ACTION": return { ...state, diff --git a/store/watchedCases/action.js b/store/watchedCases/action.js index 062a9e32..40113bc9 100644 --- a/store/watchedCases/action.js +++ b/store/watchedCases/action.js @@ -1,6 +1,7 @@ export const watchedCasesActionTypes = { GETWATCHEDCASES: "GETWATCHEDCASES", SETWATCHEDCASES: "SETWATCHEDCASES", + SETWATCHEDCASESDETAILS: "SETWATCHEDCASESDETAILS", UPDATEWATCHEDCASES: "UPDATEWATCHEDCASES", }; @@ -16,3 +17,10 @@ export const setWatchedCases = (watchedCases) => (dispatch) => { watchedCases: watchedCases, }); }; + +export const setWatchedCasesDetails = (watchedCasesDetails) => (dispatch) => { + return dispatch({ + type: watchedCasesActionTypes.SETWATCHEDCASESDETAILS, + watchedCasesDetails: watchedCasesDetails, + }); +}; diff --git a/store/watchedCases/reducer.js b/store/watchedCases/reducer.js index 40d2637f..696f95c9 100644 --- a/store/watchedCases/reducer.js +++ b/store/watchedCases/reducer.js @@ -2,14 +2,21 @@ import { watchedCasesActionTypes } from "./action"; const watchedCasesInitialState = { watchedCases: {}, + watchedCasesDetails: {}, }; export default function reducer(state = watchedCasesInitialState, action) { switch (action.type) { case watchedCasesActionTypes.SETWATCHEDCASES: return { + ...state, watchedCases: action.watchedCases, }; + case watchedCasesActionTypes.SETWATCHEDCASESDETAILS: + return { + ...state, + watchedCasesDetails: action.watchedCasesDetails, + }; default: return state; } From a9a8670691ef4794f212ec24e22d972fdfec5902 Mon Sep 17 00:00:00 2001 From: "robert.bond@test.gov.wales" Date: Mon, 20 Sep 2021 10:07:32 +0100 Subject: [PATCH 14/15] updated query for my cases and long appealtypes --- actions/index.js | 32 +++++++++++++------- components/case/representation/index copy.js | 2 +- components/case/representation/index.js | 6 ++-- components/case/summary.js | 2 +- components/newappeal/complete.js | 6 ++-- pages/case.js | 1 + pages/myportal/index.js | 8 ++--- pages/searchresults.js | 2 +- 8 files changed, 35 insertions(+), 24 deletions(-) diff --git a/actions/index.js b/actions/index.js index 707d41d7..a5a3d2f7 100644 --- a/actions/index.js +++ b/actions/index.js @@ -19,22 +19,21 @@ const API_PATH = "/api/data/v8.2/"; //const WEBAPI_URL = "https://devcrm2016.llcdt.gov.wales/DVPINS" + API_PATH; -const WEBAPI_URL = "https://dev-pedw-ns.servicebus.windows.net/dev-pedw-hc/"; +const WEBAPI_URL = + process.env.RELAY_ROOT || + "https://dev-pedw-ns.servicebus.windows.net/dev-pedw-hc/"; const agent = new https.Agent({ rejectUnauthorized: false, }); export const getSASToken = () => { - // var ns = "dev-pedw-ns.servicebus.windows.net"; - // path = "dev-pedw-hc"; - // keyrule = "devpedwnspolicy"; - // key = "Ml0Y/S/nfRcmIrHFRkO4jNm2J3iH52TSxPiak7+E1+Y="; - - var m_ResourceURI = "dev-pedw-ns.servicebus.windows.net"; - var m_Path = "dev-pedw-hc"; - var m_SasKey = "Ml0Y/S/nfRcmIrHFRkO4jNm2J3iH52TSxPiak7+E1+Y="; - var m_SasKeyName = "devpedwnspolicy"; + var m_ResourceURI = + process.env.RELAYURI || "dev-pedw-ns.servicebus.windows.net"; + var m_Path = process.env.RELAYPATH || "dev-pedw-hc"; + var m_SasKey = + process.env.SASKEY || "Ml0Y/S/nfRcmIrHFRkO4jNm2J3iH52TSxPiak7+E1+Y="; + var m_SasKeyName = process.env.SASKEYNAME || "devpedwnspolicy"; var encodedResourceUri = encodeURIComponent( "https://" + m_ResourceURI + "/" + m_Path + "/" @@ -67,7 +66,7 @@ export const getSASToken = () => { }; const accessToken = - "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IlVXelVaa0U3OEx0NVBGRkJ0LV9seVdoMjdjTSIsImtpZCI6IlVXelVaa0U3OEx0NVBGRkJ0LV9seVdoMjdjTSJ9.eyJhdWQiOiJodHRwczovL2RldmNybTIwMTYubGxjZHQuZ292LndhbGVzLyIsImlzcyI6Imh0dHA6Ly9mcy50ZXN0Lmdvdi53YWxlcy9hZGZzL3NlcnZpY2VzL3RydXN0IiwiaWF0IjoxNjMxMjU4ODAzLCJuYmYiOjE2MzEyNTg4MDMsImV4cCI6MTYzMTI4NzYwMywidXBuIjpbIlJvYmVydC5Cb25kQHRlc3QuZ292LndhbGVzIiwicm9iZXJ0LmJvbmRAdGVzdC5nb3Yud2FsZXMiXSwicHJpbWFyeXNpZCI6IlMtMS01LTIxLTE4MDA4NDIwNzYtMjQ1NTYwNjU5LTQyMTU3NzU0NjktMTY2MjgiLCJ1bmlxdWVfbmFtZSI6IlhNXFxCb25kUiIsImFwcHR5cGUiOiJQdWJsaWMiLCJhcHBpZCI6IjQyN2ZhNzljLWI1ZmMtNDJhZC04M2Q0LTQxMGIwMzk0OGFiNiIsImF1dGhtZXRob2QiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvYXV0aGVudGljYXRpb25tZXRob2Qvd2luZG93cyIsImF1dGhfdGltZSI6IjIwMjEtMDktMTBUMDc6MjY6MzQuMjI0WiIsInZlciI6IjEuMCJ9.XFymIQJVavP-7-8V7LdoYDD4836Z-aSxveMQDD1P3y_9M3Tiy3zINiLxCbSr8JaymFOuLOzWcnNXwh7HHZKY6gDC6tD1ALVKCBXmgTDaoR9j7XAOxSUaRl6ArIecd7o6UcqsHAvfpb5zu-ZIy0KxV9PFRxY4JHF_tfLAeAMnqIBq-yDrNBOlbg4Kd9VuAbAK5lNWp-BiMIzMqZUIrmD9HjwE17SWaEnApCNqTcGZ4h2EqDBWgqKae7B1AzoV_7mfp7CscLUBLGdbM-XsXw3t_AVc0xDHoOMuWfsoMfioJONoMsPqTNUY7VQev1pMrFDEFN-jqP4yqSdNlev6H47SCg"; + "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IlVXelVaa0U3OEx0NVBGRkJ0LV9seVdoMjdjTSIsImtpZCI6IlVXelVaa0U3OEx0NVBGRkJ0LV9seVdoMjdjTSJ9.eyJhdWQiOiJodHRwczovL2RldmNybTIwMTYubGxjZHQuZ292LndhbGVzLyIsImlzcyI6Imh0dHA6Ly9mcy50ZXN0Lmdvdi53YWxlcy9hZGZzL3NlcnZpY2VzL3RydXN0IiwiaWF0IjoxNjMyMTIxMjkxLCJuYmYiOjE2MzIxMjEyOTEsImV4cCI6MTYzMjE1MDA5MSwidXBuIjpbIlJvYmVydC5Cb25kQHRlc3QuZ292LndhbGVzIiwicm9iZXJ0LmJvbmRAdGVzdC5nb3Yud2FsZXMiXSwicHJpbWFyeXNpZCI6IlMtMS01LTIxLTE4MDA4NDIwNzYtMjQ1NTYwNjU5LTQyMTU3NzU0NjktMTY2MjgiLCJ1bmlxdWVfbmFtZSI6IlhNXFxCb25kUiIsImFwcHR5cGUiOiJQdWJsaWMiLCJhcHBpZCI6IjQyN2ZhNzljLWI1ZmMtNDJhZC04M2Q0LTQxMGIwMzk0OGFiNiIsImF1dGhtZXRob2QiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvYXV0aGVudGljYXRpb25tZXRob2Qvd2luZG93cyIsImF1dGhfdGltZSI6IjIwMjEtMDktMjBUMDc6MDE6MzEuNDYzWiIsInZlciI6IjEuMCJ9.W0ID2nCBYVxh8T1eQqWKk2Wh45kRbRzCICfzrZNAs-4u54yl0UJUcVihyI8EBmQeALCEc5eY99DjK0gaqzCdJqxbxol8yk5LrFvhV5UkCiZ7SO2Wq1cLReWHVsgz39qBtrZ8vlqqZsv7DsEaRJQbtj8Djnx26Wb_kcNu-tuXwUBF0uR5GLFFvJfM3PzkRCY-ZPOTbvPTb73oN_NKe6BrsVjyaR9xSXsRJjgHPmJgWgnvq-2X0Dj7LCwXSEygDDOGlF1yqqN0Lv6qplhQoH-heZlC1K6qe_92nHPswXag6uN5nxTmk1Qw6zJt_aHMnXdwa18ghh4hGx5R0Jz53X113Q"; const SASToken = getSASToken(); @@ -105,6 +104,17 @@ const azureHeaders = { }, }; +// const azureHeaders = { +// headers: { +// "OData-MaxVersion": "4.0", +// "OData-Version": "4.0", +// "Accept": "application/json", +// "Prefer": 'odata.include-annotations="*",return=representation', +// "Content-Type": "application/json", +// "Authorization": "Bearer " + accessToken, +// }, +// }; + export const getBasicSearch = (searchString) => { return axios .get( diff --git a/components/case/representation/index copy.js b/components/case/representation/index copy.js index 454e8cda..5eaff2cd 100644 --- a/components/case/representation/index copy.js +++ b/components/case/representation/index copy.js @@ -93,7 +93,7 @@ let MakeRepresentation = (props) => { ? setRepresentationCapacity(false) : setRepresentationCapacity( formObj["representationForm"].values.representationCapacity - .replace(/[\s\-\+\(\)\,\/]/g, "") + .replace(/(\band|[\s\-\+\(\)\,\&])/g, "") .toLowerCase() ); diff --git a/components/case/representation/index.js b/components/case/representation/index.js index 15f7bd1f..0e16f76f 100644 --- a/components/case/representation/index.js +++ b/components/case/representation/index.js @@ -107,7 +107,7 @@ let MakeRepresentation = (props) => { ) ? false : formObj["representationForm"].values.representationCapacity - .replace(/[\s\-\+\(\)\,\/]/g, "") + .replace(/(\band|[\s\-\+\(\)\,\&])/g, "") .toLowerCase(); }; @@ -215,14 +215,14 @@ let MakeRepresentation = (props) => { // console.log(_.isEmpty(currentView.representationCapacity)); // console.log( // values.representationCapacity - // .replace(/[\s\-\+\(\)\,\/]/g, "") + // .replace(/(\band|[\s\-\+\(\)\,\&])/g, "") // .toLowerCase() == currentView.representationCapacity // ); _.isEmpty(currentView.representationCapacity) ? setRepresentationCapacity( values.representationCapacity - .replace(/[\s\-\+\(\)\,\/]/g, "") + .replace(/(\band|[\s\-\+\(\)\,\&])/g, "") .toLowerCase() ) : setRepresentationSubmit(true); diff --git a/components/case/summary.js b/components/case/summary.js index 56e6c8ad..4d4f9a22 100644 --- a/components/case/summary.js +++ b/components/case/summary.js @@ -21,7 +21,7 @@ const CaseSummary = (props) => { } = props; let setCaseQueryObj = props[currentType]; - let setCaseDetailsObj = props[currentType][currentType + "Details"]; + let setCaseDetailsObj = props[currentType + "Details"]; var casesObj = {}; diff --git a/components/newappeal/complete.js b/components/newappeal/complete.js index 9a713a68..5d6f77ad 100644 --- a/components/newappeal/complete.js +++ b/components/newappeal/complete.js @@ -22,7 +22,7 @@ let CompleteAppeal = (props) => { "pinswg_" + props.appealType.caseReference[ "pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" - ].replace(/[\s\-\+\(\)\,\&\.]/g, "") + + ].replace(/(\band|[\s\-\+\(\)\,\&])/g, "") + "Ids"; Object.assign(updateBody, { @@ -45,7 +45,7 @@ let CompleteAppeal = (props) => { props.appealType.caseReference[ "pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" ] - .replace(/[\s\-\+\(\)\,\&\.]/g, "") + .replace(/(\band|[\s\-\+\(\)\,\&])/g, "") .toLowerCase() ); @@ -54,7 +54,7 @@ let CompleteAppeal = (props) => { props.appealType.caseReference[ "pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" ] - .replace(/[\s\-\+\(\)\,\&\.]/g, "") + .replace(/(\band|[\s\-\+\(\)\,\&])/g, "") .toLowerCase() ); diff --git a/pages/case.js b/pages/case.js index b5db691e..0d93b4db 100644 --- a/pages/case.js +++ b/pages/case.js @@ -39,6 +39,7 @@ const Home = (props) => { { }; const getDetails = (resultsObj) => { - // console.log(resultsObj); - + //console.log(resultsObj); let detailsArr = []; resultsObj = resultsObj.value; const detailsObj = resultsObj.map((searchDetail, index) => { @@ -158,8 +157,9 @@ const getDetails = (resultsObj) => { searchDetail[ "pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" ] - .replace(/[\s\-\+\(\)\,\&\.]/g, "") + .replace(/(\band|[\s\-\+\(\)\,\&])/g, "") .toLowerCase() + .slice(0, 39) ), searchDetail.ticketnumber ) diff --git a/pages/searchresults.js b/pages/searchresults.js index 9de1b67c..512699d8 100644 --- a/pages/searchresults.js +++ b/pages/searchresults.js @@ -99,7 +99,7 @@ const getSearchDetails = (searchResultsObj) => { searchDetail[ "pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" ] - .replace(/[\s\-\+\(\)\,\&\.]/g, "") + .replace(/(\band|[\s\-\+\(\)\,\&])/g, "") .toLowerCase() ), searchDetail.ticketnumber From 7044497f088123f06369ddf1dbf9b7cd658aa82b Mon Sep 17 00:00:00 2001 From: "robert.bond@test.gov.wales" Date: Mon, 20 Sep 2021 13:32:24 +0100 Subject: [PATCH 15/15] added login soon box and updated translations --- components/breadcrumbs.js | 63 ++++++++--- components/case/summary.js | 18 ++- components/header.js | 20 +++- components/homepage/casesearch.js | 169 ++++++++++++++++++----------- components/homepage/dns.js | 9 +- components/homepage/loginSoon.js | 28 +++++ components/main.js | 4 +- components/myportal/searchcases.js | 2 +- i18n.json | 9 ++ locales/cy/case.json | 1 + locales/cy/common.json | 5 +- locales/cy/home.json | 10 +- locales/en/case.json | 1 + locales/en/common.json | 5 +- locales/en/home.json | 12 +- pages/case.js | 4 +- pages/myportal/case.js | 85 +++++++++++++++ pages/myportal/searchresults.js | 129 ++++++++++++++++++++++ 18 files changed, 478 insertions(+), 96 deletions(-) create mode 100644 components/homepage/loginSoon.js create mode 100644 pages/myportal/case.js create mode 100644 pages/myportal/searchresults.js diff --git a/components/breadcrumbs.js b/components/breadcrumbs.js index 3dd9a0b3..7b51b60a 100644 --- a/components/breadcrumbs.js +++ b/components/breadcrumbs.js @@ -69,17 +69,26 @@ const Breadcrumbs = (props) => { ) : ( "" )} - {router.pathname == "/searchresults" ? ( + {router.pathname == "/myportal/searchresults" ? ( <>
  • - My Portal + {t("common:breadcrumb-my-portal")}
  • - Search results + {t("common:breadcrumb-search-results")} +
  • + + ) : ( + "" + )} + {router.pathname == "/searchresults" ? ( + <> +
  • + {t("common:breadcrumb-search-results")}
  • ) : ( @@ -129,7 +138,7 @@ const Breadcrumbs = (props) => {
  • - My Portal + {t("common:breadcrumb-my-portal")}
  • @@ -145,7 +154,7 @@ const Breadcrumbs = (props) => {
  • - My Portal + {t("common:breadcrumb-my-portal")}
  • @@ -156,12 +165,12 @@ const Breadcrumbs = (props) => { ) : ( "" )} - {router.pathname == "/case" ? ( + {router.pathname == "/myportal/case" ? ( <>
  • - My Portal + {t("common:breadcrumb-my-portal")}
  • @@ -173,7 +182,7 @@ const Breadcrumbs = (props) => {
  • - Case Reference:{" "} + {t("common:breadcrumb-case-reference")}:{" "} { props.props.currentView.caseReference .currentReference @@ -183,12 +192,40 @@ const Breadcrumbs = (props) => { ) : ( "" )} - {router.pathname == "/representation" ? ( + {router.pathname == "/case" ? ( + <> +
  • + + {t("common:breadcrumb-search-results")} + + +
  • +
  • + {t("common:breadcrumb-case-reference")}:{" "} + { + props.props.currentView.caseReference + .currentReference + } +
  • + + ) : ( + "" + )} + {router.pathname == "/myportal/representation" ? ( <>
  • - My Portal + {t("common:breadcrumb-my-portal")}
  • @@ -208,7 +245,7 @@ const Breadcrumbs = (props) => {
  • - My Portal + {t("common:breadcrumb-my-portal")}
  • @@ -233,7 +270,7 @@ const Breadcrumbs = (props) => {
  • - My Portal + {t("common:breadcrumb-my-portal")}
  • @@ -316,7 +353,7 @@ const Breadcrumbs = (props) => {
  • - My Portal + {t("common:breadcrumb-my-portal")}
  • diff --git a/components/case/summary.js b/components/case/summary.js index fd4c1325..412b2780 100644 --- a/components/case/summary.js +++ b/components/case/summary.js @@ -110,11 +110,19 @@ const CaseSummary = (props) => {
    - - - {t("case:summary-make-representation-label")} - - + {router.pathname != "/case" ? ( + <> + + + {t( + "case:summary-make-representation-label" + )} + + + + ) : ( + "" + )} router.back()} className="govuk-button govuk-button--secondary" diff --git a/components/header.js b/components/header.js index d45e79c5..032ac1b1 100644 --- a/components/header.js +++ b/components/header.js @@ -18,6 +18,8 @@ const Header = (props) => { "/dns/contact-us", "/dns/applications", "/dns/application-view", + "/searchresults", + "/case", ]; const hasContactLink = [ "/dns", @@ -150,7 +152,15 @@ const Header = (props) => { (value) => + value || typeof value === "number" ? undefined : errorMsg; + +export const minLength = (errorMsg) => (value) => + value && value.length < 4 + ? errorMsg //`Must be ${min} characters or more` + : undefined; + +const RenderTextfield = ({ + id, + className, + rows, + datafieldname, + name, + label, + input, + hint1, + hint2, + meta: { touched, error }, + ...custom +}) => { + return ( + <> +
    +
    + {hint1} +
    + + + {hint2} + {" "} + CAS-00009-W8N6W4 + +
    + + {touched && error && ( + + Error:{" "} + {error} + + )} + +
    + + ); +}; + +let CaseSearch = (props) => { let { t } = useTranslation(); + const { handleSubmit, pristine, reset, submitting } = props; const router = useRouter(); const { locale } = router; - const [query, setQuery] = useState(""); - const [validationError, setValidationError] = useState(""); - const handleParam = (setValue) => (e) => setValue(e.target.value); - const basicSearch = (event) => { - event.preventDefault(); - - if (query == "" || query == null) { - setValidationError(true); - } else { - setValidationError(false); - console.log(query); - // /searchresults - - router.push({ - pathname: "/searchresults", - query: { q: query }, - }); - } + const onHandleSubmit = (values) => { + router.replace({ + pathname: "/searchresults", + query: { q: values.basicSearch }, + shallow: true, + }); }; return (
    -
    +

    {t("home:casesearch-card-title")}

    -
    -
    - {t("home:casesearch-card-search-hint")}: -
    - - {" "} - - {t( - "home:casesearch-card-search-example-label" - )} - : - {" "} - CAS-00009-W8N6W4 - -
    - {validationError && ( - - - Error: - {" "} - Case reference is required - - )} - -
    + + +
    ); -} +}; + +const mapStateToProps = (state) => { + return { + ...state, + }; +}; + +const mapDispatchToProps = (dispatch) => { + return {}; +}; + +export default connect( + mapStateToProps, + mapDispatchToProps +)( + reduxForm({ + form: "basicSearchForm", + destroyOnUnmount: false, + })(CaseSearch) +); diff --git a/components/homepage/dns.js b/components/homepage/dns.js index 3247c710..6d74dbfd 100644 --- a/components/homepage/dns.js +++ b/components/homepage/dns.js @@ -9,19 +9,16 @@ export default function Dns() {

    - Developments of National Significance + {t("home:dns-card-title")}

    - 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. + {t("home:dns-card-paragraph")}

    diff --git a/components/homepage/loginSoon.js b/components/homepage/loginSoon.js new file mode 100644 index 00000000..4cea87e0 --- /dev/null +++ b/components/homepage/loginSoon.js @@ -0,0 +1,28 @@ +import Link from "next/link"; +import { useRouter } from "next/router"; +import useTranslation from "next-translate/useTranslation"; + +export default function LoginSoon() { + let { t } = useTranslation(); + + const router = useRouter(); + const { locale } = router; + return ( +
    +
    +

    + {t("home:login-card-title-temp")} +

    + +
    +

    + {t("home:login-comingsoon-temp-1")} +

    +

    + {t("home:login-comingsoon-temp-2")} +

    +
    +
    +
    + ); +} diff --git a/components/main.js b/components/main.js index 03cda53b..bf5b2b85 100644 --- a/components/main.js +++ b/components/main.js @@ -3,6 +3,7 @@ import { useRouter } from "next/router"; import { useContext } from "react"; import useTranslation from "next-translate/useTranslation"; import Login from "./homepage/login"; +import LoginSoon from "./homepage/loginSoon"; import CaseSearch from "./homepage/casesearch"; import Inspectorate from "./homepage/inspectorate"; import CaseComment from "./homepage/casecomment"; @@ -23,10 +24,11 @@ export default function Home({ children, pages }) {
    - + + {/* */}
    diff --git a/components/myportal/searchcases.js b/components/myportal/searchcases.js index 955dbafe..17e53c36 100644 --- a/components/myportal/searchcases.js +++ b/components/myportal/searchcases.js @@ -23,7 +23,7 @@ export default function SearchCases() { // /searchresults router.push({ - pathname: "/searchresults", + pathname: "/myportal/searchresults", query: { q: query }, }); } diff --git a/i18n.json b/i18n.json index c8b814d2..515366f7 100644 --- a/i18n.json +++ b/i18n.json @@ -17,6 +17,15 @@ "/myportal/viewall": [ "search" ], + "/myportal/advancedsearch": [ + "search" + ], + "/myportal/searchresults": [ + "search" + ], + "/myportal/case": [ + "case" + ], "/advancedsearch": [ "search" ], diff --git a/locales/cy/case.json b/locales/cy/case.json index 3797ca04..d68e1689 100644 --- a/locales/cy/case.json +++ b/locales/cy/case.json @@ -1,4 +1,5 @@ { + "page-title": "Cyfeirnod", "case-card-title": "Reference: APP/B1415/W/20/3271702", "summary-applicant-label": "Apelydd/Ymgeisydd", "summary-agent-label": "Asiant", diff --git a/locales/cy/common.json b/locales/cy/common.json index 80655000..0ea810b4 100644 --- a/locales/cy/common.json +++ b/locales/cy/common.json @@ -16,5 +16,8 @@ "signout-label": "Cofrestrwch allan", "back-to-top-link": "Nôl i dop y dudalen", "social-bar-share-link": "Rhannu’r dudalen hon", - "social-bar-share-via-link": "Rhannu’r dudalen hon ar" + "social-bar-share-via-link": "Rhannu’r dudalen hon ar", + "breadcrumb-search-results" : "Canlyniadau chwilio", + "breadcrumb-my-portal": "Fy mhorth", + "breadcrumb-case-reference": "Cyfeirnod Achos" } \ No newline at end of file diff --git a/locales/cy/home.json b/locales/cy/home.json index 90d207e4..82425f4e 100644 --- a/locales/cy/home.json +++ b/locales/cy/home.json @@ -1,4 +1,7 @@ { + "login-card-title-temp": "W-Log in or Register soon", + "login-comingsoon-temp-1": "W-First paragraph says something about being able to create accounts", + "login-comingsoon-temp-2": "W-Second paragraph content to go here to explaine something else.", "login-card-title": "Mewngofnodi neu cofrestru", "login-card-id-label": "Dynodydd Defnyddiwr (ID) Porth y Llywodraeth", "login-card-id-hint": "Gallai hyn fod hyd at 12 o gymeriadau.", @@ -13,9 +16,14 @@ "casesearch-card-search-example-label": "Enghraifft", "casesearch-card-button": "Cyflwyno Chwiliad", "casesearch-card-advanced-link": "Fel arall, gallwch chwilio gan ddefnyddio ein meini prawf eraill gyda'n chwiliad uwch", + "casesearch-search-validation-required": "Angenrheidiol", + "casesearch-search-validation-minlength": "Rhaid bod yn 4 nod neu fwy", "casescomment-card-title": "Gwneud sylw ar achos", "casescomment-card-paragraph-one": "Chwiliwch am eich achos a chliciwch y botwm 'Gwneud Sylw'. Y ffordd orau o roi sylwadau ar achos cyfredol yw trwy gofrestru gyda ni'n gyntaf gan fod hynny'n gwneud olrhain achosion a chyflwyno sylwadau yn haws.", "casescomment-card-paragraph-two": "Yn achos apeliadau deiliaid tai ac apeliadau masnachol, nid yw partïon â buddiant yn gallu gwneud sylwadau yn y cam apelio. Caiff unrhyw sylwadau a wneir yn y cam ymgeisio eu darparu gan yr awdurdod cynllunio lleol ac fe'u hystyrir gan yr Arolygydd.", "inspectorate-card-visit-label" : "Ymweld Yr Arolygiaeth Gynllunio", - "inspectorate-card-visit-link": "Hafan" + "inspectorate-card-visit-link": "Hafan", + "dns-card-title":"Datblygiadau o Arwyddocâd Cenedlaethol", + "dns-card-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.", + "dns-card-button":"Gweld pob cais" } \ No newline at end of file diff --git a/locales/en/case.json b/locales/en/case.json index 93cccc5e..c9f6196c 100644 --- a/locales/en/case.json +++ b/locales/en/case.json @@ -1,4 +1,5 @@ { + "page-title": "Reference", "case-card-title": "Reference: APP/B1415/W/20/3271702", "summary-applicant-label": "Appellant/Applicant", "summary-agent-label": "Agent", diff --git a/locales/en/common.json b/locales/en/common.json index 26798d7f..0988a675 100644 --- a/locales/en/common.json +++ b/locales/en/common.json @@ -16,5 +16,8 @@ "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" + "social-bar-share-via-link": "Share this page via", + "breadcrumb-search-results" : "Search results", + "breadcrumb-my-portal": "My portal", + "breadcrumb-case-reference": "Case Reference" } \ No newline at end of file diff --git a/locales/en/home.json b/locales/en/home.json index 70f60604..fad55c88 100644 --- a/locales/en/home.json +++ b/locales/en/home.json @@ -1,4 +1,7 @@ { + "login-card-title-temp": "Log in or Register soon", + "login-comingsoon-temp-1": "First paragraph says something about being able to create accounts", + "login-comingsoon-temp-2": "Second paragraph content to go here to explaine something else.", "login-card-title": "Log in or Register", "login-card-id-label": "Government Gateway user ID", "login-card-id-hint": "This could be up to 12 characters.", @@ -9,13 +12,18 @@ "login-card-forgotten-label": "Forgotten your password or username?", "login-card-forgotten-link": "Click here", "casesearch-card-title": "Search for a case", - "casesearch-card-search-hint": "Search by entering the 7 digit case reference number:", + "casesearch-card-search-hint": "Search by entering the 7 digit case reference number", "casesearch-card-search-example-label": "Example", "casesearch-card-button": "Submit Search", "casesearch-card-advanced-link": "Advanced Search", + "casesearch-search-validation-required": "Required", + "casesearch-search-validation-minlength": "Must be 4 characters or more", "casescomment-card-title": "Comment on a case", "casescomment-card-paragraph-one": "Simply search for your case and click on the 'Make Representation' button. The best way to comment on an existing case is to register with us first as that makes it easier to track cases and submit comments.", "casescomment-card-paragraph-two": "For Householder and Commercial appeals, interested parties are unable to make representations at appeal stage. Any representations made at application stage will be provided by the local planning authority and considered by the Inspector.", "inspectorate-card-visit-label" : "Visit the Planning Inspectorate", - "inspectorate-card-visit-link": "Home" + "inspectorate-card-visit-link": "Home", + "dns-card-title":"Developments of National Significance", + "dns-card-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.", + "dns-card-button":"View all applications" } \ No newline at end of file diff --git a/pages/case.js b/pages/case.js index 4b651b81..a9377542 100644 --- a/pages/case.js +++ b/pages/case.js @@ -27,7 +27,9 @@ const Home = (props) => {
    - {t("case:page-title")} - {t("common:service-name")} + {t("case:page-title")}:{" "} + {props.currentView.caseReference.currentReference}{" "} + {t("common:service-name")}
    diff --git a/pages/myportal/case.js b/pages/myportal/case.js new file mode 100644 index 00000000..a54b69bb --- /dev/null +++ b/pages/myportal/case.js @@ -0,0 +1,85 @@ +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/case"; + +const Home = (props) => { + const { footerLinks, pages } = props; + let { t, lang } = useTranslation(); + + const router = useRouter(); + const { locale } = router; + const { appealtypes } = router.query; + + return ( +
    + + + {t("case:page-title")} - {t("common:service-name")} + + +
    + +
    +
    + + + +
    +
    +
    +
    + ); +}; + +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); diff --git a/pages/myportal/searchresults.js b/pages/myportal/searchresults.js new file mode 100644 index 00000000..5b84c276 --- /dev/null +++ b/pages/myportal/searchresults.js @@ -0,0 +1,129 @@ +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 jsonpath from "jsonpath"; +import data from "../../data/collections.json"; + +import { setSearch, getSearchObj } from "../../store/search/action"; +import { + setSearchResults, + setSearchDetails, + getSearchResultsObj, +} from "../../store/searchOutput/action"; +import { getBasicSearch, getBasicSearchDetails } from "../../actions"; + +const Home = (props) => { + const { footerLinks, pages } = props; + let { t, lang } = useTranslation(); + + const router = useRouter(); + const { locale } = router; + const { appealtypes } = router.query; + + return ( +
    + + + {t("search:page-title")} - {t("common:service-name")} + + +
    + +
    +
    + + + +
    +
    +
    + ); +}; + +export const getServerSideProps = wrapper.getServerSideProps( + (store) => + async ({ query, req, res }) => { + console.log("query-", query); + // const [searchResultsObj, searchDetailsObj] = await Promise.all( + // await getBasicSearch(query.q), + // await getBasicSearchDetails(query.d) + // ); + + const searchResultsObj = await getBasicSearch(query.q); + const searchDetailsObj = await getSearchDetails(searchResultsObj); + // console.log(searchDetailsObj); + store.dispatch(setSearchResults(searchResultsObj)); + store.dispatch(setSearchDetails(searchDetailsObj)); + store.dispatch(setSearch(query.q)); + } +); + +const getFormCollection = (formtype) => { + const collectionName = jsonpath.query( + data, + "$..[?(@.LogicalName=='" + formtype + "')].LogicalCollectionName" + ); + //console.log(collectionName[0]); + return collectionName[0]; +}; + +const getSearchDetails = (searchResultsObj) => { + //console.log(searchResultsObj); + + let detailsArr = []; + searchResultsObj = searchResultsObj.value; + const detailsObj = searchResultsObj.map((searchDetail, index) => { + if (searchDetail.pinswg_appealcasetype == null) { + console.log(searchDetail.ticketnumber); + } else { + detailsArr.push( + getBasicSearchDetails( + getFormCollection( + "pinswg_" + + searchDetail[ + "pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" + ] + .replace(/[\s\-\+\(\)\,\&\.]/g, "") + .toLowerCase() + ), + searchDetail.ticketnumber + ) + ); + } + }); + //console.log(detailsArr); + return Promise.all(detailsArr); +}; + +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)(Home);