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 && (