@@ -11,14 +11,17 @@ interface i_post_data {
11
11
post : string ;
12
12
user : string ;
13
13
likes : number ;
14
+ dislikes : number ;
14
15
}
15
16
16
17
const Home = ( ) => {
17
18
const { user } = useContext ( AppContext ) as app_context_type ;
18
19
19
20
const [ posts_state , set_posts_state ] = useState < i_post_data [ ] | null > ( null ) ;
20
21
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 ( '' ) ;
22
25
/*
23
26
const do_db = () => {
24
27
const docs = getDocs(posts);
@@ -36,16 +39,17 @@ const Home = () => {
36
39
});
37
40
};
38
41
*/
39
- /*
42
+
40
43
const generate_random_post_id = ( ) : string => {
41
44
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' ] ;
42
45
const num = [ '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , '0' ] ;
43
46
const curr_uid = user ?. uid ;
44
47
45
48
let built_pid : string = '' ;
46
49
47
- for(let q: number = 0; ++q; q < 10) {
50
+ for ( let q : number = 0 ; q < 10 ; ++ q ) {
48
51
const coin_flip : number = Math . floor ( Math . random ( ) * ( 10 - 1 ) + 1 ) ;
52
+
49
53
if ( ( coin_flip % 2 ) === 0 ) { // even = abc
50
54
built_pid = built_pid . concat ( abc [ ( Math . floor ( Math . random ( ) * ( 26 - 1 ) + 1 ) ) - 1 ] ) ;
51
55
} else { // odd or num
@@ -57,7 +61,8 @@ const Home = () => {
57
61
console . log ( built_pid ) ;
58
62
return `${ curr_uid } ${ built_pid } ` ;
59
63
}
60
- */
64
+ //generate_random_post_id();
65
+
61
66
const nav = useNavigate ( ) ;
62
67
const handle_click = async ( data : FieldValues ) => {
63
68
if ( ! user ) {
@@ -66,7 +71,7 @@ const Home = () => {
66
71
const posts = collection ( db , 'posts' ) ;
67
72
await addDoc ( posts , {
68
73
uid : user ?. uid ,
69
- pid : user ?. uid ,
74
+ pid : generate_random_post_id ( ) ,
70
75
post : data ?. post ,
71
76
user : user ?. displayName ,
72
77
} ) ;
@@ -81,20 +86,47 @@ const Home = () => {
81
86
user_id : user ?. uid ,
82
87
post_id : pid ,
83
88
} ) ;
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
+ } ;
85
102
86
103
const { register, handleSubmit } = useForm ( { } ) ;
87
104
105
+ interface i_cnt {
106
+ likes : number ;
107
+ dislikes : number ;
108
+ }
109
+
88
110
useEffect ( ( ) => {
89
111
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
+ } ;
92
118
93
119
const likes_docs = await getDocs ( likes ) ;
94
120
likes_docs . docs . forEach ( ( value ) => {
95
121
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 ++ ;
98
130
}
99
131
} ) ;
100
132
@@ -109,15 +141,15 @@ const Home = () => {
109
141
docs . then ( ( data ) => {
110
142
data . docs . forEach ( ( val ) => {
111
143
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 } ) ;
114
146
set_posts_state ( holder ) ;
115
147
} ) ;
116
148
} ) ;
117
149
} ) . catch ( ( err ) => {
118
150
console . log ( err ) ;
119
151
} )
120
- } , [ made_post ] ) ;
152
+ } , [ made_post , made_like , made_dislike ] ) ;
121
153
122
154
return (
123
155
< >
@@ -136,7 +168,7 @@ const Home = () => {
136
168
< h3 className = "post-user" > @{ val . user } </ h3 >
137
169
< p className = "post-date" > (11/04/23)</ p >
138
170
< 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 >
140
172
< p key = { Math . random ( ) } className = "post-text" > { val . post } </ p >
141
173
142
174
</ div >
0 commit comments