department-of-veterans-affairs/vets-website

View on GitHub
src/applications/vaos/utils/useDatadogRum.js

Summary

Maintainability
B
5 hrs
Test Coverage
import { useEffect } from 'react';
import { datadogRum } from '@datadog/browser-rum';

import environment from 'platform/utilities/environment';
import { useSelector } from 'react-redux';
import { selectFeatureDatadogRum } from '../redux/selectors';

const initializeDatadogRum = () => {
  if (
    // Prevent RUM from running on local/CI environments.
    environment.BASE_URL.indexOf('localhost') < 0 &&
    // Prevent re-initializing the SDK.
    !window.DD_RUM?.getInitConfiguration() &&
    !window.Mocha
  ) {
    datadogRum.init({
      applicationId: 'fa7a1075-965f-484d-b812-6f10f4572694',
      clientToken: 'pub4705a09a8da66995fa85908096f42321',
      site: 'ddog-gov.com',
      service: 'va.gov-appointments',
      env: environment.vspEnvironment(),
      sessionSampleRate: 100,
      sessionReplaySampleRate: 10,
      trackInteractions: true,
      trackFrustrations: true,
      trackResources: true,
      trackLongTasks: true,
      defaultPrivacyLevel: 'mask-user-input',
    });
    datadogRum.startSessionReplayRecording();
  }
};

const useDatadogRum = () => {
  const featureDatadogRum = useSelector(state =>
    selectFeatureDatadogRum(state),
  );

  useEffect(
    () => {
      if (featureDatadogRum) {
        initializeDatadogRum();
      } else {
        delete window.DD_RUM;
      }
    },
    [featureDatadogRum],
  );
};

export { useDatadogRum };