Skip to content

Commit 53df05f

Browse files
committed
finished reactions
1 parent 469b78c commit 53df05f

File tree

1 file changed

+46
-14
lines changed

1 file changed

+46
-14
lines changed

firebase-project/src/pages/Home.tsx

Lines changed: 46 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,17 @@ interface i_post_data {
1111
post: string;
1212
user: string;
1313
likes: number;
14+
dislikes: number;
1415
}
1516

1617
const Home = () => {
1718
const { user } = useContext(AppContext) as app_context_type;
1819

1920
const [ posts_state, set_posts_state ] = useState<i_post_data[] | null>(null);
2021
const [ made_post, set_made_post ] = useState('');
21-
22+
const [ total_likes, set_total_likes ] = useState(0);
23+
const [ made_like, set_made_like ] = useState('');
24+
const [ made_dislike, set_made_dislike ] = useState('');
2225
/*
2326
const do_db = () => {
2427
const docs = getDocs(posts);
@@ -36,16 +39,17 @@ const Home = () => {
3639
});
3740
};
3841
*/
39-
/*
42+
4043
const generate_random_post_id = (): string => {
4144
const abc = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
4245
const num = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'];
4346
const curr_uid = user?.uid;
4447

4548
let built_pid: string = '';
4649

47-
for(let q: number = 0; ++q; q < 10) {
50+
for(let q: number = 0; q < 10; ++q) {
4851
const coin_flip: number = Math.floor(Math.random() * (10 - 1) + 1);
52+
4953
if((coin_flip % 2) === 0) { // even = abc
5054
built_pid = built_pid.concat(abc[(Math.floor(Math.random() * (26 - 1) + 1)) - 1]);
5155
} else { // odd or num
@@ -57,7 +61,8 @@ const Home = () => {
5761
console.log(built_pid);
5862
return `${curr_uid}${built_pid}`;
5963
}
60-
*/
64+
//generate_random_post_id();
65+
6166
const nav = useNavigate();
6267
const handle_click = async (data: FieldValues) => {
6368
if(!user) {
@@ -66,7 +71,7 @@ const Home = () => {
6671
const posts = collection(db, 'posts');
6772
await addDoc(posts, {
6873
uid: user?.uid,
69-
pid: user?.uid,
74+
pid: generate_random_post_id(),
7075
post: data?.post,
7176
user: user?.displayName,
7277
});
@@ -81,20 +86,47 @@ const Home = () => {
8186
user_id: user?.uid,
8287
post_id: pid,
8388
});
84-
}
89+
90+
set_made_like(pid);
91+
};
92+
93+
const handle_dislike = (pid: string) => {
94+
const dislikes = collection(db, 'dislikes');
95+
addDoc(dislikes, {
96+
user_id: user?.uid,
97+
post_id: pid,
98+
});
99+
100+
set_made_dislike(pid);
101+
};
85102

86103
const { register, handleSubmit } = useForm({});
87104

105+
interface i_cnt {
106+
likes: number;
107+
dislikes: number;
108+
}
109+
88110
useEffect(() => {
89111
const likes = collection(db, 'likes');
90-
const get_like_cnt = async (tmp_pid: string): Promise<number> => {
91-
let cnt = 0;
112+
const dislikes = collection(db, 'dislikes');
113+
const get_reaction_cnt = async (tmp_pid: string): Promise<i_cnt> => {
114+
const cnt = {
115+
likes: 0,
116+
dislikes: 0,
117+
};
92118

93119
const likes_docs = await getDocs(likes);
94120
likes_docs.docs.forEach((value) => {
95121
if(value.get('post_id') === tmp_pid) {
96-
//console.log('it hit');
97-
cnt++;
122+
cnt.likes++;
123+
}
124+
});
125+
126+
const dislikes_docs = await getDocs(dislikes);
127+
dislikes_docs.docs.forEach((value) => {
128+
if(value.get('post_id') === tmp_pid) {
129+
cnt.dislikes++;
98130
}
99131
});
100132

@@ -109,15 +141,15 @@ const Home = () => {
109141
docs.then((data) => {
110142
data.docs.forEach((val) => {
111143
const tmp_pid = val.get('pid');
112-
get_like_cnt(tmp_pid).then((cnt) => {
113-
holder.push({post: val.get('post'), user: val.get('user'), uid: val.get('uid'), pid: val.get('pid'), likes: cnt});
144+
get_reaction_cnt(tmp_pid).then((cnt) => {
145+
holder.push({post: val.get('post'), user: val.get('user'), uid: val.get('uid'), pid: val.get('pid'), likes: cnt.likes, dislikes: cnt.dislikes});
114146
set_posts_state(holder);
115147
});
116148
});
117149
}).catch((err) => {
118150
console.log(err);
119151
})
120-
}, [made_post]);
152+
}, [made_post, made_like, made_dislike]);
121153

122154
return (
123155
<>
@@ -136,7 +168,7 @@ const Home = () => {
136168
<h3 className="post-user">@{val.user}</h3>
137169
<p className="post-date">(11/04/23)</p>
138170
<button onClick={() => handle_like(val.pid)} className="post-like-btn">🔥{val.likes}</button>
139-
<button className="post-dislike-btn">💩</button>
171+
<button onClick={() => handle_dislike(val.pid)} className="post-dislike-btn">💩{val.dislikes}</button>
140172
<p key={Math.random()} className="post-text">{val.post}</p>
141173

142174
</div>

0 commit comments

Comments
 (0)