UNPKG

@wordpress/editor

Version:
8 lines (7 loc) 7.51 kB
{ "version": 3, "sources": ["../../../src/components/post-actions/actions.js"], "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { useMemo, useEffect } from '@wordpress/element';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { store as editorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\nimport { useSetAsHomepageAction } from './set-as-homepage';\nimport { useSetAsPostsPageAction } from './set-as-posts-page';\n\nexport function usePostActions( { postType, onActionPerformed, context } ) {\n\tconst { defaultActions } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getEntityActions } = unlock( select( editorStore ) );\n\t\t\treturn {\n\t\t\t\tdefaultActions: getEntityActions( 'postType', postType ),\n\t\t\t};\n\t\t},\n\t\t[ postType ]\n\t);\n\n\tconst shouldShowHomepageActions = useSelect(\n\t\t( select ) => {\n\t\t\tif ( postType !== 'page' ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst { getDefaultTemplateId, getEntityRecord, canUser } =\n\t\t\t\tselect( coreStore );\n\t\t\tconst canUpdateSettings = canUser( 'update', {\n\t\t\t\tkind: 'root',\n\t\t\t\tname: 'site',\n\t\t\t} );\n\n\t\t\tif ( ! canUpdateSettings ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Note that resolved template for `front-page` is not necessarily a\n\t\t\t// `front-page` template.\n\t\t\tconst frontPageTemplateId = getDefaultTemplateId( {\n\t\t\t\tslug: 'front-page',\n\t\t\t} );\n\n\t\t\tif ( ! frontPageTemplateId ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// This won't trigger a second network request, getDefaultTemplateId\n\t\t\t// will have received the whole template from the REST API.\n\t\t\tconst frontPageTemplate = getEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\t'wp_template',\n\t\t\t\tfrontPageTemplateId\n\t\t\t);\n\n\t\t\tif ( ! frontPageTemplate ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// When there is a front page template, the front page cannot be\n\t\t\t// changed. See\n\t\t\t// https://developer.wordpress.org/themes/basics/template-hierarchy/\n\t\t\treturn frontPageTemplate.slug !== 'front-page';\n\t\t},\n\t\t[ postType ]\n\t);\n\n\tconst setAsHomepageAction = useSetAsHomepageAction();\n\tconst setAsPostsPageAction = useSetAsPostsPageAction();\n\n\tconst { registerPostTypeSchema } = unlock( useDispatch( editorStore ) );\n\tuseEffect( () => {\n\t\tregisterPostTypeSchema( postType );\n\t}, [ registerPostTypeSchema, postType ] );\n\n\treturn useMemo( () => {\n\t\tlet actions = [ ...defaultActions ];\n\t\tif ( shouldShowHomepageActions ) {\n\t\t\tactions.push( setAsHomepageAction, setAsPostsPageAction );\n\t\t}\n\n\t\t// Ensure \"Move to trash\" is always the last action.\n\t\tactions = actions.sort( ( a, b ) =>\n\t\t\tb.id === 'move-to-trash' ? -1 : 0\n\t\t);\n\n\t\t// Filter actions based on provided context. If not provided\n\t\t// all actions are returned. We'll have a single entry for getting the actions\n\t\t// and the consumer should provide the context to filter the actions, if needed.\n\t\t// Actions should also provide the `context` they support, if it's specific, to\n\t\t// compare with the provided context to get all the actions.\n\t\t// Right now the only supported context is `list`.\n\t\tactions = actions.filter( ( action ) => {\n\t\t\tif ( ! action.context ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn action.context === context;\n\t\t} );\n\n\t\tif ( onActionPerformed ) {\n\t\t\tfor ( let i = 0; i < actions.length; ++i ) {\n\t\t\t\tif ( actions[ i ].callback ) {\n\t\t\t\t\tconst existingCallback = actions[ i ].callback;\n\t\t\t\t\tactions[ i ] = {\n\t\t\t\t\t\t...actions[ i ],\n\t\t\t\t\t\tcallback: ( items, argsObject ) => {\n\t\t\t\t\t\t\texistingCallback( items, {\n\t\t\t\t\t\t\t\t...argsObject,\n\t\t\t\t\t\t\t\tonActionPerformed: ( _items ) => {\n\t\t\t\t\t\t\t\t\tif ( argsObject?.onActionPerformed ) {\n\t\t\t\t\t\t\t\t\t\targsObject.onActionPerformed( _items );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tonActionPerformed(\n\t\t\t\t\t\t\t\t\t\tactions[ i ].id,\n\t\t\t\t\t\t\t\t\t\t_items\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif ( actions[ i ].RenderModal ) {\n\t\t\t\t\tconst ExistingRenderModal = actions[ i ].RenderModal;\n\t\t\t\t\tactions[ i ] = {\n\t\t\t\t\t\t...actions[ i ],\n\t\t\t\t\t\tRenderModal: ( props ) => {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<ExistingRenderModal\n\t\t\t\t\t\t\t\t\t{ ...props }\n\t\t\t\t\t\t\t\t\tonActionPerformed={ ( _items ) => {\n\t\t\t\t\t\t\t\t\t\tif ( props.onActionPerformed ) {\n\t\t\t\t\t\t\t\t\t\t\tprops.onActionPerformed( _items );\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tonActionPerformed(\n\t\t\t\t\t\t\t\t\t\t\tactions[ i ].id,\n\t\t\t\t\t\t\t\t\t\t\t_items\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn actions;\n\t}, [\n\t\tcontext,\n\t\tdefaultActions,\n\t\tonActionPerformed,\n\t\tsetAsHomepageAction,\n\t\tsetAsPostsPageAction,\n\t\tshouldShowHomepageActions,\n\t] );\n}\n"], "mappings": "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", "names": [] }