Skip to content

Commit b2d9bce

Browse files
Refactor authentication and post handling; improve user navigation and error logging
1 parent ce5126c commit b2d9bce

File tree

9 files changed

+75
-31
lines changed

9 files changed

+75
-31
lines changed

src/appwrite/auth.service.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ export class AuthService{
77

88
constructor(){
99
this.client
10-
.setEndpoint(conf.appwriteUrl)
11-
.setProject(conf.appwriteProjectId)
10+
.setEndpoint(conf.appwriteUrl)
11+
.setProject(conf.appwriteProjectId);
1212

1313
this.account = new Account(this.client);
1414
}
@@ -43,15 +43,15 @@ export class AuthService{
4343
} catch (error) {
4444
console.log("Appwrite service :: getCurrentUser :: error", error);
4545
}
46-
return null;//in case the account get method fails to return an error;
46+
// return null;//in case the account get method fails to return an error;
4747
}
4848

4949
async logout(){
5050
// eslint-disable-next-line no-useless-catch
5151
try {
52-
return await this.account.deleteSessions();
52+
await this.account.deleteSessions();
5353
} catch (error) {
54-
throw error
54+
console.log("Appwrite serive :: logout :: error", error);
5555
}
5656
}
5757
}

src/appwrite/config.service.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ export class Service{
4545
content,
4646
featuredImage,
4747
status,
48-
4948
}
5049
)
5150
} catch (error) {
@@ -96,6 +95,20 @@ export class Service{
9695
return false
9796
}
9897
}
98+
async getPostforHome(userId, queries = [Query.equal("status", "active")]) {
99+
try {
100+
// Add a query to filter posts by userId
101+
queries.push(Query.equal("userId", userId));
102+
return await this.databases.listDocuments(
103+
conf.appwriteDatabaseId,
104+
conf.appwriteCollectionId,
105+
queries
106+
);
107+
} catch (error) {
108+
console.log("Appwrite service :: getPosts :: error", error);
109+
return false;
110+
}
111+
}
99112

100113
// file upload service
101114

src/components/Header/Header.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ function Header(){
99
const navigate = useNavigate()
1010
const navItems = [
1111
{
12-
name: 'Home',
12+
name: "Home",
1313
slug: "/",
1414
active: true
1515
},

src/components/Header/LogoutBtn.jsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
import {useDispatch} from 'react-redux'
22
import authService from '../../appwrite/auth.service'
33
import {logout} from '../../store/authSlice'
4+
import {Link, useNavigate} from 'react-router-dom'
45

56
function LogoutBtn() {
67
const dispatch = useDispatch()
8+
const navigate = useNavigate()
79
const logoutHandler = ()=> {
810
authService.logout().then(() => {
911
dispatch(logout())
12+
navigate('/login')
1013
})
1114
}
1215
return (

src/components/Login.jsx

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import React ,{useState} from 'react'
1+
import React ,{useState, useEffect} from 'react'
22
import {Link, useNavigate} from 'react-router-dom';
33
import {login as authLogin} from '../store/authSlice.js'
44
import {Button, Input, Logo} from './index.js'
5-
import { useDispatch } from 'react-redux'
5+
import { useDispatch , useSelector} from 'react-redux'
66
import authService from '../appwrite/auth.service'
77
import {useForm} from 'react-hook-form'
88

@@ -11,23 +11,31 @@ function Login() {
1111
const dispatch = useDispatch()
1212
const {register, handleSubmit} = useForm()
1313
const [error, setError] = useState("")
14+
const userData = useSelector((state) => state.auth.userData); // Get the logged-in user data from the Redux store
1415

1516
const login = async(data) => {
1617
setError("") //clear all error on submission start
1718
try {
1819
const session = await authService.login(data)
20+
console.log("session done")
1921
if(session){
2022
const userData = await authService.getCurrentUser()
21-
console.log("Can go to home but not going")
23+
console.log(userData)
2224
if(userData){
2325
dispatch(authLogin(userData));
2426
}
25-
navigate("/");
2627
}
2728
} catch (error) {
2829
setError(error.message)
2930
}
3031
}
32+
33+
useEffect(() => {
34+
if (userData) {
35+
navigate('/'); // Navigate to home page if user is logged in
36+
}
37+
}, [userData, navigate]);
38+
3139
return (
3240
<div
3341
className='flex items-center justify-center w-full pt-5 pb-5'

src/components/SignUp.jsx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import {useState} from 'react'
1+
import {useState, useEffect} from 'react'
22
import authService from '../appwrite/auth.service'
33
import {Link, useNavigate} from 'react-router-dom'
44
import { login } from '../store/authSlice'
55
import {Button, Input, Logo} from '../components/index.js'
6-
import { useDispatch } from 'react-redux'
6+
import { useDispatch, useSelector } from 'react-redux'
77
import { useForm } from 'react-hook-form'
88

99
function SignUp() {
@@ -12,14 +12,21 @@ function SignUp() {
1212
const dispatch = useDispatch()
1313
const {register, handleSubmit} = useForm()
1414

15+
const userData = useSelector((state) => state.auth.userData); // Get the logged-in user data from the Redux store
16+
17+
useEffect(() => {
18+
if (userData) {
19+
navigate('/'); // Navigate to home page if user is signed up
20+
}
21+
}, [userData, navigate]);
22+
1523
const signup = async(data) => {
1624
setError("")
1725
try {
1826
const userdata = await authService.createAccount(data)
1927
if(userdata){
2028
const userData = await authService.getCurrentUser()
2129
if(userData) dispatch(login(userData))
22-
navigate("/")
2330
}
2431
} catch (error) {
2532
setError(error.message)

src/components/post-form/PostForm.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,18 @@ import { useNavigate } from 'react-router-dom'
66
import { useSelector } from 'react-redux'
77

88
export default function PostForm({post}) {
9+
const userData = useSelector((state) => state.auth.userData)
910
const {register, handleSubmit, watch, setValue, control, getValues} = useForm({
1011
defaultValues:{
1112
title: post?.title || "",
1213
slug : post?.$id || "",
1314
content : post?.content || "",
1415
status : post?.status || "active",
15-
userId: post?.$id || ""
16+
userId: userData?.$id || ""
1617
},
1718
})
1819

1920
const navigate = useNavigate()
20-
const userData = useSelector((state) => state.auth.userData);
2121

2222
const submit = async (data)=> {
2323
if(post) {

src/pages/Home.jsx

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,26 @@
11
import React, {useEffect, useState} from 'react'
22
import { Container, PostCard } from '../components'
33
import appwriteService from '../appwrite/config.service'
4+
import { useSelector } from "react-redux";
45

56
function Home() {
6-
const [posts, setPosts] = useState([])
7+
8+
const [posts, setPosts] = useState([]); // State to hold multiple posts
9+
const userData = useSelector((state) => state.auth.userData); // Get the logged-in user data from the Redux store
10+
711
useEffect(() => {
8-
appwriteService.getPosts().then((posts) => {
9-
if(posts){
10-
setPosts(posts.documents)
12+
const fetchPosts = async () => {
13+
if (userData?.$id) {
14+
const userPosts = await appwriteService.getPostforHome(userData.$id); // Fetch posts for the logged-in user
15+
if (userPosts) {
16+
setPosts(userPosts.documents); // Set the posts data
17+
}
1118
}
12-
})
13-
}, [])
19+
};
20+
21+
fetchPosts();
22+
}, [userData]);
23+
1424
if(posts.length === 0) return (
1525
<div className="w-full py-8 mt-4 text-center">
1626
<Container>
@@ -28,12 +38,15 @@ function Home() {
2838
<div className='w-full py-8'>
2939
<div className='w-full py-8'>
3040
<Container>
31-
<div className='flex flex-wrap'>
41+
<div className='flex flex-wrap flex-col'>
42+
<h1 className='font-bold text-4xl mb-10'>My Posts</h1>
43+
<div className='flex flex-row'>
3244
{posts.map((post) => (
3345
<div key={post.$id} className='p-2 w-1/4'>
3446
<PostCard {...post} />
3547
</div>
3648
))}
49+
</div>
3750
</div>
3851
</Container>
3952
</div>

src/pages/Post.jsx

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,21 @@ import parse from "html-react-parser";
66
import { useSelector } from "react-redux";
77

88
export default function Post() {
9-
const [post, setPost] = useState(null);
10-
const { slug } = useParams();
11-
const navigate = useNavigate();
9+
const [post, setPost] = useState(null); // State to hold the post data
10+
const { slug } = useParams(); // Get the slug from the URL parameters
11+
const navigate = useNavigate(); // Hook for navigation
1212

13-
const userData = useSelector((state) => state.auth.userData);
13+
const userData = useSelector((state) => state.auth.userData); // Get the logged-in user data from the Redux store
1414

15-
const isAuthor = post && userData ? post.userId === userData.$id : false;
15+
const isAuthor = post && userData ? post.userId === userData.$id : false; // Check if the logged-in user is the author of the post
1616

1717
useEffect(() => {
1818
if (slug) {
1919
appwriteService.getPost(slug).then((post) => {
20-
if (post) setPost(post);
21-
else navigate("/");
20+
if (post) setPost(post); // Set the post data if found
21+
else navigate("/"); // Navigate to home if post not found
2222
});
23-
} else navigate("/");
23+
} else navigate("/"); // Navigate to home if slug is not provided
2424
}, [slug, navigate]);
2525

2626
const deletePost = () => {

0 commit comments

Comments
 (0)