Display app versions (#1433)
apply changes from review apply changes from review use useShop hook for core version
This commit is contained in:
parent
eaed88a23a
commit
d4ffd88752
7 changed files with 130 additions and 2 deletions
31
src/components/VersionInfo/VersionInfo.tsx
Normal file
31
src/components/VersionInfo/VersionInfo.tsx
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
import { Typography } from "@material-ui/core";
|
||||||
|
import React from "react";
|
||||||
|
|
||||||
|
import { useStyles } from "./styles";
|
||||||
|
interface VersionInfoProps {
|
||||||
|
dashboardVersion: string;
|
||||||
|
coreVersion: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
const VersionInfo: React.FC<VersionInfoProps> = ({
|
||||||
|
dashboardVersion,
|
||||||
|
coreVersion
|
||||||
|
}) => {
|
||||||
|
const classes = useStyles({});
|
||||||
|
|
||||||
|
if (!dashboardVersion || !coreVersion) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Typography variant="caption" className={classes.container}>
|
||||||
|
<div
|
||||||
|
className={classes.versionItem}
|
||||||
|
>{`dashboard v${dashboardVersion}`}</div>
|
||||||
|
<div className={classes.versionItem}>{`core v${coreVersion}`}</div>
|
||||||
|
</Typography>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
VersionInfo.displayName = "VersionInfo";
|
||||||
|
export default VersionInfo;
|
2
src/components/VersionInfo/index.tsx
Normal file
2
src/components/VersionInfo/index.tsx
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
export { default } from "./VersionInfo";
|
||||||
|
export * from "./VersionInfo";
|
26
src/components/VersionInfo/styles.ts
Normal file
26
src/components/VersionInfo/styles.ts
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
import { makeStyles } from "@saleor/macaw-ui";
|
||||||
|
|
||||||
|
export const useStyles = makeStyles(
|
||||||
|
theme => ({
|
||||||
|
container: {
|
||||||
|
display: "flex",
|
||||||
|
justifyContent: "flex-end"
|
||||||
|
},
|
||||||
|
versionItem: {
|
||||||
|
[theme.breakpoints.down("md")]: {
|
||||||
|
fontSize: theme.spacing(1.75)
|
||||||
|
},
|
||||||
|
[theme.breakpoints.up("md")]: {
|
||||||
|
fontSize: theme.spacing(2)
|
||||||
|
},
|
||||||
|
color: "rgba(40, 35, 74, 0.6)",
|
||||||
|
lineHeight: theme.spacing(3.2),
|
||||||
|
fontSize: theme.spacing(2),
|
||||||
|
marginLeft: theme.spacing(1.5),
|
||||||
|
letterSpacing: "0.02em"
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
{
|
||||||
|
name: "VersionInfo"
|
||||||
|
}
|
||||||
|
);
|
|
@ -1,5 +1,7 @@
|
||||||
import { Card, CardContent, Typography } from "@material-ui/core";
|
import { Card, CardContent, Typography } from "@material-ui/core";
|
||||||
import { IconProps } from "@material-ui/core/Icon";
|
import { IconProps } from "@material-ui/core/Icon";
|
||||||
|
import { useTheme } from "@material-ui/core/styles";
|
||||||
|
import useMediaQuery from "@material-ui/core/useMediaQuery";
|
||||||
import { User } from "@saleor/fragments/types/User";
|
import { User } from "@saleor/fragments/types/User";
|
||||||
import { sectionNames } from "@saleor/intl";
|
import { sectionNames } from "@saleor/intl";
|
||||||
import { makeStyles } from "@saleor/macaw-ui";
|
import { makeStyles } from "@saleor/macaw-ui";
|
||||||
|
@ -9,6 +11,7 @@ import { useIntl } from "react-intl";
|
||||||
import { hasPermission } from "../auth/misc";
|
import { hasPermission } from "../auth/misc";
|
||||||
import Container from "../components/Container";
|
import Container from "../components/Container";
|
||||||
import PageHeader from "../components/PageHeader";
|
import PageHeader from "../components/PageHeader";
|
||||||
|
import VersionInfo from "../components/VersionInfo";
|
||||||
import { PermissionEnum } from "../types/globalTypes";
|
import { PermissionEnum } from "../types/globalTypes";
|
||||||
|
|
||||||
export interface MenuItem {
|
export interface MenuItem {
|
||||||
|
@ -25,6 +28,11 @@ export interface MenuSection {
|
||||||
menuItems: MenuItem[];
|
menuItems: MenuItem[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface VersionInfo {
|
||||||
|
dashboardVersion: string;
|
||||||
|
coreVersion: string;
|
||||||
|
}
|
||||||
|
|
||||||
const useStyles = makeStyles(
|
const useStyles = makeStyles(
|
||||||
theme => ({
|
theme => ({
|
||||||
card: {
|
card: {
|
||||||
|
@ -92,20 +100,38 @@ const useStyles = makeStyles(
|
||||||
export interface ConfigurationPageProps {
|
export interface ConfigurationPageProps {
|
||||||
menu: MenuSection[];
|
menu: MenuSection[];
|
||||||
user: User;
|
user: User;
|
||||||
|
versionInfo: VersionInfo;
|
||||||
onSectionClick: (sectionName: string) => void;
|
onSectionClick: (sectionName: string) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const ConfigurationPage: React.FC<ConfigurationPageProps> = props => {
|
export const ConfigurationPage: React.FC<ConfigurationPageProps> = props => {
|
||||||
const { menu: menus, user, onSectionClick } = props;
|
const {
|
||||||
|
menu: menus,
|
||||||
|
user,
|
||||||
|
onSectionClick,
|
||||||
|
versionInfo: { dashboardVersion, coreVersion }
|
||||||
|
} = props;
|
||||||
const classes = useStyles(props);
|
const classes = useStyles(props);
|
||||||
|
const theme = useTheme();
|
||||||
|
const isSmUp = useMediaQuery(theme.breakpoints.up("sm"));
|
||||||
|
|
||||||
|
const renderVersionInfo = (
|
||||||
|
<VersionInfo
|
||||||
|
dashboardVersion={dashboardVersion}
|
||||||
|
coreVersion={coreVersion}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
|
||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
return (
|
return (
|
||||||
<Container>
|
<Container>
|
||||||
|
{!isSmUp && renderVersionInfo}
|
||||||
<PageHeader
|
<PageHeader
|
||||||
className={classes.header}
|
className={classes.header}
|
||||||
title={intl.formatMessage(sectionNames.configuration)}
|
title={intl.formatMessage(sectionNames.configuration)}
|
||||||
/>
|
>
|
||||||
|
{isSmUp && renderVersionInfo}
|
||||||
|
</PageHeader>
|
||||||
{menus
|
{menus
|
||||||
.filter(menu =>
|
.filter(menu =>
|
||||||
menu.menuItems.some(menuItem =>
|
menu.menuItems.some(menuItem =>
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
import { attributeListUrl } from "@saleor/attributes/urls";
|
import { attributeListUrl } from "@saleor/attributes/urls";
|
||||||
import { channelsListUrl } from "@saleor/channels/urls";
|
import { channelsListUrl } from "@saleor/channels/urls";
|
||||||
import { WindowTitle } from "@saleor/components/WindowTitle";
|
import { WindowTitle } from "@saleor/components/WindowTitle";
|
||||||
|
import { APP_VERSION as dashboardVersion } from "@saleor/config";
|
||||||
import useNavigator from "@saleor/hooks/useNavigator";
|
import useNavigator from "@saleor/hooks/useNavigator";
|
||||||
|
import useShop from "@saleor/hooks/useShop";
|
||||||
import useUser from "@saleor/hooks/useUser";
|
import useUser from "@saleor/hooks/useUser";
|
||||||
import Attributes from "@saleor/icons/Attributes";
|
import Attributes from "@saleor/icons/Attributes";
|
||||||
import Channels from "@saleor/icons/Channels";
|
import Channels from "@saleor/icons/Channels";
|
||||||
|
@ -242,6 +244,12 @@ export function createConfigurationMenu(intl: IntlShape): MenuSection[] {
|
||||||
export const configurationMenuUrl = "/configuration/";
|
export const configurationMenuUrl = "/configuration/";
|
||||||
|
|
||||||
export const ConfigurationSection: React.FC = () => {
|
export const ConfigurationSection: React.FC = () => {
|
||||||
|
const { version: coreVersion } = useShop();
|
||||||
|
const versions = {
|
||||||
|
dashboardVersion,
|
||||||
|
coreVersion
|
||||||
|
};
|
||||||
|
|
||||||
const navigate = useNavigator();
|
const navigate = useNavigator();
|
||||||
const user = useUser();
|
const user = useUser();
|
||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
|
@ -253,6 +261,7 @@ export const ConfigurationSection: React.FC = () => {
|
||||||
menu={createConfigurationMenu(intl)}
|
menu={createConfigurationMenu(intl)}
|
||||||
user={maybe(() => user.user)}
|
user={maybe(() => user.user)}
|
||||||
onSectionClick={navigate}
|
onSectionClick={navigate}
|
||||||
|
versionInfo={versions}
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|
|
@ -71606,6 +71606,20 @@ exports[`Storyshots Views / Configuration default 1`] = `
|
||||||
<div
|
<div
|
||||||
class="Container-root-id"
|
class="Container-root-id"
|
||||||
>
|
>
|
||||||
|
<div
|
||||||
|
class="MuiTypography-root-id VersionInfo-container-id MuiTypography-caption-id"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
class="VersionInfo-versionItem-id"
|
||||||
|
>
|
||||||
|
dashboard v3.0.0-b.3
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="VersionInfo-versionItem-id"
|
||||||
|
>
|
||||||
|
core v3.0.0-b.15
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div
|
<div
|
||||||
class="ExtendedPageHeader-root-id ConfigurationPage-header-id ExtendedPageHeader-block-id"
|
class="ExtendedPageHeader-root-id ConfigurationPage-header-id ExtendedPageHeader-block-id"
|
||||||
data-test-id="page-header"
|
data-test-id="page-header"
|
||||||
|
@ -72219,6 +72233,20 @@ exports[`Storyshots Views / Configuration partial access 1`] = `
|
||||||
<div
|
<div
|
||||||
class="Container-root-id"
|
class="Container-root-id"
|
||||||
>
|
>
|
||||||
|
<div
|
||||||
|
class="MuiTypography-root-id VersionInfo-container-id MuiTypography-caption-id"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
class="VersionInfo-versionItem-id"
|
||||||
|
>
|
||||||
|
dashboard v3.0.0-b.3
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="VersionInfo-versionItem-id"
|
||||||
|
>
|
||||||
|
core v3.0.0-b.15
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div
|
<div
|
||||||
class="ExtendedPageHeader-root-id ConfigurationPage-header-id ExtendedPageHeader-block-id"
|
class="ExtendedPageHeader-root-id ConfigurationPage-header-id ExtendedPageHeader-block-id"
|
||||||
data-test-id="page-header"
|
data-test-id="page-header"
|
||||||
|
|
|
@ -22,6 +22,11 @@ const user = {
|
||||||
userPermissions: staffMember.userPermissions
|
userPermissions: staffMember.userPermissions
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const versions = {
|
||||||
|
dashboardVersion: "3.0.0-b.3",
|
||||||
|
coreVersion: "3.0.0-b.15"
|
||||||
|
};
|
||||||
|
|
||||||
const Story: React.FC<{ user: User }> = ({ user }) => {
|
const Story: React.FC<{ user: User }> = ({ user }) => {
|
||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
|
|
||||||
|
@ -30,6 +35,7 @@ const Story: React.FC<{ user: User }> = ({ user }) => {
|
||||||
menu={createConfigurationMenu(intl)}
|
menu={createConfigurationMenu(intl)}
|
||||||
onSectionClick={() => undefined}
|
onSectionClick={() => undefined}
|
||||||
user={user}
|
user={user}
|
||||||
|
versionInfo={versions}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue