2022-01-28 12:34:20 +00:00
|
|
|
import { Typography } from "@material-ui/core";
|
2021-09-23 14:18:38 +00:00
|
|
|
import { useTheme } from "@material-ui/core/styles";
|
|
|
|
import useMediaQuery from "@material-ui/core/useMediaQuery";
|
2022-11-17 12:48:50 +00:00
|
|
|
import { UserFragment } from "@saleor/graphql";
|
2020-05-14 09:30:32 +00:00
|
|
|
import { sectionNames } from "@saleor/intl";
|
2022-03-09 08:56:55 +00:00
|
|
|
import { makeStyles, NavigationCard } from "@saleor/macaw-ui";
|
2019-08-09 10:26:22 +00:00
|
|
|
import React from "react";
|
2019-08-26 12:56:31 +00:00
|
|
|
import { useIntl } from "react-intl";
|
2022-01-28 12:34:20 +00:00
|
|
|
import { Link } from "react-router-dom";
|
2019-06-19 14:40:52 +00:00
|
|
|
|
|
|
|
import Container from "../components/Container";
|
|
|
|
import PageHeader from "../components/PageHeader";
|
2021-09-23 14:18:38 +00:00
|
|
|
import VersionInfo from "../components/VersionInfo";
|
2022-11-17 12:48:50 +00:00
|
|
|
import { MenuSection } from "./types";
|
|
|
|
import { hasUserMenuItemPermissions } from "./utils";
|
2019-06-19 14:40:52 +00:00
|
|
|
|
2021-09-23 14:18:38 +00:00
|
|
|
interface VersionInfo {
|
|
|
|
dashboardVersion: string;
|
|
|
|
coreVersion: string;
|
|
|
|
}
|
|
|
|
|
2019-12-03 15:28:40 +00:00
|
|
|
const useStyles = makeStyles(
|
|
|
|
theme => ({
|
|
|
|
configurationCategory: {
|
|
|
|
[theme.breakpoints.down("md")]: {
|
2022-06-21 09:36:55 +00:00
|
|
|
gridTemplateColumns: "1fr",
|
2019-12-03 15:28:40 +00:00
|
|
|
},
|
|
|
|
borderTop: `solid 1px ${theme.palette.divider}`,
|
|
|
|
display: "grid",
|
2022-01-28 12:34:20 +00:00
|
|
|
gap: theme.spacing(4),
|
2019-12-03 15:28:40 +00:00
|
|
|
gridTemplateColumns: "1fr 3fr",
|
2022-06-21 09:36:55 +00:00
|
|
|
padding: theme.spacing(4, 0),
|
2019-09-03 08:58:58 +00:00
|
|
|
},
|
2019-12-03 15:28:40 +00:00
|
|
|
configurationItem: {
|
|
|
|
[theme.breakpoints.down("md")]: {
|
2022-06-21 09:36:55 +00:00
|
|
|
gridTemplateColumns: "1fr",
|
2019-12-03 15:28:40 +00:00
|
|
|
},
|
|
|
|
display: "grid",
|
2022-01-28 12:34:20 +00:00
|
|
|
gap: theme.spacing(4),
|
2022-06-21 09:36:55 +00:00
|
|
|
gridTemplateColumns: "1fr 1fr",
|
2019-11-04 19:32:57 +00:00
|
|
|
},
|
2019-12-03 15:28:40 +00:00
|
|
|
configurationLabel: {
|
2022-06-21 09:36:55 +00:00
|
|
|
paddingBottom: 20,
|
2019-12-03 15:28:40 +00:00
|
|
|
},
|
|
|
|
header: {
|
2022-06-21 09:36:55 +00:00
|
|
|
margin: 0,
|
2019-12-03 15:28:40 +00:00
|
|
|
},
|
2022-01-28 12:34:20 +00:00
|
|
|
link: {
|
|
|
|
display: "contents",
|
2022-06-21 09:36:55 +00:00
|
|
|
marginBottom: theme.spacing(4),
|
2022-01-28 12:34:20 +00:00
|
|
|
},
|
2019-12-03 15:28:40 +00:00
|
|
|
icon: {
|
2020-05-12 01:20:21 +00:00
|
|
|
"& path": {
|
2022-06-21 09:36:55 +00:00
|
|
|
fill: theme.palette.primary.main,
|
2020-05-12 01:20:21 +00:00
|
|
|
},
|
2022-06-21 09:36:55 +00:00
|
|
|
fontSize: 48,
|
2019-12-03 15:28:40 +00:00
|
|
|
},
|
|
|
|
sectionDescription: {},
|
|
|
|
sectionTitle: {
|
|
|
|
fontSize: 20,
|
2022-06-21 09:36:55 +00:00
|
|
|
fontWeight: 600 as 600,
|
|
|
|
},
|
2019-12-03 15:28:40 +00:00
|
|
|
}),
|
2022-06-21 09:36:55 +00:00
|
|
|
{ name: "ConfigurationPage" },
|
2019-12-03 15:28:40 +00:00
|
|
|
);
|
2019-06-19 14:40:52 +00:00
|
|
|
|
2019-08-26 12:56:31 +00:00
|
|
|
export interface ConfigurationPageProps {
|
2019-09-16 11:43:02 +00:00
|
|
|
menu: MenuSection[];
|
2022-03-09 08:56:55 +00:00
|
|
|
user: UserFragment;
|
2021-09-23 14:18:38 +00:00
|
|
|
versionInfo: VersionInfo;
|
2019-06-19 14:40:52 +00:00
|
|
|
}
|
|
|
|
|
2019-10-30 14:34:24 +00:00
|
|
|
export const ConfigurationPage: React.FC<ConfigurationPageProps> = props => {
|
2021-09-23 14:18:38 +00:00
|
|
|
const {
|
|
|
|
menu: menus,
|
|
|
|
user,
|
2022-06-21 09:36:55 +00:00
|
|
|
versionInfo: { dashboardVersion, coreVersion },
|
2021-09-23 14:18:38 +00:00
|
|
|
} = props;
|
2019-10-30 14:34:24 +00:00
|
|
|
const classes = useStyles(props);
|
2021-09-23 14:18:38 +00:00
|
|
|
const theme = useTheme();
|
|
|
|
const isSmUp = useMediaQuery(theme.breakpoints.up("sm"));
|
|
|
|
|
|
|
|
const renderVersionInfo = (
|
|
|
|
<VersionInfo
|
|
|
|
dashboardVersion={dashboardVersion}
|
|
|
|
coreVersion={coreVersion}
|
|
|
|
/>
|
|
|
|
);
|
2019-10-30 14:34:24 +00:00
|
|
|
|
|
|
|
const intl = useIntl();
|
2021-09-24 12:01:54 +00:00
|
|
|
|
2019-10-30 14:34:24 +00:00
|
|
|
return (
|
|
|
|
<Container>
|
2021-09-23 14:18:38 +00:00
|
|
|
{!isSmUp && renderVersionInfo}
|
2019-10-30 14:34:24 +00:00
|
|
|
<PageHeader
|
|
|
|
className={classes.header}
|
|
|
|
title={intl.formatMessage(sectionNames.configuration)}
|
2021-09-23 14:18:38 +00:00
|
|
|
>
|
|
|
|
{isSmUp && renderVersionInfo}
|
|
|
|
</PageHeader>
|
2019-10-30 14:34:24 +00:00
|
|
|
{menus
|
|
|
|
.filter(menu =>
|
|
|
|
menu.menuItems.some(menuItem =>
|
2022-11-17 12:48:50 +00:00
|
|
|
hasUserMenuItemPermissions(menuItem, user),
|
2022-06-21 09:36:55 +00:00
|
|
|
),
|
2019-10-30 14:34:24 +00:00
|
|
|
)
|
|
|
|
.map((menu, menuIndex) => (
|
|
|
|
<div className={classes.configurationCategory} key={menuIndex}>
|
|
|
|
<div className={classes.configurationLabel}>
|
|
|
|
<Typography>{menu.label}</Typography>
|
2019-09-12 14:38:40 +00:00
|
|
|
</div>
|
2019-10-30 14:34:24 +00:00
|
|
|
<div className={classes.configurationItem}>
|
|
|
|
{menu.menuItems
|
2022-11-17 12:48:50 +00:00
|
|
|
.filter(menuItem => hasUserMenuItemPermissions(menuItem, user))
|
2019-10-30 14:34:24 +00:00
|
|
|
.map((item, itemIndex) => (
|
2022-01-28 12:34:20 +00:00
|
|
|
<Link className={classes.link} to={item.url}>
|
|
|
|
<NavigationCard
|
|
|
|
key={itemIndex}
|
|
|
|
icon={item.icon}
|
|
|
|
title={item.title}
|
|
|
|
description={item.description}
|
2022-02-11 11:28:55 +00:00
|
|
|
data-test-id={
|
|
|
|
item.testId +
|
|
|
|
"-settings-subsection-" +
|
|
|
|
item.title.toLowerCase()
|
|
|
|
}
|
2022-01-28 12:34:20 +00:00
|
|
|
/>
|
|
|
|
</Link>
|
2019-10-30 14:34:24 +00:00
|
|
|
))}
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
))}
|
|
|
|
</Container>
|
|
|
|
);
|
|
|
|
};
|
2019-06-19 14:40:52 +00:00
|
|
|
ConfigurationPage.displayName = "ConfigurationPage";
|
|
|
|
export default ConfigurationPage;
|