Skip to content
This repository was archived by the owner on Sep 20, 2025. It is now read-only.

Commit 7559516

Browse files
committed
Show products count stat on dashboard home-screen
1 parent 6b6adae commit 7559516

File tree

5 files changed

+102
-19
lines changed

5 files changed

+102
-19
lines changed

frontend/src/components/pages/adminDashboard/HomeComponent.jsx

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,40 @@
1-
import React, { useEffect, } from "react";
2-
import { useNavigate, } from "react-router-dom";
3-
import { useDispatch, useSelector, } from "react-redux";
4-
import { Helmet } from "react-helmet";
5-
import { authorize, } from "../../../redux/actions/adminAuthActions";
6-
import Error from "../../layouts/Error";
7-
import { adminDashboardTitle, } from "../../../constants";
1+
import React, { useEffect, } from "react"
2+
import { useDispatch, useSelector, } from "react-redux"
3+
import { Helmet } from "react-helmet"
4+
import { authorize, } from "../../../redux/actions/adminAuthActions"
5+
import Error from "../../layouts/Error"
6+
import { adminDashboardTitle, } from "../../../constants"
7+
import { getAdminProductsCountStat, } from "../../../redux/actions/adminProductsCountStatActions"
88

99
export default function HomeComponent() {
10-
const navigate = useNavigate();
11-
12-
const dispatch = useDispatch();
10+
const dispatch = useDispatch()
1311
const state = useSelector((state) => ({
1412
adminAuth: state.adminAuth,
15-
}));
13+
adminProductsCountStat: state.adminProductsCountStat,
14+
}))
1615

1716
useEffect(() => {
18-
dispatch(authorize());
19-
}, []);
17+
dispatch(authorize())
18+
}, [])
2019

2120
useEffect(() => {
2221
if (false === state.adminAuth.loading && !state.adminAuth.data) {
23-
window.location.href = "/admin/signin";
22+
window.location.href = "/admin/signin"
23+
}
24+
if (false === state.adminAuth.loading && state.adminAuth.data) {
25+
dispatch(getAdminProductsCountStat())
2426
}
25-
}, [state.adminAuth]);
27+
}, [state.adminAuth])
2628

27-
if (state.adminAuth.loading) {
29+
if (state.adminAuth.loading || state.adminProductsCountStat.loading) {
2830
return (
2931
<div className="container dashboard-home-container text-center">
3032
<Helmet>
3133
<title>Dashboard Home - {adminDashboardTitle}</title>
3234
</Helmet>
3335
<p>Loading...</p>
3436
</div>
35-
);
37+
)
3638
}
3739

3840
return (
@@ -58,7 +60,7 @@ export default function HomeComponent() {
5860
Products
5961
</div>
6062
<div className="h5 mb-0 font-weight-bold text-gray-800">
61-
PRODUCTS_COUNT
63+
{state.adminProductsCountStat.data}
6264
</div>
6365
</div>
6466
<div className="col-auto">
@@ -146,5 +148,5 @@ export default function HomeComponent() {
146148
</div>
147149
</div>
148150
</div>
149-
);
151+
)
150152
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
2+
import HttpService from "../../services/HttpService"
3+
import { adminProductsCountStat, } from "../types"
4+
5+
export const getAdminProductsCountStat = () => {
6+
return async dispatch => {
7+
const http = new HttpService()
8+
9+
dispatch({ type: adminProductsCountStat.GET_ADMIN_PRODUCTS_COUNT_STAT_PENDING, })
10+
11+
const tokenId = "admin-user-token"
12+
await http.getData("/stats/admin/products", tokenId)
13+
.then(res => {
14+
dispatch({
15+
type: adminProductsCountStat.GET_ADMIN_PRODUCTS_COUNT_STAT_SUCCESS,
16+
payload: res.data.data,
17+
})
18+
}).catch(error => {
19+
let message
20+
if ("ERR_NETWORK" === error.code) {
21+
message = "Server unavailable."
22+
} else if (
23+
error.response &&
24+
error.response.data &&
25+
error.response.data.error
26+
) {
27+
message = error.response.data.error
28+
} else {
29+
message = "Something went wrong. Please come back later."
30+
}
31+
dispatch({
32+
type: adminProductsCountStat.GET_ADMIN_PRODUCTS_COUNT_STAT_ERROR,
33+
payload: message,
34+
})
35+
})
36+
}
37+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { adminProductsCountStat, } from "../types"
2+
3+
const initState = {
4+
data: null,
5+
error: null,
6+
loading: true,
7+
}
8+
9+
export default function adminProductsCountStatReducer (state = initState, action) {
10+
switch (action.type) {
11+
12+
case adminProductsCountStat.GET_ADMIN_PRODUCTS_COUNT_STAT_ERROR:
13+
return {
14+
...state,
15+
error: action.payload,
16+
loading: false,
17+
}
18+
19+
case adminProductsCountStat.GET_ADMIN_PRODUCTS_COUNT_STAT_PENDING:
20+
return {
21+
...state,
22+
loading: true,
23+
}
24+
25+
case adminProductsCountStat.GET_ADMIN_PRODUCTS_COUNT_STAT_SUCCESS:
26+
return {
27+
...state,
28+
data: action.payload,
29+
loading: false,
30+
error: null,
31+
}
32+
33+
default:
34+
return state
35+
}
36+
}

frontend/src/redux/reducers/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@ import { combineReducers, } from "redux"
22
import authReducer from "./authReducer"
33
import usersReducer from "./usersReducer"
44
import adminAuthReducer from "./adminAuthReducer"
5+
import adminProductsCountStatReducer from "./adminProductsCountStatReducer"
56

67
export default combineReducers({
78
auth: authReducer,
89
users: usersReducer,
910
adminAuth: adminAuthReducer,
11+
adminProductsCountStat: adminProductsCountStatReducer,
1012
})

frontend/src/redux/types.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,9 @@ export const adminAuth = {
3131
ADMIN_AUTH_AUTHORIZE_ERROR: "ADMIN_AUTH_AUTHORIZE_ERROR",
3232
ADMIN_AUTH_AUTHORIZE_PENDING: "ADMIN_AUTH_AUTHORIZE_PENDING",
3333
}
34+
35+
export const adminProductsCountStat = {
36+
GET_ADMIN_PRODUCTS_COUNT_STAT_SUCCESS: "GET_ADMIN_PRODUCTS_COUNT_STAT_SUCCESS",
37+
GET_ADMIN_PRODUCTS_COUNT_STAT_ERROR: "GET_ADMIN_PRODUCTS_COUNT_STAT_ERROR",
38+
GET_ADMIN_PRODUCTS_COUNT_STAT_PENDING: "GET_ADMIN_PRODUCTS_COUNT_STAT_PENDING",
39+
}

0 commit comments

Comments
 (0)