Advertisement
Guest User

Untitled

a guest
Dec 2nd, 2016
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.37 KB | None | 0 0
  1. import React, {PropTypes} from 'react';
  2. import {connect} from 'react-redux';
  3. import {bindActionCreators} from 'redux';
  4. import { Link } from 'react-router';
  5. import * as d3 from 'd3';
  6. import * as eventActions from '../actions/eventActions';
  7.  
  8. class EventsPage extends React.Component {
  9. tableRows() {
  10. return this.props.events.map( (event, i) => {
  11. let session = this.props.sessions.filter(session => {
  12. return event.relationships.session.data.id === session.id;
  13. });
  14. let objectLink = `${this.domain}/${event.attributes.data.source.resource_key}/#!asset/${event.attributes.data.resource_key}`;
  15. let rowClass = `Rtable Rtable--5cols ${(i % 2 === 0) ? 'even' : 'odd'}`;
  16. let mailToLink = `mailto:${session[0].attributes.user.email}`;
  17. let location = `${session[0].attributes.location.city}, ${session[0].attributes.location.region_name} ${session[0].attributes.location.country_code}`;
  18.  
  19. return (
  20. <div key={event.id} className={rowClass}>
  21. <div className="Rtable-cell">{new Date(event.attributes.created_at).toDateString()}</div>
  22. <div className="Rtable-cell">{event.attributes.data.action_name}</div>
  23. <div className="Rtable-cell">
  24. <Link to={objectLink}>
  25. {event.attributes.data.resource_type}
  26. </Link>
  27. </div>
  28. <div className="Rtable-cell">
  29. <a href={mailToLink}>
  30. {session[0].attributes.user.first_name} {session[0].attributes.user.last_name}
  31. </a>
  32. </div>
  33. <div className="Rtable-cell">{location}</div>
  34. </div>
  35. );
  36. });
  37. }
  38.  
  39. handleSort() {
  40. this.props.dispatch(eventActions.updateSortState( !this.props.ascending ));
  41. }
  42.  
  43. render() {
  44. const { brandfolderDetails } = this.props;
  45. let dateClass=`float-right fa fa-${this.props.ascending ? 'caret-down' : 'caret-up'}`;
  46.  
  47. return (
  48. <div className="container main-content-container">
  49. <div className="Rtable Rtable--5cols" ref="eventsFeedHeader" style={this.tableHeadStyle} >
  50. <div className="Rtable-cell header active"
  51. onClick={this.handleSort.bind(this)}>
  52. <h2>Date <i className={dateClass}/> </h2>
  53. </div>
  54. <div className="Rtable-cell header"><h2>Action</h2></div>
  55. <div className="Rtable-cell header"><h2>Resource</h2></div>
  56. <div className="Rtable-cell header"><h2>User</h2></div>
  57. <div className="Rtable-cell header"><h2>location</h2></div>
  58. </div>
  59. <div className="table-wrap" style={this.tableStyle}>
  60. {this.tableRows()}
  61. </div>
  62. </div>
  63. );
  64. }
  65. }
  66.  
  67. EventsPage.propTypes = {
  68. events: PropTypes.array.isRequired,
  69. sessions: PropTypes.array.isRequired,
  70. updateSortState: PropTypes.func,
  71. ascending: PropTypes.bool,
  72. dispatch: PropTypes.func.isRequired
  73. };
  74.  
  75. function mapStateToProps(state) {
  76. let eventsObject = state.events;
  77. let events;
  78. if(state.events.ascending) {
  79. events = eventsObject.events.sort(function(x, y){
  80. return d3.ascending(x.attributes.created_at, y.attributes.created_at);
  81. });
  82. } else {
  83. events = eventsObject.events.sort(function(x, y){
  84. return d3.descending(x.attributes.created_at, y.attributes.created_at);
  85. });
  86. }
  87. return {
  88. events: events,
  89. ascending: state.events.ascending,
  90. sessions: state.events.sessions || []
  91. };
  92. }
  93.  
  94. export default connect(
  95. mapStateToProps
  96. )(EventsPage);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement