saleor-dashboard/src/apps/components/AppDetailsPage/AppDetailsPage.tsx
Dominik Żegleń 935a6f4542
Reduce bundle size (#1103)
* Add analysis tools

* Use deep imports to reduce bundle size

* Remove tslint config

* Remove unused packages

* Remove lodash-es references

* Use root level mui imports

* Remove mui from restricted imports
2021-05-14 10:15:15 +02:00

192 lines
5.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { Button, Card, CardContent, Typography } from "@material-ui/core";
import AppHeader from "@saleor/components/AppHeader";
import CardSpacer from "@saleor/components/CardSpacer";
import CardTitle from "@saleor/components/CardTitle";
import Container from "@saleor/components/Container";
import ExternalLink from "@saleor/components/ExternalLink";
import PageHeader from "@saleor/components/PageHeader";
import Skeleton from "@saleor/components/Skeleton";
import { sectionNames } from "@saleor/intl";
import React from "react";
import { FormattedMessage, useIntl } from "react-intl";
import ReactMarkdown from "react-markdown";
import activateIcon from "../../../../assets/images/activate-icon.svg";
import settingsIcon from "../../../../assets/images/settings-icon.svg";
import supportIcon from "../../../../assets/images/support-icon.svg";
import { useStyles } from "../../styles";
import { App_app } from "../../types/App";
import DeactivatedText from "../DeactivatedText";
export interface AppDetailsPageProps {
loading: boolean;
data: App_app;
navigateToAppSettings: () => void;
onAppActivateOpen: () => void;
onAppDeactivateOpen: () => void;
onBack: () => void;
}
export const AppDetailsPage: React.FC<AppDetailsPageProps> = ({
data,
loading,
navigateToAppSettings,
onAppActivateOpen,
onAppDeactivateOpen,
onBack
}) => {
const intl = useIntl();
const classes = useStyles({});
return (
<Container>
<AppHeader onBack={onBack}>
{intl.formatMessage(sectionNames.apps)}
</AppHeader>
<PageHeader
title={
<>
{data?.name} {!data?.isActive && <DeactivatedText />}
</>
}
>
<Button
href={data?.homepageUrl}
color="primary"
variant="contained"
data-tc="open-app"
target="_blank"
>
<FormattedMessage defaultMessage="Open App" description="button" />
</Button>
</PageHeader>
<div className={classes.appHeader}>
{data ? (
<div className={classes.appHeaderLinks}>
<ExternalLink
className={classes.headerLinkContainer}
href={data.supportUrl}
target="_blank"
>
<img src={supportIcon} alt="" />
<FormattedMessage
defaultMessage="Get Support"
description="link"
/>
</ExternalLink>
<Button
color="primary"
className={classes.headerLinkContainer}
onClick={navigateToAppSettings}
>
<img src={settingsIcon} alt="" />
<FormattedMessage
defaultMessage="Edit settings"
description="link"
/>
</Button>
<Button
variant="text"
color="primary"
className={classes.headerLinkContainer}
disableFocusRipple
onClick={data.isActive ? onAppDeactivateOpen : onAppActivateOpen}
>
<img src={activateIcon} alt="" />
{data?.isActive ? (
<FormattedMessage
defaultMessage="Deactivate"
description="link"
/>
) : (
<FormattedMessage
defaultMessage="Activate"
description="link"
/>
)}
</Button>
</div>
) : (
<Skeleton />
)}
<div className={classes.hr} />
</div>
<Card>
<CardTitle
title={intl.formatMessage({
defaultMessage: "About this app",
description: "section header"
})}
/>
<CardContent>
{!loading ? <ReactMarkdown source={data?.aboutApp} /> : <Skeleton />}
</CardContent>
</Card>
<CardSpacer />
<Card>
<CardTitle
title={intl.formatMessage({
defaultMessage: "App permissions",
description: "section header"
})}
/>
<CardContent>
{!loading ? (
<>
<Typography>
<FormattedMessage
defaultMessage="This app has permissions to:"
description="apps about permissions"
/>
</Typography>
{!!data?.permissions?.length && (
<ul className={classes.permissionsContainer}>
{data?.permissions?.map(perm => (
<li key={perm.code}>{perm.name}</li>
))}
</ul>
)}
</>
) : (
<Skeleton />
)}
</CardContent>
</Card>
<CardSpacer />
<Card>
<CardTitle
title={intl.formatMessage({
defaultMessage: "Data privacy",
description: "section header"
})}
/>
<CardContent>
{!loading ? (
<>
<Typography>{data?.dataPrivacy}</Typography>
<ExternalLink
className={classes.linkContainer}
href={data?.dataPrivacyUrl}
target="_blank"
>
<FormattedMessage
defaultMessage="View this apps privacy policy"
description="app privacy policy link"
/>
</ExternalLink>
</>
) : (
<Skeleton />
)}
</CardContent>
</Card>
<CardSpacer />
</Container>
);
};
AppDetailsPage.displayName = "AppDetailsPage";
export default AppDetailsPage;