feat(SW-717) make reduce more understandable

This commit is contained in:
Pontus Dreij
2025-02-07 08:31:40 +01:00
parent e00cea4646
commit dcd45ee31d
3 changed files with 37 additions and 22 deletions

View File

@@ -6,6 +6,7 @@ import { getIntl } from "@/i18n"
import { safeTry } from "@/utils/safeTry"
import { generateChildrenString } from "../../utils"
import { combineRoomAvailabilities } from "./utils"
import styles from "./NoRoomsAlert.module.css"
@@ -51,23 +52,9 @@ export async function NoRoomsAlert({
const roomsAvailabilityResults = await Promise.all(roomsAvailabilityPromises)
const roomsAvailability = roomsAvailabilityResults.reduce<
(typeof roomsAvailabilityResults)[0][0]
>((acc, [result, error]) => {
if (error) {
console.error("[RoomsContainer] unable to fetch room availability")
return acc
}
if (!acc) return result
if (!result) return acc
return {
...result,
roomConfigurations: [
...acc.roomConfigurations,
...result.roomConfigurations,
],
}
}, null)
const roomsAvailability = combineRoomAvailabilities({
availabilityResults: roomsAvailabilityResults,
})
if (!roomsAvailability) {
return null

View File

@@ -0,0 +1,23 @@
import type { RoomsAvailability } from "@/server/routers/hotels/output"
export function combineRoomAvailabilities({
availabilityResults,
}: {
availabilityResults: Array<[RoomsAvailability | undefined | null, unknown]>
}): RoomsAvailability | null {
return availabilityResults.reduce<RoomsAvailability | null>(
(combinedResult, [currentResult, error]) => {
if (error || !currentResult) return combinedResult
if (!combinedResult) return currentResult
return {
...currentResult,
roomConfigurations: [
...combinedResult.roomConfigurations,
...currentResult.roomConfigurations,
],
}
},
null
)
}

View File

@@ -8,12 +8,17 @@ import type { RoomConfiguration } from "@/types/trpc/routers/hotel/roomAvailabil
export function filterDuplicateRoomTypesByLowestPrice(
roomConfigurations: RoomConfiguration[]
): RoomConfiguration[] {
const roomTypeCount = roomConfigurations.reduce(
(acc, room) => {
acc[room.roomType] = (acc[room.roomType] || 0) + 1
return acc
const roomTypeCount = roomConfigurations.reduce<Record<string, number>>(
(roomTypeTally, currentRoom) => {
const currentRoomType = currentRoom.roomType
const currentCount = roomTypeTally[currentRoomType] || 0
return {
...roomTypeTally,
[currentRoomType]: currentCount + 1,
}
},
{} as Record<string, number>
{}
)
const duplicateRoomTypes = new Set(