Files
anahita-front/stores/cart.js
T
mohadese namavar ec84dfd222 init git
2024-06-16 00:22:14 +04:30

61 lines
2.1 KiB
JavaScript

export const useCartStore = defineStore('cart', {
state: () => {
return {
items: [],
loading: false
}
},
getters: {
count: (state) => state.items.reduce((sum, item) => sum + item.quantity, 0) || 0,
find: (state) => (id) => state.items.find((item) => item.product?.id == id)
},
actions: {
async get() {
const { status, data } = await useFetch('/api/users/current/cart', {
headers: { Authorization: useCookie('token') }
})
if (status.value == 'success') {
this.items = data.value.cart
}
},
async clear() {
const { status } = await useFetch('/api/users/cart', {
headers: { Authorization: useCookie('token') }, method: 'delete', body: {}
})
if (status.value == 'success') {
this.items = []
}
},
async update(product, quantity = 0) {
this.loading = true
const cart = { product }
if (quantity > 0) {
//update
let item = this.find(product)
if (item) item.quantity = quantity
cart.quantity = quantity
const { status, data } = await useFetch('/api/users/cart', {
headers: { Authorization: useCookie('token') }, method: 'put', body: { cart }
})
if (status.value == 'success') {
const temp = { product: data.value, quantity }
if (item) item = temp
else this.items.push(temp)
}
} else {
//remove
const { status } = await useFetch('/api/users/cart', {
headers: { Authorization: useCookie('token') }, method: 'patch', body: { cart }
})
if (status.value == 'success') {
this.items = this.items.filter((item) => item.product.id != product)
}
}
this.loading = false
}
}
})