Hide Downloads section under Toggle for product variations (#44152)
* Create DownloadableProductTrait for common downloadable blocks creation * Use DownloadableProductTrait in SimpleProductTemplate * Use DownloadableProductTrait in ProductVariationTemplate * Remeber downloadable files in product variations * Add changelog file * Fix php linter error * Unlink downloads and downloadable product props so they can be managed separately * Remove invalid margin bottom from the uploader label * Add changelog file
This commit is contained in:
parent
f383284ba6
commit
eaa791f7da
|
@ -0,0 +1,4 @@
|
||||||
|
Significance: minor
|
||||||
|
Type: add
|
||||||
|
|
||||||
|
Unlink downloads and downloadable product props so they can be managed separately
|
|
@ -52,11 +52,6 @@ export function DownloadBlockEdit( {
|
||||||
context: { postType },
|
context: { postType },
|
||||||
}: ProductEditorBlockEditProps< UploadsBlockAttributes > ) {
|
}: ProductEditorBlockEditProps< UploadsBlockAttributes > ) {
|
||||||
const blockProps = useWooBlockProps( attributes );
|
const blockProps = useWooBlockProps( attributes );
|
||||||
const [ , setDownloadable ] = useEntityProp< Product[ 'downloadable' ] >(
|
|
||||||
'postType',
|
|
||||||
postType,
|
|
||||||
'downloadable'
|
|
||||||
);
|
|
||||||
const [ downloads, setDownloads ] = useEntityProp< Product[ 'downloads' ] >(
|
const [ downloads, setDownloads ] = useEntityProp< Product[ 'downloads' ] >(
|
||||||
'postType',
|
'postType',
|
||||||
postType,
|
postType,
|
||||||
|
@ -122,10 +117,6 @@ export function DownloadBlockEdit( {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( newFiles.length ) {
|
if ( newFiles.length ) {
|
||||||
if ( ! downloads.length ) {
|
|
||||||
setDownloadable( true );
|
|
||||||
}
|
|
||||||
|
|
||||||
const uploadedFiles = newFiles.map( ( file ) => ( {
|
const uploadedFiles = newFiles.map( ( file ) => ( {
|
||||||
id: stringifyId( file.id ),
|
id: stringifyId( file.id ),
|
||||||
file: file.url,
|
file: file.url,
|
||||||
|
@ -153,10 +144,6 @@ export function DownloadBlockEdit( {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ! downloads.length ) {
|
|
||||||
setDownloadable( true );
|
|
||||||
}
|
|
||||||
|
|
||||||
const uploadedFile = {
|
const uploadedFile = {
|
||||||
id: stringifyId( files[ 0 ].id ),
|
id: stringifyId( files[ 0 ].id ),
|
||||||
file: files[ 0 ].url,
|
file: files[ 0 ].url,
|
||||||
|
@ -191,10 +178,6 @@ export function DownloadBlockEdit( {
|
||||||
[]
|
[]
|
||||||
);
|
);
|
||||||
|
|
||||||
if ( ! otherDownloads.length ) {
|
|
||||||
setDownloadable( false );
|
|
||||||
}
|
|
||||||
|
|
||||||
setDownloads( otherDownloads );
|
setDownloads( otherDownloads );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,10 @@ $fixed-section-height: 224px;
|
||||||
.wp-block-woocommerce-product-downloads-field {
|
.wp-block-woocommerce-product-downloads-field {
|
||||||
&__body {
|
&__body {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
|
.woocommerce-media-uploader .woocommerce-media-uploader__label {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&__table {
|
&__table {
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
Significance: minor
|
||||||
|
Type: add
|
||||||
|
|
||||||
|
Hide Downloads section under Toggle for product variations
|
|
@ -65,6 +65,30 @@ class WC_REST_Product_Variations_Controller extends WC_REST_Product_Variations_V
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the downloads for a product variation.
|
||||||
|
*
|
||||||
|
* @param WC_Product_Variation $product Product variation instance.
|
||||||
|
* @param string $context Context of the request: 'view' or 'edit'.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function get_downloads( $product, $context = 'view' ) {
|
||||||
|
$downloads = array();
|
||||||
|
|
||||||
|
if ( $product->is_downloadable() || 'edit' === $context ) {
|
||||||
|
foreach ( $product->get_downloads() as $file_id => $file ) {
|
||||||
|
$downloads[] = array(
|
||||||
|
'id' => $file_id, // MD5 hash.
|
||||||
|
'name' => $file['name'],
|
||||||
|
'file' => $file['file'],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $downloads;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prepare a single variation output for response.
|
* Prepare a single variation output for response.
|
||||||
*
|
*
|
||||||
|
@ -95,7 +119,7 @@ class WC_REST_Product_Variations_Controller extends WC_REST_Product_Variations_V
|
||||||
'purchasable' => $object->is_purchasable(),
|
'purchasable' => $object->is_purchasable(),
|
||||||
'virtual' => $object->is_virtual(),
|
'virtual' => $object->is_virtual(),
|
||||||
'downloadable' => $object->is_downloadable(),
|
'downloadable' => $object->is_downloadable(),
|
||||||
'downloads' => $this->get_downloads( $object ),
|
'downloads' => $this->get_downloads( $object, $context ),
|
||||||
'download_limit' => '' !== $object->get_download_limit() ? (int) $object->get_download_limit() : -1,
|
'download_limit' => '' !== $object->get_download_limit() ? (int) $object->get_download_limit() : -1,
|
||||||
'download_expiry' => '' !== $object->get_download_expiry() ? (int) $object->get_download_expiry() : -1,
|
'download_expiry' => '' !== $object->get_download_expiry() ? (int) $object->get_download_expiry() : -1,
|
||||||
'tax_status' => $object->get_tax_status(),
|
'tax_status' => $object->get_tax_status(),
|
||||||
|
|
|
@ -0,0 +1,78 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* DownloadableProductTrait
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Automattic\WooCommerce\Internal\Admin\Features\ProductBlockEditor\ProductTemplates;
|
||||||
|
|
||||||
|
use Automattic\WooCommerce\Admin\Features\Features;
|
||||||
|
use Automattic\WooCommerce\Admin\Features\ProductBlockEditor\ProductTemplates\GroupInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Downloadable Product Trait.
|
||||||
|
*/
|
||||||
|
trait DownloadableProductTrait {
|
||||||
|
/**
|
||||||
|
* Adds downloadable blocks to the given parent block.
|
||||||
|
*
|
||||||
|
* @param GroupInterface $parent_block The parent block.
|
||||||
|
*/
|
||||||
|
private function add_downloadable_product_blocks( $parent_block ) {
|
||||||
|
// Downloads section.
|
||||||
|
if ( Features::is_enabled( 'product-virtual-downloadable' ) ) {
|
||||||
|
$product_downloads_section_group = $parent_block->add_section(
|
||||||
|
array(
|
||||||
|
'id' => 'product-downloads-section-group',
|
||||||
|
'order' => 50,
|
||||||
|
'attributes' => array(
|
||||||
|
'blockGap' => 'unit-40',
|
||||||
|
),
|
||||||
|
'hideConditions' => array(
|
||||||
|
array(
|
||||||
|
'expression' => 'postType === "product" && editedProduct.type !== "simple"',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$product_downloads_section_group->add_block(
|
||||||
|
array(
|
||||||
|
'id' => 'product-downloadable',
|
||||||
|
'blockName' => 'woocommerce/product-checkbox-field',
|
||||||
|
'order' => 10,
|
||||||
|
'attributes' => array(
|
||||||
|
'property' => 'downloadable',
|
||||||
|
'label' => __( 'Include downloads', 'woocommerce' ),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$product_downloads_section_group->add_section(
|
||||||
|
array(
|
||||||
|
'id' => 'product-downloads-section',
|
||||||
|
'order' => 20,
|
||||||
|
'attributes' => array(
|
||||||
|
'title' => __( 'Downloads', 'woocommerce' ),
|
||||||
|
'description' => sprintf(
|
||||||
|
/* translators: %1$s: Downloads settings link opening tag. %2$s: Downloads settings link closing tag. */
|
||||||
|
__( 'Add any files you\'d like to make available for the customer to download after purchasing, such as instructions or warranty info. Store-wide updates can be managed in your %1$sproduct settings%2$s.', 'woocommerce' ),
|
||||||
|
'<a href="' . admin_url( 'admin.php?page=wc-settings&tab=products§ion=downloadable' ) . '" target="_blank" rel="noreferrer">',
|
||||||
|
'</a>'
|
||||||
|
),
|
||||||
|
),
|
||||||
|
'hideConditions' => array(
|
||||||
|
array(
|
||||||
|
'expression' => 'editedProduct.downloadable !== true',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
)->add_block(
|
||||||
|
array(
|
||||||
|
'id' => 'product-downloads',
|
||||||
|
'blockName' => 'woocommerce/product-downloads-field',
|
||||||
|
'order' => 10,
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -7,11 +7,14 @@ namespace Automattic\WooCommerce\Internal\Admin\Features\ProductBlockEditor\Prod
|
||||||
|
|
||||||
use Automattic\WooCommerce\Admin\Features\Features;
|
use Automattic\WooCommerce\Admin\Features\Features;
|
||||||
use Automattic\WooCommerce\Admin\Features\ProductBlockEditor\ProductTemplates\ProductFormTemplateInterface;
|
use Automattic\WooCommerce\Admin\Features\ProductBlockEditor\ProductTemplates\ProductFormTemplateInterface;
|
||||||
|
use Automattic\WooCommerce\Internal\Admin\Features\ProductBlockEditor\ProductTemplates\DownloadableProductTrait;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Product Variation Template.
|
* Product Variation Template.
|
||||||
*/
|
*/
|
||||||
class ProductVariationTemplate extends AbstractProductFormTemplate implements ProductFormTemplateInterface {
|
class ProductVariationTemplate extends AbstractProductFormTemplate implements ProductFormTemplateInterface {
|
||||||
|
use DownloadableProductTrait;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The context name used to identify the editor.
|
* The context name used to identify the editor.
|
||||||
*/
|
*/
|
||||||
|
@ -185,29 +188,7 @@ class ProductVariationTemplate extends AbstractProductFormTemplate implements Pr
|
||||||
);
|
);
|
||||||
|
|
||||||
// Downloads section.
|
// Downloads section.
|
||||||
if ( Features::is_enabled( 'product-virtual-downloadable' ) ) {
|
$this->add_downloadable_product_blocks( $general_group );
|
||||||
$general_group->add_section(
|
|
||||||
array(
|
|
||||||
'id' => 'product-variation-downloads-section',
|
|
||||||
'order' => 40,
|
|
||||||
'attributes' => array(
|
|
||||||
'title' => __( 'Downloads', 'woocommerce' ),
|
|
||||||
'description' => sprintf(
|
|
||||||
/* translators: %1$s: Downloads settings link opening tag. %2$s: Downloads settings link closing tag. */
|
|
||||||
__( 'Add any files you\'d like to make available for the customer to download after purchasing, such as instructions or warranty info. Store-wide updates can be managed in your %1$sproduct settings%2$s.', 'woocommerce' ),
|
|
||||||
'<a href="' . admin_url( 'admin.php?page=wc-settings&tab=products§ion=downloadable' ) . '" target="_blank" rel="noreferrer">',
|
|
||||||
'</a>'
|
|
||||||
),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
)->add_block(
|
|
||||||
array(
|
|
||||||
'id' => 'product-variation-downloads',
|
|
||||||
'blockName' => 'woocommerce/product-downloads-field',
|
|
||||||
'order' => 10,
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -7,11 +7,14 @@ namespace Automattic\WooCommerce\Internal\Admin\Features\ProductBlockEditor\Prod
|
||||||
|
|
||||||
use Automattic\WooCommerce\Admin\Features\Features;
|
use Automattic\WooCommerce\Admin\Features\Features;
|
||||||
use Automattic\WooCommerce\Admin\Features\ProductBlockEditor\ProductTemplates\ProductFormTemplateInterface;
|
use Automattic\WooCommerce\Admin\Features\ProductBlockEditor\ProductTemplates\ProductFormTemplateInterface;
|
||||||
|
use Automattic\WooCommerce\Internal\Admin\Features\ProductBlockEditor\ProductTemplates\DownloadableProductTrait;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Simple Product Template.
|
* Simple Product Template.
|
||||||
*/
|
*/
|
||||||
class SimpleProductTemplate extends AbstractProductFormTemplate implements ProductFormTemplateInterface {
|
class SimpleProductTemplate extends AbstractProductFormTemplate implements ProductFormTemplateInterface {
|
||||||
|
use DownloadableProductTrait;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The context name used to identify the editor.
|
* The context name used to identify the editor.
|
||||||
*/
|
*/
|
||||||
|
@ -459,62 +462,9 @@ class SimpleProductTemplate extends AbstractProductFormTemplate implements Produ
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
// Downloads section.
|
// Downloads section.
|
||||||
if ( Features::is_enabled( 'product-virtual-downloadable' ) ) {
|
$this->add_downloadable_product_blocks( $general_group );
|
||||||
$product_downloads_section_group = $general_group->add_section(
|
|
||||||
array(
|
|
||||||
'id' => 'product-downloads-section-group',
|
|
||||||
'order' => 50,
|
|
||||||
'attributes' => array(
|
|
||||||
'blockGap' => 'unit-40',
|
|
||||||
),
|
|
||||||
'hideConditions' => array(
|
|
||||||
array(
|
|
||||||
'expression' => 'editedProduct.type !== "simple"',
|
|
||||||
),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
$product_downloads_section_group->add_block(
|
|
||||||
array(
|
|
||||||
'id' => 'product-downloadable',
|
|
||||||
'blockName' => 'woocommerce/product-checkbox-field',
|
|
||||||
'order' => 10,
|
|
||||||
'attributes' => array(
|
|
||||||
'property' => 'downloadable',
|
|
||||||
'label' => __( 'Include downloads', 'woocommerce' ),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
$product_downloads_section_group->add_section(
|
|
||||||
array(
|
|
||||||
'id' => 'product-downloads-section',
|
|
||||||
'order' => 20,
|
|
||||||
'attributes' => array(
|
|
||||||
'title' => __( 'Downloads', 'woocommerce' ),
|
|
||||||
'description' => sprintf(
|
|
||||||
/* translators: %1$s: Downloads settings link opening tag. %2$s: Downloads settings link closing tag. */
|
|
||||||
__( 'Add any files you\'d like to make available for the customer to download after purchasing, such as instructions or warranty info. Store-wide updates can be managed in your %1$sproduct settings%2$s.', 'woocommerce' ),
|
|
||||||
'<a href="' . admin_url( 'admin.php?page=wc-settings&tab=products§ion=downloadable' ) . '" target="_blank" rel="noreferrer">',
|
|
||||||
'</a>'
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'hideConditions' => array(
|
|
||||||
array(
|
|
||||||
'expression' => 'editedProduct.downloadable !== true',
|
|
||||||
),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
)->add_block(
|
|
||||||
array(
|
|
||||||
'id' => 'product-downloads',
|
|
||||||
'blockName' => 'woocommerce/product-downloads-field',
|
|
||||||
'order' => 10,
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue