feat: early init configuration and provider / use codegen for wp

This commit is contained in:
Reza Babaei
2021-08-08 16:41:58 +03:00
committed by Reza Babaei
parent 61f2914697
commit 2a904b7bb4
14 changed files with 74379 additions and 14480 deletions

View File

@@ -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=

View File

@@ -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"]
}
},

View File

@@ -1,6 +1,10 @@
{
"provider": "shopify",
"provider": "woocommerce",
"features": {
"wishlist": false
"cart": false,
"search": false,
"wishlist": false,
"customerAuth": false,
"customCheckout": false
}
}

View File

@@ -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

View File

@@ -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' },
})
)
}

View File

@@ -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>()

View File

@@ -3,6 +3,6 @@ const commerce = require('./commerce.config.json')
module.exports = {
commerce,
images: {
domains: ['cdn.shopify.com'],
domains: ['localhost'],
},
}

View File

@@ -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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,8 @@
const getSiteInfoQuery = /* GraphQL */ `
query Setting {
generalSettings {
title
}
}
`
export default getSiteInfoQuery

View 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'

View File

@@ -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"
},