227 lines
6.4 KiB
TypeScript
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,
|
|
};
|