Agnostic UI (#199)
* changes
* Progress
* Normalized Products output
* Progress
* Restored Index Agnostic
* Progress
* Reordering
* Moved normalizer to BC function
* Removed Futures
* More Types
* More Types
* More Types
* Fix useCallback
* Progress, Changes types, readme and restoring functionality
* Changes
* TS Issues
* Changes
* Normalizer
* Normalizing more operations
* Normalizing more operations
* changes
* Merge Issues
* Cleanup
* change
* changes
* index.ts broke my tree shaking
* slug
* Normalized Options and Swatches
* Restored Add to cart
* Correct Variant Added to Cart
* Normalizing Cart Responses
* Changes
* changes breaking
* Adding immutable normalizer for Product
* Cart Normalized
* changes
* Progress
* More updates
* Removed some comments
* Add loading state for data hooks
* Bug fix
* Changed the way isEmpty works
* Improve navbar performance
* Added useResponse hook
* added useResponse to useWhishlist
* Added husky and lint-staged
* Ran prettier fix
* Added more cart types
* Moved types.d.ts to the commerce folder
* Minor changes
* Moved normalizer to happen after fetch
* updated useCart types
* Updated normalizer for useData
* Added new normalizer for the cart to the UI
* More corrections for useCart
* Updated cart update hooks
* Removed import
* Progress
* Switch away from global types
* Making multiple changes
* Improved types for operations
* Moved and updated cart types
* Updated the useAddItem and useRemoveItem hooks
* Minor life improvement
* Minor change
* Implement Shopify Provider
* Update README.md
* Update README.md
* normalizations & missing files
* Update index.ts
* fixes
* Update normalize.ts
* fix: cart error on first load
* shopify checkout redirect & api handler
* Update get-checkout-id.ts
* userAvatar
* Fix: color option
* Update normalize.ts
* changes
* Update next.config.js
* start customer auth & signup
* Update config.ts
* Login, Sign Up, Log Out, and checkout & customer association
* Automatic login after sign-up
* Update handle-login.ts
* MOving stuff around and adding temporal new files
* changes
* Replace use-cart with the new hook
* Removed old hook
* Improved HookHandler type
* Moved types
* Simplified useData types
* Updated Fetcher type
* Moved SwrOptions type
* Removed duplicated fetcher
* Moved provider to its own file
* Added proper type for fetch input
* Revert "Merge branch 'agnostic' of https://github.com/vercel/commerce into agnostic"
This reverts commit 23c8ed7c2d48d30e74ad94216f9910650fadf30c, reversing
changes made to bf50965a39ef0b1b956461ebe62070809fbe1d63.
* change readme
* Revert "Merge branch 'master' of https://github.com/vercel/commerce into agnostic"
This reverts commit bf50965a39ef0b1b956461ebe62070809fbe1d63, reversing
changes made to 0dad4ddedbf0bff2d0b5800ca469fda0073889ea.
* Revert "Revert "Merge branch 'agnostic' of https://github.com/vercel/commerce into agnostic""
This reverts commit c9a43f1bce0572d0eff41f3af893be8bdb00bedd.
* align with upstream changes
* Updated how the hook input is handled
* Add more options to the hook handler
* Final touches to the hook handler type
* Moved useWishlist to use new handler
* Move useCustomer to the new hook
* Added a default fetcher
* query all products for vendors & paths, improve search
* Update use-search.tsx
* fix cart after upstream changes
* Shopify Provider (#186)
* Start of Shopify provider
* add missing comment to documentation
* add missing env vars to documentation
* update reference to types file
* Moved useSearch to the new hook
* Removed old use-data lib
* Removed generics for result and body
* Removed normalizr
* Wishlist
* New changes and initial Features API
* Fixed some types
* Fixed more types
* fixes after upstream changes
* Fixed product types
* Fixed another product type
* Updated type
* Fixed remaining issues with types
* Added a MutationHandler
* Moved the handlers to each hook
* Moved the fetcher to its own file
* Moved handler to each hook
* Added initial version of useAddItem
* Added better mutation types, and moved some hooks
* Removed use-cart-actions
* Added initial version of useAddItem
* Updated types
* Update use-add-item.tsx
* changes
* Changes
* Reordering and changes
* Adding Features APO
* Adding wishlist api
* Implementing FeaturesAPI with Wishlist
* Removing bug with touchstart
* Adding tyni typing
* moved use-remove-item
* Removed MutationHandler type
* Moved more hooks and updated types to make them smaller
* Moved data hooks to new format
* Removed no longer required types
* Removed useResponse helper
* Updated useData type
* Moved wishlist use-add-item
* Moved wishlist use-remove-item to provider
* Moved use-login and use-logout
* Update use-signup
* Removed use-action helper
* Moved auth & cart hooks + several fixes
* Updated cart item, fixed deprecations
* Update next.config.js
* Updates to wishlist feature
* Moved the features to be environment variable only
* More changes for wishlist config
* Disable wishlist
* Removed useWishlistActions
* Updated readme
* updates
* typos
* Updated the way the provider config is set
* Removed features.ts
* Removed bootstrap.js
* Aligned with upstream changes
* Updates
* shopify: changes
* shopify: changes
* Update next.config.js
* Shopify Provider Updates (#209)
* Implement Shopify Provider
* Update README.md
* Update README.md
* normalizations & missing files
* Update index.ts
* fixes
* Update normalize.ts
* fix: cart error on first load
* shopify checkout redirect & api handler
* Update get-checkout-id.ts
* Fix: color option
* Update normalize.ts
* changes
* Update next.config.js
* start customer auth & signup
* Update config.ts
* Login, Sign Up, Log Out, and checkout & customer association
* Automatic login after sign-up
* Update handle-login.ts
* changes
* Revert "Merge branch 'agnostic' of https://github.com/vercel/commerce into agnostic"
This reverts commit 23c8ed7c2d48d30e74ad94216f9910650fadf30c, reversing
changes made to bf50965a39ef0b1b956461ebe62070809fbe1d63.
* change readme
* Revert "Merge branch 'master' of https://github.com/vercel/commerce into agnostic"
This reverts commit bf50965a39ef0b1b956461ebe62070809fbe1d63, reversing
changes made to 0dad4ddedbf0bff2d0b5800ca469fda0073889ea.
* Revert "Revert "Merge branch 'agnostic' of https://github.com/vercel/commerce into agnostic""
This reverts commit c9a43f1bce0572d0eff41f3af893be8bdb00bedd.
* align with upstream changes
* query all products for vendors & paths, improve search
* Update use-search.tsx
* fix cart after upstream changes
* fixes after upstream changes
* Moved handler to each hook
* Added initial version of useAddItem
* Updated types
* Update use-add-item.tsx
* Moved auth & cart hooks + several fixes
* Updated cart item, fixed deprecations
* Update next.config.js
* Aligned with upstream changes
* Updates
* Update next.config.js
* Updated the commerce config structure
* Removed @framework imports within framework providers
* Fixed types
* changes
* Adding extra config
* Adding shopify commit
* Adding env templates to the providers
* Ignore some types
* Adding link for Cart
* Adding customCheckout
* multiple changes to fix the wishlist
* Shopify Provier Updates (#212)
* changes
* Adding shopify commit
* Changed to query page by id
* Fixed page query, Changed use-search GraphQl query
* Update use-search.tsx
* remove unused util
* Changed cookie expiration
* Update tsconfig.json
Co-authored-by: okbel <curciobel@gmail.com>
* Bump and adding dependency
* Adding color checks
* Now colors work with lighter colors
* Stable commerce.config.json
* Updated main readme
* Readme changes
* Default to bigcommerce
Co-authored-by: bc <bc@bcs-MacBook-Pro.fibertel.com.ar>
Co-authored-by: Luis Alvarez <luis@vercel.com>
Co-authored-by: cond0r <pinte_catalin@yahoo.com>
Co-authored-by: Peter Mekhaeil <4616064+petermekhaeil@users.noreply.github.com>
2021-03-04 07:57:25 -03:00
## Table of Contents
- [Getting Started ](#getting-started )
- [Modifications ](#modifications )
- [Adding item to Cart ](#adding-item-to-cart )
- [Proceed to Checkout ](#proceed-to-checkout )
- [General Usage ](#general-usage )
- [CommerceProvider ](#commerceprovider )
- [useCommerce ](#usecommerce )
- [Hooks ](#hooks )
- [usePrice ](#useprice )
- [useAddItem ](#useadditem )
- [useRemoveItem ](#useremoveitem )
- [useUpdateItem ](#useupdateitem )
- [APIs ](#apis )
- [getProduct ](#getproduct )
- [getAllProducts ](#getallproducts )
- [getAllCollections ](#getallcollections )
- [getAllPages ](#getallpages )
# Shopify Storefront Data Hooks
Collection of hooks and data fetching functions to integrate Shopify in a React application. Designed to work with [Next.js Commerce ](https://demo.vercel.store/ ).
## Getting Started
1. Install dependencies:
```
2021-03-20 02:07:35 +10:00
yarn add shopify-buy
yarn add @types/shopify -buy
Agnostic UI (#199)
* changes
* Progress
* Normalized Products output
* Progress
* Restored Index Agnostic
* Progress
* Reordering
* Moved normalizer to BC function
* Removed Futures
* More Types
* More Types
* More Types
* Fix useCallback
* Progress, Changes types, readme and restoring functionality
* Changes
* TS Issues
* Changes
* Normalizer
* Normalizing more operations
* Normalizing more operations
* changes
* Merge Issues
* Cleanup
* change
* changes
* index.ts broke my tree shaking
* slug
* Normalized Options and Swatches
* Restored Add to cart
* Correct Variant Added to Cart
* Normalizing Cart Responses
* Changes
* changes breaking
* Adding immutable normalizer for Product
* Cart Normalized
* changes
* Progress
* More updates
* Removed some comments
* Add loading state for data hooks
* Bug fix
* Changed the way isEmpty works
* Improve navbar performance
* Added useResponse hook
* added useResponse to useWhishlist
* Added husky and lint-staged
* Ran prettier fix
* Added more cart types
* Moved types.d.ts to the commerce folder
* Minor changes
* Moved normalizer to happen after fetch
* updated useCart types
* Updated normalizer for useData
* Added new normalizer for the cart to the UI
* More corrections for useCart
* Updated cart update hooks
* Removed import
* Progress
* Switch away from global types
* Making multiple changes
* Improved types for operations
* Moved and updated cart types
* Updated the useAddItem and useRemoveItem hooks
* Minor life improvement
* Minor change
* Implement Shopify Provider
* Update README.md
* Update README.md
* normalizations & missing files
* Update index.ts
* fixes
* Update normalize.ts
* fix: cart error on first load
* shopify checkout redirect & api handler
* Update get-checkout-id.ts
* userAvatar
* Fix: color option
* Update normalize.ts
* changes
* Update next.config.js
* start customer auth & signup
* Update config.ts
* Login, Sign Up, Log Out, and checkout & customer association
* Automatic login after sign-up
* Update handle-login.ts
* MOving stuff around and adding temporal new files
* changes
* Replace use-cart with the new hook
* Removed old hook
* Improved HookHandler type
* Moved types
* Simplified useData types
* Updated Fetcher type
* Moved SwrOptions type
* Removed duplicated fetcher
* Moved provider to its own file
* Added proper type for fetch input
* Revert "Merge branch 'agnostic' of https://github.com/vercel/commerce into agnostic"
This reverts commit 23c8ed7c2d48d30e74ad94216f9910650fadf30c, reversing
changes made to bf50965a39ef0b1b956461ebe62070809fbe1d63.
* change readme
* Revert "Merge branch 'master' of https://github.com/vercel/commerce into agnostic"
This reverts commit bf50965a39ef0b1b956461ebe62070809fbe1d63, reversing
changes made to 0dad4ddedbf0bff2d0b5800ca469fda0073889ea.
* Revert "Revert "Merge branch 'agnostic' of https://github.com/vercel/commerce into agnostic""
This reverts commit c9a43f1bce0572d0eff41f3af893be8bdb00bedd.
* align with upstream changes
* Updated how the hook input is handled
* Add more options to the hook handler
* Final touches to the hook handler type
* Moved useWishlist to use new handler
* Move useCustomer to the new hook
* Added a default fetcher
* query all products for vendors & paths, improve search
* Update use-search.tsx
* fix cart after upstream changes
* Shopify Provider (#186)
* Start of Shopify provider
* add missing comment to documentation
* add missing env vars to documentation
* update reference to types file
* Moved useSearch to the new hook
* Removed old use-data lib
* Removed generics for result and body
* Removed normalizr
* Wishlist
* New changes and initial Features API
* Fixed some types
* Fixed more types
* fixes after upstream changes
* Fixed product types
* Fixed another product type
* Updated type
* Fixed remaining issues with types
* Added a MutationHandler
* Moved the handlers to each hook
* Moved the fetcher to its own file
* Moved handler to each hook
* Added initial version of useAddItem
* Added better mutation types, and moved some hooks
* Removed use-cart-actions
* Added initial version of useAddItem
* Updated types
* Update use-add-item.tsx
* changes
* Changes
* Reordering and changes
* Adding Features APO
* Adding wishlist api
* Implementing FeaturesAPI with Wishlist
* Removing bug with touchstart
* Adding tyni typing
* moved use-remove-item
* Removed MutationHandler type
* Moved more hooks and updated types to make them smaller
* Moved data hooks to new format
* Removed no longer required types
* Removed useResponse helper
* Updated useData type
* Moved wishlist use-add-item
* Moved wishlist use-remove-item to provider
* Moved use-login and use-logout
* Update use-signup
* Removed use-action helper
* Moved auth & cart hooks + several fixes
* Updated cart item, fixed deprecations
* Update next.config.js
* Updates to wishlist feature
* Moved the features to be environment variable only
* More changes for wishlist config
* Disable wishlist
* Removed useWishlistActions
* Updated readme
* updates
* typos
* Updated the way the provider config is set
* Removed features.ts
* Removed bootstrap.js
* Aligned with upstream changes
* Updates
* shopify: changes
* shopify: changes
* Update next.config.js
* Shopify Provider Updates (#209)
* Implement Shopify Provider
* Update README.md
* Update README.md
* normalizations & missing files
* Update index.ts
* fixes
* Update normalize.ts
* fix: cart error on first load
* shopify checkout redirect & api handler
* Update get-checkout-id.ts
* Fix: color option
* Update normalize.ts
* changes
* Update next.config.js
* start customer auth & signup
* Update config.ts
* Login, Sign Up, Log Out, and checkout & customer association
* Automatic login after sign-up
* Update handle-login.ts
* changes
* Revert "Merge branch 'agnostic' of https://github.com/vercel/commerce into agnostic"
This reverts commit 23c8ed7c2d48d30e74ad94216f9910650fadf30c, reversing
changes made to bf50965a39ef0b1b956461ebe62070809fbe1d63.
* change readme
* Revert "Merge branch 'master' of https://github.com/vercel/commerce into agnostic"
This reverts commit bf50965a39ef0b1b956461ebe62070809fbe1d63, reversing
changes made to 0dad4ddedbf0bff2d0b5800ca469fda0073889ea.
* Revert "Revert "Merge branch 'agnostic' of https://github.com/vercel/commerce into agnostic""
This reverts commit c9a43f1bce0572d0eff41f3af893be8bdb00bedd.
* align with upstream changes
* query all products for vendors & paths, improve search
* Update use-search.tsx
* fix cart after upstream changes
* fixes after upstream changes
* Moved handler to each hook
* Added initial version of useAddItem
* Updated types
* Update use-add-item.tsx
* Moved auth & cart hooks + several fixes
* Updated cart item, fixed deprecations
* Update next.config.js
* Aligned with upstream changes
* Updates
* Update next.config.js
* Updated the commerce config structure
* Removed @framework imports within framework providers
* Fixed types
* changes
* Adding extra config
* Adding shopify commit
* Adding env templates to the providers
* Ignore some types
* Adding link for Cart
* Adding customCheckout
* multiple changes to fix the wishlist
* Shopify Provier Updates (#212)
* changes
* Adding shopify commit
* Changed to query page by id
* Fixed page query, Changed use-search GraphQl query
* Update use-search.tsx
* remove unused util
* Changed cookie expiration
* Update tsconfig.json
Co-authored-by: okbel <curciobel@gmail.com>
* Bump and adding dependency
* Adding color checks
* Now colors work with lighter colors
* Stable commerce.config.json
* Updated main readme
* Readme changes
* Default to bigcommerce
Co-authored-by: bc <bc@bcs-MacBook-Pro.fibertel.com.ar>
Co-authored-by: Luis Alvarez <luis@vercel.com>
Co-authored-by: cond0r <pinte_catalin@yahoo.com>
Co-authored-by: Peter Mekhaeil <4616064+petermekhaeil@users.noreply.github.com>
2021-03-04 07:57:25 -03:00
```
3. Environment variables need to be set:
```
SHOPIFY_STORE_DOMAIN=
SHOPIFY_STOREFRONT_ACCESS_TOKEN=
NEXT_PUBLIC_SHOPIFY_STORE_DOMAIN=
NEXT_PUBLIC_SHOPIFY_STOREFRONT_ACCESS_TOKEN=
```
4. Point the framework to `shopify` by updating `tsconfig.json` :
```
"@framework/ *": ["framework/shopify/*"],
"@framework ": ["framework/shopify"]
```
### Modifications
These modifications are temporarily until contributions are made to remove them.
#### Adding item to Cart
```js
// components/product/ProductView/ProductView.tsx
const ProductView: FC< Props > = ({ product }) => {
const addToCart = async () => {
setLoading(true)
try {
await addItem({
productId: product.id,
variantId: variant ? variant.id : product.variants[0].id,
})
openSidebar()
setLoading(false)
} catch (err) {
setLoading(false)
}
}
}
```
#### Proceed to Checkout
```js
// components/cart/CartSidebarView/CartSidebarView.tsx
import { useCommerce } from '@framework '
const CartSidebarView: FC = () => {
const { checkout } = useCommerce()
return (
< Button href = {checkout.webUrl} Component = "a" width = "100%" >
Proceed to Checkout
< / Button >
)
}
```
## General Usage
### CommerceProvider
Provider component that creates the commerce context for children.
```js
import { CommerceProvider } from '@framework '
const App = ({ children }) => {
return < CommerceProvider locale = {locale} > {children}< / CommerceProvider >
}
export default App
```
### useCommerce
Returns the configs that are defined in the nearest `CommerceProvider` . Also provides access to Shopify's `checkout` and `shop` .
```js
import { useCommerce } from 'nextjs-commerce-shopify'
const { checkout, shop } = useCommerce()
```
- `checkout` : The information required to checkout items and pay ([Documentation ](https://shopify.dev/docs/storefront-api/reference/checkouts/checkout )).
- `shop` : Represents a collection of the general settings and information about the shop ([Documentation ](https://shopify.dev/docs/storefront-api/reference/online-store/shop/index )).
## Hooks
### usePrice
Display the product variant price according to currency and locale.
```js
import usePrice from '@framework/product/use -price'
const { price } = usePrice({
amount,
})
```
Takes in either `amount` or `variant` :
- `amount` : A price value for a particular item if the amount is known.
- `variant` : A shopify product variant. Price will be extracted from the variant.
### useAddItem
```js
import { useAddItem } from '@framework/cart '
const AddToCartButton = ({ variantId, quantity }) => {
const addItem = useAddItem()
const addToCart = async () => {
await addItem({
variantId,
})
}
return < button onClick = {addToCart} > Add To Cart< / button >
}
```
### useRemoveItem
```js
import { useRemoveItem } from '@framework/cart '
const RemoveButton = ({ item }) => {
const removeItem = useRemoveItem()
const handleRemove = async () => {
await removeItem({ id: item.id })
}
return < button onClick = {handleRemove} > Remove< / button >
}
```
### useUpdateItem
```js
import { useUpdateItem } from '@framework/cart '
const CartItem = ({ item }) => {
const [quantity, setQuantity] = useState(item.quantity)
const updateItem = useUpdateItem(item)
const updateQuantity = async (e) => {
const val = e.target.value
await updateItem({ quantity: val })
}
return (
< input
type="number"
max={99}
min={0}
value={quantity}
onChange={updateQuantity}
/>
)
}
```
## APIs
Collections of APIs to fetch data from a Shopify store.
The data is fetched using the [Shopify JavaScript Buy SDK ](https://github.com/Shopify/js-buy-sdk#readme ). Read the [Shopify Storefront API reference ](https://shopify.dev/docs/storefront-api/reference ) for more information.
### getProduct
Get a single product by its `handle` .
```js
import getProduct from '@framework/product/get -product'
import { getConfig } from '@framework/api '
const config = getConfig()
const product = await getProduct({
variables: { slug },
config,
})
```
### getAllProducts
```js
import getAllProducts from '@framework/product/get -all-products'
import { getConfig } from '@framework/api '
const config = getConfig()
const { products } = await getAllProducts({
variables: { first: 12 },
config,
})
```
### getAllCollections
```js
import getAllCollections from '@framework/product/get -all-collections'
import { getConfig } from '@framework/api '
const config = getConfig()
const collections = await getAllCollections({
config,
})
```
### getAllPages
```js
import getAllPages from '@framework/common/get -all-pages'
import { getConfig } from '@framework/api '
const config = getConfig()
const pages = await getAllPages({
variables: { first: 12 },
config,
})
```