diff --git a/src/components/query/ASTRONVOResults.js b/src/components/query/ASTRONVOResults.js index 76937c2d05845f7bc1f3bd89f15e83578a2d4005..c52549672f77dc93ed8033029a7258c1b63889a3 100644 --- a/src/components/query/ASTRONVOResults.js +++ b/src/components/query/ASTRONVOResults.js @@ -1,13 +1,47 @@ -import React, { useContext } from "react"; +import React, { useContext, useState, useEffect } from "react"; import { Table, Alert } from "react-bootstrap"; +import axios from "axios"; import { QueryContext } from "../../contexts/QueryContext"; +import { GlobalContext } from "../../contexts/GlobalContext"; import LoadingSpinner from "../LoadingSpinner"; import Paginate from "../Paginate"; import HandlePreview from "./HandlePreview"; import Preview from "./Preview"; export default function ASTRONVOResults({ catalog }) { - const { queryMap, page, setPage, preview } = useContext(QueryContext); + const { queryMap, preview } = useContext(QueryContext); + const { api_host } = useContext(GlobalContext); + const [page, setPage] = useState(queryMap.get(catalog).page); + + useEffect(() => { + queryMap.set(catalog, { + catalog: catalog, + page: page, + esapquery: queryMap.get(catalog).esapquery + `&page=${page}`, + }); + const url = api_host + "query/query/?" + queryMap.get(catalog).esapquery; + axios + .get(url) + .then((queryResponse) => { + queryMap.set(catalog, { + catalog: catalog, + esapquery: queryMap.get(catalog).esapquery, + page: page, + status: "fetched", + results: queryResponse.data, + }); + }) + .catch(() => { + queryMap.set(catalog, { + catalog: catalog, + esapquery: queryMap.get(catalog).esapquery, + page: page, + status: "error", + results: null, + }); + }); + }, [page]) + if (!queryMap) return null; if (queryMap.get(catalog).status === "fetched") { if (!("results" in queryMap.get(catalog).results)) diff --git a/src/components/query/ApertifResults.js b/src/components/query/ApertifResults.js index 15b35243b35cd29cc5d0dd3d4439504bcd2481ac..e5b08f4f090fff002a60f5eb603c140180e056ba 100644 --- a/src/components/query/ApertifResults.js +++ b/src/components/query/ApertifResults.js @@ -1,13 +1,47 @@ -import React, { useContext } from "react"; +import React, { useContext, useState, useEffect } from "react"; import { Table, Alert } from "react-bootstrap"; +import axios from "axios"; import { QueryContext } from "../../contexts/QueryContext"; +import { GlobalContext } from "../../contexts/GlobalContext"; import LoadingSpinner from "../LoadingSpinner"; import Paginate from "../Paginate"; import HandlePreview from "./HandlePreview"; import Preview from "./Preview"; export default function ApertifResults({ catalog }) { - const { queryMap, page, setPage, preview } = useContext(QueryContext); + const { queryMap, preview } = useContext(QueryContext); + const { api_host } = useContext(GlobalContext); + const [page, setPage] = useState(queryMap.get(catalog).page); + + useEffect(() => { + queryMap.set(catalog, { + catalog: catalog, + page: page, + esapquery: queryMap.get(catalog).esapquery + `&page=${page}`, + }); + const url = api_host + "query/query/?" + queryMap.get(catalog).esapquery; + axios + .get(url) + .then((queryResponse) => { + queryMap.set(catalog, { + catalog: catalog, + esapquery: queryMap.get(catalog).esapquery, + page: page, + status: "fetched", + results: queryResponse.data, + }); + }) + .catch(() => { + queryMap.set(catalog, { + catalog: catalog, + esapquery: queryMap.get(catalog).esapquery, + page: page, + status: "error", + results: null, + }); + }); + }, [page]) + if (!queryMap) return null; if (queryMap.get(catalog).status === "fetched") { if (!("results" in queryMap.get(catalog).results)) @@ -21,9 +55,9 @@ export default function ApertifResults({ catalog }) { <> <Paginate getNewPage={(args) => { - return args.target ? setPage(parseFloat(args.target.text)) : null; + return args.target ? setPage(parseInt(args.target.text)) : null; }} - currentPage={page} + currentPage={queryMap.get(catalog).page} numAdjacent={3} numPages={numPages} /> diff --git a/src/components/query/LOFARResults.js b/src/components/query/LOFARResults.js index 0aaf6bd37cf93b60bf9d9fd277993681a2dfd05f..54a4ce05d3b9939e01ab52c03bdd28b85dc0f761 100644 --- a/src/components/query/LOFARResults.js +++ b/src/components/query/LOFARResults.js @@ -1,10 +1,44 @@ -import React, { useContext } from "react"; +import React, { useContext, useState, useEffect } from "react"; import { Table, Alert } from "react-bootstrap"; +import axios from "axios"; import { QueryContext } from "../../contexts/QueryContext"; +import { GlobalContext } from "../../contexts/GlobalContext"; import LoadingSpinner from "../LoadingSpinner"; export default function LOFARResults({ catalog }) { const { queryMap } = useContext(QueryContext); + const { api_host } = useContext(GlobalContext); + const [page, setPage] = useState(queryMap.get(catalog).page); + + useEffect(() => { + queryMap.set(catalog, { + catalog: catalog, + page: page, + esapquery: queryMap.get(catalog).esapquery + `&page=${page}`, + }); + const url = api_host + "query/query/?" + queryMap.get(catalog).esapquery; + axios + .get(url) + .then((queryResponse) => { + queryMap.set(catalog, { + catalog: catalog, + esapquery: queryMap.get(catalog).esapquery, + page: page, + status: "fetched", + results: queryResponse.data, + }); + }) + .catch(() => { + queryMap.set(catalog, { + catalog: catalog, + esapquery: queryMap.get(catalog).esapquery, + page: page, + status: "error", + results: null, + }); + }); + }, [page]) + if (!queryMap) return null; if (queryMap.get(catalog).status === "fetched") { if (!("results" in queryMap.get(catalog).results)) diff --git a/src/components/query/QueryCatalogs.js b/src/components/query/QueryCatalogs.js index fc9d4c3c181310c9cd31a3b40c3ad059aa06f80d..574cd74ba209ba39199eadc6c490d824e2b80536 100644 --- a/src/components/query/QueryCatalogs.js +++ b/src/components/query/QueryCatalogs.js @@ -15,10 +15,8 @@ export default function QueryCatalogs() { // "catalogquery": "querystring", // "status": "fetching|fechted", // "results": null} - const { config, setConfigName, defaultConf, queryMap, formData, setFormData, page, setPage } = useContext(QueryContext); - const { api_host } = useContext( - GlobalContext - ); + const { config, setConfigName, defaultConf, queryMap, formData, setFormData } = useContext(QueryContext); + const { api_host } = useContext(GlobalContext); const { uri } = useParams(); console.log("uri:", uri); console.log("default conf:", defaultConf); @@ -50,7 +48,6 @@ export default function QueryCatalogs() { return () => { console.log("cleaned up"); queryMap.clear(); - setPage(1); setFormData(); setConfigName(defaultConf); }; @@ -59,16 +56,22 @@ export default function QueryCatalogs() { 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(); + const gui = config.query_schema.name; + const queries = parseQueryForm(gui, formData); queries.forEach((query) => { + queryMap.set(query.catalog, { + catalog: query.catalog, + page: 1, + esapquery: query.esapquery, + }); + }); + + queryMap.forEach((query) => { queryMap.set(query.catalog, { catalog: query.catalog, esapquery: query.esapquery, + page: query.page, status: "fetching", results: null, }); @@ -79,6 +82,7 @@ export default function QueryCatalogs() { queryMap.set(query.catalog, { catalog: query.catalog, esapquery: query.esapquery, + page: query.page, status: "fetched", results: queryResponse.data, }); @@ -87,12 +91,13 @@ export default function QueryCatalogs() { queryMap.set(query.catalog, { catalog: query.catalog, esapquery: query.esapquery, + page: query.page, status: "error", results: null, }); }); }); - }, [formData, page]); + }, [formData]); function formTemplate({ TitleField, properties, title, description }) { return ( diff --git a/src/components/query/QueryIVOARegistry.js b/src/components/query/QueryIVOARegistry.js index 45938b436bc48db9f4528b36a7e22f64387fc396..ad404fdf1299b4e2b1f2c332eee2d98da83a0a77 100644 --- a/src/components/query/QueryIVOARegistry.js +++ b/src/components/query/QueryIVOARegistry.js @@ -52,7 +52,6 @@ export default function QueryIVOARegistry() { return () => { console.log("cleaned up"); queryMap.clear(); - setPage(1); setFormData(); setConfigName(defaultConf); }; diff --git a/src/components/query/ZooniverseResults.js b/src/components/query/ZooniverseResults.js index aef7c46823e3d2cb49b457924272817ba37033a0..4b80c522cb975d50d61e34ad9cdf29ea822f81b3 100644 --- a/src/components/query/ZooniverseResults.js +++ b/src/components/query/ZooniverseResults.js @@ -1,6 +1,7 @@ -import React, { useContext, useState } from "react"; -import { Table, Alert, Form, Button } from "react-bootstrap"; -import * as deepEqual from "deep-equal"; +import React, { useContext, useEffect } from "react"; +import { Table, Alert, Form } from "react-bootstrap"; +import axios from "axios"; +import { GlobalContext } from "../../contexts/GlobalContext"; import { QueryContext } from "../../contexts/QueryContext"; import { BasketContext } from "../../contexts/BasketContext"; import LoadingSpinner from "../LoadingSpinner"; @@ -335,6 +336,38 @@ function ZooniverseWorkflowResults(context) { export default function ZooniverseResults({ catalog }) { const context = useContext(QueryContext); const basketContext = useContext(BasketContext); + + const { queryMap, page } = useContext(QueryContext); + const { api_host } = useContext(GlobalContext); + useEffect(() => { + queryMap.set(catalog, { + catalog: catalog, + page: page, + esapquery: queryMap.get(catalog).esapquery + `&page=${page}`, + }); + const url = api_host + "query/query/?" + queryMap.get(catalog).esapquery; + axios + .get(url) + .then((queryResponse) => { + queryMap.set(catalog, { + catalog: catalog, + esapquery: queryMap.get(catalog).esapquery, + page: page, + status: "fetched", + results: queryResponse.data, + }); + }) + .catch(() => { + queryMap.set(catalog, { + catalog: catalog, + esapquery: queryMap.get(catalog).esapquery, + page: page, + status: "error", + results: null, + }); + }); + }, [page]) + if (!context.queryMap) return null; if (context.queryMap.get(catalog).status === "fetched") { if (context.queryMap.get(catalog).results.results.length === 0) diff --git a/src/utils/form/parseADEXForm.js b/src/utils/form/parseADEXForm.js index 75f134d0e1ae7407460128178484854c52e4ae1d..27bfa31c28a333d38b6e6c550026476fb643eb56 100644 --- a/src/utils/form/parseADEXForm.js +++ b/src/utils/form/parseADEXForm.js @@ -1,4 +1,4 @@ -export default function ParseADEXForm(formData, page) { +export default function ParseADEXForm(formData) { let catalogs = ["apertif", "astron_vo", "lofar"]; let queries = []; // queries is an array of dictionaries, where each dictionary consists of @@ -39,8 +39,7 @@ export default function ParseADEXForm(formData, page) { let esapquery = query + `${`${query}` ? "&" : ""}archive_uri=` + - catalog + - `&page_size=30&page=${page}`; + catalog + `&page_size=30`; queries.push({ catalog: catalog, diff --git a/src/utils/form/parseASTRONVOForm.js b/src/utils/form/parseASTRONVOForm.js index 6406cf850f4d9ce0453210e69e1bef7cb9ff5269..9162c828a9635cabe750e5dbbcccfd933dc8ea4c 100644 --- a/src/utils/form/parseASTRONVOForm.js +++ b/src/utils/form/parseASTRONVOForm.js @@ -1,4 +1,4 @@ -export default function ParseASTRONVOForm(formData, page) { +export default function ParseASTRONVOForm(formData) { let queries = []; // queries is an array of dictionaries, where each dictionary consists of // {"catalog": "catalogname", @@ -19,9 +19,7 @@ export default function ParseASTRONVOForm(formData, page) { // "status": "null|fetching|fetched", // "results": null} let catalog = formInput.find(([key]) => key === "catalog")[1]; - 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}`); + let esapquery = query + `${`${query}` ? "&" : ""}archive_uri=` + catalog; queries.push({ catalog: catalog, esapquery: esapquery, diff --git a/src/utils/form/parseApertifForm.js b/src/utils/form/parseApertifForm.js index 6aab904362942e15d814bdf12d9ca3f12d7b244e..4b43e2816a9cd5e54cff0727a8a5ab061a80f421 100644 --- a/src/utils/form/parseApertifForm.js +++ b/src/utils/form/parseApertifForm.js @@ -1,4 +1,4 @@ -export default function ParseApertifForm(formData, page) { +export default function ParseApertifForm(formData) { let queries = []; // queries is an array of dictionaries, where each dictionary consists of // {"catalog": "catalogname", @@ -20,7 +20,7 @@ export default function ParseApertifForm(formData, page) { // "results": null} let catalog = formInput.find(([key]) => key === "catalog")[1]; let esapquery = - query + `${`${query}` ? "&" : ""}archive_uri=` + catalog + `&page=${page}`; + query + `${`${query}` ? "&" : ""}archive_uri=` + catalog; queries.push({ catalog: catalog, esapquery: esapquery, diff --git a/src/utils/form/parseIVOAForm.js b/src/utils/form/parseIVOAForm.js index 2b3fadcf898d051b1ed7b733e549fd25e049fe1b..b9aa15cb545dd507a4806c0d70f56504e8d8718f 100644 --- a/src/utils/form/parseIVOAForm.js +++ b/src/utils/form/parseIVOAForm.js @@ -1,4 +1,4 @@ -export default function ParseIVOAForm(formData, page) { +export default function ParseIVOAForm(formData) { let queries = []; // queries is an array of dictionaries, where each dictionary consists of // {"catalog": "catalogname", @@ -28,8 +28,7 @@ export default function ParseIVOAForm(formData, page) { "get-services/?" + query + `${`${query}` ? "&" : ""}dataset_uri=` + - catalog + - `&page=${page}`; + catalog; queries.push({ catalog: catalog, diff --git a/src/utils/form/parseLOFARForm.js b/src/utils/form/parseLOFARForm.js index 8f8ff91cf9c6cd1e297449c00b2e41702ed20a51..fb06e3d302fe9edfc571b2797167ef8f220cbbb8 100644 --- a/src/utils/form/parseLOFARForm.js +++ b/src/utils/form/parseLOFARForm.js @@ -1,4 +1,4 @@ -export default function ParseLOFARForm(formData, page) { +export default function ParseLOFARForm(formData) { let queries = []; // queries is an array of dictionaries, where each dictionary consists of // {"catalog": "catalogname", @@ -20,7 +20,7 @@ export default function ParseLOFARForm(formData, page) { // "results": null} let catalog = formInput.find(([key]) => key === "catalog")[1]; let esapquery = - query + `${`${query}` ? "&" : ""}archive_uri=` + catalog + `&page=${page}`; + query + `${`${query}` ? "&" : ""}archive_uri=` + catalog ; queries.push({ catalog: catalog, esapquery: esapquery, diff --git a/src/utils/form/parseQueryForm.js b/src/utils/form/parseQueryForm.js index 62d7ec47344ccab0d0631caf302fb3369b441a42..92126fbc7c620b5b30e861dd77af06710f398610 100644 --- a/src/utils/form/parseQueryForm.js +++ b/src/utils/form/parseQueryForm.js @@ -6,22 +6,22 @@ import parseApertifForm from "./parseApertifForm"; import parseASTRONVOForm from "./parseASTRONVOForm"; import parseRucioForm from "./parseRucioForm"; -export default function parseQueryForm(gui, formData, page) { +export default function parseQueryForm(gui, formData) { switch (gui) { case "adex": - return parseADEXForm(formData, page); + return parseADEXForm(formData); case "zooniverse": - return parseZooniverseForm(formData, page); + return parseZooniverseForm(formData); case "lofar": - return parseLOFARForm(formData, page); + return parseLOFARForm(formData); case "apertif": - return parseApertifForm(formData, page); + return parseApertifForm(formData); case "astron_vo": - return parseASTRONVOForm(formData, page); + return parseASTRONVOForm(formData); case "ivoa": - return parseIVOAForm(formData, page); + return parseIVOAForm(formData); case "rucio": - return parseRucioForm(formData, page); + return parseRucioForm(formData); default: return null; } diff --git a/src/utils/form/parseRucioForm.js b/src/utils/form/parseRucioForm.js index a0571bb15f2f15432fc230ea49a9d0309eaa281c..c460b203eca02fe1eb89e0076be6f78ce94e57d7 100644 --- a/src/utils/form/parseRucioForm.js +++ b/src/utils/form/parseRucioForm.js @@ -1,4 +1,4 @@ -export default function parseRucioForm(formData, page) { +export default function parseRucioForm(formData) { let formInput = Object.entries(formData); let query = ""; @@ -16,6 +16,6 @@ export default function parseRucioForm(formData, page) { console.log("Rucio Query", query); return [{ catalog: "rucio", - esapquery: esapquery + `&page=${page}` + esapquery: esapquery }]; } diff --git a/src/utils/form/parseVOServiceForm.js b/src/utils/form/parseVOServiceForm.js index 69d411fc81eab9f8780108629e78264c70f23caa..6a4898bee252bd2535881e34aa1146946b83734c 100644 --- a/src/utils/form/parseVOServiceForm.js +++ b/src/utils/form/parseVOServiceForm.js @@ -1,4 +1,4 @@ -export default function ParseVOServiceForm(formData, access_url, page) { +export default function ParseVOServiceForm(formData, access_url) { let queries = []; // queries is an array of dictionaries, where each dictionary consists of // {"catalog": "catalogname", @@ -31,9 +31,7 @@ export default function ParseVOServiceForm(formData, access_url, page) { let esapquery = "query/?" + query + - `${`${query}` ? "&" : ""}dataset_uri=` + - catalog + - `&page=${page}`; + `${`${query}` ? "&" : ""}dataset_uri=` + catalog; queries.push({ catalog: access_url, diff --git a/src/utils/form/parseZooniverseForm.js b/src/utils/form/parseZooniverseForm.js index 50284bb4c8ab1e2db35e4cd2b3446662b477e284..65618c354e53c316ef0b96626588d172596ba83a 100644 --- a/src/utils/form/parseZooniverseForm.js +++ b/src/utils/form/parseZooniverseForm.js @@ -1,4 +1,4 @@ -export default function parseZooniverseForm(formData, page) { +export default function parseZooniverseForm(formData) { let catalogs = ["zooniverse_projects", "zooniverse_workflows"]; let queries = []; // queries is an array of dictionaries, where each dictionary consists of @@ -45,7 +45,7 @@ export default function parseZooniverseForm(formData, page) { queries.push({ catalog: catalog, - esapquery: esapquery + `&page=${page}`, + esapquery: esapquery, }); } console.log("Queries:", queries);