Merged PR 433: Test Deployment using Azure relays

Related work items: #5860
This commit is contained in:
Robert Bond
2021-09-14 13:39:01 +00:00
30 changed files with 1388 additions and 464 deletions
+256 -128
View File
@@ -1,5 +1,7 @@
import axios from "axios";
import https from "https";
import CryptoJS from "crypto-js";
//import {XMLHttpRequest} from 'xmlhttprequest';
process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0;
@@ -13,9 +15,62 @@ if (process.browser) {
BASE_URL = process.env.API_ROOT || `http://localhost:${port}`;
}
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 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 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;
};
const accessToken =
"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IlVXelVaa0U3OEx0NVBGRkJ0LV9seVdoMjdjTSIsImtpZCI6IlVXelVaa0U3OEx0NVBGRkJ0LV9seVdoMjdjTSJ9.eyJhdWQiOiJodHRwczovL2RldmNybTIwMTYubGxjZHQuZ292LndhbGVzLyIsImlzcyI6Imh0dHA6Ly9mcy50ZXN0Lmdvdi53YWxlcy9hZGZzL3NlcnZpY2VzL3RydXN0IiwiaWF0IjoxNjMxMjU4ODAzLCJuYmYiOjE2MzEyNTg4MDMsImV4cCI6MTYzMTI4NzYwMywidXBuIjpbIlJvYmVydC5Cb25kQHRlc3QuZ292LndhbGVzIiwicm9iZXJ0LmJvbmRAdGVzdC5nb3Yud2FsZXMiXSwicHJpbWFyeXNpZCI6IlMtMS01LTIxLTE4MDA4NDIwNzYtMjQ1NTYwNjU5LTQyMTU3NzU0NjktMTY2MjgiLCJ1bmlxdWVfbmFtZSI6IlhNXFxCb25kUiIsImFwcHR5cGUiOiJQdWJsaWMiLCJhcHBpZCI6IjQyN2ZhNzljLWI1ZmMtNDJhZC04M2Q0LTQxMGIwMzk0OGFiNiIsImF1dGhtZXRob2QiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvYXV0aGVudGljYXRpb25tZXRob2Qvd2luZG93cyIsImF1dGhfdGltZSI6IjIwMjEtMDktMTBUMDc6MjY6MzQuMjI0WiIsInZlciI6IjEuMCJ9.XFymIQJVavP-7-8V7LdoYDD4836Z-aSxveMQDD1P3y_9M3Tiy3zINiLxCbSr8JaymFOuLOzWcnNXwh7HHZKY6gDC6tD1ALVKCBXmgTDaoR9j7XAOxSUaRl6ArIecd7o6UcqsHAvfpb5zu-ZIy0KxV9PFRxY4JHF_tfLAeAMnqIBq-yDrNBOlbg4Kd9VuAbAK5lNWp-BiMIzMqZUIrmD9HjwE17SWaEnApCNqTcGZ4h2EqDBWgqKae7B1AzoV_7mfp7CscLUBLGdbM-XsXw3t_AVc0xDHoOMuWfsoMfioJONoMsPqTNUY7VQev1pMrFDEFN-jqP4yqSdNlev6H47SCg";
const SASToken = getSASToken();
const crmHeaders = {
withCredentials: true,
headers: {
@@ -23,62 +78,118 @@ const crmHeaders = {
"OData-MaxVersion": "4.0",
"OData-Version": "4.0",
"Accept": "application/json",
"Prefer": 'odata.include-annotations="*"',
agent,
"Prefer": 'odata.include-annotations="*",return=representation',
"Authorization": "Bearer " + accessToken,
},
auth: {
username: "xm\bondr",
password: "!Sky9fish1972",
};
const crmHeadersReturn = {
headers: {
"OData-MaxVersion": "4.0",
"OData-Version": "4.0",
"Accept": "application/json",
"Prefer": "return=representation",
"Content-Type": "application/json",
"Authorization": "Bearer " + accessToken,
},
};
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,
},
};
export const getBasicSearch = (searchString) => {
console.log("got to axios", searchString);
console.log("api_root: ", BASE_URL);
return (
axios
//.get("https://devcrm2016.llcdt.gov.wales/DVPINS/api/data/v8.2/incidents?$select=_accountid_value,_customerid_value,pinswg_appealcasetype,statuscode,ticketnumber,title&$filter=contains(title, '" + searchString + "')&$count=true", crmHeaders)
//.get("https://jsonplaceholder.typicode.com/todos/1",{proxy:{protocol: 'http',host:'lon3.sme.zscloud.net',port: 80}})
.get(BASE_URL + "/api/searchresults2", {
httpsAgent: new https.Agent({ rejectUnauthorized: false }),
})
.then((res) => res.data)
.catch((error) => {
console.log("thiserror", error);
})
);
return axios
.get(
WEBAPI_URL +
"incidents?$select=_accountid_value,_customerid_value,pinswg_appealcasetype,statuscode,ticketnumber,title, _primarycontactid_value&$expand=primarycontactid($select=fullname)&$filter=contains(title, '" +
searchString +
"') and pinswg_appealcasetype ne null &$count=true",
azureHeaders
)
.then((res) => res.data)
.catch((error) => {
console.log("thiserror", error);
});
};
export const getBasicSearchDetails = (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);
});
};
export const getFormData = (whichForm) => {
console.log("got to axios", whichForm);
console.log("api_root: ", BASE_URL);
return (
axios
//.get("api/appealforms/pinswg_dns", {
//.get("api/appealforms/pinswg_planningobligationappeals106", {
//.get("api/appealforms/pinswg_planningconditionss73s79", {
//.get("api/appealforms/pinswg_row", {
//.get("api/appealforms/pinswg_transportandworkact", {
//.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 }),
})
.then((res) => res.data)
.catch((error) => {
console.log("thiserror", error);
})
);
return axios
.get(
WEBAPI_URL +
"systemforms?$select=formid,name,formxml,type,objecttypecode&$filter=(objecttypecode%20eq%20%27pinswg_" +
whichForm +
"%27and%20type%20eq%202)&$count=true",
azureHeaders
)
.then((res) => res.data)
.catch((error) => {
console.log("thiserror", error);
});
};
export const getMandatoryFields = (whichForm) => {
return axios
.get(
WEBAPI_URL +
"EntityDefinitions(LogicalName='pinswg_" +
whichForm +
"')/Attributes?$count=true&$select=LogicalName,RequiredLevel",
azureHeaders
)
.then((res) => res.data)
.catch((error) => {
console.log("thiserror", error);
});
};
export const getPickLists = (whichForm) => {
return axios
.get(
WEBAPI_URL +
"EntityDefinitions(LogicalName='pinswg_" +
whichForm +
"')/Attributes/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?$select=LogicalName&$expand=OptionSet,GlobalOptionSet&$count=true",
azureHeaders
)
.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 +
"stringmaps?$filter=attributename%20eq%20%27pinswg_appealcasetype%27&$count=true&$select=value,stringmapid,organizationid,attributevalue",
azureHeaders
)
.then((res) => res.data)
.catch((error) => {
console.log("thiserror", error);
@@ -190,12 +301,7 @@ export const getAppealTypeDetail = (caseReference, appealcasetype) => {
export const getLPA = () => {
console.log("api_root: ", BASE_URL);
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 }) }
)
.get(WEBAPI_URL + "accounts?$count=true&$select=name", azureHeaders)
.then((res) => res.data)
.catch((error) => {
console.log("thi serror", error);
@@ -217,61 +323,66 @@ export const getPersonalAccount = () => {
});
};
function makeid(length) {
var result = "";
var characters =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
var charactersLength = characters.length;
for (var i = 0; i < length; i++) {
result += characters.charAt(
Math.floor(Math.random() * charactersLength)
);
}
return result;
}
export const createCase = (appealTypeId) => {
appealTypeId = parseInt(appealTypeId);
var data = JSON.stringify({
"title": "insertion test case",
"customerid_contact@odata.bind":
"/contacts(f8b454ed-eded-eb11-aac7-00224800be9c)",
"pinswg_appealcasetype": appealTypeId,
});
export const createCase = (lpaType, appealType) => {
console.log();
const lastPart = makeid(6);
const middlePart = Math.floor(100000 + Math.random() * 900000);
return "CAS-" + middlePart + "-" + lastPart.toUpperCase();
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,
},
data: data,
};
console.log(config);
return axios(config)
.then((res) => {
// console.log("posted ", res.data);
return res.data;
})
.catch((error) => {
console.log("this serror", error);
});
};
// var req = new XMLHttpRequest();
// req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v8.2/incidents?$select=_accountid_value,_customerid_value,pinswg_appealcasetype,statuscode,ticketnumber,title&$filter=contains(title, '000')&$count=true", true);
// req.setRequestHeader("OData-MaxVersion", "4.0");
// req.setRequestHeader("OData-Version", "4.0");
// req.setRequestHeader("Accept", "application/json");
// req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
// req.setRequestHeader("Prefer", "odata.include-annotations=\"*\"");
// req.onreadystatechange = function() {
// if (this.readyState === 4) {
// req.onreadystatechange = null;
// if (this.status === 200) {
// var results = JSON.parse(this.response);
// var recordCount = results["@odata.count"];
// for (var i = 0; i < results.value.length; i++) {
// var _accountid_value = results.value[i]["_accountid_value"];
// var _accountid_value_formatted = results.value[i]["_accountid_value@OData.Community.Display.V1.FormattedValue"];
// var _accountid_value_lookuplogicalname = results.value[i]["_accountid_value@Microsoft.Dynamics.CRM.lookuplogicalname"];
// var _customerid_value = results.value[i]["_customerid_value"];
// var _customerid_value_formatted = results.value[i]["_customerid_value@OData.Community.Display.V1.FormattedValue"];
// var _customerid_value_lookuplogicalname = results.value[i]["_customerid_value@Microsoft.Dynamics.CRM.lookuplogicalname"];
// var pinswg_appealcasetype = results.value[i]["pinswg_appealcasetype"];
// var pinswg_appealcasetype_formatted = results.value[i]["pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"];
// var statuscode = results.value[i]["statuscode"];
// var ticketnumber = results.value[i]["ticketnumber"];
// var title = results.value[i]["title"];
// }
// } else {
// Xrm.Utility.alertDialog(this.statusText);
// }
// }
// };
// req.send();
export const updateCase = (incidentId, updateBody, updateFormCollection) => {
var data = JSON.stringify(updateBody);
var config = {
method: "patch",
//url: WEBAPI_URL + updateFormCollection + "(" + incidentId + ")",
url: "/api/proxy/" + updateFormCollection + "(" + incidentId + ")",
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);
return axios(config)
.then((res) => {
console.log("patched ", res.data);
return res.data;
})
.catch((error) => {
console.log("thi serror", error);
});
};
// //jquery version to get case number from an lpa and an appeal type
// var entity = {};
@@ -305,45 +416,62 @@ export const createCase = (lpaType, appealType) => {
// });
export const getMyCases = () => {
return axios
.get(BASE_URL + "/api/lookups/myCases", {
httpsAgent: new https.Agent({ rejectUnauthorized: false }),
})
.then((res) => res.data)
.catch((error) => {
console.log("thi serror", error);
});
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 getMyRepresentations = () => {
return axios
.get(BASE_URL + "/api/lookups/myRepresentations", {
httpsAgent: new https.Agent({ rejectUnauthorized: false }),
})
.then((res) => res.data)
.catch((error) => {
console.log("thi serror", error);
});
return (
axios
// .get(BASE_URL + "/api/lookups/myRepresentations", {
// 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 getWatchedCases = () => {
return axios
return (
axios
.get(BASE_URL + "/api/lookups/watchedCases", {
httpsAgent: new https.Agent({ rejectUnauthorized: false }),
})
.then((res) => res.data)
.catch((error) => {
w;
console.log("thi serror", error);
});
// .get(BASE_URL + "/api/lookups/watchedCases", {
// 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("this serror", error);
})
);
};
export const getAwaitingSubmission = () => {
return axios
.get(BASE_URL + "/api/lookups/awaitingSubmission", {
httpsAgent: new https.Agent({ rejectUnauthorized: false }),
})
+1
View File
@@ -27,6 +27,7 @@ const CaseSummary = (props) => {
caseReference={props.caseReference}
currentType={props.currentType}
searchResultsObj={props.searchResultsObj}
searchDetailsObj={props.searchDetailsObj}
searchString={props.searchString}
/>
<Documents />
+149 -41
View File
@@ -16,15 +16,17 @@ const CaseSummary = (props) => {
watchedCases,
awaitingSubmission,
searchResultsObj,
searchDetailsObj,
currentType,
} = props;
let setCaseQueryObj = props[currentType];
var casesObj = {};
currentType == "searchResultsObj"
? (casesObj = jsonpath.query(
setCaseQueryObj,
searchResultsObj,
'$..[?(@.title=="' + caseReference + '")]'
))
: (casesObj = jsonpath.query(
@@ -34,6 +36,14 @@ const CaseSummary = (props) => {
casesObj = Object.assign({}, ...casesObj);
var detailsObj = {};
detailsObj = jsonpath.query(
searchDetailsObj,
'$..[?(@.pinswg_name=="' + caseReference + '")]'
);
detailsObj = detailsObj[0];
return (
<div>
<div className="govuk-grid-row">
@@ -41,7 +51,7 @@ const CaseSummary = (props) => {
<h1 className="govuk-heading-xl govuk-!-margin-bottom-7">
Reference:{" "}
{currentType == "searchResultsObj"
? casesObj.title
? detailsObj.pinswg_name
: casesObj.reference}
</h1>
@@ -51,7 +61,11 @@ const CaseSummary = (props) => {
{t("case:summary-applicant-label")}
</dt>
<dd className="govuk-summary-list__value">
{casesObj.appellantApplicant || ""}
{
detailsObj[
"_pinswg_appellant_value@OData.Community.Display.V1.FormattedValue"
]
}
</dd>
</div>
<div className="govuk-summary-list__row">
@@ -59,7 +73,9 @@ const CaseSummary = (props) => {
{t("case:summary-agent-label")}
</dt>
<dd className="govuk-summary-list__value">
Mr A Agent
{_.has(detailsObj, "pinswg_agentcontactname")
? detailsObj.pinswg_agentcontactname
: ""}
</dd>
</div>
<div className="govuk-summary-list__row">
@@ -67,12 +83,25 @@ const CaseSummary = (props) => {
{t("case:summary-site-address-label")}
</dt>
<dd className="govuk-summary-list__value">
{casesObj.address1 || ""}
{_.has(detailsObj, "pinswg_siteaddressline1")
? detailsObj.pinswg_siteaddressline1
: ""}
<br />
{casesObj.town || ""}
{_.has(detailsObj, "pinswg_siteaddressline1")
? detailsObj.pinswg_siteaddressline2
: ""}
<br />
{casesObj.postcode || ""}
{_.has(detailsObj, "pinswg_siteaddressline1")
? detailsObj.pinswg_siteaddresstown
: ""}
<br />
{_.has(detailsObj, "pinswg_siteaddressline1")
? detailsObj.pinswg_siteaddresscounty
: ""}
<br />
{_.has(detailsObj, "pinswg_siteaddressline1")
? detailsObj.pinswg_siteaddresspostcode
: ""}
</dd>
</div>
</dl>
@@ -120,7 +149,13 @@ const CaseSummary = (props) => {
{t("case:summary-lpa-label")}
</dt>
<dd className="govuk-summary-list__value">
{casesObj.lpaname || ""}
{_.has(detailsObj, [
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue",
])
? detailsObj[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
]
: ""}
</dd>
</div>
<div className="govuk-summary-list__row">
@@ -130,8 +165,12 @@ const CaseSummary = (props) => {
)}
</dt>
<dd className="govuk-summary-list__value">
{casesObj.caseDetails.caseSummary ||
""}
{_.has(
detailsObj,
"pinswg_casedescription"
)
? detailsObj.pinswg_casedescription
: ""}
</dd>
</div>
<div className="govuk-summary-list__row">
@@ -142,8 +181,14 @@ const CaseSummary = (props) => {
</dt>
<dd className="govuk-summary-list__value">
{" "}
{casesObj.caseDetails.caseOfficer ||
""}
{/* {casesObj.caseDetails.caseOfficer ||
""} */}
{_.has(
detailsObj,
"pinswg_casedescription"
)
? detailsObj.pinswg_casedescription
: ""}
</dd>
</div>
<div className="govuk-summary-list__row">
@@ -151,8 +196,13 @@ const CaseSummary = (props) => {
{t("case:summary-procedure-label")}
</dt>
<dd className="govuk-summary-list__value">
{casesObj.caseDetails.procedure ||
""}
{_.has(detailsObj, [
"pinswg_procedure@OData.Community.Display.V1.FormattedValue",
])
? detailsObj[
"pinswg_procedure@OData.Community.Display.V1.FormattedValue"
]
: ""}
</dd>
</div>
<div className="govuk-summary-list__row">
@@ -170,15 +220,21 @@ const CaseSummary = (props) => {
{t("case:summary-decision-label")}
</dt>
<dd className="govuk-summary-list__value">
{casesObj.caseDetails.decision ||
""}
{_.has(detailsObj, [
"pinswg_decision@OData.Community.Display.V1.FormattedValue",
])
? detailsObj[
"pinswg_decision@OData.Community.Display.V1.FormattedValue"
]
: ""}
<br />
<Link href="/">
{/* <Link href="/">
<a>
{casesObj.caseDetails
.outcome_document || ""}
</a>
</Link>
</Link> */}
</dd>
</div>
<div className="govuk-summary-list__row">
@@ -188,8 +244,13 @@ const CaseSummary = (props) => {
)}
</dt>
<dd className="govuk-summary-list__value">
{casesObj.caseDetails
.caseLinkStatus || ""}
{_.has(detailsObj, [
"pinswg_linkedstatus@OData.Community.Display.V1.FormattedValue",
])
? detailsObj[
"pinswg_linkedstatus@OData.Community.Display.V1.FormattedValue"
]
: "Not linked"}
</dd>
</div>
<div className="govuk-summary-list__row">
@@ -199,8 +260,8 @@ const CaseSummary = (props) => {
)}
</dt>
<dd className="govuk-summary-list__value">
{casesObj.caseDetails.linkedCases ||
""}
{/* {casesObj.caseDetails.linkedCases ||
""} */}
</dd>
</div>
</dl>
@@ -219,8 +280,14 @@ const CaseSummary = (props) => {
{t("case:summary-start-date-label")}
</dt>
<dd className="govuk-summary-list__value">
{casesObj.caseDates.start_date ||
"N/A"}
{_.has(
detailsObj,
"pinswg_startdate@OData.Community.Display.V1.FormattedValue"
)
? detailsObj[
"pinswg_startdate@OData.Community.Display.V1.FormattedValue"
]
: "N/A"}
</dd>
</div>
@@ -231,8 +298,14 @@ const CaseSummary = (props) => {
)}
</dt>
<dd className="govuk-summary-list__value">
{casesObj.caseDates
.questionnaireDue || "N/A"}
{_.has(
detailsObj,
"pinswg_questionnaireduedate@OData.Community.Display.V1.FormattedValue"
)
? detailsObj[
"pinswg_questionnaireduedate@OData.Community.Display.V1.FormattedValue"
]
: "N/A"}
</dd>
</div>
@@ -243,8 +316,14 @@ const CaseSummary = (props) => {
)}
</dt>
<dd className="govuk-summary-list__value">
{casesObj.caseDates.statementsDue ||
"N/A"}
{_.has(
detailsObj,
"pinswg_statementduedate@OData.Community.Display.V1.FormattedValue"
)
? detailsObj[
"pinswg_statementduedate@OData.Community.Display.V1.FormattedValue"
]
: "N/A"}
</dd>
</div>
@@ -255,9 +334,14 @@ const CaseSummary = (props) => {
)}
</dt>
<dd className="govuk-summary-list__value">
{casesObj.caseDates
.interestedPartyCommentsdue ||
"N/A"}
{_.has(
detailsObj,
"pinswg_otherpartiesstatement@OData.Community.Display.V1.FormattedValue"
)
? detailsObj[
"pinswg_otherpartiesstatement@OData.Community.Display.V1.FormattedValue"
]
: "N/A"}
</dd>
</div>
@@ -268,9 +352,14 @@ const CaseSummary = (props) => {
)}
</dt>
<dd className="govuk-summary-list__value">
{casesObj.caseDates
.appellantLPAFinalCommentsdue ||
"N/A"}
{_.has(
detailsObj,
"pinswg_finalcommentsduedate@OData.Community.Display.V1.FormattedValue"
)
? detailsObj[
"pinswg_finalcommentsduedate@OData.Community.Display.V1.FormattedValue"
]
: "N/A"}
</dd>
</div>
@@ -281,8 +370,14 @@ const CaseSummary = (props) => {
)}
</dt>
<dd className="govuk-summary-list__value">
{casesObj.caseDates
.inquiryEvidenceDue || "N/A"}
{_.has(
detailsObj,
"pinswg_finalcommentsduedate@OData.Community.Display.V1.FormattedValue"
)
? detailsObj[
"pinswg_finalcommentsduedate@OData.Community.Display.V1.FormattedValue"
]
: "N/A"}
</dd>
</div>
@@ -291,8 +386,14 @@ const CaseSummary = (props) => {
{t("case:summary-event-date-label")}
</dt>
<dd className="govuk-summary-list__value">
{casesObj.caseDates.eventDate ||
"N/A"}
{_.has(
detailsObj,
"pinswg_dateeventrequested@OData.Community.Display.V1.FormattedValue"
)
? detailsObj[
"pinswg_dateeventrequested@OData.Community.Display.V1.FormattedValue"
]
: "N/A"}
</dd>
</div>
@@ -303,8 +404,14 @@ const CaseSummary = (props) => {
)}
</dt>
<dd className="govuk-summary-list__value">
{casesObj.caseDates.decisionDate ||
"N/A"}
{_.has(
detailsObj,
"pinswg_dateoflpadecision@OData.Community.Display.V1.FormattedValue"
)
? detailsObj[
"pinswg_dateoflpadecision@OData.Community.Display.V1.FormattedValue"
]
: "N/A"}
</dd>
</div>
</dl>
@@ -313,6 +420,7 @@ const CaseSummary = (props) => {
</div>
</div>
</div>
{/* <div className="govuk-grid-row">
<div className="govuk-grid-column-full">
<div className="govuk-button-group">
+47 -49
View File
@@ -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,
@@ -43,21 +44,39 @@ const RenderTextfield = ({
};
export function Textfield(props) {
const { name, label, validate } = props;
const { name, label, validate, ticketnumber } = props;
const required = (value) => (value ? undefined : "Required");
return (
<Field
name={props.name}
id={props.name}
component={RenderTextfield}
type="text"
className="govuk-input govuk-input--width-20"
//validate={[required]}
label={props.label}
errorMsg="Is required"
/>
);
if (name == "pinswg_name") {
return (
<div className="govuk-form-group">
<label className="govuk-label " htmlFor={props.name}>
{label}
</label>
<input
type="text"
name={name}
id={props.name}
component={RenderCaseID}
value={ticketnumber}
className="govuk-input govuk-input--width-20"
disabled
/>
</div>
);
} else {
return (
<Field
name={props.name}
id={props.name}
component={RenderTextfield}
type="text"
className="govuk-input govuk-input--width-20"
//validate={[required]}
label={props.label}
errorMsg="Is required"
/>
);
}
}
const RenderMultiline = ({
@@ -348,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}
/>
);
@@ -356,48 +375,24 @@ 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 (
<div className="govuk-form-group">
<label className="govuk-label govuk-body-m" htmlFor={name}>
{label}
</label>
<select className="govuk-select" id={name} name={name}>
<option value="">empty</option>
</select>
</div>
);
if (!data)
return (
<div>
<div className="govuk-form-group">{label} loading...</div>
</div>
);
//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 (
<div>
<select {...input} className="govuk-select " id={name} name={name}>
<option>Select...</option>
{Object.keys(dropdownObj).map((key, index) => {
return (
<option
key={key}
value={
dropdownObj[key].Label.LocalizedLabels[0].value
}
// value={dropdownObj[key].Label.LocalizedLabels[0].MetadataId}
>
<option key={key} value={dropdownObj[key].Value}>
{dropdownObj[key].Label.LocalizedLabels[0].Label}
</option>
);
@@ -421,6 +416,7 @@ export function PickList(props) {
name={props.name}
component={RenderPickList}
datafieldname={datafieldname}
picklistData={props.picklistData}
/>
</div>
);
@@ -438,12 +434,13 @@ export function NumericField(props) {
name={props.name}
id={props.name}
component="input"
type="text"
type="number"
className="govuk-input govuk-input--width-20"
spellCheck="false"
//aria-describedby="account-number-hint"
pattern="[0-9]*"
inputMode="numeric"
parse={Number}
/>
</div>
);
@@ -461,12 +458,13 @@ export function DecimalField(props) {
name={props.name}
id={props.name}
component="input"
type="text"
className="govuk-input govuk-input--width-10"
type="number"
className="govuk-input govuk-input--width-10"
spellCheck="false"
//aria-describedby="account-number-hint"
pattern="[0-9]*"
inputMode="numeric"
parse={Number}
/>
</div>
);
+30
View File
@@ -0,0 +1,30 @@
import Link from "next/link";
import { useState } from "react";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
export default function Dns() {
let { t } = useTranslation();
return (
<div className="card" id="casesearch-card">
<div className="card-body">
<h3 className="heading-small card-heading">
Developments of National Significance
</h3>
<div className="govuk-form-group">
<p className="govuk-body-s">
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.
</p>
</div>
<div className="govuk-form-group">
<button type="submit" className="govuk-button">
View all Applications
</button>
</div>
</div>
</div>
);
}
+27 -27
View File
@@ -2,35 +2,35 @@ import Link from "next/link";
import { useRouter } from "next/router";
import { useContext } from "react";
import useTranslation from "next-translate/useTranslation";
import Login from "./homepage/login";
import CaseSearch from "./homepage/casesearch";
import Inspectorate from "./homepage/inspectorate";
import CaseComment from "./homepage/casecomment";
import Login from "./homepage/login";
import CaseSearch from "./homepage/casesearch";
import Inspectorate from "./homepage/inspectorate";
import CaseComment from "./homepage/casecomment";
import Dns from "./homepage/dns";
export default function Home({ children, pages }) {
let { t } = useTranslation();
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
const router = useRouter();
const { locale } = router;
return (
<main
className="govuk-main-wrapper govuk-main-wrapper--auto-spacing"
id="main-content"
role="main"
>
<div className="govuk-grid-row">
<div className="govuk-grid-column-full">
<div className="flex-container grid-row govuk-body ">
<Login />
<CaseSearch/>
<CaseComment/>
<Inspectorate/>
</div>
</div>
</div>
</main>
);
return (
<main
className="govuk-main-wrapper govuk-main-wrapper--auto-spacing"
id="main-content"
role="main"
>
<div className="govuk-grid-row">
<div className="govuk-grid-column-full">
<div className="flex-container grid-row govuk-body ">
<Login />
<CaseSearch />
<CaseComment />
<Dns />
<Inspectorate />
</div>
</div>
</div>
</main>
);
}
+3 -2
View File
@@ -32,12 +32,13 @@ const TopThree = (props) => {
onClick={() => {
setCurrentReference({
"currentReference":
showTopThree.value[i].reference,
showTopThree.value[i]
.ticketnumber,
"currentType": topThreeType,
});
}}
>
{showTopThree.value[i].reference}
{showTopThree.value[i].ticketnumber}
</a>
</Link>
</div>
+7 -3
View File
@@ -34,7 +34,7 @@ const ViewAllResults = (props) => {
<span className="results-visually-hidden">
Case Reference:
</span>
{resultsArr[index].reference}
{resultsArr[index].ticketnumber}
</a>
</Link>
</dd>
@@ -51,11 +51,15 @@ const ViewAllResults = (props) => {
<span className="results-visually-hidden">
Appellant/Applicant:
</span>
{resultsArr[index].appellantApplicant}
Mr smith
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">Authority:</span>
{resultsArr[index].lpaname}
{
resultsArr[index][
"_customerid_value@OData.Community.Display.V1.FormattedValue"
]
}
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">Case Type:</span>
+54 -37
View File
@@ -2,6 +2,7 @@ import Link from "next/link";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
import xpath from "xpath";
import jsonpath from "jsonpath";
import BuildCheckField from "./buildCheckfield";
import { useSelector, shallowEqual, connect } from "react-redux";
import {
@@ -22,6 +23,7 @@ let BuildCheckRow = (props) => {
sectionCount,
onSubmit,
updateCurrentSection,
mandatoryFieldsData,
} = props;
const parser = new DOMParser();
@@ -56,44 +58,59 @@ let BuildCheckRow = (props) => {
rowXML[key].outerHTML,
"text/xml"
);
var rows = xpath.select("//label/@description", doc);
var fieldtype = xpath.select("//@classid", doc);
var datafieldname = xpath.select("//@datafieldname", doc);
if (_.isEmpty(rowXML[key].innerHTML)) {
("");
} else {
var rows = xpath.select("//label/@description", doc);
var fieldtype = xpath.select("//@classid", doc);
var datafieldname = xpath.select("//@datafieldname", doc);
const isRequiredField = jsonpath.query(
mandatoryFieldsData,
"$..value[?(@.LogicalName=='" +
datafieldname[0].value +
"')]"
);
return (
<div className="govuk-summary-list__row" key={key}>
<dt className="govuk-summary-list__key">
{rows[0].value}
</dt>
<dd className="govuk-summary-list__value">
{fieldtype[0].value ==
"{5B773807-9FB2-42db-97C3-7A91EFF8ADFF}"
? formatDate(
props.props.form["appealForm"].values[
datafieldname[0].value
]
)
: props.props.form["appealForm"].values[
datafieldname[0].value
]}
</dd>
<dd className="govuk-summary-list__actions">
<a
className="govuk-link"
href="#"
onClick={() => {
updateCurrentSection(whichSection);
}}
>
Change
<span className="govuk-visually-hidden">
{" "}
name
</span>
</a>
</dd>
</div>
);
if (isRequiredField[0].RequiredLevel.Value != "None") {
return (
<div className="govuk-summary-list__row" key={key}>
<dt className="govuk-summary-list__key">
{rows[0].value}
</dt>
<dd className="govuk-summary-list__value">
{fieldtype[0].value ==
"{5B773807-9FB2-42db-97C3-7A91EFF8ADFF}"
? formatDate(
props.props.form["appealForm"]
.values[
datafieldname[0].value
]
)
: props.props.form["appealForm"].values[
datafieldname[0].value
]}
</dd>
<dd className="govuk-summary-list__actions">
<a
className="govuk-link"
href="#"
onClick={() => {
updateCurrentSection(whichSection);
}}
>
Change
<span className="govuk-visually-hidden">
{" "}
name
</span>
</a>
</dd>
</div>
);
} else {
return null;
}
}
})}
</>
);
+12 -14
View File
@@ -28,6 +28,7 @@ let BuildCheckSection = (props) => {
handleSubmit,
formTitle,
setCurrentSection,
mandatoryFieldsData,
} = props;
const parser = new DOMParser();
@@ -56,32 +57,30 @@ let BuildCheckSection = (props) => {
return (
<div className="govuk-grid-row">
<div className="govuk-grid-column-two-thirds">
<div className="govuk-grid-column-full">
<div>
<h1 className="govuk-heading-m">
Are these answers correct?
</h1>
{Object.keys(titles).map((key) => (
<>
<h2 className="govuk-heading-m">
<dl className="govuk-summary-list ">
{Object.keys(titles).map((key) => (
<>
{/* <h2 className="govuk-heading-m">
{titles[key].value}
</h2>
</h2> */}
<dl
className="govuk-summary-list govuk-!-margin-bottom-9"
key={key}
>
<BuildCheckRow
formXML={formXML}
whichSection={parseInt(key) + 1}
sectionCount={key}
props={props}
key={key}
mandatoryFieldsData={mandatoryFieldsData}
props={props}
/>
</dl>
</>
))}
</>
))}
</dl>
<dl className="govuk-summary-list govuk-!-margin-bottom-9 at-summary-list"></dl>
</div>
<div className="govuk-button-group">
@@ -94,7 +93,6 @@ let BuildCheckSection = (props) => {
</a>
</div>
</div>
<div className="govuk-grid-column-one-third"></div>
</div>
);
};
+22 -4
View File
@@ -2,6 +2,7 @@ import Link from "next/link";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
import xpath from "xpath";
import {
Textfield,
DateField,
@@ -20,7 +21,7 @@ export default function BuildField(props) {
const router = useRouter();
const { locale } = router;
const { fieldType, label, datafieldname } = props;
const { fieldType, label, datafieldname, mandatoryFieldData } = props;
const parser = new DOMParser();
@@ -31,7 +32,15 @@ export default function BuildField(props) {
<ReadOnlyfield
name={props.datafieldname}
label={props.label}
value={props.props.props.appealType.caseReference}
value={
props.props.props.appealType.caseReference
.ticketnumber
}
props={props}
ticketnumber={
props.props.props.appealType.caseReference
.ticketnumber
}
/>
);
break;
@@ -41,6 +50,7 @@ export default function BuildField(props) {
name={props.datafieldname}
label={props.label}
datafieldname={props.datafieldname}
picklistData={props.picklistData}
/>
);
break;
@@ -52,9 +62,17 @@ export default function BuildField(props) {
/>
);
break;
case "{ 4273EDBD-AC1D-40d3-9FB2-095C621B552D}":
case "{4273EDBD-AC1D-40d3-9FB2-095C621B552D}":
return (
<Textfield name={props.datafieldname} label={props.label} />
<Textfield
name={props.datafieldname}
label={props.label}
props={props}
ticketnumber={
props.props.props.appealType.caseReference
.ticketnumber
}
/>
);
break;
case "{5B773807-9FB2-42db-97C3-7A91EFF8ADFF}":
+41 -13
View File
@@ -1,8 +1,10 @@
import Link from "next/link";
import _ from "lodash";
import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
import xpath from "xpath";
import BuildField from "./buildfield";
import jsonpath from "jsonpath";
export default function BuildRow(props) {
let { t } = useTranslation();
@@ -10,7 +12,13 @@ export default function BuildRow(props) {
const router = useRouter();
const { locale } = router;
const { rowXML, whichSection, sectionCount, onSubmit } = props;
const {
rowXML,
whichSection,
sectionCount,
onSubmit,
mandatoryFieldsData,
} = props;
const parser = new DOMParser();
@@ -21,18 +29,38 @@ export default function BuildRow(props) {
rowXML[key].outerHTML,
"text/xml"
);
var rows = xpath.select("//label/@description", doc);
var fieldtype = xpath.select("//@classid", doc);
var datafieldname = xpath.select("//@datafieldname", doc);
return (
<BuildField
fieldType={fieldtype[0].value}
label={rows[0].value}
datafieldname={datafieldname[0].value}
key={key}
props={props}
/>
);
if (_.isEmpty(rowXML[key].innerHTML)) {
("");
} else {
var rows = xpath.select("//label/@description", doc);
var fieldtype = xpath.select("//@classid", doc);
var datafieldname = xpath.select("//@datafieldname", doc);
const isRequiredField = jsonpath.query(
mandatoryFieldsData,
"$..value[?(@.LogicalName=='" +
datafieldname[0].value +
"')]"
);
if (isRequiredField[0].RequiredLevel.Value != "None") {
return (
<BuildField
fieldType={fieldtype[0].value}
label={rows[0].value}
datafieldname={datafieldname[0].value}
key={key}
props={props}
picklistData={
props.props.props.formData.pickListData
}
mandatoryFieldsData={mandatoryFieldsData}
/>
);
} else {
return null;
}
}
})}
</div>
);
+25 -22
View File
@@ -32,19 +32,21 @@ let BuildSection = (props) => {
setCurrentSection,
refno,
gotoSection,
mandatoryFieldsData,
} = props;
const currentSection = props.appealType.currentSection;
const parser = new DOMParser();
var doc = parser.parseFromString(props.formXML, "text/xml");
var titles = xpath.select(
"//form/tabs/tab[" + currentSection + " ]/labels/label/@description",
doc
);
// var titles = xpath.select(
// "//form/tabs/tab[" + currentSection + " ]/labels/label/@description",
// doc
// );
var rowXML = xpath.select(
"/form/tabs/tab[" +
currentSection +
"]/columns//sections/section/rows/row",
// "/form/tabs/tab[" +
// currentSection +
// "]/columns//sections/section/rows/row",
"/form/tabs/tab/columns//sections/section/rows/row",
doc
);
@@ -129,7 +131,8 @@ let BuildSection = (props) => {
<div className="govuk-grid-row">
<div className="govuk-grid-column-two-thirds">
<h1 className="govuk-heading-m govuk-!-margin-top-5">
{titles[0].value}{" "}
{/* {titles[0].value}{" "} */}
Enter your appeal information
</h1>
<form onSubmit={handleSubmit(onHandleSubmit)}>
{hasErrors == true ? (
@@ -141,17 +144,17 @@ let BuildSection = (props) => {
) : (
""
)}
<BuildRow
rowXML={rowXML}
whichSection={props.whichSection}
sectionCount={props.sectionCount}
onSubmit={onSubmit}
mandatoryFieldsData={mandatoryFieldsData}
props={props}
/>
{}
<div className="govuk-button-group">
{props.sectionCount != currentSection ? (
{/* {props.sectionCount != currentSection ? (
<button
type="submit"
className="govuk-button"
@@ -163,15 +166,15 @@ let BuildSection = (props) => {
) : (
""
)}
{props.sectionCount == currentSection ? (
<button
type="submit"
className="govuk-button"
data-module="govuk-button"
>
Submit
</button>
) : (
{props.sectionCount == currentSection ? ( */}
<button
type="submit"
className="govuk-button"
data-module="govuk-button"
>
Submit
</button>
{/* ) : (
""
)}
{currentSection > 1 ? (
@@ -186,11 +189,11 @@ let BuildSection = (props) => {
</a>
) : (
""
)}
)} */}
</div>
</form>
</div>
<div className="govuk-grid-column-one-third">
{/* <div className="govuk-grid-column-one-third">
<nav
role="navigation"
aria-labelledby="progress-list"
@@ -239,7 +242,7 @@ let BuildSection = (props) => {
</ul>
</ol>
</nav>
</div>
</div> */}
</div>
);
};
+59 -4
View File
@@ -7,11 +7,61 @@ import BuildRow from "./buildrow";
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) => {
// useEffect(() => {
// window.scrollTo(0, 0);
// });
// 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;
Object.assign(updateBody, {
"pinswg_name": props.appealType.caseReference.ticketnumber,
});
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();
@@ -52,6 +102,9 @@ 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 (
<div className="govuk-grid-row">
<div className="govuk-grid-column-two-thirds">
@@ -60,7 +113,9 @@ let CompleteAppeal = (props) => {
<div className="govuk-panel__body">
Your reference number
<br />
<strong>{props.appealType.caseReference}</strong>
<strong>
{props.appealType.caseReference.ticketnumber}
</strong>
</div>
</div>
+35 -40
View File
@@ -33,11 +33,9 @@ let CreateCase = (props) => {
? [{}]
: _.isEmpty(props.appealType.appealTypeOptions)
? [{}]
: _.isEmpty(props.appealType.appealTypeOptions.GlobalOptionSet)
: _.isEmpty(props.appealType.appealTypeOptions.value)
? [{}]
: _.isEmpty(props.appealType.appealTypeOptions.GlobalOptionSet.Options)
? [{}]
: props.appealType.appealTypeOptions.GlobalOptionSet.Options;
: props.appealType.appealTypeOptions.value;
let lpaOptionsObj = _.isEmpty(props)
? [{}]
@@ -45,7 +43,9 @@ let CreateCase = (props) => {
? [{}]
: _.isEmpty(props.LPAData.LPAData)
? [{}]
: jsonpath.query(props.LPAData.LPAData, "$..name");
: _.isEmpty(props.LPAData.LPAData)
? [{}]
: props.LPAData.LPAData.value;
const RenderLPAList = ({
name,
@@ -96,9 +96,9 @@ let CreateCase = (props) => {
return (
<option
key={key}
value={optionsObj[key]}
value={optionsObj[key].accountid}
>
{optionsObj[key]}
{optionsObj[key].name}
</option>
);
})}
@@ -158,51 +158,37 @@ let CreateCase = (props) => {
<option
key={key}
value={
_.isEmpty(
optionsObj[key].Label
)
_.isEmpty(optionsObj[key])
? ""
: _.isEmpty(
optionsObj[key]
.Label
.LocalizedLabels
)
? ""
: _.isEmpty(
optionsObj[key]
.Label
.LocalizedLabels[0]
.Label
.value
)
? ""
: optionsObj[
key
].Label.LocalizedLabels[0].Label.replace(
/[\s\-\+\(\)\,]/g,
""
).toLowerCase()
: optionsObj[key]
.attributevalue +
"," +
optionsObj[key].value
.replace(
/[\s\-\+\(\)\,]/g,
""
)
.toLowerCase()
}
>
{_.isEmpty(optionsObj[key])
? ""
: _.isEmpty(
optionsObj[key].Label
)
: _.isEmpty(optionsObj[key])
? ""
: _.isEmpty(
optionsObj[key].Label
.LocalizedLabels
optionsObj[key].value
)
? ""
: _.isEmpty(
optionsObj[key].Label
.LocalizedLabels[0]
.Label
)
? ""
: optionsObj[key].Label
.LocalizedLabels[0]
.Label}
: optionsObj[key].value}
</option>
);
})}
@@ -217,9 +203,18 @@ let CreateCase = (props) => {
const onHandleSubmit = (values) => {
event.preventDefault();
router.replace("/newappeal/" + values.appealTypes, null, {
shallow: true,
});
router.replace(
"/newappeal/" +
values.appealTypes.split(",")[1] +
"?lpa=" +
values.lpaTypes +
"&apt=" +
values.appealTypes.split(",")[0],
null,
{
shallow: true,
}
);
};
return (
@@ -273,8 +268,8 @@ const mapDispatchToProps = (dispatch) => {
);
dispatch(setAppealTypeID(event.target.value));
},
onChangeSelectLPA: (event) => {
dispatch(setAppealLPA(event.target.value));
onChangeSelectLPA: (lpaId) => {
dispatch(setAppealLPA(lpaId));
},
};
};
+61 -49
View File
@@ -3,54 +3,22 @@ import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation";
import { setCurrentReference } from "../../store/currentView/action";
import { connect } from "react-redux";
import jsonpath from "jsonpath";
import _ from "lodash";
const SearchResults = (props) => {
const { searchString, searchResultsObj, setCurrentReference } = props;
const {
searchString,
searchResultsObj,
searchDetailsObj,
setCurrentReference,
} = props;
let { t } = useTranslation();
const router = useRouter();
const { locale } = router;
var resultsArr = searchResultsObj.value || [{}];
const resultRow = Object.keys(resultsArr).map((key, index) => {
<div className="govuk-summary-list__row">
<dd className="govuk-summary-list__value govuk-!-font-size-14 ">
<Link href="/case">
<a>
<span className="results-visually-hidden">
wwwwwwwCase Reference:
</span>
{resultsArr[key].title}
</a>
</Link>
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">Site Address: </span>
23 Martineau Lane
<br /> HASTINGS
<br />
TN35 5DS
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Appellant/Applicant:
</span>
Mr J Pocknell
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">Authority:</span>
Hastings Borough Council{" "}
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">Case Type:</span>
Planning (W){" "}
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">Status:</span>
In Progress
</dd>
</div>;
});
return (
<div className="govuk-grid-row">
@@ -87,6 +55,12 @@ const SearchResults = (props) => {
</div>
{resultsArr.map((item, key) => {
let detailsObj = jsonpath.query(
searchDetailsObj,
"$..value[?(@.pinswg_name=='" + item.title + "')]"
);
detailsObj = detailsObj[0];
return (
<div className="govuk-summary-list__row" key={key}>
<dd className="govuk-summary-list__value govuk-!-font-size-14 ">
@@ -112,26 +86,64 @@ const SearchResults = (props) => {
<span className="results-visually-hidden">
Site Address:{" "}
</span>
23 Martineau Lane
<br /> HASTINGS
{_.has(
detailsObj,
"pinswg_siteaddressline1"
)
? detailsObj.pinswg_siteaddressline1
: ""}
<br />
TN35 5DS
{_.has(
detailsObj,
"pinswg_siteaddressline1"
)
? detailsObj.pinswg_siteaddressline2
: ""}
<br />
{_.has(
detailsObj,
"pinswg_siteaddressline1"
)
? detailsObj.pinswg_siteaddresstown
: ""}
<br />
{_.has(
detailsObj,
"pinswg_siteaddressline1"
)
? detailsObj.pinswg_siteaddresscounty
: ""}
<br />
{_.has(
detailsObj,
"pinswg_siteaddressline1"
)
? detailsObj.pinswg_siteaddresspostcode
: ""}
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Appellant/Applicant:
</span>
Mr J Pocknell
{_.has(detailsObj, [
"_pinswg_appellant_value@OData.Community.Display.V1.FormattedValue",
])
? detailsObj[
"_pinswg_appellant_value@OData.Community.Display.V1.FormattedValue"
]
: ""}
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
Authority:
</span>
{
item[
"_customerid_value@OData.Community.Display.V1.FormattedValue"
]
}
{_.has(detailsObj, [
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue",
])
? detailsObj[
"_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue"
]
: ""}
</dd>
<dd className="govuk-summary-list__value govuk-!-font-size-14">
<span className="results-visually-hidden">
+1
View File
@@ -23,6 +23,7 @@ export default function Search(props) {
<SearchResults
searchString={searchString}
searchResultsObj={searchResultsObj.searchResultsObj}
searchDetailsObj={searchResultsObj.searchDetailsObj}
/>
</div>
</div>
+312
View File
@@ -0,0 +1,312 @@
{
"value": [
{
"LogicalCollectionName": "pinswg_planningobligationss106flows",
"LogicalName": "pinswg_planningobligationss106flow",
"MetadataId": "efb4c590-19be-eb11-aac4-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_dnsflows",
"LogicalName": "pinswg_dnsflow",
"MetadataId": "328e015f-dabe-eb11-aac4-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_harbourrevisionorderflows",
"LogicalName": "pinswg_harbourrevisionorderflow",
"MetadataId": "98bbb26e-e7be-eb11-aac4-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_transportandworkactflows",
"LogicalName": "pinswg_transportandworkactflow",
"MetadataId": "ad4bfc8c-e1be-eb11-aac4-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_maintenanceoflands127flows",
"LogicalName": "pinswg_maintenanceoflands127flow",
"MetadataId": "2b26362c-d3be-eb11-aac4-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_environmentalpermittingflows",
"LogicalName": "pinswg_environmentalpermittingflow",
"MetadataId": "74dd4767-f2be-eb11-aac4-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_dnses",
"LogicalName": "pinswg_dns",
"MetadataId": "36f07225-4a82-eb11-aac0-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_planningobligationappeals106s",
"LogicalName": "pinswg_planningobligationappeals106",
"MetadataId": "cb8beeae-8f81-eb11-aac0-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_planningconditionss73s79s",
"LogicalName": "pinswg_planningconditionss73s79",
"MetadataId": "093bf9ff-8d81-eb11-aac0-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_rows",
"LogicalName": "pinswg_row",
"MetadataId": "4ccc6e93-4f82-eb11-aac0-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_transportandworkacts",
"LogicalName": "pinswg_transportandworkact",
"MetadataId": "bc3edc4b-7d82-eb11-aac0-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_transportandworkacts",
"LogicalName": "pinswg_transportandworksact",
"MetadataId": "bc3edc4b-7d82-eb11-aac0-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_wayleaveflows",
"LogicalName": "pinswg_wayleaveflow",
"MetadataId": "a28054b9-e3be-eb11-aac4-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_planningappeals78flows",
"LogicalName": "pinswg_planningappeals78flow",
"MetadataId": "ddaebde1-0fbe-eb11-aac4-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_harbourrevisionorders",
"LogicalName": "pinswg_harbourrevisionorder",
"MetadataId": "dc8dcd0d-4f82-eb11-aac0-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_miscellaneouscaseworks",
"LogicalName": "pinswg_miscellaneouscasework",
"MetadataId": "f519aa8e-5782-eb11-aac0-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_miscellaneouscaseworks",
"LogicalName": "pinswg_misccasework",
"MetadataId": "f519aa8e-5782-eb11-aac0-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_localdevelopmentplanses",
"LogicalName": "pinswg_localdevelopmentplans",
"MetadataId": "38ed3835-c1e0-eb11-aac5-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_planningappeals78s",
"LogicalName": "pinswg_planningappeals78",
"MetadataId": "8d7f813a-4183-eb11-aac0-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_enforcementnoticeappealsflow174s",
"LogicalName": "pinswg_enforcementnoticeappealsflow174",
"MetadataId": "a933cf28-20be-eb11-aac4-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_lawfuldevelopmentcertificates",
"LogicalName": "pinswg_lawfuldevelopmentcertificate",
"MetadataId": "184e4861-9681-eb11-aac0-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_lawfuldevelopmentcertificates",
"LogicalName": "pinswg_lawfuldevelopmentcertificateappeals194195",
"MetadataId": "184e4861-9681-eb11-aac0-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_highhedgestreepreservationflows",
"LogicalName": "pinswg_highhedgestreepreservationflow",
"MetadataId": "c365b924-f3be-eb11-aac4-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_householderappealhases",
"LogicalName": "pinswg_householderappealhas",
"MetadataId": "a6c728b0-9081-eb11-aac0-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_enforcementlistedbuildingconservationaps",
"LogicalName": "pinswg_enforcementlistedbuildingconservationap",
"MetadataId": "c697be96-9481-eb11-aac0-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_enforcementlistedbuildingconservationaps",
"LogicalName": "pinswg_enforcementlistedbuildingandconservationappeals39",
"MetadataId": "c697be96-9481-eb11-aac0-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_callinss77s",
"LogicalName": "pinswg_callinss77",
"MetadataId": "dd309e51-4982-eb11-aac0-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_commonlands",
"LogicalName": "pinswg_commonland",
"MetadataId": "4161a618-5082-eb11-aac0-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_advertses",
"LogicalName": "pinswg_adverts",
"MetadataId": "0735866b-5482-eb11-aac0-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_hedgeshedgerowstreepreservationreplacems",
"LogicalName": "pinswg_hedgeshedgerowstreepreservationreplacem",
"MetadataId": "60f38fed-5382-eb11-aac0-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_hedgeshedgerowstreepreservationreplacems",
"LogicalName": "pinswg_highhedgestreepreservationordershedgerowstreereplacementnotice",
"MetadataId": "60f38fed-5382-eb11-aac0-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_compulsorypurchaseorderses",
"LogicalName": "pinswg_compulsorypurchaseorders",
"MetadataId": "054da4c7-5582-eb11-aac0-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_communityinfrastructurelevys117118119s",
"LogicalName": "pinswg_communityinfrastructurelevys117118119",
"MetadataId": "0c309f3c-4882-eb11-aac0-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_objectiveconfigs",
"LogicalName": "pinswg_objectiveconfig",
"MetadataId": "f89ae20c-4777-eb11-aabd-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_nonvalidations",
"LogicalName": "pinswg_nonvalidation",
"MetadataId": "37f31a93-5882-eb11-aac0-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_rightofwayflows",
"LogicalName": "pinswg_rightofwayflow",
"MetadataId": "b26c1d43-efbe-eb11-aac4-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_caseinvolvements",
"LogicalName": "pinswg_caseinvolvement",
"MetadataId": "65677cd9-4aae-eb11-aac3-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_commonlandflows",
"LogicalName": "pinswg_commonlandflow",
"MetadataId": "338fac85-e6be-eb11-aac4-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_lawfuldevelopmentcertificates195flows",
"LogicalName": "pinswg_lawfuldevelopmentcertificates195flow",
"MetadataId": "0b8f5046-1dbe-eb11-aac4-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_advertisementappealanddiscontinuances",
"LogicalName": "pinswg_advertisementappealanddiscontinuance",
"MetadataId": "79b9ab3a-f1be-eb11-aac4-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_documenthistories",
"LogicalName": "pinswg_documenthistory",
"MetadataId": "0d8e78a7-33a3-eb11-aac3-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_documents",
"LogicalName": "pinswg_document",
"MetadataId": "e6cbbbca-026a-eb11-aabb-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_electricityactflows",
"LogicalName": "pinswg_electricityactflow",
"MetadataId": "699c4318-e3be-eb11-aac4-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_planningconditionss73s79flows",
"LogicalName": "pinswg_planningconditionss73s79flow",
"MetadataId": "510154b1-15be-eb11-aac4-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_wayleaves",
"LogicalName": "pinswg_wayleave",
"MetadataId": "a0652117-5782-eb11-aac0-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_listedbuildingandconservationareaconsens",
"LogicalName": "pinswg_listedbuildingandconservationareaconsen",
"MetadataId": "4cd95405-8f81-eb11-aac0-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_listedbuildingandconservationareaconsens",
"LogicalName": "pinswg_listedbuildingandconservationareaconsents73s79",
"MetadataId": "4cd95405-8f81-eb11-aac0-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_callinapplicationss77flows",
"LogicalName": "pinswg_callinapplicationss77flow",
"MetadataId": "2a4f3d43-d4be-eb11-aac4-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_transfercodes",
"LogicalName": "pinswg_transfercode",
"MetadataId": "a551ad5c-29f5-eb11-aac7-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_compulsorypurchaseordersflows",
"LogicalName": "pinswg_compulsorypurchaseordersflow",
"MetadataId": "a94f098b-f0be-eb11-aac4-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_environmentalpermittings",
"LogicalName": "pinswg_environmentalpermitting",
"MetadataId": "62d4aa9a-5682-eb11-aac0-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_nonvaidationflows",
"LogicalName": "pinswg_nonvaidationflow",
"MetadataId": "e5ca3ceb-c1e0-eb11-aac5-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_enforcementnoticeappeals174s",
"LogicalName": "pinswg_enforcementnoticeappeals174",
"MetadataId": "930a3cc4-9181-eb11-aac0-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_ldps",
"LogicalName": "pinswg_ldp",
"MetadataId": "af424d4d-5882-eb11-aac0-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_maintenanceoflands217s",
"LogicalName": "pinswg_maintenanceoflands217",
"MetadataId": "bb302784-9581-eb11-aac0-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_enforcelistbuild39flows",
"LogicalName": "pinswg_enforcelistbuild39flow",
"MetadataId": "9423206e-d2be-eb11-aac4-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_householderappealflows",
"LogicalName": "pinswg_householderappealflow",
"MetadataId": "330541bd-d5be-eb11-aac4-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_miscellaneouscaseworkflows",
"LogicalName": "pinswg_miscellaneouscaseworkflow",
"MetadataId": "87db8649-f4be-eb11-aac4-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_communityinfrastructurelevyflows",
"LogicalName": "pinswg_communityinfrastructurelevyflow",
"MetadataId": "92bc1e3d-e0be-eb11-aac4-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_listedbuildconserv20flows",
"LogicalName": "pinswg_listedbuildconserv20flow",
"MetadataId": "4c11cbe9-27be-eb11-aac4-00224800be9c"
},
{
"LogicalCollectionName": "pinswg_electricityacts",
"LogicalName": "pinswg_electricityact",
"MetadataId": "6aedaab1-4a82-eb11-aac0-00224800be9c"
}
]
}
+4 -2
View File
@@ -4,7 +4,7 @@
"private": true,
"scripts": {
"dev": "next dev",
"dev:app": "node ./server/server.js && yarn lint:js",
"dev:app": "node ./server/server.js",
"build": "NODE_ENV=production node_modules/next/dist/bin/next build",
"start": "node_modules/next/dist/bin/next start"
},
@@ -14,11 +14,13 @@
"axios": "^0.21.1",
"compression": "^1.7.4",
"cookies": "^0.8.0",
"crypto-js": "^4.1.1",
"dom": "^0.0.3",
"dynamics-web-api": "^1.7.4",
"express": "^4.17.1",
"govuk-frontend": "^3.13.0",
"https": "^1.0.0",
"hyco-https": "^1.4.5",
"jsonpath": "^1.1.1",
"jsonpath-plus": "^5.1.0",
"lodash": "^4.17.21",
@@ -55,4 +57,4 @@
"eslint-config-next": "^11.0.1",
"prettier": "2.3.2"
}
}
}
+110
View File
@@ -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();
});
});
}
+3
View File
@@ -41,6 +41,9 @@ const Home = (props) => {
searchResultsObj={
props.searchResultsObj.searchResultsObj
}
searchDetailsObj={
props.searchResultsObj.searchDetailsObj
}
myRepresentations={
props.myRepresentations.myRepresentations
}
+40 -12
View File
@@ -19,10 +19,18 @@ import {
setAppealTypeTitle,
setAppealTypeID,
getAppealTypeObj,
setAppealLPA,
setCaseReference,
} from "../../store/appealType/action";
import { setForm, getFormObj } from "../../store/formData/action";
import { getFormData, getAppealsTypes, createCase } from "../../actions";
import {
getFormData,
getAppealsTypes,
getMandatoryFields,
createCase,
getPickLists,
updateCase,
} from "../../actions";
import xpath from "xpath";
import { reduxForm, FormName } from "redux-form";
@@ -52,16 +60,13 @@ let Home = (props) => {
doc
);
var sectionCount = xpath.select("/form/tabs/tab[*]", doc);
sectionCount = sectionCount.length;
sectionCount = 1; //sectionCount.length;
var tabs = xpath.select("//form/tabs/tab[*]", doc);
let optionsStr = props.appealType.appealTypeOptions.GlobalOptionSet.Options;
let optionsStr = props.appealType.appealTypeOptions.value;
let selectedObj = jsonpath.query(
optionsStr,
"$..LocalizedLabels[?(@.Label)].Label"
);
let selectedObj = jsonpath.query(optionsStr, "$..value");
//let optionsTitleObj = [];
@@ -121,7 +126,7 @@ let Home = (props) => {
role="main"
>
{props.appealType.currentSection == 9999 ? (
<CompleteAppeal />
<CompleteAppeal props={props} />
) : props.appealType.currentSection ==
sectionCount + 1 ? (
<BuildCheckSection
@@ -131,6 +136,9 @@ let Home = (props) => {
formTitle={formTitle}
appealType={props.appealType}
props={props}
mandatoryFieldsData={
props.formData.mandatoryFieldsData
}
/>
) : (
<BuildSection
@@ -138,6 +146,9 @@ let Home = (props) => {
sectionCount={sectionCount}
onSubmit={onSubmit}
formTitle={formTitle}
mandatoryFieldsData={
props.formData.mandatoryFieldsData
}
props={props}
/>
)}
@@ -154,19 +165,36 @@ export const getServerSideProps = wrapper.getServerSideProps(
(store) =>
async ({ query, req, res }) => {
//console.log("the query", query);
const [appealTypeData, formdata] = await Promise.all([
const [
caseReferenceData,
appealTypeData,
mandatoryFieldsData,
pickListData,
formdata,
] = await Promise.all([
await createCase(query.apt),
await getAppealsTypes(),
await getMandatoryFields(query.appealtypes),
await getPickLists(query.appealtypes),
await getFormData(query.appealtypes),
]);
const caseReference = createCase("asasa", "asasa");
// let updateCaseReferenceData = await updateCase(
// caseReferenceData.incidentid,
// query.apt
// );
let caseReference = caseReferenceData;
let xmlStr = formdata;
xmlStr = formdata.value[0].formxml;
xmlStr = xmlStr.replace(/\\"/g, "");
store.dispatch(setAppealTypeID(query.appealtypes));
//console.log(caseReference, query.appealtypes, formdata);
store.dispatch(setAppealLPA(query.lpa));
store.dispatch(setAppealTypeID(query.apt));
store.dispatch(setCaseReference(caseReference));
store.dispatch(setForm(xmlStr));
store.dispatch(setForm(xmlStr, mandatoryFieldsData, pickListData));
store.dispatch(setAppealType(appealTypeData));
}
);
+9 -7
View File
@@ -12,7 +12,7 @@ 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 { useEffect, useState } from "react";
import useTranslation from "next-translate/useTranslation";
import jsonpath from "jsonpath";
import { reduxForm, formValueSelector } from "redux-form";
@@ -26,10 +26,15 @@ import {
setAppealLPA,
getAppealTypeObj,
} from "../../store/appealType/action";
import { getAppealsTypes, getLPA } from "../../actions";
import { getAppealsTypes, getLPA, updateCase, createCase } from "../../actions";
import { setLPA } from "../../store/lpa/action";
const Home = (props) => {
// useEffect(() => {
// // updateCase("3ffcf47c-5811-ec11-aac9-00224800be9c", "846040004");
// createCase();
// });
const { footerLinks, pages, formData } = props;
let { t, lang } = useTranslation();
@@ -75,14 +80,11 @@ const Home = (props) => {
export const getServerSideProps = wrapper.getServerSideProps(
(store) =>
async ({ query, req, res }) => {
res.setHeader(
"Cache-Control",
"public, s-maxage=604800, stale-while-revalidate"
);
const [appealTypeData, lpaData] = await Promise.all([
const [appealTypeData, lpaData, caseData] = await Promise.all([
await getAppealsTypes(),
await getLPA(),
]);
store.dispatch(setAppealType(appealTypeData));
store.dispatch(setLPA(lpaData));
}
+50 -2
View File
@@ -13,13 +13,16 @@ 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 } from "../actions";
import { getBasicSearch, getBasicSearchDetails } from "../actions";
const Home = (props) => {
const { footerLinks, pages } = props;
@@ -57,12 +60,57 @@ export const getServerSideProps = wrapper.getServerSideProps(
(store) =>
async ({ query, req, res }) => {
console.log("query-", query);
const searchResultsObj = (await getBasicSearch(query.q)) || null;
// 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,
+1 -1
View File
@@ -6,7 +6,7 @@ const appealTypeDataInitialState = {
appealTypeID: {},
currentSection: 1,
appealLPA: "",
caseReference: "",
caseReference: {},
formComplete: "false",
};
+9 -6
View File
@@ -10,9 +10,12 @@ export const getFormObj = () => (dispatch) => {
});
};
export const setForm = (formData) => (dispatch) => {
return dispatch({
type: formDataActionTypes.SETFORMDATA,
formData: formData,
});
};
export const setForm =
(formData, mandatoryFieldsData, pickListData) => (dispatch) => {
return dispatch({
type: formDataActionTypes.SETFORMDATA,
formData: formData,
mandatoryFieldsData: mandatoryFieldsData,
pickListData: pickListData,
});
};
+4
View File
@@ -2,6 +2,8 @@ import { formDataActionTypes } from "./action";
const formDataInitialState = {
formData: {},
mandatoryFieldsData: {},
pickListData: {},
};
export default function reducer(state = formDataInitialState, action) {
@@ -9,6 +11,8 @@ export default function reducer(state = formDataInitialState, action) {
case formDataActionTypes.SETFORMDATA:
return {
formData: action.formData,
mandatoryFieldsData: action.mandatoryFieldsData,
pickListData: action.pickListData,
};
default:
return state;
+8
View File
@@ -2,6 +2,7 @@ export const searchResultsActionTypes = {
GETSEARCHRESULTS: "GETSEARCHRESULTS",
SETSEARCHRESULTS: "SETSEARCHRESULTS",
UPDATESEARCHRESULTS: "UPDATESEARCHRESULTS",
SETSEARCHDETAILS: "SETSEARCHDETAILS",
};
export const getSearchResultshObj = () => (dispatch) => {
@@ -16,3 +17,10 @@ export const setSearchResults = (searchResults) => (dispatch) => {
searchResultsObj: searchResults,
});
};
export const setSearchDetails = (searchDetails) => (dispatch) => {
return dispatch({
type: searchResultsActionTypes.SETSEARCHDETAILS,
searchDetailsObj: searchDetails,
});
};
+7
View File
@@ -2,14 +2,21 @@ import { searchResultsActionTypes } from "./action";
const searchResultsInitialState = {
searchResultsObj: {},
searchDetailsObj: {},
};
export default function reducer(state = searchResultsInitialState, action) {
switch (action.type) {
case searchResultsActionTypes.SETSEARCHRESULTS:
return {
...state,
searchResultsObj: action.searchResultsObj,
};
case searchResultsActionTypes.SETSEARCHDETAILS:
return {
...state,
searchDetailsObj: action.searchDetailsObj,
};
default:
return state;
}
+1 -1
View File
@@ -103,7 +103,7 @@ const makeStore = ({ isServer }) => {
const storage = require("redux-persist/lib/storage").default;
const persistConfig = {
key: "acp_" + Math.floor(100000 + Math.random() * 900000),
key: "acp",
whitelist: [
"currentView",
"search",