From dfc91d690f645a1c8c21c0d1cdeb2c1106208208 Mon Sep 17 00:00:00 2001
From: ghughes1066 <gareth.hughe@cta-observatory.org>
Date: Mon, 18 Oct 2021 20:25:10 +0200
Subject: [PATCH] First attempt to return DIRAC results - not working yet

---
 src/components/DIRAC.js                       | 13 +++++
 src/components/query/QueryCatalogs.js         |  3 ++
 .../services/query_results/DIRACResults.js    | 48 +++++++++++++++++++
 .../services/query_results/QueryResults.js    |  3 ++
 src/utils/form/parseDIRACForm.js              | 21 ++++++++
 src/utils/form/parseQueryForm.js              |  3 ++
 6 files changed, 91 insertions(+)
 create mode 100644 src/components/DIRAC.js
 create mode 100644 src/components/services/query_results/DIRACResults.js
 create mode 100644 src/utils/form/parseDIRACForm.js

diff --git a/src/components/DIRAC.js b/src/components/DIRAC.js
new file mode 100644
index 0000000..6ab4fe5
--- /dev/null
+++ b/src/components/DIRAC.js
@@ -0,0 +1,13 @@
+import React from "react";
+
+export default function DIRAC() {
+  return (
+    <div className="embed-responsive embed-responsive-16by9">
+      <iframe
+        title="dirac"
+        className="embed-responsive-item"
+        allowFullScreen
+      ></iframe>
+    </div>
+  );
+}
diff --git a/src/components/query/QueryCatalogs.js b/src/components/query/QueryCatalogs.js
index bc5a17e..43b6bd5 100644
--- a/src/components/query/QueryCatalogs.js
+++ b/src/components/query/QueryCatalogs.js
@@ -39,6 +39,9 @@ export default function QueryCatalogs() {
       case "esap_zenodo":
         setConfigName("esap_zenodo");
         break;
+      case "esap_dirac":
+        setConfigName("esap_dirac");
+        break;
       case "astron_vo":
         setConfigName("astron_vo");
         break;
diff --git a/src/components/services/query_results/DIRACResults.js b/src/components/services/query_results/DIRACResults.js
new file mode 100644
index 0000000..4a55c7c
--- /dev/null
+++ b/src/components/services/query_results/DIRACResults.js
@@ -0,0 +1,48 @@
+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 DIRACResults({ catalog }) {
+  const context = useContext(QueryContext);
+  const { queryMap, page, setPage } = context;
+  const regex = /(<([^>]+)>)/ig;
+
+  if (!context.queryMap) return null;
+
+  if (context.queryMap.get(catalog).status === "fetched") {
+    if (context.queryMap.get(catalog).length === 0)
+      return <Alert variant="warning">No matching results found!</Alert>;
+    else if (catalog === "dirac") {
+      const diracResults = queryMap.get("dirac").map((hits, counter) => (
+/*
+        <>
+        <br/>
+        <br/>
+        <h4><a href={hits.links.latest_html} target="_blank"> {hits.metadata.title.replaceAll(regex, '')} </a></h4>
+        <a href={hits.links.conceptdoi} target="_blank"> <img src={hits.links.badge} alt="DOI"/> </a>
+        <br/>
+        {hits.metadata.description.replaceAll(regex, '').substring(0,200)}...
+        </>
+*/
+<>
+</>
+      ));
+
+      return (
+
+       <>
+         {diracResults}
+       </>
+
+      ); 
+
+    }
+  }
+  else {
+    return <LoadingSpinner />;
+  }
+}
+
diff --git a/src/components/services/query_results/QueryResults.js b/src/components/services/query_results/QueryResults.js
index 79c2e35..c98f36f 100644
--- a/src/components/services/query_results/QueryResults.js
+++ b/src/components/services/query_results/QueryResults.js
@@ -6,6 +6,7 @@ import VORegListResults from "./VORegListResults";
 import LOFARResults from "./LOFARResults";
 import RucioResults from "./RucioResults";
 import ZenodoResults from "./ZenodoResults";
+import DIRACResults from "./DIRACResults";
 import SampResults from "./SampResults";
 
 export default function QueryResults({ catalog }) {
@@ -26,6 +27,8 @@ export default function QueryResults({ catalog }) {
       return <RucioResults catalog={catalog} />;
     case "zenodo":
       return <ZenodoResults catalog={catalog} />;
+    case "dirac":
+      return <DIRACResults catalog={catalog} />;
     case "samp":
       return <SampResults catalog={catalog} />;
     default:
diff --git a/src/utils/form/parseDIRACForm.js b/src/utils/form/parseDIRACForm.js
new file mode 100644
index 0000000..7440fbe
--- /dev/null
+++ b/src/utils/form/parseDIRACForm.js
@@ -0,0 +1,21 @@
+export default function parseDIRACForm(formData) {
+  let formInput = Object.entries(formData);
+
+  let query = "";
+
+  for (let [key, value] of formInput) {
+    query += `${`${query}` ? "&" : ""}` + key + "=" + value;
+  }
+
+  let esapquery = [
+    query,
+    "archive_uri=esap_dirac",
+    `catalog=dirac`,
+  ].join("&");
+
+  console.log("DIRAC Job Submission (helloworld):", query);
+  return [{
+    catalog: "dirac",
+    esapquery: esapquery
+  }];
+}
diff --git a/src/utils/form/parseQueryForm.js b/src/utils/form/parseQueryForm.js
index 5e94a0e..5b52413 100644
--- a/src/utils/form/parseQueryForm.js
+++ b/src/utils/form/parseQueryForm.js
@@ -6,6 +6,7 @@ import parseApertifForm from "./parseApertifForm";
 import parseASTRONVOForm from "./parseASTRONVOForm";
 import parseRucioForm from "./parseRucioForm";
 import parseZenodoForm from "./parseZenodoForm";
+import parseDIRACForm from "./parseDIRACForm";
 
 export default function parseQueryForm(gui, formData) {
   switch (gui) {
@@ -25,6 +26,8 @@ export default function parseQueryForm(gui, formData) {
         return parseRucioForm(formData);
     case "zenodo":
         return parseZenodoForm(formData);
+    case "dirac":
+        return parseDIRACForm(formData);
     default:
       return null;
   }
-- 
GitLab