setupWizardAnalytics.tsx 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import {useCallback, useEffect, useMemo} from 'react';
  2. import type {Organization} from 'sentry/types/organization';
  3. import {trackAnalytics} from 'sentry/utils/analytics';
  4. function useSetupWizardAnalyticsParams(organizations: Organization[]) {
  5. const urlParams = new URLSearchParams(location.search);
  6. const projectPlatform = urlParams.get('project_platform') ?? undefined;
  7. // if we have exactly one organization, we can use it for analytics
  8. // otherwise we don't know which org the user is in
  9. return useMemo(
  10. () => ({
  11. organization: organizations.length === 1 ? organizations[0]!.slug : null,
  12. project_platform: projectPlatform,
  13. }),
  14. [organizations, projectPlatform]
  15. );
  16. }
  17. const EMPTY_ARRAY: any = [];
  18. export function useSetupWizardViewedAnalytics(organizations: Organization[] | undefined) {
  19. const analyticsParams = useSetupWizardAnalyticsParams(organizations ?? EMPTY_ARRAY);
  20. useEffect(() => {
  21. if (!organizations?.length) {
  22. return;
  23. }
  24. trackAnalytics('setup_wizard_viewed', analyticsParams);
  25. }, [analyticsParams, organizations?.length]);
  26. }
  27. export function useSetupWizardCompletedAnalytics(organizations: Organization[]) {
  28. const analyticsParams = useSetupWizardAnalyticsParams(organizations);
  29. return useCallback(() => {
  30. trackAnalytics('setup_wizard_completed', analyticsParams);
  31. }, [analyticsParams]);
  32. }