Files
pedwfrontend/pages/searchresults.js
T
2021-09-28 13:36:19 +01:00

211 lines
6.8 KiB
JavaScript

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,
setDocumentDetails,
setDocumentHistory,
getSearchResultsObj,
} from "../store/searchOutput/action";
import {
getBasicSearch,
getBasicSearchDetails,
getSearchDocumentDetails,
getSearchDocumentHistory,
getSASToken,
} from "../actions";
const Home = (props) => {
const { footerLinks, pages } = props;
let { t, lang } = useTranslation();
const router = useRouter();
const { locale } = router;
const { appealtypes } = router.query;
return (
<div>
<Head>
<title>
{t("search:page-title")} - {t("common:service-name")}
</title>
</Head>
<div id="page_wrapper">
<CookieBanner />
<Header courseName={t("common:service-name")} />
<div className="govuk-width-container">
<Banner />
<Breadcrumbs slug={appealtypes} />
<SearchResults
searchString={props.search.searchString}
searchResultsObj={props.searchResultsObj}
/>
</div>
<Footer footerLinks={footerLinks} />
</div>
</div>
);
};
export const getServerSideProps = wrapper.getServerSideProps(
(store) =>
async ({ query, req, res }) => {
console.log("query-", query);
const token = await getSASToken();
let searchResultsObj = await getBasicSearch(token, query.q);
searchResultsObj =
searchResultsObj.status == 502
? {
value: [],
errorMsg: searchResultsObj.statusText,
}
: searchResultsObj;
//console.log("sssss", searchResultsObj);
const searchDetailsObj = await getSearchDetails(
token,
searchResultsObj
);
// const searchDocumentResultsObj = await getDocumentDetails(
// token,
// searchResultsObj
// );
// const searchDocumentHistoryObj = await getDocumentHistory(
// token,
// searchDocumentResultsObj
// );
// console.log(searchDocumentHistoryObj);
store.dispatch(setSearchResults(searchResultsObj));
store.dispatch(setSearchDetails(searchDetailsObj));
//store.dispatch(setDocumentDetails(searchDocumentResultsObj));
//store.dispatch(setDocumentHistory(searchDocumentHistoryObj));
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 = (token, searchResultsObj) => {
//console.log(searchResultsObj);
let detailsArr = [];
//console.log("search results", searchResultsObj);
searchResultsObj = searchResultsObj.value;
const detailsObj = searchResultsObj.map((searchDetail, index) => {
if (searchDetail.pinswg_appealcasetype == null) {
console.log(searchDetail.ticketnumber);
} else {
detailsArr.push(
getBasicSearchDetails(
token,
getFormCollection(
"pinswg_" +
searchDetail[
"pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue"
]
.replace(/(\band|[\s\-\+\(\)\,\&])/g, "")
.toLowerCase()
.slice(0, 39)
),
searchDetail.ticketnumber
)
);
}
});
//console.log(detailsArr);
return Promise.all(detailsArr);
};
const getDocumentDetails = (token, searchResultsObj) => {
//console.log(searchResultsObj);
let detailsArr = [];
//console.log("search results", searchResultsObj);
searchResultsObj = searchResultsObj.value;
const detailsObj = searchResultsObj.map((searchDetail, index) => {
if (searchDetail.pinswg_appealcasetype == null) {
console.log(searchDetail.incidentid);
} else {
detailsArr.push(
getSearchDocumentDetails(token, searchDetail.incidentid)
);
}
});
//console.log(detailsArr);
return Promise.all(detailsArr);
};
const getDocumentHistory = (token, searchDocumentDetailsObj) => {
//console.log(searchResultsObj);
let historyArr = [];
//console.log("search results", searchDocumentDetailsObj);
searchDocumentDetailsObj = searchDocumentDetailsObj[0].value;
//console.log(searchDocumentDetailsObj);
const detailsObj = searchDocumentDetailsObj.map((historyDetail, index) => {
//console.log(historyDetail);
if (historyDetail.pinswg_publishtoweb != true) {
console.log(historyDetail.pinswg_documentid);
} else {
// console.log(
// "history detail documentid:",
// historyDetail.pinswg_documentid
// );
historyArr.push(
getSearchDocumentHistory(token, historyDetail.pinswg_documentid)
);
}
});
console.log(historyArr);
return Promise.all(historyArr);
};
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);