Skip to content
Snippets Groups Projects
following-button.tsx 1.24 KiB
Newer Older
import { PrismaClient } from '@prisma/client';
Yusuf Akgül's avatar
Yusuf Akgül committed
import { useState } from 'react';
import { Button } from './ui/button';
const prisma = new PrismaClient();
Yusuf Akgül's avatar
Yusuf Akgül committed
async function getFollower(userId: number, followerId: number) {
  const follower = await prisma.follows.findFirst({
    where: {
      followerId: followerId,
      followingId: userId,
    },
  });

  return follower;
}

export default function FollowButton({ userId, followerId }: { userId: number; followerId: number }) {
  const [isFollowing, setIsFollowing] = useState(false);
  const handleFollow = async () => {
Yusuf Akgül's avatar
Yusuf Akgül committed
    const follower = await getFollower(userId, followerId);

    if (follower) {
      // User is already following, so unfollow
      await prisma.follows.delete({
        where: {
Yusuf Akgül's avatar
Yusuf Akgül committed
          followerId_followingId: {
            followerId: followerId,
            followingId: userId,
          },
Yusuf Akgül's avatar
Yusuf Akgül committed
      setIsFollowing(false);
    } else {
      // User is not following, so follow
      await prisma.follows.create({
        data: {
          followerId: followerId,
          followingId: userId,
        },
      });
      setIsFollowing(true);
Yusuf Akgül's avatar
Yusuf Akgül committed
    <Button onClick={handleFollow}>
      {isFollowing ? 'Unfollow' : 'Follow'}
Yusuf Akgül's avatar
Yusuf Akgül committed
    </Button>
Yusuf Akgül's avatar
Yusuf Akgül committed
}