Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/alexpechkarev/adonis-shopping-cart
Adonis Shopping Cart
https://github.com/alexpechkarev/adonis-shopping-cart
Last synced: 3 months ago
JSON representation
Adonis Shopping Cart
- Host: GitHub
- URL: https://github.com/alexpechkarev/adonis-shopping-cart
- Owner: alexpechkarev
- License: mit
- Created: 2022-03-01T20:13:52.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2022-04-25T12:44:39.000Z (almost 3 years ago)
- Last Synced: 2024-09-13T23:42:11.730Z (4 months ago)
- Language: TypeScript
- Size: 9.44 MB
- Stars: 4
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Adonis Shopping Cart
Basic Shopping Cart functionality for AdonisJS v5
## Requirements
The Cart is using `@adonisjs/session` to store the data, please ensure you have this package installed and configured.
## Installation
````bash
# npm
npm i adonis-shopping-cart
````Register and configure package with AdonisJS
````bash
# npm
node ace configure adonis-shopping-cart
````
![Adinis Shopping Cart](adonis-shopping-cart.gif)Update variable value in `.env` file of your project, the default `CART_VAT` is 20%.
Assume that the VAT is already included in the item price.
Example:
Item price: £100.00
Sub total: £80.00
Vat: £20.00 (based on 20% VAT rate)
Total: £100.00```bash
CART_VAT=20
```Number format Locale and Options can be specified in `config/cart.ts`
```js
// default format values
format:{
locale: 'en-GB',
options: { style: 'currency', currency: 'GBP' },
},
```## How to use
Cart accepts items of `CartItem` Type
```js
{
id: number;
name: string;
price: number;
priceFormat: string;
quantity: number;
attributes: [key: string];
}{
id: 1234,
name: 'Classic T-Shirt',
price: 21.99,
priceFormat: '£21.99',
quantity: 1,
attributes: {
image: 'https://image.url',
color: 'white',
size: 'M',
// more attributes
}
}
```### Adding an item to the Cart
Cart creates unique rowId for each item by hashing `item.attributes` object allowing to distinguish items with the different atributes, for eaxmple:
- Classic T-Shirt color: White and size:M
is a different item to
- Classic T-Shirt color: White and size:MTo update an item in the Cart use `add` method, it will find the item in the Cart and update it or create a new item
```js
Cart.add(item);
```
### Upading item
```jslet rowId = "lcoLo4tYTGnCn9pqnSgRLqeYV/KAbgDtfXeRUwRL24k=";
let item ={
"id": 1,
"price": 22.5,
"priceFormat": "£22.50",
"name": "A green door",
"quantity": 4,
"attributes": {
"image": "https://tailwindui.com/img/ecommerce-images/shopping-cart-page-01-product-01.jpg",
"color": "sky",
"size": "s"
}Cart.update(rowId:string, item:CartItem);
```
### Removing an item
```js
Cart.remove(item);
//or
Cart.removeByRowId(rowId);
```
### Getting Cart content
```js
Cart.getContent()
{
"lcoLo4tYTGnCn9pqnSgRLqeYV/KAbgDtfXeRUwRL24k=": { // rowId
"id": 1,
"price": 22.5,
"priceFormat": "£22.50",
"name": "A green door",
"quantity": 4,
"attributes": {
"image": "https://tailwindui.com/img/ecommerce-images/shopping-cart-page-01-product-01.jpg",
"color": "sky",
"size": "s"
}
},
"fLBUy2jj8rI1KcBvI0G2MV1nPD2pkoySPUeBjIp6U30=": { // rowId
"id": 2,
"price": 24.5,
"priceFormat": "£24.50",
"name": "Basic Tee",
"quantity": 1,
"attributes": {
"image": "https://tailwindui.com/img/ecommerce-images/shopping-cart-page-01-product-02.jpg",
"color": "pink",
"size": "s"
}
}
}```
### Other Methods
```js
// has Cart given item
Cart.has(rowId:string):boolean// Shipping Amount
Cart.setShippingAmmount(10): void
Cart.getShiping():string // "£10.00"
Cart.getShipingNumber():number // 10// subTotal - (subTotal * VAT)
Cart.getSubtotal(): string // "£22.50"//subTotal * VAT
Cart.getVat():string // "£4.50"
Cart.getVatNumber():number // 4.50// subTotal + VAT + Shipping
Cart.getTotal():string // "£27.00"
Cart.getTotalNumber():number // 27// calculate quantity of all items in Cart
Cart.getTotalQuantity():number // 1```
### Including Cart in your Controller or Service
```js
import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
import Cart from '@ioc:Adonis/Addons/Cart'export default class CartController {
public async add({ request }: HttpContextContract) {
let data = request.body()
Cart.add(data)
...
}
```### Test
```js
npm run clean
npm run test
```