Chore/cleanup after trpc migration * Clean up TODOs * Rename REDEMPTION constant to SEARCH_TYPE_REDEMPTION * Update dependencies Remove unused deps from scandic-web Add missing deps to trpc package * Update self-referencing imports * Remove unused variables from scandic-web env * Fix missing graphql-tag package * Actually fix * Remove unused env var Approved-by: Christian Andolf Approved-by: Linus Flood
204 lines
6.3 KiB
TypeScript
204 lines
6.3 KiB
TypeScript
import { Lang } from "@scandic-hotels/common/constants/language"
|
|
import { createCounter } from "@scandic-hotels/common/telemetry"
|
|
import { removeTrailingSlash } from "@scandic-hotels/common/utils/url"
|
|
|
|
import { PageContentTypeEnum } from "../../../enums/contentType"
|
|
import { internalServerError } from "../../../errors"
|
|
import { batchRequest } from "../../../graphql/batchRequest"
|
|
import {
|
|
GetDaDeEnUrlsAccountPage,
|
|
GetFiNoSvUrlsAccountPage,
|
|
} from "../../../graphql/Query/AccountPage/AccountPage.graphql"
|
|
import {
|
|
GetDaDeEnUrlsCampaignOverviewPage,
|
|
GetFiNoSvUrlsCampaignOverviewPage,
|
|
} from "../../../graphql/Query/CampaignOverviewPage/CampaignOverviewPage.graphql"
|
|
import {
|
|
GetDaDeEnUrlsCampaignPage,
|
|
GetFiNoSvUrlsCampaignPage,
|
|
} from "../../../graphql/Query/CampaignPage/CampaignPage.graphql"
|
|
import {
|
|
GetDaDeEnUrlsCollectionPage,
|
|
GetFiNoSvUrlsCollectionPage,
|
|
} from "../../../graphql/Query/CollectionPage/CollectionPage.graphql"
|
|
import {
|
|
GetDaDeEnUrlsContentPage,
|
|
GetFiNoSvUrlsContentPage,
|
|
} from "../../../graphql/Query/ContentPage/ContentPage.graphql"
|
|
import {
|
|
GetDaDeEnUrlsCurrentBlocksPage,
|
|
GetFiNoSvUrlsCurrentBlocksPage,
|
|
} from "../../../graphql/Query/Current/LanguageSwitcher.graphql"
|
|
import {
|
|
GetDaDeEnUrlsDestinationCityPage,
|
|
GetFiNoSvUrlsDestinationCityPage,
|
|
} from "../../../graphql/Query/DestinationCityPage/DestinationCityPage.graphql"
|
|
import {
|
|
GetDaDeEnUrlsDestinationCountryPage,
|
|
GetFiNoSvUrlsDestinationCountryPage,
|
|
} from "../../../graphql/Query/DestinationCountryPage/DestinationCountryPage.graphql"
|
|
import {
|
|
GetDaDeEnUrlsDestinationOverviewPage,
|
|
GetFiNoSvUrlsDestinationOverviewPage,
|
|
} from "../../../graphql/Query/DestinationOverviewPage/DestinationOverviewPage.graphql"
|
|
import {
|
|
GetDaDeEnUrlsHotelPage,
|
|
GetFiNoSvUrlsHotelPage,
|
|
} from "../../../graphql/Query/HotelPage/HotelPage.graphql"
|
|
import {
|
|
GetDaDeEnUrlsLoyaltyPage,
|
|
GetFiNoSvUrlsLoyaltyPage,
|
|
} from "../../../graphql/Query/LoyaltyPage/LoyaltyPage.graphql"
|
|
import {
|
|
GetDaDeEnUrlsStartPage,
|
|
GetFiNoSvUrlsStartPage,
|
|
} from "../../../graphql/Query/StartPage/StartPage.graphql"
|
|
import { generateTag } from "../../../utils/generateTag"
|
|
import { validateLanguageSwitcherData } from "./output"
|
|
|
|
import type {
|
|
LanguageSwitcherData,
|
|
LanguageSwitcherQueryDataRaw,
|
|
} from "../../../types/languageSwitcher"
|
|
|
|
export const languageSwitcherAffix = "languageSwitcher"
|
|
|
|
export async function getUrlsOfAllLanguages(
|
|
lang: Lang,
|
|
uid: string,
|
|
contentType: string
|
|
) {
|
|
const getLanguageSwitcherCounter = createCounter(
|
|
"trpc.contentstack",
|
|
"languageSwitcher.get"
|
|
)
|
|
const metricsGetLanguageSwitcher = getLanguageSwitcherCounter.init({
|
|
lang,
|
|
uid,
|
|
contentType,
|
|
})
|
|
|
|
metricsGetLanguageSwitcher.start()
|
|
|
|
const variables = { uid }
|
|
const tagsDaDeEn = [
|
|
generateTag(Lang.da, uid, languageSwitcherAffix),
|
|
generateTag(Lang.de, uid, languageSwitcherAffix),
|
|
generateTag(Lang.en, uid, languageSwitcherAffix),
|
|
]
|
|
const tagsFiNoSv = [
|
|
generateTag(Lang.fi, uid, languageSwitcherAffix),
|
|
generateTag(Lang.no, uid, languageSwitcherAffix),
|
|
generateTag(Lang.sv, uid, languageSwitcherAffix),
|
|
]
|
|
let daDeEnDocument = null
|
|
let fiNoSvDocument = null
|
|
switch (contentType) {
|
|
case PageContentTypeEnum.accountPage:
|
|
daDeEnDocument = GetDaDeEnUrlsAccountPage
|
|
fiNoSvDocument = GetFiNoSvUrlsAccountPage
|
|
break
|
|
case PageContentTypeEnum.currentBlocksPage:
|
|
daDeEnDocument = GetDaDeEnUrlsCurrentBlocksPage
|
|
fiNoSvDocument = GetFiNoSvUrlsCurrentBlocksPage
|
|
break
|
|
case PageContentTypeEnum.campaignOverviewPage:
|
|
daDeEnDocument = GetDaDeEnUrlsCampaignOverviewPage
|
|
fiNoSvDocument = GetFiNoSvUrlsCampaignOverviewPage
|
|
break
|
|
case PageContentTypeEnum.campaignPage:
|
|
daDeEnDocument = GetDaDeEnUrlsCampaignPage
|
|
fiNoSvDocument = GetFiNoSvUrlsCampaignPage
|
|
break
|
|
case PageContentTypeEnum.loyaltyPage:
|
|
daDeEnDocument = GetDaDeEnUrlsLoyaltyPage
|
|
fiNoSvDocument = GetFiNoSvUrlsLoyaltyPage
|
|
break
|
|
case PageContentTypeEnum.hotelPage:
|
|
daDeEnDocument = GetDaDeEnUrlsHotelPage
|
|
fiNoSvDocument = GetFiNoSvUrlsHotelPage
|
|
break
|
|
case PageContentTypeEnum.contentPage:
|
|
daDeEnDocument = GetDaDeEnUrlsContentPage
|
|
fiNoSvDocument = GetFiNoSvUrlsContentPage
|
|
break
|
|
case PageContentTypeEnum.collectionPage:
|
|
daDeEnDocument = GetDaDeEnUrlsCollectionPage
|
|
fiNoSvDocument = GetFiNoSvUrlsCollectionPage
|
|
break
|
|
case PageContentTypeEnum.destinationOverviewPage:
|
|
daDeEnDocument = GetDaDeEnUrlsDestinationOverviewPage
|
|
fiNoSvDocument = GetFiNoSvUrlsDestinationOverviewPage
|
|
break
|
|
case PageContentTypeEnum.destinationCountryPage:
|
|
daDeEnDocument = GetDaDeEnUrlsDestinationCountryPage
|
|
fiNoSvDocument = GetFiNoSvUrlsDestinationCountryPage
|
|
break
|
|
case PageContentTypeEnum.destinationCityPage:
|
|
daDeEnDocument = GetDaDeEnUrlsDestinationCityPage
|
|
fiNoSvDocument = GetFiNoSvUrlsDestinationCityPage
|
|
break
|
|
case PageContentTypeEnum.startPage:
|
|
daDeEnDocument = GetDaDeEnUrlsStartPage
|
|
fiNoSvDocument = GetFiNoSvUrlsStartPage
|
|
break
|
|
default:
|
|
console.error(`type: [${contentType}]`)
|
|
console.error(`Trying to get a content type that is not supported`)
|
|
throw internalServerError()
|
|
}
|
|
|
|
if (!daDeEnDocument || !fiNoSvDocument) {
|
|
throw internalServerError()
|
|
}
|
|
|
|
const response = await batchRequest<LanguageSwitcherQueryDataRaw>([
|
|
{
|
|
document: daDeEnDocument,
|
|
variables,
|
|
cacheOptions: {
|
|
ttl: "max",
|
|
key: tagsDaDeEn,
|
|
},
|
|
},
|
|
{
|
|
document: fiNoSvDocument,
|
|
variables,
|
|
cacheOptions: {
|
|
ttl: "max",
|
|
key: tagsFiNoSv,
|
|
},
|
|
},
|
|
])
|
|
|
|
const urls = Object.keys(response.data).reduce<LanguageSwitcherData>(
|
|
(acc, key) => {
|
|
const item = response.data[key as Lang]
|
|
|
|
const url = item
|
|
? item.web?.original_url || removeTrailingSlash(`/${key}${item.url}`)
|
|
: undefined
|
|
|
|
return {
|
|
...acc,
|
|
[key]: { url, isExternal: !!item?.web?.original_url },
|
|
}
|
|
},
|
|
{}
|
|
)
|
|
|
|
const validatedLanguageSwitcherData =
|
|
validateLanguageSwitcherData.safeParse(urls)
|
|
|
|
if (!validatedLanguageSwitcherData.success) {
|
|
metricsGetLanguageSwitcher.validationError(
|
|
validatedLanguageSwitcherData.error
|
|
)
|
|
return null
|
|
}
|
|
|
|
metricsGetLanguageSwitcher.success()
|
|
|
|
return urls
|
|
}
|