From eea24a506be09842765a856d41dce7eb24eab7bd Mon Sep 17 00:00:00 2001 From: Jorge Date: Fri, 7 Jan 2022 15:50:06 +0000 Subject: [PATCH] Add: Copy all content to edit site --- .../more-menu/copy-content-menu-item.js | 53 +++++++++++++++++++ .../src/components/header/more-menu/index.js | 2 + 2 files changed, 55 insertions(+) create mode 100644 packages/edit-site/src/components/header/more-menu/copy-content-menu-item.js diff --git a/packages/edit-site/src/components/header/more-menu/copy-content-menu-item.js b/packages/edit-site/src/components/header/more-menu/copy-content-menu-item.js new file mode 100644 index 00000000000000..c78bd78f4f3389 --- /dev/null +++ b/packages/edit-site/src/components/header/more-menu/copy-content-menu-item.js @@ -0,0 +1,53 @@ +/** + * WordPress dependencies + */ +import { MenuItem } from '@wordpress/components'; +import { useSelect, useDispatch } from '@wordpress/data'; +import { __ } from '@wordpress/i18n'; +import { useCopyToClipboard } from '@wordpress/compose'; +import { store as noticesStore } from '@wordpress/notices'; +import { store as coreStore } from '@wordpress/core-data'; +import { __unstableSerializeAndClean } from '@wordpress/blocks'; + +/** + * Internal dependencies + */ +import { store as editSiteStore } from '../../../store'; + +export default function CopyContentMenuItem() { + const { createNotice } = useDispatch( noticesStore ); + const getText = useSelect( ( select ) => { + return () => { + const { getEditedPostId, getEditedPostType } = select( + editSiteStore + ); + const { getEditedEntityRecord } = select( coreStore ); + const record = getEditedEntityRecord( + 'postType', + getEditedPostType(), + getEditedPostId() + ); + if ( record ) { + if ( typeof record.content === 'function' ) { + return record.content( record ); + } else if ( record.blocks ) { + return __unstableSerializeAndClean( record.blocks ); + } else if ( record.content ) { + return record.content; + } + } + return ''; + }; + }, [] ); + + function onSuccess() { + createNotice( 'info', __( 'All content copied.' ), { + isDismissible: true, + type: 'snackbar', + } ); + } + + const ref = useCopyToClipboard( getText, onSuccess ); + + return { __( 'Copy all content' ) }; +} diff --git a/packages/edit-site/src/components/header/more-menu/index.js b/packages/edit-site/src/components/header/more-menu/index.js index afa0f702823b11..2b82b318335766 100644 --- a/packages/edit-site/src/components/header/more-menu/index.js +++ b/packages/edit-site/src/components/header/more-menu/index.js @@ -22,6 +22,7 @@ import FeatureToggle from '../feature-toggle'; import ToolsMoreMenuGroup from '../tools-more-menu-group'; import SiteExport from './site-export'; import WelcomeGuideMenuItem from './welcome-guide-menu-item'; +import CopyContentMenuItem from './copy-content-menu-item'; const POPOVER_PROPS = { className: 'edit-site-more-menu__content', @@ -91,6 +92,7 @@ export default function MoreMenu() { { __( 'Keyboard shortcuts' ) } +