diff --git a/package-lock.json b/package-lock.json
index 72b8ba4..46383bb 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -7,10 +7,11 @@
"": {
"name": "gridmerge-app",
"version": "0.1.0",
+ "license": "MPL-2.0",
"dependencies": {
"@emotion/react": "^11.8.2",
"@emotion/styled": "^11.8.1",
- "@gridsuite/commons-ui": "0.41.0",
+ "@gridsuite/commons-ui": "^0.42.0",
"@mui/icons-material": "^5.5.1",
"@mui/lab": "^5.0.0-alpha.75",
"@mui/material": "^5.5.3",
@@ -27,6 +28,7 @@
"prop-types": "^15.7.2",
"react": "^18.0.0",
"react-dom": "^18.0.0",
+ "react-hook-form": "^7.48.2",
"react-intl": "^6.0.0",
"react-redux": "^8.0.0",
"react-router-dom": "^6.0.0",
@@ -38,15 +40,14 @@
"reconnecting-websocket": "^4.4.0",
"redux": "^4.0.5",
"typeface-roboto": "^1.0.0",
- "typescript": "^5.1.3"
+ "typescript": "^5.1.3",
+ "yup": "^1.3.2"
},
"devDependencies": {
"eslint-config-prettier": "^8.0.0",
"eslint-plugin-prettier": "^4.0.0",
"http-proxy-middleware": "^2.0.0",
- "prettier": "^2.0.5",
- "react-hook-form": "^7.48.2",
- "yup": "^1.3.2"
+ "prettier": "^2.0.5"
}
},
"node_modules/@ampproject/remapping": {
@@ -2578,9 +2579,9 @@
}
},
"node_modules/@gridsuite/commons-ui": {
- "version": "0.41.0",
- "resolved": "https://registry.npmjs.org/@gridsuite/commons-ui/-/commons-ui-0.41.0.tgz",
- "integrity": "sha512-GxRZBWhvXxVKgXAg6HIWX+t2UpCTdgkKlnwjceLY5FxaZcBCaNAISzz7HNGYtAvj3gePNlKGSeGNNQcoOe9pRA==",
+ "version": "0.42.0",
+ "resolved": "https://registry.npmjs.org/@gridsuite/commons-ui/-/commons-ui-0.42.0.tgz",
+ "integrity": "sha512-v8b52OEMGmyDNvosXpnC/Q8HXPY6v93g2qFKr6NB46ubKmADB1Q0fcKoopHg8/fbcFrkdvcGUFpWpHdqZ5fPog==",
"dependencies": {
"autosuggest-highlight": "^3.2.0",
"clsx": "^1.0.4",
@@ -14852,8 +14853,7 @@
"node_modules/property-expr": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz",
- "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==",
- "dev": true
+ "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA=="
},
"node_modules/proxy-addr": {
"version": "2.0.7",
@@ -15160,7 +15160,6 @@
"version": "7.48.2",
"resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.48.2.tgz",
"integrity": "sha512-H0T2InFQb1hX7qKtDIZmvpU1Xfn/bdahWBN1fH19gSe4bBEqTfmlr7H3XWTaVtiK4/tpPaI1F3355GPMZYge+A==",
- "dev": true,
"engines": {
"node": ">=12.22.0"
},
@@ -17041,8 +17040,7 @@
"node_modules/tiny-case": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/tiny-case/-/tiny-case-1.0.3.tgz",
- "integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==",
- "dev": true
+ "integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q=="
},
"node_modules/tiny-warning": {
"version": "1.0.3",
@@ -17102,8 +17100,7 @@
"node_modules/toposort": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz",
- "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==",
- "dev": true
+ "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg=="
},
"node_modules/tough-cookie": {
"version": "4.1.2",
@@ -18415,7 +18412,6 @@
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/yup/-/yup-1.3.2.tgz",
"integrity": "sha512-6KCM971iQtJ+/KUaHdrhVr2LDkfhBtFPRnsG1P8F4q3uUVQ2RfEM9xekpha9aA4GXWJevjM10eDcPQ1FfWlmaQ==",
- "dev": true,
"dependencies": {
"property-expr": "^2.0.5",
"tiny-case": "^1.0.3",
@@ -18427,7 +18423,6 @@
"version": "2.19.0",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
"integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
- "dev": true,
"engines": {
"node": ">=12.20"
},
diff --git a/package.json b/package.json
index 194edaf..339729e 100644
--- a/package.json
+++ b/package.json
@@ -1,12 +1,13 @@
{
"name": "gridmerge-app",
"version": "0.1.0",
+ "license": "MPL-2.0",
"homepage": ".",
"private": true,
"dependencies": {
"@emotion/react": "^11.8.2",
"@emotion/styled": "^11.8.1",
- "@gridsuite/commons-ui": "0.41.0",
+ "@gridsuite/commons-ui": "^0.42.0",
"@mui/icons-material": "^5.5.1",
"@mui/lab": "^5.0.0-alpha.75",
"@mui/material": "^5.5.3",
diff --git a/src/components/app-top-bar.js b/src/components/app-top-bar.js
index dcf30eb..e450131 100644
--- a/src/components/app-top-bar.js
+++ b/src/components/app-top-bar.js
@@ -9,7 +9,12 @@ import { LIGHT_THEME, logout, TopBar } from '@gridsuite/commons-ui';
import Parameters, { useParameterState } from './parameters';
import { PARAM_LANGUAGE, PARAM_THEME } from '../utils/config-params';
import { useDispatch, useSelector } from 'react-redux';
-import { fetchAppsAndUrls, fetchMergeConfigs } from '../utils/rest-api';
+import {
+ fetchAppsAndUrls,
+ fetchMergeConfigs,
+ fetchVersion,
+ getServersInfos,
+} from '../utils/rest-api';
import PropTypes from 'prop-types';
import { useNavigate, useMatch } from 'react-router-dom';
import { ReactComponent as GridMergeLogoLight } from '../images/GridMerge_logo_light.svg';
@@ -19,6 +24,7 @@ import { FormattedMessage } from 'react-intl';
import ProcessesConfigurationDialog from './processes-configuration-dialog';
import { makeStyles } from '@mui/styles';
import { initProcesses } from '../redux/actions';
+import AppPackage from '../../package.json';
export const PREFIX_URL_PROCESSES = '/processes';
@@ -81,26 +87,6 @@ const AppTopBar = ({ user, userManager }) => {
return index !== -1 ? matchProcess.params.processName : false;
}, [configs, matchProcess]);
- function toggleTab(newTabValue) {
- navigate(PREFIX_URL_PROCESSES + '/' + newTabValue);
- }
-
- function showParametersClicked() {
- setShowParameters(true);
- }
-
- function hideParameters() {
- setShowParameters(false);
- }
-
- function onLogoClicked() {
- navigate('/', { replace: true });
- }
-
- const showPopupConfigurationProcesses = () => {
- setShowConfigurationProcesses(true);
- };
-
return (
<>
{
)
}
- onParametersClick={() => showParametersClicked()}
+ appVersion={AppPackage.version}
+ appLicense={AppPackage.license}
+ onParametersClick={() => setShowParameters(true)}
onLogoutClick={() => logout(dispatch, userManager.instance)}
- onLogoClick={() => onLogoClicked()}
+ onLogoClick={() => navigate('/', { replace: true })}
user={user}
appsAndUrls={appsAndUrls}
onThemeClick={handleChangeTheme}
theme={themeLocal}
- onAboutClick={() => console.debug('about')}
onLanguageClick={handleChangeLanguage}
language={languageLocal}
+ getGlobalVersion={(setGlobalVersion) =>
+ fetchVersion()
+ .then((res) => setGlobalVersion(res.deployVersion))
+ .catch((reason) => {
+ console.error(
+ 'Error while fetching the version : ' + reason
+ );
+ setGlobalVersion(null);
+ })
+ }
+ getAdditionalModules={(setServers) =>
+ getServersInfos()
+ .then((res) =>
+ setServers(
+ Object.entries(res).map(([name, infos]) => ({
+ name:
+ infos?.build?.name ||
+ infos?.build?.artifact ||
+ name,
+ type: 'server',
+ version: infos?.build?.version,
+ gitTag:
+ infos?.git?.tags ||
+ infos?.git?.commit?.id[
+ 'describe-short'
+ ],
+ }))
+ )
+ )
+ .catch((reason) => {
+ console.error(
+ 'Error while fetching the servers infos : ' +
+ reason
+ );
+ setServers(null);
+ })
+ }
>
toggleTab(newValue)}
+ onChange={(event, newValue) =>
+ navigate(PREFIX_URL_PROCESSES + '/' + newValue)
+ }
aria-label="parameters"
className={classes.process}
>
@@ -145,7 +171,7 @@ const AppTopBar = ({ user, userManager }) => {
<>
@@ -161,7 +187,7 @@ const AppTopBar = ({ user, userManager }) => {
setShowParameters(false)}
/>
>
);
diff --git a/src/utils/rest-api.js b/src/utils/rest-api.js
index bc7403a..61c8492 100644
--- a/src/utils/rest-api.js
+++ b/src/utils/rest-api.js
@@ -21,6 +21,7 @@ const PREFIX_CONFIG_NOTIFICATION_WS =
process.env.REACT_APP_WS_GATEWAY + '/config-notification';
const PREFIX_CONFIG_QUERIES = process.env.REACT_APP_API_GATEWAY + '/config';
const PREFIX_BOUNDARY_QUERIES = process.env.REACT_APP_API_GATEWAY + '/boundary';
+const PREFIX_STUDY_QUERIES = process.env.REACT_APP_API_GATEWAY + '/study';
function getToken() {
const state = store.getState();
@@ -234,44 +235,48 @@ export function getExportMergeUrl(processUuid, date, format) {
return getUrlWithToken(url);
}
+function fetchEnv() {
+ return fetch('env.json').then((res) => res.json());
+}
+
export function fetchAuthorizationCodeFlowFeatureFlag() {
console.info(`Fetching authorization code flow feature flag...`);
- return fetch('env.json')
+ return fetchEnv()
+ .then((res) =>
+ fetch(res.appsMetadataServerUrl + '/authentication.json')
+ )
.then((res) => res.json())
.then((res) => {
- return fetch(res.appsMetadataServerUrl + '/authentication.json')
- .then((res) => res.json())
- .then((res) => {
- console.log(
- `Authorization code flow is ${
- res.authorizationCodeFlowFeatureFlag
- ? 'enabled'
- : 'disabled'
- }`
- );
- return res.authorizationCodeFlowFeatureFlag;
- })
- .catch((error) => {
- console.error(error);
- console.warn(
- `Something wrong happened when retrieving authentication.json: authorization code flow will be disabled`
- );
- return false;
- });
+ console.log(
+ `Authorization code flow is ${
+ res.authorizationCodeFlowFeatureFlag
+ ? 'enabled'
+ : 'disabled'
+ }`
+ );
+ return res.authorizationCodeFlowFeatureFlag;
+ })
+ .catch((error) => {
+ console.error(error);
+ console.warn(
+ `Something wrong happened when retrieving authentication.json: authorization code flow will be disabled`
+ );
+ return false;
});
}
export function fetchAppsAndUrls() {
console.info(`Fetching apps and urls...`);
- return fetch('env.json')
- .then((res) => res.json())
- .then((res) => {
- return fetch(
- res.appsMetadataServerUrl + '/apps-metadata.json'
- ).then((response) => {
- return response.json();
- });
- });
+ return fetchEnv()
+ .then((env) => fetch(env.appsMetadataServerUrl + '/apps-metadata.json'))
+ .then((response) => response.json());
+}
+
+export function fetchVersion() {
+ console.info(`Fetching global metadata...`);
+ return fetchEnv()
+ .then((env) => fetch(env.appsMetadataServerUrl + '/version.json'))
+ .then((response) => response.json());
}
/**
@@ -464,3 +469,8 @@ export const MergeType = PropTypes.shape({
})
),
});
+
+export function getServersInfos() {
+ console.info('get backend servers informations');
+ return backendFetchJson(PREFIX_STUDY_QUERIES + '/v1/servers/infos');
+}