diff --git a/packages/edit-site/src/components/page-template-parts/add-new-template-part.js b/packages/edit-site/src/components/page-template-parts/add-new-template-part.js new file mode 100644 index 00000000000000..d2b52a88701fda --- /dev/null +++ b/packages/edit-site/src/components/page-template-parts/add-new-template-part.js @@ -0,0 +1,57 @@ +/** + * WordPress dependencies + */ +import { privateApis as routerPrivateApis } from '@wordpress/router'; +import { useSelect } from '@wordpress/data'; +import { store as coreStore } from '@wordpress/core-data'; +import { useState } from '@wordpress/element'; +import { Button } from '@wordpress/components'; + +/** + * Internal dependencies + */ +import { unlock } from '../../lock-unlock'; +import { store as editSiteStore } from '../../store'; +import CreateTemplatePartModal from '../create-template-part-modal'; + +const { useHistory } = unlock( routerPrivateApis ); + +export default function AddNewTemplatePart() { + const { canCreate, postType } = useSelect( ( select ) => { + const { supportsTemplatePartsMode } = + select( editSiteStore ).getSettings(); + return { + canCreate: ! supportsTemplatePartsMode, + postType: select( coreStore ).getPostType( 'wp_template_part' ), + }; + }, [] ); + const [ isModalOpen, setIsModalOpen ] = useState( false ); + const history = useHistory(); + + if ( ! canCreate || ! postType ) { + return null; + } + + return ( + <> + + { isModalOpen && ( + setIsModalOpen( false ) } + blocks={ [] } + onCreate={ ( templatePart ) => { + setIsModalOpen( false ); + history.push( { + postId: templatePart.id, + postType: 'wp_template_part', + canvas: 'edit', + } ); + } } + onError={ () => setIsModalOpen( false ) } + /> + ) } + + ); +} diff --git a/packages/edit-site/src/components/page-template-parts/index.js b/packages/edit-site/src/components/page-template-parts/index.js index 7e9c8cb6dd6e16..24b042ed92001e 100644 --- a/packages/edit-site/src/components/page-template-parts/index.js +++ b/packages/edit-site/src/components/page-template-parts/index.js @@ -7,8 +7,7 @@ import { __experimentalVStack as VStack, } from '@wordpress/components'; import { __ } from '@wordpress/i18n'; -import { useSelect } from '@wordpress/data'; -import { store as coreStore, useEntityRecords } from '@wordpress/core-data'; +import { useEntityRecords } from '@wordpress/core-data'; import { decodeEntities } from '@wordpress/html-entities'; /** @@ -19,8 +18,7 @@ import Table from '../table'; import Link from '../routes/link'; import AddedBy from '../list/added-by'; import TemplateActions from '../template-actions'; -import AddNewTemplate from '../add-new-template'; -import { store as editSiteStore } from '../../store'; +import AddNewTemplatePart from './add-new-template-part'; export default function PageTemplateParts() { const { records: templateParts } = useEntityRecords( @@ -31,15 +29,6 @@ export default function PageTemplateParts() { } ); - const { canCreate } = useSelect( ( select ) => { - const { supportsTemplatePartsMode } = - select( editSiteStore ).getSettings(); - return { - postType: select( coreStore ).getPostType( 'wp_template_part' ), - canCreate: ! supportsTemplatePartsMode, - }; - } ); - const columns = [ { header: __( 'Template Part' ), @@ -87,15 +76,7 @@ export default function PageTemplateParts() { return ( - ) - } + actions={ } > { templateParts && (