studpad/studpad

View on GitHub
app/assets/javascripts/components/follow_box.js.jsx

Summary

Maintainability
C
7 hrs
Test Coverage
const FollowBox = React.createClass({
  getInitialState(){
    return {
      visible: true,
      users: this.props.users
    };
  },
  hide(){
    var selected_users = $.grep(this.state.users, function(user){
        return user.checked;
    })
    var selected_user_ids = selected_users.map(function(user) {
      return user.id;
    })
    console.log(selected_user_ids);
    this.setState({visible: false});
    $.ajax({
      url: this.props.path,
      //dataType: 'JSON',
      method: 'POST',
      data: {user_ids: selected_user_ids},
      cache: false,
      success: function(data) {
        //reload current page
        window.top.location = window.top.location;
      },
      error: function(xhr, status, err) {
        CE("PostModalForm::onChangeLink", xhr, status, err);
      }
    });
  },
  togleUser(user_id){
    users = this.state.users
    for(var i in users)
      if (users[i].id == user_id)
        users[i].checked = !users[i].checked;
    this.setState({users: users});
  },
  render(){
    var self = this;
    var checked_count = $.grep(this.state.users, function(user){
        return user.checked;
      }).length;
    disabled = checked_count < 1;
    var users_list = this.state.users.map(function(user){
      var button, disabled;
      if (user.checked) {
        button =(
          <button
            onClick={self.togleUser.bind(self, user.id)}
            className='btn btn-primary btn-st btn-reject-follow'>
            Не читать
          </button>
        );
      } else {
        button =(
          <button
            onClick={self.togleUser.bind(self, user.id)}
            className='btn btn-info btn-st btn-reject-follow'>
            Читать
          </button>
        );
      };
      return (
        <div key={user.id}>
          <div className="follower-user-button">
            <div className='follower-user'>
              <div className="preview-object">
                  <div className="preview-object-avatar" style={{
                    background: "url(" + user.avatar + ") no-repeat",
                    backgroundSize: 'cover'
                  }}>
                  </div>
                  <div className="preview-object-info">
                    <div className="object-text">
                      <div className="object-maintext">
                        {user.name}
                      </div>
                    </div>
                  </div>
              </div>
              <div className="clearboth">
              </div>
            </div>
            <div className = 'follower-button'>
              {button}
            </div>
          </div>
          <div className="clearboth">
          </div>
        </div>
      );
    });

    return (
      <ReactBootstrap.Modal
        dialogClassName='modal-dialog modal-dialog-follow-recommend'
        onHide={this.hide}
        backdrop='static'
        show={this.state.visible}>

      <div className="modal-content">
        <div className="modal-header">
          <h4 className="modal-title" id="myModalLabel">Читайте тех, кто Вам по душе!</h4>
        </div>
        <div className="modal-body">
          <div id="mywrapper">
            Мы отобрали для Вас самых интересных блогеров. Выберите для себя 5 наиболее понравившихся и начните читать их прямо сейчас!
          </div>
          <div className="usual-list border-b-radius">
            <div className= 'followers'>
              {users_list}
            </div>
          </div>
        </div>
        <div className="modal-footer">
          <button
          disabled={disabled}
          onClick={this.hide}
          className="btn btn-primary btn-st">Готово!</button>
        </div>
      </div>

      </ReactBootstrap.Modal>
    );
  }
})