Skip to content
Snippets Groups Projects
Commit 36eadf1f authored by Serdar D's avatar Serdar D
Browse files

follow button und following users

parent 787c7cfa
No related branches found
No related tags found
2 merge requests!15Following,!14Following
Pipeline #35449 failed
"use client" import { useState } from 'react';
import { PrismaClient } from '@prisma/client';
import { Prisma } from "@prisma/client"; const prisma = new PrismaClient();
import { useRouter } from "next/navigation";
import { startTransition } from "react";
import { Icons } from "./icons";
import { Button } from "./ui/button";
type likeType = Prisma.LikeUncheckedCreateInput export default function FollowButton({ userId, followerId }) {
const [isFollowing, setIsFollowing] = useState(false);
export default function FollowButton(props: { data: likeType }) { const handleFollow = async () => {
const router = useRouter(); try {
// Überprüfen, ob der Benutzer bereits folgt
const isAlreadyFollowing = await prisma.followers.findFirst({
where: {
userId: followerId,
followerId: userId,
},
});
async function postFollow(e: any) { if (isAlreadyFollowing) {
e.preventDefault() // Benutzer ist bereits ein Follower, daher folgen aufheben
const msgLikeData = props.data; await prisma.followers.delete({
const likeData = {} as likeType where: {
likeData.userId = msgLikeData.userId userId: followerId,
likeData.postId = msgLikeData.postId followerId: userId,
},
const response = await fetch('http://localhost:3000/api/follows', { });
method: 'PUT', setIsFollowing(false);
body: JSON.stringify(likeData) } else {
}) // Benutzer folgt noch nicht, daher folgen
await prisma.followers.create({
startTransition(() => { data: {
// Refresh the current route and fetch new data from the server without userId: followerId,
// losing client-side browser or React state. followerId: userId,
router.refresh(); },
}); });
return await response.json() setIsFollowing(true);
} }
} catch (error) {
console.error('Error following/unfollowing user:', error);
}
};
return ( return (
<div> <button onClick={handleFollow}>
<form onSubmit={postFollow}> {isFollowing ? 'Unfollow' : 'Follow'}
<Button type="submit" variant="ghost" size="lg" className="float-right" > </button>
<Icons.heart className="h-3 w-3" /> );
</Button> }
</form>
</div>
)
}
\ No newline at end of file
"use client" "use-client"
import { useEffect, useState } from "react"; import { useRouter } from 'next/router';
import { getUsers } from "@/lib/api"; import { useEffect, useState } from 'react';
import { IUser } from "@/types/types"; import { PrismaClient } from '@prisma/client';
import { usePathname, useRouter, useSearchParams } from "next/navigation";
import User from "./user-item";
export default function Following() { const prisma = new PrismaClient();
const [followedUsers, setFollowedUsers] = useState<IUser[]>([]);
useEffect(() => { export default function Followers() {
fetchFollowedUsers(); const router = useRouter();
}, []); const { userId } = router.query;
const [followers, setFollowers] = useState([]);
const fetchFollowedUsers = async () => { //Zeigt die User an die Follower sind.
try { useEffect(() => {
const users = await getUsers(); if (userId) {
setFollowedUsers(users); prisma.user.findUnique({
} catch (error) { where: { id: Number(userId) },
console.error("Error fetching followed users:", error); include: { followers: true },
})
.then((user) => {
setFollowers(user.followers);
})
.catch((error) => {
console.error('Error retrieving followers:', error);
});
} }
}; }, [userId]);
return ( return (
<div> <div>
<h1>Followed Users</h1> <h1>Followers</h1>
{followedUsers.map((user) => ( {followers.map((follower) => (
<User key={user.id} id={user.id} name={user.name} avatar={user.avatar} /> <div key={follower.id}>
<p>{follower.userName}</p>
</div>
))} ))}
</div> </div>
); );
}; }
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment