diff --git a/src/components/InputTabs.js b/src/components/InputTabs.js index 33d5619..9b6cbac 100644 --- a/src/components/InputTabs.js +++ b/src/components/InputTabs.js @@ -24,7 +24,7 @@ function InputTabs(props) { return ( {props.name} - + { dispatch({ type: reducerTypes.rdf, value: rdfData }), addRdfData: (rdfData) => { const newIndex = applicationData.rdfData.length; // new Data index based on current context data - const newData = rdfData // New data object, use InitialData if no data was provided - ? { index: newIndex, ...rdfData } - : { - index: newIndex, - ...InitialData, - }; + // New data object, use InitialData if no data was provided + const newData = { + index: newIndex, + ...(rdfData || InitialData), + }; dispatch({ type: reducerTypes.addRdf, value: newData }); // Update state and return new data return newData; }, diff --git a/src/data/Data.js b/src/data/Data.js index e1a5f0d..be64ea7 100644 --- a/src/data/Data.js +++ b/src/data/Data.js @@ -77,7 +77,7 @@ export function mkDataTabs( setData({ ...data, activeSource: value }); } function handleDataByTextChange(value, y, change) { - onTextChange(value, y, change); + // onTextChange(value, y, change); setData({ ...data, textArea: value }); } function handleDataUrlChange(value) { diff --git a/src/data/DataConvert.js b/src/data/DataConvert.js index a8fdb5c..c33de1c 100644 --- a/src/data/DataConvert.js +++ b/src/data/DataConvert.js @@ -17,30 +17,34 @@ import ResultDataConvert from "../results/ResultDataConvert"; import { mkError } from "../utils/ResponseError"; import { getDataText, - InitialData, mkDataTabs, paramsFromStateData, updateStateData } from "./Data"; function DataConvert(props) { + const { + rdfData: [ctxData], + addRdfData, + } = useContext(ApplicationContext); + + const [data, setData] = useState(ctxData || addRdfData()); + const [dataTargetFormat, setDataTargetFormat] = useState( + API.formats.defaultData + ); const [result, setResult] = useState(""); + const [params, setParams] = useState(null); const [lastParams, setLastParams] = useState(null); + const [permalink, setPermalink] = useState(null); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); - const [data, setData] = useState(InitialData); - const [dataTargetFormat, setDataTargetFormat] = useState( - API.formats.defaultData - ); + const [progressPercent, setProgressPercent] = useState(0); const [disabledLinks, setDisabledLinks] = useState(false); - // Recover user input data from context, if any. Use first item of the data array - const { rdfData: ctxData } = useContext(ApplicationContext); - const url = API.routes.server.dataConvert; function handleTargetDataFormatChange(value) { @@ -74,8 +78,6 @@ function DataConvert(props) { } else { setError(API.texts.errorParsingUrl); } - } else if (ctxData && typeof ctxData === "object") { - setData(ctxData); } }, [props.location?.search]); diff --git a/src/data/DataExtract.js b/src/data/DataExtract.js index 3e99635..06afd81 100644 --- a/src/data/DataExtract.js +++ b/src/data/DataExtract.js @@ -17,16 +17,20 @@ import ResultDataExtract from "../results/ResultDataExtract"; import NodeSelector from "../shex/NodeSelector"; import { mkError } from "../utils/ResponseError"; import { - getDataText, - InitialData, - mkDataTabs, + getDataText, mkDataTabs, paramsFromStateData, updateStateData } from "./Data"; import { getNodesFromForm } from "./TurtleForm"; function DataExtract(props) { - const [data, setData] = useState(InitialData); + // Recover user input data and query from context, if any. Use first item of the data array + const { + rdfData: [ctxData], + addRdfData, + } = useContext(ApplicationContext); + + const [data, setData] = useState(ctxData || addRdfData()); const [params, setParams] = useState(null); const [lastParams, setLastParams] = useState(null); const [loading, setLoading] = useState(false); @@ -41,11 +45,6 @@ function DataExtract(props) { const [disabledLinks, setDisabledLinks] = useState(false); - // Recover user input data and query from context, if any. Use first item of the data array - const { - rdfData: [ctxData], - } = useContext(ApplicationContext); - const urlServerExtract = API.routes.server.dataExtract; const urlServerVisualize = API.routes.server.schemaConvert; @@ -65,8 +64,6 @@ function DataExtract(props) { setParams(newParams); setLastParams(newParams); } else setError(API.texts.errorParsingUrl); - } else { - if (ctxData && typeof ctxData === "object") setData(ctxData); } }, [props.location?.search]); diff --git a/src/data/DataInfo.js b/src/data/DataInfo.js index 6c0f1e3..6aea056 100644 --- a/src/data/DataInfo.js +++ b/src/data/DataInfo.js @@ -16,15 +16,20 @@ import ResultDataInfo from "../results/ResultDataInfo"; import { processDotData } from "../utils/dot/dotUtils"; import { mkError } from "../utils/ResponseError"; import { - getDataText, - InitialData, - mkDataTabs, + getDataText, mkDataTabs, paramsFromStateData, updateStateData } from "./Data"; function DataInfo(props) { - const [data, setData] = useState(InitialData); + // Recover user input data from context, if any. Use first item of the data array + const { + rdfData: [ctxData], + addRdfData, + } = useContext(ApplicationContext); + + // Set initial data from context, if possible + const [data, setData] = useState(ctxData || addRdfData()); const [result, setResult] = useState(null); @@ -41,9 +46,6 @@ function DataInfo(props) { const urlInfo = API.routes.server.dataInfo; const urlVisual = API.routes.server.dataConvert; - // Recover user input data from context, if any. Use first item of the data array - const { rdfData: ctxData } = useContext(ApplicationContext); - // Try to autofill user data, first from the query string then from context useEffect(() => { if (props.location?.search) { @@ -61,8 +63,6 @@ function DataInfo(props) { } else { setError(API.texts.errorParsingUrl); } - } else if (ctxData && typeof ctxData === "object") { - setData(ctxData); // Set the data in context so that UI changes } }, [props.location?.search]); diff --git a/src/data/DataMerge.js b/src/data/DataMerge.js index 5fe079a..30846b1 100644 --- a/src/data/DataMerge.js +++ b/src/data/DataMerge.js @@ -18,15 +18,19 @@ import { mkError } from "../utils/ResponseError"; import { getFileContents } from "../utils/Utils"; import { getDataText, - InitialData, mkDataTabs, paramsFromStateData, updateStateData } from "./Data"; function DataMerge(props) { - const [data1, setData1] = useState(InitialData); - const [data2, setData2] = useState(InitialData); + // Recover user input data from context, if any. Use 2 items of the data array + const { rdfData: rdfDataSet, addRdfData } = useContext(ApplicationContext); + const [ctxData1, ctxData2] = rdfDataSet; + + const [data1, setData1] = useState(ctxData1 || addRdfData()); + const [data2, setData2] = useState(ctxData2 || addRdfData()); + const [params, setParams] = useState(null); const [lastParams, setLastParams] = useState(null); const [dataTargetFormat, setDataTargetFormat] = useState( @@ -40,9 +44,6 @@ function DataMerge(props) { const [disabledLinks, setDisabledLinks] = useState(false); - // Recover user input data from context, if any. Use 2 items of the data array - const { rdfData: ctxData1, addRdfData } = useContext(ApplicationContext); - const url = API.routes.server.dataConvert; function handleTargetDataFormatChange(value) { @@ -88,13 +89,6 @@ function DataMerge(props) { } else { setError(API.texts.errorParsingUrl); } - } else if (ctxData1 && typeof ctxData1 === "object") { - // Set the data in context so that UI changes - setData1(ctxData1); - // If there's no "data2" because it is the first time in the page, add a new data element - // to the data array in context - // setData2(ctxData2 || addRdfData()); - setData2(InitialData); } }, [props.location?.search]); diff --git a/src/data/DataQuery.js b/src/data/DataQuery.js index d5ee145..dc45b57 100644 --- a/src/data/DataQuery.js +++ b/src/data/DataQuery.js @@ -23,16 +23,21 @@ import { import ResultSparqlQuery from "../results/ResultSparqlQuery"; import { mkError } from "../utils/ResponseError"; import { - getDataText, - InitialData, - mkDataTabs, + getDataText, mkDataTabs, paramsFromStateData, updateStateData } from "./Data"; function DataQuery(props) { - const [data, setData] = useState(InitialData); - const [query, setQuery] = useState(InitialQuery); + // Recover user input data and query from context, if any. Use first item of the data array + const { + rdfData: [ctxData], + sparqlQuery: ctxQuery, + addRdfData, + } = useContext(ApplicationContext); + + const [data, setData] = useState(ctxData || addRdfData()); + const [query, setQuery] = useState(ctxQuery || InitialQuery); const [params, setParams] = useState(null); const [lastParams, setLastParams] = useState(null); @@ -46,12 +51,6 @@ function DataQuery(props) { const [disabledLinks, setDisabledLinks] = useState(false); - // Recover user input data and query from context, if any. Use first item of the data array - const { - rdfData: [ctxData], - sparqlQuery: ctxQuery, - } = useContext(ApplicationContext); - const url = API.routes.server.dataQuery; useEffect(() => { @@ -74,9 +73,6 @@ function DataQuery(props) { setParams(params); setLastParams(params); - } else { - if (ctxData && typeof ctxData === "object") setData(ctxData); - if (ctxQuery && typeof ctxQuery === "object") setQuery(ctxQuery); } }, [props.location?.search]); diff --git a/src/data/DataTabs.js b/src/data/DataTabs.js index 12d101d..c59ddce 100644 --- a/src/data/DataTabs.js +++ b/src/data/DataTabs.js @@ -1,5 +1,5 @@ import PropTypes from "prop-types"; -import React, { useContext, useEffect, useState } from "react"; +import React, { useContext, useEffect } from "react"; import API from "../API"; import InputTabsWithFormat from "../components/InputTabsWithFormat"; import { ApplicationContext } from "../context/ApplicationContext"; @@ -10,37 +10,40 @@ function DataTabs(props) { ApplicationContext ); - const [dataIndex] = useState(props?.data?.index); + const dataIndex = props?.data?.index; // Change context when the contained data changes useEffect(() => { - // const newDataset = ctxDataSet.reduce( - // (acc, curr, idx) => - // dataIndex === idx ? [...acc, props.data] : [...acc, curr], - // [] - // ); - setCtxDataSet(props.data); + if (props.data) { + // Reducer, insert the modified data in the corresponding index + const newDataset = ctxDataSet.reduce( + (acc, curr) => + dataIndex === curr.index ? [...acc, props.data] : [...acc, curr], + [] + ); + setCtxDataSet(newDataset); + } }, [props.data]); return (
diff --git a/src/data/SelectInferenceEngine.js b/src/data/SelectInferenceEngine.js index f3c0ff4..1c7ac79 100644 --- a/src/data/SelectInferenceEngine.js +++ b/src/data/SelectInferenceEngine.js @@ -14,6 +14,9 @@ function SelectInferenceEngine(props) { ? inferenceTargets.shacl : inferenceTargets.rdf; + // In case we are manipulating data, the index in the data array that we are manipulating + const dataIndex = props?.data?.index; + // Get potentially necessary data from context const { rdfData: ctxDataSet, @@ -25,14 +28,15 @@ function SelectInferenceEngine(props) { useEffect(() => { switch (inferenceTarget) { case inferenceTargets.rdf: - setCtxDataSet(props.data); - // setCtxDataSet( - // ctxDataSet.reduce( - // (acc, curr, idx) => - // props.data.index === idx ? [...acc, props.data] : [...acc, curr], - // [] - // ) - // ); + // setCtxDataSet(props.data); + // setCtxDataSet([props.data]); + setCtxDataSet( + ctxDataSet.reduce( + (acc, curr) => + dataIndex === curr.index ? [...acc, props.data] : [...acc, curr], + [] + ) + ); case inferenceTargets.shacl: setCtxShacl(props.shacl); default: @@ -40,9 +44,6 @@ function SelectInferenceEngine(props) { } }, [props.data, props.shacl]); - // In case we are manipulating data, the index in the data array that we are manipulating - const dataIndex = props?.data?.index || 0; - return ( { @@ -43,9 +43,6 @@ function EndpointInfo(props) { } else { setError(API.texts.errorParsingUrl); } - } else { - if (ctxEndpoint && typeof ctxEndpoint === "string") - setEndpoint(ctxEndpoint); } }, [props.location?.search]); diff --git a/src/endpoint/EndpointQuery.js b/src/endpoint/EndpointQuery.js index db21c4d..b8c4eeb 100644 --- a/src/endpoint/EndpointQuery.js +++ b/src/endpoint/EndpointQuery.js @@ -24,22 +24,26 @@ import { mkError } from "../utils/ResponseError"; import EndpointInput from "./EndpointInput"; function EndpointQuery(props) { - const [endpoint, setEndpoint] = useState(""); + // Recover user endpoint and query from context, if any + const { sparqlEndpoint: ctxEndpoint, sparqlQuery: ctxQuery } = useContext( + ApplicationContext + ); + + const [endpoint, setEndpoint] = useState(ctxEndpoint || ""); + const [query, setQuery] = useState(ctxQuery || InitialQuery); + const [params, setParams] = useState(null); const [lastParams, setLastParams] = useState(null); + const [result, setResult] = useState(""); const [error, setError] = useState(""); - const [query, setQuery] = useState(InitialQuery); + const [permalink, setPermalink] = useState(null); const [loading, setLoading] = useState(false); + const [progressPercent, setProgressPercent] = useState(0); const [controlPressed, setControlPressed] = useState(false); - // Recover user endpoint and query from context, if any - const { sparqlEndpoint: ctxEndpoint, sparqlQuery: ctxQuery } = useContext( - ApplicationContext - ); - const url = API.routes.server.wikibaseQuery; useEffect(() => { @@ -58,10 +62,6 @@ function EndpointQuery(props) { setParams(newParams); setLastParams(newParams); - } else { - if (ctxEndpoint && typeof ctxEndpoint === "string") - setEndpoint(ctxEndpoint); - if (ctxQuery && typeof ctxQuery === "object") setQuery(ctxQuery); } }, [props.location?.search]); diff --git a/src/shacl/ShaclConvert.js b/src/shacl/ShaclConvert.js index 9d7982e..7461634 100644 --- a/src/shacl/ShaclConvert.js +++ b/src/shacl/ShaclConvert.js @@ -25,6 +25,10 @@ import { } from "./Shacl"; function ShaclConvert(props) { + const { shaclSchema: ctxShacl } = useContext(ApplicationContext); + + const [shacl, setShacl] = useState(ctxShacl || InitialShacl); + const [targetSchemaFormat, setTargetSchemaFormat] = useState( API.formats.defaultShacl ); @@ -33,8 +37,6 @@ function ShaclConvert(props) { API.engines.shaclex ); - const [shacl, setShacl] = useState(InitialShacl); - const [result, setResult] = useState(""); const [params, setParams] = useState(null); @@ -47,8 +49,6 @@ function ShaclConvert(props) { const [disabledLinks, setDisabledLinks] = useState(false); - const { shaclSchema: ctxShacl } = useContext(ApplicationContext); - const urlConvert = API.routes.server.schemaConvert; useEffect(() => { @@ -80,8 +80,6 @@ function ShaclConvert(props) { } else { setError(API.texts.errorParsingUrl); } - } else { - if (ctxShacl && typeof ctxShacl === "object") setShacl(ctxShacl); } }, [props.location?.search]); diff --git a/src/shacl/ShaclInfo.js b/src/shacl/ShaclInfo.js index 3988b86..56a421f 100644 --- a/src/shacl/ShaclInfo.js +++ b/src/shacl/ShaclInfo.js @@ -23,7 +23,9 @@ import { } from "./Shacl"; function ShaclInfo(props) { - const [shacl, setShacl] = useState(InitialShacl); + const { shaclSchema: ctxShacl } = useContext(ApplicationContext); + + const [shacl, setShacl] = useState(ctxShacl || InitialShacl); const [result, setResult] = useState(""); @@ -37,8 +39,6 @@ function ShaclInfo(props) { const [disabledLinks, setDisabledLinks] = useState(false); - const { shaclSchema: ctxShacl } = useContext(ApplicationContext); - const urlInfo = API.routes.server.schemaInfo; const urlVisual = API.routes.server.schemaConvert; @@ -57,8 +57,6 @@ function ShaclInfo(props) { } else { setError(API.texts.errorParsingUrl); } - } else { - if (ctxShacl && typeof ctxShacl === "object") setShacl(ctxShacl); } }, [props.location?.search]); diff --git a/src/shacl/ShaclValidate.js b/src/shacl/ShaclValidate.js index 9d24165..cfed461 100644 --- a/src/shacl/ShaclValidate.js +++ b/src/shacl/ShaclValidate.js @@ -12,9 +12,7 @@ import API from "../API"; import PageHeader from "../components/PageHeader"; import { ApplicationContext } from "../context/ApplicationContext"; import { - getDataText, - InitialData, - mkDataTabs, + getDataText, mkDataTabs, paramsFromStateData, updateStateData } from "../data/Data"; @@ -31,11 +29,19 @@ import { } from "./Shacl"; function ShaclValidate(props) { - const [shacl, setShacl] = useState(InitialShacl); - const [data, setData] = useState(InitialData); + // Get all required data from state: data, schema + const { + rdfData: [ctxData], + addRdfData, + shaclSchema: ctxShacl, + validationEndpoint: ctxValidationEndpoint, + } = useContext(ApplicationContext); + + const [data, setData] = useState(ctxData || addRdfData()); + const [shacl, setShacl] = useState(ctxShacl || InitialShacl); - const [endpoint, setEndpoint] = useState(""); - const [withEndpoint, setWithEndpoint] = useState(false); + const [endpoint, setEndpoint] = useState(ctxValidationEndpoint || ""); + const [withEndpoint, setWithEndpoint] = useState(!!ctxValidationEndpoint); const [result, setResult] = useState(""); @@ -49,13 +55,6 @@ function ShaclValidate(props) { const [disabledLinks, setDisabledLinks] = useState(false); - // Get all required data from state: data, schema, shapemap - const { - rdfData: [ctxData], - shaclSchema: ctxShacl, - validationEndpoint: ctxValidationEndpoint, - } = useContext(ApplicationContext); - const url = API.routes.server.schemaValidate; useEffect(() => { @@ -79,13 +78,6 @@ function ShaclValidate(props) { const newParams = mkParams(finalData, finalShacl, finalEndpoint); setParams(newParams); setLastParams(newParams); - } else { - if (ctxData && typeof ctxData === "object") setData(ctxData); - if (ctxShacl && typeof ctxShacl === "object") setShacl(ctxShacl); - if (ctxValidationEndpoint && typeof ctxValidationEndpoint === "string") { - setEndpoint(ctxValidationEndpoint); - setWithEndpoint(!!ctxValidationEndpoint); - } } }, [props.location?.search]); diff --git a/src/shapeMap/ShapeMapInfo.js b/src/shapeMap/ShapeMapInfo.js index cea45ef..ec78e03 100644 --- a/src/shapeMap/ShapeMapInfo.js +++ b/src/shapeMap/ShapeMapInfo.js @@ -22,20 +22,24 @@ import { } from "./ShapeMap"; function ShapeMapInfo(props) { - const [shapemap, setShapemap] = useState(InitialShapeMap); + // Recover user shapeMap from context, if any + const { shapeMap: ctxShapeMap } = useContext(ApplicationContext); + + const [shapemap, setShapemap] = useState(ctxShapeMap || InitialShapeMap); + const [result, setResult] = useState(null); + const [params, setParams] = useState(null); const [lastParams, setLastParams] = useState(null); + const [error, setError] = useState(null); const [loading, setLoading] = useState(false); const [permalink, setPermalink] = useState(null); + const [progressPercent, setProgressPercent] = useState(0); const [disabledLinks, setDisabledLinks] = useState(false); - // Recover user shapeMap from context, if any - const { shapeMap: ctxShapeMap } = useContext(ApplicationContext); - const url = API.routes.server.shapeMapInfo; useEffect(() => { @@ -50,9 +54,6 @@ function ShapeMapInfo(props) { setParams(params); setLastParams(params); } else setError(API.texts.errorParsingUrl); - } else { - if (ctxShapeMap && typeof ctxShapeMap === "object") - setShapemap(ctxShapeMap); } }, [props.location?.search]); diff --git a/src/shex/ShexConvert.js b/src/shex/ShexConvert.js index a57f101..5b2564d 100644 --- a/src/shex/ShexConvert.js +++ b/src/shex/ShexConvert.js @@ -35,6 +35,10 @@ import { } from "./Shex"; function ShexConvert(props) { + const { shexSchema: ctxShex } = useContext(ApplicationContext); + + const [shex, setShex] = useState(ctxShex || InitialShex); + const [targetSchemaFormat, setTargetSchemaFormat] = useState( API.formats.defaultShex ); @@ -42,7 +46,6 @@ function ShexConvert(props) { const [targetSchemaEngine, setTargetSchemaEngine] = useState( API.engines.shex ); - const [shex, setShex] = useState(InitialShex); const [result, setResult] = useState(""); @@ -56,8 +59,6 @@ function ShexConvert(props) { const [disabledLinks, setDisabledLinks] = useState(false); - const { shexSchema: ctxShex } = useContext(ApplicationContext); - const urlConvert = API.routes.server.schemaConvert; // Store the current result type as one of these to know which result component to render @@ -112,8 +113,6 @@ function ShexConvert(props) { } else { setError(API.texts.errorParsingUrl); } - } else { - if (ctxShex && typeof ctxShex === "object") setShex(ctxShex); } }, [props.location?.search]); diff --git a/src/shex/ShexInfo.js b/src/shex/ShexInfo.js index 724d977..ed6138c 100644 --- a/src/shex/ShexInfo.js +++ b/src/shex/ShexInfo.js @@ -23,7 +23,9 @@ import { } from "./Shex"; function ShexInfo(props) { - const [shex, setShEx] = useState(InitialShex); + const { shexSchema: ctxShex } = useContext(ApplicationContext); + + const [shex, setShEx] = useState(ctxShex || InitialShex); const [result, setResult] = useState(""); @@ -37,8 +39,6 @@ function ShexInfo(props) { const [disabledLinks, setDisabledLinks] = useState(false); - const { shexSchema: ctxShex } = useContext(ApplicationContext); - const urlInfo = API.routes.server.schemaInfo; const urlVisual = API.routes.server.schemaConvert; @@ -57,8 +57,6 @@ function ShexInfo(props) { } else { setError(API.texts.errorParsingUrl); } - } else { - if (ctxShex && typeof ctxShex === "object") setShEx(ctxShex); } }, [props.location?.search]); diff --git a/src/shex/ShexValidate.js b/src/shex/ShexValidate.js index 36849f4..6daaca7 100644 --- a/src/shex/ShexValidate.js +++ b/src/shex/ShexValidate.js @@ -12,9 +12,7 @@ import API from "../API"; import PageHeader from "../components/PageHeader"; import { ApplicationContext } from "../context/ApplicationContext"; import { - getDataText, - InitialData, - mkDataTabs, + getDataText, mkDataTabs, paramsFromStateData, updateStateData } from "../data/Data"; @@ -38,9 +36,17 @@ import { } from "./Shex"; function ShexValidate(props) { - const [data, setData] = useState(InitialData); - const [shex, setShEx] = useState(InitialShex); - const [shapeMap, setShapeMap] = useState(InitialShapeMap); + // Get all required data from state: data, schema, shapemap + const { + rdfData: [ctxData], + shexSchema: ctxShex, + shapeMap: ctxShapeMap, + addRdfData, + } = useContext(ApplicationContext); + + const [data, setData] = useState(ctxData || addRdfData()); + const [shex, setShEx] = useState(ctxShex || InitialShex); + const [shapeMap, setShapeMap] = useState(ctxShapeMap || InitialShapeMap); const [endpoint, setEndpoint] = useState(""); const [withEndpoint, setWithEndpoint] = useState(false); // UI reference @@ -57,13 +63,6 @@ function ShexValidate(props) { const [disabledLinks, setDisabledLinks] = useState(false); - // Get all required data from state: data, schema, shapemap - const { - rdfData: [ctxData], - shexSchema: ctxShex, - shapeMap: ctxShapeMap, - } = useContext(ApplicationContext); - const url = API.routes.server.schemaValidate; useEffect(() => { @@ -101,11 +100,6 @@ function ShexValidate(props) { setParams(newParams); setLastParams(newParams); - } else { - if (ctxData && typeof ctxData === "object") setData(ctxData); - if (ctxShex && typeof ctxShex === "object") setShEx(ctxShex); - if (ctxShapeMap && typeof ctxShapeMap === "object") - setShapeMap(ctxShapeMap); } }, [props.location?.search]); diff --git a/src/shex/Xmi2Shex.js b/src/shex/Xmi2Shex.js index bbf3aab..8a10652 100644 --- a/src/shex/Xmi2Shex.js +++ b/src/shex/Xmi2Shex.js @@ -25,7 +25,10 @@ import { mkError } from "../utils/ResponseError"; import { getConverterInput } from "../utils/xmiUtils/shumlexUtils"; export default function Xmi2Shex(props) { - const [uml, setUml] = useState(InitialUML); + // Recover user input data from context, if any. Use first item of the data array + const { umlData: ctxUml } = useContext(ApplicationContext); + + const [uml, setUml] = useState(ctxUml || InitialUML); const [result, setResult] = useState(null); @@ -39,9 +42,6 @@ export default function Xmi2Shex(props) { const [disabledLinks, setDisabledLinks] = useState(false); - // Recover user input data from context, if any. Use first item of the data array - const { umlData: ctxUml } = useContext(ApplicationContext); - useEffect(() => { if (props.location?.search) { const queryParams = qs.parse(props.location.search); @@ -72,8 +72,6 @@ export default function Xmi2Shex(props) { setUpHistory(); doRequest(); } - } else { - if (ctxUml && typeof ctxUml === "object") setUml(ctxUml); } }, [params]); diff --git a/src/uml/UMLTabs.js b/src/uml/UMLTabs.js index bbb85ea..0bdac89 100644 --- a/src/uml/UMLTabs.js +++ b/src/uml/UMLTabs.js @@ -20,22 +20,22 @@ function UMLTabs(props) {