/** * External dependencies */ import { __experimentalEditor as Editor, __experimentalInitBlocks as initBlocks, __experimentalWooProductMoreMenuItem as WooProductMoreMenuItem, productApiFetchMiddleware, productEditorHeaderApiFetchMiddleware, TRACKS_SOURCE, __experimentalProductMVPCESFooter as FeedbackBar, __experimentalEditorLoadingContext as EditorLoadingContext, } from '@woocommerce/product-editor'; import { Spinner } from '@woocommerce/components'; import { recordEvent } from '@woocommerce/tracks'; import React, { lazy, Suspense, useContext, useEffect } from 'react'; import { registerPlugin, unregisterPlugin } from '@wordpress/plugins'; import { useParams } from 'react-router-dom'; import { WooFooterItem } from '@woocommerce/admin-layout'; import { __ } from '@wordpress/i18n'; /** * Internal dependencies */ import { useProductEntityRecord } from './hooks/use-product-entity-record'; import { MoreMenuFill } from './fills/product-block-editor-fills'; import './product-page.scss'; productEditorHeaderApiFetchMiddleware(); productApiFetchMiddleware(); // Lazy load components const BlockEditorTourWrapper = lazy( () => import( './tour/block-editor/block-editor-tour-wrapper' ) ); const ProductMVPFeedbackModalContainer = lazy( () => import( '@woocommerce/product-editor' ).then( ( module ) => ( { default: module.__experimentalProductMVPFeedbackModalContainer, } ) ) ); export default function ProductPage() { const { productId: productIdSearchParam } = useParams(); useEffect( () => { document.body.classList.add( 'is-product-editor' ); registerPlugin( 'wc-admin-product-editor', { // @ts-expect-error 'scope' does exist. @types/wordpress__plugins is outdated. scope: 'woocommerce-product-block-editor', render: () => { // eslint-disable-next-line react-hooks/rules-of-hooks const isEditorLoading = useContext( EditorLoadingContext ); if ( isEditorLoading ) { return null; } return ( <> { ( { onClose }: { onClose: () => void } ) => ( ) } <> }> }> ); }, } ); const unregisterBlocks = initBlocks(); return () => { document.body.classList.remove( 'is-product-editor' ); unregisterPlugin( 'wc-admin-product-editor' ); unregisterBlocks(); }; }, [ productIdSearchParam ] ); useEffect( function trackViewEvents() { if ( productIdSearchParam ) { recordEvent( 'product_edit_view', { source: TRACKS_SOURCE, product_id: productIdSearchParam, } ); } else { recordEvent( 'product_add_view', { source: TRACKS_SOURCE, } ); } }, [ productIdSearchParam ] ); const productId = useProductEntityRecord( productIdSearchParam ); if ( ! productId ) { return (
); } return ; }