Merge branch 'trunk' into update-38820-enhancement-api-search-customers-with-non-empty-email-or-name-or-address
# Conflicts: # plugins/woocommerce/tests/legacy/unit-tests/woocommerce-admin/api/reports-customers.php
This commit is contained in:
commit
89d3a1ecee
|
@ -35,7 +35,8 @@ Please take a moment to review the [project readme](https://github.com/woocommer
|
|||
|
||||
- Ensure you stick to the [WordPress Coding Standards](https://make.wordpress.org/core/handbook/best-practices/coding-standards/php/).
|
||||
- Run our build process described in the document on [how to set up WooCommerce development environment](https://github.com/woocommerce/woocommerce/wiki/How-to-set-up-WooCommerce-development-environment), it will install our pre-commit hook, code sniffs, dependencies, and more.
|
||||
- Whenever possible please fix pre-existing code standards errors in the files that you change. It is ok to skip that for larger files or complex fixes.
|
||||
- Before pushing commits to GitHub, check your code against our code standards. For PHP code in the WooCommerce Core project you can do this by running `pnpm --filter=woocommerce run lint:php:changes:branch`.
|
||||
- Whenever possible, please fix pre-existing code standards errors in code that you change.
|
||||
- Ensure you use LF line endings in your code editor. Use [EditorConfig](http://editorconfig.org/) if your editor supports it so that indentation, line endings and other settings are auto configured.
|
||||
- When committing, reference your issue number (#1234) and include a note about the fix.
|
||||
- Ensure that your code supports the minimum supported versions of PHP and WordPress; this is shown at the top of the `readme.txt` file.
|
||||
|
|
|
@ -43,7 +43,7 @@ runs:
|
|||
with:
|
||||
php-version: ${{ inputs.php-version }}
|
||||
coverage: none
|
||||
tools: phpcs, sirbrillig/phpcs-changed:2.10.2
|
||||
tools: phpcs, sirbrillig/phpcs-changed:2.11.1
|
||||
|
||||
- name: Cache Composer Dependencies
|
||||
uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8
|
||||
|
|
|
@ -61,6 +61,12 @@
|
|||
'plugin: woocommerce':
|
||||
- plugins/woocommerce/**/*
|
||||
|
||||
'plugin: woocommerce beta tester':
|
||||
- plugins/woocommerce-beta-tester/**/*
|
||||
|
||||
'plugin: woo-ai':
|
||||
- plugins/woo-ai/**/*
|
||||
|
||||
'focus: react admin [team:Ghidorah]':
|
||||
- plugins/woocommerce/src/Admin/**/*
|
||||
- plugins/woocommerce/src/Internal/Admin/**/*
|
||||
|
|
|
@ -1,287 +0,0 @@
|
|||
name: Bump WP L-2 Support
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
releaseBranch:
|
||||
description: Provide the release branch you want to bump the WP L-2 support. Example release/6.9. Note that trunk will also be bumped to match.
|
||||
default: ''
|
||||
required: true
|
||||
|
||||
permissions: {}
|
||||
|
||||
env:
|
||||
GIT_COMMITTER_NAME: 'WooCommerce Bot'
|
||||
GIT_COMMITTER_EMAIL: 'no-reply@woocommerce.com'
|
||||
GIT_AUTHOR_NAME: 'WooCommerce Bot'
|
||||
GIT_AUTHOR_EMAIL: 'no-reply@woocommerce.com'
|
||||
|
||||
jobs:
|
||||
check-release-branch-exists:
|
||||
name: Check for existence of release branch
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- name: Check for release branch
|
||||
id: release-branch-check
|
||||
uses: actions/github-script@v6
|
||||
with:
|
||||
script: |
|
||||
// This will throw an error for non-200 responses, which prevents subsequent jobs from completing, as desired.
|
||||
await github.request( 'GET /repos/{owner}/{repo}/branches/{branch}', {
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
branch: '${{ inputs.releaseBranch }}',
|
||||
} );
|
||||
|
||||
validate-bump:
|
||||
name: Validate and bump WP L-2 support version
|
||||
runs-on: ubuntu-20.04
|
||||
needs: check-release-branch-exists
|
||||
if: success()
|
||||
permissions:
|
||||
actions: write
|
||||
contents: write
|
||||
pull-requests: write
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Get latest WP version
|
||||
id: latestWP
|
||||
uses: actions/github-script@v6
|
||||
with:
|
||||
script: |
|
||||
const https = require( 'https' );
|
||||
|
||||
https.get( 'https://api.wordpress.org/core/stable-check/1.0/', ( resp ) => {
|
||||
let data = '';
|
||||
|
||||
// A chunk of data has been received.
|
||||
resp.on( 'data', ( chunk ) => {
|
||||
data += chunk;
|
||||
} );
|
||||
|
||||
// The whole response has been received. Print out the result.
|
||||
resp.on( 'end', () => {
|
||||
JSON.parse(data, ( key, val ) => {
|
||||
if ( val === 'latest' ) {
|
||||
core.setOutput( 'version', key )
|
||||
}
|
||||
} );
|
||||
} );
|
||||
|
||||
} ).on( 'error', ( err ) => {
|
||||
console.log( 'Error: ' + err.message );
|
||||
} );
|
||||
|
||||
- name: Get L-2 WP version
|
||||
id: l2Version
|
||||
if: steps.latestWP.outputs.version != '' && steps.latestWP.outputs.version != null
|
||||
uses: actions/github-script@v6
|
||||
with:
|
||||
script: |
|
||||
const version = "${{ steps.latestWP.outputs.version }}";
|
||||
const latestWPVersionMajor = version.split( '.' )[0];
|
||||
const latestWPVersionMinor = version.split( '.' )[1];
|
||||
const l2 = (parseInt( ( latestWPVersionMajor + latestWPVersionMinor ), 10 ) - 2 ).toString();
|
||||
const l2Major = l2.split( '' )[0];
|
||||
const l2Minor = l2.split( '' )[1];
|
||||
core.setOutput( 'version', l2Major + '.' + l2Minor );
|
||||
|
||||
- name: Git fetch the release branch
|
||||
run: git fetch origin ${{ inputs.releaseBranch }}
|
||||
|
||||
- name: Checkout release branch
|
||||
run: git checkout ${{ inputs.releaseBranch }}
|
||||
|
||||
- name: Create a PR branch based on release branch
|
||||
run: git checkout -b WP-L-2-version-support-${{ steps.l2Version.outputs.version }}/${{ inputs.releaseBranch }}
|
||||
|
||||
- name: Check if WP L-2 support needs to be bumped the release branch
|
||||
id: readmeWPVersion
|
||||
if: steps.l2Version.outputs.version != '' && steps.l2Version.outputs.version != null
|
||||
uses: actions/github-script@v6
|
||||
with:
|
||||
script: |
|
||||
const fs = require( 'node:fs' );
|
||||
const l2Version = "${{ steps.l2Version.outputs.version }}";
|
||||
let readme = '';
|
||||
|
||||
fs.readFile( './plugins/woocommerce/readme.txt', 'utf-8', function( err, data ) {
|
||||
if ( err ) {
|
||||
console.error( err );
|
||||
}
|
||||
|
||||
readme = data.split( "\n" );
|
||||
const newReadme = [];
|
||||
let needsChange = false;
|
||||
|
||||
for ( const line of readme ) {
|
||||
if ( line.match( /Requires\sat\sleast:\s\d+\.\d/ ) ) {
|
||||
const readmeVersion = line.match( /\d+\.\d/ );
|
||||
|
||||
// If the versions don't match, means we need to make a change.
|
||||
if ( readmeVersion != l2Version ) {
|
||||
needsChange = true;
|
||||
|
||||
newReadme.push( 'Requires at least: ' + l2Version );
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
newReadme.push( line );
|
||||
}
|
||||
|
||||
if ( needsChange ) {
|
||||
fs.writeFile( './plugins/woocommerce/readme.txt', newReadme.join( "\n" ), err => {
|
||||
if ( err ) {
|
||||
core.setFailed( `Unable to bump the WP L-2 support version. ${err}` );
|
||||
}
|
||||
|
||||
core.setOutput( 'needsChange', needsChange );
|
||||
|
||||
// Copy the readme.txt file to the root of VM to be used later.
|
||||
fs.writeFile( '../../readme.txt', newReadme.join( "\n" ), err => {
|
||||
if ( err ) {
|
||||
core.setFailed( `Unable to copy the readme.txt file to the root of VM. ${err}` );
|
||||
}
|
||||
} );
|
||||
} );
|
||||
} else {
|
||||
core.setFailed( 'No changes needed. WP Version is L-2 compatible.' );
|
||||
}
|
||||
} );
|
||||
|
||||
- name: Commit changes
|
||||
if: steps.readmeWPVersion.outputs.needsChange == 'true'
|
||||
run: git commit --no-verify -am "Update readme.txt WP L-2 support version."
|
||||
|
||||
- name: Push changes
|
||||
if: steps.readmeWPVersion.outputs.needsChange == 'true'
|
||||
run: git push origin WP-L-2-version-support-${{ steps.l2Version.outputs.version }}/${{ inputs.releaseBranch }}
|
||||
|
||||
- name: Push the PR up to GitHub
|
||||
id: release-branch-pr
|
||||
if: steps.readmeWPVersion.outputs.needsChange == 'true'
|
||||
uses: actions/github-script@v6
|
||||
with:
|
||||
script: |
|
||||
const PRBody = "This PR bumps the WP version to L-2 compatible for the release branch ${{ inputs.releaseBranch }}.\n";
|
||||
|
||||
const pr = await github.rest.pulls.create( {
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
title: "Bump WP Version to L-2 compatible for ${{ inputs.releaseBranch }}",
|
||||
head: "WP-L-2-version-support-${{ steps.l2Version.outputs.version }}/${{ inputs.releaseBranch }}",
|
||||
base: "${{ inputs.releaseBranch }}",
|
||||
body: PRBody
|
||||
} );
|
||||
|
||||
if ( pr.status != 201 ) {
|
||||
core.setFailed( "Unable to push WP-L-2-version-support-${{ steps.l2Version.outputs.version }}/${{ inputs.releaseBranch }} to GitHub." );
|
||||
}
|
||||
|
||||
core.setOutput( 'pr', pr.data.number );
|
||||
|
||||
await github.rest.pulls.requestReviewers( {
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
pull_number: pr.data.number,
|
||||
reviewers: [ context.actor ]
|
||||
} );
|
||||
|
||||
- name: Checkout trunk branch
|
||||
if: steps.release-branch-pr.outputs.pr != '' && steps.release-branch-pr.outputs.pr != null
|
||||
run: git checkout trunk
|
||||
|
||||
- name: Create a branch based on trunk branch
|
||||
if: steps.release-branch-pr.outputs.pr != '' && steps.release-branch-pr.outputs.pr != null
|
||||
run: git checkout -b WP-L-2-version-support-${{ steps.l2Version.outputs.version }}/trunk
|
||||
|
||||
- name: Check if WP L-2 support needs to be bumped for trunk
|
||||
id: readmeWPVersionTrunk
|
||||
if: steps.release-branch-pr.outputs.pr != '' && steps.release-branch-pr.outputs.pr != null
|
||||
uses: actions/github-script@v6
|
||||
with:
|
||||
script: |
|
||||
const fs = require( 'node:fs' );
|
||||
const l2Version = "${{ steps.l2Version.outputs.version }}";
|
||||
let readme = '';
|
||||
|
||||
fs.readFile( './plugins/woocommerce/readme.txt', 'utf-8', function( err, data ) {
|
||||
if ( err ) {
|
||||
console.error( err );
|
||||
}
|
||||
|
||||
readme = data.split( "\n" );
|
||||
const newReadme = [];
|
||||
let needsChange = false;
|
||||
|
||||
for ( const line of readme ) {
|
||||
if ( line.match( /Requires\sat\sleast:\s\d+\.\d/ ) ) {
|
||||
const readmeVersion = line.match( /\d+\.\d/ );
|
||||
|
||||
// If the versions don't match, means we need to make a change.
|
||||
if ( readmeVersion != l2Version ) {
|
||||
needsChange = true;
|
||||
|
||||
newReadme.push( 'Requires at least: ' + l2Version );
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
newReadme.push( line );
|
||||
}
|
||||
|
||||
if ( needsChange ) {
|
||||
fs.writeFile( './plugins/woocommerce/readme.txt', newReadme.join( "\n" ), err => {
|
||||
if ( err ) {
|
||||
core.setFailed( `Unable to bump the WP L-2 support version. ${err}` );
|
||||
}
|
||||
|
||||
core.setOutput( 'needsChange', needsChange );
|
||||
|
||||
// Copy the readme.txt file to the root of VM to be used later.
|
||||
fs.writeFile( '../../readme.txt', newReadme.join( "\n" ), err => {
|
||||
if ( err ) {
|
||||
core.setFailed( `Unable to copy the readme.txt file to the root of VM. ${err}` );
|
||||
}
|
||||
} );
|
||||
} );
|
||||
} else {
|
||||
core.setFailed( 'No changes needed. WP Version is L-2 compatible.' );
|
||||
}
|
||||
} );
|
||||
|
||||
- name: Commit changes
|
||||
if: steps.readmeWPVersionTrunk.outputs.needsChange == 'true'
|
||||
run: git commit --no-verify -am "Update readme.txt WP L-2 support version."
|
||||
|
||||
- name: Push changes
|
||||
if: steps.readmeWPVersionTrunk.outputs.needsChange == 'true'
|
||||
run: git push origin WP-L-2-version-support-${{ steps.l2Version.outputs.version }}/trunk
|
||||
|
||||
- name: Push the PR up to GitHub
|
||||
if: steps.readmeWPVersionTrunk.outputs.needsChange == 'true'
|
||||
uses: actions/github-script@v6
|
||||
with:
|
||||
script: |
|
||||
const PRBody = "This PR bumps the WP version to L-2 compatible for trunk.\n";
|
||||
|
||||
const pr = await github.rest.pulls.create( {
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
title: "Bump WP Version to L-2 compatible for trunk",
|
||||
head: "WP-L-2-version-support-${{ steps.l2Version.outputs.version }}/trunk",
|
||||
base: "trunk",
|
||||
body: PRBody
|
||||
} );
|
||||
|
||||
if ( pr.status != 201 ) {
|
||||
core.setFailed( "Unable to push WP-L-2-version-support-${{ steps.l2Version.outputs.version }}/trunk to GitHub." );
|
||||
}
|
||||
|
||||
await github.rest.pulls.requestReviewers( {
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
pull_number: pr.data.number,
|
||||
reviewers: [ context.actor ]
|
||||
} );
|
166
changelog.txt
166
changelog.txt
|
@ -1,5 +1,171 @@
|
|||
== Changelog ==
|
||||
|
||||
= 7.8.0 2023-06-13 =
|
||||
|
||||
**WooCommerce**
|
||||
|
||||
* Fix - Fix a bug where text overlapped the image in the task list header. [#38585](https://github.com/woocommerce/woocommerce/pull/38585)
|
||||
* Fix - Fix issue where undefined query params where not removed from links, causing unexpected behaviour in Analytics. [#38542](https://github.com/woocommerce/woocommerce/pull/38542)
|
||||
* Fix - Above notification threshold when "Out of stock threshold" filed value is empty [[#37855]](https://github.com/woocommerce/woocommerce/pull/37855)
|
||||
* Fix - Added numeric check for Regular price in bulk edits. [[#37812]](https://github.com/woocommerce/woocommerce/pull/37812)
|
||||
* Fix - add missing aria-label attributes to help tips [[#37808]](https://github.com/woocommerce/woocommerce/pull/37808)
|
||||
* Fix - add refunded_payment property in the create refund response [[#37816]](https://github.com/woocommerce/woocommerce/pull/37816)
|
||||
* Fix - Add support to verify specific order types. [[#38318]](https://github.com/woocommerce/woocommerce/pull/38318)
|
||||
* Fix - Add the product name to the "Remove from cart" button's aria-label in the cart and mini cart. [[#37830]](https://github.com/woocommerce/woocommerce/pull/37830)
|
||||
* Fix - Clear floats in Twenty Twenty Three theme on Related products and Upsells. [[#37877]](https://github.com/woocommerce/woocommerce/pull/37877)
|
||||
* Fix - Ensure the remove icon shows properly on smaller screens when using the Twenty Twenty One theme [[#37859]](https://github.com/woocommerce/woocommerce/pull/37859)
|
||||
* Fix - Fix "Add store details" task fails to mark as completed for selecting Nigeria based address [[#38181]](https://github.com/woocommerce/woocommerce/pull/38181)
|
||||
* Fix - Fix: when order is deleted child orders should be deleted too, not set to parent id 0, unless the post type for the order is hierarchical [[#38199]](https://github.com/woocommerce/woocommerce/pull/38199)
|
||||
* Fix - Fix activity panel not showing unread when closed [[#38173]](https://github.com/woocommerce/woocommerce/pull/38173)
|
||||
* Fix - Fix decimal points for SEK, HUF and CZK currencies [[#37834]](https://github.com/woocommerce/woocommerce/pull/37834)
|
||||
* Fix - Fixed Cross-Sells display variable product [[#37616]](https://github.com/woocommerce/woocommerce/pull/37616)
|
||||
* Fix - Fixes a race condition when adding the first attribute form to the product edit screen. [[#38354]](https://github.com/woocommerce/woocommerce/pull/38354)
|
||||
* Fix - Fix get_options deprecation notice [[#38289]](https://github.com/woocommerce/woocommerce/pull/38289)
|
||||
* Fix - Fix loading sample product's progress message is misaligned if Gutenberg plugin is enabled [[#38107]](https://github.com/woocommerce/woocommerce/pull/38107)
|
||||
* Fix - fix logout vs log out typo [[#35232]](https://github.com/woocommerce/woocommerce/pull/35232)
|
||||
* Fix - Fix product task import for cases when user locale is en_US [[#38089]](https://github.com/woocommerce/woocommerce/pull/38089)
|
||||
* Fix - Fix race condition that caused some store alerts to be undismissable [[#38047]](https://github.com/woocommerce/woocommerce/pull/38047)
|
||||
* Fix - Fix shipping tour layout context error [[#38183]](https://github.com/woocommerce/woocommerce/pull/38183)
|
||||
* Fix - fix stock status is not correct in JSON structure data if product is onbackorder [[#37837]](https://github.com/woocommerce/woocommerce/pull/37837)
|
||||
* Fix - Fix task list progress title when no tasks are completed [[#38092]](https://github.com/woocommerce/woocommerce/pull/38092)
|
||||
* Fix - Fix tracks user ID mismatch between PHP and JS when Jetpack is active and connected [[#38094]](https://github.com/woocommerce/woocommerce/pull/38094)
|
||||
* Fix - Fix wc-experimental not translated issue [[#38108]](https://github.com/woocommerce/woocommerce/pull/38108)
|
||||
* Fix - Fix wrong file name in error message in update-wp-env.php. [[#37891]](https://github.com/woocommerce/woocommerce/pull/37891)
|
||||
* Fix - For the Twenty Twenty One theme, reduce padding within notices on smaller screens [[#37862]](https://github.com/woocommerce/woocommerce/pull/37862)
|
||||
* Fix - Hide state selector for Ethiopia and Rwanda addresses [[#35481]](https://github.com/woocommerce/woocommerce/pull/35481)
|
||||
* Fix - Hide upload logo step in Personalize task if theme doesn't support it [[#38161]](https://github.com/woocommerce/woocommerce/pull/38161)
|
||||
* Fix - No warning shown for zero price. [[#37817]](https://github.com/woocommerce/woocommerce/pull/37817)
|
||||
* Fix - Prevented an issue with height flickering when selecting a variation [[#38115]](https://github.com/woocommerce/woocommerce/pull/38115)
|
||||
* Fix - Prevent login call if the user is already logged in. [[#37850]](https://github.com/woocommerce/woocommerce/pull/37850)
|
||||
* Fix - Prevents error in Customers API endpoint when date_created value is missing [[#37860]](https://github.com/woocommerce/woocommerce/pull/37860)
|
||||
* Fix - Removed aria-disabled attribute from "Update Cart" button as it already has a disabled attribute. [[#37820]](https://github.com/woocommerce/woocommerce/pull/37820)
|
||||
* Fix - Remove the default text in "Additional content" being sent for all emails when the field is empty for Admin New Order email [[#37883]](https://github.com/woocommerce/woocommerce/pull/37883)
|
||||
* Fix - Removing auto-draft as wc post type to resolve publish time bug. [[#38099]](https://github.com/woocommerce/woocommerce/pull/38099)
|
||||
* Fix - replace title HTML attribute with aria-label for quantity input field [[#37811]](https://github.com/woocommerce/woocommerce/pull/37811)
|
||||
* Fix - Save an order created via the REST API to prevent overrides from 3rd party plugins or themes if they try to add fees to the order. [[#37845]](https://github.com/woocommerce/woocommerce/pull/37845)
|
||||
* Fix - Show correct confirmation message when removing an attribute from a product. [[#38355]](https://github.com/woocommerce/woocommerce/pull/38355)
|
||||
* Fix - Show correct variations count when generating a single variation. [[#37876]](https://github.com/woocommerce/woocommerce/pull/37876)
|
||||
* Fix - skip k6 api order RUD tests on non-existent order when C test fails [[#37887]](https://github.com/woocommerce/woocommerce/pull/37887)
|
||||
* Fix - skip k6 batch update when batch create fails [[#38282]](https://github.com/woocommerce/woocommerce/pull/38282)
|
||||
* Fix - Support strict SQL modes in HPOS migration that dont allow zero date values. [[#38332]](https://github.com/woocommerce/woocommerce/pull/38332)
|
||||
* Fix - use correct escaping function [[#36868]](https://github.com/woocommerce/woocommerce/pull/36868)
|
||||
* Fix - Use waitUntil instead of waitForLoadState in page.goto() and page.click(). [[#37831]](https://github.com/woocommerce/woocommerce/pull/37831)
|
||||
* Fix - When creating default storefront pages, the site language (and not the language of the current user) should be used. [[#37795]](https://github.com/woocommerce/woocommerce/pull/37795)
|
||||
* Fix - Fix Layout Controller forwarding arrays from the URL query string. [#38593](https://github.com/woocommerce/woocommerce/pull/38593)
|
||||
* Add - Added SSR to WCCOM endpoints. [#38433](https://github.com/woocommerce/woocommerce/pull/38433)
|
||||
* Add - Add admin-side order edit lock for HPOS. [[#38230]](https://github.com/woocommerce/woocommerce/pull/38230)
|
||||
* Add - Add a filter to exclude Jetpack from suggested free extensions REST endpoint. [[#38286]](https://github.com/woocommerce/woocommerce/pull/38286)
|
||||
* Add - Add a function to get the aria-describedby description for the add to cart button.
|
||||
Add default description for the Select options button. [[#37880]](https://github.com/woocommerce/woocommerce/pull/37880)
|
||||
* Add - Add Business Location page to the new core profiler [[#38019]](https://github.com/woocommerce/woocommerce/pull/38019)
|
||||
* Add - Add core profiler "Welcome to Woo" page [[#37952]](https://github.com/woocommerce/woocommerce/pull/37952)
|
||||
* Add - Add core profiler user profile page [[#38328]](https://github.com/woocommerce/woocommerce/pull/38328)
|
||||
* Add - Add description block to product editor template [[#37852]](https://github.com/woocommerce/woocommerce/pull/37852)
|
||||
* Add - Add e2e test for Merchant > Pages > Can create a new page [[#38238]](https://github.com/woocommerce/woocommerce/pull/38238)
|
||||
* Add - Add e2e test for Merchant > Posts > Can create a new post [[#38041]](https://github.com/woocommerce/woocommerce/pull/38041)
|
||||
* Add - Added async fetching for extensions and countries lists in new core profiler [[#38270]](https://github.com/woocommerce/woocommerce/pull/38270)
|
||||
* Add - Added scaffolding for new core profiler [[#37628]](https://github.com/woocommerce/woocommerce/pull/37628)
|
||||
* Add - Add HPOS specific k6 test suite [[#37665]](https://github.com/woocommerce/woocommerce/pull/37665)
|
||||
* Add - Adding order attributes to product tabs template. [[#38081]](https://github.com/woocommerce/woocommerce/pull/38081)
|
||||
* Add - Add navigation and progress-bar componentns for the new core profiler [[#37741]](https://github.com/woocommerce/woocommerce/pull/37741)
|
||||
* Add - Add Sale price validation#37985 [[#38078]](https://github.com/woocommerce/woocommerce/pull/38078)
|
||||
* Add - add support for minlenght in the template [[#37840]](https://github.com/woocommerce/woocommerce/pull/37840)
|
||||
* Add - Add tinymce scripts to product editor pages [[#38175]](https://github.com/woocommerce/woocommerce/pull/38175)
|
||||
* Add - Add unresolved assets for iframe editors to editor settings [[#37570]](https://github.com/woocommerce/woocommerce/pull/37570)
|
||||
* Add - Add WooCommerce Admin page class to body of every page [[#38281]](https://github.com/woocommerce/woocommerce/pull/38281)
|
||||
* Add - Create orders as 'auto-draft' by default in admin. [[#37643]](https://github.com/woocommerce/woocommerce/pull/37643)
|
||||
* Add - Get feature flags from client side [[#37122]](https://github.com/woocommerce/woocommerce/pull/37122)
|
||||
* Add - Only register blocks when user navigates to the product edit page#38200 [[#38303]](https://github.com/woocommerce/woocommerce/pull/38303)
|
||||
* Add - Show the number of variations imported [[#37829]](https://github.com/woocommerce/woocommerce/pull/37829)
|
||||
* Add - Track stock quantity for this product should be disabled when Enable stock management within settings is disabled, and enabled otherwise [[#37957]](https://github.com/woocommerce/woocommerce/pull/37957)
|
||||
* Add - Update List price Pricing link on the general tab to navigate to the Pricing tab [[#37961]](https://github.com/woocommerce/woocommerce/pull/37961)
|
||||
* Add - Update shipping class block to match new designs#38044 [[#38301]](https://github.com/woocommerce/woocommerce/pull/38301)
|
||||
* Update - Update WooCommerce Blocks to 10.2.3 [#38663](https://github.com/woocommerce/woocommerce/pull/38663)
|
||||
* Update - Update WooCommerce Blocks to 10.2.2 [#38545](https://github.com/woocommerce/woocommerce/pull/38545)
|
||||
* Update - Update WooCommerce Blocks to 10.2.1 [#38449](https://github.com/woocommerce/woocommerce/pull/38449)
|
||||
* Update - Add action hooks to WC_Abstract_Order::remove_order_items [[#37822]](https://github.com/woocommerce/woocommerce/pull/37822)
|
||||
* Update - Add new REST endpoints at onboarding/plugins to support async plugin installation with real time error tracking. [[#38174]](https://github.com/woocommerce/woocommerce/pull/38174)
|
||||
* Update - add pagination navigation below Settings Tax list table [[#37916]](https://github.com/woocommerce/woocommerce/pull/37916)
|
||||
* Update - Add support for `showHeader` config in router config to hide header if needed. [[#38247]](https://github.com/woocommerce/woocommerce/pull/38247)
|
||||
* Update - Add tracks events to shipping settings [[#38305]](https://github.com/woocommerce/woocommerce/pull/38305)
|
||||
* Update - Always show the product variations empty state with message when there are no "used for variations" attributes on a product. [[#38358]](https://github.com/woocommerce/woocommerce/pull/38358)
|
||||
* Update - Change product-category-metabox JS/style enqueue logic [[#38076]](https://github.com/woocommerce/woocommerce/pull/38076)
|
||||
* Update - Fallback to simply not display any prices rather than empty prices and re-enable Purchase unit tests [[#38163]](https://github.com/woocommerce/woocommerce/pull/38163)
|
||||
* Update - In the WC Tracker, group payment methods and origins ignoring unique ids within their names. [[#37951]](https://github.com/woocommerce/woocommerce/pull/37951)
|
||||
* Update - Loading svgs in product block template by URL. [[#37869]](https://github.com/woocommerce/woocommerce/pull/37869)
|
||||
* Update - Make all fields in the tax location form mandatory [[#38137]](https://github.com/woocommerce/woocommerce/pull/38137)
|
||||
* Update - Moving AddNewShippingClass modal to product-editor package. [[#37968]](https://github.com/woocommerce/woocommerce/pull/37968)
|
||||
* Update - Moving product attributes components to product-editor package. [[#38051]](https://github.com/woocommerce/woocommerce/pull/38051)
|
||||
* Update - Moving product block editor styling to prdouct editor package. [[#37805]](https://github.com/woocommerce/woocommerce/pull/37805)
|
||||
* Update - Only add product template when new editor feature flag is enabled. [[#38276]](https://github.com/woocommerce/woocommerce/pull/38276)
|
||||
* Update - Remove Core onboarding usage of woocommerce_updated hook [[#38158]](https://github.com/woocommerce/woocommerce/pull/38158)
|
||||
* Update - Remove sample data from product templates [[#38343]](https://github.com/woocommerce/woocommerce/pull/38343)
|
||||
* Update - Replacing hardcoded info and error notices with the correct wp_print_notice functions. [[#37514]](https://github.com/woocommerce/woocommerce/pull/37514)
|
||||
* Update - Update Category product metabox with an async dropdown search control rendered with React. [[#36869]](https://github.com/woocommerce/woocommerce/pull/36869)
|
||||
* Update - Update current block names to reflect use case and avoid conflicts#37704 [[#37851]](https://github.com/woocommerce/woocommerce/pull/37851)
|
||||
* Update - Updated product description tips text. [[#38070]](https://github.com/woocommerce/woocommerce/pull/38070)
|
||||
* Update - Update empty state for product attributes tab. [[#38126]](https://github.com/woocommerce/woocommerce/pull/38126)
|
||||
* Update - Update Payfast's title and logo [[#38090]](https://github.com/woocommerce/woocommerce/pull/38090)
|
||||
* Update - Update product template to include category section and block. [[#37295]](https://github.com/woocommerce/woocommerce/pull/37295)
|
||||
* Update - Update transformers doc with examples [[#38176]](https://github.com/woocommerce/woocommerce/pull/38176)
|
||||
* Update - Update WooCommerce Blocks to 10.2.0 [[#38246]](https://github.com/woocommerce/woocommerce/pull/38246)
|
||||
* Update - Update Woo to L-1 support policy for 7.8 [[#37970]](https://github.com/woocommerce/woocommerce/pull/37970)
|
||||
* Update - Updating product editor block template to include stock status and refactor others. [[#37906]](https://github.com/woocommerce/woocommerce/pull/37906)
|
||||
* Update - Updating the usage of LayoutContext and moving to admin-layout package. [[#37720]](https://github.com/woocommerce/woocommerce/pull/37720)
|
||||
* Update - Use snackbar instead of alert when showing generated variations message. [[#38103]](https://github.com/woocommerce/woocommerce/pull/38103)
|
||||
* Update - Woo Blocks 10.0.4 [[#38135]](https://github.com/woocommerce/woocommerce/pull/38135)
|
||||
* Dev - Added model based testing for new core profiler [[#38154]](https://github.com/woocommerce/woocommerce/pull/38154)
|
||||
* Dev - Added xstate inspector toggling via localStorage flag and dev node environment, and eslint xstate plugin [[#38022]](https://github.com/woocommerce/woocommerce/pull/38022)
|
||||
* Dev - Add Gutenberg nightly and latest stable into the daily and release smoke tests. [[#38287]](https://github.com/woocommerce/woocommerce/pull/38287)
|
||||
* Dev - Add instruction to run Playwright UI mode in E2E readme. [[#38197]](https://github.com/woocommerce/woocommerce/pull/38197)
|
||||
* Dev - Add missing woocommerce_run_on_woocommerce_admin_updated hook for the scheduled action registered in RemoteInboxNotificationsEngine [[#38159]](https://github.com/woocommerce/woocommerce/pull/38159)
|
||||
* Dev - Add the ability to skip the `review-testing-instructions` workflow when the PR is from an external contributor. [[#37813]](https://github.com/woocommerce/woocommerce/pull/37813)
|
||||
* Dev - Break down the "create-variable-product" spec into smaller specs. [[#38335]](https://github.com/woocommerce/woocommerce/pull/38335)
|
||||
* Dev - Cleanup task list and organize tasks file structure [[#38271]](https://github.com/woocommerce/woocommerce/pull/38271)
|
||||
* Dev - Correct URL and assertion in merchant/add-order perf test. [[#37719]](https://github.com/woocommerce/woocommerce/pull/37719)
|
||||
* Dev - Increase default timeout and test timeout of create-variable-product spec. [[#38321]](https://github.com/woocommerce/woocommerce/pull/38321)
|
||||
* Dev - Migrate tasks fills index.js, purchase.tsx and related utils to TS [[#37725]](https://github.com/woocommerce/woocommerce/pull/37725)
|
||||
* Dev - Modify 'WC_Settings_Tracking' to allow dropdown options recording for WooCommerce Settings [[#38035]](https://github.com/woocommerce/woocommerce/pull/38035)
|
||||
* Dev - Optimize installation routine by reducing the number of DELETE statments for admin notices. [[#37472]](https://github.com/woocommerce/woocommerce/pull/37472)
|
||||
* Dev - Register server-side tracking during rest requests [[#37796]](https://github.com/woocommerce/woocommerce/pull/37796)
|
||||
* Dev - Remove daily.playwright.config.js and references to it. [[#38336]](https://github.com/woocommerce/woocommerce/pull/38336)
|
||||
* Dev - Removed wp-env workaround since the bug has been fixed [[#38326]](https://github.com/woocommerce/woocommerce/pull/38326)
|
||||
* Dev - remove unused deasync dependency [[#37821]](https://github.com/woocommerce/woocommerce/pull/37821)
|
||||
* Dev - Remove `qs` dependency from `woocommerce-admin` [[#35128]](https://github.com/woocommerce/woocommerce/pull/35128)
|
||||
* Dev - Update Playwright to 1.33 and introduce UI command [[#38100]](https://github.com/woocommerce/woocommerce/pull/38100)
|
||||
* Dev - Update pnpm to version 8. [[#37915]](https://github.com/woocommerce/woocommerce/pull/37915)
|
||||
* Dev - Update stable tag to 7.6.1 [[#38006]](https://github.com/woocommerce/woocommerce/pull/38006)
|
||||
* Dev - Update tasklist documentation/example [[#38245]](https://github.com/woocommerce/woocommerce/pull/38245)
|
||||
* Dev - Update the E2E test timeout to 90 sec, and update the E2E README. [[#38288]](https://github.com/woocommerce/woocommerce/pull/38288)
|
||||
* Dev - Update the WSL setup instructions in the readme. [[#37819]](https://github.com/woocommerce/woocommerce/pull/37819)
|
||||
* Dev - Use locator.fill to fill variation values in the form instead of page.fill [[#37854]](https://github.com/woocommerce/woocommerce/pull/37854)
|
||||
* Dev - Variations - Remove separator between buttons and empty state screen [[#38123]](https://github.com/woocommerce/woocommerce/pull/38123)
|
||||
* Dev - Variations - Rename Generate variations button after variations are created. [[#38084]](https://github.com/woocommerce/woocommerce/pull/38084)
|
||||
* Tweak - Add a 24px spacing to store management body [[#38088]](https://github.com/woocommerce/woocommerce/pull/38088)
|
||||
* Tweak - Add context to translatable strings for credit card labels. [[#36364]](https://github.com/woocommerce/woocommerce/pull/36364)
|
||||
* Tweak - Add product type options tracking to product publish and update events. [[#38017]](https://github.com/woocommerce/woocommerce/pull/38017)
|
||||
* Tweak - Correct spelling errors [[#37887]](https://github.com/woocommerce/woocommerce/pull/37887)
|
||||
* Tweak - Fix spelling errors in Remote Inbox Notifications Transformers documentation. [[#38387]](https://github.com/woocommerce/woocommerce/pull/38387)
|
||||
* Tweak - Fix styling of product data field descriptions, including checkboxes and radio buttons. [[#38066]](https://github.com/woocommerce/woocommerce/pull/38066)
|
||||
* Tweak - Fix typo in a function comment. [[#37829]](https://github.com/woocommerce/woocommerce/pull/37829)
|
||||
* Tweak - Improve spacing of product gallery thumbs when using the Twenty Twenty-Two theme. [[#35491]](https://github.com/woocommerce/woocommerce/pull/35491)
|
||||
* Tweak - Makes more information available to handlers for the `checkout_place_order` (and related) events. [[#38147]](https://github.com/woocommerce/woocommerce/pull/38147)
|
||||
* Tweak - Update plugin listing description [[#38074]](https://github.com/woocommerce/woocommerce/pull/38074)
|
||||
* Tweak - Update usage of AdvancedFilter to use createInterpolateElement formats. [[#37967]](https://github.com/woocommerce/woocommerce/pull/37967)
|
||||
* Performance - Compute if any order is pending, when deciding to process next migration batch [[#38165]](https://github.com/woocommerce/woocommerce/pull/38165)
|
||||
* Performance - Removed global enqueue of wc-cart-fragments. Moved to the cart widget (its main consumer). [[#35530]](https://github.com/woocommerce/woocommerce/pull/35530)
|
||||
* Enhancement - Add default styles for product meta in the TT3 order details table [[#38172]](https://github.com/woocommerce/woocommerce/pull/38172)
|
||||
* Enhancement - Added a button to download SSR to a file. [[#38110]](https://github.com/woocommerce/woocommerce/pull/38110)
|
||||
* Enhancement - Added missing button element classes in account orders and downloads pages [[#37933]](https://github.com/woocommerce/woocommerce/pull/37933)
|
||||
* Enhancement - Add order note to display held stock inventory to provide more visibility to merchants. [[#37833]](https://github.com/woocommerce/woocommerce/pull/37833)
|
||||
* Enhancement - Change from using a figure to using a div around the single product image to improve accessibility [[#37853]](https://github.com/woocommerce/woocommerce/pull/37853)
|
||||
* Enhancement - Fix comment list styling in TT2 [[#37894]](https://github.com/woocommerce/woocommerce/pull/37894)
|
||||
* Enhancement - Fixed the attributes table styling in TT3 tabs content area [[#37895]](https://github.com/woocommerce/woocommerce/pull/37895)
|
||||
* Enhancement - Order is search with the phone number and linked with the customer/user account. [[#37844]](https://github.com/woocommerce/woocommerce/pull/37844)
|
||||
* Enhancement - Print blocks-based CSS classes only when a FSE theme is used [[#37631]](https://github.com/woocommerce/woocommerce/pull/37631)
|
||||
* Enhancement - Rename tracks event product_attributes_add to product_attributes_save on the product page and update attributes [[#38278]](https://github.com/woocommerce/woocommerce/pull/38278)
|
||||
* Enhancement - When deleting an administrator user, any existing webhook(s) owned to the user being deleted are re-assigned to the nominated user if the "Attribute all content to" option is chosen, or re-assigned to user id zero. This helps avoid `woocommerce_rest_cannot_view` webhook payload errors. [[#37814]](https://github.com/woocommerce/woocommerce/pull/37814)
|
||||
|
||||
= 7.7.2 2023-06-01 =
|
||||
|
||||
**WooCommerce**
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
Significance: minor
|
||||
Type: add
|
||||
|
||||
Add callback for the media uploader component when gallery is opened
|
|
@ -34,6 +34,7 @@ type MediaUploaderProps = {
|
|||
message: string;
|
||||
file: File;
|
||||
} ) => void;
|
||||
onMediaGalleryOpen?: () => void;
|
||||
onUpload?: ( files: MediaItem[] ) => void;
|
||||
onFileUploadChange?: ( files: MediaItem[] ) => void;
|
||||
uploadMedia?: ( options: UploadMediaOptions ) => Promise< void >;
|
||||
|
@ -49,6 +50,7 @@ export const MediaUploader = ( {
|
|||
multipleSelect = false,
|
||||
onError = () => null,
|
||||
onFileUploadChange = () => null,
|
||||
onMediaGalleryOpen = () => null,
|
||||
onUpload = () => null,
|
||||
onSelect = () => null,
|
||||
uploadMedia = wpUploadMedia,
|
||||
|
@ -96,7 +98,13 @@ export const MediaUploader = ( {
|
|||
allowedTypes={ allowedMediaTypes }
|
||||
multiple={ multipleSelect }
|
||||
render={ ( { open } ) => (
|
||||
<Button variant="secondary" onClick={ open }>
|
||||
<Button
|
||||
variant="secondary"
|
||||
onClick={ () => {
|
||||
onMediaGalleryOpen();
|
||||
open();
|
||||
} }
|
||||
>
|
||||
{ buttonText }
|
||||
</Button>
|
||||
) }
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
Significance: minor
|
||||
Type: add
|
||||
|
||||
Add missing track events to product editing experience
|
|
@ -5,6 +5,7 @@ import { __ } from '@wordpress/i18n';
|
|||
import { createElement, useState } from '@wordpress/element';
|
||||
import { parse, serialize } from '@wordpress/blocks';
|
||||
import { Button } from '@wordpress/components';
|
||||
import { recordEvent } from '@woocommerce/tracks';
|
||||
import { useBlockProps } from '@wordpress/block-editor';
|
||||
import { useEntityProp } from '@wordpress/core-data';
|
||||
|
||||
|
@ -31,7 +32,10 @@ export function Edit() {
|
|||
<div { ...blockProps }>
|
||||
<Button
|
||||
variant="secondary"
|
||||
onClick={ () => setIsModalOpen( true ) }
|
||||
onClick={ () => {
|
||||
setIsModalOpen( true );
|
||||
recordEvent( 'product_add_description_click' );
|
||||
} }
|
||||
>
|
||||
{ description.length
|
||||
? __( 'Edit description', 'woocommerce' )
|
||||
|
|
|
@ -87,6 +87,9 @@ export function Edit() {
|
|||
multipleSelect={ true }
|
||||
onError={ () => null }
|
||||
onFileUploadChange={ onFileUpload }
|
||||
onMediaGalleryOpen={ () => {
|
||||
recordEvent( 'product_images_media_gallery_open' );
|
||||
} }
|
||||
onSelect={ ( files ) => {
|
||||
const newImages = files.filter(
|
||||
( img: Image ) =>
|
||||
|
|
|
@ -16,6 +16,7 @@ import {
|
|||
Link,
|
||||
} from '@woocommerce/components';
|
||||
import { getAdminLink } from '@woocommerce/settings';
|
||||
import { recordEvent } from '@woocommerce/tracks';
|
||||
|
||||
/**
|
||||
* Internal dependencies
|
||||
|
@ -182,7 +183,10 @@ export const AttributeControl: React.FC< AttributeControlProps > = ( {
|
|||
<Button
|
||||
variant="secondary"
|
||||
className="woocommerce-add-attribute-list-item__add-button"
|
||||
onClick={ openNewModal }
|
||||
onClick={ () => {
|
||||
openNewModal();
|
||||
recordEvent( 'product_add_attributes_click' );
|
||||
} }
|
||||
>
|
||||
{ uiStrings.newAttributeListItemLabel }
|
||||
</Button>
|
||||
|
|
|
@ -23,6 +23,7 @@ import {
|
|||
* Internal dependencies
|
||||
*/
|
||||
import { EnhancedProductAttribute } from '../../hooks/use-product-attributes';
|
||||
import { TRACKS_SOURCE } from '../../constants';
|
||||
|
||||
type NarrowedQueryAttribute = Pick< QueryProductAttribute, 'id' | 'name' >;
|
||||
|
||||
|
@ -112,7 +113,7 @@ export const AttributeInputField: React.FC< AttributeInputFieldProps > = ( {
|
|||
onSelect={ ( attribute ) => {
|
||||
if ( isNewAttributeListItem( attribute ) ) {
|
||||
recordEvent( 'product_attribute_add_custom_attribute', {
|
||||
new_product_page: true,
|
||||
source: TRACKS_SOURCE,
|
||||
} );
|
||||
}
|
||||
onChange(
|
||||
|
|
|
@ -19,6 +19,11 @@ import {
|
|||
QueryProductAttribute,
|
||||
} from '@woocommerce/data';
|
||||
|
||||
/**
|
||||
* Internal dependencies
|
||||
*/
|
||||
import { TRACKS_SOURCE } from '../../constants';
|
||||
|
||||
type CreateAttributeTermModalProps = {
|
||||
initialAttributeTermName: string;
|
||||
attributeId: number;
|
||||
|
@ -41,7 +46,7 @@ export const CreateAttributeTermModal: React.FC<
|
|||
|
||||
const onAdd = async ( attribute: Partial< ProductAttributeTerm > ) => {
|
||||
recordEvent( 'product_attribute_term_add', {
|
||||
new_product_page: true,
|
||||
source: TRACKS_SOURCE,
|
||||
} );
|
||||
setIsCreating( true );
|
||||
try {
|
||||
|
@ -51,14 +56,14 @@ export const CreateAttributeTermModal: React.FC<
|
|||
attribute_id: attributeId,
|
||||
} );
|
||||
recordEvent( 'product_attribute_term_add_success', {
|
||||
new_product_page: true,
|
||||
source: TRACKS_SOURCE,
|
||||
} );
|
||||
invalidateResolutionForStoreSelector( 'getProductAttributes' );
|
||||
setIsCreating( false );
|
||||
onCreated( newAttribute );
|
||||
} catch ( e ) {
|
||||
recordEvent( 'product_attribute_term_add_failed', {
|
||||
new_product_page: true,
|
||||
source: TRACKS_SOURCE,
|
||||
} );
|
||||
createNotice(
|
||||
'error',
|
||||
|
|
|
@ -28,6 +28,7 @@ import {
|
|||
mapFromCategoriesToTreeItems,
|
||||
mapFromCategoryToTreeItem,
|
||||
} from './category-field';
|
||||
import { TRACKS_SOURCE } from '../../constants';
|
||||
|
||||
type CreateCategoryModalProps = {
|
||||
initialCategoryName?: string;
|
||||
|
@ -61,7 +62,7 @@ export const CreateCategoryModal: React.FC< CreateCategoryModalProps > = ( {
|
|||
|
||||
const onSave = async () => {
|
||||
recordEvent( 'product_category_add', {
|
||||
new_product_page: true,
|
||||
source: TRACKS_SOURCE,
|
||||
} );
|
||||
setIsCreating( true );
|
||||
try {
|
||||
|
|
|
@ -13,6 +13,11 @@ import { cleanForSlug } from '@wordpress/url';
|
|||
import { Product } from '@woocommerce/data';
|
||||
import { recordEvent } from '@woocommerce/tracks';
|
||||
|
||||
/**
|
||||
* Internal dependencies
|
||||
*/
|
||||
import { TRACKS_SOURCE } from '../../constants';
|
||||
|
||||
type EditProductLinkModalProps = {
|
||||
product: Product;
|
||||
permalinkPrefix: string;
|
||||
|
@ -40,7 +45,7 @@ export const EditProductLinkModal: React.FC< EditProductLinkModalProps > = ( {
|
|||
|
||||
const onSave = async () => {
|
||||
recordEvent( 'product_update_slug', {
|
||||
new_product_page: true,
|
||||
source: TRACKS_SOURCE,
|
||||
product_id: product.id,
|
||||
product_type: product.type,
|
||||
} );
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
* External dependencies
|
||||
*/
|
||||
import { createElement, Fragment } from '@wordpress/element';
|
||||
import { recordEvent } from '@woocommerce/tracks';
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore No types for this exist yet.
|
||||
// eslint-disable-next-line @woocommerce/dependency-group
|
||||
import { MoreMenuDropdown } from '@wordpress/interface';
|
||||
//import { displayShortcut } from '@wordpress/keycodes';
|
||||
|
||||
/**
|
||||
* Internal dependencies
|
||||
|
@ -17,6 +17,9 @@ export const MoreMenu = () => {
|
|||
return (
|
||||
<>
|
||||
<MoreMenuDropdown
|
||||
toggleProps={ {
|
||||
onClick: () => recordEvent( 'product_dropdown_click' ),
|
||||
} }
|
||||
popoverProps={ {
|
||||
className: 'woocommerce-product-header__more-menu',
|
||||
} }
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
/**
|
||||
* External dependencies
|
||||
*/
|
||||
import { Product } from '@woocommerce/data';
|
||||
import { getNewPath, navigateTo } from '@woocommerce/navigation';
|
||||
import { Button } from '@wordpress/components';
|
||||
import { useDispatch } from '@wordpress/data';
|
||||
import { createElement } from '@wordpress/element';
|
||||
import { getNewPath, navigateTo } from '@woocommerce/navigation';
|
||||
import { Product } from '@woocommerce/data';
|
||||
import { recordEvent } from '@woocommerce/tracks';
|
||||
import { useDispatch } from '@wordpress/data';
|
||||
|
||||
/**
|
||||
* Internal dependencies
|
||||
|
@ -13,6 +14,7 @@ import { createElement } from '@wordpress/element';
|
|||
import { getProductErrorMessage } from '../../../utils/get-product-error-message';
|
||||
import { usePreview } from '../hooks/use-preview';
|
||||
import { PreviewButtonProps } from './types';
|
||||
import { TRACKS_SOURCE } from '../../../constants';
|
||||
|
||||
export function PreviewButton( {
|
||||
productStatus,
|
||||
|
@ -23,6 +25,9 @@ export function PreviewButton( {
|
|||
const previewButtonProps = usePreview( {
|
||||
productStatus,
|
||||
...props,
|
||||
onClick() {
|
||||
recordEvent( 'product_preview_changes', { source: TRACKS_SOURCE } );
|
||||
},
|
||||
onSaveSuccess( savedProduct: Product ) {
|
||||
if ( productStatus === 'auto-draft' ) {
|
||||
const url = getNewPath( {}, `/product/${ savedProduct.id }` );
|
||||
|
|
|
@ -31,10 +31,12 @@ export function PublishButton( {
|
|||
productStatus,
|
||||
...props,
|
||||
onPublishSuccess( savedProduct: Product ) {
|
||||
recordProductEvent( 'product_update', savedProduct );
|
||||
|
||||
const isPublished = productStatus === 'publish';
|
||||
|
||||
if ( isPublished ) {
|
||||
recordProductEvent( 'product_update', savedProduct );
|
||||
}
|
||||
|
||||
const noticeContent = isPublished
|
||||
? __( 'Product updated.', 'woocommerce' )
|
||||
: __( 'Product added.', 'woocommerce' );
|
||||
|
|
|
@ -4,6 +4,10 @@
|
|||
import { createElement, useEffect, useState } from '@wordpress/element';
|
||||
import { ReactElement } from 'react';
|
||||
import { NavigableMenu, Slot } from '@wordpress/components';
|
||||
import { Product } from '@woocommerce/data';
|
||||
import { recordEvent } from '@woocommerce/tracks';
|
||||
import { useSelect } from '@wordpress/data';
|
||||
import { useEntityProp } from '@wordpress/core-data';
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore No types for this exist yet.
|
||||
// eslint-disable-next-line @woocommerce/dependency-group
|
||||
|
@ -12,6 +16,7 @@ import { navigateTo, getNewPath, getQuery } from '@woocommerce/navigation';
|
|||
/**
|
||||
* Internal dependencies
|
||||
*/
|
||||
import { getTabTracksData } from './utils/get-tab-tracks-data';
|
||||
import { sortFillsByOrder } from '../../utils';
|
||||
import { TABS_SLOT_NAME } from './constants';
|
||||
|
||||
|
@ -26,6 +31,18 @@ export type TabsFillProps = {
|
|||
export function Tabs( { onChange = () => {} }: TabsProps ) {
|
||||
const [ selected, setSelected ] = useState< string | null >( null );
|
||||
const query = getQuery() as Record< string, string >;
|
||||
const [ productId ] = useEntityProp< number >(
|
||||
'postType',
|
||||
'product',
|
||||
'id'
|
||||
);
|
||||
const product: Product = useSelect( ( select ) =>
|
||||
select( 'core' ).getEditedEntityRecord(
|
||||
'postType',
|
||||
'product',
|
||||
productId
|
||||
)
|
||||
);
|
||||
|
||||
useEffect( () => {
|
||||
onChange( selected );
|
||||
|
@ -69,10 +86,15 @@ export function Tabs( { onChange = () => {} }: TabsProps ) {
|
|||
<Slot
|
||||
fillProps={
|
||||
{
|
||||
onClick: ( tabId ) =>
|
||||
onClick: ( tabId ) => {
|
||||
navigateTo( {
|
||||
url: getNewPath( { tab: tabId } ),
|
||||
} ),
|
||||
} );
|
||||
recordEvent(
|
||||
'product_tab_click',
|
||||
getTabTracksData( tabId, product )
|
||||
);
|
||||
},
|
||||
} as TabsFillProps
|
||||
}
|
||||
name={ TABS_SLOT_NAME }
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
/**
|
||||
* External dependencies
|
||||
*/
|
||||
import { Product } from '@woocommerce/data';
|
||||
|
||||
/**
|
||||
* Internal dependencies
|
||||
*/
|
||||
import { TRACKS_SOURCE } from '../../../constants';
|
||||
|
||||
/**
|
||||
* Get the data for a tab click.
|
||||
*
|
||||
* @param {string} tabId Clicked tab.
|
||||
* @param {Product} product Current product.
|
||||
* @return {Object} The data for the event.
|
||||
*/
|
||||
export function getTabTracksData( tabId: string, product: Product ) {
|
||||
const data = {
|
||||
product_tab: tabId,
|
||||
product_type: product.type,
|
||||
source: TRACKS_SOURCE,
|
||||
};
|
||||
|
||||
if ( tabId === 'inventory' ) {
|
||||
return {
|
||||
...data,
|
||||
is_store_stock_management_enabled: product.manage_stock,
|
||||
};
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
|
@ -50,3 +50,5 @@ export const VARIANT_SHIPPING_SECTION_DIMENSIONS_ID = `variant/${ SHIPPING_SECTI
|
|||
export const PRODUCT_DETAILS_SLUG = 'product-details';
|
||||
|
||||
export const PRODUCT_SCHEDULED_SALE_SLUG = 'product-scheduled-sale';
|
||||
|
||||
export const TRACKS_SOURCE = 'product-block-editor-v1';
|
||||
|
|
|
@ -25,6 +25,7 @@ import { AUTO_DRAFT_NAME, getDerivedProductType } from '../index';
|
|||
import {
|
||||
NUMBERS_AND_DECIMAL_SEPARATOR,
|
||||
ONLY_ONE_DECIMAL_SEPARATOR,
|
||||
TRACKS_SOURCE,
|
||||
} from '../constants';
|
||||
import { ProductVariationsOrder } from './use-variations-order';
|
||||
|
||||
|
@ -44,7 +45,7 @@ function getNoticePreviewActions( status: ProductStatus, permalink: string ) {
|
|||
label: __( 'View in store', 'woocommerce' ),
|
||||
onClick: () => {
|
||||
recordEvent( 'product_preview_changes', {
|
||||
new_product_page: true,
|
||||
source: TRACKS_SOURCE,
|
||||
} );
|
||||
window.open( permalink, '_blank' );
|
||||
},
|
||||
|
|
|
@ -3,6 +3,7 @@ export {
|
|||
DETAILS_SECTION_ID,
|
||||
NEW_PRODUCT_MANAGEMENT_ENABLED_OPTION_NAME,
|
||||
TAB_GENERAL_ID,
|
||||
TRACKS_SOURCE,
|
||||
} from './constants';
|
||||
|
||||
/**
|
||||
|
|
|
@ -5,14 +5,62 @@ import { Product } from '@woocommerce/data';
|
|||
import { recordEvent } from '@woocommerce/tracks';
|
||||
|
||||
export function recordProductEvent( eventName: string, product: Product ) {
|
||||
const { downloadable, id, manage_stock, type, virtual } = product;
|
||||
const {
|
||||
attributes,
|
||||
categories,
|
||||
cross_sell_ids,
|
||||
description,
|
||||
dimensions,
|
||||
downloadable,
|
||||
id,
|
||||
images,
|
||||
manage_stock,
|
||||
menu_order,
|
||||
purchase_note,
|
||||
reviews_allowed,
|
||||
sale_price,
|
||||
short_description,
|
||||
tags,
|
||||
type,
|
||||
upsell_ids,
|
||||
virtual,
|
||||
weight,
|
||||
} = product;
|
||||
|
||||
const product_type_options = {
|
||||
virtual,
|
||||
downloadable,
|
||||
} as { [ key: string ]: boolean };
|
||||
|
||||
recordEvent( eventName, {
|
||||
new_product_page: true,
|
||||
attributes: attributes.length ? 'yes' : 'no',
|
||||
categories: categories.length ? 'yes' : 'no',
|
||||
cross_sells: cross_sell_ids.length ? 'yes' : 'no',
|
||||
description: description.length ? 'yes' : 'no',
|
||||
dimensions:
|
||||
dimensions.length.length ||
|
||||
dimensions.width.length ||
|
||||
dimensions.height.length
|
||||
? 'yes'
|
||||
: 'no',
|
||||
enable_reviews: reviews_allowed ? 'yes' : 'no',
|
||||
is_downloadable: downloadable ? 'yes' : 'no',
|
||||
is_virtual: virtual ? 'yes' : 'no',
|
||||
manage_stock: manage_stock ? 'yes' : 'no',
|
||||
menu_order: menu_order ? 'yes' : 'no',
|
||||
product_id: id,
|
||||
product_gallery: images.length > 1 ? 'yes' : 'no',
|
||||
product_image: images.length ? 'yes' : 'no',
|
||||
product_type: type,
|
||||
is_downloadable: downloadable,
|
||||
is_virtual: virtual,
|
||||
manage_stock,
|
||||
product_type_options: Object.keys( product_type_options )
|
||||
.filter( ( key ) => product_type_options[ key ] )
|
||||
.join( ',' ),
|
||||
purchase_note: purchase_note.length ? 'yes' : 'no',
|
||||
sale_price: sale_price.length ? 'yes' : 'no',
|
||||
short_description: short_description.length ? 'yes' : 'no',
|
||||
source: 'product-blocks-editor-v1',
|
||||
tags: tags.length ? 'yes' : 'no',
|
||||
upsells: upsell_ids.length ? 'yes' : 'no',
|
||||
weight: weight.length ? 'yes' : 'no',
|
||||
} );
|
||||
}
|
||||
|
|
|
@ -38,16 +38,16 @@ function getHomeItems() {
|
|||
},
|
||||
{
|
||||
title: __( 'Inbox', 'woocommerce' ),
|
||||
link: 'https://woocommerce.com/document/home-screen/?utm_medium=product#section-2',
|
||||
},
|
||||
{
|
||||
title: __( 'Stats Overview', 'woocommerce' ),
|
||||
link: 'https://woocommerce.com/document/home-screen/?utm_medium=product#section-4',
|
||||
},
|
||||
{
|
||||
title: __( 'Store Management', 'woocommerce' ),
|
||||
title: __( 'Stats Overview', 'woocommerce' ),
|
||||
link: 'https://woocommerce.com/document/home-screen/?utm_medium=product#section-5',
|
||||
},
|
||||
{
|
||||
title: __( 'Store Management', 'woocommerce' ),
|
||||
link: 'https://woocommerce.com/document/home-screen/?utm_medium=product#section-10',
|
||||
},
|
||||
{
|
||||
title: __( 'Store Setup Checklist', 'woocommerce' ),
|
||||
link: 'https://woocommerce.com/document/woocommerce-setup-wizard?utm_medium=product#store-setup-checklist',
|
||||
|
|
|
@ -106,6 +106,12 @@
|
|||
top: -1px;
|
||||
width: 22px;
|
||||
}
|
||||
|
||||
@include breakpoint( '<782px' ) {
|
||||
svg {
|
||||
width: 18px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -68,6 +68,15 @@ export const MultipleSelector = ( {
|
|||
inputValue: state.inputValue,
|
||||
highlightedIndex: state.highlightedIndex,
|
||||
};
|
||||
case selectControlStateChangeTypes.InputBlur:
|
||||
if ( state.isOpen && actionAndChanges.selectItem ) {
|
||||
// Prevent the menu from closing when clicking on a selected item.
|
||||
return {
|
||||
...changes,
|
||||
isOpen: true,
|
||||
};
|
||||
}
|
||||
return changes;
|
||||
default:
|
||||
return changes;
|
||||
}
|
||||
|
|
|
@ -20,7 +20,6 @@ import {
|
|||
updateQueryString,
|
||||
getQuery,
|
||||
getNewPath,
|
||||
navigateTo,
|
||||
} from '@woocommerce/navigation';
|
||||
import {
|
||||
ExtensionList,
|
||||
|
@ -332,9 +331,7 @@ const handleGeolocation = assign( {
|
|||
} );
|
||||
|
||||
const redirectToWooHome = () => {
|
||||
navigateTo( {
|
||||
url: getNewPath( {}, '/', {} ),
|
||||
} );
|
||||
window.location.href = getNewPath( {}, '/', {} );
|
||||
};
|
||||
|
||||
const redirectToJetpackAuthPage = (
|
||||
|
|
|
@ -598,3 +598,12 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-height: 667px) {
|
||||
.woocommerce-profiler-user-profile__content {
|
||||
.woocommerce-profiler-button-container {
|
||||
position: inherit;
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -158,7 +158,7 @@ describe( 'Campaigns component', () => {
|
|||
expect( screen.getByText( 'Campaign 6' ) ).toBeInTheDocument();
|
||||
} );
|
||||
|
||||
it( 'renders a "Create new campaign" button in the card header, and upon clicking, displays the "Create a new campaign" modal', async () => {
|
||||
it( 'does not render a "Create new campaign" button in the card header when there are no campaign types', async () => {
|
||||
( useCampaigns as jest.Mock ).mockReturnValue( {
|
||||
loading: false,
|
||||
error: undefined,
|
||||
|
@ -169,6 +169,43 @@ describe( 'Campaigns component', () => {
|
|||
} );
|
||||
( useCampaignTypes as jest.Mock ).mockReturnValue( {
|
||||
loading: false,
|
||||
data: [],
|
||||
} );
|
||||
|
||||
render( <Campaigns /> );
|
||||
|
||||
expect(
|
||||
screen.queryByRole( 'button', { name: 'Create new campaign' } )
|
||||
).not.toBeInTheDocument();
|
||||
} );
|
||||
|
||||
it( 'renders a "Create new campaign" button in the card header when there are campaign types, and upon clicking, displays the "Create a new campaign" modal', async () => {
|
||||
( useCampaigns as jest.Mock ).mockReturnValue( {
|
||||
loading: false,
|
||||
error: undefined,
|
||||
data: [ createTestCampaign( '1' ) ],
|
||||
meta: {
|
||||
total: 1,
|
||||
},
|
||||
} );
|
||||
( useCampaignTypes as jest.Mock ).mockReturnValue( {
|
||||
loading: false,
|
||||
data: [
|
||||
{
|
||||
id: 'google-ads',
|
||||
name: 'Google Ads',
|
||||
description:
|
||||
'Boost your product listings with a campaign that is automatically optimized to meet your goals.',
|
||||
channel: {
|
||||
slug: 'google-listings-and-ads',
|
||||
name: 'Google Listings & Ads',
|
||||
},
|
||||
create_url:
|
||||
'https://wc1.test/wp-admin/admin.php?page=wc-admin&path=/google/dashboard&subpath=/campaigns/create',
|
||||
icon_url:
|
||||
'https://woocommerce.com/wp-content/uploads/2021/06/woo-GoogleListingsAds-jworee.png',
|
||||
},
|
||||
],
|
||||
} );
|
||||
|
||||
render( <Campaigns /> );
|
||||
|
|
|
@ -28,7 +28,7 @@ import {
|
|||
CardHeaderTitle,
|
||||
CreateNewCampaignModal,
|
||||
} from '~/marketing/components';
|
||||
import { useCampaigns } from '~/marketing/hooks';
|
||||
import { useCampaignTypes, useCampaigns } from '~/marketing/hooks';
|
||||
import './Campaigns.scss';
|
||||
|
||||
const tableCaption = __( 'Campaigns', 'woocommerce' );
|
||||
|
@ -59,6 +59,7 @@ export const Campaigns = () => {
|
|||
const [ page, setPage ] = useState( 1 );
|
||||
const [ isModalOpen, setModalOpen ] = useState( false );
|
||||
const { loading, data, meta } = useCampaigns( page, perPage );
|
||||
const { data: dataCampaignTypes } = useCampaignTypes();
|
||||
const total = meta?.total;
|
||||
|
||||
const getContent = () => {
|
||||
|
@ -158,6 +159,7 @@ export const Campaigns = () => {
|
|||
);
|
||||
};
|
||||
|
||||
const showCreateCampaignButton = !! dataCampaignTypes?.length;
|
||||
const showFooter = !! ( total && total > perPage );
|
||||
|
||||
return (
|
||||
|
@ -166,12 +168,14 @@ export const Campaigns = () => {
|
|||
<CardHeaderTitle>
|
||||
{ __( 'Campaigns', 'woocommerce' ) }
|
||||
</CardHeaderTitle>
|
||||
<Button
|
||||
variant="secondary"
|
||||
onClick={ () => setModalOpen( true ) }
|
||||
>
|
||||
{ __( 'Create new campaign', 'woocommerce' ) }
|
||||
</Button>
|
||||
{ showCreateCampaignButton && (
|
||||
<Button
|
||||
variant="secondary"
|
||||
onClick={ () => setModalOpen( true ) }
|
||||
>
|
||||
{ __( 'Create new campaign', 'woocommerce' ) }
|
||||
</Button>
|
||||
) }
|
||||
{ isModalOpen && (
|
||||
<CreateNewCampaignModal
|
||||
onRequestClose={ () => setModalOpen( false ) }
|
||||
|
|
|
@ -13,6 +13,7 @@ import { CreateNewCampaignModal } from '~/marketing/components';
|
|||
import {
|
||||
useRegisteredChannels,
|
||||
useRecommendedChannels,
|
||||
useCampaignTypes,
|
||||
} from '~/marketing/hooks';
|
||||
import './IntroductionBanner.scss';
|
||||
import wooIconUrl from './woo.svg';
|
||||
|
@ -30,8 +31,11 @@ export const IntroductionBanner = ( {
|
|||
const [ isModalOpen, setModalOpen ] = useState( false );
|
||||
const { data: dataRegistered } = useRegisteredChannels();
|
||||
const { data: dataRecommended } = useRecommendedChannels();
|
||||
const { data: dataCampaignTypes } = useCampaignTypes();
|
||||
|
||||
const showCreateCampaignButton = !! dataRegistered?.length;
|
||||
const showButtons = !! (
|
||||
dataRegistered?.length && dataCampaignTypes?.length
|
||||
);
|
||||
|
||||
/**
|
||||
* Boolean to display the "Add channels" button in the introduction banner.
|
||||
|
@ -102,21 +106,19 @@ export const IntroductionBanner = ( {
|
|||
</Flex>
|
||||
</FlexItem>
|
||||
</Flex>
|
||||
{ ( showCreateCampaignButton || showAddChannelsButton ) && (
|
||||
{ showButtons && (
|
||||
<Flex
|
||||
className="woocommerce-marketing-introduction-banner-buttons"
|
||||
justify="flex-start"
|
||||
>
|
||||
{ showCreateCampaignButton && (
|
||||
<Button
|
||||
variant="primary"
|
||||
onClick={ () => {
|
||||
setModalOpen( true );
|
||||
} }
|
||||
>
|
||||
{ __( 'Create a campaign', 'woocommerce' ) }
|
||||
</Button>
|
||||
) }
|
||||
<Button
|
||||
variant="primary"
|
||||
onClick={ () => {
|
||||
setModalOpen( true );
|
||||
} }
|
||||
>
|
||||
{ __( 'Create a campaign', 'woocommerce' ) }
|
||||
</Button>
|
||||
{ showAddChannelsButton && (
|
||||
<Button
|
||||
variant="secondary"
|
||||
|
|
|
@ -2,6 +2,10 @@
|
|||
max-width: 680px;
|
||||
margin: 0 auto;
|
||||
|
||||
.components-card {
|
||||
margin-bottom: $gap-large;
|
||||
}
|
||||
|
||||
.components-notice.is-error {
|
||||
margin: 0 0 $gap-large 0;
|
||||
}
|
||||
|
|
|
@ -5,7 +5,6 @@ import { __ } from '@wordpress/i18n';
|
|||
import { MenuItem } from '@wordpress/components';
|
||||
import { info, Icon } from '@wordpress/icons';
|
||||
import { useState } from '@wordpress/element';
|
||||
import { recordEvent } from '@woocommerce/tracks';
|
||||
|
||||
/**
|
||||
* Internal dependencies
|
||||
|
@ -14,9 +13,11 @@ import BlockEditorGuide from '~/products/tour/block-editor/block-editor-guide';
|
|||
import { usePublishedProductsCount } from '~/products/tour/block-editor/use-published-products-count';
|
||||
|
||||
export const AboutTheEditorMenuItem = ( {
|
||||
onClose,
|
||||
onClick = () => null,
|
||||
onCloseGuide,
|
||||
}: {
|
||||
onClose: () => void;
|
||||
onClick: () => void;
|
||||
onCloseGuide: () => void;
|
||||
} ) => {
|
||||
const [ isGuideOpen, setIsGuideOpen ] = useState( false );
|
||||
const { isNewUser } = usePublishedProductsCount();
|
||||
|
@ -24,10 +25,8 @@ export const AboutTheEditorMenuItem = ( {
|
|||
<>
|
||||
<MenuItem
|
||||
onClick={ () => {
|
||||
recordEvent(
|
||||
'block_product_editor_about_the_editor_menu_item_clicked'
|
||||
);
|
||||
setIsGuideOpen( true );
|
||||
onClick();
|
||||
} }
|
||||
icon={ <Icon icon={ info } /> }
|
||||
iconPosition="right"
|
||||
|
@ -39,7 +38,7 @@ export const AboutTheEditorMenuItem = ( {
|
|||
isNewUser={ isNewUser }
|
||||
onCloseGuide={ () => {
|
||||
setIsGuideOpen( false );
|
||||
onClose();
|
||||
onCloseGuide();
|
||||
} }
|
||||
/>
|
||||
) }
|
||||
|
|
|
@ -4,13 +4,12 @@
|
|||
import { useDispatch, useSelect } from '@wordpress/data';
|
||||
import { __ } from '@wordpress/i18n';
|
||||
import { getAdminLink } from '@woocommerce/settings';
|
||||
import { OPTIONS_STORE_NAME, Product } from '@woocommerce/data';
|
||||
import { OPTIONS_STORE_NAME } from '@woocommerce/data';
|
||||
import { MenuItem } from '@wordpress/components';
|
||||
import {
|
||||
ALLOW_TRACKING_OPTION_NAME,
|
||||
STORE_KEY as CES_STORE_KEY,
|
||||
} from '@woocommerce/customer-effort-score';
|
||||
import { recordEvent } from '@woocommerce/tracks';
|
||||
|
||||
/**
|
||||
* Internal dependencies
|
||||
|
@ -18,11 +17,11 @@ import { recordEvent } from '@woocommerce/tracks';
|
|||
import { getAdminSetting } from '~/utils/admin-settings';
|
||||
|
||||
export const ClassicEditorMenuItem = ( {
|
||||
onClose,
|
||||
onClick,
|
||||
productId,
|
||||
}: {
|
||||
productId: number;
|
||||
onClose: () => void;
|
||||
onClick: () => void;
|
||||
} ) => {
|
||||
const { showProductMVPFeedbackModal } = useDispatch( CES_STORE_KEY );
|
||||
|
||||
|
@ -53,35 +52,17 @@ export const ClassicEditorMenuItem = ( {
|
|||
`post-new.php?post_type=product&product_block_editor=0&_feature_nonce=${ _feature_nonce }`
|
||||
);
|
||||
|
||||
const { type: productType, status: productStatus } = useSelect(
|
||||
( select ) => {
|
||||
const { getEntityRecord } = select( 'core' );
|
||||
return getEntityRecord(
|
||||
'postType',
|
||||
'product',
|
||||
productId
|
||||
) as Product;
|
||||
},
|
||||
[ productId ]
|
||||
);
|
||||
|
||||
if ( isLoading ) {
|
||||
return null;
|
||||
}
|
||||
|
||||
function handleMenuItemClick() {
|
||||
recordEvent( 'product_editor_options_turn_off_editor_click', {
|
||||
product_id: productId,
|
||||
product_type: productType,
|
||||
product_status: productStatus,
|
||||
} );
|
||||
|
||||
if ( allowTracking ) {
|
||||
showProductMVPFeedbackModal();
|
||||
} else {
|
||||
window.location.href = classicEditorUrl;
|
||||
}
|
||||
onClose();
|
||||
onClick();
|
||||
}
|
||||
|
||||
return (
|
||||
|
|
|
@ -23,7 +23,7 @@ import { isValidEmail } from '@woocommerce/product-editor';
|
|||
*/
|
||||
import { FeedbackIcon } from '../../images/feedback-icon';
|
||||
|
||||
export const FeedbackMenuItem = ( { onClose }: { onClose: () => void } ) => {
|
||||
export const FeedbackMenuItem = ( { onClick }: { onClick: () => void } ) => {
|
||||
const { showCesModal } = useDispatch( CES_STORE_KEY );
|
||||
const { isDescendantOf } = useLayoutContext();
|
||||
|
||||
|
@ -167,7 +167,7 @@ export const FeedbackMenuItem = ( { onClose }: { onClose: () => void } ) => {
|
|||
block_editor: isDescendantOf( 'product-block-editor' ),
|
||||
}
|
||||
);
|
||||
onClose();
|
||||
onClick();
|
||||
} }
|
||||
icon={ <FeedbackIcon /> }
|
||||
iconPosition="right"
|
||||
|
|
|
@ -5,7 +5,10 @@ import {
|
|||
__experimentalProductMVPFeedbackModalContainer as ProductMVPFeedbackModalContainer,
|
||||
__experimentalWooProductMoreMenuItem as WooProductMoreMenuItem,
|
||||
} from '@woocommerce/product-editor';
|
||||
import { Product } from '@woocommerce/data';
|
||||
import { recordEvent } from '@woocommerce/tracks';
|
||||
import { registerPlugin } from '@wordpress/plugins';
|
||||
import { useSelect } from '@wordpress/data';
|
||||
import { WooHeaderItem } from '@woocommerce/admin-layout';
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
|
@ -25,11 +28,45 @@ import {
|
|||
const MoreMenuFill = ( { onClose }: { onClose: () => void } ) => {
|
||||
const [ id ] = useEntityProp( 'postType', 'product', 'id' );
|
||||
|
||||
const { type, status } = useSelect(
|
||||
( select ) => {
|
||||
const { getEntityRecord } = select( 'core' );
|
||||
return getEntityRecord( 'postType', 'product', id ) as Product;
|
||||
},
|
||||
[ id ]
|
||||
);
|
||||
|
||||
const recordClick = ( optionName: string ) => {
|
||||
recordEvent( 'product_dropdown_option_click', {
|
||||
selected_option: optionName,
|
||||
product_type: type,
|
||||
product_status: status,
|
||||
} );
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<FeedbackMenuItem onClose={ onClose } />
|
||||
<ClassicEditorMenuItem productId={ id } onClose={ onClose } />
|
||||
<AboutTheEditorMenuItem onClose={ onClose } />
|
||||
<FeedbackMenuItem
|
||||
onClick={ () => {
|
||||
recordClick( 'feedback' );
|
||||
onClose();
|
||||
} }
|
||||
/>
|
||||
<ClassicEditorMenuItem
|
||||
productId={ id }
|
||||
onClick={ () => {
|
||||
recordClick( 'classic_editor' );
|
||||
onClose();
|
||||
} }
|
||||
/>
|
||||
<AboutTheEditorMenuItem
|
||||
onClick={ () => {
|
||||
recordClick( 'about' );
|
||||
} }
|
||||
onCloseGuide={ () => {
|
||||
onClose();
|
||||
} }
|
||||
/>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
|
|
@ -18,6 +18,7 @@ import {
|
|||
preventLeavingProductForm,
|
||||
__experimentalUseProductHelper as useProductHelper,
|
||||
__experimentalUseFeedbackBar as useFeedbackBar,
|
||||
TRACKS_SOURCE,
|
||||
} from '@woocommerce/product-editor';
|
||||
import { Product } from '@woocommerce/data';
|
||||
import { recordEvent } from '@woocommerce/tracks';
|
||||
|
@ -75,7 +76,7 @@ export const ProductFormActions: React.FC = () => {
|
|||
|
||||
const onSaveDraft = async () => {
|
||||
recordEvent( 'product_edit', {
|
||||
new_product_page: true,
|
||||
source: TRACKS_SOURCE,
|
||||
...getProductDataForTracks(),
|
||||
} );
|
||||
if ( ! values.id ) {
|
||||
|
@ -101,7 +102,7 @@ export const ProductFormActions: React.FC = () => {
|
|||
|
||||
const onPublish = async () => {
|
||||
recordEvent( 'product_update', {
|
||||
new_product_page: true,
|
||||
source: TRACKS_SOURCE,
|
||||
...getProductDataForTracks(),
|
||||
} );
|
||||
if ( ! values.id ) {
|
||||
|
@ -127,7 +128,7 @@ export const ProductFormActions: React.FC = () => {
|
|||
|
||||
const onPublishAndDuplicate = async () => {
|
||||
recordEvent( 'product_publish_and_copy', {
|
||||
new_product_page: true,
|
||||
source: TRACKS_SOURCE,
|
||||
...getProductDataForTracks(),
|
||||
} );
|
||||
if ( values.id ) {
|
||||
|
@ -140,7 +141,7 @@ export const ProductFormActions: React.FC = () => {
|
|||
|
||||
const onCopyToNewDraft = async () => {
|
||||
recordEvent( 'product_copy', {
|
||||
new_product_page: true,
|
||||
source: TRACKS_SOURCE,
|
||||
...getProductDataForTracks(),
|
||||
} );
|
||||
if ( values.id ) {
|
||||
|
@ -155,7 +156,7 @@ export const ProductFormActions: React.FC = () => {
|
|||
|
||||
const onTrash = async () => {
|
||||
recordEvent( 'product_delete', {
|
||||
new_product_page: true,
|
||||
source: TRACKS_SOURCE,
|
||||
...getProductDataForTracks(),
|
||||
} );
|
||||
if ( values.id ) {
|
||||
|
@ -205,7 +206,7 @@ export const ProductFormActions: React.FC = () => {
|
|||
<SecondaryActionsComponent
|
||||
onClick={ () =>
|
||||
recordEvent( 'product_preview_changes', {
|
||||
new_product_page: true,
|
||||
source: TRACKS_SOURCE,
|
||||
...getProductDataForTracks(),
|
||||
} )
|
||||
}
|
||||
|
|
|
@ -49,10 +49,10 @@ export const ProductMoreMenu = () => {
|
|||
>
|
||||
{ ( { onClose } ) => (
|
||||
<>
|
||||
<FeedbackMenuItem onClose={ onClose } />
|
||||
<FeedbackMenuItem onClick={ onClose } />
|
||||
<ClassicEditorMenuItem
|
||||
productId={ values.id }
|
||||
onClose={ onClose }
|
||||
onClick={ onClose }
|
||||
/>
|
||||
</>
|
||||
) }
|
||||
|
|
|
@ -6,6 +6,7 @@ import { Fragment } from '@wordpress/element';
|
|||
import { Form, FormContextType } from '@woocommerce/components';
|
||||
import { Product } from '@woocommerce/data';
|
||||
import { recordEvent } from '@woocommerce/tracks';
|
||||
import { TRACKS_SOURCE } from '@woocommerce/product-editor';
|
||||
import userEvent from '@testing-library/user-event';
|
||||
|
||||
/**
|
||||
|
@ -111,7 +112,7 @@ describe( 'ProductFormActions', () => {
|
|||
'draft'
|
||||
);
|
||||
expect( recordEvent ).toHaveBeenCalledWith( 'product_edit', {
|
||||
new_product_page: true,
|
||||
source: TRACKS_SOURCE,
|
||||
product_id: undefined,
|
||||
product_type: undefined,
|
||||
is_downloadable: undefined,
|
||||
|
@ -133,7 +134,7 @@ describe( 'ProductFormActions', () => {
|
|||
'publish'
|
||||
);
|
||||
expect( recordEvent ).toHaveBeenCalledWith( 'product_update', {
|
||||
new_product_page: true,
|
||||
source: TRACKS_SOURCE,
|
||||
product_id: undefined,
|
||||
product_type: undefined,
|
||||
is_downloadable: undefined,
|
||||
|
@ -222,7 +223,7 @@ describe( 'ProductFormActions', () => {
|
|||
'draft'
|
||||
);
|
||||
expect( recordEvent ).toHaveBeenCalledWith( 'product_edit', {
|
||||
new_product_page: true,
|
||||
source: TRACKS_SOURCE,
|
||||
product_id: 5,
|
||||
product_type: 'simple',
|
||||
is_downloadable: false,
|
||||
|
@ -252,7 +253,7 @@ describe( 'ProductFormActions', () => {
|
|||
);
|
||||
publishButton?.click();
|
||||
expect( recordEvent ).toHaveBeenCalledWith( 'product_update', {
|
||||
new_product_page: true,
|
||||
source: TRACKS_SOURCE,
|
||||
product_id: 5,
|
||||
product_type: 'simple',
|
||||
is_downloadable: false,
|
||||
|
@ -330,7 +331,7 @@ describe( 'ProductFormActions', () => {
|
|||
expect( recordEvent ).toHaveBeenCalledWith(
|
||||
'product_preview_changes',
|
||||
{
|
||||
new_product_page: true,
|
||||
source: TRACKS_SOURCE,
|
||||
product_id: 5,
|
||||
product_type: 'simple',
|
||||
is_downloadable: false,
|
||||
|
@ -364,7 +365,7 @@ describe( 'ProductFormActions', () => {
|
|||
).toEqual( false );
|
||||
moveToTrashButton?.click();
|
||||
expect( recordEvent ).toHaveBeenCalledWith( 'product_delete', {
|
||||
new_product_page: true,
|
||||
source: TRACKS_SOURCE,
|
||||
product_id: 5,
|
||||
product_type: 'simple',
|
||||
is_downloadable: false,
|
||||
|
@ -399,7 +400,7 @@ describe( 'ProductFormActions', () => {
|
|||
expect( recordEvent ).toHaveBeenCalledWith(
|
||||
'product_publish_and_copy',
|
||||
{
|
||||
new_product_page: true,
|
||||
source: TRACKS_SOURCE,
|
||||
product_id: 5,
|
||||
product_type: 'simple',
|
||||
is_downloadable: false,
|
||||
|
@ -438,7 +439,7 @@ describe( 'ProductFormActions', () => {
|
|||
const copyToANewDraftButton = queryByText( 'Copy to a new draft' );
|
||||
copyToANewDraftButton?.click();
|
||||
expect( recordEvent ).toHaveBeenCalledWith( 'product_copy', {
|
||||
new_product_page: true,
|
||||
source: TRACKS_SOURCE,
|
||||
product_id: 5,
|
||||
product_type: 'simple',
|
||||
is_downloadable: false,
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
Significance: patch
|
||||
Type: fix
|
||||
|
||||
check for WC_ADMIN_APP constant before using it
|
|
@ -78,6 +78,9 @@ add_action( 'plugins_loaded', '_wc_beta_tester_bootstrap' );
|
|||
* Register the JS.
|
||||
*/
|
||||
function add_extension_register_script() {
|
||||
if ( ! defined( 'WC_ADMIN_APP' ) ) {
|
||||
return;
|
||||
}
|
||||
$script_path = '/build/index.js';
|
||||
$script_asset_path = dirname( __FILE__ ) . '/build/index.asset.php';
|
||||
$script_asset = file_exists( $script_asset_path )
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
".",
|
||||
"https://downloads.wordpress.org/plugin/akismet.zip",
|
||||
"https://github.com/WP-API/Basic-Auth/archive/master.zip",
|
||||
"https://downloads.wordpress.org/plugin/wp-mail-logging.zip"
|
||||
"https://downloads.wordpress.org/plugin/wp-mail-logging.1.11.2.zip"
|
||||
],
|
||||
"themes": [
|
||||
"https://downloads.wordpress.org/theme/twentynineteen.zip"
|
||||
|
@ -35,4 +35,4 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"require-dev": {
|
||||
"woocommerce/woocommerce-sniffs": "^0.1.3",
|
||||
"sirbrillig/phpcs-changed": "^2.10.2"
|
||||
"sirbrillig/phpcs-changed": "^2.11.1"
|
||||
},
|
||||
"config": {
|
||||
"platform": {
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "29a05e32698301ded5eeb893b4c22b90",
|
||||
"content-hash": "9d6e48e1fc463e0a52cd9a1c5f815571",
|
||||
"packages": [],
|
||||
"packages-dev": [
|
||||
{
|
||||
|
@ -258,16 +258,16 @@
|
|||
},
|
||||
{
|
||||
"name": "sirbrillig/phpcs-changed",
|
||||
"version": "v2.10.2",
|
||||
"version": "v2.11.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sirbrillig/phpcs-changed.git",
|
||||
"reference": "ba0432bc86ffdc31a6946117be6c2419b7e3e16d"
|
||||
"reference": "ebff6bebc105b674f671bb79e3a50c6a24bc0bb7"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sirbrillig/phpcs-changed/zipball/ba0432bc86ffdc31a6946117be6c2419b7e3e16d",
|
||||
"reference": "ba0432bc86ffdc31a6946117be6c2419b7e3e16d",
|
||||
"url": "https://api.github.com/repos/sirbrillig/phpcs-changed/zipball/ebff6bebc105b674f671bb79e3a50c6a24bc0bb7",
|
||||
"reference": "ebff6bebc105b674f671bb79e3a50c6a24bc0bb7",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -275,10 +275,10 @@
|
|||
},
|
||||
"require-dev": {
|
||||
"dealerdirect/phpcodesniffer-composer-installer": "^0.7.1",
|
||||
"phpstan/phpstan": "1.4.10 || ^1.7",
|
||||
"phpunit/phpunit": "^6.4 || ^9.5",
|
||||
"sirbrillig/phpcs-variable-analysis": "^2.1.3",
|
||||
"squizlabs/php_codesniffer": "^3.2.1"
|
||||
"squizlabs/php_codesniffer": "^3.2.1",
|
||||
"vimeo/psalm": "^0.2 || ^0.3 || ^1.1 || ^4.24 || ^5.0@beta"
|
||||
},
|
||||
"bin": [
|
||||
"bin/phpcs-changed"
|
||||
|
@ -287,8 +287,6 @@
|
|||
"autoload": {
|
||||
"files": [
|
||||
"PhpcsChanged/Cli.php",
|
||||
"PhpcsChanged/SvnWorkflow.php",
|
||||
"PhpcsChanged/GitWorkflow.php",
|
||||
"PhpcsChanged/functions.php"
|
||||
],
|
||||
"psr-4": {
|
||||
|
@ -308,9 +306,9 @@
|
|||
"description": "Run phpcs on files, but only report warnings/errors from lines which were changed.",
|
||||
"support": {
|
||||
"issues": "https://github.com/sirbrillig/phpcs-changed/issues",
|
||||
"source": "https://github.com/sirbrillig/phpcs-changed/tree/v2.10.2"
|
||||
"source": "https://github.com/sirbrillig/phpcs-changed/tree/v2.11.1"
|
||||
},
|
||||
"time": "2023-03-25T15:10:31+00:00"
|
||||
"time": "2023-06-16T02:31:57+00:00"
|
||||
},
|
||||
{
|
||||
"name": "squizlabs/php_codesniffer",
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
Significance: patch
|
||||
Type: enhancement
|
||||
|
||||
Fixed visibility and tax values convert to lowercase as issue facing in importing.
|
|
@ -1,4 +0,0 @@
|
|||
Significance: minor
|
||||
Type: add
|
||||
|
||||
Add plugins page to the core profiler
|
|
@ -1,4 +0,0 @@
|
|||
Significance: minor
|
||||
Type: add
|
||||
|
||||
Override the interface skeleton container so it can be scrollable
|
|
@ -1,4 +0,0 @@
|
|||
Significance: patch
|
||||
Type: fix
|
||||
|
||||
Fix block grouping within a section
|
|
@ -1,4 +0,0 @@
|
|||
Significance: minor
|
||||
Type: add
|
||||
|
||||
Add support to change features through the url as query parameters
|
|
@ -1,4 +0,0 @@
|
|||
Significance: minor
|
||||
Type: add
|
||||
|
||||
Replace 'use classic editor' with 'Turn off the new product editor' in options menu#38575
|
|
@ -1,4 +0,0 @@
|
|||
Significance: minor
|
||||
Type: add
|
||||
|
||||
Implement the product blocks experiment within code for new users
|
|
@ -1,4 +0,0 @@
|
|||
Significance: minor
|
||||
Type: add
|
||||
|
||||
Product Editor Onboarding: Add About the editor... option the more menu in product block editor
|
|
@ -1,4 +0,0 @@
|
|||
Significance: minor
|
||||
Type: update
|
||||
|
||||
Always show pricing group fields, disable if not available for a product type
|
|
@ -1,4 +0,0 @@
|
|||
Significance: minor
|
||||
Type: add
|
||||
|
||||
Show spotlight for first time visitors of block product editor
|
|
@ -1,4 +0,0 @@
|
|||
Significance: minor
|
||||
Type: add
|
||||
|
||||
Added business info page to new core profiler
|
|
@ -1,4 +0,0 @@
|
|||
Significance: minor
|
||||
Type: add
|
||||
|
||||
Add an animated spinner to the Core Profiler to be displayed when assets are loading.
|
|
@ -1,4 +0,0 @@
|
|||
Significance: minor
|
||||
Type: add
|
||||
|
||||
Added ability for the core profiler state machine to navigate by using the 'step' URL query param
|
|
@ -1,4 +0,0 @@
|
|||
Significance: minor
|
||||
Type: dev
|
||||
|
||||
Add a composer script to run phpcs-changed against the current branch
|
|
@ -1,4 +0,0 @@
|
|||
Significance: patch
|
||||
Type: add
|
||||
|
||||
Provide a data-store agnostic way of untrashing orders.
|
|
@ -1,4 +0,0 @@
|
|||
Significance: patch
|
||||
Type: add
|
||||
|
||||
Add an admin notice about the upcoming PHP version requirement change for PHP 7.3 users
|
|
@ -1,4 +0,0 @@
|
|||
Significance: minor
|
||||
Type: add
|
||||
|
||||
Show feedback bar for product editor.
|
|
@ -0,0 +1,5 @@
|
|||
Significance: patch
|
||||
Type: add
|
||||
Comment: Track checkboxes and selects in Settings > Emails settings
|
||||
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
Significance: minor
|
||||
Type: add
|
||||
|
||||
Updated payment gateway suggestions for 2023 Q3
|
|
@ -1,4 +0,0 @@
|
|||
Significance: patch
|
||||
Type: dev
|
||||
|
||||
Move Reports-related code to reduce duplicates.
|
|
@ -1,4 +0,0 @@
|
|||
Significance: patch
|
||||
Type: dev
|
||||
|
||||
Lint fixes
|
|
@ -1,4 +0,0 @@
|
|||
Significance: patch
|
||||
Type: dev
|
||||
|
||||
Refactored Core Profiler's plugin installation step to use XState
|
|
@ -1,4 +0,0 @@
|
|||
Significance: patch
|
||||
Type: dev
|
||||
|
||||
Refactored core profiler state machine by modularising each page
|
|
@ -1,4 +0,0 @@
|
|||
Significance: patch
|
||||
Type: dev
|
||||
|
||||
Tidied up core profiler's tracks actions
|
|
@ -1,4 +0,0 @@
|
|||
Significance: patch
|
||||
Type: dev
|
||||
|
||||
Fix flakiness in `can set variation defaults` test.
|
|
@ -0,0 +1,4 @@
|
|||
Significance: patch
|
||||
Type: dev
|
||||
|
||||
Ensure `can discard industry changes when navigating back to "Store Details"'` can run independent from previous tests
|
|
@ -0,0 +1,4 @@
|
|||
Significance: patch
|
||||
Type: dev
|
||||
|
||||
Replace deprecated page methods.
|
|
@ -0,0 +1,5 @@
|
|||
Significance: patch
|
||||
Type: dev
|
||||
|
||||
Skip failing e2e test preventing PRs being merged. GH fails but local works
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
Significance: minor
|
||||
Type: add
|
||||
|
||||
Show create campaign button when there are campaign types in marketing page.
|
|
@ -0,0 +1,4 @@
|
|||
Significance: patch
|
||||
Type: fix
|
||||
|
||||
When dormant customer accounts are removed, their content should be preserved.
|
|
@ -1,4 +0,0 @@
|
|||
Significance: patch
|
||||
Type: tweak
|
||||
|
||||
Swap out deprecated jQuery ready handlers
|
|
@ -0,0 +1,4 @@
|
|||
Significance: minor
|
||||
Type: update
|
||||
|
||||
Analytics API: Search for customers by all of the available fields instead of having to choose one
|
|
@ -1,4 +0,0 @@
|
|||
Significance: patch
|
||||
Type: fix
|
||||
|
||||
Handle possibly empty refund value in reports (PHP 8.1+).
|
|
@ -1,4 +0,0 @@
|
|||
Significance: patch
|
||||
Type: fix
|
||||
|
||||
Update status only when it's changed.
|
|
@ -0,0 +1,4 @@
|
|||
Significance: minor
|
||||
Type: fix
|
||||
|
||||
Convert DatabaseUtil::get_index_columns() to use SHOW INDEX FROM instead of INFORMATION_SCHEMA query
|
|
@ -1,4 +0,0 @@
|
|||
Significance: minor
|
||||
Type: add
|
||||
|
||||
Add properties and methods for detecting order admin screens more easily.
|
|
@ -1,4 +0,0 @@
|
|||
Significance: patch
|
||||
Type: tweak
|
||||
|
||||
Do not show HPOS plugin incompat warning to users with insufficient access permissions.
|
|
@ -1,4 +0,0 @@
|
|||
Significance: patch
|
||||
Type: fix
|
||||
|
||||
fix Unsupported operand string * float
|
|
@ -1,4 +0,0 @@
|
|||
Significance: minor
|
||||
Type: fix
|
||||
|
||||
Fix Shipping Methods autosaving entire form.
|
|
@ -1,4 +0,0 @@
|
|||
Significance: patch
|
||||
Type: dev
|
||||
|
||||
Add HPOS compat queries for tracker.
|
|
@ -1,4 +0,0 @@
|
|||
Significance: minor
|
||||
Type: fix
|
||||
|
||||
Add "PrepareUrl" transformer to RIM rules processor
|
|
@ -1,4 +0,0 @@
|
|||
Significance: patch
|
||||
Type: fix
|
||||
|
||||
ensure parameter datatype for array_slice
|
|
@ -1,4 +0,0 @@
|
|||
Significance: minor
|
||||
Type: fix
|
||||
|
||||
Fix number of orders under tax report
|
|
@ -1,4 +0,0 @@
|
|||
Significance: patch
|
||||
Type: fix
|
||||
|
||||
fix string + string for PHP 8.X
|
|
@ -1,4 +0,0 @@
|
|||
Significance: patch
|
||||
Type: fix
|
||||
|
||||
Support values written in exponential notation for HPOS migrations.
|
|
@ -1,4 +0,0 @@
|
|||
Significance: minor
|
||||
Type: fix
|
||||
|
||||
CES modal: styling fixes and extraFiels prop added
|
|
@ -1,4 +0,0 @@
|
|||
Significance: patch
|
||||
Type: fix
|
||||
|
||||
Fix selection of multiple orders in HPOS list table.
|
|
@ -1,4 +0,0 @@
|
|||
Significance: patch
|
||||
Type: fix
|
||||
|
||||
Fire bulk action orders hook for all custom actions.
|
|
@ -1,4 +0,0 @@
|
|||
Significance: patch
|
||||
Type: fix
|
||||
|
||||
Add support for taxonomy meta boxes in HPOS order edit screen.
|
|
@ -1,4 +0,0 @@
|
|||
Significance: patch
|
||||
Type: fix
|
||||
|
||||
Fix Layout Controller forwarding arrays from the URL query string.
|
|
@ -1,4 +0,0 @@
|
|||
Significance: patch
|
||||
Type: fix
|
||||
|
||||
improve get_children transient validation
|
|
@ -1,4 +0,0 @@
|
|||
Significance: patch
|
||||
Type: fix
|
||||
|
||||
Fixed a visual bug where text overlapped the image in the task list header.
|
|
@ -1,4 +0,0 @@
|
|||
Significance: patch
|
||||
Type: fix
|
||||
|
||||
Allow plugins_page_skipped parameter in Onboarding API endpoint
|
|
@ -1,4 +0,0 @@
|
|||
Significance: patch
|
||||
Type: add
|
||||
|
||||
Add re-migrate support to HPOS CLI.
|
|
@ -1,4 +0,0 @@
|
|||
Significance: patch
|
||||
Type: fix
|
||||
|
||||
Minor UI fixes in Core profiler steps
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue