diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c0f2c9466999f885671d41fc7551809771df1fae..0eb6616f7a5d9dfb95eae9edaf5b3fb27436412d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -39,8 +39,8 @@ deploy-esap-gui: - echo "Deployed" when: manual only: - - esap-gui-dev - - dev-nico + - esap-gui-dev-xxx + - dev-nico-xxx - master deploy-esap-gui-acceptance: diff --git a/src/assets/Interactive.css b/src/assets/Interactive.css index c8313892dc210d3c1ff610bb3f7e0c6e00cdbb49..91d5935f8b8bafa2216fafffebda08ce0efc9439 100644 --- a/src/assets/Interactive.css +++ b/src/assets/Interactive.css @@ -72,7 +72,7 @@ transition: transform 0.15s ease-out, font-size 0.15s ease-out, background-color 0.2s ease-out, color 0.15s ease-out; } -input[type=text], .placeholder-text{ +.ida input[type=text], .placeholder-text{ font-size: 1.4rem; padding: 0 1.2rem; diff --git a/src/components/basket/MyBasketPage.js b/src/components/basket/MyBasketPage.js index ca43ca05f67fbb7a452b6477549866c82d0b676b..565641a384ac21cc17b9b71d4d8ce33cc0e8d23d 100644 --- a/src/components/basket/MyBasketPage.js +++ b/src/components/basket/MyBasketPage.js @@ -10,6 +10,7 @@ import APIButton from "./APIButton" import EmptyBasketButton from "./EmptyBasketButton" import { renderRowApertif, renderHeaderApertif } from "../services/layout/ApertifResultsLayout" import { renderRowAstronVO, renderHeaderAstronVO } from "../services/layout/AstronVOLayout" +import { renderRowIVOA, renderHeaderIVOA } from "../services/layout/IVOALayout" function renderRow(item) { switch(item.archive) { @@ -44,6 +45,21 @@ function renderRow(item) { </Table> </div> + case 'TODO_vo_reg': + + return <div> + <Table className="mt-3" size="sm" responsive> + <thead> + <tr className="bg-light"> + {renderHeaderIVOA()} + </tr> + </thead> + <tbody> + {renderRowIVOA((item.record))} + </tbody> + </Table> + </div> + default: return JSON.stringify(item) } diff --git a/src/components/query/QueryIVOARegistry.js b/src/components/query/QueryIVOARegistry.js index df0269691c4ba52234cf965107741186d4752e2d..7b6d07d098681b5baae506b41ae8f12b667beb2d 100644 --- a/src/components/query/QueryIVOARegistry.js +++ b/src/components/query/QueryIVOARegistry.js @@ -9,7 +9,7 @@ import QueryResults from "../services/query_results/QueryResults"; import parseQueryForm from "../../utils/form/parseQueryForm"; import { IVOAContext } from "../../contexts/IVOAContext"; import parseVOServiceForm from "../../utils/form/parseVOServiceForm"; -import VOServiceResults from "../services/query_results/VOServiceResults"; +import VOServiceResults from "../services/query_results/IVOAResults"; import { getQueryIcon } from "../../utils/styling"; export default function QueryIVOARegistry() { @@ -78,7 +78,6 @@ export default function QueryIVOARegistry() { 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) => { @@ -208,7 +207,7 @@ export default function QueryIVOARegistry() { <div key={catalog} className="mt-3"> <Row> <Col> - <h4>List of Services</h4> + <h4>List of VO Resources</h4> </Col> <Col> {selectedServices.length === 0 ? ( diff --git a/src/components/services/layout/IVOALayout.js b/src/components/services/layout/IVOALayout.js new file mode 100644 index 0000000000000000000000000000000000000000..f5f8e02dee1f3c422847a8255cfd88a840a15af8 --- /dev/null +++ b/src/components/services/layout/IVOALayout.js @@ -0,0 +1,62 @@ +import React, { useContext, useState, useEffect } from "react"; +import { Button } from "react-bootstrap"; +import Preview from "../../query/Preview"; + +export function renderHeaderIVOA(queryMap, catalog, indice) { + + return (<> + {queryMap.get(catalog).vo_table_schema.fields.map((field, index) => { + if ((field.name === "dataproduct_type") || (field.name === "dataproduct_subtype") || + (field.name === "calib_level") || (field.name === "obs_collection") || + (field.name === "obs_id") || + (field.name === "calib_level") || (field.name === "access_url") || + (field.name === "access_estsize") || (field.name === "target_name") || + (field.name === "s_ra") || (field.name === "s_dec") || + (field.name === "s_fov") || + (field.name === "instrument_name") || (field.name === "preview") + ) { + indice.push(index); + return (<th>{field.name}</th>); + } + return null; + })} + </> + ); +} + +export function renderRowIVOA(queryResult, queryMap, catalog, indice, setPreview, setURL) { + + return (<> + {queryResult.map((field, index) => { + + if (indice.includes(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 === "preview") { + return (<td> + { + <Button + onClick={()=>{ + setPreview(field); + setURL(field); + }} + > + View Thumbnail + </Button> + } + </td> ); + } + if ((queryMap.get(catalog).vo_table_schema.fields[index].name === "s_ra") || + (queryMap.get(catalog).vo_table_schema.fields[index].name === "s_dec") || + (queryMap.get(catalog).vo_table_schema.fields[index].name === "s_fov") + ) { + return (<td>{Number(field).toFixed(1)}</td>) + } + return (<td>{field}</td>) ; + } + return null; + })} + </> + ); +} diff --git a/src/components/services/query_results/IVOAResults.js b/src/components/services/query_results/IVOAResults.js new file mode 100644 index 0000000000000000000000000000000000000000..334e689b8c0218f33134bd032b03c28b8992d52d --- /dev/null +++ b/src/components/services/query_results/IVOAResults.js @@ -0,0 +1,92 @@ +import React, { useContext } from "react"; +import { Alert, Table, Button } from "react-bootstrap"; +import { QueryContext } from "../../../contexts/QueryContext"; +import LoadingSpinner from "../../LoadingSpinner"; +import Paginate from "../../Paginate"; +import Preview from "../../query/Preview"; +import AddToBasket from "../../basket/AddToBasketCheckBox"; +import { renderHeaderIVOA, renderRowIVOA } from "../layout/IVOALayout" + +function createBasketItem(record){ + return { + archive: "vo_reg", + record: record, + }; +} + +export default function IVOAResults({ catalog }) { + const { queryMap, page, setPage, preview, setPreview, setURL } = useContext(QueryContext); + + if (!queryMap.get(catalog)) return null; + console.log("VO service queryMap:", queryMap.get(catalog)); + + if (queryMap.get(catalog).status === "fetched") { + // if (queryMap.get(catalog).results[0].includes("ERROR")) + // return ( + // <Alert variant="warning">{queryMap.get(catalog).results[0]}</Alert> + // ); + try { + if (queryMap.get(catalog).results.results.length === 0) + return <Alert variant="warning">No matching results found!</Alert>; + } catch (e) { + return <Alert variant="warning">No matching results found!</Alert>; + } + + const numPages = queryMap.get(catalog).results.pages; + let indice = []; + + return ( + <div> + <h1>Results from {catalog}</h1> + <Paginate + getNewPage={(args) => { + return args.target ? setPage(parseFloat(args.target.text)) : null; + }} + currentPage={page} + numAdjacent={3} + numPages={numPages} + /> + + <Table className="mt-3" responsive> + <thead> + <tr className="bg-light"> + <th>Basket</th> + {renderHeaderIVOA(queryMap, catalog, indice)} + <th></th> + </tr> + + </thead> + <tbody> + {queryMap.get(catalog).results.results.map((result) => { + + let queryResult = result.result.split(","); + + return ( + <> + <tr key={queryResult[queryMap.get(catalog).vo_table_schema.fields.findIndex((item) => item.name === "access_url")]}> + <td> + <AddToBasket id={result.id} item={createBasketItem(queryResult)} /> + </td> + {renderRowIVOA(queryResult, queryMap, catalog, indice, setPreview, setURL)} + + </tr> + { + preview === queryResult[queryMap.get(catalog).vo_table_schema.fields.findIndex((item) => item.name === "preview")] && + <tr key={queryResult.preview}> + <td></td> + <td></td> + <td></td> + <td colSpan={queryResult.length-3} ><Preview /></td> + </tr> + } + </> + ); + })} + </tbody> + </Table> + </div> + ); + } else { + return <LoadingSpinner />; + } +} diff --git a/src/components/services/query_results/VOServiceResults.js b/src/components/services/query_results/VOServiceResults.js deleted file mode 100644 index d5e73265782d8286282655b6378d19a4de9d3f65..0000000000000000000000000000000000000000 --- a/src/components/services/query_results/VOServiceResults.js +++ /dev/null @@ -1,116 +0,0 @@ -import React, { useContext } from "react"; -import { Alert, Table, Button } from "react-bootstrap"; -import { QueryContext } from "../../../contexts/QueryContext"; -import LoadingSpinner from "../../LoadingSpinner"; -import Paginate from "../../Paginate"; -import Preview from "../../query/Preview"; - -export default function VORegistryResults({ catalog }) { - const { queryMap, page, setPage, preview, setPreview, setURL } = useContext(QueryContext); - - if (!queryMap.get(catalog)) return null; - console.log("VO service queryMap:", queryMap.get(catalog)); - - if (queryMap.get(catalog).status === "fetched") { - // if (queryMap.get(catalog).results[0].includes("ERROR")) - // return ( - // <Alert variant="warning">{queryMap.get(catalog).results[0]}</Alert> - // ); - if (queryMap.get(catalog).results.results.length === 0) - return <Alert variant="warning">No matching results found!</Alert>; - - const numPages = queryMap.get(catalog).results.pages; - let indice = []; - - return ( - <div> - <h1>Results from {catalog}</h1> - <Paginate - getNewPage={(args) => { - return args.target ? setPage(parseFloat(args.target.text)) : null; - }} - currentPage={page} - numAdjacent={3} - numPages={numPages} - /> - - <Table className="mt-3" responsive> - <thead> - <tr className="bg-light"> - {queryMap.get(catalog).vo_table_schema.fields.map((field, index) => { - if ((field.name === "dataproduct_type") || (field.name === "dataproduct_subtype") || - (field.name === "calib_level") || (field.name === "obs_collection") || - (field.name === "obs_id") || - (field.name === "calib_level") || (field.name === "access_url") || - (field.name === "access_estsize") || (field.name === "target_name") || - (field.name === "s_ra") || (field.name === "s_dec") || - (field.name === "s_fov") || - (field.name === "instrument_name") || (field.name === "preview") - ) { - indice.push(index); - return (<th>{field.name}</th>); - } - return null; - })} - </tr> - </thead> - <tbody> - {queryMap.get(catalog).results.results.map((result) => { - - let queryResult = result.result.split(","); - - return ( - <> - <tr key={queryResult[queryMap.get(catalog).vo_table_schema.fields.findIndex((item) => item.name === "access_url")]}> - - {queryResult.map((field, index) => { - - if (indice.includes(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 === "preview") { - return (<td> - { - <Button - onClick={()=>{ - setPreview(field); - setURL(field); - }} - > - View Thumbnail - </Button> - } - </td> ); - } - if ((queryMap.get(catalog).vo_table_schema.fields[index].name === "s_ra") || - (queryMap.get(catalog).vo_table_schema.fields[index].name === "s_dec") || - (queryMap.get(catalog).vo_table_schema.fields[index].name === "s_fov") - ) { - return (<td>{Number(field).toFixed(1)}</td>) - } - return (<td>{field}</td>) ; - } - return null; - })} - </tr> - { - preview === queryResult[queryMap.get(catalog).vo_table_schema.fields.findIndex((item) => item.name === "preview")] && - <tr key={queryResult.preview}> - <td></td> - <td></td> - <td></td> - <td colSpan={queryResult.length-3} ><Preview /></td> - </tr> - } - </> - ); - })} - </tbody> - </Table> - </div> - ); - } else { - return <LoadingSpinner />; - } -} diff --git a/src/routes/Routes.js b/src/routes/Routes.js index 6b50663aa3d4208f1c3e7cd2c28ec9881c95977a..08970e08824b2bcf9f40efbeb584b659c65f4be6 100644 --- a/src/routes/Routes.js +++ b/src/routes/Routes.js @@ -90,7 +90,7 @@ export default function Routes() { </Switch> - <footer><small>esap-gui version 8 oct 2021 - 12:30</small></footer> + <footer><small>esap-gui version 8 oct 2021 - 15:30</small></footer> </Router> ); }