Merged in chore/next15 (pull request #1999)
chore (SW-834): Upgrade to Next 15 * wip: apply codemod and upgrade swc plugin * wip: design-system to react 19, fix issues from async (search)params * wip: fix remaining issues from codemod serverClient is now async because context use headers() getLang is now async because it uses headers() * Minor cleanup * Inline react-material-symbols package Package is seemingly not maintained any more and doesn't support React 19. This copies the package source into `design-system`, makes the necessary changes for 19 and export it for others to use. * Fix missing awaits * Disable modal exit animations Enabling modal exit animations via isExiting prop is causing modals to be rendered in "hidden" state and never unmount. Seems to be an issue with react-aria-components, see https://github.com/adobe/react-spectrum/issues/7563. Can probably be fixed by rewriting to a solution similar to https://react-spectrum.adobe.com/react-aria/examples/framer-modal-sheet.html * Remove unstable cache implementation and use in memory cache locally * Fix ref type in SelectFilter * Use cloneElement to add key prop to element Approved-by: Linus Flood
This commit is contained in:
@@ -23,27 +23,32 @@ import type { GetHotelsByCSFilterInput } from "@/server/routers/hotels/input"
|
||||
import type { GetSavedPaymentCardsInput } from "@/server/routers/user/input"
|
||||
|
||||
export const getLocations = cache(async function getMemoizedLocations() {
|
||||
const lang = getLang()
|
||||
return serverClient().hotel.locations.get({ lang })
|
||||
const lang = await getLang()
|
||||
const caller = await serverClient()
|
||||
return caller.hotel.locations.get({ lang })
|
||||
})
|
||||
|
||||
export const getProfile = cache(async function getMemoizedProfile() {
|
||||
return serverClient().user.get()
|
||||
const caller = await serverClient()
|
||||
return caller.user.get()
|
||||
})
|
||||
|
||||
export const getName = cache(async function getMemoizedName() {
|
||||
return serverClient().user.name()
|
||||
const caller = await serverClient()
|
||||
return caller.user.name()
|
||||
})
|
||||
|
||||
export const getProfileSafely = cache(
|
||||
async function getMemoizedProfileSafely() {
|
||||
return serverClient().user.getSafely()
|
||||
const caller = await serverClient()
|
||||
return caller.user.getSafely()
|
||||
}
|
||||
)
|
||||
|
||||
export const getProfileWithExtendedPartnerData = cache(
|
||||
async function getMemoizedProfileWithPartnerData() {
|
||||
return serverClient().user.getWithExtendedPartnerData()
|
||||
const caller = await serverClient()
|
||||
return caller.user.getWithExtendedPartnerData()
|
||||
}
|
||||
)
|
||||
|
||||
@@ -51,32 +56,37 @@ export const getSavedPaymentCardsSafely = cache(
|
||||
async function getMemoizedSavedPaymentCardsSafely(
|
||||
input: GetSavedPaymentCardsInput
|
||||
) {
|
||||
return serverClient().user.safePaymentCards(input)
|
||||
const caller = await serverClient()
|
||||
return caller.user.safePaymentCards(input)
|
||||
}
|
||||
)
|
||||
|
||||
export const getMembershipLevel = cache(
|
||||
async function getMemoizedMembershipLevel() {
|
||||
return serverClient().user.membershipLevel()
|
||||
const caller = await serverClient()
|
||||
return caller.user.membershipLevel()
|
||||
}
|
||||
)
|
||||
|
||||
export const getMembershipLevelSafely = cache(
|
||||
async function getMemoizedMembershipLevelSafely() {
|
||||
return serverClient().user.safeMembershipLevel()
|
||||
const caller = await serverClient()
|
||||
return caller.user.safeMembershipLevel()
|
||||
}
|
||||
)
|
||||
|
||||
export const getMembershipCards = cache(
|
||||
async function getMemoizedMembershipCards() {
|
||||
return serverClient().user.membershipCards()
|
||||
const caller = await serverClient()
|
||||
return caller.user.membershipCards()
|
||||
}
|
||||
)
|
||||
|
||||
export const getHotelsByCSFilter = cache(async function getMemoizedHotels(
|
||||
input: GetHotelsByCSFilterInput
|
||||
) {
|
||||
return serverClient().hotel.hotels.byCSFilter.get(input)
|
||||
const caller = await serverClient()
|
||||
return caller.hotel.hotels.byCSFilter.get(input)
|
||||
})
|
||||
|
||||
export const getHotel = cache(async function getMemoizedHotelData(
|
||||
@@ -85,60 +95,71 @@ export const getHotel = cache(async function getMemoizedHotelData(
|
||||
if (!input.isCardOnlyPayment) {
|
||||
input.isCardOnlyPayment = false
|
||||
}
|
||||
return serverClient().hotel.get(input)
|
||||
const caller = await serverClient()
|
||||
return caller.hotel.get(input)
|
||||
})
|
||||
|
||||
export const getHotelPage = cache(async function getMemoizedHotelPage() {
|
||||
return serverClient().contentstack.hotelPage.get()
|
||||
const caller = await serverClient()
|
||||
return caller.contentstack.hotelPage.get()
|
||||
})
|
||||
|
||||
export const getFooter = cache(async function getMemoizedFooter() {
|
||||
return serverClient().contentstack.base.footer()
|
||||
const caller = await serverClient()
|
||||
return caller.contentstack.base.footer()
|
||||
})
|
||||
|
||||
export const getHeader = cache(async function getMemoizedHeader() {
|
||||
return serverClient().contentstack.base.header()
|
||||
const caller = await serverClient()
|
||||
return caller.contentstack.base.header()
|
||||
})
|
||||
|
||||
export const getCurrentHeader = cache(async function getMemoizedCurrentHeader(
|
||||
lang: Lang
|
||||
) {
|
||||
return serverClient().contentstack.base.currentHeader({ lang })
|
||||
const caller = await serverClient()
|
||||
return caller.contentstack.base.currentHeader({ lang })
|
||||
})
|
||||
|
||||
export const getCurrentFooter = cache(async function getMemoizedCurrentFooter(
|
||||
lang: Lang
|
||||
) {
|
||||
return serverClient().contentstack.base.currentFooter({ lang })
|
||||
const caller = await serverClient()
|
||||
return caller.contentstack.base.currentFooter({ lang })
|
||||
})
|
||||
|
||||
export const getSiteConfig = cache(async function getMemoizedSiteConfig(
|
||||
lang: Lang
|
||||
) {
|
||||
return serverClient().contentstack.base.siteConfig({ lang })
|
||||
const caller = await serverClient()
|
||||
return caller.contentstack.base.siteConfig({ lang })
|
||||
})
|
||||
|
||||
export const getBreakfastPackages = cache(
|
||||
async function getMemoizedBreakfastPackages(input: BreackfastPackagesInput) {
|
||||
return serverClient().hotel.packages.breakfast(input)
|
||||
const caller = await serverClient()
|
||||
return caller.hotel.packages.breakfast(input)
|
||||
}
|
||||
)
|
||||
|
||||
export const getAncillaryPackages = cache(
|
||||
async function getMemoizedAncillaryPackages(input: AncillaryPackagesInput) {
|
||||
return serverClient().hotel.packages.ancillary(input)
|
||||
const caller = await serverClient()
|
||||
return caller.hotel.packages.ancillary(input)
|
||||
}
|
||||
)
|
||||
|
||||
export const getPackages = cache(async function getMemoizedPackages(
|
||||
input: PackagesInput
|
||||
) {
|
||||
return serverClient().hotel.packages.get(input)
|
||||
const caller = await serverClient()
|
||||
return caller.hotel.packages.get(input)
|
||||
})
|
||||
|
||||
export const getBookingConfirmation = cache(
|
||||
async function getMemoizedBookingConfirmation(refId: string) {
|
||||
return serverClient().booking.get({ refId })
|
||||
const caller = await serverClient()
|
||||
return caller.booking.get({ refId })
|
||||
}
|
||||
)
|
||||
|
||||
@@ -148,7 +169,8 @@ export const findBooking = cache(async function getMemoizedFindBooking(
|
||||
firstName: string,
|
||||
email: string
|
||||
) {
|
||||
return serverClient().booking.findBooking({
|
||||
const caller = await serverClient()
|
||||
return caller.booking.findBooking({
|
||||
confirmationNumber,
|
||||
lastName,
|
||||
firstName,
|
||||
@@ -158,7 +180,8 @@ export const findBooking = cache(async function getMemoizedFindBooking(
|
||||
|
||||
export const getLinkedReservations = cache(
|
||||
async function getMemoizedLinkedReservations(refId: string) {
|
||||
return serverClient().booking.linkedReservations({
|
||||
const caller = await serverClient()
|
||||
return caller.booking.linkedReservations({
|
||||
refId,
|
||||
})
|
||||
}
|
||||
@@ -166,13 +189,15 @@ export const getLinkedReservations = cache(
|
||||
|
||||
export const getCityCoordinates = cache(
|
||||
async function getMemoizedCityCoordinates(input: CityCoordinatesInput) {
|
||||
return serverClient().hotel.map.city(input)
|
||||
const caller = await serverClient()
|
||||
return caller.hotel.map.city(input)
|
||||
}
|
||||
)
|
||||
|
||||
export const getCurrentRewards = cache(
|
||||
async function getMemoizedCurrentRewards() {
|
||||
return serverClient().contentstack.rewards.current()
|
||||
const caller = await serverClient()
|
||||
return caller.contentstack.rewards.current()
|
||||
}
|
||||
)
|
||||
|
||||
@@ -181,7 +206,8 @@ export const getMeetingRooms = cache(
|
||||
hotelId: string
|
||||
language: Lang
|
||||
}) {
|
||||
return serverClient().hotel.meetingRooms(input)
|
||||
const caller = await serverClient()
|
||||
return caller.hotel.meetingRooms(input)
|
||||
}
|
||||
)
|
||||
|
||||
@@ -190,71 +216,82 @@ export const getAdditionalData = cache(
|
||||
hotelId: string
|
||||
language: Lang
|
||||
}) {
|
||||
return serverClient().hotel.additionalData(input)
|
||||
const caller = await serverClient()
|
||||
return caller.hotel.additionalData(input)
|
||||
}
|
||||
)
|
||||
|
||||
export const getDestinationOverviewPage = cache(
|
||||
async function getMemoizedDestinationOverviewPage() {
|
||||
return serverClient().contentstack.destinationOverviewPage.get()
|
||||
const caller = await serverClient()
|
||||
return caller.contentstack.destinationOverviewPage.get()
|
||||
}
|
||||
)
|
||||
|
||||
export const getDestinationsList = cache(
|
||||
async function getMemoizedDestinationsList() {
|
||||
return serverClient().contentstack.destinationOverviewPage.destinations.get()
|
||||
const caller = await serverClient()
|
||||
return caller.contentstack.destinationOverviewPage.destinations.get()
|
||||
}
|
||||
)
|
||||
export const getDestinationCountryPage = cache(
|
||||
async function getMemoizedDestinationCountryPage() {
|
||||
return serverClient().contentstack.destinationCountryPage.get()
|
||||
const caller = await serverClient()
|
||||
return caller.contentstack.destinationCountryPage.get()
|
||||
}
|
||||
)
|
||||
export const getDestinationCityPagesByCountry = cache(
|
||||
async function getMemoizedDestinationCityPagesByCountry(country: Country) {
|
||||
return serverClient().contentstack.destinationCountryPage.cityPages({
|
||||
const caller = await serverClient()
|
||||
return caller.contentstack.destinationCountryPage.cityPages({
|
||||
country,
|
||||
})
|
||||
}
|
||||
)
|
||||
export const getHotelsByCountry = cache(
|
||||
async function getMemoizedHotelsByCountry(country: Country) {
|
||||
return serverClient().hotel.hotels.byCountry.get({
|
||||
const caller = await serverClient()
|
||||
return caller.hotel.hotels.byCountry.get({
|
||||
country,
|
||||
})
|
||||
}
|
||||
)
|
||||
export const getHotelsByCityIdentifier = cache(
|
||||
async function getMemoizedHotelsByCityIdentifier(cityIdentifier: string) {
|
||||
return serverClient().hotel.hotels.byCityIdentifier.get({
|
||||
const caller = await serverClient()
|
||||
return caller.hotel.hotels.byCityIdentifier.get({
|
||||
cityIdentifier,
|
||||
})
|
||||
}
|
||||
)
|
||||
export const getDestinationsMapData = cache(
|
||||
async function getMemoizedDestinationsMapData() {
|
||||
return serverClient().hotel.hotels.getDestinationsMapData()
|
||||
const caller = await serverClient()
|
||||
return caller.hotel.hotels.getDestinationsMapData()
|
||||
}
|
||||
)
|
||||
export const getDestinationCityPage = cache(
|
||||
async function getMemoizedDestinationCityPage() {
|
||||
return serverClient().contentstack.destinationCityPage.get()
|
||||
const caller = await serverClient()
|
||||
return caller.contentstack.destinationCityPage.get()
|
||||
}
|
||||
)
|
||||
|
||||
export const getStartPage = cache(async function getMemoizedStartPage() {
|
||||
return serverClient().contentstack.startPage.get()
|
||||
const caller = await serverClient()
|
||||
return caller.contentstack.startPage.get()
|
||||
})
|
||||
|
||||
export const getPageSettings = cache(async function getMemoizedPageSettings(
|
||||
lang: Lang
|
||||
) {
|
||||
return serverClient().contentstack.pageSettings.get({ lang })
|
||||
const caller = await serverClient()
|
||||
return caller.contentstack.pageSettings.get({ lang })
|
||||
})
|
||||
|
||||
export const isBookingWidgetHidden = cache(
|
||||
async function isMemoizedBookingWidgetHidden() {
|
||||
const lang = getLang()
|
||||
const lang = await getLang()
|
||||
const [pageSettingsResult, siteConfigResults] = await Promise.allSettled([
|
||||
getPageSettings(lang),
|
||||
getSiteConfig(lang),
|
||||
@@ -277,21 +314,23 @@ export const isBookingWidgetHidden = cache(
|
||||
|
||||
export const getPageSettingsBookingCode = cache(
|
||||
async function getMemoizedPageSettingsBookingCode() {
|
||||
const lang = getLang()
|
||||
const lang = await getLang()
|
||||
const pageSettings = await getPageSettings(lang)
|
||||
return pageSettings?.page.settings.booking_code ?? ""
|
||||
}
|
||||
)
|
||||
|
||||
export const getJobylonFeed = cache(async function getMemoizedJobylonFeed() {
|
||||
return serverClient().partner.jobylon.feed.get()
|
||||
const caller = await serverClient()
|
||||
return caller.partner.jobylon.feed.get()
|
||||
})
|
||||
|
||||
export const getJumpToData = cache(async function getMemoizedJumpToData() {
|
||||
const lang = getLang()
|
||||
const lang = await getLang()
|
||||
const caller = await serverClient()
|
||||
const [locationsResults, urlsResults] = await Promise.allSettled([
|
||||
getLocations(),
|
||||
serverClient().hotel.locations.urls({ lang }),
|
||||
caller.hotel.locations.urls({ lang }),
|
||||
])
|
||||
|
||||
if (
|
||||
@@ -367,7 +406,8 @@ export const getSelectedRoomsAvailabilityEnterDetails = cache(
|
||||
async function getMemoizedSelectedRoomsAvailability(
|
||||
input: RoomsAvailabilityExtendedInputSchema
|
||||
) {
|
||||
const result = await serverClient().hotel.availability.enterDetails(input)
|
||||
const caller = await serverClient()
|
||||
const result = await caller.hotel.availability.enterDetails(input)
|
||||
|
||||
if (typeof result === "string") {
|
||||
redirect(result)
|
||||
|
||||
@@ -11,8 +11,9 @@ import { createCallerFactory } from "@/server/trpc"
|
||||
|
||||
const createCaller = createCallerFactory(appRouter)
|
||||
|
||||
export function serverClient() {
|
||||
return createCaller(createContext(), {
|
||||
export async function serverClient() {
|
||||
const ctx = await createContext()
|
||||
return createCaller(ctx, {
|
||||
onError: ({ ctx, error, input, path, type }) => {
|
||||
console.error(`[serverClient] error for ${type}: ${path}`, error)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user