From 8eedf418796da69423b0c071d109660f6b740591 Mon Sep 17 00:00:00 2001 From: Catalin Pinte <1243434+cond0r@users.noreply.github.com> Date: Mon, 12 Sep 2022 20:36:07 +0300 Subject: [PATCH] Fix paths --- packages/bigcommerce/src/api/operations/get-product.ts | 2 +- packages/bigcommerce/src/lib/normalize.ts | 1 + packages/commerce/src/api/utils/with-schema-parser.ts | 4 ++-- packages/commerce/src/schemas/page.ts | 4 ++-- packages/commerce/src/schemas/product.ts | 6 +++--- packages/commercejs/src/utils/normalize-product.ts | 2 +- packages/saleor/src/api/operations/get-all-pages.ts | 10 +++++----- packages/sfcc/src/api/utils/normalise-product.ts | 2 ++ packages/spree/src/api/operations/get-site-info.ts | 2 +- packages/vendure/src/api/operations/get-product.ts | 1 + packages/vendure/src/api/operations/get-site-info.ts | 4 ++-- packages/vendure/src/utils/normalize.ts | 2 +- 12 files changed, 22 insertions(+), 18 deletions(-) diff --git a/packages/bigcommerce/src/api/operations/get-product.ts b/packages/bigcommerce/src/api/operations/get-product.ts index c7457de2a..9a5691d82 100644 --- a/packages/bigcommerce/src/api/operations/get-product.ts +++ b/packages/bigcommerce/src/api/operations/get-product.ts @@ -100,7 +100,7 @@ export default function getAllProductPathsOperation({ const variables: GetProductQueryVariables = { locale, hasLocale: !!locale, - path: slug ? `/${slug}/` : vars.path!, + path: slug ? `/${slug}` : vars.path!, } const { data } = await config.fetch(query, { variables }) const product = data.site?.route?.node diff --git a/packages/bigcommerce/src/lib/normalize.ts b/packages/bigcommerce/src/lib/normalize.ts index 88b34835b..36e6646b6 100644 --- a/packages/bigcommerce/src/lib/normalize.ts +++ b/packages/bigcommerce/src/lib/normalize.ts @@ -76,6 +76,7 @@ export function normalizePage(page: definitions['page_Full']): Page { is_visible: page.is_visible, sort_order: page.sort_order, body: page.body ?? '', + url: page.url, } } diff --git a/packages/commerce/src/api/utils/with-schema-parser.ts b/packages/commerce/src/api/utils/with-schema-parser.ts index d4538bca6..fad918141 100644 --- a/packages/commerce/src/api/utils/with-schema-parser.ts +++ b/packages/commerce/src/api/utils/with-schema-parser.ts @@ -24,7 +24,7 @@ export const withSchemaParser = const parse = (operation: AllowedOperations, data: OperationsData) => { switch (operation) { case 'getProduct': - productSchema.parse(data.product) + productSchema.nullable().parse(data.product) break case 'getAllProducts': @@ -36,7 +36,7 @@ const parse = (operation: AllowedOperations, data: OperationsData) => { break case 'getPage': - pageSchema.parse(data.page) + pageSchema.nullable().parse(data.page) break case 'getAllPages': diff --git a/packages/commerce/src/schemas/page.ts b/packages/commerce/src/schemas/page.ts index 4e87b8536..5dfd175e1 100644 --- a/packages/commerce/src/schemas/page.ts +++ b/packages/commerce/src/schemas/page.ts @@ -3,7 +3,7 @@ import { z } from 'zod' export const pageSchema = z.object({ id: z.string(), name: z.string(), - url: z.string().startsWith('/'), + url: z.string().startsWith('/').optional(), body: z.string(), is_visible: z.boolean().optional(), sort_order: z.number().optional(), @@ -12,7 +12,7 @@ export const pageSchema = z.object({ export const pagesPathsSchema = z.array( z.object({ page: z.object({ - path: z.string(), + path: z.string().startsWith('/'), }), }) ) diff --git a/packages/commerce/src/schemas/product.ts b/packages/commerce/src/schemas/product.ts index 5a17d6763..ca02158e9 100644 --- a/packages/commerce/src/schemas/product.ts +++ b/packages/commerce/src/schemas/product.ts @@ -26,8 +26,8 @@ export const productImageSchema = z.object({ export const productVariantSchema = z.object({ id: z.string(), - sku: z.string().optional(), - name: z.string(), + sku: z.string().nullish(), + name: z.string().optional(), options: z.array(productOptionSchema), image: productImageSchema.optional(), }) @@ -37,7 +37,7 @@ export const productSchema = z.object({ name: z.string(), description: z.string(), descriptionHtml: z.string().optional(), - sku: z.string().optional(), + sku: z.string().nullish(), slug: z.string(), path: z.string().startsWith('/'), images: z.array(productImageSchema), diff --git a/packages/commercejs/src/utils/normalize-product.ts b/packages/commercejs/src/utils/normalize-product.ts index f35cfed12..2c8a5654a 100644 --- a/packages/commercejs/src/utils/normalize-product.ts +++ b/packages/commercejs/src/utils/normalize-product.ts @@ -63,7 +63,7 @@ export function normalizeProduct( description, descriptionHtml: description, slug: permalink, - path: permalink, + path: `/${permalink}`, images: assets.map(({ url, description, filename }) => ({ url, alt: description || filename, diff --git a/packages/saleor/src/api/operations/get-all-pages.ts b/packages/saleor/src/api/operations/get-all-pages.ts index ff0b65ee3..e53cc8f31 100644 --- a/packages/saleor/src/api/operations/get-all-pages.ts +++ b/packages/saleor/src/api/operations/get-all-pages.ts @@ -37,15 +37,15 @@ export default function getAllPagesOperation({ } ) - const pages = data?.pages?.edges?.map( - ({ node: { title: name, slug, ...node } }: PageCountableEdge) => - ({ + const pages = + data?.pages?.edges?.map( + ({ node: { title: name, slug, ...node } }: PageCountableEdge) => ({ id: node.id, url: `/${locale}/${slug}`, body: node.content || '', name, - } ?? []) - ) + }) + ) ?? [] return { pages } } diff --git a/packages/sfcc/src/api/utils/normalise-product.ts b/packages/sfcc/src/api/utils/normalise-product.ts index 2139111af..c41dd45ab 100644 --- a/packages/sfcc/src/api/utils/normalise-product.ts +++ b/packages/sfcc/src/api/utils/normalise-product.ts @@ -57,6 +57,7 @@ export function normalizeProduct( // TODO: use `name-ID` as a virtual slug (for search 1:1) slug: product.id, // use product ID as a slug name: product.name!, + path: `/${product.id}`, description: product.longDescription!, price: { value: product.price!, @@ -77,6 +78,7 @@ export function normalizeSearchProducts( return products.map((product) => ({ id: product.productId, slug: product.productId, // use product ID as a slug + path: `/${product.productId}`, name: product.productName!, description: '', price: { diff --git a/packages/spree/src/api/operations/get-site-info.ts b/packages/spree/src/api/operations/get-site-info.ts index e9d47fc7d..a389a666d 100644 --- a/packages/spree/src/api/operations/get-site-info.ts +++ b/packages/spree/src/api/operations/get-site-info.ts @@ -111,7 +111,7 @@ export default function getSiteInfoOperation({ id: spreeTaxon.id, name: spreeTaxon.attributes.name, slug: spreeTaxon.id, - path: spreeTaxon.id, + path: `/${spreeTaxon.id}`, } }) diff --git a/packages/vendure/src/api/operations/get-product.ts b/packages/vendure/src/api/operations/get-product.ts index 6b58e9694..93fb50f1e 100644 --- a/packages/vendure/src/api/operations/get-product.ts +++ b/packages/vendure/src/api/operations/get-product.ts @@ -33,6 +33,7 @@ export default function getProductOperation({ name: product.name, description: product.description, slug: product.slug, + path: `/${product.slug}`, images: product.assets.map((a) => ({ url: a.preview, alt: a.name, diff --git a/packages/vendure/src/api/operations/get-site-info.ts b/packages/vendure/src/api/operations/get-site-info.ts index ce2f5fa3f..b3dcc48e7 100644 --- a/packages/vendure/src/api/operations/get-site-info.ts +++ b/packages/vendure/src/api/operations/get-site-info.ts @@ -33,8 +33,8 @@ export default function getSiteInfoOperation({ }) const collections = data.collections?.items.map((i) => ({ ...i, - entityId: i.id, - path: i.slug, + id: i.id, + path: `/${i.id}`, productCount: i.productVariants.totalItems, })) const categories = arrayToTree(collections).children diff --git a/packages/vendure/src/utils/normalize.ts b/packages/vendure/src/utils/normalize.ts index 3bf021ec4..58df8faeb 100644 --- a/packages/vendure/src/utils/normalize.ts +++ b/packages/vendure/src/utils/normalize.ts @@ -8,7 +8,7 @@ export function normalizeSearchResult(item: SearchResultFragment): Product { name: item.productName, description: item.description, slug: item.slug, - path: item.slug, + path: `${item.slug}`, images: [ { url: item.productAsset?.preview