mirror of
https://github.com/aaronpo97/the-biergarten-app.git
synced 2026-02-16 20:13:49 +00:00
35 lines
1.1 KiB
TypeScript
35 lines
1.1 KiB
TypeScript
import { FC, useEffect, useState } from 'react';
|
|
|
|
import useGetBeerPostLikeCount from '@/hooks/data-fetching/beer-likes/useBeerPostLikeCount';
|
|
import useCheckIfUserLikesBeerStyle from '@/hooks/data-fetching/beer-style-likes/useCheckIfUserLikesBeerPost';
|
|
import sendBeerStyleLikeRequest from '@/requests/BeerStyleLike/sendBeerStyleLikeRequest';
|
|
import LikeButton from '../ui/LikeButton';
|
|
|
|
const BeerStyleLikeButton: FC<{
|
|
beerStyleId: string;
|
|
mutateCount: ReturnType<typeof useGetBeerPostLikeCount>['mutate'];
|
|
}> = ({ beerStyleId, mutateCount }) => {
|
|
const { isLiked, mutate: mutateLikeStatus } = useCheckIfUserLikesBeerStyle(beerStyleId);
|
|
const [loading, setLoading] = useState(true);
|
|
|
|
useEffect(() => {
|
|
setLoading(false);
|
|
}, [isLiked]);
|
|
|
|
const handleLike = async () => {
|
|
try {
|
|
setLoading(true);
|
|
await sendBeerStyleLikeRequest(beerStyleId);
|
|
|
|
await Promise.all([mutateCount(), mutateLikeStatus()]);
|
|
setLoading(false);
|
|
} catch (e) {
|
|
setLoading(false);
|
|
}
|
|
};
|
|
|
|
return <LikeButton isLiked={!!isLiked} handleLike={handleLike} loading={loading} />;
|
|
};
|
|
|
|
export default BeerStyleLikeButton;
|