Advertisement
Guest User

Untitled

a guest
Mar 25th, 2019
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.41 KB | None | 0 0
  1. import React, {Component} from 'react';
  2.  
  3. class BaseModal extends Component {
  4.  
  5. constructor(props) {
  6. super(props);
  7.  
  8. this.setWrapperRef = this.setWrapperRef.bind(this);
  9. this.handleClickOutside = this.handleClickOutside.bind(this);
  10. }
  11.  
  12. componentDidMount() {
  13. document.addEventListener('mousedown', this.handleClickOutside);
  14. }
  15.  
  16. componentWillUnmount() {
  17. document.removeEventListener('mousedown', this.handleClickOutside);
  18. }
  19.  
  20. setWrapperRef(node) {
  21. this.wrapperRef = node;
  22. }
  23.  
  24. handleClickOutside(event) {
  25. if (this.wrapperRef && !this.wrapperRef.contains(event.target)) {
  26. this.setState({isOpened: false});
  27. }
  28. }
  29.  
  30. }
  31.  
  32. class Popup extends BaseModal {
  33.  
  34. constructor(props) {
  35. super(props);
  36.  
  37. this.state = {
  38. isOpened: false
  39. };
  40. this._toggleButton = this._toggleButton.bind(this)
  41. }
  42.  
  43. _toggleButton() {
  44. this.setState({isOpened: !this.state.isOpened});
  45. }
  46.  
  47. render() {
  48. const isOpened = this.state.isOpened ? '' : 'hide';
  49.  
  50. return (
  51. <div ref={this.setWrapperRef}>
  52. <button onClick={this._toggleButton}>Toggle modal</button>
  53. <div className={'modal modal-extended ' + isOpened}>
  54. <h2>Opened class based (extended) modal</h2>
  55. </div>
  56. </div>
  57. );
  58. }
  59.  
  60. }
  61.  
  62. export default Popup;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement