/** * WordPress dependencies */ import { dispatch } from '@wordpress/data'; import { PostTypeSupportCheck } from '@wordpress/editor'; import { addFilter, removeFilter } from '@wordpress/hooks'; import { __ } from '@wordpress/i18n'; import { registerPlugin } from '@wordpress/plugins'; /** * Internal dependencies */ import { dispatchCoreEditPost } from '../../../@types/gutenberg/types'; import { PluginDocumentSettingPanel } from '../../../@types/gutenberg/wrapper'; import { SettingsProvider } from '../../common/settings'; import { getContentHelperPermissions } from '../../common/utils/permissions'; import { getSettingsFromJson, PARSELY_SIDEBAR_PLUGIN_ID } from '../editor-sidebar'; import './excerpt-suggestions.scss'; import { PostExcerptSuggestions } from './component-panel'; /** * The ExcerptDocumentSettingPanel component verifies that the current post type supports excerpts, * and then renders the PostExcerptSuggestions component. * * @since 3.17.0 */ export const ExcerptDocumentSettingPanel = () => { return ( ); }; /** * The ExcerptSuggestions function registers the custom excerpt panel and removes * the default excerpt panel. * * @since 3.13.0 * * @param {never} settings Settings from the plugins.registerPlugin filter. Not used. * @param {string} name The plugin name. */ const ExcerptSuggestions = ( settings: never, name: string ) => { if ( name !== PARSELY_SIDEBAR_PLUGIN_ID ) { return settings; } // Check if the user has the necessary permissions to use the ExcerptSuggestions feature. const permissions = getContentHelperPermissions(); if ( ! permissions.ExcerptSuggestions ) { return settings; } const isJetpackAiEnabled = window?.Jetpack_Editor_Initial_State?.available_blocks[ 'ai-content-lens' ]; if ( isJetpackAiEnabled ) { // eslint-disable-next-line no-console console.log( 'Parse.ly: Jetpack AI is enabled and will be disabled.' ); // Remove Jetpack AI excerpt block. // https://github.com/Automattic/jetpack/blob/trunk/projects/plugins/jetpack/extensions/plugins/ai-content-lens/editor.js#L52-L56 removeFilter( 'blocks.registerBlockType', 'jetpack/ai-content-lens-features' ); } // Register the custom excerpt panel. registerPlugin( 'wp-parsely-excerpt-suggestions', { render: () => ( ), } ); /* Remove the excerpt panel by dispatching an action. */ // @ts-ignore if ( dispatch( 'core/editor' )?.removeEditorPanel ) { // @ts-ignore dispatch( 'core/editor' )?.removeEditorPanel( 'post-excerpt' ); } else { // Deprecated in WordPress 6.5. dispatchCoreEditPost?.removeEditorPanel( 'post-excerpt' ); } return settings; }; export function initExcerptSuggestions() { // Add the ExcerptSuggestions function to the plugins.registerPlugin filter. // Priority is set to 1000 to ensure that the function runs as late as possible. addFilter( 'plugins.registerPlugin', 'wp-parsely-excerpt-suggestions', ExcerptSuggestions, 1000 ); }