@@ -92,58 +92,53 @@ const postsSlice = createSlice({
92
92
} ,
93
93
textContent : "" ,
94
94
isRepostedByCurrentUser : true ,
95
+ numberOfReposts : newPost . numberOfReposts + 1 ,
95
96
} ) ;
96
-
97
- const updatedRepostsWithPosts = state . posts . map ( ( post ) => {
98
- if ( ( post . parentPostId || post . postId ) === newPost . parentPostId ) {
99
- return {
100
- ...post ,
101
- numberOfReposts : post . numberOfReposts + 1 ,
102
- isRepostedByCurrentUser : true ,
103
- } ;
104
- }
105
-
106
- return post ;
107
- } ) ;
108
-
109
- state . posts = updatedRepostsWithPosts ;
110
97
} ,
111
98
undoRepost : (
112
99
state ,
113
- action : PayloadAction < { repostId : number ; userId ?: number } > ,
100
+ action : PayloadAction < { postId : number ; userId ?: number } > ,
114
101
) => {
115
- const { repostId, userId } = action . payload ;
116
- const givenPost = state . posts . find ( ( post ) => post . postId === repostId ) ;
117
- if ( ! givenPost ) return ;
102
+ const { postId, userId } = action . payload ;
103
+ if ( ! postId || ! userId ) return ;
118
104
119
- const originalPostId = givenPost . parentPostId ?? givenPost . postId ; // find original post id
120
105
const userRepostIndex = state . posts . findIndex (
121
- // find userRepostIndex to filter out
122
- ( post ) =>
123
- post . parentPostId === originalPostId && post . userId === userId ,
106
+ ( post ) => post . parentPostId === postId && post . userId === userId ,
124
107
) ;
125
108
126
- if ( userRepostIndex !== - 1 ) {
109
+ if ( postId && userRepostIndex !== - 1 ) {
127
110
state . posts . splice ( userRepostIndex , 1 ) ; // filter out repost belonging to current user
128
111
}
112
+ } ,
113
+ toggleRepost : ( state , action : PayloadAction < number > ) => {
114
+ const postToUpdate = state . posts . find (
115
+ ( post ) => post . postId === action . payload ,
116
+ ) ;
117
+ if ( ! postToUpdate ) return ;
118
+
119
+ const originalPostId = postToUpdate . originalPostContent
120
+ ? postToUpdate . parentPostId
121
+ : postToUpdate . postId ;
129
122
130
- const updatedRepostsWithPosts = state . posts . map ( ( post ) => {
131
- // update all existing reposts and original post with numberOfReposts and updating isRepostedByCurrentUser flag.
123
+ const newPosts = state . posts . map ( ( post ) => {
132
124
if (
133
125
post . postId === originalPostId ||
134
126
post . parentPostId === originalPostId
135
127
) {
128
+ const isRepostedByCurrentUser = ! post . isRepostedByCurrentUser ;
129
+
136
130
return {
137
131
...post ,
138
- numberOfReposts : post . numberOfReposts - 1 ,
139
- isRepostedByCurrentUser : false ,
132
+ isRepostedByCurrentUser,
133
+ numberOfReposts : isRepostedByCurrentUser
134
+ ? post . numberOfReposts + 1
135
+ : post . numberOfReposts - 1 ,
140
136
} ;
141
137
}
142
-
143
138
return post ;
144
139
} ) ;
145
140
146
- state . posts = updatedRepostsWithPosts ;
141
+ state . posts = newPosts ;
147
142
} ,
148
143
toggleLikePost : ( state , action : PayloadAction < number > ) => {
149
144
const postToUpdate = state . posts . find ( ( p ) => p . postId === action . payload ) ;
@@ -223,6 +218,7 @@ export const {
223
218
setPosts,
224
219
setExpandedPost,
225
220
addRepost,
221
+ toggleRepost,
226
222
toggleLikePost,
227
223
toggleFollow,
228
224
updateDisplayNames,
0 commit comments