Skip to content

Commit f26e3b9

Browse files
Merge pull request #27 from bhagirathpaliyal/Order
added order status change functionality
2 parents 673f51c + 6ad8c0a commit f26e3b9

File tree

7 files changed

+59
-19
lines changed

7 files changed

+59
-19
lines changed

src/components/Item.jsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ import { Button } from "@mui/material";
66
import { createOrder } from "./store/feature/orderSlice";
77

88
function Item(prop) {
9+
10+
const [status, setStatus] = useState('Ordered')
11+
912
const user = useSelector((state) => {
1013
return state.auth.user;
1114
});
@@ -58,7 +61,7 @@ function Item(prop) {
5861
onClick={() => {
5962
console.log(prop.data.ref)
6063
dispatch(
61-
createOrder({ userId: user.uid , merchantId: prop.data.merchantId , productRef:prop.data.productRef})
64+
createOrder({ userId: user.uid , merchantId: prop.data.merchantId , productRef:prop.data.productRef,status})
6265
);
6366
}}
6467
>

src/components/Order/Order.jsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,13 @@ import OrderCard from './OrderCard';
77

88
const Order = () => {
99
const [loading, setLoading] = useState(true);
10-
const [status, setStatus] = useState('Ordered')
1110
const user = useSelector((state) => state.auth.user);
1211
const dispatch = useDispatch();
1312
const orderItems = useSelector((state) => state.order.items);
1413
const skeleton=[1,2,3,4,5,6,7,8,9,10,11,12];
1514
useEffect(() => {
1615
if (user) {
17-
dispatch(fetchOrder(status))
16+
dispatch(fetchOrder())
1817
.finally(() => setLoading(false));
1918
}
2019
}, [user, dispatch]);
@@ -37,7 +36,7 @@ console.log(orderItems)
3736
<div className='flex flex-col gap-[20px] justify-center '>
3837
{orderItems.length > 0 ? (
3938
orderItems.map((item, index) => (
40-
item.user.email === user.email && ( <OrderCard key={index} data={item
39+
item?.user.email === user?.email && ( <OrderCard key={index} data={item
4140
} />)
4241
))
4342
) : (

src/components/Order/OrderCard.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ const OrderCard = ({ data }) => {
3939
open={isPopupOpen}
4040
onClose={() => setIsPopupOpen(false)}
4141
order={data.orderId}
42-
orderStatus={data.orderStatus}
42+
orderStatus={data.status}
4343
/>
4444

4545
</CardContent>

src/components/Order/OrderDetails.jsx

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
1-
import React from 'react';
1+
import React, { useState } from 'react';
22
import { Dialog, DialogTitle, DialogContent, DialogActions, Button, Typography, Stepper, Step, StepLabel } from '@mui/material';
33
import { CheckCircle, LocalShipping, Cancel } from '@mui/icons-material';
4+
import { useDispatch } from 'react-redux';
5+
import { ChangeOrderStatus } from '../store/feature/orderSlice';
46

57
const OrderDetails = ({ open, onClose, order, orderStatus }) => {
68
const steps = ['Ordered', 'Shipped', 'Delivered'];
79

10+
const dispatch = useDispatch();
11+
const [status, setStatus] = useState('delivered')
812
const getActiveStep = (status) => {
913
switch (status) {
1014
case 'Ordered':
@@ -27,7 +31,7 @@ const OrderDetails = ({ open, onClose, order, orderStatus }) => {
2731
Order ID: <span className="font-normal">{order}</span>
2832
</Typography>
2933
<Typography variant="body1">
30-
Status: <span className="font-bold">{orderStatus}</span>
34+
Status: <span className="font-bold">{status}</span>
3135
</Typography>
3236
<Stepper activeStep={getActiveStep(orderStatus)} alternativeLabel>
3337
{steps.map((label) => (
@@ -53,6 +57,14 @@ const OrderDetails = ({ open, onClose, order, orderStatus }) => {
5357
<Button onClick={onClose} color="primary">
5458
Close
5559
</Button>
60+
<Button color="primary" onClick={() => {
61+
dispatch(
62+
ChangeOrderStatus({OrderId:order,status})
63+
);
64+
}}>
65+
ChangeOrderStatus
66+
</Button>
67+
5668
</DialogActions>
5769
</Dialog>
5870
);

src/components/Profile.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ const Profile = () => {
3939
Your Order
4040
</Button>
4141
</Link>
42+
4243

4344
<Link to={"/Login"}>
4445
{" "}

src/components/store/feature/orderSlice.js

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { collection, setDoc, doc, getDoc, addDoc, updateDoc, arrayUnion, getDocs
77

88
export const fetchOrder = createAsyncThunk(
99
'order/fetchOrder',
10-
async (status) => {
10+
async () => {
1111
const orderRef = collection(db,'orders');
1212

1313
const docs = await getDocs(orderRef);
@@ -17,32 +17,48 @@ export const fetchOrder = createAsyncThunk(
1717
const merchantData = await getDoc(mainData.merchantId)
1818
const userData = await getDoc(mainData.userId)
1919
const orderProduct = await getDoc(mainData.productRef)
20+
2021

2122
orders.push({orderedProducts: await orderProduct.data(),
2223
merchant: await merchantData.data(),
2324
user: await userData.data(),
2425
orderId: item.ref.id,
25-
orderStatus: status
26+
status:mainData.status
2627

2728
})
2829
}
2930
return orders;
3031
}
3132
);
3233

34+
3335
export const createOrder = createAsyncThunk(
3436
'order/createOrder',
35-
async ({ userId,merchantId , productRef }, { getState }) => {
37+
async ({ userId,merchantId , productRef ,status}, { getState }) => {
3638
const ordersCollection = collection(db, "orders");
3739
await addDoc(ordersCollection, {
3840
userId:doc(db, "users", userId) ,
3941
merchantId,
40-
productRef
41-
42+
productRef,
43+
status
4244
});
4345
}
4446
);
4547

48+
49+
50+
51+
export const ChangeOrderStatus = createAsyncThunk(
52+
'order/ChangeOrderStatus',
53+
async ({ OrderId ,status}, { getState }) => {
54+
const ordersCollection = doc(db,'orders',OrderId);
55+
56+
await updateDoc(ordersCollection, {
57+
status: status,
58+
});
59+
}
60+
);
61+
4662
const orderSlice = createSlice({
4763
name: 'order',
4864
initialState: {
@@ -56,20 +72,29 @@ const orderSlice = createSlice({
5672
state.items = action.payload;
5773
})
5874
.addCase(fetchOrder.pending, (state, action) => {
59-
// state.items = action.payload;
75+
console.log(action)
6076
})
6177
.addCase(fetchOrder.rejected, (state, action) => {
62-
//state.items = action.payload;
78+
6379
console.log(action)
6480
})
6581
.addCase(createOrder.fulfilled, (state, action) => {
66-
// state.items.push(action.payload);
82+
83+
})
84+
.addCase(createOrder.pending, (state, action) => {
85+
console.log(action)
6786
})
68-
// .addCase(createOrder.pending, (state, action) => {
69-
// console.log(action)
70-
// })
7187
.addCase(createOrder.rejected, (state, action) => {
7288
console.log(action)
89+
})
90+
.addCase(ChangeOrderStatus.fulfilled, (state, action) => {
91+
state.items.push(action.payload);
92+
})
93+
.addCase(ChangeOrderStatus.pending, (state, action) => {
94+
console.log(action)
95+
})
96+
.addCase(ChangeOrderStatus.rejected, (state, action) => {
97+
console.log(action)
7398
});
7499
},
75100
});

src/main.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ const theme = createTheme({
1212
MuiButton: {
1313
styleOverrides: {
1414
root: {
15-
borderRadius: '8px', // Change border radius
15+
borderRadius: '8px', // Change border radiu
1616
padding: '5px ', // Change padding
1717
fontSize: '13px', // Change font size
1818
textTransform: 'none', // Prevent uppercase text

0 commit comments

Comments
 (0)