JSFiddle - React, Tailwind, and code Playground

by emilcieslar

JavaScript

class Tracker {

  trackEvent(event) {
    if (this.shouldTrackEvent(event)) {
      console.log('Tracker: tracking event', event);
    }
  }

  trackUser(user) {
    if (this.shouldTrackUser(user)) {
      console.log('Tracker: tracking user', user);
    }
  }

  shouldTrackUser(user) {
    return !user.email.includes('test');
  }

  shouldTrackEvent(event) {
    if (event.action.includes('mobile')) {
      return true;
    }
    return false;
  }
}

const tracker = new Tracker();

const trackerMethods = ['trackUser', 'trackEvent'].reduce((previousValue, methodName) => ({
  ...previousValue,
  [methodName]: tracker[methodName],
}), {});

const enhancedTracker = {
  ...trackerMethods,

  trackEvent: (eventObj, ...restArgs) => {
    const finalEventObj = {
      courseId: '1',
      ...eventObj,
    };
    tracker.trackEvent(finalEventObj, ...restArgs);
  },
};

// FIXME: Why does it fail?
enhancedTracker.trackUser({
  id: '1234a',
  name: 'Joe Doe',
  email: '[email protected]',
});