diff --git a/packages/edit-site/src/components/page-patterns/dataviews-pattern-actions.js b/packages/edit-site/src/components/page-patterns/dataviews-pattern-actions.js new file mode 100644 index 000000000000..ca6fbd320edb --- /dev/null +++ b/packages/edit-site/src/components/page-patterns/dataviews-pattern-actions.js @@ -0,0 +1,34 @@ +/** + * External dependencies + */ +import { paramCase as kebabCase } from 'change-case'; + +/** + * WordPress dependencies + */ +import { downloadBlob } from '@wordpress/blob'; +import { __ } from '@wordpress/i18n'; + +/** + * Internal dependencies + */ +import { PATTERN_TYPES } from '../../utils/constants'; + +export const exportJSONaction = { + id: 'duplicate-pattern', + label: __( 'Export as JSON' ), + isEligible: ( item ) => item.type === PATTERN_TYPES.user, + callback: ( item ) => { + const json = { + __file: item.type, + title: item.title || item.name, + content: item.patternBlock.content.raw, + syncStatus: item.patternBlock.wp_pattern_sync_status, + }; + return downloadBlob( + `${ kebabCase( item.title || item.name ) }.json`, + JSON.stringify( json, null, 2 ), + 'application/json' + ); + }, +}; diff --git a/packages/edit-site/src/components/page-patterns/dataviews-patterns.js b/packages/edit-site/src/components/page-patterns/dataviews-patterns.js index 88494dab9734..43af8f979874 100644 --- a/packages/edit-site/src/components/page-patterns/dataviews-patterns.js +++ b/packages/edit-site/src/components/page-patterns/dataviews-patterns.js @@ -36,7 +36,7 @@ import { PATTERN_SYNC_TYPES, PATTERN_DEFAULT_CATEGORY, } from '../../utils/constants'; -// import { duplicatePatternAction } from './dataviews-pattern-actions'; +import { exportJSONaction } from './dataviews-pattern-actions'; import usePatternSettings from './use-pattern-settings'; import { unlock } from '../../lock-unlock'; import usePatterns from './use-patterns'; @@ -283,7 +283,7 @@ export default function DataviewsPatterns() { }; }, [ patterns, view, fields ] ); - // const actions = useMemo( () => [ duplicatePatternAction ], [] ); + const actions = useMemo( () => [ exportJSONaction ], [] ); const onChangeView = useCallback( ( viewUpdater ) => { let updatedView = @@ -303,8 +303,6 @@ export default function DataviewsPatterns() { [ view, setView ] ); const id = useId(); - const titleId = `${ id }-title`; - const descriptionId = `${ id }-description`; const settings = usePatternSettings(); // Wrap everything in a block editor provider. // This ensures 'styles' that are needed for the previews are synced @@ -320,13 +318,13 @@ export default function DataviewsPatterns() { item.name } isLoading={ isResolving }