fix(BOOK-412): Using internalCategoryName to map ancillaries and show translated categoryName only
Approved-by: Linus Flood
This commit is contained in:
@@ -74,11 +74,19 @@ export function Ancillaries({
|
|||||||
loyaltyCode: undefined,
|
loyaltyCode: undefined,
|
||||||
points: undefined,
|
points: undefined,
|
||||||
hotelId: Number(bookedRoom.hotelId),
|
hotelId: Number(bookedRoom.hotelId),
|
||||||
categoryName: "Food",
|
internalCategoryName: "Food",
|
||||||
|
translatedCategoryName: intl.formatMessage({
|
||||||
|
defaultMessage: "Food",
|
||||||
|
}),
|
||||||
}
|
}
|
||||||
: undefined
|
: undefined
|
||||||
|
|
||||||
const allAncillaries = mapAncillaries(ancillaries, breakfastAncillary, user)
|
const allAncillaries = mapAncillaries(
|
||||||
|
intl,
|
||||||
|
ancillaries,
|
||||||
|
breakfastAncillary,
|
||||||
|
user
|
||||||
|
)
|
||||||
|
|
||||||
if (!allAncillaries.length) {
|
if (!allAncillaries.length) {
|
||||||
return null
|
return null
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import type { User } from "@scandic-hotels/trpc/types/user"
|
import type { User } from "@scandic-hotels/trpc/types/user"
|
||||||
|
import type { IntlShape } from "react-intl"
|
||||||
|
|
||||||
import type {
|
import type {
|
||||||
Ancillaries,
|
Ancillaries,
|
||||||
@@ -40,12 +41,14 @@ export function generateUniqueAncillaries(
|
|||||||
function addBreakfastPackage(
|
function addBreakfastPackage(
|
||||||
ancillaries: Ancillaries,
|
ancillaries: Ancillaries,
|
||||||
breakfast: SelectedAncillary | undefined,
|
breakfast: SelectedAncillary | undefined,
|
||||||
categoryName: string
|
internalCategoryName: string,
|
||||||
|
translatedCategoryName: string
|
||||||
): Ancillaries {
|
): Ancillaries {
|
||||||
if (!breakfast) return ancillaries
|
if (!breakfast) return ancillaries
|
||||||
|
|
||||||
const category = ancillaries.find((a) => a.categoryName === categoryName)
|
const category = ancillaries.find(
|
||||||
|
(a) => a.internalCategoryName === internalCategoryName
|
||||||
|
)
|
||||||
if (category) {
|
if (category) {
|
||||||
const newCategory = {
|
const newCategory = {
|
||||||
...category,
|
...category,
|
||||||
@@ -53,14 +56,24 @@ function addBreakfastPackage(
|
|||||||
}
|
}
|
||||||
|
|
||||||
return ancillaries.map((ancillary) =>
|
return ancillaries.map((ancillary) =>
|
||||||
ancillary.categoryName === categoryName ? newCategory : ancillary
|
ancillary.internalCategoryName === internalCategoryName
|
||||||
|
? newCategory
|
||||||
|
: ancillary
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
return [{ categoryName, ancillaryContent: [breakfast] }, ...ancillaries]
|
return [
|
||||||
|
{
|
||||||
|
internalCategoryName,
|
||||||
|
translatedCategoryName,
|
||||||
|
ancillaryContent: [breakfast],
|
||||||
|
},
|
||||||
|
...ancillaries,
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
export function mapAncillaries(
|
export function mapAncillaries(
|
||||||
|
intl: IntlShape,
|
||||||
ancillaries: Ancillaries | null,
|
ancillaries: Ancillaries | null,
|
||||||
breakfastAncillary: SelectedAncillary | undefined,
|
breakfastAncillary: SelectedAncillary | undefined,
|
||||||
user: User | null
|
user: User | null
|
||||||
@@ -68,12 +81,14 @@ export function mapAncillaries(
|
|||||||
const withBreakfastPopular = addBreakfastPackage(
|
const withBreakfastPopular = addBreakfastPackage(
|
||||||
ancillaries ?? [],
|
ancillaries ?? [],
|
||||||
breakfastAncillary,
|
breakfastAncillary,
|
||||||
"Popular"
|
"Popular",
|
||||||
|
intl.formatMessage({ defaultMessage: "Popular" })
|
||||||
)
|
)
|
||||||
const withBreakfastFood = addBreakfastPackage(
|
const withBreakfastFood = addBreakfastPackage(
|
||||||
withBreakfastPopular,
|
withBreakfastPopular,
|
||||||
breakfastAncillary,
|
breakfastAncillary,
|
||||||
"Food"
|
"Food",
|
||||||
|
intl.formatMessage({ defaultMessage: "Food" })
|
||||||
)
|
)
|
||||||
|
|
||||||
return filterPoints(withBreakfastFood, user)
|
return filterPoints(withBreakfastFood, user)
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ interface AddAncillaryState {
|
|||||||
steps: Steps
|
steps: Steps
|
||||||
booking: Room
|
booking: Room
|
||||||
ancillaries: Ancillaries
|
ancillaries: Ancillaries
|
||||||
categories: Ancillary["categoryName"][]
|
categories: Ancillary["translatedCategoryName"][]
|
||||||
selectedCategory: string
|
selectedCategory: string
|
||||||
selectCategory: (category: string) => void
|
selectCategory: (category: string) => void
|
||||||
ancillariesBySelectedCategory: Ancillary["ancillaryContent"]
|
ancillariesBySelectedCategory: Ancillary["ancillaryContent"]
|
||||||
@@ -70,8 +70,9 @@ function findAncillaryByCategory(
|
|||||||
selectedCategory: string
|
selectedCategory: string
|
||||||
) {
|
) {
|
||||||
return (
|
return (
|
||||||
ancillaries.find((ancillary) => ancillary.categoryName === selectedCategory)
|
ancillaries.find(
|
||||||
?.ancillaryContent ?? []
|
(ancillary) => ancillary.translatedCategoryName === selectedCategory
|
||||||
|
)?.ancillaryContent ?? []
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -79,12 +80,14 @@ export const createAddAncillaryStore = (
|
|||||||
booking: Room,
|
booking: Room,
|
||||||
ancillaries: Ancillaries
|
ancillaries: Ancillaries
|
||||||
) => {
|
) => {
|
||||||
const selectedCategory = ancillaries[0].categoryName
|
const selectedCategory = ancillaries[0].translatedCategoryName
|
||||||
const ancillariesBySelectedCategory = findAncillaryByCategory(
|
const ancillariesBySelectedCategory = findAncillaryByCategory(
|
||||||
ancillaries,
|
ancillaries,
|
||||||
selectedCategory
|
selectedCategory
|
||||||
)
|
)
|
||||||
const categories = ancillaries.map((ancillary) => ancillary.categoryName)
|
const categories = ancillaries.map(
|
||||||
|
(ancillary) => ancillary.translatedCategoryName
|
||||||
|
)
|
||||||
const steps = {
|
const steps = {
|
||||||
[AncillaryStepEnum.selectAncillary]: {
|
[AncillaryStepEnum.selectAncillary]: {
|
||||||
step: AncillaryStepEnum.selectAncillary,
|
step: AncillaryStepEnum.selectAncillary,
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ export function buildAncillariesTracking(
|
|||||||
productUnits: pkg.quantity,
|
productUnits: pkg.quantity,
|
||||||
productDeliveryTime: ancillaryDeliveryTime,
|
productDeliveryTime: ancillaryDeliveryTime,
|
||||||
productName: selectedAncillary?.title,
|
productName: selectedAncillary?.title,
|
||||||
productCategory: selectedAncillary?.categoryName,
|
productCategory: selectedAncillary?.translatedCategoryName,
|
||||||
...(payedWithCard && {
|
...(payedWithCard && {
|
||||||
productPrice: (selectedAncillary?.price.total ?? 0) * pkg.quantity,
|
productPrice: (selectedAncillary?.price.total ?? 0) * pkg.quantity,
|
||||||
currency: selectedAncillary?.price.currency,
|
currency: selectedAncillary?.price.currency,
|
||||||
@@ -194,7 +194,7 @@ export function trackViewAncillary(
|
|||||||
ancillary: SelectedAncillary,
|
ancillary: SelectedAncillary,
|
||||||
booking: Room
|
booking: Room
|
||||||
) {
|
) {
|
||||||
const { hotelId, id, title, categoryName } = ancillary
|
const { hotelId, id, title, translatedCategoryName } = ancillary
|
||||||
const isBreakfast = id === BreakfastPackageEnum.ANCILLARY_REGULAR_BREAKFAST
|
const isBreakfast = id === BreakfastPackageEnum.ANCILLARY_REGULAR_BREAKFAST
|
||||||
const hasPayingChildren = booking.childrenAges.some((age) => age >= 4)
|
const hasPayingChildren = booking.childrenAges.some((age) => age >= 4)
|
||||||
|
|
||||||
@@ -203,7 +203,7 @@ export function trackViewAncillary(
|
|||||||
hotelId,
|
hotelId,
|
||||||
productId: id,
|
productId: id,
|
||||||
productName: title,
|
productName: title,
|
||||||
productCategory: categoryName,
|
productCategory: translatedCategoryName,
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -212,7 +212,7 @@ export function trackViewAncillary(
|
|||||||
hotelId,
|
hotelId,
|
||||||
productId: BreakfastPackageEnum.ANCILLARY_CHILD_PAYING_BREAKFAST,
|
productId: BreakfastPackageEnum.ANCILLARY_CHILD_PAYING_BREAKFAST,
|
||||||
productName: title,
|
productName: title,
|
||||||
productCategory: categoryName,
|
productCategory: translatedCategoryName,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -283,7 +283,7 @@ export function trackAddAncillary(
|
|||||||
productUnits: quantityWithCard,
|
productUnits: quantityWithCard,
|
||||||
productPrice: (ancillary?.price.total ?? 0) * (quantityWithCard ?? 0),
|
productPrice: (ancillary?.price.total ?? 0) * (quantityWithCard ?? 0),
|
||||||
currency: ancillary?.price.currency,
|
currency: ancillary?.price.currency,
|
||||||
productCategory: ancillary?.categoryName,
|
productCategory: ancillary?.translatedCategoryName,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -294,7 +294,7 @@ export function trackAddAncillary(
|
|||||||
productName: ancillary?.title,
|
productName: ancillary?.title,
|
||||||
productUnits: quantityWithPoints,
|
productUnits: quantityWithPoints,
|
||||||
productPoints: (ancillary?.points ?? 0) * (quantityWithPoints ?? 0),
|
productPoints: (ancillary?.points ?? 0) * (quantityWithPoints ?? 0),
|
||||||
productCategory: ancillary?.categoryName,
|
productCategory: ancillary?.translatedCategoryName,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
trackEvent({
|
trackEvent({
|
||||||
|
|||||||
@@ -517,7 +517,8 @@ export const ancillaryPackagesSchema = z
|
|||||||
.transform(({ data }) =>
|
.transform(({ data }) =>
|
||||||
data.attributes.ancillaries
|
data.attributes.ancillaries
|
||||||
.map((ancillary) => ({
|
.map((ancillary) => ({
|
||||||
categoryName: ancillary.categoryName,
|
translatedCategoryName: ancillary.categoryName,
|
||||||
|
internalCategoryName: ancillary.internalCategoryName,
|
||||||
ancillaryContent: ancillary.ancillaryContent
|
ancillaryContent: ancillary.ancillaryContent
|
||||||
.filter((item) => item.status === "Available")
|
.filter((item) => item.status === "Available")
|
||||||
.map((item) => ({
|
.map((item) => ({
|
||||||
@@ -533,7 +534,8 @@ export const ancillaryPackagesSchema = z
|
|||||||
points: item.variants.ancillaryLoyalty?.points,
|
points: item.variants.ancillaryLoyalty?.points,
|
||||||
loyaltyCode: item.variants.ancillaryLoyalty?.code,
|
loyaltyCode: item.variants.ancillaryLoyalty?.code,
|
||||||
requiresDeliveryTime: item.requiresDeliveryTime,
|
requiresDeliveryTime: item.requiresDeliveryTime,
|
||||||
categoryName: ancillary.categoryName,
|
translatedCategoryName: ancillary.categoryName,
|
||||||
|
internalCategoryName: ancillary.internalCategoryName,
|
||||||
})),
|
})),
|
||||||
}))
|
}))
|
||||||
.filter((ancillary) => ancillary.ancillaryContent.length > 0)
|
.filter((ancillary) => ancillary.ancillaryContent.length > 0)
|
||||||
|
|||||||
@@ -65,5 +65,6 @@ export const breakfastPackageSchema = z.object({
|
|||||||
|
|
||||||
export const ancillaryPackageSchema = z.object({
|
export const ancillaryPackageSchema = z.object({
|
||||||
categoryName: z.string(),
|
categoryName: z.string(),
|
||||||
|
internalCategoryName: z.string(),
|
||||||
ancillaryContent: z.array(ancillaryContentSchema),
|
ancillaryContent: z.array(ancillaryContentSchema),
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user