Advertisement
Guest User

Untitled

a guest
Jun 24th, 2019
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.09 KB | None | 0 0
  1. import React, { Component } from 'react';
  2. import Moment from 'react-moment';
  3. import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';
  4. import {Button} from 'react-bootstrap';
  5.  
  6.  
  7. class Messages extends Component {
  8. constructor (props) {
  9. super(props)
  10. this.state = {
  11. allMessages: [],
  12. displayedMessages: [],
  13. newMessageText: ''
  14. }
  15. this.messagesRef = this.props.firebase.database().ref('messages')
  16. }
  17.  
  18. componentDidMount() {
  19. this.messagesRef.on('child_added', snapshot => {
  20. const message = snapshot.val();
  21. message.key = snapshot.key;
  22. this.setState({ allMessages: this.state.allMessages.concat( message ) }, () => {
  23. this.showMessages( this.props.activeRoom )
  24. });
  25. });
  26. this.messagesRef.on('child_removed', snapshot => {
  27. this.setState({ allMessages: this.state.allMessages.filter( message => message.key !== snapshot.key ) }, () => {
  28. this.showMessages( this.props.activeRoom )
  29. });
  30. });
  31. }
  32.  
  33. componentWillReceiveProps(nextProps) {
  34. this.showMessages( nextProps.activeRoom );
  35. }
  36.  
  37. createMessage(newMessageText) {
  38. this.messagesRef.push({
  39. username: this.props.user ? this.props.user.displayName : 'Guest',
  40. content: newMessageText,
  41. sentAt: this.props.firebase.database.ServerValue.TIMESTAMP,
  42. roomId: this.props.activeRoom.key,
  43. });
  44. this.setState({ newMessageText: '' });
  45. }
  46.  
  47.  
  48. handleChange(e) {
  49. e.preventDefault();
  50. this.setState({newMessageText: e.target.value });
  51. }
  52.  
  53. removeMessage(activeRoom) {
  54. this.messagesRef.child(activeRoom.key).remove();
  55. }
  56.  
  57. showMessages(activeRoom) {
  58. this.setState({ displayedMessages: this.state.allMessages.filter( message => message.roomId === activeRoom.key ) });
  59. }
  60.  
  61. render() {
  62. return (
  63. <main id="messages-component">
  64. <h2 className="room-name">{ this.props.activeRoom ? this.props.activeRoom.name : '' }</h2>
  65. <ul id="message-list">
  66. {this.state.displayedMessages.map( message =>
  67. <li className="message-info" key={message.key}>
  68. <div className="username">
  69. { message.username }
  70. </div>
  71. <div className="content">
  72. { message.content }
  73. </div>
  74. <Moment element="span" format="MM/DD/YY hh:mm A" className="sent-at">
  75. { message.sentAt }
  76. </Moment>
  77. <Button type="button" className="btn-remove-msg" onClick={() => this.removeMessage(message)} >
  78. <FontAwesomeIcon icon='minus-circle'/>
  79. </Button>
  80. </li>
  81. )}
  82. </ul>
  83. <form id="create-message" onSubmit={ (e) => { e.preventDefault(); this.createMessage(this.state.newMessageText) } }>
  84. <input type="text" value={ this.state.newMessageText } onChange={ this.handleChange.bind(this) } name="newMessageText" placeholder="Write your message here..." />
  85. <input type="submit" value="Send"/>
  86. </form>
  87. </main>
  88. );
  89. }
  90. }
  91.  
  92. export default Messages;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement