-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathapp-top-bar.jsx
More file actions
99 lines (90 loc) · 3.57 KB
/
Copy pathapp-top-bar.jsx
File metadata and controls
99 lines (90 loc) · 3.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/**
* Copyright (c) 2021, RTE (http://www.rte-france.com)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
import { useEffect, useState } from 'react';
import {
fetchAppsMetadata,
LIGHT_THEME,
logout,
TopBar,
PARAM_DEVELOPER_MODE,
PARAM_LANGUAGE,
PARAM_THEME,
} from '@gridsuite/commons-ui';
import GridStudyLogoLight from '../images/GridStudy_logo_light.svg?react';
import GridStudyLogoDark from '../images/GridStudy_logo_dark.svg?react';
import { Box } from '@mui/material';
import { PARAM_USE_NAME } from '../utils/config-params';
import { useDispatch, useSelector } from 'react-redux';
import PropTypes from 'prop-types';
import AppPackage from '../../package.json';
import { getServersInfos } from '../services/study';
import { fetchVersion } from '../services/utils';
import { useParameterState } from './dialogs/parameters/use-parameters-state';
import { WorkspaceToolbar } from './workspace/core/workspace-toolbar';
const styles = {
boxContent: (theme) => ({
display: 'flex',
overflow: 'hidden',
alignItems: 'center',
width: '100%',
marginLeft: theme.spacing(1),
}),
};
const AppTopBar = ({ userProfile, userManager }) => {
const dispatch = useDispatch();
const theme = useSelector((state) => state[PARAM_THEME]);
const studyUuid = useSelector((state) => state.studyUuid);
const currentRootNetworkUuid = useSelector((state) => state.currentRootNetworkUuid);
const [appsAndUrls, setAppsAndUrls] = useState([]);
const [languageLocal, handleChangeLanguage] = useParameterState(PARAM_LANGUAGE);
const [useNameLocal, handleChangeUseName] = useParameterState(PARAM_USE_NAME);
const [themeLocal, handleChangeTheme] = useParameterState(PARAM_THEME);
const [isDeveloperMode, handleChangeDeveloperMode] = useParameterState(PARAM_DEVELOPER_MODE);
useEffect(() => {
if (userProfile !== null) {
fetchAppsMetadata().then((res) => {
setAppsAndUrls(res);
});
}
}, [userProfile]);
return (
<TopBar
appName="Study"
appColor="#0CA789"
appLogo={theme === LIGHT_THEME ? <GridStudyLogoLight /> : <GridStudyLogoDark />}
onLogoutClick={() => logout(dispatch, userManager.instance)}
userProfile={userProfile}
appsAndUrls={appsAndUrls}
onThemeClick={handleChangeTheme}
appVersion={AppPackage.version}
appLicense={AppPackage.license}
globalVersionPromise={() => fetchVersion().then((res) => res?.deployVersion)}
additionalModulesPromise={getServersInfos}
theme={themeLocal}
onDeveloperModeClick={handleChangeDeveloperMode}
developerMode={isDeveloperMode}
onEquipmentLabellingClick={handleChangeUseName}
equipmentLabelling={useNameLocal}
onLanguageClick={handleChangeLanguage}
language={languageLocal}
dense
>
{userProfile && studyUuid && currentRootNetworkUuid && (
<Box sx={styles.boxContent}>
<Box sx={{ display: 'flex', alignItems: 'center', marginLeft: 1.5 }}>
<WorkspaceToolbar />
</Box>
</Box>
)}
</TopBar>
);
};
AppTopBar.propTypes = {
userProfile: PropTypes.object,
userManager: PropTypes.object.isRequired,
};
export default AppTopBar;