Skip to content

Commit 0823f62

Browse files
authored
fix configuration page to include configs based on supported config subsystems (#2946)
1 parent 6cec113 commit 0823f62

File tree

1 file changed

+47
-5
lines changed

1 file changed

+47
-5
lines changed

portal-ui/src/screens/Console/Configurations/ConfigurationPanels/ConfigurationOptions.tsx

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
// You should have received a copy of the GNU Affero General Public License
1515
// along with this program. If not, see <http://www.gnu.org/licenses/>.
1616

17-
import React, { Fragment, useEffect } from "react";
17+
import React, { Fragment, useCallback, useEffect, useState } from "react";
1818
import { Theme } from "@mui/material/styles";
1919
import createStyles from "@mui/styles/createStyles";
2020
import withStyles from "@mui/styles/withStyles";
@@ -37,8 +37,11 @@ import ExportConfigButton from "./ExportConfigButton";
3737
import ImportConfigButton from "./ImportConfigButton";
3838
import { Box } from "@mui/material";
3939
import HelpMenu from "../../HelpMenu";
40-
import { setHelpName } from "../../../../systemSlice";
40+
import { setErrorSnackMessage, setHelpName } from "../../../../systemSlice";
4141
import { useAppDispatch } from "../../../../store";
42+
import { api } from "../../../../api";
43+
import { IElement } from "../types";
44+
import { errorToHandler } from "../../../../api/errors";
4245

4346
interface IConfigurationOptions {
4447
classes: any;
@@ -64,17 +67,56 @@ const getRoutePath = (path: string) => {
6467
return `${IAM_PAGES.SETTINGS}/${path}`;
6568
};
6669

70+
// region is not part of config subsystem list.
71+
const NON_SUB_SYS_CONFIG_ITEMS = ["region"];
72+
const IGNORED_CONFIG_SUB_SYS = ["cache"]; // cache config is not supported.
73+
6774
const ConfigurationOptions = ({ classes }: IConfigurationOptions) => {
6875
const { pathname = "" } = useLocation();
76+
const dispatch = useAppDispatch();
77+
78+
const [configSubSysList, setConfigSubSysList] = useState<string[]>([]);
79+
const fetchConfigSubSysList = useCallback(async () => {
80+
api.configs
81+
.listConfig() // get a list of available config subsystems.
82+
.then((res) => {
83+
if (res && res?.data && res?.data?.configurations) {
84+
const confSubSysList = (res?.data?.configurations || []).reduce(
85+
(acc: string[], { key = "" }) => {
86+
if (!IGNORED_CONFIG_SUB_SYS.includes(key)) {
87+
acc.push(key);
88+
}
89+
return acc;
90+
},
91+
[],
92+
);
93+
94+
setConfigSubSysList(confSubSysList);
95+
}
96+
})
97+
.catch((err) => {
98+
dispatch(setErrorSnackMessage(errorToHandler(err)));
99+
});
100+
}, [dispatch]);
69101

70102
let selConfigTab = pathname.substring(pathname.lastIndexOf("/") + 1);
71103
selConfigTab = selConfigTab === "settings" ? "region" : selConfigTab;
72-
const dispatch = useAppDispatch();
73104
useEffect(() => {
105+
fetchConfigSubSysList();
74106
dispatch(setHelpName("settings_Region"));
75107
// eslint-disable-next-line react-hooks/exhaustive-deps
76108
}, []);
77109

110+
const availableConfigSubSys = configurationElements.filter(
111+
({ configuration_id }: IElement) => {
112+
return (
113+
NON_SUB_SYS_CONFIG_ITEMS.includes(configuration_id) ||
114+
configSubSysList.includes(configuration_id) ||
115+
!configSubSysList.length
116+
);
117+
},
118+
);
119+
78120
return (
79121
<Fragment>
80122
<PageHeaderWrapper label={"Settings"} actions={<HelpMenu />} />
@@ -104,7 +146,7 @@ const ConfigurationOptions = ({ classes }: IConfigurationOptions) => {
104146
isRouteTabs
105147
routes={
106148
<Routes>
107-
{configurationElements.map((element) => (
149+
{availableConfigSubSys.map((element) => (
108150
<Route
109151
key={`configItem-${element.configuration_label}`}
110152
path={`${element.configuration_id}`}
@@ -118,7 +160,7 @@ const ConfigurationOptions = ({ classes }: IConfigurationOptions) => {
118160
</Routes>
119161
}
120162
>
121-
{configurationElements.map((element) => {
163+
{availableConfigSubSys.map((element) => {
122164
const { configuration_id, configuration_label, icon } = element;
123165
return {
124166
tabConfig: {

0 commit comments

Comments
 (0)