mirror of
https://github.com/vercel/commerce.git
synced 2025-07-22 12:24:18 +00:00
feat: early init configuration and provider / use codegen for wp
This commit is contained in:
parent
992ee52d7e
commit
3c93eb980d
@ -1,4 +1,3 @@
|
||||
COMMERCE_PROVIDER=shopify
|
||||
COMMERCE_PROVIDER=woocommerce
|
||||
|
||||
NEXT_PUBLIC_SHOPIFY_STORE_DOMAIN=
|
||||
NEXT_PUBLIC_SHOPIFY_STOREFRONT_ACCESS_TOKEN=
|
||||
NEXT_PUBLIC_WOOCOMMERCE_SHOP_API_URL=
|
||||
|
@ -1,20 +1,16 @@
|
||||
{
|
||||
"schema": {
|
||||
"https://${NEXT_PUBLIC_SHOPIFY_STORE_DOMAIN}/api/2021-07/graphql.json": {
|
||||
"headers": {
|
||||
"X-Shopify-Storefront-Access-Token": "${NEXT_PUBLIC_SHOPIFY_STOREFRONT_ACCESS_TOKEN}"
|
||||
}
|
||||
}
|
||||
"${NEXT_PUBLIC_WOOCOMMERCE_SHOP_API_URL}": {}
|
||||
},
|
||||
"documents": [
|
||||
{
|
||||
"./framework/shopify/**/*.{ts,tsx}": {
|
||||
"./framework/woocommerce/wp/**/*.{ts,tsx}": {
|
||||
"noRequire": true
|
||||
}
|
||||
}
|
||||
],
|
||||
"generates": {
|
||||
"./framework/shopify/schema.d.ts": {
|
||||
"./framework/woocommerce/schema.d.ts": {
|
||||
"plugins": ["typescript", "typescript-operations"],
|
||||
"config": {
|
||||
"scalars": {
|
||||
@ -22,7 +18,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"./framework/shopify/schema.graphql": {
|
||||
"./framework/woocommerce/schema.graphql": {
|
||||
"plugins": ["schema-ast"]
|
||||
}
|
||||
},
|
||||
|
@ -1,6 +1,10 @@
|
||||
{
|
||||
"provider": "shopify",
|
||||
"provider": "woocommerce",
|
||||
"features": {
|
||||
"wishlist": false
|
||||
"cart": false,
|
||||
"search": false,
|
||||
"wishlist": false,
|
||||
"customerAuth": false,
|
||||
"customCheckout": false
|
||||
}
|
||||
}
|
||||
|
@ -1,13 +1,9 @@
|
||||
export const SHOPIFY_CHECKOUT_ID_COOKIE = 'shopify_checkoutId'
|
||||
export const WOOCOMMERCE_CHECKOUT_ID_COOKIE = 'woocommerce_checkoutId'
|
||||
|
||||
export const SHOPIFY_CHECKOUT_URL_COOKIE = 'shopify_checkoutUrl'
|
||||
export const WOOCOMMERCE_CHECKOUT_URL_COOKIE = 'woocommerce_checkoutUrl'
|
||||
|
||||
export const SHOPIFY_CUSTOMER_TOKEN_COOKIE = 'shopify_customerToken'
|
||||
export const WOOCOMMERCE_CUSTOMER_TOKEN_COOKIE = 'woocommerce_customerToken'
|
||||
|
||||
export const STORE_DOMAIN = process.env.NEXT_PUBLIC_SHOPIFY_STORE_DOMAIN
|
||||
export const WOOCOMMERCE_COOKIE_EXPIRE = 30
|
||||
|
||||
export const SHOPIFY_COOKIE_EXPIRE = 30
|
||||
|
||||
export const API_URL = `https://${STORE_DOMAIN}/api/2021-01/graphql.json`
|
||||
|
||||
export const API_TOKEN = process.env.NEXT_PUBLIC_SHOPIFY_STOREFRONT_ACCESS_TOKEN
|
||||
export const API_URL = process.env.NEXT_PUBLIC_WOOCOMMERCE_SHOP_API_URL
|
||||
|
@ -1,5 +1,5 @@
|
||||
import { Fetcher } from '@commerce/utils/types'
|
||||
import { API_TOKEN, API_URL } from './const'
|
||||
import { API_URL } from './const'
|
||||
import { handleFetchResponse } from './utils'
|
||||
|
||||
const fetcher: Fetcher = async ({
|
||||
@ -13,13 +13,7 @@ const fetcher: Fetcher = async ({
|
||||
await fetch(url, {
|
||||
method,
|
||||
body: JSON.stringify({ query, variables: vars }),
|
||||
headers: {
|
||||
'X-Shopify-Storefront-Access-Token': API_TOKEN!,
|
||||
'Content-Type': 'application/json',
|
||||
...(locale && {
|
||||
'Accept-Language': locale,
|
||||
}),
|
||||
},
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
})
|
||||
)
|
||||
}
|
||||
|
@ -7,34 +7,33 @@ import {
|
||||
useCommerce as useCoreCommerce,
|
||||
} from '@commerce'
|
||||
|
||||
import { shopifyProvider } from './provider'
|
||||
import type { ShopifyProvider } from './provider'
|
||||
import { SHOPIFY_CHECKOUT_ID_COOKIE } from './const'
|
||||
import { wooCommerceProvider } from './provider'
|
||||
import type { WooCommerceProvider } from './provider'
|
||||
import { WOOCOMMERCE_CHECKOUT_ID_COOKIE } from './const'
|
||||
|
||||
export { shopifyProvider }
|
||||
export type { ShopifyProvider }
|
||||
export { wooCommerceProvider }
|
||||
export type { WooCommerceProvider }
|
||||
|
||||
export const shopifyConfig: CommerceConfig = {
|
||||
export const wooCommerceConfig: CommerceConfig = {
|
||||
locale: 'en-us',
|
||||
cartCookie: SHOPIFY_CHECKOUT_ID_COOKIE,
|
||||
cartCookie: WOOCOMMERCE_CHECKOUT_ID_COOKIE,
|
||||
}
|
||||
|
||||
export type ShopifyConfig = Partial<CommerceConfig>
|
||||
export type WooCommerceConfig = Partial<CommerceConfig>
|
||||
|
||||
export type ShopifyProps = {
|
||||
children?: ReactNode
|
||||
locale: string
|
||||
} & ShopifyConfig
|
||||
} & WooCommerceConfig
|
||||
|
||||
export function CommerceProvider({ children, ...config }: ShopifyProps) {
|
||||
return (
|
||||
<CoreCommerceProvider
|
||||
provider={shopifyProvider}
|
||||
config={{ ...shopifyConfig, ...config }}
|
||||
provider={wooCommerceProvider}
|
||||
config={{ ...wooCommerceConfig, ...config }}
|
||||
>
|
||||
{children}
|
||||
</CoreCommerceProvider>
|
||||
)
|
||||
}
|
||||
|
||||
export const useCommerce = () => useCoreCommerce<ShopifyProvider>()
|
||||
export const useCommerce = () => useCoreCommerce<WooCommerceProvider>()
|
||||
|
@ -3,6 +3,6 @@ const commerce = require('./commerce.config.json')
|
||||
module.exports = {
|
||||
commerce,
|
||||
images: {
|
||||
domains: ['cdn.shopify.com'],
|
||||
domains: ['localhost'],
|
||||
},
|
||||
}
|
||||
|
@ -1,27 +1,11 @@
|
||||
import { SHOPIFY_CHECKOUT_ID_COOKIE } from './const'
|
||||
|
||||
import { handler as useCart } from './cart/use-cart'
|
||||
import { handler as useAddItem } from './cart/use-add-item'
|
||||
import { handler as useUpdateItem } from './cart/use-update-item'
|
||||
import { handler as useRemoveItem } from './cart/use-remove-item'
|
||||
|
||||
import { handler as useCustomer } from './customer/use-customer'
|
||||
import { handler as useSearch } from './product/use-search'
|
||||
|
||||
import { handler as useLogin } from './auth/use-login'
|
||||
import { handler as useLogout } from './auth/use-logout'
|
||||
import { handler as useSignup } from './auth/use-signup'
|
||||
import { WOOCOMMERCE_CHECKOUT_ID_COOKIE } from './const'
|
||||
|
||||
import fetcher from './fetcher'
|
||||
|
||||
export const shopifyProvider = {
|
||||
export const wooCommerceProvider = {
|
||||
locale: 'en-us',
|
||||
cartCookie: SHOPIFY_CHECKOUT_ID_COOKIE,
|
||||
fetcher,
|
||||
cart: { useCart, useAddItem, useUpdateItem, useRemoveItem },
|
||||
customer: { useCustomer },
|
||||
products: { useSearch },
|
||||
auth: { useLogin, useLogout, useSignup },
|
||||
cartCookie: WOOCOMMERCE_CHECKOUT_ID_COOKIE,
|
||||
}
|
||||
|
||||
export type ShopifyProvider = typeof shopifyProvider
|
||||
export type WooCommerceProvider = typeof wooCommerceProvider
|
||||
|
23428
framework/woocommerce/schema.d.ts
vendored
23428
framework/woocommerce/schema.d.ts
vendored
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
18186
framework/woocommerce/schema.ts
Normal file
18186
framework/woocommerce/schema.ts
Normal file
File diff suppressed because it is too large
Load Diff
8
framework/woocommerce/wp/queries/get-site-info-query.ts
Normal file
8
framework/woocommerce/wp/queries/get-site-info-query.ts
Normal file
@ -0,0 +1,8 @@
|
||||
const getSiteInfoQuery = /* GraphQL */ `
|
||||
query Setting {
|
||||
generalSettings {
|
||||
title
|
||||
}
|
||||
}
|
||||
`
|
||||
export default getSiteInfoQuery
|
6
framework/woocommerce/wp/queries/index.ts
Normal file
6
framework/woocommerce/wp/queries/index.ts
Normal file
@ -0,0 +1,6 @@
|
||||
// export { default as getProductQuery } from './get-product-query'
|
||||
// export { default as getAllProductsQuery } from './get-all-products-query'
|
||||
// export { default as getAllPagesQuery } from './get-all-pages-query'
|
||||
// export { default as getPostsQuery } from './get-posts-query'
|
||||
// export { default as getPageQuery } from './get-page-query'
|
||||
export { default as getSiteInfoQuery } from './get-site-info-query'
|
@ -11,6 +11,7 @@
|
||||
"find:unused": "npx next-unused",
|
||||
"generate": "graphql-codegen",
|
||||
"generate:shopify": "DOTENV_CONFIG_PATH=./.env.local graphql-codegen -r dotenv/config --config framework/shopify/codegen.json",
|
||||
"generate:wpc": "DOTENV_CONFIG_PATH=./.env.local graphql-codegen -r dotenv/config --config framework/woocommerce/codegen.json",
|
||||
"generate:vendure": "graphql-codegen --config framework/vendure/codegen.json",
|
||||
"generate:definitions": "node framework/bigcommerce/scripts/generate-definitions.js"
|
||||
},
|
||||
|
Loading…
x
Reference in New Issue
Block a user