Skip to content
Snippets Groups Projects
Trainees.js 3.63 KiB
Newer Older
  • Learn to ignore specific revisions
  • import React, { Component } from 'react';
    
    import { Container, Table, Icon, Responsive } from 'semantic-ui-react';
    
    import { connect } from 'react-redux';
    
    Chif Gergő's avatar
    Chif Gergő committed
    import { getTrainees, getStaffEvents } from '../../actions/statistics';
    
    
    class Trainees extends Component {
      componentWillMount() {
        this.props.getTrainees();
    
    Chif Gergő's avatar
    Chif Gergő committed
        this.props.getStaffEvents();
    
    Rafael László's avatar
    Rafael László committed
      // Number of visited events
    
      VisitedStatusNumber(trainee) {
        return (this.props.events.filter((event) => {
          return event.visitors.includes(trainee.id)
        })).length;
      }
    
    
    Rafael László's avatar
    Rafael László committed
      // Every event with visit status in table cells
    
      renderVisitedStatus(trainee) {
        return (this.props.events.map((event) => {
          if (event.visitors.includes(trainee.id)) {
            return (
    
              <Table.Cell textAlign='center'>
    
                <Icon color='green' name='checkmark' />
    
    Rafael László's avatar
    Rafael László committed
              </Table.Cell>
            );
    
            <Table.Cell textAlign='center'>
    
              <Icon color='red' name='cancel' />
    
    Rafael László's avatar
    Rafael László committed
            </Table.Cell>
          );
    
    Rafael László's avatar
    Rafael László committed
      // Every event rendered
    
      renderTraineesWithEvents() {
    
        return this.props.trainees.map((trainee) =>
        { return (
          <Table.Row>
    
            <Table.Cell textAlign='center'>
    
            </Table.Cell>
    
            {this.renderVisitedStatus(trainee)}
    
    Rafael László's avatar
    Rafael László committed
      // Only visit number rendered
      renderTraineesWithVisitNum() {
        return this.props.trainees.map((trainee) =>{ 
          return (
            <Table.Row textAlign='center'>
              <Table.Cell>
                {trainee.full_name}
              </Table.Cell>
              <Table.Cell textAlign='center'>
                {`${this.VisitedStatusNumber(trainee)} / ${this.props.events.length}`}
              </Table.Cell>
            </Table.Row>
          );
    
    Rafael László's avatar
    Rafael László committed
      // Column for each event
      renderTableHeaderEvents() {
        return (this.props.events.map(event => {
          return (<Table.HeaderCell textAlign='center'>
    
    Rafael László's avatar
    Rafael László committed
          </Table.HeaderCell>
          )
        }));
    
      render() {
        return (
          <Container textAlign='center'>
    
    Rafael László's avatar
    Rafael László committed
            {/* Rendered on larger screens */}
    
            <Responsive minWidth={600} >
              <Table color='blue' unstackable celled selectable compact>
                <Table.Header>
                  <Table.Row>
    
    Rafael László's avatar
    Rafael László committed
                    <Table.HeaderCell textAlign='center'>
                      Képződők
                    </Table.HeaderCell>
                    { this.renderTableHeaderEvents() }
    
                  </Table.Row>
                </Table.Header>
                <Table.Body>
    
    Rafael László's avatar
    Rafael László committed
                  {this.props.trainees ? 
                    this.renderTraineesWithEvents() 
                  : 
                    'Nincsenek képződők'
                  }
    
                </Table.Body>
              </Table>
            </Responsive>
    
    Rafael László's avatar
    Rafael László committed
            {/* Rendered on mobile */}
    
            <Responsive maxWidth={599} >
              <Table color='blue' unstackable celled selectable compact>
                <Table.Header>
                  <Table.Row>
    
    Rafael László's avatar
    Rafael László committed
                    <Table.HeaderCell textAlign='center'>
                      Képződők
                    </Table.HeaderCell>
    
                    <Table.HeaderCell textAlign='center'>
                      Részvételi arány
                    </Table.HeaderCell>
                  </Table.Row>
                </Table.Header>
                <Table.Body>
    
    Rafael László's avatar
    Rafael László committed
                  {this.props.trainees ? 
                    this.renderTraineesWithVisitNum() 
                  : 
                    'Nincsenek képződők'
                  }
    
                </Table.Body>
              </Table>
            </Responsive>
    
    const mapStateToProps = ({ trainees: { trainees }, events: { events }, user }) => ({ trainees, events, user });
    
    Chif Gergő's avatar
    Chif Gergő committed
    export default connect(mapStateToProps, { getTrainees, getStaffEvents })(Trainees);