@craftercms/studio-ui
Version:
Services, components, models & utils to build CrafterCMS authoring extensions.
100 lines (98 loc) • 3.74 kB
JavaScript
/*
* 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 React from 'react';
import NewContentCard, { ContentSkeletonCard } from './NewContentCard';
import { Grid } from '@mui/material';
import useStyles from './styles';
import { NewContentDialogContainer } from './NewContentDialogContainer';
import EnhancedDialog from '../EnhancedDialog';
import { FormattedMessage } from 'react-intl';
export function NewContentDialog(props) {
const { item, rootPath, compact, onContentTypeSelected, ...rest } = props;
return React.createElement(
EnhancedDialog,
{
title: React.createElement(FormattedMessage, { id: 'newContentDialog.title', defaultMessage: 'Create Content' }),
dialogHeaderProps: {
subtitle: React.createElement(FormattedMessage, {
id: 'newContentDialog.subtitle',
defaultMessage: 'Choose a content type template for your new content item.'
})
},
...rest
},
React.createElement(NewContentDialogContainer, {
item: item,
rootPath: rootPath,
compact: compact,
onContentTypeSelected: onContentTypeSelected
})
);
}
export function ContentTypesLoader(props) {
const { numOfItems = 6, isCompact } = props;
const items = new Array(numOfItems).fill(null);
return React.createElement(
Grid,
{ container: true, spacing: 3, style: { marginTop: '14px' } },
items.map((value, i) =>
React.createElement(
Grid,
{ item: true, key: i, xs: 12, sm: !isCompact ? 4 : 6 },
React.createElement(ContentSkeletonCard, { isCompact: isCompact })
)
)
);
}
export function ContentTypesGrid(props) {
const { resource, isCompact, onTypeOpen, selectedContentType } = props;
const { classes } = useStyles();
const filterContentTypes = resource.read();
return React.createElement(
Grid,
{ container: true, spacing: 3, className: classes.cardsContainer },
filterContentTypes.map((content) =>
React.createElement(
Grid,
{ item: true, key: content.label, xs: 12, sm: !isCompact ? 4 : 6 },
React.createElement(NewContentCard, {
isCompact: isCompact,
headerTitle: content.label,
subheader: content.form,
contentTypeName: content.name,
onClick: () => onTypeOpen(content),
isSelected: content.name === selectedContentType
})
)
)
);
}
export default NewContentDialog;