diff --git a/src/components/Zenodo.js b/src/components/Zenodo.js new file mode 100644 index 0000000000000000000000000000000000000000..1af4690d6f1cbe831254ea794c4785cc91e69a2d --- /dev/null +++ b/src/components/Zenodo.js @@ -0,0 +1,14 @@ +import React from "react"; + +export default function Zenodo() { + return ( + <div className="embed-responsive embed-responsive-16by9"> + <iframe + title="zenodo" + className="embed-responsive-item" + src="https://zenodo.org/api/" + allowFullScreen + ></iframe> + </div> + ); +} diff --git a/src/components/query/QueryCatalogs.js b/src/components/query/QueryCatalogs.js index 313150facf8d7201c5ae6fd910fe8dc71a37e568..2bef24faa555e15dc943e5adfe9993a529950f40 100644 --- a/src/components/query/QueryCatalogs.js +++ b/src/components/query/QueryCatalogs.js @@ -36,6 +36,9 @@ export default function QueryCatalogs() { case "esap_rucio": setConfigName("esap_rucio"); break; + case "esap_zenodo": + setConfigName("esap_zenodo"); + break; case "astron_vo": setConfigName("astron_vo"); break; diff --git a/src/components/services/query_results/QueryResults.js b/src/components/services/query_results/QueryResults.js index 36f24570b78c3e123975ac183dbee6eb732a7fe0..79c2e3529ed97674df5fa37b9043d0a1d64c5c36 100644 --- a/src/components/services/query_results/QueryResults.js +++ b/src/components/services/query_results/QueryResults.js @@ -5,6 +5,7 @@ import ZooniverseResults from "./ZooniverseResults"; import VORegListResults from "./VORegListResults"; import LOFARResults from "./LOFARResults"; import RucioResults from "./RucioResults"; +import ZenodoResults from "./ZenodoResults"; import SampResults from "./SampResults"; export default function QueryResults({ catalog }) { @@ -23,6 +24,8 @@ export default function QueryResults({ catalog }) { return <LOFARResults catalog={catalog} />; case "rucio": return <RucioResults catalog={catalog} />; + case "zenodo": + return <ZenodoResults catalog={catalog} />; case "samp": return <SampResults catalog={catalog} />; default: diff --git a/src/components/services/query_results/ZenodoResults.js b/src/components/services/query_results/ZenodoResults.js new file mode 100644 index 0000000000000000000000000000000000000000..6e49b8552028b76b388185b59ada813a36707f9f --- /dev/null +++ b/src/components/services/query_results/ZenodoResults.js @@ -0,0 +1,43 @@ +import React, { useContext } from "react"; +import { Table, Alert, Form } from "react-bootstrap"; +import { QueryContext } from "../../../contexts/QueryContext"; +import LoadingSpinner from "../../LoadingSpinner"; +import Paginate from "../../Paginate"; +import AddToBasket from "../../basket/AddToBasketCheckBox"; + +export default function ZenodoResults({ catalog }) { + const context = useContext(QueryContext); + const { queryMap, page, setPage } = context; + + if (!context.queryMap) return null; + + if (context.queryMap.get(catalog).status === "fetched") { + if (context.queryMap.get(catalog).results.results.length === 0) + return <Alert variant="warning">No matching results found!</Alert>; + else if (catalog === "zenodo") { + const zenodoResults = queryMap.get("zenodo").results.results[0]['hits']['hits'].map((hits, counter) => ( + <> + <br/> + <br/> + <h4><a href={hits.links.latest_html} target="_blank"> {hits.metadata.title.replaceAll("<p>","").replaceAll("</p>","")} </a></h4> + DOI: {hits.metadata.doi} + <br/> + {hits.metadata.description.replaceAll("<p>","").replaceAll("</p>","").substring(0,200)}... + </> + )); + + return ( + + <> + {zenodoResults} + </> + + ); + + } + } + else { + return <LoadingSpinner />; + } +} + diff --git a/src/routes/Routes.js b/src/routes/Routes.js index d74cc0b63420607c946a16b9cc8e4d5eaec30848..b04a44e50a1ac80e9b4e68ccc6061b2692c5881f 100644 --- a/src/routes/Routes.js +++ b/src/routes/Routes.js @@ -87,7 +87,7 @@ export default function Routes() { </Switch> - <footer><small>esap-gui version 27 aug 2021 - 14:00</small></footer> + <footer><small>esap-gui version 31 aug 2021</small></footer> </Router> ); } diff --git a/src/utils/form/parseQueryForm.js b/src/utils/form/parseQueryForm.js index 92126fbc7c620b5b30e861dd77af06710f398610..5e94a0e40eccacd584d4afab05cae3edadff1948 100644 --- a/src/utils/form/parseQueryForm.js +++ b/src/utils/form/parseQueryForm.js @@ -5,6 +5,7 @@ import parseIVOAForm from "./parseIVOAForm"; import parseApertifForm from "./parseApertifForm"; import parseASTRONVOForm from "./parseASTRONVOForm"; import parseRucioForm from "./parseRucioForm"; +import parseZenodoForm from "./parseZenodoForm"; export default function parseQueryForm(gui, formData) { switch (gui) { @@ -22,6 +23,8 @@ export default function parseQueryForm(gui, formData) { return parseIVOAForm(formData); case "rucio": return parseRucioForm(formData); + case "zenodo": + return parseZenodoForm(formData); default: return null; } diff --git a/src/utils/form/parseZenodoForm.js b/src/utils/form/parseZenodoForm.js new file mode 100644 index 0000000000000000000000000000000000000000..fe48ec2b8cd51abd8b7eddd618580231969d65ac --- /dev/null +++ b/src/utils/form/parseZenodoForm.js @@ -0,0 +1,21 @@ +export default function parseZenodoForm(formData) { + let formInput = Object.entries(formData); + + let query = ""; + + for (let [key, value] of formInput) { + query += `${`${query}` ? "&" : ""}` + key + "=" + value; + } + + let esapquery = [ + query, + "archive_uri=esap_zenodo", + `catalog=zenodo`, + ].join("&"); + + console.log("Zenodo Query", query); + return [{ + catalog: "zenodo", + esapquery: esapquery + }]; +}