OwlCyberSecurity - MANAGER
Edit File: ebayBasketSlice.tsx
"use client"; import { cartType } from "@/typing"; import { createSlice, PayloadAction } from "@reduxjs/toolkit"; import { toast } from "sonner"; type InitialState = { cart: cartType[] | any; }; const initialState = { cart: [], } as InitialState; export const ebayBasketSlice = createSlice({ name: "ebayBasket", initialState, reducers: { addToEbayBasket: (state, action: PayloadAction<any>) => { const itemInCart = state.cart.find( (item: cartType) => item.link === action.payload.link ); if (state.cart.length > 0) { const uniqueExhangeRegion = state.cart.find( (item: cartType) => item.exchange_id === action.payload.exchange_id ); if (!uniqueExhangeRegion) { toast.error( "خطا در ثبت آیتم با واحد پولی متفاوت.\n\n این سبد را ثبت کنید سپس آیتم بعدی را به سبد جدید اضافه کنید" ); return; } } if (itemInCart) { toast.error( "آیتم در سبد شما موجود می باشد\n\n برای اضافه کردن تعداد به سبد خرید بروید." ); return; } else if (state.cart.length > 4) { toast.error("بیش از 5 آیتم نمی تواند در یک سبد باشد"); return; } else { state.cart.push({ ...action.payload }); toast.success("آیتم به سبد شما اضافه شد."); } }, removeFromEbayBasket: (state, action: PayloadAction<any>) => { const index = state.cart.findIndex( (basketItem: cartType) => basketItem.link === action.payload.link ); let newBasket = [...state.cart]; if (index >= 0) { //the item exist in the basket ... remove it newBasket.splice(index, 1); toast.success("آیتم با موفقیت از سبد شما حذف شد."); } else { console.warn( `cant remove product (id: ${action.payload.link} as its not in basket)` ); } state.cart = newBasket; }, incrementEbayCount: (state, action: PayloadAction<cartType>) => { const item = state.cart.find((item: any) => item.link === action.payload); item.count++; }, decrementEbayCount: (state, action: PayloadAction<cartType>) => { const item = state.cart.find((item: any) => item.link === action.payload); if (item.count === 1) { item.count = 1; } else { item.count--; } }, updateEbayCount: (state, action: PayloadAction<any>) => { const item = state.cart.find( (item: any) => item.link === action.payload.link ); item.singleitemfullprice = action.payload.finalRialPrice; item.buyCost = action.payload.buyCost; item.buyProfit = action.payload.buyProfit; item.shipBroker = action.payload.shipBroker; }, removeAllItemsFromEbay: (state, action: PayloadAction<any>) => { state.cart = []; }, updateEbayCart: (state, action: any) => { state.cart = action.payload; }, }, }); export const { addToEbayBasket, removeFromEbayBasket, incrementEbayCount, decrementEbayCount, updateEbayCount, removeAllItemsFromEbay, updateEbayCart, } = ebayBasketSlice.actions; export const ebaySelectItems = (state: any) => state.ebayBasket.cart; export const ebaySelectTotalPrice = (state: any) => state.ebayBasket.cart.reduce( (total: any, item: any) => total + item.cost * item.count, 0 ); export const EbaySelectTotalRial = (state: any) => state.ebayBasket.cart.reduce( (total: any, item: any) => total + item.singleitemfullprice, 0 ); export const EbaySelectTotalShipBroker = (state: any) => state.ebayBasket.cart.reduce( (total: any, item: any) => total + item.shipBroker, 0 ); export const EbaySelectTotalbuyProfit = (state: any) => state.ebayBasket.cart.reduce( (total: any, item: any) => total + item.buyProfit, 0 ); export const EbaySelectTotalbuyCost = (state: any) => state.ebayBasket.cart.reduce( (total: any, item: any) => total + item.buyCost, 0 ); export default ebayBasketSlice.reducer;