woocommerce/plugins/woocommerce-admin/client/core-profiler/actions/tracks.tsx

227 lines
6.4 KiB
TypeScript

/**
* External dependencies
*/
import { getSetting } from '@woocommerce/settings';
import { recordEvent } from '@woocommerce/tracks';
/**
* Internal dependencies
*/
import {
CoreProfilerStateMachineContext,
UserProfileEvent,
BusinessInfoEvent,
PluginsLearnMoreLinkClicked,
PluginsInstallationCompletedWithErrorsEvent,
PluginsInstallationCompletedEvent,
PluginsInstallationRequestedEvent,
} from '..';
import { POSSIBLY_DEFAULT_STORE_NAMES } from '../pages/BusinessInfo';
import {
InstalledPlugin,
PluginInstallError,
} from '../services/installAndActivatePlugins';
import { getPluginTrackKey, getTimeFrame } from '~/utils';
const recordTracksStepViewed = (
_context: unknown,
_event: unknown,
{ action }: { action: unknown }
) => {
const { step } = action as { step: string };
recordEvent( 'coreprofiler_step_view', {
step,
wc_version: getSetting( 'wcVersion' ),
} );
};
const recordTracksStepSkipped = (
_context: unknown,
_event: unknown,
{ action }: { action: unknown }
) => {
const { step } = action as { step: string };
recordEvent( `coreprofiler_${ step }_skip` );
};
const recordTracksIntroCompleted = () => {
recordEvent( 'coreprofiler_step_complete', {
step: 'intro_opt_in',
wc_version: getSetting( 'wcVersion' ),
} );
};
const recordTracksUserProfileCompleted = (
_context: CoreProfilerStateMachineContext,
event: Extract< UserProfileEvent, { type: 'USER_PROFILE_COMPLETED' } >
) => {
recordEvent( 'coreprofiler_step_complete', {
step: 'user_profile',
wc_version: getSetting( 'wcVersion' ),
} );
recordEvent( 'coreprofiler_user_profile', {
business_choice: event.payload.userProfile.businessChoice,
selling_online_answer: event.payload.userProfile.sellingOnlineAnswer,
selling_platforms: event.payload.userProfile.sellingPlatforms
? event.payload.userProfile.sellingPlatforms.join()
: null,
} );
};
const recordTracksSkipBusinessLocationCompleted = () => {
recordEvent( 'coreprofiler_step_complete', {
step: 'skip_business_location',
wc_version: getSetting( 'wcVersion' ),
} );
};
const recordTracksIsEmailChanged = (
context: CoreProfilerStateMachineContext,
event: BusinessInfoEvent
) => {
let emailSource, isEmailChanged;
if ( context.onboardingProfile.store_email ) {
emailSource = 'onboarding_profile_store_email'; // from previous entry
isEmailChanged =
event.payload.storeEmailAddress !==
context.onboardingProfile.store_email;
} else if ( context.currentUserEmail ) {
emailSource = 'current_user_email'; // from currentUser
isEmailChanged =
event.payload.storeEmailAddress !== context.currentUserEmail;
} else {
emailSource = 'was_empty';
isEmailChanged = event.payload.storeEmailAddress?.length > 0;
}
recordEvent( 'coreprofiler_email_marketing', {
opt_in: event.payload.isOptInMarketing,
email_field_prefilled_source: emailSource,
email_field_modified: isEmailChanged,
} );
};
const recordTracksBusinessInfoCompleted = (
context: CoreProfilerStateMachineContext,
event: Extract< BusinessInfoEvent, { type: 'BUSINESS_INFO_COMPLETED' } >
) => {
recordEvent( 'coreprofiler_step_complete', {
step: 'business_info',
wc_version: getSetting( 'wcVersion' ),
} );
recordEvent( 'coreprofiler_business_info', {
business_name_filled:
POSSIBLY_DEFAULT_STORE_NAMES.findIndex(
( name ) => name === event.payload.storeName
) === -1,
industry: event.payload.industry,
store_location_previously_set:
context.onboardingProfile.is_store_country_set || false,
geolocation_success: context.geolocatedLocation !== undefined,
geolocation_overruled: event.payload.geolocationOverruled,
} );
};
const recordTracksPluginsInstallationRequest = (
_context: CoreProfilerStateMachineContext,
event: Extract<
PluginsInstallationRequestedEvent,
{ type: 'PLUGINS_INSTALLATION_REQUESTED' }
>
) => {
recordEvent( 'coreprofiler_store_extensions_continue', {
shown: event.payload.pluginsShown || [],
selected: event.payload.pluginsSelected || [],
unselected: event.payload.pluginsUnselected || [],
} );
};
const recordTracksPluginsLearnMoreLinkClicked = (
_context: unknown,
_event: PluginsLearnMoreLinkClicked,
{ action }: { action: unknown }
) => {
const { step } = action as { step: string };
recordEvent( `coreprofiler_${ step }_learn_more_link_clicked`, {
plugin: _event.payload.plugin,
link: _event.payload.learnMoreLink,
} );
};
const recordFailedPluginInstallations = (
_context: unknown,
_event: PluginsInstallationCompletedWithErrorsEvent
) => {
const failedExtensions = _event.payload.errors.map(
( error: PluginInstallError ) => getPluginTrackKey( error.plugin )
);
recordEvent( 'coreprofiler_store_extensions_installed_and_activated', {
success: false,
failed_extensions: failedExtensions,
} );
_event.payload.errors.forEach( ( error: PluginInstallError ) => {
recordEvent( 'coreprofiler_store_extension_installed_and_activated', {
success: false,
extension: getPluginTrackKey( error.plugin ),
error_message: error.error,
} );
} );
};
const recordSuccessfulPluginInstallation = (
_context: unknown,
_event: PluginsInstallationCompletedEvent
) => {
const installationCompletedResult =
_event.payload.installationCompletedResult;
const trackData: {
success: boolean;
installed_extensions: string[];
total_time: string;
[ key: string ]: number | boolean | string | string[];
} = {
success: true,
installed_extensions: installationCompletedResult.installedPlugins.map(
( installedPlugin: InstalledPlugin ) =>
getPluginTrackKey( installedPlugin.plugin )
),
total_time: getTimeFrame( installationCompletedResult.totalTime ),
};
for ( const installedPlugin of installationCompletedResult.installedPlugins ) {
const pluginKey = getPluginTrackKey( installedPlugin.plugin );
const installTime = getTimeFrame( installedPlugin.installTime );
trackData[ 'install_time_' + pluginKey ] = installTime;
recordEvent( 'coreprofiler_store_extension_installed_and_activated', {
success: true,
extension: pluginKey,
install_time: installTime,
} );
}
recordEvent(
'coreprofiler_store_extensions_installed_and_activated',
trackData
);
};
export default {
recordTracksStepViewed,
recordTracksStepSkipped,
recordTracksIntroCompleted,
recordTracksUserProfileCompleted,
recordTracksSkipBusinessLocationCompleted,
recordTracksBusinessInfoCompleted,
recordTracksPluginsLearnMoreLinkClicked,
recordFailedPluginInstallations,
recordSuccessfulPluginInstallation,
recordTracksPluginsInstallationRequest,
recordTracksIsEmailChanged,
};