Merged in feat/SW-2653-aa-tracking-click-tracking-on-se (pull request #2301)
feat: SW-2653 Implemented click tracking on Search btn and lang switch * feat: SW-2653 Implemented click tracking on Search btn and lang switch Approved-by: Erik Tiekstra
This commit is contained in:
@@ -9,6 +9,7 @@ import { REDEMPTION } from "@/constants/booking"
|
|||||||
import { selectHotel, selectRate } from "@/constants/routes/hotelReservation"
|
import { selectHotel, selectRate } from "@/constants/routes/hotelReservation"
|
||||||
|
|
||||||
import useLang from "@/hooks/useLang"
|
import useLang from "@/hooks/useLang"
|
||||||
|
import { trackBookingSearchClick } from "@/utils/tracking/booking"
|
||||||
import { serializeBookingSearchParams } from "@/utils/url"
|
import { serializeBookingSearchParams } from "@/utils/url"
|
||||||
|
|
||||||
import FormContent, { BookingWidgetFormContentSkeleton } from "./FormContent"
|
import FormContent, { BookingWidgetFormContentSkeleton } from "./FormContent"
|
||||||
@@ -37,6 +38,7 @@ export default function Form({ type, onClose }: BookingWidgetFormProps) {
|
|||||||
useFormContext<BookingWidgetSchema>()
|
useFormContext<BookingWidgetSchema>()
|
||||||
|
|
||||||
function onSubmit(data: BookingWidgetSchema) {
|
function onSubmit(data: BookingWidgetSchema) {
|
||||||
|
trackBookingSearchClick(data.search, data.hotel ? "hotel" : "destination")
|
||||||
const bookingFlowPage = data.hotel ? selectRate(lang) : selectHotel(lang)
|
const bookingFlowPage = data.hotel ? selectRate(lang) : selectHotel(lang)
|
||||||
const bookingWidgetParams = serializeBookingSearchParams({
|
const bookingWidgetParams = serializeBookingSearchParams({
|
||||||
rooms: data.rooms,
|
rooms: data.rooms,
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ export default function LanguageSwitcherContent({
|
|||||||
className={styles.link}
|
className={styles.link}
|
||||||
href={replaceUrlPart(pathname, url)}
|
href={replaceUrlPart(pathname, url)}
|
||||||
rel={env.isLangLive(key) ? undefined : "nofollow"}
|
rel={env.isLangLive(key) ? undefined : "nofollow"}
|
||||||
onClick={onLanguageSwitch}
|
onClick={() => onLanguageSwitch(key)}
|
||||||
variant="languageSwitcher"
|
variant="languageSwitcher"
|
||||||
keepSearchParams
|
keepSearchParams
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import useDropdownStore from "@/stores/main-menu"
|
|||||||
import useClickOutside from "@/hooks/useClickOutside"
|
import useClickOutside from "@/hooks/useClickOutside"
|
||||||
import { useHandleKeyUp } from "@/hooks/useHandleKeyUp"
|
import { useHandleKeyUp } from "@/hooks/useHandleKeyUp"
|
||||||
import useLang from "@/hooks/useLang"
|
import useLang from "@/hooks/useLang"
|
||||||
|
import { trackLanguageSwitchClick } from "@/utils/tracking/navigation"
|
||||||
|
|
||||||
import SkeletonShimmer from "../SkeletonShimmer"
|
import SkeletonShimmer from "../SkeletonShimmer"
|
||||||
import LanguageSwitcherContainer from "./LanguageSwitcherContainer"
|
import LanguageSwitcherContainer from "./LanguageSwitcherContainer"
|
||||||
@@ -94,6 +95,11 @@ export default function LanguageSwitcher({ type }: LanguageSwitcherProps) {
|
|||||||
defaultMessage: "Open language menu",
|
defaultMessage: "Open language menu",
|
||||||
})
|
})
|
||||||
|
|
||||||
|
function onLanguageSwitch(toLang: string) {
|
||||||
|
trackLanguageSwitchClick(currentLanguage, toLang)
|
||||||
|
toggleDropdown(dropdownType)
|
||||||
|
}
|
||||||
|
|
||||||
if (isLoading) {
|
if (isLoading) {
|
||||||
return <SkeletonShimmer width="12ch" />
|
return <SkeletonShimmer width="12ch" />
|
||||||
}
|
}
|
||||||
@@ -132,7 +138,7 @@ export default function LanguageSwitcher({ type }: LanguageSwitcherProps) {
|
|||||||
<LanguageSwitcherContainer type={type}>
|
<LanguageSwitcherContainer type={type}>
|
||||||
<LanguageSwitcherContent
|
<LanguageSwitcherContent
|
||||||
urls={languagesResponse.urls}
|
urls={languagesResponse.urls}
|
||||||
onLanguageSwitch={() => toggleDropdown(dropdownType)}
|
onLanguageSwitch={onLanguageSwitch}
|
||||||
/>
|
/>
|
||||||
</LanguageSwitcherContainer>
|
</LanguageSwitcherContainer>
|
||||||
</FocusLock>
|
</FocusLock>
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ export interface LanguageSwitcherProps {
|
|||||||
|
|
||||||
export interface LanguageSwitcherContentProps {
|
export interface LanguageSwitcherContentProps {
|
||||||
urls: LanguageSwitcherData
|
urls: LanguageSwitcherData
|
||||||
onLanguageSwitch: () => void
|
onLanguageSwitch: (lang: string) => void
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface LanguageSwitcherContainerProps {
|
export interface LanguageSwitcherContainerProps {
|
||||||
|
|||||||
@@ -67,3 +67,17 @@ export function trackBreakfastSelection({
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function trackBookingSearchClick(
|
||||||
|
searchTerm: string,
|
||||||
|
searchType: string
|
||||||
|
) {
|
||||||
|
trackEvent({
|
||||||
|
event: "hotelSearchButtonClick",
|
||||||
|
hotelInfo: {
|
||||||
|
searchTerm,
|
||||||
|
searchType,
|
||||||
|
action: "Hotel search",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@@ -30,3 +30,13 @@ export function trackLoginClick(position: TrackingPosition) {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function trackLanguageSwitchClick(fromLang: string, toLang: string) {
|
||||||
|
trackEvent({
|
||||||
|
event: "languageSelection",
|
||||||
|
language: {
|
||||||
|
fromSelection: fromLang,
|
||||||
|
toSelection: toLang,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user