From c6371c32db23962db54d68a55b92004cb5198e67 Mon Sep 17 00:00:00 2001 From: Daniel Bitzer Date: Wed, 20 May 2020 15:03:58 +0930 Subject: [PATCH] Fix in app purchase back link for recommend marketing extensions card (https://github.com/woocommerce/woocommerce-admin/pull/4301) * Add getInAppPurchaseUrl lib function * Implement getInAppPurchaseUrl for marketing tab * Include the directory with the wccom-site param * use getInAppPurchaseUrl helper function in onboarding CartModal component * Fix 'addQueryArgs' is defined but never used * Fix Missing JSDoc @return description * Make connectNonce setting a global setting rather than a marketing once Co-authored-by: Jason Conroy --- .../client/dashboard/components/cart-modal.js | 12 ++----- .../client/lib/in-app-purchase.js | 31 +++++++++++++++++++ .../overview/recommended-extensions/item.js | 18 ++--------- .../src/Features/Marketing.php | 1 - .../src/Features/Onboarding.php | 1 - plugins/woocommerce-admin/src/Loader.php | 1 + 6 files changed, 36 insertions(+), 28 deletions(-) create mode 100644 plugins/woocommerce-admin/client/lib/in-app-purchase.js diff --git a/plugins/woocommerce-admin/client/dashboard/components/cart-modal.js b/plugins/woocommerce-admin/client/dashboard/components/cart-modal.js index bf8a4497ac3..3c57573064d 100644 --- a/plugins/woocommerce-admin/client/dashboard/components/cart-modal.js +++ b/plugins/woocommerce-admin/client/dashboard/components/cart-modal.js @@ -5,7 +5,6 @@ import { __, sprintf } from '@wordpress/i18n'; import { Component } from '@wordpress/element'; import { compose } from '@wordpress/compose'; import { Button, Modal } from '@wordpress/components'; -import { addQueryArgs } from '@wordpress/url'; import { find } from 'lodash'; import { decodeEntities } from '@wordpress/html-entities'; @@ -13,7 +12,6 @@ import { decodeEntities } from '@wordpress/html-entities'; * WooCommerce dependencies */ import { getSetting } from '@woocommerce/wc-admin-settings'; -import { getNewPath } from '@woocommerce/navigation'; import { List } from '@woocommerce/components'; /** @@ -23,6 +21,7 @@ import withSelect from 'wc-api/with-select'; import { getProductIdsForCart } from 'dashboard/utils'; import sanitizeHTML from 'lib/sanitize-html'; import { recordEvent } from 'lib/tracks'; +import { getInAppPurchaseUrl } from 'lib/in-app-purchase'; class CartModal extends Component { constructor( props ) { @@ -45,15 +44,8 @@ class CartModal extends Component { purchase_install: true, } ); - const { connectNonce } = getSetting( 'onboarding', {} ); - const backPath = getNewPath( {}, '/', {} ); - - const url = addQueryArgs( 'https://woocommerce.com/cart', { - 'wccom-site': getSetting( 'siteUrl' ), - 'wccom-woo-version': getSetting( 'wcVersion' ), + const url = getInAppPurchaseUrl( 'https://woocommerce.com/cart', { 'wccom-replace-with': productIds.join( ',' ), - 'wccom-connect-nonce': connectNonce, - 'wccom-back': backPath, } ); if ( onClickPurchaseNow ) { diff --git a/plugins/woocommerce-admin/client/lib/in-app-purchase.js b/plugins/woocommerce-admin/client/lib/in-app-purchase.js new file mode 100644 index 00000000000..98dcb3ed532 --- /dev/null +++ b/plugins/woocommerce-admin/client/lib/in-app-purchase.js @@ -0,0 +1,31 @@ +/** + * External dependencies + */ +import { addQueryArgs } from '@wordpress/url'; + +/** + * WooCommerce dependencies + */ +import { getSetting } from '@woocommerce/wc-admin-settings'; + +/** + * Returns an in-app-purchase URL. + * + * @param {string} url + * @param {Object} queryArgs + * @return {string} url with in-app-purchase query parameters + */ +export const getInAppPurchaseUrl = ( url, queryArgs = {} ) => { + const { pathname, search } = window.location; + const connectNonce = getSetting( 'connectNonce', '' ); + queryArgs = { + 'wccom-site': getSetting( 'siteUrl' ), + // If the site is installed in a directory the directory must be included in the back param path. + 'wccom-back': pathname + search, + 'wccom-woo-version': getSetting( 'wcVersion' ), + 'wccom-connect-nonce': connectNonce, + ...queryArgs, + } + + return addQueryArgs( url, queryArgs ); +} diff --git a/plugins/woocommerce-admin/client/marketing/overview/recommended-extensions/item.js b/plugins/woocommerce-admin/client/marketing/overview/recommended-extensions/item.js index 51c78401087..ab663648f17 100644 --- a/plugins/woocommerce-admin/client/marketing/overview/recommended-extensions/item.js +++ b/plugins/woocommerce-admin/client/marketing/overview/recommended-extensions/item.js @@ -3,7 +3,6 @@ */ import { Component } from '@wordpress/element'; import PropTypes from 'prop-types'; -import { addQueryArgs } from '@wordpress/url'; /** * Internal dependencies @@ -11,12 +10,7 @@ import { addQueryArgs } from '@wordpress/url'; import './style.scss' import { ProductIcon } from '../../components/'; import { recordEvent } from 'lib/tracks'; - -/** - * WooCommerce dependencies - */ -import { getSetting } from '@woocommerce/wc-admin-settings'; -import { getNewPath } from '@woocommerce/navigation'; +import { getInAppPurchaseUrl } from 'lib/in-app-purchase'; class RecommendedExtensionsItem extends Component { @@ -28,15 +22,7 @@ class RecommendedExtensionsItem extends Component { render() { const { title, description, icon, url } = this.props; const classNameBase = 'woocommerce-marketing-recommended-extensions-item'; - - const { connectNonce } = getSetting( 'marketing', {} ); - - const connectURL = addQueryArgs( url, { - 'wccom-site': getSetting( 'siteUrl' ), - 'wccom-back': '/wp-admin/' + getNewPath( {} ), - 'wccom-woo-version': getSetting( 'wcVersion' ), - 'wccom-connect-nonce': connectNonce, - } ); + const connectURL = getInAppPurchaseUrl( url ); return ( countries->get_european_union_countries(); - $settings['onboarding']['connectNonce'] = wp_create_nonce( 'connect' ); $current_user = wp_get_current_user(); $settings['onboarding']['userEmail'] = esc_html( $current_user->user_email ); $settings['onboarding']['productTypes'] = self::get_allowed_product_types(); diff --git a/plugins/woocommerce-admin/src/Loader.php b/plugins/woocommerce-admin/src/Loader.php index 277597782eb..f04095e699d 100644 --- a/plugins/woocommerce-admin/src/Loader.php +++ b/plugins/woocommerce-admin/src/Loader.php @@ -885,6 +885,7 @@ class Loader { } $settings['allowMarketplaceSuggestions'] = WC_Marketplace_Suggestions::allow_suggestions(); + $settings['connectNonce'] = wp_create_nonce( 'connect' ); return $settings; }