UNPKG

@craftercms/studio-ui

Version:

Services, components, models & utils to build CrafterCMS authoring extensions.

93 lines (91 loc) 3.44 kB
/* * Copyright (C) 2007-2022 Crafter Software Corporation. All Rights Reserved. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 3 as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* * Copyright (C) 2007-2022 Crafter Software Corporation. All Rights Reserved. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ import { useIntl } from 'react-intl'; import { makeStyles } from 'tss-react/mui'; import Typography from '@mui/material/Typography'; import * as React from 'react'; import Skeleton from '@mui/material/Skeleton'; import PublishingStatusAvatar from '../PublishingStatusAvatar/PublishingStatusAvatar'; import { getPublishingStatusText } from '../PublishingStatusDisplay'; const usePublishingStatusTileStyles = makeStyles()((theme, { root, avatar, text } = {}) => ({ root: { width: '120px', height: '100px', display: 'flex', alignItems: 'center', flexDirection: 'column', justifyContent: 'center', textAlign: 'center', border: 'none', borderRadius: theme.shape.borderRadius, borderTop: 'none', background: theme.palette.background.paper, margin: 5, 'button&': { cursor: 'pointer', '&:hover, &:focus': { background: theme.palette.action.hover, boxShadow: theme.shadows[2] } }, ...root }, avatar: { margin: 5, ...avatar }, text: { width: '100%', ...text } })); const PublishingStatusTile = React.forwardRef(function (props, ref) { const { classes, cx } = usePublishingStatusTileStyles(props.styles); const { formatMessage } = useIntl(); const { enabled, status, onClick, isFetching, classes: propClasses, ...rest } = props; const Component = onClick ? 'button' : 'div'; const statusText = getPublishingStatusText(props, formatMessage); return React.createElement( Component, { ref: ref, ...rest, onClick: onClick, className: cx(classes.root, propClasses?.root, !isFetching && status) }, React.createElement(PublishingStatusAvatar, { enabled: enabled, status: isFetching ? null : status, className: cx(classes.avatar, propClasses?.avatar) }), React.createElement( Typography, { className: cx(classes.text, propClasses?.text), noWrap: true, title: statusText, color: 'textPrimary' }, isFetching ? React.createElement(Skeleton, null) : statusText ) ); }); export default PublishingStatusTile;