mirror of
https://github.com/vercel/commerce.git
synced 2025-07-22 20:26:49 +00:00
feat: early init configuration and provider / use codegen for wp
This commit is contained in:
@@ -1,4 +1,3 @@
|
|||||||
COMMERCE_PROVIDER=shopify
|
COMMERCE_PROVIDER=woocommerce
|
||||||
|
|
||||||
NEXT_PUBLIC_SHOPIFY_STORE_DOMAIN=
|
NEXT_PUBLIC_WOOCOMMERCE_SHOP_API_URL=
|
||||||
NEXT_PUBLIC_SHOPIFY_STOREFRONT_ACCESS_TOKEN=
|
|
||||||
|
@@ -1,20 +1,16 @@
|
|||||||
{
|
{
|
||||||
"schema": {
|
"schema": {
|
||||||
"https://${NEXT_PUBLIC_SHOPIFY_STORE_DOMAIN}/api/2021-07/graphql.json": {
|
"${NEXT_PUBLIC_WOOCOMMERCE_SHOP_API_URL}": {}
|
||||||
"headers": {
|
|
||||||
"X-Shopify-Storefront-Access-Token": "${NEXT_PUBLIC_SHOPIFY_STOREFRONT_ACCESS_TOKEN}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"documents": [
|
"documents": [
|
||||||
{
|
{
|
||||||
"./framework/shopify/**/*.{ts,tsx}": {
|
"./framework/woocommerce/wp/**/*.{ts,tsx}": {
|
||||||
"noRequire": true
|
"noRequire": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"generates": {
|
"generates": {
|
||||||
"./framework/shopify/schema.d.ts": {
|
"./framework/woocommerce/schema.d.ts": {
|
||||||
"plugins": ["typescript", "typescript-operations"],
|
"plugins": ["typescript", "typescript-operations"],
|
||||||
"config": {
|
"config": {
|
||||||
"scalars": {
|
"scalars": {
|
||||||
@@ -22,7 +18,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"./framework/shopify/schema.graphql": {
|
"./framework/woocommerce/schema.graphql": {
|
||||||
"plugins": ["schema-ast"]
|
"plugins": ["schema-ast"]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@@ -1,6 +1,10 @@
|
|||||||
{
|
{
|
||||||
"provider": "shopify",
|
"provider": "woocommerce",
|
||||||
"features": {
|
"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 = process.env.NEXT_PUBLIC_WOOCOMMERCE_SHOP_API_URL
|
||||||
|
|
||||||
export const API_URL = `https://${STORE_DOMAIN}/api/2021-01/graphql.json`
|
|
||||||
|
|
||||||
export const API_TOKEN = process.env.NEXT_PUBLIC_SHOPIFY_STOREFRONT_ACCESS_TOKEN
|
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
import { Fetcher } from '@commerce/utils/types'
|
import { Fetcher } from '@commerce/utils/types'
|
||||||
import { API_TOKEN, API_URL } from './const'
|
import { API_URL } from './const'
|
||||||
import { handleFetchResponse } from './utils'
|
import { handleFetchResponse } from './utils'
|
||||||
|
|
||||||
const fetcher: Fetcher = async ({
|
const fetcher: Fetcher = async ({
|
||||||
@@ -13,13 +13,7 @@ const fetcher: Fetcher = async ({
|
|||||||
await fetch(url, {
|
await fetch(url, {
|
||||||
method,
|
method,
|
||||||
body: JSON.stringify({ query, variables: vars }),
|
body: JSON.stringify({ query, variables: vars }),
|
||||||
headers: {
|
headers: { 'Content-Type': 'application/json' },
|
||||||
'X-Shopify-Storefront-Access-Token': API_TOKEN!,
|
|
||||||
'Content-Type': 'application/json',
|
|
||||||
...(locale && {
|
|
||||||
'Accept-Language': locale,
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@@ -7,34 +7,33 @@ import {
|
|||||||
useCommerce as useCoreCommerce,
|
useCommerce as useCoreCommerce,
|
||||||
} from '@commerce'
|
} from '@commerce'
|
||||||
|
|
||||||
import { shopifyProvider } from './provider'
|
import { wooCommerceProvider } from './provider'
|
||||||
import type { ShopifyProvider } from './provider'
|
import type { WooCommerceProvider } from './provider'
|
||||||
import { SHOPIFY_CHECKOUT_ID_COOKIE } from './const'
|
import { WOOCOMMERCE_CHECKOUT_ID_COOKIE } from './const'
|
||||||
|
|
||||||
export { shopifyProvider }
|
export { wooCommerceProvider }
|
||||||
export type { ShopifyProvider }
|
export type { WooCommerceProvider }
|
||||||
|
|
||||||
export const shopifyConfig: CommerceConfig = {
|
export const wooCommerceConfig: CommerceConfig = {
|
||||||
locale: 'en-us',
|
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 = {
|
export type ShopifyProps = {
|
||||||
children?: ReactNode
|
children?: ReactNode
|
||||||
locale: string
|
} & WooCommerceConfig
|
||||||
} & ShopifyConfig
|
|
||||||
|
|
||||||
export function CommerceProvider({ children, ...config }: ShopifyProps) {
|
export function CommerceProvider({ children, ...config }: ShopifyProps) {
|
||||||
return (
|
return (
|
||||||
<CoreCommerceProvider
|
<CoreCommerceProvider
|
||||||
provider={shopifyProvider}
|
provider={wooCommerceProvider}
|
||||||
config={{ ...shopifyConfig, ...config }}
|
config={{ ...wooCommerceConfig, ...config }}
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
</CoreCommerceProvider>
|
</CoreCommerceProvider>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const useCommerce = () => useCoreCommerce<ShopifyProvider>()
|
export const useCommerce = () => useCoreCommerce<WooCommerceProvider>()
|
||||||
|
@@ -3,6 +3,6 @@ const commerce = require('./commerce.config.json')
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
commerce,
|
commerce,
|
||||||
images: {
|
images: {
|
||||||
domains: ['cdn.shopify.com'],
|
domains: ['localhost'],
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@@ -1,27 +1,11 @@
|
|||||||
import { SHOPIFY_CHECKOUT_ID_COOKIE } from './const'
|
import { WOOCOMMERCE_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 fetcher from './fetcher'
|
import fetcher from './fetcher'
|
||||||
|
|
||||||
export const shopifyProvider = {
|
export const wooCommerceProvider = {
|
||||||
locale: 'en-us',
|
locale: 'en-us',
|
||||||
cartCookie: SHOPIFY_CHECKOUT_ID_COOKIE,
|
|
||||||
fetcher,
|
fetcher,
|
||||||
cart: { useCart, useAddItem, useUpdateItem, useRemoveItem },
|
cartCookie: WOOCOMMERCE_CHECKOUT_ID_COOKIE,
|
||||||
customer: { useCustomer },
|
|
||||||
products: { useSearch },
|
|
||||||
auth: { useLogin, useLogout, useSignup },
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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",
|
"find:unused": "npx next-unused",
|
||||||
"generate": "graphql-codegen",
|
"generate": "graphql-codegen",
|
||||||
"generate:shopify": "DOTENV_CONFIG_PATH=./.env.local graphql-codegen -r dotenv/config --config framework/shopify/codegen.json",
|
"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:vendure": "graphql-codegen --config framework/vendure/codegen.json",
|
||||||
"generate:definitions": "node framework/bigcommerce/scripts/generate-definitions.js"
|
"generate:definitions": "node framework/bigcommerce/scripts/generate-definitions.js"
|
||||||
},
|
},
|
||||||
|
Reference in New Issue
Block a user