diff --git a/__generated__/BrowserProductPageQuery.graphql.ts b/__generated__/BrowserProductPageQuery.graphql.ts index 5243fcb1c..cdbaae7db 100644 --- a/__generated__/BrowserProductPageQuery.graphql.ts +++ b/__generated__/BrowserProductPageQuery.graphql.ts @@ -20,7 +20,7 @@ export type BrowserProductPageQueryQuery = { product: { slug: string, sku: strin export const BrowserProductPageQuery = { query: process.env.NODE_ENV === 'production' ? undefined : "query BrowserProductPageQuery($locator: StoreProductID!) {\n product(locator: $locator) {\n id: productID\n slug\n seo {\n title\n description\n }\n brand {\n name\n }\n sku\n gtin\n name\n description\n breadcrumbList {\n itemListElement {\n item\n name\n position\n }\n }\n image {\n url\n alternateName\n }\n offers {\n lowPrice\n highPrice\n priceCurrency\n offers {\n price\n priceValidUntil\n priceCurrency\n availability\n itemCondition\n seller {\n identifier\n }\n listPrice\n }\n }\n }\n}\n", - sha256Hash: "e5c3f05f6b6eeb8f6e42e03fb953b0e0b7e4e920825220bf05e1242bbf3498e0", + sha256Hash: "73f9263c0669a654a2cd1baaa1423ca26554bbaf4bc56d5690cf5eefff799b97", operationName: "BrowserProductPageQuery", } diff --git a/__generated__/BrowserProductQuery.graphql.ts b/__generated__/BrowserProductQuery.graphql.ts index 2f41dca28..17f4ba391 100644 --- a/__generated__/BrowserProductQuery.graphql.ts +++ b/__generated__/BrowserProductQuery.graphql.ts @@ -20,7 +20,7 @@ export type BrowserProductQueryQuery = { product: { slug: string, sku: string, g export const BrowserProductQuery = { query: process.env.NODE_ENV === 'production' ? undefined : "query BrowserProductQuery($locator: StoreProductID!) {\n product(locator: $locator) {\n id: productID\n slug\n seo {\n title\n description\n }\n brand {\n name\n }\n sku\n gtin\n name\n description\n breadcrumbList {\n itemListElement {\n item\n name\n position\n }\n }\n image {\n url\n alternateName\n }\n offers {\n lowPrice\n highPrice\n priceCurrency\n offers {\n price\n priceValidUntil\n priceCurrency\n availability\n itemCondition\n seller {\n identifier\n }\n listPrice\n }\n }\n }\n}\n", - sha256Hash: "7d282910929087e8f7cca4414ed72c6cf49a0b8cbd2a42b3ff8aa87c64499049", + sha256Hash: "324d07d630879d3c21e88ec96fb5a35467a5c5aa46d985648bc127e85839ef8c", operationName: "BrowserProductQuery", } diff --git a/__generated__/CollectionSearchQuery.graphql.ts b/__generated__/CollectionSearchQuery.graphql.ts index 379381b02..01daa16e8 100644 --- a/__generated__/CollectionSearchQuery.graphql.ts +++ b/__generated__/CollectionSearchQuery.graphql.ts @@ -16,14 +16,14 @@ export type CollectionSearchQueryQueryVariables = Exact<{ }>; -export type CollectionSearchQueryQuery = { search: { products: { pageInfo: { totalCount: number }, edges: Array<{ node: { slug: string, name: string, id: string, isVariantOf: { name: string }, image: Array<{ url: string, alternateName: string }>, offers: { lowPrice: number, offers: Array<{ price: number, listPrice: number, seller: { identifier: string } }> } } }> }, facets: Array<{ key: string, label: string, type: StoreFacetType, values: Array<{ label: string, value: string, selected: boolean, quantity: number }> }> } }; +export type CollectionSearchQueryQuery = { search: { products: { pageInfo: { totalCount: number }, edges: Array<{ node: { slug: string, sku: string, name: string, id: string, isVariantOf: { name: string }, image: Array<{ url: string, alternateName: string }>, offers: { lowPrice: number, offers: Array<{ price: number, listPrice: number, seller: { identifier: string } }> } } }> }, facets: Array<{ key: string, label: string, type: StoreFacetType, values: Array<{ label: string, value: string, selected: boolean, quantity: number }> }> } }; // Query Related Code export const CollectionSearchQuery = { - query: process.env.NODE_ENV === 'production' ? undefined : "query CollectionSearchQuery($first: Int!, $after: String, $sort: StoreSort, $selectedFacets: [StoreSelectedFacet!]!) {\n search(\n first: $first\n after: $after\n sort: $sort\n selectedFacets: $selectedFacets\n ) {\n products {\n pageInfo {\n totalCount\n }\n edges {\n node {\n id: productID\n slug\n name\n isVariantOf {\n name\n }\n image {\n url\n alternateName\n }\n offers {\n lowPrice\n offers {\n price\n listPrice\n seller {\n identifier\n }\n }\n }\n }\n }\n }\n facets {\n key\n label\n type\n values {\n label\n value\n selected\n quantity\n }\n }\n }\n}\n", - sha256Hash: "58b6a46e7fdf3ce0ec4a09ad09f1e918eaa56a022542b3183170ee6357be9cc2", + query: process.env.NODE_ENV === 'production' ? undefined : "query CollectionSearchQuery($first: Int!, $after: String, $sort: StoreSort, $selectedFacets: [StoreSelectedFacet!]!) {\n search(\n first: $first\n after: $after\n sort: $sort\n selectedFacets: $selectedFacets\n ) {\n products {\n pageInfo {\n totalCount\n }\n edges {\n node {\n id: productID\n slug\n sku\n name\n isVariantOf {\n name\n }\n image {\n url\n alternateName\n }\n offers {\n lowPrice\n offers {\n price\n listPrice\n seller {\n identifier\n }\n }\n }\n }\n }\n }\n facets {\n key\n label\n type\n values {\n label\n value\n selected\n quantity\n }\n }\n }\n}\n", + sha256Hash: "c0a1867bd49c2e324f745ec4629372f7819f2be391d7a016fff687d2f7ef5d5a", operationName: "CollectionSearchQuery", } diff --git a/__generated__/FullTextSearchQuery.graphql.ts b/__generated__/FullTextSearchQuery.graphql.ts index 8841a9da2..ea5f02d1e 100644 --- a/__generated__/FullTextSearchQuery.graphql.ts +++ b/__generated__/FullTextSearchQuery.graphql.ts @@ -17,14 +17,14 @@ export type FullTextSearchQueryQueryVariables = Exact<{ }>; -export type FullTextSearchQueryQuery = { search: { products: { pageInfo: { totalCount: number }, edges: Array<{ node: { slug: string, name: string, id: string, isVariantOf: { name: string }, image: Array<{ url: string, alternateName: string }>, offers: { lowPrice: number, offers: Array<{ price: number, listPrice: number, seller: { identifier: string } }> } } }> }, facets: Array<{ key: string, label: string, type: StoreFacetType, values: Array<{ label: string, value: string, selected: boolean, quantity: number }> }> } }; +export type FullTextSearchQueryQuery = { search: { products: { pageInfo: { totalCount: number }, edges: Array<{ node: { slug: string, sku: string, name: string, id: string, isVariantOf: { name: string }, image: Array<{ url: string, alternateName: string }>, offers: { lowPrice: number, offers: Array<{ price: number, listPrice: number, seller: { identifier: string } }> } } }> }, facets: Array<{ key: string, label: string, type: StoreFacetType, values: Array<{ label: string, value: string, selected: boolean, quantity: number }> }> } }; // Query Related Code export const FullTextSearchQuery = { - query: process.env.NODE_ENV === 'production' ? undefined : "query FullTextSearchQuery($first: Int!, $after: String, $sort: StoreSort, $term: String!, $selectedFacets: [StoreSelectedFacet!]!) {\n search(\n first: $first\n after: $after\n sort: $sort\n term: $term\n selectedFacets: $selectedFacets\n ) {\n products {\n pageInfo {\n totalCount\n }\n edges {\n node {\n id: productID\n slug\n name\n isVariantOf {\n name\n }\n image {\n url\n alternateName\n }\n offers {\n lowPrice\n offers {\n price\n listPrice\n seller {\n identifier\n }\n }\n }\n }\n }\n }\n facets {\n key\n label\n type\n values {\n label\n value\n selected\n quantity\n }\n }\n }\n}\n", - sha256Hash: "5dc543ba7526e0afff1f4f093ab69b04a5f02900e07e5dde02b43941cf457f02", + query: process.env.NODE_ENV === 'production' ? undefined : "query FullTextSearchQuery($first: Int!, $after: String, $sort: StoreSort, $term: String!, $selectedFacets: [StoreSelectedFacet!]!) {\n search(\n first: $first\n after: $after\n sort: $sort\n term: $term\n selectedFacets: $selectedFacets\n ) {\n products {\n pageInfo {\n totalCount\n }\n edges {\n node {\n id: productID\n slug\n sku\n name\n isVariantOf {\n name\n }\n image {\n url\n alternateName\n }\n offers {\n lowPrice\n offers {\n price\n listPrice\n seller {\n identifier\n }\n }\n }\n }\n }\n }\n facets {\n key\n label\n type\n values {\n label\n value\n selected\n quantity\n }\n }\n }\n}\n", + sha256Hash: "6117234762b7195c15d20b1cf91d61fff913966dad5f154f9df8094036e2c32e", operationName: "FullTextSearchQuery", } diff --git a/__generated__/GalleryQuery.graphql.ts b/__generated__/GalleryQuery.graphql.ts index 0f06c75fa..bf607153d 100644 --- a/__generated__/GalleryQuery.graphql.ts +++ b/__generated__/GalleryQuery.graphql.ts @@ -17,14 +17,14 @@ export type GalleryQueryQueryVariables = Exact<{ }>; -export type GalleryQueryQuery = { search: { products: { pageInfo: { totalCount: number }, edges: Array<{ node: { slug: string, name: string, id: string, isVariantOf: { name: string }, image: Array<{ url: string, alternateName: string }>, offers: { lowPrice: number, offers: Array<{ price: number, listPrice: number, seller: { identifier: string } }> } } }> } } }; +export type GalleryQueryQuery = { search: { products: { pageInfo: { totalCount: number }, edges: Array<{ node: { slug: string, sku: string, name: string, id: string, isVariantOf: { name: string }, image: Array<{ url: string, alternateName: string }>, offers: { lowPrice: number, offers: Array<{ price: number, listPrice: number, seller: { identifier: string } }> } } }> } } }; // Query Related Code export const GalleryQuery = { - query: process.env.NODE_ENV === 'production' ? undefined : "query GalleryQuery($first: Int!, $after: String, $sort: StoreSort, $term: String, $selectedFacets: [StoreSelectedFacet!]!) {\n search(\n first: $first\n after: $after\n sort: $sort\n term: $term\n selectedFacets: $selectedFacets\n ) {\n products {\n pageInfo {\n totalCount\n }\n edges {\n node {\n id: productID\n slug\n name\n isVariantOf {\n name\n }\n image {\n url\n alternateName\n }\n offers {\n lowPrice\n offers {\n price\n listPrice\n seller {\n identifier\n }\n }\n }\n }\n }\n }\n }\n}\n", - sha256Hash: "c3b27480fe5d5d2fb3afbd849eb36c486f0c26d92a520bbfebffb909880d4836", + query: process.env.NODE_ENV === 'production' ? undefined : "query GalleryQuery($first: Int!, $after: String, $sort: StoreSort, $term: String, $selectedFacets: [StoreSelectedFacet!]!) {\n search(\n first: $first\n after: $after\n sort: $sort\n term: $term\n selectedFacets: $selectedFacets\n ) {\n products {\n pageInfo {\n totalCount\n }\n edges {\n node {\n id: productID\n slug\n sku\n name\n isVariantOf {\n name\n }\n image {\n url\n alternateName\n }\n offers {\n lowPrice\n offers {\n price\n listPrice\n seller {\n identifier\n }\n }\n }\n }\n }\n }\n }\n}\n", + sha256Hash: "ecf326a5ce19587b9903d0964155d7d68163c624e763455ed36768d4dd5b0ec1", operationName: "GalleryQuery", } diff --git a/__generated__/ProductDetailsFragment_product.graphql.ts b/__generated__/ProductDetailsFragment_product.graphql.ts index 4e2ad479f..4ad41c813 100644 --- a/__generated__/ProductDetailsFragment_product.graphql.ts +++ b/__generated__/ProductDetailsFragment_product.graphql.ts @@ -8,7 +8,7 @@ // Operation related types -export type ProductDetailsFragment_ProductFragment = { name: string, id: string, image: Array<{ url: string, alternateName: string }>, offers: { offers: Array<{ price: number, listPrice: number, seller: { identifier: string } }> } }; +export type ProductDetailsFragment_ProductFragment = { name: string, sku: string, id: string, image: Array<{ url: string, alternateName: string }>, offers: { offers: Array<{ price: number, listPrice: number, seller: { identifier: string } }> } }; // Query Related Code diff --git a/__generated__/ProductPageQuery.graphql.ts b/__generated__/ProductPageQuery.graphql.ts index a261f4856..e1fe579f2 100644 --- a/__generated__/ProductPageQuery.graphql.ts +++ b/__generated__/ProductPageQuery.graphql.ts @@ -20,7 +20,7 @@ export type ProductPageQueryQuery = { site: Maybe<{ siteMetadata: Maybe<{ title: export const ProductPageQuery = { query: process.env.NODE_ENV === 'production' ? undefined : "query ProductPageQuery($id: String!) {\n site {\n siteMetadata {\n title\n description\n titleTemplate\n siteUrl\n }\n }\n product: storeProduct(id: {eq: $id}) {\n id: productID\n slug\n seo {\n title\n description\n }\n brand {\n name\n }\n sku\n gtin\n name\n description\n breadcrumbList {\n itemListElement {\n item\n name\n position\n }\n }\n image {\n url\n alternateName\n }\n offers {\n lowPrice\n highPrice\n priceCurrency\n offers {\n price\n priceValidUntil\n priceCurrency\n availability\n itemCondition\n seller {\n identifier\n }\n listPrice\n }\n }\n }\n}\n", - sha256Hash: "c65070ade46da270c0f94825647cfe5f0f7c70bc6c69fbf5f9f1634fa441c1c0", + sha256Hash: "f0cfe08f1cf0ec92292d2d27530492f1b0e7500a100548a0ec4b411e02d89d64", operationName: "ProductPageQuery", } diff --git a/__generated__/ProductSummary_product.graphql.ts b/__generated__/ProductSummary_product.graphql.ts index 7348d935b..6638760be 100644 --- a/__generated__/ProductSummary_product.graphql.ts +++ b/__generated__/ProductSummary_product.graphql.ts @@ -8,7 +8,7 @@ // Operation related types -export type ProductSummary_ProductFragment = { slug: string, name: string, id: string, isVariantOf: { name: string }, image: Array<{ url: string, alternateName: string }>, offers: { lowPrice: number, offers: Array<{ price: number, listPrice: number, seller: { identifier: string } }> } }; +export type ProductSummary_ProductFragment = { slug: string, sku: string, name: string, id: string, isVariantOf: { name: string }, image: Array<{ url: string, alternateName: string }>, offers: { lowPrice: number, offers: Array<{ price: number, listPrice: number, seller: { identifier: string } }> } }; // Query Related Code diff --git a/__generated__/ProductViewFragment_product.graphql.ts b/__generated__/ProductViewFragment_product.graphql.ts index 04f9eae0f..9e8bae50a 100644 --- a/__generated__/ProductViewFragment_product.graphql.ts +++ b/__generated__/ProductViewFragment_product.graphql.ts @@ -16,7 +16,7 @@ export type ProductViewFragment_ProductFragment = ( export type ProductSeoFragment_ProductFragment = { slug: string, sku: string, gtin: string, name: string, description: string, seo: { title: string, description: string }, brand: { name: string }, breadcrumbList: { itemListElement: Array<{ item: string, name: string, position: number }> }, image: Array<{ url: string, alternateName: string }>, offers: { lowPrice: number, highPrice: number, priceCurrency: string, offers: Array<{ price: number, priceValidUntil: string, priceCurrency: string, availability: string, itemCondition: string, seller: { identifier: string } }> } }; -export type ProductDetailsFragment_ProductFragment = { name: string, id: string, image: Array<{ url: string, alternateName: string }>, offers: { offers: Array<{ price: number, listPrice: number, seller: { identifier: string } }> } }; +export type ProductDetailsFragment_ProductFragment = { name: string, sku: string, id: string, image: Array<{ url: string, alternateName: string }>, offers: { offers: Array<{ price: number, listPrice: number, seller: { identifier: string } }> } }; // Query Related Code diff --git a/__generated__/ValidateCartMutation.graphql.ts b/__generated__/ValidateCartMutation.graphql.ts new file mode 100644 index 000000000..5a84d39b0 --- /dev/null +++ b/__generated__/ValidateCartMutation.graphql.ts @@ -0,0 +1,26 @@ + + +/** + * Warning: This is an autogenerated file. + * + * Changes in this file won't take effect and will be overwritten + */ + + +// Operation related types +export type ValidateCartMutationMutationVariables = Exact<{ + cart: IStoreCart; +}>; + + +export type ValidateCartMutationMutation = { validateCart: Maybe<{ order: { orderNumber: string, acceptedOffer: Array<{ quantity: number, price: number, listPrice: number, seller: { identifier: string }, itemOffered: { sku: string, name: string, image: Array<{ url: string, alternateName: string }> } }> }, messages: Array<{ text: string, status: StoreStatus }> }> }; + + +// Query Related Code + +export const ValidateCartMutation = { + query: process.env.NODE_ENV === 'production' ? undefined : "mutation ValidateCartMutation($cart: IStoreCart!) {\n validateCart(cart: $cart) {\n order {\n orderNumber\n acceptedOffer {\n seller {\n identifier\n }\n quantity\n price\n listPrice\n itemOffered {\n sku\n name\n image {\n url\n alternateName\n }\n }\n }\n }\n messages {\n text\n status\n }\n }\n}\n", + sha256Hash: "02af5481bca446f3bd38d91163da831b828d7e50a9209393d6edb4cf49203837", + operationName: "ValidateCartMutation", +} + diff --git a/__generated__/persisted.graphql.json b/__generated__/persisted.graphql.json index aebca8d5a..5381f1565 100644 --- a/__generated__/persisted.graphql.json +++ b/__generated__/persisted.graphql.json @@ -1 +1 @@ -{"6ae3b26ce68da0cd3253ab425e98500c26d9c33760ba847de8120a2b4dae50ed":"query HomePageQuery {\n site {\n siteMetadata {\n title\n description\n titleTemplate\n }\n }\n}\n","c65070ade46da270c0f94825647cfe5f0f7c70bc6c69fbf5f9f1634fa441c1c0":"query ProductPageQuery($id: String!) {\n site {\n siteMetadata {\n title\n description\n titleTemplate\n siteUrl\n }\n }\n product: storeProduct(id: {eq: $id}) {\n id: productID\n slug\n seo {\n title\n description\n }\n brand {\n name\n }\n sku\n gtin\n name\n description\n breadcrumbList {\n itemListElement {\n item\n name\n position\n }\n }\n image {\n url\n alternateName\n }\n offers {\n lowPrice\n highPrice\n priceCurrency\n offers {\n price\n priceValidUntil\n priceCurrency\n availability\n itemCondition\n seller {\n identifier\n }\n listPrice\n }\n }\n }\n}\n","2ae563d9f1979d26963b149d71c1305765a5fc8ceb1e3beb1b307cfc7751c9f4":"query SearchPageQuery {\n site {\n siteMetadata {\n titleTemplate\n title\n description\n }\n }\n}\n","e5c3f05f6b6eeb8f6e42e03fb953b0e0b7e4e920825220bf05e1242bbf3498e0":"query BrowserProductPageQuery($locator: StoreProductID!) {\n product(locator: $locator) {\n id: productID\n slug\n seo {\n title\n description\n }\n brand {\n name\n }\n sku\n gtin\n name\n description\n breadcrumbList {\n itemListElement {\n item\n name\n position\n }\n }\n image {\n url\n alternateName\n }\n offers {\n lowPrice\n highPrice\n priceCurrency\n offers {\n price\n priceValidUntil\n priceCurrency\n availability\n itemCondition\n seller {\n identifier\n }\n listPrice\n }\n }\n }\n}\n","d0cc54e797bdbc7dee57b040c49f24fd19606cc4ad5655544986588ea7ffa10d":"query ServerProductPageQuery {\n site {\n siteMetadata {\n title\n description\n titleTemplate\n siteUrl\n }\n }\n}\n","a4c3e9dcf3be10b1d064ab5dfc5a4dcf40963f13c996c795a87b9ec44d047cf0":"query CollectionPageQuery($id: String!) {\n site {\n siteMetadata {\n titleTemplate\n title\n description\n }\n }\n storeCollection(id: {eq: $id}) {\n seo {\n title\n description\n }\n breadcrumbList {\n itemListElement {\n item\n name\n position\n }\n }\n meta {\n selectedFacets {\n key\n value\n }\n }\n }\n}\n","7d282910929087e8f7cca4414ed72c6cf49a0b8cbd2a42b3ff8aa87c64499049":"query BrowserProductQuery($locator: StoreProductID!) {\n product(locator: $locator) {\n id: productID\n slug\n seo {\n title\n description\n }\n brand {\n name\n }\n sku\n gtin\n name\n description\n breadcrumbList {\n itemListElement {\n item\n name\n position\n }\n }\n image {\n url\n alternateName\n }\n offers {\n lowPrice\n highPrice\n priceCurrency\n offers {\n price\n priceValidUntil\n priceCurrency\n availability\n itemCondition\n seller {\n identifier\n }\n listPrice\n }\n }\n }\n}\n","5dc543ba7526e0afff1f4f093ab69b04a5f02900e07e5dde02b43941cf457f02":"query FullTextSearchQuery($first: Int!, $after: String, $sort: StoreSort, $term: String!, $selectedFacets: [StoreSelectedFacet!]!) {\n search(\n first: $first\n after: $after\n sort: $sort\n term: $term\n selectedFacets: $selectedFacets\n ) {\n products {\n pageInfo {\n totalCount\n }\n edges {\n node {\n id: productID\n slug\n name\n isVariantOf {\n name\n }\n image {\n url\n alternateName\n }\n offers {\n lowPrice\n offers {\n price\n listPrice\n seller {\n identifier\n }\n }\n }\n }\n }\n }\n facets {\n key\n label\n type\n values {\n label\n value\n selected\n quantity\n }\n }\n }\n}\n","58b6a46e7fdf3ce0ec4a09ad09f1e918eaa56a022542b3183170ee6357be9cc2":"query CollectionSearchQuery($first: Int!, $after: String, $sort: StoreSort, $selectedFacets: [StoreSelectedFacet!]!) {\n search(\n first: $first\n after: $after\n sort: $sort\n selectedFacets: $selectedFacets\n ) {\n products {\n pageInfo {\n totalCount\n }\n edges {\n node {\n id: productID\n slug\n name\n isVariantOf {\n name\n }\n image {\n url\n alternateName\n }\n offers {\n lowPrice\n offers {\n price\n listPrice\n seller {\n identifier\n }\n }\n }\n }\n }\n }\n facets {\n key\n label\n type\n values {\n label\n value\n selected\n quantity\n }\n }\n }\n}\n","c3b27480fe5d5d2fb3afbd849eb36c486f0c26d92a520bbfebffb909880d4836":"query GalleryQuery($first: Int!, $after: String, $sort: StoreSort, $term: String, $selectedFacets: [StoreSelectedFacet!]!) {\n search(\n first: $first\n after: $after\n sort: $sort\n term: $term\n selectedFacets: $selectedFacets\n ) {\n products {\n pageInfo {\n totalCount\n }\n edges {\n node {\n id: productID\n slug\n name\n isVariantOf {\n name\n }\n image {\n url\n alternateName\n }\n offers {\n lowPrice\n offers {\n price\n listPrice\n seller {\n identifier\n }\n }\n }\n }\n }\n }\n }\n}\n","df51ae0e0d119b93d0e027db4a407816a825bf67c7b5a37f77e8383ae3d7d832":"query NavlinksQuery {\n allStoreCollection(limit: 2, filter: {type: {eq: Department}}) {\n nodes {\n slug\n seo {\n title\n }\n }\n }\n}\n"} +{"6ae3b26ce68da0cd3253ab425e98500c26d9c33760ba847de8120a2b4dae50ed":"query HomePageQuery {\n site {\n siteMetadata {\n title\n description\n titleTemplate\n }\n }\n}\n","f0cfe08f1cf0ec92292d2d27530492f1b0e7500a100548a0ec4b411e02d89d64":"query ProductPageQuery($id: String!) {\n site {\n siteMetadata {\n title\n description\n titleTemplate\n siteUrl\n }\n }\n product: storeProduct(id: {eq: $id}) {\n id: productID\n slug\n seo {\n title\n description\n }\n brand {\n name\n }\n sku\n gtin\n name\n description\n breadcrumbList {\n itemListElement {\n item\n name\n position\n }\n }\n image {\n url\n alternateName\n }\n offers {\n lowPrice\n highPrice\n priceCurrency\n offers {\n price\n priceValidUntil\n priceCurrency\n availability\n itemCondition\n seller {\n identifier\n }\n listPrice\n }\n }\n }\n}\n","73f9263c0669a654a2cd1baaa1423ca26554bbaf4bc56d5690cf5eefff799b97":"query BrowserProductPageQuery($locator: StoreProductID!) {\n product(locator: $locator) {\n id: productID\n slug\n seo {\n title\n description\n }\n brand {\n name\n }\n sku\n gtin\n name\n description\n breadcrumbList {\n itemListElement {\n item\n name\n position\n }\n }\n image {\n url\n alternateName\n }\n offers {\n lowPrice\n highPrice\n priceCurrency\n offers {\n price\n priceValidUntil\n priceCurrency\n availability\n itemCondition\n seller {\n identifier\n }\n listPrice\n }\n }\n }\n}\n","d0cc54e797bdbc7dee57b040c49f24fd19606cc4ad5655544986588ea7ffa10d":"query ServerProductPageQuery {\n site {\n siteMetadata {\n title\n description\n titleTemplate\n siteUrl\n }\n }\n}\n","a4c3e9dcf3be10b1d064ab5dfc5a4dcf40963f13c996c795a87b9ec44d047cf0":"query CollectionPageQuery($id: String!) {\n site {\n siteMetadata {\n titleTemplate\n title\n description\n }\n }\n storeCollection(id: {eq: $id}) {\n seo {\n title\n description\n }\n breadcrumbList {\n itemListElement {\n item\n name\n position\n }\n }\n meta {\n selectedFacets {\n key\n value\n }\n }\n }\n}\n","2ae563d9f1979d26963b149d71c1305765a5fc8ceb1e3beb1b307cfc7751c9f4":"query SearchPageQuery {\n site {\n siteMetadata {\n titleTemplate\n title\n description\n }\n }\n}\n","02af5481bca446f3bd38d91163da831b828d7e50a9209393d6edb4cf49203837":"mutation ValidateCartMutation($cart: IStoreCart!) {\n validateCart(cart: $cart) {\n order {\n orderNumber\n acceptedOffer {\n seller {\n identifier\n }\n quantity\n price\n listPrice\n itemOffered {\n sku\n name\n image {\n url\n alternateName\n }\n }\n }\n }\n messages {\n text\n status\n }\n }\n}\n","324d07d630879d3c21e88ec96fb5a35467a5c5aa46d985648bc127e85839ef8c":"query BrowserProductQuery($locator: StoreProductID!) {\n product(locator: $locator) {\n id: productID\n slug\n seo {\n title\n description\n }\n brand {\n name\n }\n sku\n gtin\n name\n description\n breadcrumbList {\n itemListElement {\n item\n name\n position\n }\n }\n image {\n url\n alternateName\n }\n offers {\n lowPrice\n highPrice\n priceCurrency\n offers {\n price\n priceValidUntil\n priceCurrency\n availability\n itemCondition\n seller {\n identifier\n }\n listPrice\n }\n }\n }\n}\n","6117234762b7195c15d20b1cf91d61fff913966dad5f154f9df8094036e2c32e":"query FullTextSearchQuery($first: Int!, $after: String, $sort: StoreSort, $term: String!, $selectedFacets: [StoreSelectedFacet!]!) {\n search(\n first: $first\n after: $after\n sort: $sort\n term: $term\n selectedFacets: $selectedFacets\n ) {\n products {\n pageInfo {\n totalCount\n }\n edges {\n node {\n id: productID\n slug\n sku\n name\n isVariantOf {\n name\n }\n image {\n url\n alternateName\n }\n offers {\n lowPrice\n offers {\n price\n listPrice\n seller {\n identifier\n }\n }\n }\n }\n }\n }\n facets {\n key\n label\n type\n values {\n label\n value\n selected\n quantity\n }\n }\n }\n}\n","c0a1867bd49c2e324f745ec4629372f7819f2be391d7a016fff687d2f7ef5d5a":"query CollectionSearchQuery($first: Int!, $after: String, $sort: StoreSort, $selectedFacets: [StoreSelectedFacet!]!) {\n search(\n first: $first\n after: $after\n sort: $sort\n selectedFacets: $selectedFacets\n ) {\n products {\n pageInfo {\n totalCount\n }\n edges {\n node {\n id: productID\n slug\n sku\n name\n isVariantOf {\n name\n }\n image {\n url\n alternateName\n }\n offers {\n lowPrice\n offers {\n price\n listPrice\n seller {\n identifier\n }\n }\n }\n }\n }\n }\n facets {\n key\n label\n type\n values {\n label\n value\n selected\n quantity\n }\n }\n }\n}\n","ecf326a5ce19587b9903d0964155d7d68163c624e763455ed36768d4dd5b0ec1":"query GalleryQuery($first: Int!, $after: String, $sort: StoreSort, $term: String, $selectedFacets: [StoreSelectedFacet!]!) {\n search(\n first: $first\n after: $after\n sort: $sort\n term: $term\n selectedFacets: $selectedFacets\n ) {\n products {\n pageInfo {\n totalCount\n }\n edges {\n node {\n id: productID\n slug\n sku\n name\n isVariantOf {\n name\n }\n image {\n url\n alternateName\n }\n offers {\n lowPrice\n offers {\n price\n listPrice\n seller {\n identifier\n }\n }\n }\n }\n }\n }\n }\n}\n","df51ae0e0d119b93d0e027db4a407816a825bf67c7b5a37f77e8383ae3d7d832":"query NavlinksQuery {\n allStoreCollection(limit: 2, filter: {type: {eq: Department}}) {\n nodes {\n slug\n seo {\n title\n }\n }\n }\n}\n","1a6216b0c88247a59d361e256da3d2ecf2063fe7790e1ddb4d688ab8d7c56d0b":"query PagesQuery {\n allSiteFunction {\n nodes {\n functionRoute\n }\n }\n allSitePage(filter: {path: {ne: \"/dev-404-page/\"}}) {\n nodes {\n path\n }\n }\n}\n"} diff --git a/__generated__/queryInfo.graphql.json b/__generated__/queryInfo.graphql.json index baeee3761..8eb736af5 100644 --- a/__generated__/queryInfo.graphql.json +++ b/__generated__/queryInfo.graphql.json @@ -1 +1 @@ -{"HomePageQuery":{"query":"query HomePageQuery {\n site {\n siteMetadata {\n title\n description\n titleTemplate\n }\n }\n}\n","sha256Hash":"6ae3b26ce68da0cd3253ab425e98500c26d9c33760ba847de8120a2b4dae50ed"},"ProductPageQuery":{"query":"query ProductPageQuery($id: String!) {\n site {\n siteMetadata {\n title\n description\n titleTemplate\n siteUrl\n }\n }\n product: storeProduct(id: {eq: $id}) {\n id: productID\n slug\n seo {\n title\n description\n }\n brand {\n name\n }\n sku\n gtin\n name\n description\n breadcrumbList {\n itemListElement {\n item\n name\n position\n }\n }\n image {\n url\n alternateName\n }\n offers {\n lowPrice\n highPrice\n priceCurrency\n offers {\n price\n priceValidUntil\n priceCurrency\n availability\n itemCondition\n seller {\n identifier\n }\n listPrice\n }\n }\n }\n}\n","sha256Hash":"c65070ade46da270c0f94825647cfe5f0f7c70bc6c69fbf5f9f1634fa441c1c0"},"SearchPageQuery":{"query":"query SearchPageQuery {\n site {\n siteMetadata {\n titleTemplate\n title\n description\n }\n }\n}\n","sha256Hash":"2ae563d9f1979d26963b149d71c1305765a5fc8ceb1e3beb1b307cfc7751c9f4"},"BrowserProductPageQuery":{"query":"query BrowserProductPageQuery($locator: StoreProductID!) {\n product(locator: $locator) {\n id: productID\n slug\n seo {\n title\n description\n }\n brand {\n name\n }\n sku\n gtin\n name\n description\n breadcrumbList {\n itemListElement {\n item\n name\n position\n }\n }\n image {\n url\n alternateName\n }\n offers {\n lowPrice\n highPrice\n priceCurrency\n offers {\n price\n priceValidUntil\n priceCurrency\n availability\n itemCondition\n seller {\n identifier\n }\n listPrice\n }\n }\n }\n}\n","sha256Hash":"e5c3f05f6b6eeb8f6e42e03fb953b0e0b7e4e920825220bf05e1242bbf3498e0"},"ServerProductPageQuery":{"query":"query ServerProductPageQuery {\n site {\n siteMetadata {\n title\n description\n titleTemplate\n siteUrl\n }\n }\n}\n","sha256Hash":"d0cc54e797bdbc7dee57b040c49f24fd19606cc4ad5655544986588ea7ffa10d"},"CollectionPageQuery":{"query":"query CollectionPageQuery($id: String!) {\n site {\n siteMetadata {\n titleTemplate\n title\n description\n }\n }\n storeCollection(id: {eq: $id}) {\n seo {\n title\n description\n }\n breadcrumbList {\n itemListElement {\n item\n name\n position\n }\n }\n meta {\n selectedFacets {\n key\n value\n }\n }\n }\n}\n","sha256Hash":"a4c3e9dcf3be10b1d064ab5dfc5a4dcf40963f13c996c795a87b9ec44d047cf0"},"BrowserProductQuery":{"query":"query BrowserProductQuery($locator: StoreProductID!) {\n product(locator: $locator) {\n id: productID\n slug\n seo {\n title\n description\n }\n brand {\n name\n }\n sku\n gtin\n name\n description\n breadcrumbList {\n itemListElement {\n item\n name\n position\n }\n }\n image {\n url\n alternateName\n }\n offers {\n lowPrice\n highPrice\n priceCurrency\n offers {\n price\n priceValidUntil\n priceCurrency\n availability\n itemCondition\n seller {\n identifier\n }\n listPrice\n }\n }\n }\n}\n","sha256Hash":"7d282910929087e8f7cca4414ed72c6cf49a0b8cbd2a42b3ff8aa87c64499049"},"FullTextSearchQuery":{"query":"query FullTextSearchQuery($first: Int!, $after: String, $sort: StoreSort, $term: String!, $selectedFacets: [StoreSelectedFacet!]!) {\n search(\n first: $first\n after: $after\n sort: $sort\n term: $term\n selectedFacets: $selectedFacets\n ) {\n products {\n pageInfo {\n totalCount\n }\n edges {\n node {\n id: productID\n slug\n name\n isVariantOf {\n name\n }\n image {\n url\n alternateName\n }\n offers {\n lowPrice\n offers {\n price\n listPrice\n seller {\n identifier\n }\n }\n }\n }\n }\n }\n facets {\n key\n label\n type\n values {\n label\n value\n selected\n quantity\n }\n }\n }\n}\n","sha256Hash":"5dc543ba7526e0afff1f4f093ab69b04a5f02900e07e5dde02b43941cf457f02"},"CollectionSearchQuery":{"query":"query CollectionSearchQuery($first: Int!, $after: String, $sort: StoreSort, $selectedFacets: [StoreSelectedFacet!]!) {\n search(\n first: $first\n after: $after\n sort: $sort\n selectedFacets: $selectedFacets\n ) {\n products {\n pageInfo {\n totalCount\n }\n edges {\n node {\n id: productID\n slug\n name\n isVariantOf {\n name\n }\n image {\n url\n alternateName\n }\n offers {\n lowPrice\n offers {\n price\n listPrice\n seller {\n identifier\n }\n }\n }\n }\n }\n }\n facets {\n key\n label\n type\n values {\n label\n value\n selected\n quantity\n }\n }\n }\n}\n","sha256Hash":"58b6a46e7fdf3ce0ec4a09ad09f1e918eaa56a022542b3183170ee6357be9cc2"},"GalleryQuery":{"query":"query GalleryQuery($first: Int!, $after: String, $sort: StoreSort, $term: String, $selectedFacets: [StoreSelectedFacet!]!) {\n search(\n first: $first\n after: $after\n sort: $sort\n term: $term\n selectedFacets: $selectedFacets\n ) {\n products {\n pageInfo {\n totalCount\n }\n edges {\n node {\n id: productID\n slug\n name\n isVariantOf {\n name\n }\n image {\n url\n alternateName\n }\n offers {\n lowPrice\n offers {\n price\n listPrice\n seller {\n identifier\n }\n }\n }\n }\n }\n }\n }\n}\n","sha256Hash":"c3b27480fe5d5d2fb3afbd849eb36c486f0c26d92a520bbfebffb909880d4836"},"NavlinksQuery":{"query":"query NavlinksQuery {\n allStoreCollection(limit: 2, filter: {type: {eq: Department}}) {\n nodes {\n slug\n seo {\n title\n }\n }\n }\n}\n","sha256Hash":"df51ae0e0d119b93d0e027db4a407816a825bf67c7b5a37f77e8383ae3d7d832"}} +{"HomePageQuery":{"query":"query HomePageQuery {\n site {\n siteMetadata {\n title\n description\n titleTemplate\n }\n }\n}\n","sha256Hash":"6ae3b26ce68da0cd3253ab425e98500c26d9c33760ba847de8120a2b4dae50ed"},"ProductPageQuery":{"query":"query ProductPageQuery($id: String!) {\n site {\n siteMetadata {\n title\n description\n titleTemplate\n siteUrl\n }\n }\n product: storeProduct(id: {eq: $id}) {\n id: productID\n slug\n seo {\n title\n description\n }\n brand {\n name\n }\n sku\n gtin\n name\n description\n breadcrumbList {\n itemListElement {\n item\n name\n position\n }\n }\n image {\n url\n alternateName\n }\n offers {\n lowPrice\n highPrice\n priceCurrency\n offers {\n price\n priceValidUntil\n priceCurrency\n availability\n itemCondition\n seller {\n identifier\n }\n listPrice\n }\n }\n }\n}\n","sha256Hash":"f0cfe08f1cf0ec92292d2d27530492f1b0e7500a100548a0ec4b411e02d89d64"},"BrowserProductPageQuery":{"query":"query BrowserProductPageQuery($locator: StoreProductID!) {\n product(locator: $locator) {\n id: productID\n slug\n seo {\n title\n description\n }\n brand {\n name\n }\n sku\n gtin\n name\n description\n breadcrumbList {\n itemListElement {\n item\n name\n position\n }\n }\n image {\n url\n alternateName\n }\n offers {\n lowPrice\n highPrice\n priceCurrency\n offers {\n price\n priceValidUntil\n priceCurrency\n availability\n itemCondition\n seller {\n identifier\n }\n listPrice\n }\n }\n }\n}\n","sha256Hash":"73f9263c0669a654a2cd1baaa1423ca26554bbaf4bc56d5690cf5eefff799b97"},"ServerProductPageQuery":{"query":"query ServerProductPageQuery {\n site {\n siteMetadata {\n title\n description\n titleTemplate\n siteUrl\n }\n }\n}\n","sha256Hash":"d0cc54e797bdbc7dee57b040c49f24fd19606cc4ad5655544986588ea7ffa10d"},"CollectionPageQuery":{"query":"query CollectionPageQuery($id: String!) {\n site {\n siteMetadata {\n titleTemplate\n title\n description\n }\n }\n storeCollection(id: {eq: $id}) {\n seo {\n title\n description\n }\n breadcrumbList {\n itemListElement {\n item\n name\n position\n }\n }\n meta {\n selectedFacets {\n key\n value\n }\n }\n }\n}\n","sha256Hash":"a4c3e9dcf3be10b1d064ab5dfc5a4dcf40963f13c996c795a87b9ec44d047cf0"},"SearchPageQuery":{"query":"query SearchPageQuery {\n site {\n siteMetadata {\n titleTemplate\n title\n description\n }\n }\n}\n","sha256Hash":"2ae563d9f1979d26963b149d71c1305765a5fc8ceb1e3beb1b307cfc7751c9f4"},"ValidateCartMutation":{"query":"mutation ValidateCartMutation($cart: IStoreCart!) {\n validateCart(cart: $cart) {\n order {\n orderNumber\n acceptedOffer {\n seller {\n identifier\n }\n quantity\n price\n listPrice\n itemOffered {\n sku\n name\n image {\n url\n alternateName\n }\n }\n }\n }\n messages {\n text\n status\n }\n }\n}\n","sha256Hash":"02af5481bca446f3bd38d91163da831b828d7e50a9209393d6edb4cf49203837"},"BrowserProductQuery":{"query":"query BrowserProductQuery($locator: StoreProductID!) {\n product(locator: $locator) {\n id: productID\n slug\n seo {\n title\n description\n }\n brand {\n name\n }\n sku\n gtin\n name\n description\n breadcrumbList {\n itemListElement {\n item\n name\n position\n }\n }\n image {\n url\n alternateName\n }\n offers {\n lowPrice\n highPrice\n priceCurrency\n offers {\n price\n priceValidUntil\n priceCurrency\n availability\n itemCondition\n seller {\n identifier\n }\n listPrice\n }\n }\n }\n}\n","sha256Hash":"324d07d630879d3c21e88ec96fb5a35467a5c5aa46d985648bc127e85839ef8c"},"FullTextSearchQuery":{"query":"query FullTextSearchQuery($first: Int!, $after: String, $sort: StoreSort, $term: String!, $selectedFacets: [StoreSelectedFacet!]!) {\n search(\n first: $first\n after: $after\n sort: $sort\n term: $term\n selectedFacets: $selectedFacets\n ) {\n products {\n pageInfo {\n totalCount\n }\n edges {\n node {\n id: productID\n slug\n sku\n name\n isVariantOf {\n name\n }\n image {\n url\n alternateName\n }\n offers {\n lowPrice\n offers {\n price\n listPrice\n seller {\n identifier\n }\n }\n }\n }\n }\n }\n facets {\n key\n label\n type\n values {\n label\n value\n selected\n quantity\n }\n }\n }\n}\n","sha256Hash":"6117234762b7195c15d20b1cf91d61fff913966dad5f154f9df8094036e2c32e"},"CollectionSearchQuery":{"query":"query CollectionSearchQuery($first: Int!, $after: String, $sort: StoreSort, $selectedFacets: [StoreSelectedFacet!]!) {\n search(\n first: $first\n after: $after\n sort: $sort\n selectedFacets: $selectedFacets\n ) {\n products {\n pageInfo {\n totalCount\n }\n edges {\n node {\n id: productID\n slug\n sku\n name\n isVariantOf {\n name\n }\n image {\n url\n alternateName\n }\n offers {\n lowPrice\n offers {\n price\n listPrice\n seller {\n identifier\n }\n }\n }\n }\n }\n }\n facets {\n key\n label\n type\n values {\n label\n value\n selected\n quantity\n }\n }\n }\n}\n","sha256Hash":"c0a1867bd49c2e324f745ec4629372f7819f2be391d7a016fff687d2f7ef5d5a"},"GalleryQuery":{"query":"query GalleryQuery($first: Int!, $after: String, $sort: StoreSort, $term: String, $selectedFacets: [StoreSelectedFacet!]!) {\n search(\n first: $first\n after: $after\n sort: $sort\n term: $term\n selectedFacets: $selectedFacets\n ) {\n products {\n pageInfo {\n totalCount\n }\n edges {\n node {\n id: productID\n slug\n sku\n name\n isVariantOf {\n name\n }\n image {\n url\n alternateName\n }\n offers {\n lowPrice\n offers {\n price\n listPrice\n seller {\n identifier\n }\n }\n }\n }\n }\n }\n }\n}\n","sha256Hash":"ecf326a5ce19587b9903d0964155d7d68163c624e763455ed36768d4dd5b0ec1"},"NavlinksQuery":{"query":"query NavlinksQuery {\n allStoreCollection(limit: 2, filter: {type: {eq: Department}}) {\n nodes {\n slug\n seo {\n title\n }\n }\n }\n}\n","sha256Hash":"df51ae0e0d119b93d0e027db4a407816a825bf67c7b5a37f77e8383ae3d7d832"},"PagesQuery":{"query":"query PagesQuery {\n allSiteFunction {\n nodes {\n functionRoute\n }\n }\n allSitePage(filter: {path: {ne: \"/dev-404-page/\"}}) {\n nodes {\n path\n }\n }\n}\n","sha256Hash":"1a6216b0c88247a59d361e256da3d2ecf2063fe7790e1ddb4d688ab8d7c56d0b"}} diff --git a/package.json b/package.json index 5edc288b5..60d6739ed 100644 --- a/package.json +++ b/package.json @@ -3,13 +3,13 @@ "private": true, "version": "0.221.0", "dependencies": { - "@vtex/gatsby-plugin-graphql": "^1.1.14", - "@vtex/gatsby-plugin-nginx": "^1.1.14", - "@vtex/gatsby-plugin-thumbor": "^1.1.14", - "@vtex/gatsby-source-store": "^1.1.14", - "@vtex/store-api": "^1.1.14", - "@vtex/store-sdk": "^1.1.14", - "@vtex/store-ui": "^1.1.14", + "@vtex/gatsby-plugin-graphql": "^1.1.16", + "@vtex/gatsby-plugin-nginx": "^1.1.16", + "@vtex/gatsby-plugin-thumbor": "^1.1.16", + "@vtex/gatsby-source-store": "^1.1.16", + "@vtex/store-api": "^1.1.16", + "@vtex/store-sdk": "^1.1.16", + "@vtex/store-ui": "^1.1.16", "babel-preset-gatsby": "^1.13.0", "gatsby": "^3.13.0", "gatsby-plugin-gatsby-cloud": "^3.1.0", @@ -33,7 +33,7 @@ "@cypress/code-coverage": "^3.9.10", "@testing-library/cypress": "^8.0.0", "@types/cypress": "^1.1.3", - "@vtex/lighthouse-config": "^1.1.14", + "@vtex/lighthouse-config": "^1.1.16", "@vtex/prettier-config": "0.3.6", "@vtex/tsconfig": "0.6.0", "autoprefixer": "^10.3.6", diff --git a/src/api/cart.ts b/src/api/cart.ts deleted file mode 100644 index 332dd3fe9..000000000 --- a/src/api/cart.ts +++ /dev/null @@ -1,204 +0,0 @@ -import fetch from 'isomorphic-unfetch' -import type { GatsbyFunctionRequest, GatsbyFunctionResponse } from 'gatsby' - -import { getItemId } from '../sdk/cart/useCart' -import type { Cart, CartItem, CartMessages } from '../sdk/cart/useCart' - -const store = process.env.GATSBY_STORE_ID -const environment = process.env.GATSBY_VTEX_ENVIRONMENT - -const base = `https://${store}.${environment}.com.br` -const api = { - updateItems: (id: string) => - `${base}/api/checkout/pub/orderForm/${id}/items?allowOutdatedData=paymentData`, - getItems: (id: string) => - `${base}/api/checkout/pub/orderForm/${id}?refreshOutdatedData=false`, -} - -interface OrderForm { - orderFormId: string - items: Array<{ - id: string - listPrice: number - quantity: number - isGift: boolean - price: number - seller: string - imageUrl: string - name: string - }> - messages: CartMessages[] -} - -const fetchAPI = (input: RequestInfo, init?: RequestInit) => - fetch(input, { - method: 'POST', - ...init, - credentials: 'omit', - headers: { - ...init?.headers, - accept: 'application/json', - 'content-type': 'application/json', - }, - }).then(async (res) => { - if (res.ok) { - return res.json() - } - - throw new Error(await res.text()) - }) - -const orderFormToCart = (orderForm: OrderForm) => { - const { orderFormId: cartId, items: orderItems, messages } = orderForm - - const items = orderItems.reduce((acc, curr, index) => { - const { id: skuId, quantity, isGift, price, listPrice, seller } = curr - const id = getItemId({ - seller, - skuId, - }) - - const item: Omit = { - id, - seller, - skuId, - price: price / 100, - listPrice: listPrice / 100, - quantity: isGift ? acc[id]?.quantity ?? 0 : quantity, - giftQuantity: isGift ? quantity : acc[id]?.giftQuantity ?? 0, - } - - acc[id] = { - ...item, - index, - } - - return acc - }, {} as Record & { index: number }>) - - return { - items, - id: cartId, - messages, - } -} - -const getItemsById = (cart: Cart) => - cart.items.reduce((acc, curr) => { - acc[curr.id] = curr - - return acc - }, {} as Record) - -const reconcile = (of: ReturnType, cart: Cart) => { - const itemsById = getItemsById(cart) - - return { - ...of, - items: Object.values(of.items).map((item) => ({ - ...item, - image: itemsById[item.id].image, - name: itemsById[item.id].name, - })), - } -} - -type OrderFormCart = ReturnType - -const getOrderForm = (id: string) => - fetchAPI(api.getItems(id)).then(orderFormToCart) - -const updateItems = ( - id: string, - items: Array<{ - id: string - quantity: number - seller: string - index?: number - }> -) => - fetchAPI(api.updateItems(id), { - method: 'PATCH', - body: JSON.stringify({ - orderItems: items, - }), - }).then(orderFormToCart) - -const deltaChanges = (cart: Cart, orderForm: OrderFormCart) => { - const cartObj = getItemsById(cart) - - const itemsToAdd = cart.items - .filter((item) => !orderForm.items[item.id]) - .map((item) => ({ - id: item.skuId, - seller: item.seller, - quantity: item.quantity, - })) - - const itemsToUpdate = cart.items - .filter( - (item) => - orderForm.items[item.id] && - (item.quantity !== orderForm.items[item.id].quantity || - item.giftQuantity !== orderForm.items[item.id].giftQuantity) - ) - .map((item) => ({ - id: item.skuId, - seller: item.seller, - quantity: item.quantity, - index: orderForm.items[item.id].index, - })) - - const itemsToDelete = Object.values(orderForm.items) - .filter((item) => !cartObj[item.id]) - .map((item) => ({ - id: item.skuId, - quantity: 0, - seller: item.seller, - index: item.index, - })) - - return [...itemsToAdd, ...itemsToUpdate, ...itemsToDelete] -} - -const validateCart = async (cart: Cart): Promise => { - try { - const orderForm = await getOrderForm(cart.id) - const updates = deltaChanges(cart, orderForm) - - if (updates.length > 0) { - const updatedOrderForm = await updateItems(orderForm.id, updates) - - const delta = deltaChanges(cart, updatedOrderForm) - - if (delta.length > 0 || updatedOrderForm.messages) { - return reconcile(updatedOrderForm, cart) - } - } - - return null - } catch (err) { - console.error(err) - - return null - } -} - -const handler = async ( - req: GatsbyFunctionRequest, - res: GatsbyFunctionResponse -) => { - if (req.method !== 'POST') { - res.status(405) - - return - } - - const cart: Cart = req.body - const validated = await validateCart(cart) - - res.setHeader('content-type', 'application/json') - res.send(JSON.stringify(validated)) -} - -export default handler diff --git a/src/api/graphql.ts b/src/api/graphql.ts index 872cef711..654596b94 100644 --- a/src/api/graphql.ts +++ b/src/api/graphql.ts @@ -64,6 +64,13 @@ const handler = async ( operationName, }) + if ( + process.env.NODE_ENV !== 'production' && + Array.isArray(response.errors) + ) { + response.errors.forEach(console.error) + } + res.setHeader('content-type', 'application/json') res.send(JSON.stringify(response)) } catch (err) { diff --git a/src/components/cart/CartItem/CartItem.tsx b/src/components/cart/CartItem/CartItem.tsx index 6b56ee451..6673e227f 100644 --- a/src/components/cart/CartItem/CartItem.tsx +++ b/src/components/cart/CartItem/CartItem.tsx @@ -1,10 +1,10 @@ import { GatsbyImage } from 'gatsby-plugin-image' import React from 'react' +import Button from 'src/components/ui/Button' import { useRemoveButton } from 'src/sdk/cart/useRemoveButton' import { useImage } from 'src/sdk/image/useImage' import { useFormattedPrice } from 'src/sdk/product/useFormattedPrice' -import type { CartItem as ICartItem } from 'src/sdk/cart/useCart' -import Button from 'src/components/ui/Button' +import type { CartItem as ICartItem } from 'src/sdk/cart/validate' interface Props { item: ICartItem @@ -14,23 +14,25 @@ function CartItem({ item }: Props) { const btnProps = useRemoveButton(item) const price = useFormattedPrice(item.price) const listPrice = useFormattedPrice(item.listPrice) - const image = useImage(item.image.src, 'product.miniature') + const image = useImage(item.itemOffered.image[0].url, 'product.miniature') return (
- -
name: {item.name}
+ +
name: {item.itemOffered.name}
+
sku: {item.itemOffered.sku}
id: {item.id}
-
skuId: {item.skuId}
-
seller: {item.seller}
+
seller: {item.seller.identifier}
price: {price}
listPrice: {listPrice}
quantity: {item.quantity}
-
gifts: {item.giftQuantity}
) diff --git a/src/components/cart/CartSidebar/CartSidebar.tsx b/src/components/cart/CartSidebar/CartSidebar.tsx index 65f8de703..94c6d59d8 100644 --- a/src/components/cart/CartSidebar/CartSidebar.tsx +++ b/src/components/cart/CartSidebar/CartSidebar.tsx @@ -13,7 +13,7 @@ function CartSidebar() { const subTotal = useFormattedPrice(cart.subTotal) const total = useFormattedPrice(cart.total) const toggleProps = useCartToggleButton() - const { items, totalItems, totalUniqueItems, isValidating } = cart + const { items, gifts, totalItems, totalUniqueItems, isValidating } = cart return (
@@ -24,6 +24,11 @@ function CartSidebar() { ))} +
Gifts
+ {gifts.map((item) => ( + + ))} +
Cart Summary
uniqueItems: {totalUniqueItems}
diff --git a/src/components/product/ProductSummary/ProductSummary.tsx b/src/components/product/ProductSummary/ProductSummary.tsx index 7fc99c0ec..f0f1673bf 100644 --- a/src/components/product/ProductSummary/ProductSummary.tsx +++ b/src/components/product/ProductSummary/ProductSummary.tsx @@ -1,13 +1,13 @@ import { graphql, Link } from 'gatsby' import { GatsbyImage } from 'gatsby-plugin-image' import React, { useMemo } from 'react' +import Button from 'src/components/ui/Button' +import DiscountBadge from 'src/components/ui/DiscountBadge' import { useBuyButton } from 'src/sdk/cart/useBuyButton' import { useImage } from 'src/sdk/image/useImage' import { useFormattedPrice } from 'src/sdk/product/useFormattedPrice' import { useProductLink } from 'src/sdk/product/useProductLink' import type { ProductSummary_ProductFragment } from '@generated/ProductSummary_product.graphql' -import DiscountBadge from 'src/components/ui/DiscountBadge' -import Button from 'src/components/ui/Button' interface Props { product: ProductSummary_ProductFragment @@ -15,18 +15,15 @@ interface Props { function ProductSummary({ product }: Props) { const { - id, slug, + sku, name: productName, isVariantOf: { name }, image: [img], offers: { lowPrice: spotPrice, offers }, } = product - const { - listPrice, - seller: { identifier }, - } = useMemo( + const { listPrice, seller } = useMemo( () => offers.find((x) => x.price === spotPrice)!, [spotPrice, offers] ) @@ -34,17 +31,15 @@ function ProductSummary({ product }: Props) { const linkProps = useProductLink({ slug }) const image = useImage(img.url, 'product.summary') const buyProps = useBuyButton({ - name: productName, - skuId: id, + itemOffered: { + name: productName, + image: [img], + sku, + }, price: spotPrice, listPrice, + seller, quantity: 1, - giftQuantity: 0, - seller: identifier, - image: { - src: img.url, - alt: img.alternateName, - }, }) return ( @@ -79,6 +74,7 @@ export const fragment = graphql` id: productID slug + sku name isVariantOf { diff --git a/src/components/search/FacetedFilter/FacetedFilter.tsx b/src/components/search/FacetedFilter/FacetedFilter.tsx index a2dcc4a49..634a379b3 100644 --- a/src/components/search/FacetedFilter/FacetedFilter.tsx +++ b/src/components/search/FacetedFilter/FacetedFilter.tsx @@ -4,7 +4,7 @@ import { useSearch } from 'src/sdk/search/useSearch' import type { FacetedFilter_FacetsFragment } from '@generated/FacetedFilter_facets.graphql' import Checkbox from 'src/components/ui/Checkbox' import Button from 'src/components/ui/Button' - + interface Props { facets: FacetedFilter_FacetsFragment[] } diff --git a/src/components/sections/ProductDetails/ProductDetails.tsx b/src/components/sections/ProductDetails/ProductDetails.tsx index 9b8f28a4c..baab90585 100644 --- a/src/components/sections/ProductDetails/ProductDetails.tsx +++ b/src/components/sections/ProductDetails/ProductDetails.tsx @@ -1,11 +1,11 @@ import { graphql } from 'gatsby' import { GatsbyImage } from 'gatsby-plugin-image' import React from 'react' +import Button from 'src/components/ui/Button' import { useBuyButton } from 'src/sdk/cart/useBuyButton' import { useImage } from 'src/sdk/image/useImage' import { useFormattedPrice } from 'src/sdk/product/useFormattedPrice' import type { ProductDetailsFragment_ProductFragment } from '@generated/ProductDetailsFragment_product.graphql' -import Button from 'src/components/ui/Button' interface Props { product: ProductDetailsFragment_ProductFragment @@ -17,33 +17,25 @@ const styles = { function ProductDetails({ product }: Props) { const { - id, name, + sku, image: [img], offers: { - offers: [ - { - price, - listPrice, - seller: { identifier }, - }, - ], + offers: [{ price, listPrice, seller }], }, } = product const image = useImage(img.url, 'product.details') const buyProps = useBuyButton({ - name, + itemOffered: { + image: [img], + name, + sku, + }, price, listPrice, + seller, quantity: 1, - giftQuantity: 0, - seller: identifier, - skuId: id, - image: { - src: img.url, - alt: img.alternateName, - }, }) return ( @@ -61,6 +53,7 @@ export const fragment = graphql` fragment ProductDetailsFragment_product on StoreProduct { id: productID name + sku image { url diff --git a/src/sdk/cart/useBuyButton.ts b/src/sdk/cart/useBuyButton.ts index 31e879dfa..8179f059a 100644 --- a/src/sdk/cart/useBuyButton.ts +++ b/src/sdk/cart/useBuyButton.ts @@ -2,7 +2,7 @@ import { useCallback } from 'react' import { useUI } from '../ui' import { useCart } from './useCart' -import type { CartItem } from './useCart' +import type { CartItem } from './validate' export const useBuyButton = (item: Omit | null) => { const { addItem } = useCart() @@ -25,7 +25,7 @@ export const useBuyButton = (item: Omit | null) => { return { onClick, 'data-testid': 'buy-button', - 'data-sku': item!.skuId, - 'data-seller': item!.seller, + 'data-sku': item?.itemOffered.sku, + 'data-seller': item?.seller.identifier, } } diff --git a/src/sdk/cart/useCart.ts b/src/sdk/cart/useCart.ts index 85bc984ac..15754c6e0 100644 --- a/src/sdk/cart/useCart.ts +++ b/src/sdk/cart/useCart.ts @@ -1,35 +1,8 @@ import { useCart as useSDKCart } from '@vtex/store-sdk' import { useCallback, useMemo } from 'react' -import type { CartItem as ICartItem } from '@vtex/store-sdk' -export interface CartItem extends ICartItem { - image: { - src: string - alt: string - } - skuId: string - seller: string - name: string - price: number - listPrice: number - quantity: number - giftQuantity: number -} - -export interface CartMessages { - status: 'error' - text: string - code: string -} - -export interface Cart { - id: string - items: CartItem[] - messages?: CartMessages[] -} - -export const getItemId = (item: Pick) => - `${item.skuId}:${item.seller}` +import { getItemId, isGift } from './validate' +import type { Cart, CartItem } from './validate' export const useCart = () => { const { addItem: addItemToCart, ...cart } = useSDKCart() @@ -51,10 +24,11 @@ export const useCart = () => { ...cart, addItem, messages: (cart as Cart).messages, - gifts: cart.items.filter((item) => item.giftQuantity > 0), + gifts: cart.items.filter((item) => isGift(item)), + items: cart.items.filter((item) => !isGift(item)), totalUniqueItems: cart.items.length, totalItems: cart.items.reduce( - (acc, curr) => acc + curr.quantity + curr.giftQuantity, + (acc, curr) => acc + (isGift(curr) ? 0 : curr.quantity), 0 ), total: cart.items.reduce( diff --git a/src/sdk/cart/useRemoveButton.ts b/src/sdk/cart/useRemoveButton.ts index 3224ca5e8..35ebe0c3d 100644 --- a/src/sdk/cart/useRemoveButton.ts +++ b/src/sdk/cart/useRemoveButton.ts @@ -4,7 +4,7 @@ import { useCallback } from 'react' import { useCart } from './useCart' -import type { CartItem } from './useCart' +import type { CartItem } from './validate' export const useRemoveButton = (item: CartItem | null | undefined) => { const { removeItem } = useCart() diff --git a/src/sdk/cart/validate.ts b/src/sdk/cart/validate.ts index 57de0f108..3f2d6a582 100644 --- a/src/sdk/cart/validate.ts +++ b/src/sdk/cart/validate.ts @@ -1,18 +1,94 @@ -import type { Cart } from './useCart' +import { ValidateCartMutation } from '@generated/ValidateCartMutation.graphql' +import { gql } from '@vtex/gatsby-plugin-graphql' +import type { CartItem as ICartItem } from '@vtex/store-sdk' +import type { + ValidateCartMutationMutation, + ValidateCartMutationMutationVariables, +} from '@generated/ValidateCartMutation.graphql' +import type { IStoreProduct } from '@vtex/store-api' + +import { request } from '../graphql/request' + +export interface CartItem extends ICartItem { + seller: { + identifier: string + } + price: number + listPrice: number + itemOffered: IStoreProduct +} + +export interface CartMessages { + status: 'error' + text: string +} + +export interface Cart { + id: string + items: CartItem[] + messages?: CartMessages[] +} + +export const isGift = (item: CartItem) => item.price === 0 + +export const getItemId = ( + item: Pick +) => `${item.itemOffered.sku}:${item.seller.identifier}:${item.price}` export const validateCart = async (cart: Cart) => { - const response = await fetch('/api/cart', { - method: 'POST', - headers: { - 'content-type': 'application/json', + const { validateCart: validated } = await request< + ValidateCartMutationMutation, + ValidateCartMutationMutationVariables + >({ + ...ValidateCartMutation, + variables: { + cart: { + order: { + orderNumber: cart.id, + acceptedOffer: cart.items.map(({ id, ...item }) => item), + }, + }, }, - body: JSON.stringify(cart), - credentials: 'omit', }) - if (response.ok) { - return response.json() - } - - throw new Error('Something went wrong while validating cart') + return ( + validated && { + id: validated.order.orderNumber, + items: validated.order.acceptedOffer.map((item) => ({ + ...item, + id: getItemId(item), + })), + messages: validated.messages, + } + ) } + +export const mutation = gql` + mutation ValidateCartMutation($cart: IStoreCart!) { + validateCart(cart: $cart) { + order { + orderNumber + acceptedOffer { + seller { + identifier + } + quantity + price + listPrice + itemOffered { + sku + name + image { + url + alternateName + } + } + } + } + messages { + text + status + } + } + } +` diff --git a/src/server/index.js b/src/server/index.js index b69578dcb..fa7d4bbcc 100644 --- a/src/server/index.js +++ b/src/server/index.js @@ -7,6 +7,7 @@ const options = { platform: process.env.GATSBY_COMMERCE_PLATFORM, account: process.env.GATSBY_STORE_ID, environment: process.env.GATSBY_VTEX_ENVIRONMENT, + channel: process.env.GATSBY_VTEX_CHANNEL, } const schema = storeApiGetSchema(options) diff --git a/src/typings/schema.graphql.d.ts b/src/typings/schema.graphql.d.ts index 7e9aa5001..089d66731 100644 --- a/src/typings/schema.graphql.d.ts +++ b/src/typings/schema.graphql.d.ts @@ -249,6 +249,8 @@ type DirectoryCtimeArgs = { type Site = Node & { buildTime: Maybe; siteMetadata: Maybe; + port: Maybe; + host: Maybe; flags: Maybe; polyfill: Maybe; pathPrefix: Maybe; @@ -525,6 +527,8 @@ type QueryAllDirectoryArgs = { type QuerySiteArgs = { buildTime: Maybe; siteMetadata: Maybe; + port: Maybe; + host: Maybe; flags: Maybe; polyfill: Maybe; pathPrefix: Maybe; @@ -1272,6 +1276,8 @@ type SiteFieldsEnum = | 'siteMetadata___titleTemplate' | 'siteMetadata___author' | 'siteMetadata___siteUrl' + | 'port' + | 'host' | 'flags___DEV_SSR' | 'flags___FAST_DEV' | 'flags___LMDB_STORE' @@ -1379,6 +1385,8 @@ type SiteGroupConnection = { type SiteFilterInput = { buildTime: Maybe; siteMetadata: Maybe; + port: Maybe; + host: Maybe; flags: Maybe; polyfill: Maybe; pathPrefix: Maybe; @@ -1605,9 +1613,6 @@ type SitePluginPluginOptionsFilterInput = { workboxConfig: Maybe; env: Maybe; defer: Maybe; - server: Maybe; - basePath: Maybe; - sizes: Maybe; color: Maybe; showSpinner: Maybe; src: Maybe; @@ -1618,10 +1623,6 @@ type SitePluginPluginOptionsFilterInput = { json: Maybe; outDir: Maybe; stats: Maybe; - sourceProducts: Maybe; - sourceCollections: Maybe; - maxNumProducts: Maybe; - maxNumCollections: Maybe; httpOptions: Maybe; serverOptions: Maybe; path: Maybe; @@ -1629,6 +1630,11 @@ type SitePluginPluginOptionsFilterInput = { allExtensions: Maybe; isTSX: Maybe; jsxPragma: Maybe; + server: Maybe; + sourceProducts: Maybe; + sourceCollections: Maybe; + maxNumProducts: Maybe; + maxNumCollections: Maybe; }; type SitePluginPluginOptionsWorkboxConfigFilterInput = { @@ -1922,9 +1928,6 @@ type SitePageFieldsEnum = | 'pluginCreator___pluginOptions___appendScript' | 'pluginCreator___pluginOptions___workboxConfig___globPatterns' | 'pluginCreator___pluginOptions___defer' - | 'pluginCreator___pluginOptions___server' - | 'pluginCreator___pluginOptions___basePath' - | 'pluginCreator___pluginOptions___sizes' | 'pluginCreator___pluginOptions___color' | 'pluginCreator___pluginOptions___showSpinner' | 'pluginCreator___pluginOptions___src' @@ -1935,10 +1938,6 @@ type SitePageFieldsEnum = | 'pluginCreator___pluginOptions___json' | 'pluginCreator___pluginOptions___outDir' | 'pluginCreator___pluginOptions___stats___context' - | 'pluginCreator___pluginOptions___sourceProducts' - | 'pluginCreator___pluginOptions___sourceCollections' - | 'pluginCreator___pluginOptions___maxNumProducts' - | 'pluginCreator___pluginOptions___maxNumCollections' | 'pluginCreator___pluginOptions___httpOptions' | 'pluginCreator___pluginOptions___serverOptions' | 'pluginCreator___pluginOptions___path' @@ -1946,6 +1945,11 @@ type SitePageFieldsEnum = | 'pluginCreator___pluginOptions___allExtensions' | 'pluginCreator___pluginOptions___isTSX' | 'pluginCreator___pluginOptions___jsxPragma' + | 'pluginCreator___pluginOptions___server' + | 'pluginCreator___pluginOptions___sourceProducts' + | 'pluginCreator___pluginOptions___sourceCollections' + | 'pluginCreator___pluginOptions___maxNumProducts' + | 'pluginCreator___pluginOptions___maxNumCollections' | 'pluginCreator___nodeAPIs' | 'pluginCreator___browserAPIs' | 'pluginCreator___ssrAPIs' @@ -2264,6 +2268,8 @@ type StoreOfferFilterInput = { itemCondition: Maybe; availability: Maybe; seller: Maybe; + itemOffered: Maybe; + quantity: Maybe; remoteTypeName: Maybe; }; @@ -2272,6 +2278,28 @@ type StoreOrganizationFilterInput = { remoteTypeName: Maybe; }; +type StoreProductFilterInput = { + seo: Maybe; + breadcrumbList: Maybe; + slug: Maybe; + name: Maybe; + productID: Maybe; + brand: Maybe; + description: Maybe; + image: Maybe; + offers: Maybe; + sku: Maybe; + gtin: Maybe; + review: Maybe; + aggregateRating: Maybe; + isVariantOf: Maybe; + remoteTypeName: Maybe; + id: Maybe; + parent: Maybe; + children: Maybe; + internal: Maybe; +}; + type StoreReviewFilterListInput = { elemMatch: Maybe; }; @@ -2310,28 +2338,6 @@ type StoreProductFilterListInput = { elemMatch: Maybe; }; -type StoreProductFilterInput = { - seo: Maybe; - breadcrumbList: Maybe; - slug: Maybe; - name: Maybe; - productID: Maybe; - brand: Maybe; - description: Maybe; - image: Maybe; - offers: Maybe; - sku: Maybe; - gtin: Maybe; - review: Maybe; - aggregateRating: Maybe; - isVariantOf: Maybe; - remoteTypeName: Maybe; - id: Maybe; - parent: Maybe; - children: Maybe; - internal: Maybe; -}; - type StoreProductConnection = { totalCount: Scalars['Int']; edges: Array; @@ -2408,6 +2414,18 @@ type StoreProductFieldsEnum = | 'offers___offers___availability' | 'offers___offers___seller___identifier' | 'offers___offers___seller___remoteTypeName' + | 'offers___offers___itemOffered___slug' + | 'offers___offers___itemOffered___name' + | 'offers___offers___itemOffered___productID' + | 'offers___offers___itemOffered___description' + | 'offers___offers___itemOffered___image' + | 'offers___offers___itemOffered___sku' + | 'offers___offers___itemOffered___gtin' + | 'offers___offers___itemOffered___review' + | 'offers___offers___itemOffered___remoteTypeName' + | 'offers___offers___itemOffered___id' + | 'offers___offers___itemOffered___children' + | 'offers___offers___quantity' | 'offers___offers___remoteTypeName' | 'offers___remoteTypeName' | 'sku' @@ -2732,9 +2750,6 @@ type SitePluginFieldsEnum = | 'pluginOptions___env___branch_deploy___policy' | 'pluginOptions___env___deploy_preview___policy' | 'pluginOptions___defer' - | 'pluginOptions___server' - | 'pluginOptions___basePath' - | 'pluginOptions___sizes' | 'pluginOptions___color' | 'pluginOptions___showSpinner' | 'pluginOptions___src' @@ -2745,10 +2760,6 @@ type SitePluginFieldsEnum = | 'pluginOptions___json' | 'pluginOptions___outDir' | 'pluginOptions___stats___context' - | 'pluginOptions___sourceProducts' - | 'pluginOptions___sourceCollections' - | 'pluginOptions___maxNumProducts' - | 'pluginOptions___maxNumCollections' | 'pluginOptions___httpOptions' | 'pluginOptions___serverOptions' | 'pluginOptions___path' @@ -2756,6 +2767,11 @@ type SitePluginFieldsEnum = | 'pluginOptions___allExtensions' | 'pluginOptions___isTSX' | 'pluginOptions___jsxPragma' + | 'pluginOptions___server' + | 'pluginOptions___sourceProducts' + | 'pluginOptions___sourceCollections' + | 'pluginOptions___maxNumProducts' + | 'pluginOptions___maxNumCollections' | 'nodeAPIs' | 'browserAPIs' | 'ssrAPIs' @@ -2946,6 +2962,15 @@ type SiteBuildMetadataSortInput = { order: Maybe>>; }; +type Mutation = { + validateCart: Maybe; +}; + + +type MutationValidateCartArgs = { + cart: IStoreCart; +}; + type StoreBrand = { name: Scalars['String']; remoteTypeName: Scalars['String']; @@ -3015,6 +3040,11 @@ type StoreImage = { remoteTypeName: Scalars['String']; }; +type IStoreImage = { + url: Scalars['String']; + alternateName: Scalars['String']; +}; + type StorePageInfo = { hasNextPage: Scalars['Boolean']; hasPreviousPage: Scalars['Boolean']; @@ -3045,6 +3075,12 @@ type StoreProduct = Node & { internal: Internal; }; +type IStoreProduct = { + sku: Scalars['String']; + name: Scalars['String']; + image: Array; +}; + type StoreSeo = { title: Scalars['String']; titleTemplate: Scalars['String']; @@ -3062,9 +3098,19 @@ type StoreOffer = { itemCondition: Scalars['String']; availability: Scalars['String']; seller: StoreOrganization; + itemOffered: StoreProduct; + quantity: Scalars['Int']; remoteTypeName: Scalars['String']; }; +type IStoreOffer = { + price: Scalars['Float']; + listPrice: Scalars['Float']; + seller: IStoreOrganization; + itemOffered: IStoreProduct; + quantity: Scalars['Int']; +}; + type StoreAggregateRating = { ratingValue: Scalars['Float']; reviewCount: Scalars['Int']; @@ -3100,6 +3146,10 @@ type StoreOrganization = { remoteTypeName: Scalars['String']; }; +type IStoreOrganization = { + identifier: Scalars['String']; +}; + type StoreAggregateOffer = { highPrice: Scalars['Float']; lowPrice: Scalars['Float']; @@ -3109,6 +3159,35 @@ type StoreAggregateOffer = { remoteTypeName: Scalars['String']; }; +type StoreOrder = { + orderNumber: Scalars['String']; + acceptedOffer: Array; +}; + +type IStoreOrder = { + orderNumber: Scalars['String']; + acceptedOffer: Array; +}; + +type StoreCartMessage = { + text: Scalars['String']; + status: StoreStatus; +}; + +type StoreCart = { + order: StoreOrder; + messages: Array; +}; + +type IStoreCart = { + order: IStoreOrder; +}; + +type StoreStatus = + | 'INFO' + | 'WARNING' + | 'ERROR'; + type StoreProductConnection_Remote = { edges: Array; pageInfo: StorePageInfo; @@ -3153,9 +3232,6 @@ type SitePluginPluginOptions = { workboxConfig: Maybe; env: Maybe; defer: Maybe; - server: Maybe; - basePath: Maybe; - sizes: Maybe>>; color: Maybe; showSpinner: Maybe; src: Maybe; @@ -3166,10 +3242,6 @@ type SitePluginPluginOptions = { json: Maybe; outDir: Maybe; stats: Maybe; - sourceProducts: Maybe; - sourceCollections: Maybe; - maxNumProducts: Maybe; - maxNumCollections: Maybe; httpOptions: Maybe>>>>; serverOptions: Maybe>>>>; path: Maybe; @@ -3177,6 +3249,11 @@ type SitePluginPluginOptions = { allExtensions: Maybe; isTSX: Maybe; jsxPragma: Maybe; + server: Maybe; + sourceProducts: Maybe; + sourceCollections: Maybe; + maxNumProducts: Maybe; + maxNumCollections: Maybe; }; type SitePluginPluginOptionsWorkboxConfig = { diff --git a/src/views/search/Seo/index.tsx b/src/views/search/Seo/index.tsx index f968cd6c7..ad1970698 100644 --- a/src/views/search/Seo/index.tsx +++ b/src/views/search/Seo/index.tsx @@ -23,7 +23,7 @@ function Seo({ site, title }: Props) { titleTemplate={titleTemplate!} openGraph={{ type: 'website', - title: title!, + title, description: description!, }} defer diff --git a/vtex.env b/vtex.env index 91e4476f4..8783fc245 100644 --- a/vtex.env +++ b/vtex.env @@ -1,7 +1,7 @@ GATSBY_COMMERCE_PLATFORM=vtex GATSBY_STORE_ID=fashioneurope +GATSBY_VTEX_CHANNEL=1 GATSBY_VTEX_ENVIRONMENT=vtexcommercestable -GATSBY_VTEX_IO_WORKSPACE=master GATSBY_EXPERIMENTAL_QUERY_CONCURRENCY=20 GATSBY_CPU_COUNT=4 diff --git a/yarn.lock b/yarn.lock index 91f4eea7d..933a4cb1e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2283,10 +2283,10 @@ "@typescript-eslint/types" "4.29.1" eslint-visitor-keys "^2.0.0" -"@vtex/gatsby-plugin-graphql@^1.1.14": - version "1.1.14" - resolved "https://registry.yarnpkg.com/@vtex/gatsby-plugin-graphql/-/gatsby-plugin-graphql-1.1.14.tgz#72b365769d9deddcae2de0d139a7ba8f5ec97d46" - integrity sha512-ly6NiUTCj3dJLaUwtrxeHWRrUEaizLNq1tVynOpDhEmDSrFbGJHtwSc4gYNBUUqhUcBSO9YeQtxDY6ZDpfjCBw== +"@vtex/gatsby-plugin-graphql@^1.1.16": + version "1.1.16" + resolved "https://registry.yarnpkg.com/@vtex/gatsby-plugin-graphql/-/gatsby-plugin-graphql-1.1.16.tgz#73a9c9fb04495e9f953a00a76d21741832a7245a" + integrity sha512-pwUk6AeldmReJm4tljBWSeWEFPFHuc55flKVjtrusj44+1SKR/mIPh8Pb9P6VdF5s5Ef9iWf/EUXszDytZ9u0w== dependencies: "@graphql-codegen/core" "^1.17.7" "@graphql-codegen/plugin-helpers" "^1.17.7" @@ -2295,58 +2295,59 @@ "@graphql-tools/relay-operation-optimizer" "^6.0.15" fs-extra "^9.0.1" -"@vtex/gatsby-plugin-nginx@^1.1.14": - version "1.1.14" - resolved "https://registry.yarnpkg.com/@vtex/gatsby-plugin-nginx/-/gatsby-plugin-nginx-1.1.14.tgz#faf07fd5ade9ef513caa723355ddc3207d056a15" - integrity sha512-pD2RHB2IlVk+t3qm9poPOUJgdaPXYmzDSWJQME/l7iSFRCgqLd988L71OyXosV2APS3zSwbkAosXNWVwEoJO8g== +"@vtex/gatsby-plugin-nginx@^1.1.16": + version "1.1.16" + resolved "https://registry.yarnpkg.com/@vtex/gatsby-plugin-nginx/-/gatsby-plugin-nginx-1.1.16.tgz#5aba9a2aae39bb8cfb390730a20410fa599535d4" + integrity sha512-ptjveFYZjLVd/hREa5rsfZkRDQYYjyqKLTU2sxZCjgQagoWGr7lujX8gsD2dpZVh7ubPltylb83fxB7VyUUoDA== dependencies: kebab-hash "^0.1.2" webpack-assets-manifest "^5.0.6" -"@vtex/gatsby-plugin-thumbor@^1.1.14": - version "1.1.14" - resolved "https://registry.yarnpkg.com/@vtex/gatsby-plugin-thumbor/-/gatsby-plugin-thumbor-1.1.14.tgz#932a46cafddc04c01352c67da39b6feb493946e0" - integrity sha512-SKgXA96HPl+xSvDZEnzXpX82FoQNDSn2HH+U/7UvTVI6FoluJnszGQUetdY7z3Z4AE2htKSPD17S9x8y0Nn7tA== +"@vtex/gatsby-plugin-thumbor@^1.1.16": + version "1.1.16" + resolved "https://registry.yarnpkg.com/@vtex/gatsby-plugin-thumbor/-/gatsby-plugin-thumbor-1.1.16.tgz#818c304da12a1c17a28a96e909ccbacab7dba0bf" + integrity sha512-u4RhDitsccAyMGS73rwYHw7Yup5ULwNdYfTfmccvBuj5XgN5QoNgGl6dp5sSNaaVwipTWHFQJPiIeYAIqyA6KQ== -"@vtex/gatsby-source-store@^1.1.14": - version "1.1.14" - resolved "https://registry.yarnpkg.com/@vtex/gatsby-source-store/-/gatsby-source-store-1.1.14.tgz#b8be3b42f637b248dc1e2e6d60ec02e4a6c1d691" - integrity sha512-CO0wDh22qtTlHNSgUjy1dFiNEfXhv5oJMz5O1fylvD51oxLwR0W5wv6KVesYNDdwvMpTDlkw0DaURP/duBcBAw== +"@vtex/gatsby-source-store@^1.1.16": + version "1.1.16" + resolved "https://registry.yarnpkg.com/@vtex/gatsby-source-store/-/gatsby-source-store-1.1.16.tgz#9d86fdad342181d3e654d1fd26e580cffac0e596" + integrity sha512-XR17WS4yHZ/6YFurxD951j+Ge/j9gRIOnxnuVNlK9+dCKJRmMT9Lfk3kiwB3EoMFhIjhLGrdwAg2CVReE8DkVg== dependencies: gatsby-graphql-source-toolkit "^2.0.1" -"@vtex/lighthouse-config@^1.1.14": - version "1.1.14" - resolved "https://registry.yarnpkg.com/@vtex/lighthouse-config/-/lighthouse-config-1.1.14.tgz#04320ac327e17ab233001f47e3bec688beab2027" - integrity sha512-5PPYSqV8ULJzFU/kmDsK1qyaK8twG2E6YBToiN0NiSeUSNlf6HVLHPYFDtX+63pl3hF0D6xSINTrhI+yjqmNwg== +"@vtex/lighthouse-config@^1.1.16": + version "1.1.16" + resolved "https://registry.yarnpkg.com/@vtex/lighthouse-config/-/lighthouse-config-1.1.16.tgz#a96f88fa9deb0ecd0c8add42ff207eed08a40cc8" + integrity sha512-Wc3a3NCWpMPJYhjVwNtJFzFE6XTH/IUCldcESav9L+mfGUqtRai4Rf1uP7vZbs34bJzNsDiffXlIxnbot9wHUA== "@vtex/prettier-config@0.3.6": version "0.3.6" resolved "https://registry.yarnpkg.com/@vtex/prettier-config/-/prettier-config-0.3.6.tgz#31762608d9a59b815b6d4e963e439b12f1a12279" integrity sha512-nXE3BcMODomFK3EowfK+Hdj2qQRqB8JcdRv8yTREXnN9xq8DYKmH/dWB+RY/Hn3KozFLbygpZRbqYsiA6HDINQ== -"@vtex/store-api@^1.1.14": - version "1.1.14" - resolved "https://registry.yarnpkg.com/@vtex/store-api/-/store-api-1.1.14.tgz#92e031e63c89b44e351a709a7c3b380d8e60d470" - integrity sha512-OovbI0xtgvXZitM8CPjB99KW7Uzh3C/6XuqVafGkDCGMDebuDcljN+ky6tFfo2kdVo9OAiTd5aP8WyzacHESOQ== +"@vtex/store-api@^1.1.16": + version "1.1.16" + resolved "https://registry.yarnpkg.com/@vtex/store-api/-/store-api-1.1.16.tgz#b8090568a04b177797fc818f59cbc46c1f28e177" + integrity sha512-YgCUOiomabfKkm6Iadb+G0EMzI8Kmm/dm+HnHMtz14wOxmiI5uMc+kKMLpNaig4kT50VqXGCgmgtvGASt+0dfw== dependencies: "@graphql-tools/schema" "^8.2.0" - graphql "^15.5.3" + dataloader "^2.0.0" + fast-deep-equal "^3.1.3" isomorphic-unfetch "^3.1.0" rollup-plugin-graphql "^0.1.0" slugify "^1.6.0" -"@vtex/store-sdk@^1.1.14": - version "1.1.14" - resolved "https://registry.yarnpkg.com/@vtex/store-sdk/-/store-sdk-1.1.14.tgz#7beb5491fc826c09776b4a0f70f82daa5bc4e641" - integrity sha512-/p9dyrljNxyw4tDt3X3kanR39gdzuCXl2cIJo6RY56ii3ZWM/mvAue/v1xeaDjGkEeG9+rAUeAra6UIykz5dIg== +"@vtex/store-sdk@^1.1.16": + version "1.1.16" + resolved "https://registry.yarnpkg.com/@vtex/store-sdk/-/store-sdk-1.1.16.tgz#da584a5ba3b33971811d067a01581152511ba21e" + integrity sha512-BbyBqyCSKyeGLXNlD0IekOW8ihcn3SDBrvZSLnfwSmg3P+GGdb8EEDElYfzgaNCC45x5jB9LFd21JTGdqbe6Nw== dependencies: idb-keyval "^5.1.3" -"@vtex/store-ui@^1.1.14": - version "1.1.14" - resolved "https://registry.yarnpkg.com/@vtex/store-ui/-/store-ui-1.1.14.tgz#d95e3dbb192d31b21e133a4a08c8ab8af14a6aa1" - integrity sha512-DIjg0LDA2fKr6qZCOb5D03XmRn0G3mIVRiQoQmoIyCu4CKsY76xUeBds49pLDHWEhZzWty8uwjvl4d6jfbLaCQ== +"@vtex/store-ui@^1.1.16": + version "1.1.16" + resolved "https://registry.yarnpkg.com/@vtex/store-ui/-/store-ui-1.1.16.tgz#67530706fbd88ac998a606cf575a621afaea5925" + integrity sha512-cQ0OC6ElSghM5/au30Zc1NjpXc+A82SfBvCm7bNuHF2qX3PnXK7mYOKnWVNFlYbpyHeiAxNuES/+RmlwiNsWBA== dependencies: "@reach/popover" "^0.16.0" react-swipeable "^6.1.2" @@ -4816,7 +4817,7 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -dataloader@2.0.0: +dataloader@2.0.0, dataloader@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.0.0.tgz#41eaf123db115987e21ca93c005cd7753c55fe6f" integrity sha512-YzhyDAwA4TaQIhM5go+vCLmU0UikghC/t9DTQYZR2M/UvZ1MdOhPezSDZcjj9uqQJOMqjLcpWtyW2iNINdlatQ== @@ -7424,7 +7425,7 @@ graphql-ws@^4.4.1: resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-4.9.0.tgz#5cfd8bb490b35e86583d8322f5d5d099c26e365c" integrity sha512-sHkK9+lUm20/BGawNEWNtVAeJzhZeBg21VmvmLoT5NdGVeZWv5PdIhkcayQIAgjSyyQ17WMKmbDijIPG2On+Ag== -graphql@^15.4.0, graphql@^15.5.3: +graphql@^15.4.0: version "15.6.0" resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.6.0.tgz#e69323c6a9780a1a4b9ddf7e35ca8904bb04df02" integrity sha512-WJR872Zlc9hckiEPhXgyUftXH48jp2EjO5tgBBOyNMRJZ9fviL2mJBD6CAysk6N5S0r9BTs09Qk39nnJBkvOXQ==