From 98fa7a7e6543b57c3bea7890ef820d96bef4ec0d Mon Sep 17 00:00:00 2001 From: Jan Berg Date: Thu, 18 Jul 2024 12:04:11 +0300 Subject: [PATCH] Added couple of events for analytics purposes --- frontend/src/analytics/AnalyticsEvent.ts | 8 +++-- .../googleAnalytics/googleAnalyticsEvents.ts | 35 ++++++++++++++++--- .../AvailableRoomList/AvailableRoomList.tsx | 2 +- .../ChooseOfficeView/ChooseOfficeView.tsx | 5 +++ .../CurrentBooking/CurrentBooking.tsx | 10 +++--- 5 files changed, 48 insertions(+), 12 deletions(-) diff --git a/frontend/src/analytics/AnalyticsEvent.ts b/frontend/src/analytics/AnalyticsEvent.ts index f952a07..eb1a7bb 100644 --- a/frontend/src/analytics/AnalyticsEvent.ts +++ b/frontend/src/analytics/AnalyticsEvent.ts @@ -1,11 +1,15 @@ // Defines the common enum to use for event names across all analytics services export enum AnalyticsEventEnum { BOOKING, - END_BOOKING + BOOKING_END, + BOOKING_ADD_TIME, + BUILDING_SELECT } // Defines the common event names to use across all analytics services export const analyticsEventMap: { [key in AnalyticsEventEnum]: string } = { [AnalyticsEventEnum.BOOKING]: 'booking', - [AnalyticsEventEnum.END_BOOKING]: 'endBooking' + [AnalyticsEventEnum.BOOKING_END]: 'bookingEnd', + [AnalyticsEventEnum.BOOKING_ADD_TIME]: 'bookingAddTime', + [AnalyticsEventEnum.BUILDING_SELECT]: 'buildingSelect' }; diff --git a/frontend/src/analytics/googleAnalytics/googleAnalyticsEvents.ts b/frontend/src/analytics/googleAnalytics/googleAnalyticsEvents.ts index 7a2a4aa..e03e361 100644 --- a/frontend/src/analytics/googleAnalytics/googleAnalyticsEvents.ts +++ b/frontend/src/analytics/googleAnalytics/googleAnalyticsEvents.ts @@ -1,5 +1,5 @@ import { AnalyticsEventEnum } from '../AnalyticsEvent'; -import { Room } from '../../types'; +import { Booking, Building, Room } from '../../types'; // Basic interface for all google analytics events export interface GoogleAnalyticsEvent { @@ -11,16 +11,17 @@ export class BookingEvent implements GoogleAnalyticsEvent { eventType: AnalyticsEventEnum = AnalyticsEventEnum.BOOKING; eventObject: object; - constructor(room: Room) { + constructor(room: Room, duration: number) { this.eventObject = { roomName: room.name, - building: room.building + building: room.building, + duration: duration }; } } -export class EndBookingEvent implements GoogleAnalyticsEvent { - eventType: AnalyticsEventEnum = AnalyticsEventEnum.END_BOOKING; +export class BookingEndEvent implements GoogleAnalyticsEvent { + eventType: AnalyticsEventEnum = AnalyticsEventEnum.BOOKING_END; eventObject: object; constructor(room: Room) { @@ -30,3 +31,27 @@ export class EndBookingEvent implements GoogleAnalyticsEvent { }; } } + +export class BookingAddTimeEvent implements GoogleAnalyticsEvent { + eventType: AnalyticsEventEnum = AnalyticsEventEnum.BOOKING_ADD_TIME; + eventObject: object; + + constructor(booking: Booking) { + this.eventObject = { + roomName: booking.room.name, + building: booking.room.building, + bookingResources: booking.resourceStatus + }; + } +} + +export class ChooseBuildingEvent implements GoogleAnalyticsEvent { + eventType: AnalyticsEventEnum = AnalyticsEventEnum.BUILDING_SELECT; + eventObject: object; + + constructor(building: Building) { + this.eventObject = { + buildingName: building.name + }; + } +} diff --git a/frontend/src/components/AvailableRoomList/AvailableRoomList.tsx b/frontend/src/components/AvailableRoomList/AvailableRoomList.tsx index 7d6905e..5f00f7b 100644 --- a/frontend/src/components/AvailableRoomList/AvailableRoomList.tsx +++ b/frontend/src/components/AvailableRoomList/AvailableRoomList.tsx @@ -293,7 +293,7 @@ const AvailableRoomList = (props: BookingListProps) => { setBookingLoading('false'); document.getElementById('main-view-content')?.scrollTo(0, 0); - triggerGoogleAnalyticsEvent(new BookingEvent(room)); + triggerGoogleAnalyticsEvent(new BookingEvent(room, duration)); triggerClarityEvent(AnalyticsEventEnum.BOOKING); }) .catch(() => { diff --git a/frontend/src/components/ChooseOfficeView/ChooseOfficeView.tsx b/frontend/src/components/ChooseOfficeView/ChooseOfficeView.tsx index 03e17a0..5ebf35d 100644 --- a/frontend/src/components/ChooseOfficeView/ChooseOfficeView.tsx +++ b/frontend/src/components/ChooseOfficeView/ChooseOfficeView.tsx @@ -7,6 +7,8 @@ import { Building, Preferences } from '../../types'; import CenteredProgress from '../util/CenteredProgress'; import { getBuildingsWithPosition } from '../../services/buildingService'; import { useUserSettings } from '../../contexts/UserSettingsContext'; +import { triggerGoogleAnalyticsEvent } from '../../analytics/googleAnalytics/googleAnalyticsService'; +import { ChooseBuildingEvent } from '../../analytics/googleAnalytics/googleAnalyticsEvents'; type ChooseOfficeViewProps = { buildings: Building[]; @@ -66,6 +68,9 @@ const ChooseOfficeView = (props: ChooseOfficeViewProps) => { .then((savedPreferences) => { setPreferences(savedPreferences); createSuccessNotification('Chose building ' + buildingId); + triggerGoogleAnalyticsEvent( + new ChooseBuildingEvent(foundBuilding) + ); goToMainView(); }) .catch(() => { diff --git a/frontend/src/components/CurrentBooking/CurrentBooking.tsx b/frontend/src/components/CurrentBooking/CurrentBooking.tsx index 2a9ec7a..c1d6470 100644 --- a/frontend/src/components/CurrentBooking/CurrentBooking.tsx +++ b/frontend/src/components/CurrentBooking/CurrentBooking.tsx @@ -17,7 +17,10 @@ import { import { triggerGoogleAnalyticsEvent } from '../../analytics/googleAnalytics/googleAnalyticsService'; import { triggerClarityEvent } from '../../analytics/clarityService'; import { AnalyticsEventEnum } from '../../analytics/AnalyticsEvent'; -import { EndBookingEvent } from '../../analytics/googleAnalytics/googleAnalyticsEvents'; +import { + BookingAddTimeEvent, + BookingEndEvent +} from '../../analytics/googleAnalytics/googleAnalyticsEvents'; const NO_CONFIRMATION = true; @@ -111,6 +114,7 @@ const CurrentBooking = (props: CurrentBookingProps) => { updateBookings(); createSuccessNotification('Time added to booking'); window.scrollTo(0, 0); + triggerGoogleAnalyticsEvent(new BookingAddTimeEvent(booking)); }) .catch(() => { setBookingProcessing('false'); @@ -131,9 +135,7 @@ const CurrentBooking = (props: CurrentBookingProps) => { updateRooms(); createNotificationWithType('Booking ended', 'success'); window.scrollTo(0, 0); - - triggerGoogleAnalyticsEvent(new EndBookingEvent(booking.room)); - triggerClarityEvent(AnalyticsEventEnum.END_BOOKING); + triggerGoogleAnalyticsEvent(new BookingEndEvent(booking.room)); }) .catch(() => { setBookingProcessing('false');