From 499c0ef0124b380e5aa647bc397018963885d353 Mon Sep 17 00:00:00 2001
From: meyer <meyer@astron.nl>
Date: Tue, 17 Nov 2020 19:54:29 +0100
Subject: [PATCH] parse all results fields from ivoa query

---
 src/components/query/Preview.js           |  4 +-
 src/components/query/QueryIVOARegistry.js | 32 +++++++---
 src/components/query/VOServiceResults.js  | 76 ++++++++++++-----------
 src/contexts/GlobalContext.js             |  3 +-
 4 files changed, 70 insertions(+), 45 deletions(-)

diff --git a/src/components/query/Preview.js b/src/components/query/Preview.js
index 05cb708..531122a 100644
--- a/src/components/query/Preview.js
+++ b/src/components/query/Preview.js
@@ -3,10 +3,10 @@ import { Image } from 'react-bootstrap';
 import { QueryContext } from '../../contexts/QueryContext';
 
 export default function Preview() {
-    const { preview, ds9, url, key  } = useContext(QueryContext);
+    const { preview, ds9, url } = useContext(QueryContext);
     return (
         <>
-        {console.log("key: ", key)}
+        {console.log("preview: ", preview)}
         {console.log("url: ", url)}
         {(preview &&
             (ds9 ? 
diff --git a/src/components/query/QueryIVOARegistry.js b/src/components/query/QueryIVOARegistry.js
index b907331..0a1a59e 100644
--- a/src/components/query/QueryIVOARegistry.js
+++ b/src/components/query/QueryIVOARegistry.js
@@ -88,18 +88,36 @@ export default function QueryIVOARegistry() {
       axios
         .get(url)
         .then((queryResponse) => {
-          queryMap.set(query.catalog, {
-            catalog: query.catalog,
-            service_type: query.service_type,
-            esapquery: query.esapquery,
-            status: "fetched",
-            results: queryResponse.data,
-          });
+          if(queryStep === "run-query") {
+          let tf_url = api_host + "query/get-tables-fields/?dataset_uri=vo_reg&access_url=" + query.catalog;
+          console.log("table fields url: ", tf_url);
+          axios
+            .get(tf_url)
+            .then((tfResponse) => {
+              queryMap.set(query.catalog, {
+                catalog: query.catalog,
+                service_type: query.service_type,
+                vo_table_schema: tfResponse.data.results.find((item) => item.table_name === "ivoa.obscore"),
+                esapquery: query.esapquery,
+                status: "fetched",
+                results: queryResponse.data,
+              });
+            })
+          }
+          else {
+            queryMap.set(query.catalog, {
+              catalog: query.catalog,
+              service_type: query.service_type,
+              esapquery: query.esapquery,
+              status: "fetched",
+              results: queryResponse.data,
+          })};                      
         })
         .catch(() => {
           queryMap.set(query.catalog, {
             catalog: query.catalog,
             service_type: query.service_type,
+            vo_table_schema:"",
             esapquery: query.esapquery,
             status: "error",
             results: null,
diff --git a/src/components/query/VOServiceResults.js b/src/components/query/VOServiceResults.js
index 74bf81c..dd530e7 100644
--- a/src/components/query/VOServiceResults.js
+++ b/src/components/query/VOServiceResults.js
@@ -1,5 +1,7 @@
 import React, { useContext } from "react";
 import { Alert, Table, Button } from "react-bootstrap";
+import axios from "axios";  
+import { GlobalContext } from "../../contexts/GlobalContext";
 import { QueryContext } from "../../contexts/QueryContext";
 import LoadingSpinner from "../LoadingSpinner";
 import Paginate from "../Paginate";
@@ -7,6 +9,7 @@ import Preview from "./Preview";
 
 export default function VORegistryResults({ catalog }) {
   const { queryMap, page, setPage, preview, setPreview, setURL, setDS9 } = useContext(QueryContext);
+  const { api_host } = useContext(GlobalContext);
 
   if (!queryMap.get(catalog)) return null;
   console.log("VO service queryMap:", queryMap.get(catalog));
@@ -35,48 +38,51 @@ export default function VORegistryResults({ catalog }) {
         <Table className="mt-3" responsive>
           <thead>
             <tr className="bg-light">
-              <th>Link to data</th>
-              <th></th>
+              {queryMap.get(catalog).vo_table_schema.fields.map((field) => {
+                return (
+                  <th>{field.name}</th>             
+              );
+              })}
             </tr>
           </thead>
           <tbody>
             {queryMap.get(catalog).results.results.map((result) => {
+
+              let queryResult = result.result.split(",");
+              console.log(queryResult);
               return (
                 <>
-                  <tr key={result.result}>
-                    <td>
-                      <a href={result.result} rel="noopener noreferrer" download>
-                        {result.result}
-                      </a>
-                    </td>
-                    <td>
-                      {/* if results is in .fits format and is smaller than 10 MB,
-                      display it with js9 */}
-                      {((result.result.includes('fits')  || (result.result.includes('FITS'))) && 
-                        Number(result.size) < 10000) ? 
-                        (<Button 
-                          onClick={() => {
-                            preview ? setPreview("") : setPreview(result.result);
-                            setURL(result.result);
-                            //setDS9(true);
-                          }}
-                        >View fits with DS9</Button>) :
-                        (result.thumbnail && (
-                          <Button
-                              onClick={()=>{
-                                  preview ? setPreview("") : setPreview(result.result);
-                                  setURL(result.thumbnail);
-                              }}
-                          >
-                              View Thumbnail
-                          </Button>
-                      ))}
-                    </td>
+                  <tr key={queryResult[queryMap.get(catalog).vo_table_schema.fields.findIndex((item) => item.name === "access_url")]}>
+                    {queryResult.map((field, index) => {
+                      if (queryMap.get(catalog).vo_table_schema.fields[index].name === "access_url") {
+                        return (<td><a href={field} rel="noopener noreferrer" download>Download data</a></td>);
+                      }
+                      if (queryMap.get(catalog).vo_table_schema.fields[index].name === "obs_publisher_did") {
+                        return (<td><a href={field} rel="noopener noreferrer">Obs Publisher DID</a></td>);
+                      }
+                      if (queryMap.get(catalog).vo_table_schema.fields[index].name === "preview") {
+                        return (<td>
+                          {
+                            <Button
+                                onClick={()=>{
+                                    setPreview(field);
+                                    setURL(field);
+                                }}
+                            >
+                                View Thumbnail
+                            </Button>
+                          }
+                        </td> );
+                      }
+                      return (<td>{field}</td>) ;
+                    })}
                   </tr>
-                  {preview === result.result && 
-                    <tr key={result.result}>
-                      <td colSpan="2" ><Preview /></td>
-                    </tr>}
+                  { 
+                    preview === queryResult[queryMap.get(catalog).vo_table_schema.fields.findIndex((item) => item.name === "preview")] && 
+                      <tr key={queryResult.preview}>
+                        <td colSpan={queryResult.length} ><Preview /></td>
+                      </tr>
+                  }
                 </>
               );
             })}
diff --git a/src/contexts/GlobalContext.js b/src/contexts/GlobalContext.js
index ffd21c1..f76cf0c 100644
--- a/src/contexts/GlobalContext.js
+++ b/src/contexts/GlobalContext.js
@@ -10,9 +10,10 @@ export function GlobalContextProvider({ children }) {
   console.log("ASTRON ESAP version ", Date());
   const api_host =
     process.env.NODE_ENV === "development"
-      ? "http://localhost:5555/esap-api/"
+      ? "https://sdc.astron.nl:5555/esap-api/"
       : "/esap-api/";
   // "https://sdc.astron.nl:5555/esap-api/"
+  // "http://localhost:5555/esap-api/"
 
   const [archives, setArchives] = useState();
   useEffect(() => {
-- 
GitLab