Guest User

Untitled

a guest
Nov 24th, 2017
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.86 KB | None | 0 0
  1. import React from 'react';
  2. import { Input } from 'react-bootstrap';
  3. import FeedItem from './FeedItem.jsx';
  4. import UploadMedia from './UploadMedia.jsx';
  5. import TwitterFeed from './TwitterFeed.jsx';
  6. import axios from 'axios';
  7. import _ from 'lodash';
  8. import styled from 'styled-components';
  9. import { DayOfContentWrapper, DayOfTitle, FeedWrapper, Load, TextInput } from './StyledComponents.jsx';
  10. import { Textfit } from 'react-textfit';
  11.  
  12. class DayOfFeed extends React.Component {
  13. constructor(props) {
  14. super(props);
  15. this.state = {
  16. text: '',
  17. url: '',
  18. credibility: '' || 0,
  19. type: 'MESSAGE',
  20. pageNumber: 1,
  21. feedItemCount: 0,
  22. posts: [],
  23. wantMoreItems: false
  24. };
  25. this.handlePost = this.handlePost.bind(this);
  26. this.handleChange = this.handleChange.bind(this);
  27. this.handleCredChange = this.handleCredChange.bind(this);
  28. }
  29.  
  30. componentDidMount() {
  31. this.handleLoadItems(this.state.pageNumber++);
  32. var self = this;
  33. this.props.client.on('newFeedItemFromServer', insertedPost => {
  34. this.props.receiveFeedItem(insertedPost);
  35. let newState = this.state.posts;
  36. newState.unshift(insertedPost);
  37. self.setState({posts: newState});
  38. });
  39.  
  40. this.props.client.on('feedItemVoteNotPermitted', (error) => {
  41. this.props.receiveFeedItemVoteError(error);
  42. });
  43. }
  44.  
  45. handleLoadItems(pageNumber) {
  46. axios.get('/api/feed/event', {
  47. params: {
  48. eventId: this.props.events.activeEvent,
  49. pageNumber
  50. }
  51. }).then(feedItems => {
  52. this.setState({posts: this.state.posts.concat(feedItems.data.feedItems)});
  53. });
  54. }
  55.  
  56. handlePost(e) {
  57. e.preventDefault();
  58. let newPost = {
  59. eventId: this.props.events.activeEvent,
  60. type: this.state.type,
  61. text: this.state.text,
  62. url: this.state.url,
  63. userId: this.props.user.userId,
  64. username: this.props.user.username,
  65. credibility: this.state.credibility,
  66. time: Date.now()
  67. };
  68. this.props.client.emit('newFeedItem', newPost);
  69. this.setState({
  70. text: '',
  71. url: '',
  72. type: ''
  73. });
  74. }
  75.  
  76. handleChange(e) {
  77. this.setState({text: e.target.value });
  78. }
  79.  
  80. handleCredChange(feedItemVote) {
  81. this.props.client.emit('voteFeedItem', feedItemVote);
  82. }
  83.  
  84. render() {
  85. console.log('')
  86. const feedItems = this.props.feeds.feedItems;
  87. return (
  88. <div>
  89. <DayOfContentWrapper>
  90. <DayOfTitle><Textfit>{this.props.event.name}</Textfit></DayOfTitle>
  91. <FeedWrapper>
  92. <div>
  93.  
  94. <div style={{display: 'flex', flexDirection: 'row'}}>
  95. <form onSubmit={this.handlePost}>
  96. <TextInput
  97. type="textarea"
  98. placeholder="What's happening at the protest?"
  99. value={this.state.text}
  100. onChange={this.handleChange}
  101. />
  102. </form>
  103. <UploadMedia {...this.props}/>
  104. </div>
  105.  
  106. {
  107. this.state.posts.map(item =>
  108. <FeedItem
  109. username={item.username}
  110. text={item.text}
  111. key={item.id}
  112. username={item.username}
  113. text={item.text}
  114. time={item.time}
  115. userId={this.props.user.userId}
  116. itemId={item.id}
  117. credibility={item.credibility}
  118. handleCredVote={this.handleCredChange}
  119. receiveVote={this.props.receiveFeedItemVote}
  120. url={item.url}
  121. type={item.type}
  122. errorMsg={item.errorMsg}
  123. client={this.props.client}/>
  124. )
  125. }
  126. {
  127. feedItems.length < 10 ?
  128. <div></div> :
  129. <Load onClick={() => this.handleLoadItems(this.state.pageNumber++)}>Load More Posts</Load>
  130. }
  131. </div>
  132. </FeedWrapper>
  133. </DayOfContentWrapper>
  134. </div>
  135. );
  136. }
  137. }
  138.  
  139. export default DayOfFeed;
Add Comment
Please, Sign In to add comment