Skip to content

Commit 129dac5

Browse files
committed
Refactor code to use state.auth instead of state.blog for user blogs
1 parent 65593bc commit 129dac5

File tree

8 files changed

+52
-35
lines changed

8 files changed

+52
-35
lines changed

eslint.config.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export default tseslint.config(
1919
},
2020
rules: {
2121
...reactHooks.configs.recommended.rules,
22-
// "@typescript-eslint/no-explicit-any": "off",
22+
"@typescript-eslint/no-explicit-any": "off",
2323
"react-refresh/only-export-components": [
2424
"warn",
2525
{ allowConstantExport: true },

src/components/Account/UserLatestBlogs/LatestBlogCard.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { useSelector } from "react-redux";
1414

1515
const LatestBlogCard: React.FC = () => {
1616
const { getBlogByUserId } = useBlogCall();
17-
const { userBlogs } = useSelector((state: RootState) => state.blog);
17+
const { userBlogs } = useSelector((state: RootState) => state.auth);
1818
const { currentUser } = useSelector((state: RootState) => state.auth);
1919
const navigate = useNavigate();
2020

src/components/Home/TopBlogWriter.tsx

+4-4
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,14 @@ import TopBlogWriterCard from "./TopBlogWriterCard";
1717
import { useNavigate } from "react-router-dom";
1818

1919
const TopBlogWriter: React.FC = () => {
20-
const { userBlogs, loading } = useSelector((state: RootState) => state.blog);
20+
const { userBlogs, loading } = useSelector((state: RootState) => state.auth);
2121
const { getBlogByUserId } = useBlogCall();
2222
const navigate = useNavigate();
2323

2424
// Get the best blog after loading
25-
const bestBlog = userBlogs.length > 0 ? userBlogs[0] : null;
26-
const topWriterBlogs = userBlogs.slice(1, 4);
25+
const bestBlog = userBlogs && userBlogs.length > 0 ? userBlogs[0] : null;
26+
const topWriterBlogs =
27+
userBlogs && userBlogs.length > 1 ? userBlogs.slice(1, 4) : [];
2728

2829
useEffect(() => {
2930
// Fetch data
@@ -46,7 +47,6 @@ const TopBlogWriter: React.FC = () => {
4647
return (
4748
<Grid2 container spacing={2}>
4849
{/* Main article on left */}
49-
5050
<Grid2 size={{ xs: 12, md: 6 }}>
5151
{bestBlog && (
5252
<Card sx={{ maxWidth: "100%" }}>

src/features/authSlice.tsx

+2-5
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,7 @@ const authSlice = createSlice({
6868
state.token = "";
6969
state.currentUser = null;
7070
},
71-
updateUserBlogsSuccess: (state, { payload }) => {
72-
state.loading = false;
73-
state.userBlogs = payload.data;
74-
},
71+
7572
getsingleUserSuccess: (state, { payload }) => {
7673
state.loading = false;
7774
state.singleUser = payload.data;
@@ -95,7 +92,7 @@ export const {
9592
fetchFail,
9693
updateSuccess,
9794
deleteSuccess,
98-
updateUserBlogsSuccess,
95+
9996
getsingleUserSuccess,
10097
forgotPasswordSuccess,
10198
} = authSlice.actions;

src/features/blogSlice.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ const blogSlice = createSlice({
5454
getBlogByUserIdSuccess: (state, { payload }) => {
5555
state.loading = false;
5656
state.error = false;
57-
state.userBlogs = payload.data;
57+
state[payload.endpoint] = payload.data;
5858
},
5959
setPage: (state, { payload }) => {
6060
state.currentPage = payload;

src/hooks/useBlogCall.tsx

+19-6
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
getSingleBlogSuccess,
99
getSingleCategorySuccess,
1010
} from "../features/blogSlice";
11-
import { updateUserBlogsSuccess } from "../features/authSlice";
11+
1212
import { RootState } from "../app/store";
1313
import { toastError, toastSuccess } from "../helpers/ToastNotify";
1414
import { useNavigate } from "react-router-dom";
@@ -20,11 +20,25 @@ const useBlogCall = () => {
2020
const { token } = useSelector((state: RootState) => state.auth);
2121
const dispatch = useDispatch();
2222

23-
const getBlogData = async (endpoint: string): Promise<void> => {
23+
const getBlogData = async (
24+
endpoint: string,
25+
query?: string
26+
): Promise<void> => {
2427
dispatch(fetchStart());
2528
try {
26-
const { data } = await axios(`${BASE_URL}${endpoint}`);
27-
dispatch(getBlogSuccess({ endpoint, data }));
29+
const url = query
30+
? `${BASE_URL}${endpoint}?${query}`
31+
: `${BASE_URL}${endpoint}`;
32+
const { data } = await axios(url, {
33+
headers: {
34+
Authorization: `Token ${token}`,
35+
},
36+
});
37+
if (query?.includes("author=")) {
38+
dispatch(getBlogByUserIdSuccess({ endpoint: "userBlogs", data }));
39+
} else {
40+
dispatch(getBlogSuccess({ endpoint, data }));
41+
}
2842
} catch (error) {
2943
dispatch(fetchFail());
3044
console.error(error);
@@ -67,8 +81,7 @@ const useBlogCall = () => {
6781
Authorization: `Token ${token}`,
6882
},
6983
});
70-
dispatch(getBlogByUserIdSuccess(data));
71-
dispatch(updateUserBlogsSuccess(data));
84+
dispatch(getBlogByUserIdSuccess({ endpoint: "userBlogs", data }));
7285
} catch (error) {
7386
dispatch(fetchFail());
7487
console.error(error);

src/pages/Blogs.tsx

+4-4
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ const Blogs = () => {
5555
"&::-webkit-scrollbar": {
5656
display: "none", // Hide scrollbar for md and above
5757
},
58-
"-ms-overflow-style": "none", // Hide scrollbar for Internet Explorer
59-
"scrollbar-width": "none", // Hide scrollbar for Firefox
58+
msOverflowStyle: "none", // Hide scrollbar for Internet Explorer
59+
scrollbarWidth: "none", // Hide scrollbar for Firefox
6060
}}
6161
>
6262
{/* Blogs section: Display each blog card */}
@@ -90,8 +90,8 @@ const Blogs = () => {
9090
"&::-webkit-scrollbar": {
9191
display: "none", // Hide scrollbar for md and above
9292
},
93-
"-ms-overflow-style": "none", // Hide scrollbar for Internet Explorer
94-
"scrollbar-width": "none", // Hide scrollbar for Firefox
93+
msOverflowStyle: "none", // Hide scrollbar for Internet Explorer
94+
scrollbarWidth: "none", // Hide scrollbar for Firefox
9595
}}
9696
>
9797
{/* News section: Display news articles */}

src/pages/MyBlogs.tsx

+20-13
Original file line numberDiff line numberDiff line change
@@ -6,33 +6,40 @@ import { Container, Grid2 } from "@mui/material";
66
import MyBlogCard from "../components/MyBlogs/MyBlogCard";
77

88
const MyBlog = () => {
9-
const { getBlogByUserId } = useBlogCall();
9+
const { getBlogData } = useBlogCall();
1010
const { currentUser } = useSelector((state: RootState) => state.auth);
11-
const { userBlogs } = useSelector((state: RootState) => state.blog);
11+
const { userBlogs } = useSelector((state: RootState) => state.auth);
1212

13+
// useEffect hook'unda currentUser değişkenini bağımlılıklar arasına ekledik
1314
useEffect(() => {
1415
if (currentUser && currentUser._id) {
15-
getBlogByUserId(currentUser._id);
16+
getBlogData("blogs", `author=${currentUser._id}`);
1617
}
1718
}, [currentUser]);
1819

20+
// console.log(userBlogs);
21+
1922
return (
2023
<Container
2124
sx={{
2225
padding: "2rem 1rem",
2326
}}
2427
>
2528
<Grid2 container spacing={3} justifyContent="center">
26-
{userBlogs.map((blog: BlogPost) => (
27-
<Grid2
28-
display="flex"
29-
justifyContent="center"
30-
key={blog._id}
31-
size={{ xs: 12, md: 4, lg: 3 }}
32-
>
33-
<MyBlogCard blog={blog} />
34-
</Grid2>
35-
))}
29+
{userBlogs?.length > 0 ? (
30+
userBlogs.map((blog: BlogPost) => (
31+
<Grid2
32+
display="flex"
33+
justifyContent="center"
34+
key={blog._id}
35+
size={{ xs: 12, md: 4, lg: 3 }}
36+
>
37+
<MyBlogCard blog={blog} />
38+
</Grid2>
39+
))
40+
) : (
41+
<p>No blogs found</p>
42+
)}
3643
</Grid2>
3744
</Container>
3845
);

0 commit comments

Comments
 (0)