43 lines
1.4 KiB
TypeScript
43 lines
1.4 KiB
TypeScript
|
|
import { defineStore } from 'pinia';
|
||
|
|
import ProductType from '~~/types/productType';
|
||
|
|
|
||
|
|
export const useWishlistStore = defineStore('wishlist', {
|
||
|
|
state: () => ({
|
||
|
|
wishlists: [] as ProductType[],
|
||
|
|
}),
|
||
|
|
actions: {
|
||
|
|
add_wishlist_product(payload: ProductType) {
|
||
|
|
const isAdded = this.wishlists.findIndex(p => p.id === payload.id)
|
||
|
|
if(isAdded !== -1){
|
||
|
|
this.wishlists = this.wishlists.filter(p => p.id !== payload.id)
|
||
|
|
useNuxtApp().$toast.error(`${payload.title} remove to wishlist`);
|
||
|
|
}
|
||
|
|
else {
|
||
|
|
this.wishlists.push(payload)
|
||
|
|
useNuxtApp().$toast.success(`${payload.title} added to wishlist`);
|
||
|
|
}
|
||
|
|
localStorage.setItem('wishlist_products', JSON.stringify(this.wishlists));
|
||
|
|
},
|
||
|
|
removeWishlist(payload: ProductType){
|
||
|
|
this.wishlists = this.wishlists.filter(p => p.id !== payload.id)
|
||
|
|
useNuxtApp().$toast.error(`${payload.title} remove to wishlist`);
|
||
|
|
localStorage.setItem('wishlist_products', JSON.stringify(this.wishlists));
|
||
|
|
}
|
||
|
|
},
|
||
|
|
getters: {
|
||
|
|
get_wishlist_products:(state) => {
|
||
|
|
if (process.client) {
|
||
|
|
const data = localStorage.getItem('wishlist_products');
|
||
|
|
if (data) {
|
||
|
|
return state.wishlists = JSON.parse(data);
|
||
|
|
} else {
|
||
|
|
localStorage.setItem('wishlist_products', JSON.stringify([]));
|
||
|
|
return state.wishlists = [];
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
return state.wishlists;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
})
|