Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/sammdec/use-cart

A tiny react hook for integrating an e-commerce cart into your app
https://github.com/sammdec/use-cart

cart ecommerce hooks react react-dom react-hooks

Last synced: 20 days ago
JSON representation

A tiny react hook for integrating an e-commerce cart into your app

Awesome Lists containing this project

README

        

# `use-cart`

> A tiny react hook for creating a e-commerce cart in your app

npm version Build Status Coverage Status dependencies package size

Using e-commerce carts in React are sometimes way to bloated and come with strong opinions on styling, `use-cart` gets out your way and gives you the building blocks to build in shopping cart functionality into your react app.

## Installation

> Note: please ensure you install versions >= 16.8.0 for both react and react-dom, as this library depends on the new hooks feature

## NPM

```
npm i use-cart --save
```

## Yarn

```
yarn add use-cart
```

## Quick Start

```js
import { CartProvider, useCart } from "use-cart"

// Wrap your app to expose the store
const App = () => (

<>


>

)

// Add the hook in any child component to get access to functions
const Item = () => {
const { addItem } = useCart()
return (


My item for sale


addItem("TEST_SKU")}>Add to basket

)
}

// You can use the hook in as many components as you want and they all share the same cart state
const Cart = () => {
const { items, addItem, removeItem, removeLineItem, clearCart } = useCart()

return (


{items.map(item => (

{item.sku} - {item.quantity}{" "}
addItem(item.sku)}>Increase Quantity
removeItem(item.sku)}>
Decrease Quantity

removeLineItem(item.sku)}>
Remove from cart


))}
Clear Cart

)
}
```

## Examples

- [Basic](https://codesandbox.io/s/v1mp6z0l20?fontsize=14)
- [Fetching extra product data](https://codesandbox.io/s/zwl877zzl4?fontsize=14)
- [Initial cart](https://codesandbox.io/s/9zro3wjy0y?fontsize=14)
- [Using local storage to load initial cart](https://codesandbox.io/s/7wm873zq6j?fontsize=14)

## API

### ``

Passes the cart object to the `useCart` hook

#### Props

`initialCart (Array)`: initial state that the cart will contain on initial render, it must be an array of objects

`children (React.ReactNode)`: react component, usually containing the rest of your app

### `useStore()`

The main hook must be wrapped with the `CartProvider` component at some point in the ancestor tree

#### Returns

Object containing:

- `addItem(sku, [quantity=1]): Function` - takes a sku an optional quantity (defaults to 1) to add to the cart
- `removeItem(sku, [quantity=1]): Function` - removes an item from the cart defaults to a quantity of 1.
- `removeLineItem(sku): Function` - removes an entire line item from the cart
- `clearCart(): Function` - removes all items from the cart
- `isInCart(sku): Function` - returns `true` if sku is present in the cart otherwise `false`
- `items: Array` - array of objects containing a minimum of `sku` and `quantity` properties on each object
- `lineItemsCount: Number` - returns number of unique line items n the cart
- `totalItemsCount: Number` - returns number of all quantities of line items combined

## Detailed API from `useCart` object

### `addItem(sku, [quantity=1])`

This method adds an item to the cart identified by its sku, if you would like to add more quantity you can pass an optional quantity value.

#### Arguments

`sku (String)`: The unique item sku that identifies the item in the cart

`[quantity=1] (Number)`: The quantity added to the cart

#### Returns

`(undefined)`

---

### `removeItem(sku, [quantity=1])`

Removes a quantity from an item in the cart if this number drops to 0 the line item is removed from the cart.

#### Arguments

`sku (String)`: The unique item sku that identifies the item in the cart

`[quantity=1] (Number)`: The quantity removed from the cart

#### Returns

`(undefined)`

---

### `removeLineItem(sku)`

A convenience function that removes an entire line item from the cart. This would be the same thing as getting the quantity of a line item then calling `removeItem()` by that quantity.

#### Arguments

`sku (String)`: The unique item sku that identifies the item in the cart

#### Returns

`(undefined)`

---

### `isInCart(sku)`

Allows you to quickly check if a item with the given sku is present in the cart

#### Arguments

`sku (String)`: The unique item sku that identifies the item in the cart

#### Returns

`(boolean)`: Returns `true` if the sku exists in the cart

---

### `items`

`(array)`: An array containing objects with `sku` and `quantity` properties of each item in the cart.

---

### `lineItemsCount`

`(number)`: The number of unique skus in the cart

---

### `totalItemsCount`

`(number)`: The number of all the quantities from all the sku's in the cart

---

MIT License.

---