Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ft seller delete item 187584874 #49

Open
wants to merge 4 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/App.scss
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,5 @@
@import "./assets/styles/liveChat.scss";
@import "./assets//styles/UserProfile.scss";
@import "./assets/styles/SellerSideProduct.scss";
@import "./assets/styles/SellerDeleteItem.scss";
@import "./assets/styles/SellerDeleteItem.scss"
22 changes: 21 additions & 1 deletion src/components/product/SellerProduct.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ import { PuffLoader } from 'react-spinners';
import { Meta } from '../Meta';
import { toast } from 'react-toastify';
import { getErrorMessage } from '../../utils/axios/axiosInstance';
import { deleteItem } from '../../store/features/product/sellerCollectionProductsSlice';
import ConfirmModal from './ConfirmModal';

const initialProductState: ISingleProduct = {
id: "",
Expand Down Expand Up @@ -43,6 +45,8 @@ const SellerProduct = ({ productId }: { productId: string }) => {
const [isThereAnyUpdate, setIsThereAnyUpdate] = useState<boolean>(false);

const [updateLoading, setUpdateLoading] = useState(false);
const [showConfirm, setShowConfirm] = useState(false);
const [itemToDelete, setItemToDelete] = useState<string | null>(null);

useEffect(() => {
if (!isAdd) {
Expand Down Expand Up @@ -123,6 +127,14 @@ const SellerProduct = ({ productId }: { productId: string }) => {
}
};

const handleDelete = async () => {
if (updatedProduct) {
await dispatch(deleteItem(itemToDelete));
setShowConfirm(false);
navigate('/seller/products');
}
};

if (isLoading) {
return (
<div className="loader">
Expand Down Expand Up @@ -150,7 +162,7 @@ const SellerProduct = ({ productId }: { productId: string }) => {
<button disabled={(!isThereAnyUpdate && !isImagesUpdated) || updateLoading} className={`edit-btn ${!isThereAnyUpdate && !isImagesUpdated && 'disabled'}`} onClick={handleSaveOrAdd}>
<FaSave /> {isAdd ? "ADD" : "UPDATE"}{updateLoading && "ING..."}
</button>
{!isAdd && <button className='delete-btn'><FaTrash /> Delete</button>}
{!isAdd && <button className='delete-btn' onClick={() => { setShowConfirm(true); setItemToDelete(productId); }}><FaTrash /> Delete</button>}
</div>
</div>

Expand Down Expand Up @@ -233,6 +245,14 @@ const SellerProduct = ({ productId }: { productId: string }) => {
</ContentCard>
</ContentCard>
</div>

<ConfirmModal
isOpen={showConfirm}
title="Are you sure"
message={`Deleting this product <i>${product?.name}</i> will be permanently removed from the system. This can't be undone!`}
onConfirm={handleDelete}
onCancel={() => setShowConfirm(false)}
/>
</div>
</div>
</>
Expand Down
6 changes: 3 additions & 3 deletions src/pages/seller/SellerCollection.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import React, { useEffect, useState } from 'react'
import Table from '../../components/table/Table';
import { useAppDispatch, useAppSelector } from '../../store/store';
import { fetchSellerCollectionProduct} from '../../store/features/product/sellerCollectionProductsSlice';
import { fetchSellerCollectionProduct, deleteItem, removeItem } from '../../store/features/product/sellerCollectionProductsSlice';
import Zoom from '@mui/material/Zoom';
import Tooltip from '@mui/material/Tooltip';
import DeleteIcon from '@mui/icons-material/Delete';
Expand Down Expand Up @@ -47,8 +47,8 @@ export default function SellerCollection() {
const handleDelete = async () => {
try {
setShowConfirm(false)
// dispatch(removeItem(itemToDelete.id))
// await dispatch(deleteItem(itemToDelete.id)).unwrap();
dispatch(removeItem(itemToDelete.id))
await dispatch(deleteItem(itemToDelete.id)).unwrap();
dispatch(fetchSellerCollectionProduct());
setItemToDelete(null)
} catch (error) {
Expand Down
12 changes: 11 additions & 1 deletion src/store/features/product/productService.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,15 @@ const sellerGetOrderHistory = async () => {
return response.data;
}

const SellerDeleteItem = async(id: string)=>{
try{
const response = await axiosInstance.delete(`api/shop/seller-delete-product/${id}`);
return response.data
}catch(error){
throw new Error("failed to delete product")
}
}

const productService = {
fetchProducts,
fetchSingleProduct,
Expand All @@ -109,6 +118,7 @@ const productService = {
addSellerProduct,
updateSellerProductStatus,
sellerGetAllProducts,
sellerGetOrderHistory
sellerGetOrderHistory,
SellerDeleteItem
}
export default productService;
36 changes: 33 additions & 3 deletions src/store/features/product/sellerCollectionProductsSlice.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,24 @@ export const sellerGetOrderHistory = createAsyncThunk('seller/seller-get-orderHi
}
})

export const deleteItem = createAsyncThunk<ISellerCollectionProductInitialResponse, string>("product/deleteProduct", async (id, thunkApi) => {
try {
const response = await productService.SellerDeleteItem(id)
return response
} catch (error) {
return thunkApi.rejectWithValue(error)
}
})

const sellerCollectionProductsSlice = createSlice({
name: "sellerCollectionProducts",
initialState,
reducers: {},
reducers: {
removeItem: (state, action: any) => {
const itemId = action.payload
state.data.products = state.data?.products.filter((item) =>item.id !== itemId)
}
},
extraReducers: (builder) => {
builder
.addCase(fetchSellerCollectionProduct.pending, (state) => {
Expand Down Expand Up @@ -96,8 +110,24 @@ const sellerCollectionProductsSlice = createSlice({
state.isError = false;
state.isSuccess = false;
state.message = action.payload.message || null
});
})
.addCase(deleteItem.pending, (state) => {
state.isError = false,
state.isSuccess = false
})
.addCase(deleteItem.fulfilled, (state, action: PayloadAction<any>) => {
state.isLoading = false,
state.isError = false,
state.isSuccess = true
state.message = action.payload.message
})
.addCase(deleteItem.rejected, (state, action: PayloadAction<any>) => {
state.isLoading = false,
state.isError = true,
state.message = action.payload,
state.isSuccess = false
});;
}
})

export const {removeItem} = sellerCollectionProductsSlice.actions
export default sellerCollectionProductsSlice.reducer;
Loading