--- import Layout from "../layouts/Layout.astro"; import { getBrandsByLangSlug, getLocaleField, getPagesByLangSlug, getProductCategoriesByLangSlug, getSite, getSlugByLangSlug, getSiteConfig, getSiteHomePage, getPagesByIds, getMarketplacesByLangSlug, getProductsByLangSlug, getSellersByLangSlug, getRedirectsByPreviousSlug } from "../data/api-client"; import { genericPageForBrand, genericPageForMarketplace, genericPageForProduct, genericPageForProductCategory, genericPageForSeller } from "../lib/page-from-models"; import { SupportedLocales } from "../data/internals/LocalizedT"; import { SCHEMAS } from "../data/models/schemas"; import type { Brand } from "../data/models/multis/Brand"; import type { Page } from "../data/models/multis/Page"; import type { ProductCategory } from "../data/models/multis/ProductCategory"; import type { Site } from "../data/models/singles/Site"; import type { Slug } from "../data/models/multis/Slug"; import type { SiteConfig } from "../data/models/singles/SiteConfig"; import { pick as pickLanguage } from "../lib/accept-language-parser"; import { localeUrlTestPatterns, overrideLocaleFromUrl, localeFromLang } from "../lib/locales"; import Banner from "../components/Banner.astro"; import ComponentRouter from "../components/ComponentRouter.astro"; import { renderMarkdown } from "../lib/rendering"; import Disclaimers from "../components/Disclaimers.astro"; import { client, TIMEOUT_IN_SECONDS } from "../data/core/client"; const { routeLookup, resource, id } = Astro.params; const isSiteHomepage = (url?: string) => !url || url === '/'; const isLocaleHomepage = (url: string) => { for (let t = 0; t < localeUrlTestPatterns.length; t++) { if (url === localeUrlTestPatterns[t] || url === `${localeUrlTestPatterns[t]}/`) { return true; } } return false; } const locale = overrideLocaleFromUrl(routeLookup!, localeFromLang(pickLanguage(['en', 'es', 'fr'], Astro.request.headers.get('Accept-Language')||'en-US', { loose: true })||'en')); const siteConfigDto = await getSiteConfig(); const siteConfig = siteConfigDto.items[0].data!; const siteDto = await getSite(); const site = siteDto.items[0].data!; const siteEditToken = siteDto.items[0].editToken; let isHomePage: boolean = false; let homePageDto = await getSiteHomePage(site); let homePage: Page = homePageDto.items[0].data!; let homePageId = homePageDto.items[0].id; let pageDto; let page: Page; let brandDto; let productCategory; let brand: Brand|undefined; let pageEditToken: string; if (isSiteHomepage(routeLookup)) { Astro.response.headers.set('Vary', 'Accept-Language'); return Astro.redirect(`${locale}/`, 303); } Astro.response.headers.set('Content-Type', 'text/html; charset=utf-8'); const redirect404NotFound = () => { return Astro.rewrite(`${locale}/404/`); } if (isLocaleHomepage(routeLookup!)) { isHomePage = true; pageDto = homePageDto; page = homePage; pageEditToken = homePageDto.items[0].editToken!; } else { const slugDto = await getSlugByLangSlug(locale, routeLookup!); if (slugDto && slugDto.items && slugDto.items.length > 0) { let objectId = (slugDto.items[0].data as unknown as any as Slug).reference.iv[0] switch (slugDto.items[0].data?.referenceSchema.iv) { case SCHEMAS.BRANDS: return Astro.rewrite(`/view/brands/${locale}/${objectId}`); case SCHEMAS.MARKETPLACES: return Astro.rewrite(`/view/marketplaces/${locale}/${objectId}`); case SCHEMAS.PAGES: return Astro.rewrite(`/view/pages/${locale}/${objectId}`); case SCHEMAS.PRODUCT_CATEGORIES: return Astro.rewrite(`/view/product-categories/${locale}/${objectId}`); case SCHEMAS.PRODUCTS: return Astro.rewrite(`/view/products/${locale}/${objectId}`); case SCHEMAS.SELLERS: return Astro.rewrite(`/view/sellers/${locale}/${objectId}`); } } console.log("routeLookup:", routeLookup!); const redirectDto = await getRedirectsByPreviousSlug(routeLookup!); console.log("redirectDto:", redirectDto); if (redirectDto && redirectDto.items && redirectDto.items.length > 0) { console.log("getting redirectReferencesDto for", SCHEMAS.REDIRECTS, redirectDto.items[0].id); //next line crashes: let redirectReferencesDto = await client.contents.getReferences({ schema: SCHEMAS.REDIRECTS, id: redirectDto.items[0].id }); console.log("redirectReferencesDto:", redirectReferencesDto); // client.contents.getConten // switch (redirectDto.items[0].data?.referenceSchema.iv) { // case SCHEMAS.BRANDS: // return Astro.rewrite(`/view/brands/${locale}/${objectId}`); // case SCHEMAS.MARKETPLACES: // return Astro.rewrite(`/view/marketplaces/${locale}/${objectId}`); // case SCHEMAS.PAGES: // return Astro.rewrite(`/view/pages/${locale}/${objectId}`); // case SCHEMAS.PRODUCT_CATEGORIES: // return Astro.rewrite(`/view/product-categories/${locale}/${objectId}`); // case SCHEMAS.PRODUCTS: // return Astro.rewrite(`/view/products/${locale}/${objectId}`); // case SCHEMAS.SELLERS: // return Astro.rewrite(`/view/sellers/${locale}/${objectId}`); // } // Astro.response.headers.set('Vary', 'Accept-Language'); // return Astro.redirect(,303) } return redirect404NotFound(); } if (!page) { //this code can never be reached, but if it can be reached then the compiler //will let me know all return branches for setting page weren't handled //so leave it here: return redirect404NotFound(); } const title = getLocaleField(locale, page?.title)||''; const metaDescription = getLocaleField(locale, page?.seo)?.metaDescription || ''; const siteName = getLocaleField(locale, site.siteName); const pageContent = getLocaleField(locale, page?.content)!; const shouldEmbedSquidexSDK = import.meta.env.MODE === 'development'; const renderContext = { ...Astro.params, title, metaDescription, siteName, pageComponents: pageContent, page, site, isHomePage, isLocaleHomepage: isLocaleHomepage(routeLookup!), shouldEmbedSquidexSDK, } --- { metaDescription && } { Object.entries(SupportedLocales).map((supportedLanguage) => { return ( ); }) }