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
parent 992ee52d7e
commit 3c93eb980d
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_WOOCOMMERCE_SHOP_API_URL=
NEXT_PUBLIC_SHOPIFY_STOREFRONT_ACCESS_TOKEN=

View File

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

View File

@@ -1,6 +1,10 @@
{ {
"provider": "shopify", "provider": "woocommerce",
"features": { "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 = 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

View File

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

View File

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

View File

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

View File

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

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