/** * External dependencies */ import { __ } from '@wordpress/i18n'; import { applyFilters } from '@wordpress/hooks'; /** * WooCommerce dependencies */ import { getAdminLink, getSetting } from '@woocommerce/wc-admin-settings'; import { getHistory, getNewPath, updateQueryString, } from '@woocommerce/navigation'; import { Fragment } from '@wordpress/element'; /** * Internal dependencies */ import Appearance from './tasks/appearance'; import Connect from './tasks/connect'; import { getProductIdsForCart } from 'dashboard/utils'; import Products from './tasks/products'; import Shipping from './tasks/shipping'; import Tax from './tasks/tax'; import Payments from './tasks/payments'; import { installActivateAndConnectWcpay } from './tasks/payments/methods'; import { recordEvent } from 'lib/tracks'; export function recordTaskViewEvent( taskName, isJetpackConnected, activePlugins, installedPlugins ) { recordEvent( 'task_view', { task_name: taskName, wcs_installed: installedPlugins.includes( 'woocommerce-services' ), wcs_active: activePlugins.includes( 'woocommerce-services' ), jetpack_installed: installedPlugins.includes( 'jetpack' ), jetpack_active: activePlugins.includes( 'jetpack' ), jetpack_connected: isJetpackConnected, } ); } export function getAllTasks( { profileItems, taskListPayments, query, toggleCartModal, activePlugins, installedPlugins, installAndActivatePlugins, createNotice, isJetpackConnected, } ) { const { hasPhysicalProducts, hasProducts, isAppearanceComplete, isTaxComplete, shippingZonesCount, } = getSetting( 'onboarding', { hasPhysicalProducts: false, hasProducts: false, isAppearanceComplete: false, isTaxComplete: false, shippingZonesCount: 0, } ); const productIds = getProductIdsForCart( profileItems, true, installedPlugins ); const remainingProductIds = getProductIdsForCart( profileItems, false, installedPlugins ); const paymentsCompleted = Boolean( taskListPayments && taskListPayments.completed ); const paymentsSkipped = Boolean( taskListPayments && taskListPayments.skipped ); const woocommercePaymentsInstalled = installedPlugins.indexOf( 'woocommerce-payments' ) !== -1; const { completed: profilerCompleted, items_purchased: itemsPurchased, product_types: productTypes, wccom_connected: wccomConnected, } = profileItems; const tasks = [ { key: 'store_details', title: __( 'Store details', 'woocommerce-admin' ), container: null, onClick: () => { getHistory().push( getNewPath( {}, `/profiler`, {} ) ); }, completed: profilerCompleted, visible: true, time: __( '4 minutes', 'woocommerce-admin' ), }, { key: 'purchase', title: __( 'Purchase & install extensions', 'woocommerce-admin' ), container: null, onClick: () => remainingProductIds.length ? toggleCartModal() : null, visible: productIds.length, completed: productIds.length && ! remainingProductIds.length, time: __( '2 minutes', 'woocommerce-admin' ), isDismissable: true, }, { key: 'connect', title: __( 'Connect your store to WooCommerce.com', 'woocommerce-admin' ), container: , visible: itemsPurchased && ! wccomConnected, completed: wccomConnected, time: __( '1 minute', 'woocommerce-admin' ), }, { key: 'products', title: __( 'Add my products', 'woocommerce-admin' ), container: , completed: hasProducts, visible: true, time: __( '1 minute per product', 'woocommerce-admin' ), }, { key: 'woocommerce-payments', title: __( 'Set up WooCommerce Payments', 'woocommerce-admin' ), container: , completed: paymentsCompleted || paymentsSkipped, onClick: async () => { await new Promise( ( resolve, reject ) => { // This task doesn't have a view, so the recordEvent call // in TaskDashboard.recordTaskView() is never called. So // record it here. recordTaskViewEvent( 'wcpay', isJetpackConnected, activePlugins, installedPlugins ); return installActivateAndConnectWcpay( resolve, reject, createNotice, installAndActivatePlugins ); } ); }, visible: window.wcAdminFeatures.wcpay && woocommercePaymentsInstalled, time: __( '2 minutes', 'woocommerce-admin' ), }, { key: 'appearance', title: __( 'Personalize my store', 'woocommerce-admin' ), container: , completed: isAppearanceComplete, visible: true, time: __( '2 minutes', 'woocommerce-admin' ), }, { key: 'shipping', title: __( 'Set up shipping', 'woocommerce-admin' ), container: , completed: shippingZonesCount > 0, visible: ( productTypes && productTypes.includes( 'physical' ) ) || hasPhysicalProducts, time: __( '1 minute', 'woocommerce-admin' ), }, { key: 'tax', title: __( 'Set up tax', 'woocommerce-admin' ), container: , completed: isTaxComplete, visible: true, time: __( '1 minute', 'woocommerce-admin' ), }, { key: 'payments', title: __( 'Set up payments', 'woocommerce-admin' ), container: , completed: paymentsCompleted || paymentsSkipped, onClick: () => { if ( paymentsCompleted || paymentsSkipped ) { window.location = getAdminLink( 'admin.php?page=wc-settings&tab=checkout' ); return; } updateQueryString( { task: 'payments' } ); }, visible: ! woocommercePaymentsInstalled, time: __( '2 minutes', 'woocommerce-admin' ), }, ]; return applyFilters( 'woocommerce_admin_onboarding_task_list', tasks, query ); }