/** * External dependencies */ import { __ } from '@wordpress/i18n'; import { useEffect, useState } from '@wordpress/element'; import { Placeholder, Button, PanelBody } from '@wordpress/components'; import { withProduct } from '@woocommerce/block-hocs'; import BlockErrorBoundary from '@woocommerce/base-components/block-error-boundary'; import EditProductLink from '@woocommerce/editor-components/edit-product-link'; import { InspectorControls, useBlockProps } from '@wordpress/block-editor'; import { ProductResponseItem } from '@woocommerce/types'; import ErrorPlaceholder, { ErrorObject, } from '@woocommerce/editor-components/error-placeholder'; import { PRODUCTS_STORE_NAME, Product } from '@woocommerce/data'; import { useSelect } from '@wordpress/data'; /** * Internal dependencies */ import './editor.scss'; import SharedProductControl from './shared-product-control'; import EditorBlockControls from './editor-block-controls'; import LayoutEditor from './layout-editor'; import { BLOCK_ICON } from '../constants'; import metadata from '../block.json'; import { Attributes } from '../types'; interface EditorProps { className: string; attributes: { productId: number; isPreview: boolean; }; setAttributes: ( attributes: Attributes ) => void; error: string | ErrorObject; getProduct: () => void; product: ProductResponseItem; isLoading: boolean; clientId: string; } const Editor = ( { attributes, setAttributes, error, getProduct, product, isLoading, clientId, }: EditorProps ) => { const { productId, isPreview } = attributes; const [ isEditing, setIsEditing ] = useState( ! productId ); const blockProps = useBlockProps(); const productPreview = useSelect( ( select ) => { if ( ! isPreview ) { return null; } return select( PRODUCTS_STORE_NAME ).getProducts< Array< Product > >( { per_page: 1, } ); } ); useEffect( () => { const productPreviewId = productPreview ? productPreview[ 0 ]?.id : null; if ( ! productPreviewId ) { return; } setAttributes( { ...attributes, productId: productPreviewId, } ); setIsEditing( false ); }, [ attributes, productPreview, setAttributes ] ); if ( error ) { return ( ); } return (
{ /* eslint-disable-next-line @typescript-eslint/ban-ts-comment */ } { /* @ts-ignore */ } { isEditing ? ( { metadata.description }
) : (
) }
); }; export default withProduct( Editor );