saleor-dashboard/src/apps/components/AppsInProgress/AppsInProgress.tsx

118 lines
3.9 KiB
TypeScript
Raw Normal View History

Apps (#599) * create Apps view * create more app components, generate types and messages * apps refactor, update snapshots * show error message in tooltip when app installation fail * update apps components and view, add apps list to storybook * update defaultMessages * create app details view * update AppListPage with Skeleton component * create app activate/deactivate dialogs, create app details stories * add AppHeader to AppDetailsPage * update defaultMessages * update AppDetails view and components after review * create custom app details view * refactor webhooks * update webhooks fixtures * update WebhookDetailsPage story * update strings * create CustomAppCreate view and components * update AppListPage story * create AppInstall view and page * handle errors in AppInstall view * update defaultMessages * add AppInstallPage to storybook * add status prop to MessageManager * update defaultMessages * remove service account section * remove service account routes * remove as operator from notify status * add notifications for app installations * update styles for deactivated app * update app installations with local storage * update defaultMessages * AppInstall update * dd delete button to ongoin installations table * fix active installations condition * fix error messages in AppsList * update defaultMessages * add iframe to AppDetailsPage * create AppDetailsSettingsPage * install macaw-ui * apps styles clean up * update schema, fixtures * few apps updates * WebhookCreate - fix onBack button name * WebhookCreatePage story update * rename apps table from external to thirdparty * update defaultMessages * fix test, update snapshots * AppDetailsSettings - add token to headers * fix first number in local apps query * app details settings - use shop domain host * add onSettingsRowClick to InstalledApps * resolve conflicts * update changelog and messages * add noopener noreferrer do app privacy link * update snapshots * update snapshots * updates after review * update defaultMessages * CustomAppDetails - add missing notify status
2020-07-22 10:54:15 +00:00
import Button from "@material-ui/core/Button";
import Progress from "@material-ui/core/CircularProgress";
import IconButton from "@material-ui/core/IconButton";
import TableBody from "@material-ui/core/TableBody";
import TableCell from "@material-ui/core/TableCell";
import TableRow from "@material-ui/core/TableRow";
import Tooltip from "@material-ui/core/Tooltip";
import Typography from "@material-ui/core/Typography";
import DeleteIcon from "@material-ui/icons/Delete";
import ErrorIcon from "@material-ui/icons/Error";
import CardTitle from "@saleor/components/CardTitle";
import { renderCollection, stopPropagation } from "@saleor/misc";
import classNames from "classnames";
import React from "react";
import { FormattedMessage, useIntl } from "react-intl";
import { JobStatusEnum } from "../../../types/globalTypes";
import { useStyles } from "../../styles";
import { AppsInstallations_appsInstallations } from "../../types/AppsInstallations";
import CardContainer from "../CardContainer";
export interface AppsInProgressProps {
appsList: AppsInstallations_appsInstallations[];
disabled: boolean;
onAppInstallRetry: (id: string) => void;
onRemove: (id: string) => void;
}
const AppsInProgress: React.FC<AppsInProgressProps> = ({
appsList,
disabled,
onAppInstallRetry,
onRemove,
...props
}) => {
const intl = useIntl();
const classes = useStyles(props);
return (
<CardContainer
header={
<CardTitle
title={intl.formatMessage({
defaultMessage: "Ongoing Installations",
description: "section header"
})}
/>
}
>
<TableBody>
{renderCollection(appsList, ({ status, appName, id, message }) => (
<TableRow key={id} className={classes.tableRow}>
<TableCell className={classes.colName}>
<span data-tc="name">{appName}</span>
</TableCell>
{status === JobStatusEnum.PENDING && (
<TableCell
className={classNames(
classes.colAction,
classes.colInstallAction
)}
>
<Typography variant="body2" className={classes.text}>
<FormattedMessage
defaultMessage="Installing app..."
description="app installation"
/>
</Typography>
<div className={classes.colSpinner}>
<Progress size={20} />
</div>
</TableCell>
)}
{status === JobStatusEnum.FAILED && (
<TableCell
className={classNames(
classes.colAction,
classes.colInstallAction
)}
>
<Typography variant="body2" className={classes.error}>
<FormattedMessage
defaultMessage="There was a problem during installation"
description="app installation error"
/>
<Tooltip
title={<Typography variant="body2">{message}</Typography>}
classes={{
tooltip: classes.customTooltip
}}
>
<ErrorIcon />
</Tooltip>
</Typography>
<Button color="primary" onClick={() => onAppInstallRetry(id)}>
<FormattedMessage
defaultMessage="Retry"
description="retry installation"
/>
</Button>
<IconButton
color="primary"
onClick={stopPropagation(() => onRemove(id))}
>
<DeleteIcon />
</IconButton>
</TableCell>
)}
</TableRow>
))}
</TableBody>
</CardContainer>
);
};
AppsInProgress.displayName = "AppsInProgress";
export default AppsInProgress;