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