4
0
forked from crowetic/commerce

Aligned with upstream changes

This commit is contained in:
cond0r 2021-02-25 09:55:02 +02:00
parent d83367f257
commit f242f3c588
17 changed files with 77 additions and 47 deletions

View File

@ -8,6 +8,7 @@ import useCart from '@framework/cart/use-cart'
import usePrice from '@framework/product/use-price'
import CartItem from '../CartItem'
import s from './CartSidebarView.module.css'
import { LineItem } from '@commerce/types'
const CartSidebarView: FC = () => {
const { closeSidebar } = useUI()
@ -91,7 +92,7 @@ const CartSidebarView: FC = () => {
My Cart
</h2>
<ul className="py-6 space-y-6 sm:py-0 sm:space-y-0 sm:divide-y sm:divide-accents-3 border-t border-accents-3">
{data!.lineItems.map((item) => (
{data!.lineItems.map((item: any) => (
<CartItem
key={item.id}
item={item}

View File

@ -4,7 +4,7 @@
const merge = require('deepmerge')
const PROVIDERS = ['bigcommerce']
const PROVIDERS = ['bigcommerce', 'shopify']
function getProviderName() {
return process.env.BIGCOMMERCE_STOREFRONT_API_URL ? 'bigcommerce' : null

View File

@ -21,16 +21,19 @@ const checkoutApi: ShopifyApiHandler<any> = async (req, res, config) => {
const { cookies } = req
const checkoutUrl = cookies[SHOPIFY_CHECKOUT_URL_COOKIE]
const customerCookie = cookies[SHOPIFY_CUSTOMER_TOKEN_COOKIE]
try {
await config.fetch(associateCustomerWithCheckoutMutation, {
variables: {
checkoutId: cookies[SHOPIFY_CHECKOUT_ID_COOKIE],
customerAccessToken: cookies[SHOPIFY_CUSTOMER_TOKEN_COOKIE],
},
})
} catch (error) {
console.error(error)
if (customerCookie) {
try {
await config.fetch(associateCustomerWithCheckoutMutation, {
variables: {
checkoutId: cookies[SHOPIFY_CHECKOUT_ID_COOKIE],
customerAccessToken: cookies[SHOPIFY_CUSTOMER_TOKEN_COOKIE],
},
})
} catch (error) {
console.error(error)
}
}
if (checkoutUrl) {

View File

@ -4,14 +4,12 @@ import { CommerceError, ValidationError } from '@commerce/utils/errors'
import useCustomer from '../customer/use-customer'
import createCustomerAccessTokenMutation from '../utils/mutations/customer-access-token-create'
import {
CustomerAccessToken,
CustomerAccessTokenCreateInput,
CustomerAccessTokenCreatePayload,
CustomerUserError,
Mutation,
MutationCheckoutCreateArgs,
} from '@framework/schema'
import useLogin, { UseLogin } from '@commerce/use-login'
import useLogin, { UseLogin } from '@commerce/auth/use-login'
import { setCustomerToken } from '@framework/utils'
export default useLogin as UseLogin<typeof handler>

View File

@ -1,6 +1,6 @@
import { useCallback } from 'react'
import type { MutationHook } from '@commerce/utils/types'
import useLogout, { UseLogout } from '@commerce/use-logout'
import useLogout, { UseLogout } from '@commerce/auth/use-logout'
import useCustomer from '../customer/use-customer'
import customerAccessTokenDeleteMutation from '@framework/utils/mutations/customer-access-token-delete'
import {

View File

@ -1,7 +1,7 @@
import { useCallback } from 'react'
import type { MutationHook } from '@commerce/utils/types'
import { CommerceError } from '@commerce/utils/errors'
import useSignup, { UseSignup } from '@commerce/use-signup'
import useSignup, { UseSignup } from '@commerce/auth/use-signup'
import useCustomer from '../customer/use-customer'
import { CustomerCreateInput } from '@framework/schema'

View File

@ -1,5 +1,5 @@
import { getConfig, ShopifyConfig } from '../api'
import { Page, PageEdge } from '../schema'
import { PageEdge } from '../schema'
import { getAllPagesQuery } from '../utils/queries'
type Variables = {
@ -10,6 +10,14 @@ type ReturnType = {
pages: Page[]
}
export type Page = {
id: string
name: string
url: string
sort_order?: number
body: string
}
const getAllPages = async (options?: {
variables?: Variables
config: ShopifyConfig
@ -21,10 +29,13 @@ const getAllPages = async (options?: {
const { data } = await config.fetch(getAllPagesQuery, { variables })
const edges = data.pages?.edges
const pages = edges?.map(({ node }: PageEdge) => ({
...node,
url: node.handle,
}))
const pages = edges?.map(
({ node: { title: name, handle: url, ...node } }: PageEdge) => ({
...node,
url,
name,
})
)
return { pages }
}

View File

@ -1,15 +1,13 @@
import { GraphQLFetcherResult } from '@commerce/api'
import { getConfig, ShopifyConfig } from '../api'
import getPageQuery from '@framework/utils/queries/get-page-query'
import { Page, PageEdge } from '@framework/schema'
import getPageQuery from '../utils/queries/get-page-query'
import { Page } from './get-all-pages'
type Variables = {
slug: string
}
type ReturnType = {
page: any
page: Page
}
const getPage = async (options: {
@ -20,16 +18,17 @@ const getPage = async (options: {
let { config, variables } = options ?? {}
config = getConfig(config)
const { data }: GraphQLFetcherResult = await config.fetch(getPageQuery, {
const { data } = await config.fetch(getPageQuery, {
variables,
})
const page: Page = data.pageByHandle
const page = data.pageByHandle
return {
page: page
? {
...page,
name: page.title,
url: page?.handle,
}
: null,

View File

@ -0,0 +1,11 @@
const providerConfig = require('./config.json')
module.exports = {
commerce: {
provider: 'shopify',
...providerConfig,
},
images: {
domains: ['cdn.shopify.com'],
},
}

View File

@ -1,10 +1,19 @@
import { Product } from '@commerce/types'
import { getConfig, ShopifyConfig } from '../api'
import fetchAllProducts from '../api/utils/fetch-all-products'
import { ProductEdge } from '../schema'
import getAllProductsPathsQuery from '../utils/queries/get-all-products-paths-query'
type ProductPath = {
path: string
}
export type ProductPathNode = {
node: ProductPath
}
type ReturnType = {
products: any[]
products: ProductPathNode[]
}
const getAllProductPaths = async (options?: {

View File

@ -1,10 +1,9 @@
import { GraphQLFetcherResult } from '@commerce/api'
import { getConfig, ShopifyConfig } from '../api'
import { Product, ProductEdge } from '../schema'
import { ProductEdge } from '../schema'
import { getAllProductsQuery } from '../utils/queries'
import { normalizeProduct } from '@framework/utils/normalize'
export type ProductNode = Product
import { Product } from '@commerce/types'
type Variables = {
first?: number
@ -12,7 +11,7 @@ type Variables = {
}
type ReturnType = {
products: any[]
products: Product[]
}
const getAllProducts = async (options: {
@ -28,9 +27,10 @@ const getAllProducts = async (options: {
{ variables }
)
const products = data.products?.edges?.map(({ node: p }: ProductEdge) =>
normalizeProduct(p)
)
const products =
data.products?.edges?.map(({ node: p }: ProductEdge) =>
normalizeProduct(p)
) ?? []
return {
products,

View File

@ -1,2 +1,2 @@
export * from '@commerce/use-price'
export { default } from '@commerce/use-price'
export * from '@commerce/product/use-price'
export { default } from '@commerce/product/use-price'

View File

@ -77,7 +77,7 @@ export function normalizeProduct(productNode: ShopifyProduct): any {
slug: handle?.replace(/^\/+|\/+$/g, ''),
price: money(priceRange?.minVariantPrice),
images: normalizeProductImages(images),
variants: variants ? normalizeProductVariants(variants) : null,
variants: variants ? normalizeProductVariants(variants) : [],
options: options ? options.map((o) => normalizeProductOption(o)) : [],
...rest,
}

View File

@ -6,9 +6,6 @@ export const getAllPagesQuery = /* GraphQL */ `
id
title
handle
body
bodySummary
url
}
}
}

View File

@ -7,7 +7,6 @@ export const getPageQuery = /* GraphQL */ `
title
handle
body
bodySummary
url
}
}

View File

@ -1,7 +1,8 @@
const withCommerceConfig = require('./framework/commerce/with-config')
const commerce = { provider: 'bigcommerce' }
const commerce = { provider: 'shopify' }
const isBC = commerce.provider === 'bigcommerce'
const isShopify = commerce.provider === 'shopify'
module.exports = withCommerceConfig({
commerce,
@ -11,7 +12,7 @@ module.exports = withCommerceConfig({
},
rewrites() {
return [
isBC && {
(isBC || isShopify) && {
source: '/checkout',
destination: '/api/bigcommerce/checkout',
},

View File

@ -21,8 +21,9 @@
"@assets/*": ["assets/*"],
"@components/*": ["components/*"],
"@commerce": ["framework/commerce"],
"@framework/*": ["framework/shopify/*"],
"@framework": ["framework/shopify"]
"@commerce/*": ["framework/commerce/*"],
"@framework": ["framework/shopify"],
"@framework/*": ["framework/shopify/*"]
}
},
"include": ["next-env.d.ts", "**/*.d.ts", "**/*.ts", "**/*.tsx", "**/*.js"],