diff --git a/src/components/Interactive.js b/src/components/Interactive.js index b3508f3beaf43e391098e289588ba751960d6a54..e219659de3e859639ca23cd1d4825e69099fceb4 100644 --- a/src/components/Interactive.js +++ b/src/components/Interactive.js @@ -3,6 +3,13 @@ import { Alert } from "react-bootstrap"; export default function Interactive() { return ( + // <div class="embed-responsive embed-responsive-16by9"> + // <iframe + // class="embed-responsive-item" + // src="http://130.246.212.44/escape/" + // allowfullscreen + // ></iframe> + // </div> <Alert variant="warning"> <p>You will leave ESAP GUI and be redirected to</p> <a diff --git a/src/components/Rucio.js b/src/components/Rucio.js index 6dd2613edf49f20b5644027270190debe7f9ff91..5c774b321cc77f3d06a808226f0fb9e36b5e248e 100644 --- a/src/components/Rucio.js +++ b/src/components/Rucio.js @@ -1,17 +1,13 @@ import React from "react"; -import { Alert } from "react-bootstrap"; export default function Rucio() { return ( - <Alert variant="warning"> - <p>You will leave ESAP GUI and be redirected to</p> - <a - target="_blank" - rel="noopener noreferrer" - href="https://escape-dios-dl.cern.ch/ui/" - > - Rucio Web UI - </a> - </Alert> + <div class="embed-responsive embed-responsive-16by9"> + <iframe + class="embed-responsive-item" + src="https://escape-rucio.cern.ch" + allowfullscreen + ></iframe> + </div> ); } diff --git a/src/components/query/ASTRONVOResults.js b/src/components/query/ASTRONVOResults.js index 1a5735b385b6690444b403f2acf21d0739a5773a..4afee0463dd113272be9b02b5adf32caecb8babd 100644 --- a/src/components/query/ASTRONVOResults.js +++ b/src/components/query/ASTRONVOResults.js @@ -5,14 +5,26 @@ import LoadingSpinner from "../LoadingSpinner"; import Paginate from "../Paginate"; export default function ASTRONVOResults({ catalog }) { - const { queryMap } = useContext(QueryContext); + const { queryMap, page, setPage } = useContext(QueryContext); if (!queryMap) return null; if (queryMap.get(catalog).status === "fetched") { + if (!("results" in queryMap.get(catalog).results)) + return <Alert variant="warning">{queryMap.get(catalog).results}</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; console.log(queryMap.get(catalog).results.results); return ( <> + <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"> diff --git a/src/components/query/ApertifResults.js b/src/components/query/ApertifResults.js index b360f12e6653e6da0080e96407dcd16fbfc4f24f..40d1519372eaf0bf4d0c8e5d877a01f17ea64384 100644 --- a/src/components/query/ApertifResults.js +++ b/src/components/query/ApertifResults.js @@ -5,14 +5,26 @@ import LoadingSpinner from "../LoadingSpinner"; import Paginate from "../Paginate"; export default function ApertifResults({ catalog }) { - const { queryMap } = useContext(QueryContext); + const { queryMap, page, setPage } = useContext(QueryContext); if (!queryMap) return null; if (queryMap.get(catalog).status === "fetched") { + if (!("results" in queryMap.get(catalog).results)) + return <Alert variant="warning">{queryMap.get(catalog).results}</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; console.log("Query results:", queryMap.get(catalog).results.results); return ( <> + <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"> @@ -71,7 +83,6 @@ export default function ApertifResults({ catalog }) { })} </tbody> </Table> - {/* <Paginate /> */} </> ); } else { diff --git a/src/components/query/LOFARResults.js b/src/components/query/LOFARResults.js new file mode 100644 index 0000000000000000000000000000000000000000..f6a7af2a5233f981095fa1e9c6b9ccb4f339f061 --- /dev/null +++ b/src/components/query/LOFARResults.js @@ -0,0 +1,98 @@ +import React, { useContext } from "react"; +import { Table, Alert } from "react-bootstrap"; +import { QueryContext } from "../../contexts/QueryContext"; +import LoadingSpinner from "../LoadingSpinner"; +import Paginate from "../Paginate"; + +export default function LOFARResults({ catalog }) { + const { queryMap, page, setPage } = useContext(QueryContext); + if (!queryMap) return null; + if (queryMap.get(catalog).status === "fetched") { + if (!("results" in queryMap.get(catalog).results)) + return <Alert variant="warning">{queryMap.get(catalog).results}</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; + console.log("Query results:", queryMap.get(catalog).results.results); + return ( + <> + {/* <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> + <InputGroup> + <InputGroup.Checkbox /> + </InputGroup> + </th> */} + <th>Project</th> + <th>SAS ID</th> + <th>Target Name</th> + <th>RA</th> + <th>Dec</th> + <th>Release Date</th> + <th>Start Time</th> + <th>Duration</th> + <th>Pipeline</th> + <th>Antenna Set</th> + <th>Instrument Filter</th> + </tr> + </thead> + <tbody> + {queryMap.get(catalog).results.results.map((result) => { + return ( + <tr key={result.PID}> + {/* <th> + <InputGroup> + <InputGroup.Checkbox /> + </InputGroup> + </th> */} + <td>{result.project}</td> + <td>{result.sas_id}</td> + <td>{result.target}</td> + <td>{Number(result.ra).toFixed(1)}</td> + <td>{Number(result.dec).toFixed(1)}</td> + <td>{result.releaseDate}</td> + <td>{result.startTime}</td> + <td>{result.duration}</td> + <td>{result.pipeline}</td> + <td>{result.antennaSet}</td> + <td>{result.instrumentFilter}</td> + {/* <td> + <a + href={result.url} + target="_blank" + rel="noopener noreferrer" + > + View data + </a> + {result.dataProductSubType === "continuumMF" ? ( + <a + href={result.thumbnail} + target="_blank" + rel="noopener noreferrer" + className="ml-3" + > + Thumbnail + </a> + ) : null} + </td> */} + </tr> + ); + })} + </tbody> + </Table> + </> + ); + } else { + return <LoadingSpinner />; + } +} diff --git a/src/components/query/QueryADEX.js b/src/components/query/QueryADEX.js new file mode 100644 index 0000000000000000000000000000000000000000..f282ec4d7d0ce0024ece1a857ff7ceedf83d8a39 --- /dev/null +++ b/src/components/query/QueryADEX.js @@ -0,0 +1,152 @@ +import React, { useContext, useEffect } from "react"; +import { useParams, useHistory } from "react-router-dom"; +import axios from "axios"; +import { Container } from "react-bootstrap"; +import Form from "react-jsonschema-form"; +import { GlobalContext } from "../../contexts/GlobalContext"; +import { QueryContext } from "../../contexts/QueryContext"; +import QueryResults from "./QueryResults"; +import parseQueryForm from "../../utils/form/parseQueryForm"; + +export default function QueryCatalogs() { + // queryMap is a map of dictionaries, where each dictionary consists of + // {"catalog": "catalogname", + // "catalogquery": "querystring", + // "status": "fetching|fechted", + // "results": null} + const { queryMap, formData, setFormData, page } = useContext(QueryContext); + const { config, api_host, setConfigName, defaultConf } = useContext( + GlobalContext + ); + const { uri } = useParams(); + const history = useHistory(); + console.log("uri:", uri); + console.log("default conf:", defaultConf); + + // set ConfigName for archive + useEffect(() => { + switch (uri) { + case "adex": + setConfigName("adex"); + break; + case "apertif": + setConfigName("apertif"); + break; + case "zooniverse": + setConfigName("zooniverse"); + break; + case "astron_vo": + setConfigName("astron_vo"); + break; + case "lofar": + setConfigName("lofar"); + break; + } + return () => { + console.log("cleaned up"); + queryMap.clear(); + setFormData(); + setConfigName(uri); + }; + }, [uri]); + + useEffect(() => { + console.log(config.query_schema); + if (!formData) return; + const gui = config.query_schema.name; + const queries = parseQueryForm(gui, formData, page); + + // Ideally query for each catalog is sent to ESAP API Gateway, and query results is returned + // This is under development in the backend at the moment + queryMap.clear(); + queries.forEach((query) => { + queryMap.set(query.catalog, { + catalog: query.catalog, + esapquery: query.esapquery, + status: "fetching", + results: null, + }); + const url = api_host + "query/query/?" + query.esapquery; + axios + .get(url) + .then((queryResponse) => { + queryMap.set(query.catalog, { + catalog: query.catalog, + esapquery: query.esapquery, + status: "fetched", + results: queryResponse.data, + }); + }) + .catch(() => { + queryMap.set(query.catalog, { + catalog: query.catalog, + esapquery: query.esapquery, + status: "error", + results: null, + }); + }); + }); + }, [formData, page]); + + function formTemplate({ TitleField, properties, title, description }) { + return ( + <div> + <TitleField title={title} /> + <div className="row"> + {properties.map((prop) => ( + <div + className="col-lg-2 col-md-4 col-sm-6 col-xs-12" + key={prop.content.key} + > + {prop.content} + </div> + ))} + </div> + {description} + </div> + ); + } + + console.log("queryMap", Array.from(queryMap.values())); + + const uiSchemaProp = config.ui_schema ? { uiSchema: config.ui_schema } : {}; + return ( + <Container fluid> + <Form + schema={config.query_schema} + ObjectFieldTemplate={formTemplate} + formData={formData} + onBlur={(field, value) => { + if (field == "root_catalog") { + console.log("Change query catalog to : ", value); + if (value == "adex") { + history.push("/query"); + } else { + history.push("/archives/" + value + "/query"); + } + } + }} + onSubmit={({ formData }) => setFormData(formData)} + {...uiSchemaProp} + ></Form> + {Array.from(queryMap.keys()).map((catalog) => { + console.log("catalog:", catalog); + const details = queryMap.get(catalog); + console.log("Details:", details); + console.log("Results:", details.results); + let catalogName = + config.query_schema.properties.catalog.enumNames[ + config.query_schema.properties.catalog.enum.findIndex( + (name) => name === catalog + ) + ]; + return ( + <div key={catalog} className="mt-3"> + <h4>Query results for {catalogName}</h4> + <QueryResults catalog={catalog} /> + </div> + ); + })} + </Container> + ); +} diff --git a/src/components/query/QueryCatalogs.js b/src/components/query/QueryCatalogs.js index 913d2aabf0450eb7cbfba1350a6b2bd375782360..44463f0997b1eecc2b92d2cd26017f81924482d7 100644 --- a/src/components/query/QueryCatalogs.js +++ b/src/components/query/QueryCatalogs.js @@ -1,5 +1,5 @@ import React, { useContext, useEffect } from "react"; -import { useParams } from "react-router-dom"; +import { useParams, useHistory } from "react-router-dom"; import axios from "axios"; import { Container } from "react-bootstrap"; import Form from "react-jsonschema-form"; @@ -15,9 +15,13 @@ export default function QueryCatalogs() { // "status": "fetching|fechted", // "results": null} const { queryMap, formData, setFormData, page } = useContext(QueryContext); - const { config, api_host, setConfigName } = useContext(GlobalContext); + const { config, api_host, setConfigName, defaultConf } = useContext( + GlobalContext + ); const { uri } = useParams(); - console.log(uri); + const history = useHistory(); + console.log("uri:", uri); + console.log("default conf:", defaultConf); // set ConfigName for archive useEffect(() => { @@ -37,12 +41,12 @@ export default function QueryCatalogs() { case "lofar": setConfigName("lofar"); break; - default: - setConfigName("esap_ivoa"); } return () => { console.log("cleaned up"); - setConfigName("esap_ivoa"); + queryMap.clear(); + setFormData(); + setConfigName(defaultConf); }; }, [uri]); diff --git a/src/components/query/QueryIVOARegistry.js b/src/components/query/QueryIVOARegistry.js index cf1101a5d9266a9e42c8ac3a5eb7ca5e00351250..2101a32bd39775a8db821b4e08b727f6a98580de 100644 --- a/src/components/query/QueryIVOARegistry.js +++ b/src/components/query/QueryIVOARegistry.js @@ -17,11 +17,16 @@ export default function QueryIVOARegistry() { // "catalogquery": "querystring", // "status": "fetching|fechted", // "results": null} - const { queryMap, formData, setFormData } = useContext(QueryContext); - const { config, api_host, setConfigName } = useContext(GlobalContext); - const { selectedRegistry, queryStep, setQueryStep } = useContext(IVOAContext); + const { queryMap, formData, setFormData, page } = useContext(QueryContext); + const { config, api_host, setConfigName, defaultConf } = useContext( + GlobalContext + ); + const { selectedRegistry, queryStep, setQueryStep, regPage } = useContext( + IVOAContext + ); const { uri } = useParams(); console.log("uri:", uri); + console.log("default conf: ", defaultConf); // set ConfigName for archive useEffect(() => { @@ -46,7 +51,7 @@ export default function QueryIVOARegistry() { } return () => { console.log("Set configuration back to default!"); - setConfigName("esap_ivoa"); + setConfigName(defaultConf); }; }, [uri]); @@ -59,16 +64,17 @@ export default function QueryIVOARegistry() { if (queryStep === "run-query") { selectedRegistry.forEach((access_url) => { - queries = [...queries, ...parseVOServiceForm(formData, access_url)]; + queries = [ + ...queries, + ...parseVOServiceForm(formData, access_url, page), + ]; }); } else { - queries = parseQueryForm(gui, formData); + queries = parseQueryForm(gui, formData, regPage); } console.log("queries:", queries); - // Ideally query for each catalog is sent to ESAP API Gateway, and query results is returned - // This is under development in the backend at the moment queryMap.clear(); queries.forEach((query) => { queryMap.set(query.catalog, { @@ -100,7 +106,7 @@ export default function QueryIVOARegistry() { }); }); }); - }, [formData]); + }, [formData, page, regPage]); function formTemplate({ TitleField, properties, title, description }) { return ( @@ -132,6 +138,7 @@ export default function QueryIVOARegistry() { query: { "ui:widget": "textarea" }, keyword: { "ui:widget": "hidden" }, tap_schema: { "ui:widget": "hidden" }, + waveband: { "ui:widget": "hidden" }, }; console.log("new ui schema:", uiSchemaProp); return ( diff --git a/src/components/query/QueryResults.js b/src/components/query/QueryResults.js index edc9542aed74a5a35a07649a4e78e932fe3c9c94..9350c83c30aedc7977b4ebdbb74c8587a15b1016 100644 --- a/src/components/query/QueryResults.js +++ b/src/components/query/QueryResults.js @@ -2,7 +2,8 @@ import React from "react"; import ApertifResults from "./ApertifResults"; import ASTRONVOResults from "./ASTRONVOResults"; import ZooniverseResults from "./ZooniverseResults"; -import VORegistryResults from "./VORegistryResults"; +import VORegListResults from "./VORegListResults"; +import LOFARResults from "./LOFARResults"; export default function QueryResults({ catalog }) { switch (catalog) { @@ -15,7 +16,9 @@ export default function QueryResults({ catalog }) { case "zooniverse_workflows": return <ZooniverseResults catalog={catalog} />; case "vo_reg": - return <VORegistryResults catalog={catalog} />; + return <VORegListResults catalog={catalog} />; + case "lofar": + return <LOFARResults catalog={catalog} />; default: return null; } diff --git a/src/components/query/VORegistryResults.js b/src/components/query/VORegListResults.js similarity index 89% rename from src/components/query/VORegistryResults.js rename to src/components/query/VORegListResults.js index d8481c93430700d4c8ef622cc70a238703f9fa6c..ad5f3c3849f71ebb5873291dbfe4b479d8446588 100644 --- a/src/components/query/VORegistryResults.js +++ b/src/components/query/VORegListResults.js @@ -5,7 +5,7 @@ import LoadingSpinner from "../LoadingSpinner"; import Paginate from "../Paginate"; import { IVOAContext } from "../../contexts/IVOAContext"; -export default function VORegistryResults({ catalog }) { +export default function VORegListResults({ catalog }) { const { queryMap } = useContext(QueryContext); const { selectedRegistry, @@ -13,6 +13,8 @@ export default function VORegistryResults({ catalog }) { removeRegistry, registryList, setRegistryList, + regPage, + setRegPage, } = useContext(IVOAContext); // const [checkAll, setCheckAll] = useState(""); @@ -35,8 +37,20 @@ export default function VORegistryResults({ catalog }) { setRegistryList(queryMap.get(catalog).results.results); console.log("Registry List:", registryList); + const numPages = queryMap.get(catalog).results.pages; + return ( <> + <Paginate + getNewPage={(args) => { + return args.target + ? setRegPage(parseFloat(args.target.text)) + : null; + }} + currentPage={regPage} + numAdjacent={3} + numPages={numPages} + /> <Table className="mt-3" responsive> <thead> <tr className="bg-light"> @@ -96,7 +110,6 @@ export default function VORegistryResults({ catalog }) { })} </tbody> </Table> - {/* <Paginate /> */} </> ); } else { diff --git a/src/components/query/VOServiceResults.js b/src/components/query/VOServiceResults.js index 0f9ee8c79bc649c1c5e2b91202a8dcea1c09145d..5617ff91dc7a2720e4fcce1f6c0720459fd46233 100644 --- a/src/components/query/VOServiceResults.js +++ b/src/components/query/VOServiceResults.js @@ -1,18 +1,36 @@ import React, { useContext } from "react"; import { Alert, Table } from "react-bootstrap"; import { QueryContext } from "../../contexts/QueryContext"; +import LoadingSpinner from "../LoadingSpinner"; +import Paginate from "../Paginate"; export default function VORegistryResults({ catalog }) { - const { queryMap } = useContext(QueryContext); + const { queryMap, page, setPage } = 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; + 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"> @@ -35,6 +53,8 @@ export default function VORegistryResults({ catalog }) { </Table> </div> ); + } else { + return <LoadingSpinner />; } return null; } diff --git a/src/contexts/GlobalContext.js b/src/contexts/GlobalContext.js index d8c42dcfbba472643df6364b482f3c14dfd3a148..b2471b44e9ca3fb85734436be94ea713300cfbdf 100644 --- a/src/contexts/GlobalContext.js +++ b/src/contexts/GlobalContext.js @@ -5,14 +5,16 @@ import getCookie from "../utils/getCookie"; export const GlobalContext = createContext(); export function GlobalContextProvider({ children }) { + const defaultConf = "esap_ivoa"; console.log("ASTRON ESAP version ", Date()); const api_host = process.env.NODE_ENV === "development" - ? "http://sdc.astron.nl:5555/esap-api/" + ? "http://localhost:15671/esap-api/" : "/esap-api/"; - + // "http://localhost:15671/esap-api/" + // "http://sdc.astron.nl:5557/esap-api/" const [config, setConfig] = useState(); - const [configName, setConfigName] = useState("esap_ivoa"); + const [configName, setConfigName] = useState(defaultConf); useEffect(() => { let configNameString = ""; @@ -63,6 +65,7 @@ export function GlobalContextProvider({ children }) { handleLogin, handleLogout, setConfigName, + defaultConf, }} > {children} diff --git a/src/contexts/IVOAContext.js b/src/contexts/IVOAContext.js index a5363958e05f9505b8046e3577721360e5c4b50d..6989ccdc0b4971d037bbc82f93e770a504cc8d19 100644 --- a/src/contexts/IVOAContext.js +++ b/src/contexts/IVOAContext.js @@ -7,6 +7,8 @@ export function IVOAContextProvider({ children }) { const [registryList, setRegistryList] = useState([]); const [selectedRegistry, setSelectedRegistry] = useState([]); const [queryStep, setQueryStep] = useState("get-services"); + const [regPage, setRegPage] = useState(1); + /* IVOA query steps: 1. get-services @@ -40,6 +42,8 @@ export function IVOAContextProvider({ children }) { selectedRegistry, addRegistry: handleAddRegistry, removeRegistry: handleRemoveRegistry, + regPage, + setRegPage, registryList, setRegistryList, queryStep, diff --git a/src/contexts/QueryContext.js b/src/contexts/QueryContext.js index e0ad5419511ddddacc8a575a820f7ae199e5a56e..9e19d21b718af67d828509b03a48a6e673af3b1d 100644 --- a/src/contexts/QueryContext.js +++ b/src/contexts/QueryContext.js @@ -7,6 +7,7 @@ export function QueryContextProvider({ children }) { const queryMap = useMap(); const [formData, setFormData] = useState(); const [page, setPage] = useState(1); + return ( <QueryContext.Provider value={{ diff --git a/src/routes/Routes.js b/src/routes/Routes.js index cc4098e741edcc92f1ea27b75432113034c25f56..c6bd803b3784c1e6d2d8474bb886754b9e1fd343 100644 --- a/src/routes/Routes.js +++ b/src/routes/Routes.js @@ -26,13 +26,18 @@ export default function Routes() { <Route exact path="/archives"> <Archives /> </Route> - <Route exact path="/query"> + <Route exact path="/vo-query"> <QueryContextProvider> <IVOAContextProvider> <QueryIVOARegistry /> </IVOAContextProvider> </QueryContextProvider> </Route> + <Route exact path="/query"> + <QueryContextProvider> + <QueryCatalogs /> + </QueryContextProvider> + </Route> <Route exact path="/rucio"> <Rucio /> </Route> diff --git a/src/utils/form/parseADEXForm.js b/src/utils/form/parseADEXForm.js index 351fabef237b4d6f60208855092efa1e64e4060b..75f134d0e1ae7407460128178484854c52e4ae1d 100644 --- a/src/utils/form/parseADEXForm.js +++ b/src/utils/form/parseADEXForm.js @@ -1,5 +1,5 @@ -export default function ParseADEXForm(formData) { - let catalogs = ["apertif", "astron_vo"]; +export default function ParseADEXForm(formData, page) { + let catalogs = ["apertif", "astron_vo", "lofar"]; let queries = []; // queries is an array of dictionaries, where each dictionary consists of // {"catalog": "catalogname", @@ -20,10 +20,14 @@ export default function ParseADEXForm(formData) { // "status": "null|fetching|fetched", // "results": null} let catalog = formInput.find(([key]) => key === "catalog")[1]; - if (catalog === "all") { + if (catalog === "adex") { console.log("Catalogs:", catalogs); catalogs.map((catalog) => { - let esapquery = query + `${`${query}` ? "&" : ""}archive_uri=` + catalog; + let esapquery = + query + + `${`${query}` ? "&" : ""}archive_uri=` + + catalog + + "&page_size=20"; queries.push({ catalog: catalog, @@ -32,7 +36,11 @@ export default function ParseADEXForm(formData) { return null; }); } else { - let esapquery = query + `${`${query}` ? "&" : ""}archive_uri=` + catalog; + let esapquery = + query + + `${`${query}` ? "&" : ""}archive_uri=` + + catalog + + `&page_size=30&page=${page}`; queries.push({ catalog: catalog, diff --git a/src/utils/form/parseASTRONVOForm.js b/src/utils/form/parseASTRONVOForm.js index 9162c828a9635cabe750e5dbbcccfd933dc8ea4c..a98868e37007451b814479164372d451c8509b74 100644 --- a/src/utils/form/parseASTRONVOForm.js +++ b/src/utils/form/parseASTRONVOForm.js @@ -1,4 +1,4 @@ -export default function ParseASTRONVOForm(formData) { +export default function ParseASTRONVOForm(formData, page) { let queries = []; // queries is an array of dictionaries, where each dictionary consists of // {"catalog": "catalogname", @@ -19,7 +19,9 @@ export default function ParseASTRONVOForm(formData) { // "status": "null|fetching|fetched", // "results": null} let catalog = formInput.find(([key]) => key === "catalog")[1]; - let esapquery = query + `${`${query}` ? "&" : ""}archive_uri=` + catalog; + let esapquery = query + `${`${query}` ? "&" : ""}archive_uri=` + catalog; //+ `&page=${page}` + // testing api with page=1, failing at the backend at the moment + page == 1 ? console.log("Page number is 1") : (esapquery += `&page=${page}`); queries.push({ catalog: catalog, esapquery: esapquery, diff --git a/src/utils/form/parseApertifForm.js b/src/utils/form/parseApertifForm.js index 4a764050acb24deea951cb6778e8e023e62364c6..6aab904362942e15d814bdf12d9ca3f12d7b244e 100644 --- a/src/utils/form/parseApertifForm.js +++ b/src/utils/form/parseApertifForm.js @@ -1,4 +1,4 @@ -export default function ParseApertifForm(formData) { +export default function ParseApertifForm(formData, page) { let queries = []; // queries is an array of dictionaries, where each dictionary consists of // {"catalog": "catalogname", @@ -19,7 +19,8 @@ export default function ParseApertifForm(formData) { // "status": "null|fetching|fetched", // "results": null} let catalog = formInput.find(([key]) => key === "catalog")[1]; - let esapquery = query + `${`${query}` ? "&" : ""}archive_uri=` + catalog; + let esapquery = + query + `${`${query}` ? "&" : ""}archive_uri=` + catalog + `&page=${page}`; queries.push({ catalog: catalog, esapquery: esapquery, diff --git a/src/utils/form/parseIVOAForm.js b/src/utils/form/parseIVOAForm.js index e518ff0ccaf91f1b5730b7f98bdc8fe9df92bef7..2b3fadcf898d051b1ed7b733e549fd25e049fe1b 100644 --- a/src/utils/form/parseIVOAForm.js +++ b/src/utils/form/parseIVOAForm.js @@ -1,4 +1,4 @@ -export default function ParseIVOAForm(formData) { +export default function ParseIVOAForm(formData, page) { let queries = []; // queries is an array of dictionaries, where each dictionary consists of // {"catalog": "catalogname", @@ -25,7 +25,11 @@ export default function ParseIVOAForm(formData) { let service_type = formInput.find(([key]) => key === "service_type")[1]; let esapquery = - "get-services/?" + query + `${`${query}` ? "&" : ""}dataset_uri=` + catalog; + "get-services/?" + + query + + `${`${query}` ? "&" : ""}dataset_uri=` + + catalog + + `&page=${page}`; queries.push({ catalog: catalog, diff --git a/src/utils/form/parseLOFARForm.js b/src/utils/form/parseLOFARForm.js index badc2b8512cc5c64457384b6e23c3b435f4eb1d8..8f8ff91cf9c6cd1e297449c00b2e41702ed20a51 100644 --- a/src/utils/form/parseLOFARForm.js +++ b/src/utils/form/parseLOFARForm.js @@ -1,4 +1,4 @@ -export default function ParseLOFARForm(formData) { +export default function ParseLOFARForm(formData, page) { let queries = []; // queries is an array of dictionaries, where each dictionary consists of // {"catalog": "catalogname", @@ -19,7 +19,8 @@ export default function ParseLOFARForm(formData) { // "status": "null|fetching|fetched", // "results": null} let catalog = formInput.find(([key]) => key === "catalog")[1]; - let esapquery = query + `${`${query}` ? "&" : ""}archive_uri=` + catalog; + let esapquery = + query + `${`${query}` ? "&" : ""}archive_uri=` + catalog + `&page=${page}`; queries.push({ catalog: catalog, esapquery: esapquery, diff --git a/src/utils/form/parseQueryForm.js b/src/utils/form/parseQueryForm.js index ecf4e15093d67ab8c6142f82e434ee406d4128d9..08c3162b9737e8e0a72772702312f88c60d0951b 100644 --- a/src/utils/form/parseQueryForm.js +++ b/src/utils/form/parseQueryForm.js @@ -8,17 +8,17 @@ import parseASTRONVOForm from "./parseASTRONVOForm"; export default function parseQueryForm(gui, formData, page) { switch (gui) { case "adex": - return parseADEXForm(formData); + return parseADEXForm(formData, page); case "zooniverse": return parseZooniverseForm(formData, page); case "lofar": - return parseLOFARForm(formData); + return parseLOFARForm(formData, page); case "apertif": - return parseApertifForm(formData); + return parseApertifForm(formData, page); case "astron_vo": - return parseASTRONVOForm(formData); + return parseASTRONVOForm(formData, page); case "ivoa": - return parseIVOAForm(formData); + return parseIVOAForm(formData, page); default: return null; } diff --git a/src/utils/form/parseVOServiceForm.js b/src/utils/form/parseVOServiceForm.js index c42aec9a71378c01d5b44ba9d9e675ff0b09abf9..9b308fc6dc12d528ba23fe406ceff6ae0ee92122 100644 --- a/src/utils/form/parseVOServiceForm.js +++ b/src/utils/form/parseVOServiceForm.js @@ -1,4 +1,4 @@ -export default function ParseVOServiceForm(formData, access_url) { +export default function ParseVOServiceForm(formData, access_url, page) { let queries = []; // queries is an array of dictionaries, where each dictionary consists of // {"catalog": "catalogname", @@ -29,7 +29,11 @@ export default function ParseVOServiceForm(formData, access_url) { let service_type = formInput.find(([key]) => key === "service_type")[1]; let esapquery = - "query/?" + query + `${`${query}` ? "&" : ""}dataset_uri=` + catalog; + "query/?" + + query + + `${`${query}` ? "&" : ""}dataset_uri=` + + catalog + + `&page=${page}`; queries.push({ catalog: access_url,