Skip to content

Commit

Permalink
Added some classes for defining Google Analytics events
Browse files Browse the repository at this point in the history
  • Loading branch information
JBergVincit committed Jul 15, 2024
1 parent a5475d4 commit 9586b58
Show file tree
Hide file tree
Showing 6 changed files with 69 additions and 32 deletions.
6 changes: 4 additions & 2 deletions frontend/src/analytics/AnalyticsEvent.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
// Defines the common enum to use for event names across all analytics services
export enum AnalyticsEventEnum {
BOOKING,
CANCEL_BOOKING
END_BOOKING
}

// Defines the common event names to use across all analytics services
export const analyticsEventMap: { [key in AnalyticsEventEnum]: string } = {
[AnalyticsEventEnum.BOOKING]: 'booking',
[AnalyticsEventEnum.CANCEL_BOOKING]: 'cancelBooking'
[AnalyticsEventEnum.END_BOOKING]: 'endBooking'
};
32 changes: 32 additions & 0 deletions frontend/src/analytics/googleAnalytics/googleAnalyticsEvents.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import { AnalyticsEventEnum } from '../AnalyticsEvent';
import { Room } from '../../types';

// Basic interface for all google analytics events
export interface GoogleAnalyticsEvent {
eventType: AnalyticsEventEnum;
eventObject: object;
}

export class BookingEvent implements GoogleAnalyticsEvent {
eventType: AnalyticsEventEnum = AnalyticsEventEnum.BOOKING;
eventObject: object;

constructor(room: Room) {
this.eventObject = {
roomName: room.name,
building: room.building
};
}
}

export class EndBookingEvent implements GoogleAnalyticsEvent {
eventType: AnalyticsEventEnum = AnalyticsEventEnum.END_BOOKING;
eventObject: object;

constructor(room: Room) {
this.eventObject = {
roomName: room.name,
building: room.building
};
}
}
22 changes: 22 additions & 0 deletions frontend/src/analytics/googleAnalytics/googleAnalyticsService.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { analyticsEventMap } from '../AnalyticsEvent';
import { GoogleAnalyticsEvent } from './googleAnalyticsEvents';

function isGAEnabled(): boolean {
// @ts-ignore
if (!window.gtag) {
console.log('Google Analytics is not enabled!');
return false;
}
return true;
}

export function triggerGoogleAnalyticsEvent(event: GoogleAnalyticsEvent) {
if (isGAEnabled()) {
// @ts-ignore
window.gtag(
'event',
analyticsEventMap[event.eventType],
event.eventObject
);
}
}
28 changes: 0 additions & 28 deletions frontend/src/analytics/googleAnalyticsService.ts

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ import dayjs from 'dayjs';
import { sortByFavoritedAndName } from '../../util/arrayUtils';
import { triggerClarityEvent } from '../../analytics/clarityService';
import { AnalyticsEventEnum } from '../../analytics/AnalyticsEvent';
import { triggerGoogleAnalyticsEvent } from '../../analytics/googleAnalyticsService';
import { triggerGoogleAnalyticsEvent } from '../../analytics/googleAnalytics/googleAnalyticsService';
import { BookingEvent } from '../../analytics/googleAnalytics/googleAnalyticsEvents';

const SKIP_CONFIRMATION = true;

Expand Down Expand Up @@ -291,7 +292,8 @@ const AvailableRoomList = (props: BookingListProps) => {
createSuccessNotification('Booking was successful');
setBookingLoading('false');
document.getElementById('main-view-content')?.scrollTo(0, 0);
triggerGoogleAnalyticsEvent(AnalyticsEventEnum.BOOKING);

triggerGoogleAnalyticsEvent(new BookingEvent(room));
triggerClarityEvent(AnalyticsEventEnum.BOOKING);
})
.catch(() => {
Expand Down
7 changes: 7 additions & 0 deletions frontend/src/components/CurrentBooking/CurrentBooking.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ import {
getTimeAvailableMinutes,
getBookingTimeLeft
} from '../RoomCard/RoomCard';
import { triggerGoogleAnalyticsEvent } from '../../analytics/googleAnalytics/googleAnalyticsService';
import { triggerClarityEvent } from '../../analytics/clarityService';
import { AnalyticsEventEnum } from '../../analytics/AnalyticsEvent';
import { EndBookingEvent } from '../../analytics/googleAnalytics/googleAnalyticsEvents';

const NO_CONFIRMATION = true;

Expand Down Expand Up @@ -127,6 +131,9 @@ const CurrentBooking = (props: CurrentBookingProps) => {
updateRooms();
createNotificationWithType('Booking ended', 'success');
window.scrollTo(0, 0);

triggerGoogleAnalyticsEvent(new EndBookingEvent(booking.room));
triggerClarityEvent(AnalyticsEventEnum.END_BOOKING);
})
.catch(() => {
setBookingProcessing('false');
Expand Down

0 comments on commit 9586b58

Please sign in to comment.