Skip to content

Commit f56b490

Browse files
Settings page ux refactor (#1242)
Co-authored-by: Daniel Valdivia <18384552+dvaldivia@users.noreply.github.com>
1 parent 575bf29 commit f56b490

File tree

10 files changed

+155
-63
lines changed

10 files changed

+155
-63
lines changed

portal-ui/src/screens/Console/Common/FormComponents/CSVMultiSelector/CSVMultiSelector.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ const CSVMultiSelector = ({
146146
<InputBoxWrapper
147147
id={`${name}-${index.toString()}`}
148148
label={""}
149+
classes={classes}
149150
name={`${name}-${index.toString()}`}
150151
value={currentElements[index]}
151152
onChange={onChangeElement}

portal-ui/src/screens/Console/Common/FormComponents/InputBoxWrapper/InputBoxWrapper.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,9 @@ const InputBoxWrapper = ({
148148
<React.Fragment>
149149
<Grid
150150
container
151-
className={` ${error !== "" ? classes.errorInField : ""}`}
151+
className={` ${
152+
error !== "" ? classes.errorInField : classes.inputBoxContainer
153+
}`}
152154
>
153155
{label !== "" && (
154156
<InputLabel

portal-ui/src/screens/Console/Common/FormComponents/common/styleLibrary.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -388,16 +388,14 @@ export const settingsCommon = {
388388
margin: "15px 38px 27px",
389389
},
390390
settingsFormContainer: {
391-
height: "calc(100vh - 421px)",
392-
padding: "15px 38px",
391+
padding: 38,
393392
overflowY: "auto" as const,
394393
scrollbarWidth: "none" as const,
395394
"&::-webkit-scrollbar": {
396395
display: "none",
397396
},
398397
},
399398
settingsButtonContainer: {
400-
borderTop: "1px solid #EAEAEA",
401399
padding: "15px 38px",
402400
textAlign: "right" as const,
403401
},

portal-ui/src/screens/Console/Common/VerticalTabs/VerticalTabs.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ const styles = (theme: Theme) =>
2424
tabsContainer: {
2525
display: "flex",
2626
height: "100%",
27+
width: "100%",
2728
},
2829
tabsHeaderContainer: {
2930
width: "300px",
@@ -39,11 +40,9 @@ const styles = (theme: Theme) =>
3940
alignItems: "center",
4041
justifyContent: "flex-start",
4142
borderBottom: "1px solid #EAEAEA",
42-
"& .min-icon": {
43-
marginRight: ".3rem",
43+
"& .MuiSvgIcon-root": {
44+
marginRight: 8,
4445
marginBottom: 0,
45-
height: ".8rem",
46-
width: ".8rem",
4746
},
4847
"&.Mui-selected": {
4948
background: "#E5E5E5",

portal-ui/src/screens/Console/Configurations/ConfigurationMain.tsx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,13 @@ import React from "react";
1818
import { Route, Router, Switch } from "react-router-dom";
1919
import history from "../../../history";
2020
import ConfigurationOptions from "./ConfigurationPanels/ConfigurationOptions";
21-
import ConfigurationForm from "./ConfigurationPanels/ConfigurationForm";
2221
import NotFoundPage from "../../NotFoundPage";
2322

2423
const ConfigurationMain = () => {
2524
return (
2625
<Router history={history}>
2726
<Switch>
28-
<Route path="/settings" exact component={ConfigurationOptions} />
29-
<Route path="/settings/:option" component={ConfigurationForm} />
27+
<Route path="/settings" component={ConfigurationOptions} />
3028
<Route component={NotFoundPage} />
3129
</Switch>
3230
</Router>

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

Lines changed: 18 additions & 29 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 } from "react";
17+
import React from "react";
1818
import get from "lodash/get";
1919
import { Theme } from "@mui/material/styles";
2020
import createStyles from "@mui/styles/createStyles";
@@ -28,8 +28,6 @@ import {
2828
searchField,
2929
settingsCommon,
3030
} from "../../Common/FormComponents/common/styleLibrary";
31-
import BackLink from "../../../../common/BackLink";
32-
import PageHeader from "../../Common/PageHeader/PageHeader";
3331

3432
interface IListConfiguration {
3533
classes: any;
@@ -65,36 +63,27 @@ const styles = (theme: Theme) =>
6563
},
6664
});
6765

68-
const ConfigurationsList = ({
69-
classes,
70-
match,
71-
history,
72-
}: IListConfiguration) => {
73-
const configurationName = get(match, "params.option", "");
66+
const ConfigurationsList = ({ match, history }: IListConfiguration) => {
67+
const activeConfRoute = get(match, "url", "");
7468

75-
const findConfiguration = configurationElements.find(
76-
(element) => element.configuration_id === configurationName
69+
const configName = activeConfRoute.substring(
70+
activeConfRoute.lastIndexOf("/") + 1
7771
);
7872

73+
const validActiveConfig = configurationElements.find(
74+
(element) => element.configuration_id === configName
75+
);
76+
const containerClassName = `${configName}`;
7977
return (
80-
<Fragment>
81-
<PageHeader
82-
label={`${findConfiguration?.configuration_label} Settings`}
83-
/>
84-
<Grid container className={classes.container}>
85-
<Grid item xs={12} className={classes.mainTitle}>
86-
<BackLink to="/settings" label="Return to Settings" />
87-
</Grid>
88-
<Grid item xs={12}>
89-
{findConfiguration && (
90-
<EditConfiguration
91-
selectedConfiguration={findConfiguration}
92-
history={history}
93-
/>
94-
)}
95-
</Grid>
96-
</Grid>
97-
</Fragment>
78+
<Grid item xs={12}>
79+
{validActiveConfig && (
80+
<EditConfiguration
81+
className={`${containerClassName}`}
82+
selectedConfiguration={validActiveConfig}
83+
history={history}
84+
/>
85+
)}
86+
</Grid>
9887
);
9988
};
10089

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

Lines changed: 60 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,19 @@ import {
2727
searchField,
2828
} from "../../Common/FormComponents/common/styleLibrary";
2929
import PageHeader from "../../Common/PageHeader/PageHeader";
30-
import SettingsCard from "../../Common/SettingsCard/SettingsCard";
3130
import HelpBox from "../../../../common/HelpBox";
3231
import { SettingsIcon } from "../../../../icons";
32+
import { Link, Redirect, Route, Router, Switch } from "react-router-dom";
33+
import ConfigurationForm from "./ConfigurationForm";
34+
import history from "../../../../history";
35+
import VerticalTabs from "../../Common/VerticalTabs/VerticalTabs";
36+
import PageLayout from "../../Common/Layout/PageLayout";
37+
import get from "lodash/get";
38+
import ScreenTitle from "../../Common/ScreenTitle/ScreenTitle";
3339

3440
interface IConfigurationOptions {
3541
classes: any;
42+
match: any;
3643
}
3744

3845
const styles = (theme: Theme) =>
@@ -60,7 +67,6 @@ const styles = (theme: Theme) =>
6067
flexWrap: "wrap" as const,
6168
border: "#E5E5E5 1px solid",
6269
borderRadius: 2,
63-
padding: 5,
6470
backgroundColor: "#fff",
6571
},
6672
configurationLink: {
@@ -76,20 +82,63 @@ const styles = (theme: Theme) =>
7682
...containerForHeader(theme.spacing(4)),
7783
});
7884

79-
const ConfigurationOptions = ({ classes }: IConfigurationOptions) => {
85+
const getRoutePath = (path: string) => {
86+
return `/settings/${path}`;
87+
};
88+
89+
const ConfigurationOptions = ({ classes, match }: IConfigurationOptions) => {
90+
const configurationName = get(match, "url", "");
91+
let selConfigTab = configurationName.substring(
92+
configurationName.lastIndexOf("/") + 1
93+
);
94+
selConfigTab = selConfigTab === "settings" ? "region" : selConfigTab;
95+
8096
return (
8197
<Fragment>
8298
<PageHeader label={"Settings"} />
83-
<Grid container className={classes.container}>
99+
100+
<PageLayout>
84101
<Grid item xs={12}>
85102
<Grid item xs={12}>
86103
<div className={classes.settingsOptionsContainer}>
87-
{configurationElements.map((element) => (
88-
<SettingsCard
89-
configuration={element}
90-
key={`configItem-${element.configuration_label}`}
91-
/>
92-
))}
104+
<ScreenTitle icon={<SettingsIcon />} title={"Configuration:"} />
105+
<VerticalTabs
106+
selectedTab={selConfigTab}
107+
isRouteTabs
108+
routes={
109+
<div className={classes.contentSpacer}>
110+
<Router history={history}>
111+
<Switch>
112+
{configurationElements.map((element) => (
113+
<Route
114+
exact
115+
key={`configItem-${element.configuration_label}`}
116+
path={`/settings/${element.configuration_id}`}
117+
component={ConfigurationForm}
118+
/>
119+
))}
120+
<Route exact path="/settings">
121+
<Redirect to="/settings/region" />
122+
</Route>
123+
</Switch>
124+
</Router>
125+
</div>
126+
}
127+
>
128+
{configurationElements.map((element) => {
129+
const { configuration_id, configuration_label, icon } =
130+
element;
131+
return {
132+
tabConfig: {
133+
label: configuration_label,
134+
value: configuration_id,
135+
icon: icon,
136+
component: Link,
137+
to: getRoutePath(configuration_id),
138+
},
139+
};
140+
})}
141+
</VerticalTabs>
93142
</div>
94143
</Grid>
95144
</Grid>
@@ -116,7 +165,7 @@ const ConfigurationOptions = ({ classes }: IConfigurationOptions) => {
116165
}
117166
/>
118167
</Grid>
119-
</Grid>
168+
</PageLayout>
120169
</Fragment>
121170
);
122171
};

portal-ui/src/screens/Console/Console.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ const IconsScreen = React.lazy(() => import("./Common/IconsScreen"));
8686

8787
const Speedtest = React.lazy(() => import("./Speedtest/Speedtest"));
8888

89+
8990
const drawerWidth = 245;
9091

9192
const Buckets = React.lazy(() => import("./Buckets/Buckets"));
@@ -102,6 +103,7 @@ const TenantDetails = React.lazy(
102103
() => import("./Tenants/TenantDetails/TenantDetails")
103104
);
104105
const License = React.lazy(() => import("./License/License"));
106+
const ConfigurationOptions = React.lazy(() => import("./Configurations/ConfigurationPanels/ConfigurationOptions"));
105107

106108
const styles = (theme: Theme) =>
107109
createStyles({
@@ -341,11 +343,11 @@ const Console = ({
341343
path: "/tools",
342344
},
343345
{
344-
component: ConfigurationMain,
346+
component: ConfigurationOptions,
345347
path: "/settings",
346348
},
347349
{
348-
component: ConfigurationMain,
350+
component: ConfigurationOptions,
349351
path: "/settings/:option",
350352
},
351353
{

0 commit comments

Comments
 (0)