Update product rest config and template block usage (#37206)
* Update product post rest configs * Update block usage * Add changelogs * Fix lint * Make use of setupEditorState instead of setupEditor as we do not have a content block * Simplify product condition * Make use of core store only
This commit is contained in:
parent
c8f7a564c5
commit
93506388e3
|
@ -0,0 +1,4 @@
|
||||||
|
Significance: minor
|
||||||
|
Type: update
|
||||||
|
|
||||||
|
Update use of blocks within block editor to always make use of template.
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* External dependencies
|
* External dependencies
|
||||||
*/
|
*/
|
||||||
import { Template } from '@wordpress/blocks';
|
import { synchronizeBlocksWithTemplate, Template } from '@wordpress/blocks';
|
||||||
import {
|
import {
|
||||||
createElement,
|
createElement,
|
||||||
useMemo,
|
useMemo,
|
||||||
|
@ -9,7 +9,7 @@ import {
|
||||||
useState,
|
useState,
|
||||||
} from '@wordpress/element';
|
} from '@wordpress/element';
|
||||||
import { Product } from '@woocommerce/data';
|
import { Product } from '@woocommerce/data';
|
||||||
import { useSelect, select as WPSelect, useDispatch } from '@wordpress/data';
|
import { useSelect, select as WPSelect } from '@wordpress/data';
|
||||||
import { uploadMedia } from '@wordpress/media-utils';
|
import { uploadMedia } from '@wordpress/media-utils';
|
||||||
import {
|
import {
|
||||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||||
|
@ -59,11 +59,6 @@ export function BlockEditor( {
|
||||||
}: BlockEditorProps ) {
|
}: BlockEditorProps ) {
|
||||||
const [ selectedTab, setSelectedTab ] = useState< string | null >( null );
|
const [ selectedTab, setSelectedTab ] = useState< string | null >( null );
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
||||||
// @ts-ignore __experimentalTearDownEditor is not yet included in types package.
|
|
||||||
const { setupEditor, __experimentalTearDownEditor } =
|
|
||||||
useDispatch( 'core/editor' );
|
|
||||||
|
|
||||||
const canUserCreateMedia = useSelect( ( select: typeof WPSelect ) => {
|
const canUserCreateMedia = useSelect( ( select: typeof WPSelect ) => {
|
||||||
const { canUser } = select( 'core' );
|
const { canUser } = select( 'core' );
|
||||||
return canUser( 'create', 'media', '' ) !== false;
|
return canUser( 'create', 'media', '' ) !== false;
|
||||||
|
@ -93,20 +88,19 @@ export function BlockEditor( {
|
||||||
};
|
};
|
||||||
}, [ canUserCreateMedia, _settings ] );
|
}, [ canUserCreateMedia, _settings ] );
|
||||||
|
|
||||||
useLayoutEffect( () => {
|
|
||||||
setupEditor( product, {}, _settings?.template );
|
|
||||||
|
|
||||||
return () => {
|
|
||||||
__experimentalTearDownEditor();
|
|
||||||
};
|
|
||||||
}, [] );
|
|
||||||
|
|
||||||
const [ blocks, onInput, onChange ] = useEntityBlockEditor(
|
const [ blocks, onInput, onChange ] = useEntityBlockEditor(
|
||||||
'postType',
|
'postType',
|
||||||
'product',
|
'product',
|
||||||
{ id: product.id }
|
{ id: product.id }
|
||||||
);
|
);
|
||||||
|
|
||||||
|
useLayoutEffect( () => {
|
||||||
|
onChange(
|
||||||
|
synchronizeBlocksWithTemplate( [], _settings?.template ),
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
}, [] );
|
||||||
|
|
||||||
if ( ! blocks ) {
|
if ( ! blocks ) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ declare const productBlockEditorSettings: ProductEditorSettings;
|
||||||
const ProductEditor: React.FC< { product: Product | undefined } > = ( {
|
const ProductEditor: React.FC< { product: Product | undefined } > = ( {
|
||||||
product,
|
product,
|
||||||
} ) => {
|
} ) => {
|
||||||
if ( ! product ) {
|
if ( ! product?.id ) {
|
||||||
return <Spinner />;
|
return <Spinner />;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
Significance: minor
|
||||||
|
Type: add
|
||||||
|
|
||||||
|
Update product post rest config when block editor feature is enabled.
|
|
@ -32,6 +32,7 @@ class BlockEditorFeatureEnabled {
|
||||||
}
|
}
|
||||||
if ( Features::is_enabled( self::FEATURE_ID ) ) {
|
if ( Features::is_enabled( self::FEATURE_ID ) ) {
|
||||||
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
|
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
|
||||||
|
add_filter( 'woocommerce_register_post_type_product', array( $this, 'add_rest_base_config' ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,4 +103,15 @@ class BlockEditorFeatureEnabled {
|
||||||
return $link;
|
return $link;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the product endpoint to use WooCommerce REST API.
|
||||||
|
*
|
||||||
|
* @param array $post_args Args for the product post type.
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function add_rest_base_config( $post_args ) {
|
||||||
|
$post_args['rest_base'] = 'products';
|
||||||
|
$post_args['rest_namespace'] = 'wc/v3';
|
||||||
|
return $post_args;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue