added crm driven form via oauth

This commit is contained in:
robert.bond@test.gov.wales
2021-09-07 12:46:59 +01:00
parent 9e13a9e7c8
commit 8e8797418a
12 changed files with 245 additions and 149 deletions
+109 -27
View File
@@ -13,6 +13,10 @@ if (process.browser) {
BASE_URL = process.env.API_ROOT || `http://localhost:${port}`; 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({ const agent = new https.Agent({
rejectUnauthorized: false, rejectUnauthorized: false,
}); });
@@ -24,11 +28,8 @@ const crmHeaders = {
"OData-Version": "4.0", "OData-Version": "4.0",
"Accept": "application/json", "Accept": "application/json",
"Prefer": 'odata.include-annotations="*"', "Prefer": 'odata.include-annotations="*"',
agent, "Authorization":
}, "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IlVXelVaa0U3OEx0NVBGRkJ0LV9seVdoMjdjTSIsImtpZCI6IlVXelVaa0U3OEx0NVBGRkJ0LV9seVdoMjdjTSJ9.eyJhdWQiOiJodHRwczovL2RldmNybTIwMTYubGxjZHQuZ292LndhbGVzLyIsImlzcyI6Imh0dHA6Ly9mcy50ZXN0Lmdvdi53YWxlcy9hZGZzL3NlcnZpY2VzL3RydXN0IiwiaWF0IjoxNjMxMDAwMjUxLCJuYmYiOjE2MzEwMDAyNTEsImV4cCI6MTYzMTAyOTA1MSwidXBuIjpbIlJvYmVydC5Cb25kQHRlc3QuZ292LndhbGVzIiwicm9iZXJ0LmJvbmRAdGVzdC5nb3Yud2FsZXMiXSwicHJpbWFyeXNpZCI6IlMtMS01LTIxLTE4MDA4NDIwNzYtMjQ1NTYwNjU5LTQyMTU3NzU0NjktMTY2MjgiLCJ1bmlxdWVfbmFtZSI6IlhNXFxCb25kUiIsImFwcHR5cGUiOiJQdWJsaWMiLCJhcHBpZCI6IjQyN2ZhNzljLWI1ZmMtNDJhZC04M2Q0LTQxMGIwMzk0OGFiNiIsImF1dGhtZXRob2QiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvYXV0aGVudGljYXRpb25tZXRob2Qvd2luZG93cyIsImF1dGhfdGltZSI6IjIwMjEtMDktMDdUMDc6Mzc6MjIuMzM3WiIsInZlciI6IjEuMCJ9.L8husDSMXMtZxpxKDS0cpPplG6xoHQjSdd17qMfgKZaEUPUOKPy4rznxNwAMp7WxussNeK__nOKE9vHNgc5Nk4lzxbvcYy3jeE7bLWHsB5UYFa1FIrPZpzuEdPIgoWAzhTa4k-anzsA0YNMHpV6QHT14F9wkBTsT8MUtpT2BiNfbflQQ_xtQavp_pCww-1-guysM6USv5NJkuvrHpXjA5_HpaGbprLI8Or3Htjsdgq9c4uCxfjoAGZsjUmtvaIL-jQnkR6-ndYezo12tes7ql2iV4iZT4-fvcib8sUdzHkgFvNmyzMblhogUo8QciTBcvF7-syCfNzLG2vvWSZJ9_g",
auth: {
username: "xm\bondr",
password: "!Sky9fish1972",
}, },
}; };
@@ -39,9 +40,17 @@ export const getBasicSearch = (searchString) => {
axios 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://devcrm2016.llcdt.gov.wales/DVPINS/api/data/v8.2/incidents?$select=_accountid_value,_customerid_value,pinswg_appealcasetype,statuscode,ticketnumber,title&$filter=contains(title, '" + searchString + "')&$count=true", crmHeaders)
//.get("https://jsonplaceholder.typicode.com/todos/1",{proxy:{protocol: 'http',host:'lon3.sme.zscloud.net',port: 80}}) //.get("https://jsonplaceholder.typicode.com/todos/1",{proxy:{protocol: 'http',host:'lon3.sme.zscloud.net',port: 80}})
.get(BASE_URL + "/api/searchresults2", { // .get(BASE_URL + "/api/searchresults2", {
httpsAgent: new https.Agent({ rejectUnauthorized: false }), // 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) .then((res) => res.data)
.catch((error) => { .catch((error) => {
console.log("thiserror", 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) => { export const getFormData = (whichForm) => {
console.log("got to axios", whichForm); console.log("got to axios", whichForm);
console.log("api_root: ", BASE_URL); console.log("api_root: ", BASE_URL);
@@ -62,9 +89,18 @@ export const getFormData = (whichForm) => {
//.get("api/appealforms/pinswg_harbourrevisionorder", { //.get("api/appealforms/pinswg_harbourrevisionorder", {
//.get("api/appealforms/pinswg_planningappeals78", { //.get("api/appealforms/pinswg_planningappeals78", {
//.get(api/appealforms/pinswg_householderappealhas", { //.get(api/appealforms/pinswg_householderappealhas", {
.get(BASE_URL + "/api/appealforms/pinswg_" + whichForm, { // .get(BASE_URL + "/api/appealforms/pinswg_" + whichForm, {
httpsAgent: new https.Agent({ rejectUnauthorized: false }), // 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) .then((res) => res.data)
.catch((error) => { .catch((error) => {
console.log("thiserror", error); console.log("thiserror", error);
@@ -72,19 +108,59 @@ export const getFormData = (whichForm) => {
); );
}; };
export const getAppealsTypes = () => { export const getMandatoryFields = (whichForm) => {
console.log("got to axios: appeal types");
console.log("api_root: ", BASE_URL);
return axios return axios
.get(BASE_URL + "/api/lookups/pinswg_appealcasetype", { .get(
httpsAgent: new https.Agent({ rejectUnauthorized: false }), WEBAPI_URL +
}) API_PATH +
"EntityDefinitions(LogicalName='pinswg_" +
whichForm +
"')/Attributes?$count=true&$select=LogicalName,RequiredLevel",
crmHeaders
)
.then((res) => res.data) .then((res) => res.data)
.catch((error) => { .catch((error) => {
console.log("thiserror", 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) => { export const getBasicSearch2 = (searchString) => {
var req = new XMLHttpRequest(); var req = new XMLHttpRequest();
req.open( req.open(
@@ -189,17 +265,23 @@ export const getAppealTypeDetail = (caseReference, appealcasetype) => {
export const getLPA = () => { export const getLPA = () => {
console.log("api_root: ", BASE_URL); console.log("api_root: ", BASE_URL);
return axios return (
axios
.get( // .get(
BASE_URL + "/api/lookups/pinswg_lpa", // BASE_URL + "/api/lookups/pinswg_lpa",
//.get("https://devcrm2016.llcdt.gov.wales/DVPINS/api/data/v8.2/accounts?$select=name", // //.get("https://devcrm2016.llcdt.gov.wales/DVPINS/api/data/v8.2/accounts?$select=name",
{ httpsAgent: new https.Agent({ rejectUnauthorized: false }) } // { httpsAgent: new https.Agent({ rejectUnauthorized: false }) }
) // )
.then((res) => res.data) .get(
.catch((error) => { WEBAPI_URL + API_PATH + "accounts?$count=true&$select=name",
console.log("thi serror", error); crmHeaders
}); )
.then((res) => res.data)
.catch((error) => {
console.log("thi serror", error);
})
);
}; };
export const getPersonalAccount = () => { export const getPersonalAccount = () => {
+9 -26
View File
@@ -5,6 +5,7 @@ import DatePicker from "react-datepicker";
import React, { useState } from "react"; import React, { useState } from "react";
import "react-datepicker/dist/react-datepicker.css"; import "react-datepicker/dist/react-datepicker.css";
import moment from "moment"; import moment from "moment";
import jsonpath from "jsonpath";
const RenderTextfield = ({ const RenderTextfield = ({
id, id,
@@ -356,35 +357,17 @@ export function YesNofield(props) {
const RenderPickList = ({ const RenderPickList = ({
datafieldname, datafieldname,
picklistData,
name, name,
label, label,
input, input,
meta: { touched, errorStr }, meta: { touched, errorStr },
}) => { }) => {
const fetcher = (url) => fetch(url).then((res) => res.json()); var dropdownObj = jsonpath.query(
picklistData,
const { data, error } = useSWR("/api/lookups/" + datafieldname, fetcher); "$..value[?(@.LogicalName=='" + datafieldname + "')]..Options"
if (error) );
return ( dropdownObj = dropdownObj[0];
<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;
return ( return (
<div> <div>
<select {...input} className="govuk-select " id={name} name={name}> <select {...input} className="govuk-select " id={name} name={name}>
@@ -394,9 +377,8 @@ const RenderPickList = ({
<option <option
key={key} key={key}
value={ value={
dropdownObj[key].Label.LocalizedLabels[0].value dropdownObj[key].Label.LocalizedLabels[0].Label
} }
// value={dropdownObj[key].Label.LocalizedLabels[0].MetadataId}
> >
{dropdownObj[key].Label.LocalizedLabels[0].Label} {dropdownObj[key].Label.LocalizedLabels[0].Label}
</option> </option>
@@ -421,6 +403,7 @@ export function PickList(props) {
name={props.name} name={props.name}
component={RenderPickList} component={RenderPickList}
datafieldname={datafieldname} datafieldname={datafieldname}
picklistData={props.picklistData}
/> />
</div> </div>
); );
+40 -36
View File
@@ -56,44 +56,48 @@ let BuildCheckRow = (props) => {
rowXML[key].outerHTML, rowXML[key].outerHTML,
"text/xml" "text/xml"
); );
var rows = xpath.select("//label/@description", doc); if (_.isEmpty(rowXML[key].innerHTML)) {
var fieldtype = xpath.select("//@classid", doc); ("");
var datafieldname = xpath.select("//@datafieldname", doc); } else {
var rows = xpath.select("//label/@description", doc);
var fieldtype = xpath.select("//@classid", doc);
var datafieldname = xpath.select("//@datafieldname", doc);
return ( return (
<div className="govuk-summary-list__row" key={key}> <div className="govuk-summary-list__row" key={key}>
<dt className="govuk-summary-list__key"> <dt className="govuk-summary-list__key">
{rows[0].value} {rows[0].value}
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{fieldtype[0].value == {fieldtype[0].value ==
"{5B773807-9FB2-42db-97C3-7A91EFF8ADFF}" "{5B773807-9FB2-42db-97C3-7A91EFF8ADFF}"
? formatDate( ? formatDate(
props.props.form["appealForm"].values[ props.props.form["appealForm"].values[
datafieldname[0].value
]
)
: props.props.form["appealForm"].values[
datafieldname[0].value datafieldname[0].value
] ]}
) </dd>
: props.props.form["appealForm"].values[ <dd className="govuk-summary-list__actions">
datafieldname[0].value <a
]} className="govuk-link"
</dd> href="#"
<dd className="govuk-summary-list__actions"> onClick={() => {
<a updateCurrentSection(whichSection);
className="govuk-link" }}
href="#" >
onClick={() => { Change
updateCurrentSection(whichSection); <span className="govuk-visually-hidden">
}} {" "}
> name
Change </span>
<span className="govuk-visually-hidden"> </a>
{" "} </dd>
name </div>
</span> );
</a> }
</dd>
</div>
);
})} })}
</> </>
); );
+1
View File
@@ -41,6 +41,7 @@ export default function BuildField(props) {
name={props.datafieldname} name={props.datafieldname}
label={props.label} label={props.label}
datafieldname={props.datafieldname} datafieldname={props.datafieldname}
picklistData={props.picklistData}
/> />
); );
break; break;
+20 -12
View File
@@ -1,4 +1,5 @@
import Link from "next/link"; import Link from "next/link";
import _ from "lodash";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import xpath from "xpath"; import xpath from "xpath";
@@ -21,18 +22,25 @@ export default function BuildRow(props) {
rowXML[key].outerHTML, rowXML[key].outerHTML,
"text/xml" "text/xml"
); );
var rows = xpath.select("//label/@description", doc); if (_.isEmpty(rowXML[key].innerHTML)) {
var fieldtype = xpath.select("//@classid", doc); ("");
var datafieldname = xpath.select("//@datafieldname", doc); } else {
return ( var rows = xpath.select("//label/@description", doc);
<BuildField var fieldtype = xpath.select("//@classid", doc);
fieldType={fieldtype[0].value} var datafieldname = xpath.select("//@datafieldname", doc);
label={rows[0].value} return (
datafieldname={datafieldname[0].value} <BuildField
key={key} fieldType={fieldtype[0].value}
props={props} label={rows[0].value}
/> datafieldname={datafieldname[0].value}
); key={key}
props={props}
picklistData={
props.props.props.formData.pickListData
}
/>
);
}
})} })}
</div> </div>
); );
+13 -32
View File
@@ -33,11 +33,9 @@ let CreateCase = (props) => {
? [{}] ? [{}]
: _.isEmpty(props.appealType.appealTypeOptions) : _.isEmpty(props.appealType.appealTypeOptions)
? [{}] ? [{}]
: _.isEmpty(props.appealType.appealTypeOptions.GlobalOptionSet) : _.isEmpty(props.appealType.appealTypeOptions.value)
? [{}] ? [{}]
: _.isEmpty(props.appealType.appealTypeOptions.GlobalOptionSet.Options) : props.appealType.appealTypeOptions.value;
? [{}]
: props.appealType.appealTypeOptions.GlobalOptionSet.Options;
let lpaOptionsObj = _.isEmpty(props) let lpaOptionsObj = _.isEmpty(props)
? [{}] ? [{}]
@@ -158,51 +156,34 @@ let CreateCase = (props) => {
<option <option
key={key} key={key}
value={ value={
_.isEmpty( _.isEmpty(optionsObj[key])
optionsObj[key].Label
)
? "" ? ""
: _.isEmpty( : _.isEmpty(
optionsObj[key] optionsObj[key]
.Label
.LocalizedLabels
) )
? "" ? ""
: _.isEmpty( : _.isEmpty(
optionsObj[key] optionsObj[key]
.Label .value
.LocalizedLabels[0]
.Label
) )
? "" ? ""
: optionsObj[ : optionsObj[key].value
key .replace(
].Label.LocalizedLabels[0].Label.replace( /[\s\-\+\(\)\,]/g,
/[\s\-\+\(\)\,]/g, ""
"" )
).toLowerCase() .toLowerCase()
} }
> >
{_.isEmpty(optionsObj[key]) {_.isEmpty(optionsObj[key])
? "" ? ""
: _.isEmpty( : _.isEmpty(optionsObj[key])
optionsObj[key].Label
)
? "" ? ""
: _.isEmpty( : _.isEmpty(
optionsObj[key].Label optionsObj[key].value
.LocalizedLabels
) )
? "" ? ""
: _.isEmpty( : optionsObj[key].value}
optionsObj[key].Label
.LocalizedLabels[0]
.Label
)
? ""
: optionsObj[key].Label
.LocalizedLabels[0]
.Label}
</option> </option>
); );
})} })}
+18 -8
View File
@@ -22,7 +22,13 @@ import {
setCaseReference, setCaseReference,
} from "../../store/appealType/action"; } from "../../store/appealType/action";
import { setForm, getFormObj } from "../../store/formData/action"; import { setForm, getFormObj } from "../../store/formData/action";
import { getFormData, getAppealsTypes, createCase } from "../../actions"; import {
getFormData,
getAppealsTypes,
getMandatoryFields,
createCase,
getPickLists,
} from "../../actions";
import xpath from "xpath"; import xpath from "xpath";
import { reduxForm, FormName } from "redux-form"; import { reduxForm, FormName } from "redux-form";
@@ -56,12 +62,9 @@ let Home = (props) => {
var tabs = xpath.select("//form/tabs/tab[*]", doc); 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( let selectedObj = jsonpath.query(optionsStr, "$..value");
optionsStr,
"$..LocalizedLabels[?(@.Label)].Label"
);
//let optionsTitleObj = []; //let optionsTitleObj = [];
@@ -154,8 +157,15 @@ export const getServerSideProps = wrapper.getServerSideProps(
(store) => (store) =>
async ({ query, req, res }) => { async ({ query, req, res }) => {
//console.log("the query", query); //console.log("the query", query);
const [appealTypeData, formdata] = await Promise.all([ const [
appealTypeData,
mandatoryFieldsData,
pickListData,
formdata,
] = await Promise.all([
await getAppealsTypes(), await getAppealsTypes(),
await getMandatoryFields(query.appealtypes),
await getPickLists(query.appealtypes),
await getFormData(query.appealtypes), await getFormData(query.appealtypes),
]); ]);
@@ -166,7 +176,7 @@ export const getServerSideProps = wrapper.getServerSideProps(
xmlStr = xmlStr.replace(/\\"/g, ""); xmlStr = xmlStr.replace(/\\"/g, "");
store.dispatch(setAppealTypeID(query.appealtypes)); store.dispatch(setAppealTypeID(query.appealtypes));
store.dispatch(setCaseReference(caseReference)); store.dispatch(setCaseReference(caseReference));
store.dispatch(setForm(xmlStr)); store.dispatch(setForm(xmlStr, mandatoryFieldsData, pickListData));
store.dispatch(setAppealType(appealTypeData)); store.dispatch(setAppealType(appealTypeData));
} }
); );
+7 -2
View File
@@ -19,7 +19,7 @@ import {
setSearchResults, setSearchResults,
getSearchResultsObj, getSearchResultsObj,
} from "../store/searchOutput/action"; } from "../store/searchOutput/action";
import { getBasicSearch } from "../actions"; import { getBasicSearch, getBasicSearchDetails } from "../actions";
const Home = (props) => { const Home = (props) => {
const { footerLinks, pages } = props; const { footerLinks, pages } = props;
@@ -57,8 +57,13 @@ export const getServerSideProps = wrapper.getServerSideProps(
(store) => (store) =>
async ({ query, req, res }) => { async ({ query, req, res }) => {
console.log("query-", query); 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)
);
store.dispatch(setSearchResults(searchResultsObj)); store.dispatch(setSearchResults(searchResultsObj));
store.dispatch(setSearchDetails(searchDetailsObj));
store.dispatch(setSearch(query.q)); store.dispatch(setSearch(query.q));
} }
); );
+9 -6
View File
@@ -10,9 +10,12 @@ export const getFormObj = () => (dispatch) => {
}); });
}; };
export const setForm = (formData) => (dispatch) => { export const setForm =
return dispatch({ (formData, mandatoryFieldsData, pickListData) => (dispatch) => {
type: formDataActionTypes.SETFORMDATA, return dispatch({
formData: formData, type: formDataActionTypes.SETFORMDATA,
}); formData: formData,
}; mandatoryFieldsData: mandatoryFieldsData,
pickListData: pickListData,
});
};
+4
View File
@@ -2,6 +2,8 @@ import { formDataActionTypes } from "./action";
const formDataInitialState = { const formDataInitialState = {
formData: {}, formData: {},
mandatoryFieldsData: {},
pickListData: {},
}; };
export default function reducer(state = formDataInitialState, action) { export default function reducer(state = formDataInitialState, action) {
@@ -9,6 +11,8 @@ export default function reducer(state = formDataInitialState, action) {
case formDataActionTypes.SETFORMDATA: case formDataActionTypes.SETFORMDATA:
return { return {
formData: action.formData, formData: action.formData,
mandatoryFieldsData: action.mandatoryFieldsData,
pickListData: action.pickListData,
}; };
default: default:
return state; return state;
+8
View File
@@ -2,6 +2,7 @@ export const searchResultsActionTypes = {
GETSEARCHRESULTS: "GETSEARCHRESULTS", GETSEARCHRESULTS: "GETSEARCHRESULTS",
SETSEARCHRESULTS: "SETSEARCHRESULTS", SETSEARCHRESULTS: "SETSEARCHRESULTS",
UPDATESEARCHRESULTS: "UPDATESEARCHRESULTS", UPDATESEARCHRESULTS: "UPDATESEARCHRESULTS",
SETSEARCHDETAILS: "SETSEARCHDETAILS",
}; };
export const getSearchResultshObj = () => (dispatch) => { export const getSearchResultshObj = () => (dispatch) => {
@@ -16,3 +17,10 @@ export const setSearchResults = (searchResults) => (dispatch) => {
searchResultsObj: searchResults, 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 = { const searchResultsInitialState = {
searchResultsObj: {}, searchResultsObj: {},
searchDetailsObj: {},
}; };
export default function reducer(state = searchResultsInitialState, action) { export default function reducer(state = searchResultsInitialState, action) {
switch (action.type) { switch (action.type) {
case searchResultsActionTypes.SETSEARCHRESULTS: case searchResultsActionTypes.SETSEARCHRESULTS:
return { return {
...state,
searchResultsObj: action.searchResultsObj, searchResultsObj: action.searchResultsObj,
}; };
case searchResultsActionTypes.SETSEARCHDETAILS:
return {
...state,
searchDetailsObj: action.searchDetailsObj,
};
default: default:
return state; return state;
} }