@@ -18,7 +18,6 @@ import { Button, Dropdown } from "react-bootstrap";
1818import AddEventModal from "./popups/AddEventModal" ;
1919import AddProjectModal from "./popups/AddProjectModal" ;
2020import PostReactionModal from "./popups/PostReactionsModal" ;
21- // import ArrowDropUpIcon from "@material-ui/icons/ArrowDropUp";
2221import ChatBubbleIcon from "@material-ui/icons/ChatBubble" ;
2322import "../../pinned-posts/posts/posts.scss" ;
2423import "./news-feed.scss" ;
@@ -37,6 +36,9 @@ import { FaEllipsisH, FaThumbtack } from "react-icons/fa";
3736import ReactionsElement from "./ReactionsElement" ;
3837import { pinPost } from "../../../actions/postAction" ;
3938import Moment from "react-moment" ;
39+ import EditPostModal from "./popups/EditPost" ;
40+ import DeletePostModal from "./popups/DeletePost" ;
41+ import SharePostModal from "./popups/SharePost" ;
4042
4143// const reactionVariant = {
4244// hover: {
@@ -143,13 +145,29 @@ function NewsFeed(props) {
143145 const [ displayReactionContainer , setDisplayReactioContainer ] = useState (
144146 false
145147 ) ;
148+ const [ editPost , setShowEditPost ] = useState ( false ) ;
149+ const [ sharePost , setShowSharePost ] = useState ( false ) ;
150+ const [ deletePost , setShowDeletePost ] = useState ( false ) ;
151+ const [ userId , setUserId ] = useState ( localStorage . getItem ( "userId" ) ) ;
152+ const [ postInfo , setPostInfo ] = useState ( { } ) ;
153+ const [ deletePostId , setDeletePostId ] = useState ( "" ) ;
154+ const [ shareableContent , setSharableContent ] = useState ( "" ) ;
155+
156+ const FILTER_TAGS_REGEX = new RegExp ( / ( < ( [ ^ > ] + ) > ) / gi) ;
146157
147158 useEffect ( ( ) => {
148- console . log ( "useEffect from news-feed " , props ) ;
149- setEvents ( props ?. allEvents ) ;
150- setAllProjects ( props ?. allProjects ) ;
151- setAllPosts ( props ?. allPosts ) ;
152- } , [ props . allEvents , props . allPosts , props . allProjects , props ] ) ;
159+ const { allEvents, allProjects, allPosts } = props ;
160+
161+ setEvents ( allEvents ) ;
162+ setAllProjects ( allProjects ) ;
163+ setAllPosts ( allPosts ) ;
164+ } , [
165+ props . allEvents ,
166+ props . allPosts ,
167+ props . allProjects ,
168+ props . singlePost ,
169+ props ,
170+ ] ) ;
153171
154172 useEffect ( ( ) => {
155173 window . addEventListener ( "scroll" , ( ) => {
@@ -169,11 +187,14 @@ function NewsFeed(props) {
169187 // second("s");
170188 } ;
171189
172- let handleShow = ( modalName ) => {
190+ let handleShow = ( modalName , post ) => {
173191 if ( modalName === "project" ) {
174192 setShowProject ( true ) ;
175193 } else if ( modalName === "event" ) {
176194 setShowEvent ( true ) ;
195+ } else if ( modalName === "edit" ) {
196+ setPostInfo ( post ) ;
197+ setShowEditPost ( true ) ;
177198 }
178199 } ;
179200
@@ -182,6 +203,12 @@ function NewsFeed(props) {
182203 setShowProject ( false ) ;
183204 } else if ( modalName === "event" ) {
184205 setShowEvent ( false ) ;
206+ } else if ( modalName === "edit" ) {
207+ setPostInfo ( { } ) ;
208+ setShowEditPost ( false ) ;
209+ } else if ( modalName === "delete" ) {
210+ setPostInfo ( { } ) ;
211+ setShowDeletePost ( false ) ;
185212 }
186213 } ;
187214
@@ -228,6 +255,26 @@ function NewsFeed(props) {
228255 setShowReactions ( false ) ;
229256 } ;
230257
258+ let showDeletePostModal = ( postId ) => {
259+ setDeletePostId ( postId ) ;
260+ setShowDeletePost ( true ) ;
261+ } ;
262+
263+ let hideDeletePostModal = ( ) => {
264+ setDeletePostId ( "" ) ;
265+ setShowDeletePost ( false ) ;
266+ } ;
267+
268+ let showSharePostModal = ( content ) => {
269+ setSharableContent ( content ) ;
270+ setShowSharePost ( true ) ;
271+ } ;
272+
273+ let hideSharePostModal = ( ) => {
274+ setSharableContent ( "" ) ;
275+ setShowSharePost ( false ) ;
276+ } ;
277+
231278 let onPinPost = ( postId ) => {
232279 console . log ( "Pinning post " , postId ) ;
233280 props . pinPost ( postId ) ;
@@ -273,7 +320,7 @@ function NewsFeed(props) {
273320 votes . donut ?. user . length ;
274321
275322 return (
276- < div className = "grid" key = { post . _id } >
323+ < div className = "grid" key = { post ? ._id } >
277324 < Paper elevation = { 1 } className = { classes . paper } >
278325 < Card className = { classes . root } variant = "outlined" >
279326 < List className = { classes . listStyle } >
@@ -302,11 +349,45 @@ function NewsFeed(props) {
302349 >
303350 < FaEllipsisH />
304351 </ Dropdown . Toggle >
305- < Dropdown . Menu >
306- < Dropdown . Item eventKey = "1" > Edit</ Dropdown . Item >
307- < Dropdown . Item eventKey = "2" > Share</ Dropdown . Item >
308- < Dropdown . Item eventKey = "3" > Delete</ Dropdown . Item >
309- </ Dropdown . Menu >
352+ { post ?. userId ?. _id === userId ? (
353+ < Dropdown . Menu >
354+ < Dropdown . Item
355+ eventKey = "1"
356+ onClick = { ( ) => handleShow ( "edit" , post ) }
357+ >
358+ Edit
359+ </ Dropdown . Item >
360+ < Dropdown . Item
361+ eventKey = "2"
362+ onClick = { ( ) =>
363+ showSharePostModal (
364+ post ?. content . replace ( FILTER_TAGS_REGEX , "" )
365+ )
366+ }
367+ >
368+ Share
369+ </ Dropdown . Item >
370+ < Dropdown . Item
371+ eventKey = "3"
372+ onClick = { ( ) => showDeletePostModal ( post . _id ) }
373+ >
374+ Delete
375+ </ Dropdown . Item >
376+ </ Dropdown . Menu >
377+ ) : (
378+ < Dropdown . Menu >
379+ < Dropdown . Item
380+ eventKey = "2"
381+ onClick = { ( ) =>
382+ showSharePostModal (
383+ post ?. content . replace ( / ( < ( [ ^ > ] + ) > ) / gi, "" )
384+ )
385+ }
386+ >
387+ Share
388+ </ Dropdown . Item >
389+ </ Dropdown . Menu >
390+ ) }
310391 </ Dropdown >
311392 </ ListItem >
312393 < div className = "post-details2" > { parse ( post ?. content ) } </ div >
@@ -563,6 +644,27 @@ function NewsFeed(props) {
563644 handleClose ( "project" ) ;
564645 } }
565646 />
647+ < EditPostModal
648+ show = { editPost }
649+ handleClose = { ( ) => {
650+ handleClose ( "edit" ) ;
651+ } }
652+ postInfo = { postInfo }
653+ />
654+ < DeletePostModal
655+ show = { deletePost }
656+ handleClose = { ( ) => {
657+ hideDeletePostModal ( ) ;
658+ } }
659+ postId = { deletePostId }
660+ />
661+ < SharePostModal
662+ show = { sharePost }
663+ handleClose = { ( ) => {
664+ hideSharePostModal ( ) ;
665+ } }
666+ sharableContent = { shareableContent }
667+ />
566668 </ div >
567669 </ div >
568670 < div className = "news__feed__container" >
0 commit comments