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]',
});