diff --git a/src/components/query/QueryIVOARegistry.js b/src/components/query/QueryIVOARegistry.js index c373f93c039dd2b6eeb538483efd98d140df9848..aefc08cd8da6c455752413265ff55161b912a11f 100644 --- a/src/components/query/QueryIVOARegistry.js +++ b/src/components/query/QueryIVOARegistry.js @@ -1,12 +1,13 @@ import React, { useContext, useEffect } from "react"; import { useParams } from "react-router-dom"; import axios from "axios"; -import { Container, Button } from "react-bootstrap"; +import { Container, Button, Row, Col } 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"; +import { IVOAContext } from "../../contexts/IVOAContext"; export default function QueryIVOARegistry() { // queryMap is a map of dictionaries, where each dictionary consists of @@ -16,6 +17,7 @@ export default function QueryIVOARegistry() { // "results": null} const { queryMap, formData, setFormData } = useContext(QueryContext); const { config, api_host, setConfigName } = useContext(GlobalContext); + const { selectedRegistry } = useContext(IVOAContext); const { uri } = useParams(); console.log("uri:", uri); @@ -59,6 +61,7 @@ export default function QueryIVOARegistry() { queries.forEach((query) => { queryMap.set(query.catalog, { catalog: query.catalog, + service_type: query.service_type, esapquery: query.esapquery, status: "fetching", results: null, @@ -69,6 +72,7 @@ export default function QueryIVOARegistry() { .then((queryResponse) => { queryMap.set(query.catalog, { catalog: query.catalog, + service_type: query.service_type, esapquery: query.esapquery, status: "fetched", results: queryResponse.data, @@ -77,6 +81,7 @@ export default function QueryIVOARegistry() { .catch(() => { queryMap.set(query.catalog, { catalog: query.catalog, + service_type: query.service_type, esapquery: query.esapquery, status: "error", results: null, @@ -135,7 +140,18 @@ export default function QueryIVOARegistry() { ]; return ( <div key={catalog} className="mt-3"> - <h4>List of registries</h4> + <Row> + <Col> + <h4>List of registries</h4> + </Col> + <Col> + {selectedRegistry.length === 0 ? ( + <></> + ) : ( + <Button type="submit">Query selected registry</Button> + )} + </Col> + </Row> <QueryResults catalog={catalog} /> </div> ); diff --git a/src/components/query/VORegistryResults.js b/src/components/query/VORegistryResults.js index 828a9ae7670a24aa25c01f894bb8cc982cc28e84..d8481c93430700d4c8ef622cc70a238703f9fa6c 100644 --- a/src/components/query/VORegistryResults.js +++ b/src/components/query/VORegistryResults.js @@ -7,12 +7,18 @@ import { IVOAContext } from "../../contexts/IVOAContext"; export default function VORegistryResults({ catalog }) { const { queryMap } = useContext(QueryContext); - const { registryList, add, remove } = useContext(IVOAContext); + const { + selectedRegistry, + addRegistry, + removeRegistry, + registryList, + setRegistryList, + } = useContext(IVOAContext); // const [checkAll, setCheckAll] = useState(""); useEffect(() => { - console.log("RegistryList:", registryList); - }, [registryList]); + console.log("Selected Registry:", selectedRegistry); + }, [selectedRegistry]); // useEffect(() => { // console.log("checkAll:", checkAll); @@ -24,7 +30,10 @@ export default function VORegistryResults({ catalog }) { if (queryMap.get(catalog).status === "fetched") { if (queryMap.get(catalog).results.results.length === 0) return <Alert variant="warning">No matching results found!</Alert>; + console.log("VO Registry results:", queryMap.get(catalog).results.results); + setRegistryList(queryMap.get(catalog).results.results); + console.log("Registry List:", registryList); return ( <> @@ -40,12 +49,12 @@ export default function VORegistryResults({ catalog }) { // ? queryMap // .get(catalog) // .results.results.map((result) => { - // add(result.access_url); + // addRegistry(result.access_url); // }) // : queryMap // .get(catalog) // .results.results.map((result) => { - // remove(result.access_url); + // removeRegistry(result.access_url); // }); // }} /> @@ -70,8 +79,8 @@ export default function VORegistryResults({ catalog }) { onChange={(event) => { console.log(event.target.checked); event.target.checked - ? add(result.access_url) - : remove(result.access_url); + ? addRegistry(result.access_url) + : removeRegistry(result.access_url); }} /> </InputGroup> @@ -87,7 +96,7 @@ export default function VORegistryResults({ catalog }) { })} </tbody> </Table> - <Paginate /> + {/* <Paginate /> */} </> ); } else { diff --git a/src/contexts/IVOAContext.js b/src/contexts/IVOAContext.js index eba8707e13090945b095b033a21600474fd60d29..03a60bee39284cda3e02a8c08afa413e4febf72f 100644 --- a/src/contexts/IVOAContext.js +++ b/src/contexts/IVOAContext.js @@ -1,25 +1,30 @@ import React, { createContext, useState } from "react"; +import useMap from "../hooks/useMap"; export const IVOAContext = createContext(); export function IVOAContextProvider({ children }) { + const [selectedRegistry, setSelectedRegistry] = useState([]); const [registryList, setRegistryList] = useState([]); + function handleAddRegistry(access_url) { - setRegistryList([...registryList, access_url]); + setSelectedRegistry([...selectedRegistry, access_url]); } function handleRemoveRegistry(access_url) { - const copy = [...registryList]; + const copy = [...selectedRegistry]; const index = copy.findIndex((url) => url === access_url); copy.splice(index, 1); - setRegistryList(copy); + setSelectedRegistry(copy); } return ( <IVOAContext.Provider value={{ + selectedRegistry, + addRegistry: handleAddRegistry, + removeRegistry: handleRemoveRegistry, registryList, - add: handleAddRegistry, - remove: handleRemoveRegistry, + setRegistryList, }} > {children} diff --git a/src/utils/form/parseIVOAForm.js b/src/utils/form/parseIVOAForm.js index 640227870591c5f3dbbcb864355cc7240c5fb2df..e518ff0ccaf91f1b5730b7f98bdc8fe9df92bef7 100644 --- a/src/utils/form/parseIVOAForm.js +++ b/src/utils/form/parseIVOAForm.js @@ -22,12 +22,14 @@ export default function ParseIVOAForm(formData) { // "status": "null|fetching|fetched", // "results": null} let catalog = formInput.find(([key]) => key === "catalog")[1]; + let service_type = formInput.find(([key]) => key === "service_type")[1]; let esapquery = "get-services/?" + query + `${`${query}` ? "&" : ""}dataset_uri=` + catalog; queries.push({ catalog: catalog, + service_type: service_type, esapquery: esapquery, });