-
Notifications
You must be signed in to change notification settings - Fork 0
/
useLikeButton.ts
56 lines (51 loc) · 1.54 KB
/
useLikeButton.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import {
decrementLike,
getLikesCount,
incrementLike,
} from "@/utils/APIRequests";
import { useEffect, useState } from "react";
import useLocalStorage from "./useLocalStorage";
const useLikeButton = () => {
const [isLiked, setIsLiked] = useLocalStorage("has-liked", false);
const [likesCount, setLikesCount] = useState(0);
useEffect(() => {
(async () => {
const data = await getLikesCount();
if (data && data.status === 200) setLikesCount(parseInt(data.likesCount));
})();
console.log("likes count:", likesCount);
}, [isLiked, likesCount]);
const handleLikeButtonClick = async () => {
console.log("button clicked.");
setIsLiked(!isLiked);
//if (isLiked) setLikesCount((prev) => prev - 1);
// else setLikesCount((prev) => prev + 1);
try {
if (isLiked) {
// setLikesCount((prev) => prev - 1);
const data = await decrementLike();
if (data && data.status === 200) {
console.log("decrement success");
setLikesCount(parseInt(data.likesCount));
}
} else {
// setLikesCount((prev) => prev + 1);
const data = await incrementLike();
if (data && data.status === 200) {
console.log("increment success");
setLikesCount(parseInt(data.likesCount));
}
}
} catch (err) {
//roll back
if (isLiked) setLikesCount((prev) => prev + 1);
else setLikesCount((prev) => prev - 1);
}
};
return {
isLiked,
likesCount,
handleLikeButtonClick,
};
};
export default useLikeButton;