Onboarding: Add reminder to complete profiler (https://github.com/woocommerce/woocommerce-admin/pull/3524)
* Add note to complete profiler * Add note actions * Update note to actioned when profiler is marked complete * Update note to actioned client-side when completing profiler
This commit is contained in:
parent
d15a66d3bd
commit
d29d674768
|
@ -22,6 +22,7 @@ import Industry from './steps/industry';
|
|||
import Plugins from './steps/plugins';
|
||||
import ProductTypes from './steps/product-types';
|
||||
import ProfileWizardHeader from './header';
|
||||
import { QUERY_DEFAULTS } from 'wc-api/constants';
|
||||
import Start from './steps/start';
|
||||
import StoreDetails from './steps/store-details';
|
||||
import Theme from './steps/theme';
|
||||
|
@ -144,15 +145,15 @@ class ProfileWizard extends Component {
|
|||
const nextStep = this.getSteps()[ currentStepIndex + 1 ];
|
||||
|
||||
if ( 'undefined' === typeof nextStep ) {
|
||||
this.finishWizard();
|
||||
this.possiblyShowCart();
|
||||
return;
|
||||
}
|
||||
|
||||
return updateQueryString( { step: nextStep.key } );
|
||||
}
|
||||
|
||||
finishWizard() {
|
||||
const { profileItems, updateProfileItems } = this.props;
|
||||
possiblyShowCart() {
|
||||
const { profileItems } = this.props;
|
||||
|
||||
// @todo This should also send profile information to woocommerce.com.
|
||||
|
||||
|
@ -160,14 +161,25 @@ class ProfileWizard extends Component {
|
|||
if ( productIds.length ) {
|
||||
this.setState( { showCartModal: true } );
|
||||
} else {
|
||||
updateProfileItems( { completed: true } );
|
||||
this.completeProfiler();
|
||||
}
|
||||
}
|
||||
|
||||
completeProfiler() {
|
||||
const { notes, updateNote, updateProfileItems } = this.props;
|
||||
updateProfileItems( { completed: true } );
|
||||
|
||||
const profilerNote = notes.find(
|
||||
note => 'wc-admin-onboarding-profiler-reminder' === note.name
|
||||
);
|
||||
if ( profilerNote ) {
|
||||
updateNote( profilerNote.id, { status: 'actioned' } );
|
||||
}
|
||||
}
|
||||
|
||||
markCompleteAndPurchase( cartRedirectUrl ) {
|
||||
const { updateProfileItems } = this.props;
|
||||
this.setState( { cartRedirectUrl } );
|
||||
updateProfileItems( { completed: true } );
|
||||
this.completeProfiler();
|
||||
}
|
||||
|
||||
render() {
|
||||
|
@ -190,7 +202,7 @@ class ProfileWizard extends Component {
|
|||
onClickPurchaseNow={ cartRedirectUrl =>
|
||||
this.markCompleteAndPurchase( cartRedirectUrl )
|
||||
}
|
||||
onClickPurchaseLater={ () => this.props.updateProfileItems( { completed: true } ) }
|
||||
onClickPurchaseLater={ () => this.completeProfiler() }
|
||||
/>
|
||||
) }
|
||||
<ProfileWizardHeader currentStep={ step.key } steps={ steps } />
|
||||
|
@ -202,19 +214,29 @@ class ProfileWizard extends Component {
|
|||
|
||||
export default compose(
|
||||
withSelect( select => {
|
||||
const { getProfileItems, getProfileItemsError } = select( 'wc-api' );
|
||||
const { getNotes, getProfileItems, getProfileItemsError } = select( 'wc-api' );
|
||||
|
||||
const notesQuery = {
|
||||
page: 1,
|
||||
per_page: QUERY_DEFAULTS.pageSize,
|
||||
type: 'update',
|
||||
status: 'unactioned',
|
||||
};
|
||||
const notes = getNotes( notesQuery );
|
||||
|
||||
return {
|
||||
isError: Boolean( getProfileItemsError() ),
|
||||
notes,
|
||||
profileItems: getProfileItems(),
|
||||
};
|
||||
} ),
|
||||
withDispatch( dispatch => {
|
||||
const { updateProfileItems } = dispatch( 'wc-api' );
|
||||
const { updateNote, updateProfileItems } = dispatch( 'wc-api' );
|
||||
const { createNotice } = dispatch( 'core/notices' );
|
||||
|
||||
return {
|
||||
createNotice,
|
||||
updateNote,
|
||||
updateProfileItems,
|
||||
};
|
||||
} )
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
namespace Automattic\WooCommerce\Admin\Features;
|
||||
|
||||
use \Automattic\WooCommerce\Admin\Loader;
|
||||
use \Automattic\WooCommerce\Admin\Notes\WC_Admin_Notes_Onboarding_Profiler;
|
||||
|
||||
/**
|
||||
* Contains backend logic for the onboarding profile and checklist feature.
|
||||
|
@ -66,6 +67,9 @@ class Onboarding {
|
|||
// Rest API hooks need to run before is_admin() checks.
|
||||
add_filter( 'woocommerce_rest_prepare_themes', array( $this, 'add_uploaded_theme_data' ) );
|
||||
|
||||
// Add onboarding notes.
|
||||
new WC_Admin_Notes_Onboarding_Profiler();
|
||||
|
||||
if ( ! is_admin() ) {
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,95 @@
|
|||
<?php
|
||||
/**
|
||||
* WooCommerce Admin: Profile reminder note.
|
||||
*
|
||||
* Adds a notes to complete or skip the profiler.
|
||||
*
|
||||
* @package WooCommerce Admin
|
||||
*/
|
||||
|
||||
namespace Automattic\WooCommerce\Admin\Notes;
|
||||
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
use \Automattic\WooCommerce\Admin\Features\Onboarding;
|
||||
|
||||
/**
|
||||
* WC_Admin_Notes_Onboarding_Profiler.
|
||||
*/
|
||||
class WC_Admin_Notes_Onboarding_Profiler {
|
||||
const NOTE_NAME = 'wc-admin-onboarding-profiler-reminder';
|
||||
|
||||
/**
|
||||
* Attach hooks.
|
||||
*/
|
||||
public function __construct() {
|
||||
add_action( 'admin_init', array( $this, 'add_reminder' ) );
|
||||
add_action( 'update_option_wc_onboarding_profile', array( $this, 'update_status_on_complete' ), 10, 2 );
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a note to remind store owners to complete the profiler.
|
||||
*/
|
||||
public static function add_reminder() {
|
||||
if ( ! Onboarding::should_show_profiler() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$data_store = \WC_Data_Store::load( 'admin-note' );
|
||||
$note_ids = $data_store->get_notes_with_name( self::NOTE_NAME );
|
||||
if ( ! empty( $note_ids ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$note = new WC_Admin_Note();
|
||||
$note->set_title( __( 'Welcome to WooCommerce! Set up your store and start selling', 'woocommerce-admin' ) );
|
||||
$note->set_content( __( "We're here to help you going through the most important steps to get your store up and running.", 'woocommerce-admin' ) );
|
||||
$note->set_type( WC_Admin_Note::E_WC_ADMIN_NOTE_UPDATE );
|
||||
$note->set_icon( 'info' );
|
||||
$note->set_name( self::NOTE_NAME );
|
||||
$note->set_content_data( (object) array() );
|
||||
$note->set_source( 'woocommerce-admin' );
|
||||
$note->add_action(
|
||||
'continue-profiler',
|
||||
__( 'Continue Store Setup', 'woocommerce-admin' ),
|
||||
wc_admin_url(),
|
||||
'unactioned',
|
||||
true
|
||||
);
|
||||
$note->add_action(
|
||||
'skip-profiler',
|
||||
__( 'Skip Setup', 'woocommerce-admin' ),
|
||||
wc_admin_url( '&reset_profiler=0' ),
|
||||
'actioned',
|
||||
false
|
||||
);
|
||||
|
||||
$note->save();
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the note status when the profiler is completed.
|
||||
*
|
||||
* @param mixed $old_value Old value.
|
||||
* @param mixed $new_value New value.
|
||||
*/
|
||||
public static function update_status_on_complete( $old_value, $new_value ) {
|
||||
if (
|
||||
( isset( $old_value['complete'] ) && $old_value['completed'] ) ||
|
||||
! isset( $new_value['completed'] ) ||
|
||||
! $new_value['completed']
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
$data_store = \WC_Data_Store::load( 'admin-note' );
|
||||
$note_ids = $data_store->get_notes_with_name( self::NOTE_NAME );
|
||||
if ( empty( $note_ids ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$note = new WC_Admin_Note( $note_ids[0] );
|
||||
$note->set_status( 'actioned' );
|
||||
$note->save();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue