UNPKG

instantjob-recruiter-client

Version:

a set of tools for creating an instantjob recruiter react client

1,386 lines 63.7 kB
'use strict';

Object.defineProperty(exports, "__esModule", {
  value: true
});

var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');

var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);

var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');

var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);

var _promise = require('babel-runtime/core-js/promise');

var _promise2 = _interopRequireDefault(_promise);

var _defineProperty2 = require('babel-runtime/helpers/defineProperty');

var _defineProperty3 = _interopRequireDefault(_defineProperty2);

var _keys = require('babel-runtime/core-js/object/keys');

var _keys2 = _interopRequireDefault(_keys);

var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');

var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);

var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');

var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);

var _createClass2 = require('babel-runtime/helpers/createClass');

var _createClass3 = _interopRequireDefault(_createClass2);

var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');

var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);

var _inherits2 = require('babel-runtime/helpers/inherits');

var _inherits3 = _interopRequireDefault(_inherits2);

var _extends4 = require('babel-runtime/helpers/extends');

var _extends5 = _interopRequireDefault(_extends4);

var _react = require('react');

var _react2 = _interopRequireDefault(_react);

var _reactRedux = require('react-redux');

var _bind = require('classnames/bind');

var _bind2 = _interopRequireDefault(_bind);

var _md = require('react-icons/lib/md');

var _menu = require('./menu');

var _menu2 = _interopRequireDefault(_menu);

var _button = require('components/utils/button');

var _button2 = _interopRequireDefault(_button);

var _user_table = require('./user_table');

var _user_table2 = _interopRequireDefault(_user_table);

var _field_categories_selector = require('./field_categories_selector');

var _field_categories_selector2 = _interopRequireDefault(_field_categories_selector);

var _utilities = require('../common/utilities');

var _request = require('../common/request');

var _request2 = _interopRequireDefault(_request);

var _store = require('../common/store');

var _store2 = _interopRequireDefault(_store);

var _constants = require('../common/constants');

var _fields = require('../common/fields');

var _users = require('../common/users');

var _display = require('../actions/display');

var _users2 = require('../actions/users');

var _fields2 = require('../actions/fields');

var _base = require('actions/base');

var _users3 = require('../selectors/users');

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

var cx = _bind2.default.bind(require('../styles/upload_results.scss'));

var get_uploaded_users = function get_uploaded_users(upload_users, props_users) {
  return (0, _utilities.map_hash)(upload_users, function (user) {
    return (0, _extends5.default)({}, user, {
      status: user.existing ? (0, _users.get_user_status)(props_users[user.existing]) : (0, _users.make_user_status)('new')
    });
  });
};

var UploadResultsStatic = function (_Component) {
  (0, _inherits3.default)(UploadResultsStatic, _Component);

  function UploadResultsStatic(props) {
    (0, _classCallCheck3.default)(this, UploadResultsStatic);

    var _this = (0, _possibleConstructorReturn3.default)(this, (UploadResultsStatic.__proto__ || (0, _getPrototypeOf2.default)(UploadResultsStatic)).call(this, props));

    _this.state = {
      active_field_type: 'summary',
      active_field: null,
      messages: {
        summary: [],
        invitations: [],
        instant_job_field: {},
        agency_field: {}
      },
      invitations: true,
      importing: {
        instant_job_field: {},
        agency_field: {}
      },
      imported: {
        instant_job_field: {},
        agency_field: {}
      },
      statistics: 'old'
    };
    _this.render_page = _this.render_page.bind(_this);
    _this.send_invitations = _this.send_invitations.bind(_this);
    _this.import_users = _this.import_users.bind(_this);
    _this.import_field = _this.import_field.bind(_this);
    _this.render_navigation = _this.render_navigation.bind(_this);
    return _this;
  }

  (0, _createClass3.default)(UploadResultsStatic, [{
    key: 'componentWillUnmount',
    value: function componentWillUnmount() {
      this.mounted = false;
    }
  }, {
    key: 'componentDidMount',
    value: function componentDidMount() {
      var _this2 = this;

      this.mounted = true;
      var summary = [],
          invitations = [],
          instant_job_field = {},
          agency_field = {};
      var _props$upload_results = this.props.upload_results,
          users = _props$upload_results.users,
          fields = _props$upload_results.fields,
          values = _props$upload_results.values,
          instant_job_fields_present = _props$upload_results.instant_job_fields_present,
          new_users_count = _props$upload_results.new_users_count,
          old_users_count = _props$upload_results.old_users_count,
          duplicate_users_count = _props$upload_results.duplicate_users_count,
          invalid_emails = _props$upload_results.invalid_emails;

      if (new_users_count > 0) {
        this.setState({ statistics: 'new' });
      }
      var new_field_names = (0, _keys2.default)(fields).map(function (id) {
        return fields[id];
      }).filter(function (field) {
        return !field.existing;
      }).map(function (field) {
        return field.name;
      });
      var total_fields_count = (0, _keys2.default)(fields).length + (0, _utilities.array_from_set)(instant_job_fields_present).length;
      summary.new_fields = {
        new_field_names: new_field_names,
        total_fields_count: total_fields_count,
        component: MessageFieldsCount
      };
      if (duplicate_users_count > 0) {
        summary.duplicate_users = {
          duplicate_users_count: duplicate_users_count,
          component: MessageDuplicateUsers
        };
      }
      if (invalid_emails.length > 0) {
        summary.duplicate_users = {
          invalid_emails: invalid_emails,
          component: MessageInvalidEmails
        };
      }
      if (new_users_count == 0 && old_users_count == 0) {
        summary.empty_file = {
          component: MessageEmptyFile
        };
      }
      if (new_users_count > 0) {
        invitations.new_users = {
          validated: false,
          all_users: (0, _keys2.default)(users).length,
          new_users: new_users_count,
          component: MessageInviteUsers,
          onClick: function onClick() {
            return _this2.setState((0, _utilities.deep_merge)(_this2.state, {
              messages: { invitations: { new_users: { validated: !_this2.state.messages.invitations.new_users.validated } } }
            }));
          }
        };
      }
      var absent_fields = (0, _utilities.array_from_hash)((0, _utilities.filter_hash)((0, _utilities.group_hash_by_value)(this.props.instant_job_fields), function (labels) {
        return (0, _utilities.for_all)(labels, function (label) {
          return !instant_job_fields_present[label];
        });
      })).map(function (labels) {
        return labels[0];
      });
      if (absent_fields.length > 0) {
        invitations.absent_fields = {
          validated: false,
          absent_fields: absent_fields,
          component: MessageAbsentFields,
          onClick: function onClick() {
            return _this2.setState((0, _utilities.deep_merge)(_this2.state, {
              messages: { invitations: { absent_fields: { validated: !_this2.state.messages.invitations.absent_fields.validated } } }
            }));
          }
        };
      }
      (0, _utilities.array_from_set)(instant_job_fields_present).forEach(function (field_label) {
        var field_name = _this2.props.instant_job_fields[field_label];
        if (new_users_count > 0) {
          instant_job_field[field_name] = (0, _utilities.deep_merge)(instant_job_field[field_name], { new: { valid: {
                component: MessageInstantJobFieldNew,
                informational: true
              } } });
        }
        if (old_users_count > 0) {
          var conflicting_users = (0, _utilities.array_from_hash)(users).filter(function (user) {
            if (user.existing) {
              return (user[field_name] || "") != (_this2.props.users[user.existing][field_name] || "");
            } else {
              return false;
            }
          });
          var conflicting_users_with_app_count = conflicting_users.filter(function (user) {
            return _this2.props.users[user.existing].app_name;
          }).length;
          var conflicting_users_without_app_count = conflicting_users.length - conflicting_users_with_app_count;
          if (conflicting_users.length > 0) {
            if (conflicting_users_without_app_count > 0) {
              instant_job_field[field_name] = (0, _utilities.deep_merge)(instant_job_field[field_name], { old: { conflict: {
                    component: MessageFieldConflict,
                    conflicting_users_count: conflicting_users_without_app_count,
                    selected: null,
                    exists_new_user: false,
                    on_select: function on_select(selected) {
                      return _this2.setState((0, _utilities.deep_merge)(_this2.state, {
                        messages: { instant_job_field: (0, _defineProperty3.default)({}, field_name, { old: { conflict: { selected: selected } } }) }
                      }));
                    }
                  } } });
            }
            if (conflicting_users_with_app_count > 0) {
              instant_job_field[field_name] = (0, _utilities.deep_merge)(instant_job_field[field_name], { old: { conflict_with_app: {
                    component: MessageInstantJobAppUserConflict,
                    conflicting_users_count: conflicting_users_with_app_count,
                    informational: true
                  } } });
            }
          } else {
            instant_job_field[field_name] = (0, _utilities.deep_merge)(instant_job_field[field_name], { old: { identical: {
                  component: MessageFieldIdentical,
                  informational: true
                } } });
          }
        }
      });
      (0, _utilities.array_from_hash)(fields).forEach(function (field) {
        if (field.existing) {
          var conflicting_users_count = void 0,
              new_values_old_users = void 0;
          var field_values = (0, _utilities.array_from_set)(field.values).map(function (id) {
            return values[id];
          });
          switch (field.category) {
            case 'non_exclusive':
              if (new_users_count > 0) {
                var new_values_new_users = field_values.filter(function (value) {
                  return !value.existing && value.created_by_new_users;
                }).map(function (value) {
                  return value.name;
                });
                if (new_values_new_users.length > 0) {
                  agency_field[field.id] = (0, _utilities.deep_merge)(agency_field[field.id], { new: { new_values_new_users: {
                        component: MessageNewValuesNewUsers,
                        new_field_values: new_values_new_users,
                        new_users_count: new_users_count,
                        validated: false,
                        onClick: function onClick() {
                          return _this2.setState((0, _utilities.deep_merge)(_this2.state, {
                            messages: { agency_field: (0, _defineProperty3.default)({}, field.id, { new: { new_values_new_users: { validated: !_this2.state.messages.agency_field[field.id].new.new_values_new_users.validated } } }) }
                          }));
                        }
                      } } });
                } else {
                  agency_field[field.id] = (0, _utilities.deep_merge)(agency_field[field.id], { new: { ready: {
                        component: MessageAgencyFieldReady,
                        validated: true
                      } } });
                }
              }
              conflicting_users_count = (0, _utilities.array_from_hash)(users).filter(function (user) {
                return user.existing && !(0, _utilities.for_all)(field_values, function (value) {
                  return !(!value.existing && value.entity_ids[user.id] || value.mismatching_users[user.id]);
                });
              }).length;
              new_values_old_users = field_values.filter(function (value) {
                return value.created_by_old_users;
              }).map(function (value) {
                return value.name;
              });
              break;
            case 'exclusive':
              if (new_users_count > 0) {
                var _new_values_new_users = field_values.filter(function (value) {
                  return !value.existing && value.created_by_new_users;
                }).map(function (value) {
                  return value.name;
                });
                if (_new_values_new_users.length > 0) {
                  agency_field[field.id] = (0, _utilities.deep_merge)(agency_field[field.id], { new: { new_values_new_users: {
                        component: MessageNewValuesNewUsers,
                        new_field_values: _new_values_new_users,
                        new_users_count: new_users_count,
                        validated: false,
                        onClick: function onClick() {
                          return _this2.setState((0, _utilities.deep_merge)(_this2.state, {
                            messages: { agency_field: (0, _defineProperty3.default)({}, field.id, { new: { new_values_new_users: { validated: !_this2.state.messages.agency_field[field.id].new.new_values_new_users.validated } } }) }
                          }));
                        }
                      } } });
                } else {
                  agency_field[field.id] = (0, _utilities.deep_merge)(agency_field[field.id], { new: { ready: {
                        component: MessageAgencyFieldReady,
                        validated: true
                      } } });
                }
              }
              conflicting_users_count = (0, _utilities.array_from_hash)(users).filter(function (user) {
                return user.existing && field.mismatching_user_ids[user.id];
              }).length;
              new_values_old_users = field_values.filter(function (value) {
                return value.created_by_old_users;
              }).map(function (value) {
                return value.name;
              });
              break;
            case "comment":
              if (new_users_count > 0) {
                agency_field[field.id] = (0, _utilities.deep_merge)(agency_field[field.id], { new: { ready: {
                      component: MessageAgencyFieldReady,
                      validated: true
                    } } });
              }
              conflicting_users_count = (0, _utilities.array_from_hash)(users).filter(function (user) {
                return field.conflicting_comments[user.id];
              }).length;
              new_values_old_users = [];
              break;
            default:
          }
          if (old_users_count > 0) {
            if (conflicting_users_count > 0) {
              agency_field[field.id] = (0, _utilities.deep_merge)(agency_field[field.id], { old: { conflict: {
                    component: MessageFieldConflict,
                    conflicting_users_count: conflicting_users_count,
                    new_field_values: new_values_old_users,
                    selected: null,
                    exists_new_user: new_users_count > 0,
                    on_select: function on_select(selected) {
                      return _this2.setState((0, _utilities.deep_merge)(_this2.state, {
                        messages: { agency_field: (0, _defineProperty3.default)({}, field.id, { old: { conflict: { selected: selected } } }) }
                      }));
                    }
                  } } });
            } else {
              agency_field[field.id] = (0, _utilities.deep_merge)(agency_field[field.id], { old: { identical: {
                    component: MessageFieldIdentical,
                    informational: true
                  } } });
            }
          }
        } else {
          agency_field[field.id] = (0, _utilities.deep_merge)(agency_field[field.id], { common: { new_field: {
                component: MessageNewField,
                selected: null,
                on_select: function on_select(category) {
                  _this2.props.upload_results.fields = (0, _extends5.default)({}, _this2.props.upload_results.fields, (0, _defineProperty3.default)({}, field.id, (0, _extends5.default)({}, field, {
                    category: category
                  })));
                  _this2.setState((0, _utilities.deep_merge)(_this2.state, {
                    messages: { agency_field: (0, _defineProperty3.default)({}, field.id, { common: { new_field: { selected: category } } }) }
                  }));
                }
              } } });
        }
      });
      this.setState({ messages: { summary: summary, invitations: invitations, instant_job_field: instant_job_field, agency_field: agency_field } });
    }
  }, {
    key: 'send_invitations',
    value: function send_invitations() {
      var _this3 = this;

      this.setState((0, _utilities.deep_merge)(this.state, { importing: { invitations: true } }));
      var users = (0, _utilities.array_from_hash)(this.props.upload_results.users).filter(function (user) {
        return !user.existing;
      });
      (0, _users.action_invite_users)(users).then(function () {
        return _this3.setState((0, _utilities.deep_merge)(_this3.state, { imported: { invitations: true } }));
      });
    }
  }, {
    key: 'import_users',
    value: function import_users(field_name) {
      var _this4 = this;

      var users = (0, _utilities.array_from_hash)(this.props.upload_results.users).filter(function (user) {
        return user.existing && !_this4.props.users[user.existing].app_name;
      }).filter(function (user) {
        return _this4.props.users[user.existing][field_name] != user[field_name];
      }).map(function (user) {
        return (0, _extends5.default)({}, _this4.props.users[user.existing], (0, _defineProperty3.default)({}, field_name, user[field_name]));
      });
      _store2.default.dispatch((0, _users2.update_users)(users.filter(function (user) {
        return user.user_id;
      }).map(function (user) {
        return (0, _extends5.default)({}, user, { id: user.user_id });
      })));
      return _request2.default.asynchronous('users/agency_update', { users: users.map(function (_ref) {
          var first_name = _ref.first_name,
              last_name = _ref.last_name,
              email = _ref.email,
              postal_code = _ref.postal_code,
              phone_number = _ref.phone_number;
          return { first_name: first_name, last_name: last_name, email: email, postal_code: postal_code, phone_number: phone_number };
        }) }).then(function (users) {
        return _store2.default.dispatch((0, _users2.update_users)(users));
      });
    }
  }, {
    key: 'import_field',
    value: function import_field(imported_field_id, old_users_import_mode) {
      var _this5 = this;

      var _props$upload_results2 = this.props.upload_results,
          users = _props$upload_results2.users,
          fields = _props$upload_results2.fields,
          values = _props$upload_results2.values;

      var field = fields[imported_field_id];
      var users_to_import = (0, _utilities.array_from_hash)(users);
      if (old_users_import_mode == 'ignore') {
        users_to_import = users_to_import.filter(function (user) {
          return !user.existing;
        });
      }
      var existing_users = (0, _utilities.hash_with_key)((0, _utilities.array_from_hash)(this.props.users), 'email');
      users = (0, _utilities.map_hash)(users, function (user) {
        return (0, _extends5.default)({}, user, { existing: existing_users[user.email] });
      });
      var should_import_user = (0, _utilities.set_from_array)(users_to_import.map(function (user) {
        return users[user.id].existing.id;
      }));
      var imported_users = (0, _utilities.hash_with_key)((0, _utilities.array_from_hash)(users), 'email');
      return new _promise2.default(function (resolve, reject) {
        if (field.existing) {
          resolve(field.existing);
        } else {
          (0, _fields.action_create_field)(field).then(function (id) {
            return resolve(id);
          });
        }
      }).then(function (field_id) {
        var actions = [];
        switch (field.category) {
          case "non_exclusive":
            return _promise2.default.all((0, _utilities.array_from_set)(field.values).map(function (id) {
              var imported_value = values[id];
              return new _promise2.default(function (resolve, reject) {
                if (imported_value.existing) {
                  resolve(imported_value);
                } else {
                  (0, _fields.action_create_value)(field_id, imported_value.name).then(function (id) {
                    return resolve((0, _extends5.default)({}, imported_value, { existing: id }));
                  });
                }
              });
            })).then(function (imported_values) {
              return _request2.default.asynchronous("users/update_values", { values: imported_values.map(function (imported_value) {
                  var value = _this5.props.values[imported_value.existing];
                  var result = {
                    id: value.id,
                    added: (0, _utilities.array_from_set)(imported_value.entity_ids).map(function (id) {
                      return users[id].existing.id;
                    }).filter(function (user_id) {
                      return !value.entity_ids[user_id] && should_import_user[user_id];
                    }),
                    removed: (0, _utilities.array_from_set)(value.entity_ids).filter(function (user_id) {
                      var imported_user = imported_users[_this5.props.users[user_id].email];
                      return imported_user && !imported_value.entity_ids[imported_user.id] && should_import_user[user_id];
                    })
                  };
                  actions.push((0, _fields2.add_users_value)(result.added, result.id));
                  actions.push((0, _fields2.remove_users_value)(result.removed, result.id));
                  return result;
                }) });
            }).then(function (result) {
              _store2.default.dispatch((0, _base.combined_actions)(actions));
              return result;
            });
          case "exclusive":
            return _promise2.default.all((0, _utilities.array_from_set)(field.values).map(function (id) {
              var imported_value = values[id];
              return new _promise2.default(function (resolve, reject) {
                if (imported_value.existing) {
                  resolve(imported_value);
                } else {
                  (0, _fields.action_create_value)(field_id, imported_value.name).then(function (id) {
                    return resolve((0, _extends5.default)({}, imported_value, { existing: id }));
                  });
                }
              });
            })).then(function (imported_values) {
              return _request2.default.asynchronous("users/update_values", { values: imported_values.map(function (imported_value) {
                  var value = _this5.props.values[imported_value.existing];

                  var _ref2 = _this5.props.fields[value.field_id] || {},
                      value_id_for = _ref2.value_id_for;

                  var result = {
                    id: value.id,
                    added: (0, _keys2.default)(field.value_id_for).filter(function (user_id) {
                      return field.value_id_for[user_id] == imported_value.id && value_id_for[users[user_id].existing.id] != field.value_id_for[user_id];
                    }).map(function (id) {
                      return users[id].existing.id;
                    }).filter(function (user_id) {
                      return should_import_user[user_id];
                    }),
                    removed: (0, _keys2.default)(value_id_for).filter(function (user_id) {
                      if (value_id_for[user_id] != value.id) {
                        return false;
                      }
                      var imported_user = imported_users[_this5.props.users[user_id].email];
                      return imported_user && !field.value_id_for[imported_user.id] && should_import_user[user_id];
                    })
                  };
                  result.added.forEach(function (user_id) {
                    actions.push((0, _fields2.update_exclusive_entity_value)(user_id, value.id));
                  });
                  result.removed.forEach(function (user_id) {
                    actions.push((0, _fields2.clear_exclusive_entity_value)(user_id, value.id));
                  });
                  return result;
                }) });
            }).then(function (result) {
              _store2.default.dispatch((0, _base.combined_actions)(actions));
              return result;
            });
          case "comment":
            var query = (0, _utilities.array_from_hash)(users).filter(function (user) {
              return should_import_user[user.existing.id] && (field.conflicting_comments[user.id] || !field.existing && field.comments[user.id] != "");
            }).map(function (user) {
              return { id: user.existing.id, comment: field.comments[user.id] };
            });
            _store2.default.dispatch((0, _fields2.update_user_comments)(field_id, (0, _utilities.map_hash)((0, _utilities.hash_with_key)(query), function (user) {
              return user.comment;
            })));
            return _request2.default.asynchronous("users/update_comments", { users: query, field: { id: field_id } });
          default:
        }
      });
    }
  }, {
    key: 'render_page',
    value: function render_page() {
      var _this6 = this;

      var exists_new_user = this.props.upload_results.new_users_count > 0;
      var exists_old_user = this.props.upload_results.old_users_count > 0;
      switch (this.state.active_field_type) {
        case 'summary':
        case 'invitations':
          var messages = (0, _utilities.array_from_hash)(this.state.messages[this.state.active_field_type]);
          var message_wrappers = (messages || []).map(function (_ref3, index) {
            var MessageWrapper = _ref3.component,
                props = (0, _objectWithoutProperties3.default)(_ref3, ['component']);
            return _react2.default.createElement(MessageWrapper, (0, _extends5.default)({ key: index }, props, { imported: _this6.state.imported.invitations }));
          });
          if (this.state.active_field_type == 'summary') {
            return _react2.default.createElement(
              'div',
              { className: cx('upload-results__content-container') },
              _react2.default.createElement(
                'div',
                { className: cx('upload-results__content-title') },
                'Aper\xE7u'
              ),
              message_wrappers,
              exists_old_user || exists_new_user ? _react2.default.createElement(_user_table2.default, (0, _extends5.default)({}, this.props.upload_results, { editable: false, place_filterable: false, users: get_uploaded_users(this.props.upload_results.users, this.props.users) })) : null
            );
          } else {
            return _react2.default.createElement(
              'div',
              { className: cx('upload-results__content-container') },
              _react2.default.createElement(
                'div',
                { className: cx('upload-results__content-title') },
                'Invitations'
              ),
              _react2.default.createElement(
                'div',
                { className: cx('upload-results__messages') },
                message_wrappers
              ),
              _react2.default.createElement(
                'div',
                { className: cx('upload-results__upload-button') },
                this.state.imported.invitations ? _react2.default.createElement(
                  _button2.default,
                  { done: true },
                  (0, _utilities.human_plural)(this.props.upload_results.new_users_count, 'L\'invitation a \xE9t\xE9 envoy\xE9e', 'Les invitations ont \xE9t\xE9 envoy\xE9es')
                ) : this.state.importing.invitations ? _react2.default.createElement(
                  _button2.default,
                  { loading: true },
                  'Importation en cours ...'
                ) : _react2.default.createElement(
                  _button2.default,
                  {
                    disabled: !(0, _utilities.for_all)(messages, function (message) {
                      return message.informational || message.validated || message.selected;
                    }),
                    onClick: this.send_invitations
                  },
                  (0, _utilities.human_plural)(this.props.upload_results.new_users_count, 'Envoyer l\'invitation', 'Envoyer les invitations')
                )
              )
            );
          }
        case 'instant_job_field':
        case 'agency_field':
          var imported = this.state.imported[this.state.active_field_type][this.state.active_field];
          var new_field = this.state.active_field_type == 'agency_field' && !this.props.upload_results.fields[this.state.active_field].existing;
          var common_messages = (0, _utilities.array_from_hash)((this.state.messages[this.state.active_field_type][this.state.active_field] || {}).common);
          var common_message_wrappers = common_messages.map(function (_ref4, index) {
            var MessageWrapper = _ref4.component,
                props = (0, _objectWithoutProperties3.default)(_ref4, ['component']);
            return _react2.default.createElement(MessageWrapper, (0, _extends5.default)({ key: index }, props, { imported: imported }));
          });
          var new_users_messages = (0, _utilities.array_from_hash)((this.state.messages[this.state.active_field_type][this.state.active_field] || {}).new);
          var new_users_message_wrappers = new_users_messages.map(function (_ref5, index) {
            var MessageWrapper = _ref5.component,
                props = (0, _objectWithoutProperties3.default)(_ref5, ['component']);
            return _react2.default.createElement(MessageWrapper, (0, _extends5.default)({ key: index }, props, { imported: imported }));
          });
          var old_users_messages = (0, _utilities.array_from_hash)((this.state.messages[this.state.active_field_type][this.state.active_field] || {}).old);
          var old_users_message_wrappers = old_users_messages.map(function (_ref6, index) {
            var MessageWrapper = _ref6.component,
                props = (0, _objectWithoutProperties3.default)(_ref6, ['component']);
            return _react2.default.createElement(MessageWrapper, (0, _extends5.default)({ key: index }, props, { imported: imported }));
          });
          var statistics = void 0;
          var switcher = exists_new_user && exists_old_user ? _react2.default.createElement(
            'div',
            { className: cx('upload-results__statistics-switcher') },
            ["new", "old"].map(function (option) {
              return _react2.default.createElement(
                'div',
                {
                  key: option,
                  className: cx('upload-results__statistics-switcher-option', { 'upload-results__statistics-switcher-option_selected': _this6.state.statistics == option }),
                  onClick: function onClick() {
                    return _this6.setState({ statistics: option });
                  }
                },
                { "new": "Nouveaux candidats", "old": "Anciens candidats" }[option]
              );
            })
          ) : null;
          var filter_user = function filter_user(user) {
            return _this6.state.statistics == (user.existing ? "old" : "new");
          };
          var field = void 0;
          if (this.state.active_field_type == 'instant_job_field') {
            field = { name: (0, _utilities.hash_key_with_value)(this.props.instant_job_fields, this.state.active_field) };
            var all_users = (0, _utilities.array_from_hash)(this.props.upload_results.users).filter(filter_user);
            var filled_users_count = all_users.filter(function (user) {
              return user[_this6.state.active_field];
            }).length;
            statistics = _react2.default.createElement(
              'div',
              { className: cx('upload-results__statistics') },
              switcher,
              _react2.default.createElement(
                'div',
                { className: cx('upload-results__content-title') },
                'Statistiques'
              ),
              _react2.default.createElement(
                Statistics,
                null,
                {
                  "Renseigné": filled_users_count,
                  "Vide": all_users.length - filled_users_count
                }
              )
            );
          } else {
            field = this.props.upload_results.fields[this.state.active_field];
            switch (field.category) {
              case 'exclusive':
              case 'non_exclusive':
                var field_values = (0, _utilities.array_from_set)(field.values).map(function (id) {
                  return _this6.props.upload_results.values[id];
                });
                var user_values_statistics = {};
                field_values.forEach(function (value) {
                  (0, _utilities.array_from_set)(value.entity_ids).forEach(function (user_id) {
                    if (filter_user(_this6.props.upload_results.users[user_id])) {
                      user_values_statistics[user_id] = (user_values_statistics[user_id] || 0) + 1;
                    }
                  });
                });
                statistics = _react2.default.createElement(
                  'div',
                  { className: cx('upload-results__statistics') },
                  switcher,
                  _react2.default.createElement(
                    'div',
                    { className: cx('upload-results__content-title') },
                    'Statistiques'
                  ),
                  _react2.default.createElement(
                    Statistics,
                    null,
                    field_values.reduce(function (statistics, value) {
                      statistics[value.name] = (0, _utilities.array_from_set)(value.entity_ids).map(function (id) {
                        return _this6.props.upload_results.users[id];
                      }).filter(filter_user).length;
                      return statistics;
                    }, {})
                  ),
                  field.category == 'non_exclusive' ? _react2.default.createElement(
                    'div',
                    null,
                    _react2.default.createElement(
                      'div',
                      { className: cx('upload-results__content-title') },
                      'Nombre de valeurs'
                    ),
                    _react2.default.createElement(
                      Statistics,
                      null,
                      (0, _utilities.array_from_hash)(user_values_statistics).reduce(function (statistics, value_count) {
                        statistics[value_count] = (statistics[value_count] || 0) + 1;
                        return statistics;
                      }, {})
                    )
                  ) : null
                );
                break;
              case 'comment':
                var _all_users = (0, _utilities.array_from_hash)(this.props.upload_results.users).filter(filter_user);
                var comments = this.props.upload_results.fields[this.state.active_field].comments;

                var _filled_users_count = _all_users.filter(function (_ref7) {
                  var id = _ref7.id;
                  return comments[id];
                }).length;
                statistics = _react2.default.createElement(
                  'div',
                  { className: cx('upload-results__statistics') },
                  switcher,
                  _react2.default.createElement(
                    'div',
                    { className: cx('upload-results__content-title') },
                    'Statistiques'
                  ),
                  _react2.default.createElement(
                    Statistics,
                    null,
                    {
                      "Renseigné": _filled_users_count,
                      "Vide": _all_users.length - _filled_users_count
                    }
                  )
                );
                break;
              default:
            }
          }
          return _react2.default.createElement(
            'div',
            { className: cx('upload-results__content-container') },
            _react2.default.createElement(
              'div',
              { className: cx('upload-results__content-title') },
              field.name
            ),
            _react2.default.createElement(
              'div',
              { className: cx('upload-results__main-content') },
              _react2.default.createElement(
                'div',
                { className: cx('upload-results__messages') },
                common_message_wrappers,
                exists_new_user && new_users_messages.length > 0 ? _react2.default.createElement(
                  'div',
                  { className: cx('upload-results__content-title') },
                  'Candidats nouvellement import\xE9s'
                ) : null,
                exists_new_user ? new_users_message_wrappers : null,
                exists_old_user && old_users_messages.length > 0 ? _react2.default.createElement(
                  'div',
                  { className: cx('upload-results__content-title') },
                  'Candidats d\xE9j\xE0 pr\xE9sents dans la base'
                ) : null,
                exists_old_user ? old_users_message_wrappers : null
              ),
              statistics
            ),
            _react2.default.createElement(
              'div',
              { className: cx('upload-results__upload-button') },
              (0, _utilities.for_all)([].concat((0, _toConsumableArray3.default)(new_users_messages), (0, _toConsumableArray3.default)(old_users_messages), (0, _toConsumableArray3.default)(common_messages)), function (message) {
                return message.informational;
              }) ? _react2.default.createElement(
                _button2.default,
                { done: true },
                "Vous n'avez rien à faire"
              ) : imported ? _react2.default.createElement(
                _button2.default,
                { done: true },
                new_field ? "Le champ a été créé et les données importées" : "Les données de ce champ ont été importées"
              ) : this.state.importing[this.state.active_field_type][this.state.active_field] ? _react2.default.createElement(
                _button2.default,
                { loading: true },
                'Importation en cours ...'
              ) : _react2.default.createElement(
                _button2.default,
                {
                  disabled: !(0, _utilities.for_all)([].concat((0, _toConsumableArray3.default)(new_users_messages), (0, _toConsumableArray3.default)(old_users_messages), (0, _toConsumableArray3.default)(common_messages)), function (message) {
                    return message.informational || message.validated || message.selected;
                  }),
                  onClick: function onClick() {
                    var active_field = _this6.state.active_field,
                        active_field_type = _this6.state.active_field_type;
                    _this6.setState((0, _utilities.deep_merge)(_this6.state, { importing: (0, _defineProperty3.default)({}, active_field_type, (0, _defineProperty3.default)({}, active_field, true)) }));
                    _this6.forceUpdate();
                    var set_imported_state = function set_imported_state() {
                      if (_this6.mounted) {
                        _this6.setState((0, _utilities.deep_merge)(_this6.state, { imported: (0, _defineProperty3.default)({}, active_field_type, (0, _defineProperty3.default)({}, active_field, true)) }));
                      }
                    };
                    var messages = _this6.state.messages[active_field_type][active_field];
                    switch (active_field_type) {
                      case "instant_job_field":
                        _this6.import_users(active_field).then(set_imported_state);
                        break;
                      case "agency_field":
                        _this6.import_field(active_field, new_field ? 'overwrite' : exists_old_user && messages.old.conflict ? messages.old.conflict.selected : 'ignore').then(set_imported_state);
                        break;
                      default:
                    }
                  }
                },
                new_field ? "Créer le champ" : !exists_old_user || exists_old_user && exists_new_user && (0, _utilities.for_all)(old_users_messages, function (message) {
                  return message.selected != "overwrite";
                }) ? "Importer les données pour les nouveaux candidats" : "Importer les données de ce champ"
              )
            )
          );
        default:
          return _react2.default.createElement('div', null);
      }
    }
  }, {
    key: 'render_navigation',
    value: function render_navigation(field_array) {
      var current_index = field_array.findIndex(function (field) {
        return field.active;
      });

      var decrement = function decrement() {
        field_array[current_index - 1].onClick();
      };

      var increment = function increment() {
        field_array[current_index + 1].onClick();
      };

      return _react2.default.createElement(
        'div',
        { className: cx('upload-results__actions') },
        _react2.default.createElement(
          'div',
          { className: cx('upload-results__actions__button-container', 'upload-results__actions__button-container__reverse') },
          current_index > 0 ? _react2.default.createElement(
            _button2.default,
            { secondary: true, left_icon: _react2.default.createElement(_md.MdKeyboardArrowLeft, null), onClick: decrement, disabled: current_index == 0 },
            'Pr\xE9c\xE9dent'
          ) : null
        ),
        _react2.default.createElement(
          'div',
          { className: cx('upload-results__actions__button-container') },
          current_index + 1 < field_array.length ? _react2.default.createElement(
            _button2.default,
            { secondary: true, right_icon: _react2.default.createElement(_md.MdKeyboardArrowRight, null), disabled: field_array[current_index + 1] && field_array[current_index + 1].disabled, onClick: increment },
            'Suivant'
          ) : _react2.default.createElement(
            _button2.default,
            { secondary: true, right_icon: _react2.default.createElement(_md.MdCheck, null), disabled: field_array[current_index + 1] && field_array[current_index + 1].disabled, onClick: this.props.close },
            'Terminer'
          )
        )
      );
    }
  }, {
    key: 'render',
    value: function render() {
      var _this7 = this;

      var status = {
        invitations: (0, _utilities.for_all)((0, _utilities.array_from_hash)(this.state.messages.invitations), function (message) {
          return message.informational || message.validated || message.selected;
        }) ? 'ready' : 'warning',
        instant_job_field: (0, _utilities.create_hash)((0, _utilities.array_from_hash)(this.props.instant_job_fields), function (field_name) {
          var all_messages = _this7.state.messages.instant_job_field[field_name] || {};
          var messages = [].concat((0, _toConsumableArray3.default)((0, _utilities.array_from_hash)(all_messages.common)), (0, _toConsumableArray3.default)((0, _utilities.array_from_hash)(all_messages.new)), (0, _toConsumableArray3.default)((0, _utilities.array_from_hash)(all_messages.old)));
          if ((0, _utilities.for_all)(messages, function (message) {
            return message.informational;
          })) {
            return 'imported';
          } else if ((0, _utilities.for_all)(messages, function (message) {
            return message.informational || message.validated || message.selected;
          })) {
            return 'ready';
          } else {
            return 'warning';
          }
        }),
        agency_field: (0, _utilities.create_hash)((0, _keys2.default)(this.props.upload_results.fields), function (field_id) {
          var all_messages = _this7.state.messages.agency_field[field_id] || {};
          var messages = [].concat((0, _toConsumableArray3.default)((0, _utilities.array_from_hash)(all_messages.common)), (0, _toConsumableArray3.default)((0, _utilities.array_from_hash)(all_messages.new)), (0, _toConsumableArray3.default)((0, _utilities.array_from_hash)(all_messages.old)));
          if ((0, _utilities.for_all)(messages, function (message) {
            return message.informational;
          })) {
            return 'imported';
          } else if ((0, _utilities.for_all)(messages, function (message) {
            return message.informational || message.validated || message.selected;
          })) {
            return 'ready';
          } else {
            return 'warning';
          }
        })
      };
      var exists_user = this.props.upload_results.new_users_count > 0 || this.props.upload_results.old_users_count > 0;
      var field_array = [{
        label: "Aperçu",
        onClick: function onClick() {
          return _this7.setState({ active_field_type: 'summary' });
        },
        active: this.state.active_field_type == 'summary',
        disabled: false,
        icon: _react2.default.createElement(MenuIcon, null),
        display: true
      }, {
        label: "Invitations",
        onClick: function onClick() {
          return _this7.setState({ active_field_type: 'invitations' });
        },
        active: this.state.active_field_type == 'invitations',
        disabled: false,
        icon: _react2.default.createElement(MenuIcon, { status: this.state.imported['invitations'] ? 'imported' : status['invitations'] }),
        display: this.props.upload_results.new_users_count > 0
      }].concat((0, _toConsumableArray3.default)((0, _utilities.array_from_set)(this.props.upload_results.instant_job_fields_present).map(function (field_label) {
        var field_name = _this7.props.instant_job_fields[field_label];
        return {
          label: field_label,
          onClick: function onClick() {
            return _this7.setState({ active_field_type: 'instant_job_field', active_field: field_name });
          },
          active: _this7.state.active_field_type == 'instant_job_field' && _this7.state.active_field == field_name,
          disabled: _this7.props.upload_results.new_users_count > 0 && !_this7.state.imported['invitations'],
          icon: _react2.default.createElement(MenuIcon, { status: _this7.state.imported['instant_job_field'][field_name] ? 'imported' : status['instant_job_field'][field_name] }),
          display: exists_user
        };
      })), (0, _toConsumableArray3.default)((0, _utilities.array_from_hash)(this.props.upload_results.fields).map(function (field) {
        return {
          label: field.name,
          onClick: function onClick() {
            return _this7.setState({ active_field_type: 'agency_field', active_field: field.id });
          },
          active: _this7.state.active_field_type == 'agency_field' && _this7.state.active_field == field.id,
          disabled: _this7.props.upload_results.new_users_count > 0 && !_this7.state.imported['invitations'],
          icon: _react2.default.createElement(MenuIcon, { status: _this7.state.imported['agency_field'][field.id] ? 'imported' : status['agency_field'][field.id] }),
          display: exists_user
        };
      }))).filter(function (tab) {
        return tab.display;
      });
      return _react2.default.createElement(
        'div',
        { className: cx('upload-results') },
        _react2.default.createElement(
          'div',
          { className: cx('upload-results__import-button') },
          _react2.default.createElement(
            _button2.default,
            { icon: _md.MdFileUpload, secondary: true, onClick: this.props.upload_new_file },
            'Charger un autre fichier'
          )
        ),
        _react2.default.createElement(
          'div',
          { className: cx('upload-results__container') },
          _react2.default.createElement(
            'div',
            { className: cx('upload-results__menu-container') },
            _react2.default.createElement(
              _menu2.default,
              null,
              field_array
            )
          ),
          this.render_page()
        ),
        this.render_navigation(field_array)
      );
    }
  }]);
  return UploadResultsStatic;
}(_react.Component);

var Message = function Message(props) {
  var Icon = {
    'error': _md.MdError,
    'warning': _md.MdWarning,
    'ok': _md.MdCheck
  }[props.status || 'ok'];
  return _react2.default.createElement(
    'div',
    { className: cx('upload-results__message', 'upload-results__message_' + (props.status || 'ok')) },
    _react2.default.createElement(
      'div',
      { className: cx('upload-results__message-title') },
      _react2.default.createElement(
        'div',
        { className: cx('upload-results__message-title-icon') },
        _react2.default.createElement(Icon, null)
      ),
      _react2.default.createElement(
        'div',
        { className: cx('upload-results__message-title-label') },
        props.title
      )
    ),
    props.children ? _react2.default.createElement(
      'div',
      { className: cx('upload-results__message-information') },
      props.children
    ) : null
  );
};

var MessageFieldsCount = function MessageFieldsCount(props) {
  var new_field_names_count = props.new_field_names.length;
  if (new_field_names_count > 0) {
    return _react2.default.createElement(
      Message,
      {
        status: props.new_field_names.length > 0 ? 'warning' : 'ok',
        title: (0, _utilities.human_plural)(props.total_fields_count, 'Votre fichier contient %% champ (colonne)', 'Votre fichier contient %% champs (colonnes)')
      },
      _react2.default.createElement(
        'p',
        null,
        (0, _utilities.human_plural)(props.total_fields_count - props.new_field_names.length, '%% est déjà présent', '%% sont déjà présents'),
        ' sur InstantJob'
      ),
      _react2.default.createElement(
        'p',
        null,
        (0, _utilities.human_plural)(props.new_field_names.length, '%% correspond à un nouveau champ', '%% correspondent à des nouveaux champs'),
        ' : ',
        (0, _utilities.human_join)(props.new_field_names)
      )
    );
  } else {
    return _react2.default.createElement(Message, {
      status: props.new_field_names.length > 0 ? 'warning' : 'ok',
      title: (0, _utilities.human_plural)(props.total_fields_count, '%% champ a été importé et était déjà présent sur InstantJob', '%% champs ont été importés et étaient déjà présents sur InstantJob')
    });
  }
};

var MessageInviteUsers = function MessageInviteUsers(props) {
  var title = void 0;
  if (props.new_users == props.all_users) {
    title = 'Votre fichier contient des donn\xE9es au sujet de ' + (0, _utilities.human_plural)(props.all_users, '%% nouveau candidat', '%% nouveaux candidats') + '.';
  } else {
    title = 'Votre fichier contient des donn\xE9es au sujet de ' + (0, _utilities.human_plural)(props.all_users, '%% candidat', '%% candidats') + '.';
  }
  return _react2.default.createElement(
    Message,
    {
      status: props.validated ? 'ok' : 'warning',
      title: title
    },
    props.new_users == props.all_users ? null : _react2.default.createElement(
      'p',
      null,
      (0, _utilities.human_plural)(props.all_users - props.new_users, '%% était déjà présent', '%% étaient déjà présents'),
      ' sur InstantJob'
    ),
    props.new_users == props.all_users ? null : _react2.default.createElement(
      'p',
      null,
      (0, _utilities.human_plural)(props.new_users, '%% est un nouveau candidat', '%% sont des nouveaux candidats')
    ),
    _react2.default.createElement(
      Action,
      { imported: props.imported, status: props.validated ? 'checked' : 'unchecked', onClick: props.onClick },
      'Cr\xE9er ' + (0, _utilities.human_plural)(props.new_users, '%% nouveau candidat sur InstantJob et lui', '%% nouveaux candidats sur InstantJob et leur') + ' envoyer une invitation \xE0 t\xE9l\xE9charger l\'application.'
    )
  );
};

var MessageAbsentFields = function MessageAbsentFields(props) {
  return _react2.default.createElement(
    Message,
    {
      status: props.validated ? 'ok' : 'warning',
      title: (0, _utilities.human_plural)(props.absent_fields.length, 'Le champ "' + props.absent_fields[0] + '" n\'a pas \xE9t\xE9 trouv\xE9', 'Les champs ' + (0, _utilities.human_join)(props.absent_fields.map(function (field) {
        return '"' + field + '"';
      })) + ' n\'ont pas \xE9t\xE9 trouv\xE9s') + ' dans votre fichier.'
    },
    _react2.default.createElement(
      Action,
      { imported: props.imported, status: props.validated ? 'checked' : 'unchecked', onClick: props.onClick },
      'Laisser ' + (0, _utilities.human_plural)(props.absent_fields.length, 'ce champ vide', 'ces champs vides') + ' pour les nouveaux candidats import\xE9s.'
    )
  );
};

var MessageInstantJobFieldNew = function MessageInstantJobFieldNew(props) {
  return _react2.default.createElement(Message, { title: 'Les donn\xE9es ont d\xE9j\xE0 \xE9t\xE9 import\xE9es car il s\'agit d\'un champ impos\xE9 par InstantJob.' });
};

var MessageAgencyFieldReady = function MessageAgencyFieldReady(props) {
  return _react2.default.createElement(Message, { title: 'Donn\xE9es pr\xEAtes \xE0 \xEAtre import\xE9es.' });
};

var MessageFieldIdentical = function MessageFieldIdentical(props) {
  return _react2.default.createElement(Message, { title: 'Les donn\xE9es du fichier sont identiques aux donn\xE9es dans InstantJob.' });
};

var MessageFieldConflict = function MessageFieldConflict(props) {
  var new_field_values_count = (props.new_field_values || []).length;
  return _react2.default.createElement(
    Message,
    {
      status: props.selected ? 'ok' : 'warning',
      title: 'Pour ' + (0, _utilities.human_plural)(props.conflicting_users_count, '%% candidat', '%% candidats') + ', les donn\xE9es de votre fichier ne correspondent pas aux donn\xE9es pr\xE9sentes dans votre base InstantJob.'
    },
    new_field_values_count ? _react2.default.createElement(
      'p',
      null,
      'Nous avons \xE9galement trouv\xE9 ',
      (0, _utilities.human_plural)(new_field_values_count, "%% nouvelle valeur", "%% nouvelles valeurs"),
      ' chez les candidats d\xE9j\xE0 pr\xE9sents : ',
      (0, _utilities.human_join)(props.new_field_values, 10)
    ) : null,
    props.exists_new_user ? _react2.default.createElement(
      Action,
      { imported: props.imported, status: props.selected == 'ignore' ? 'checked' : props.selected ? 'discarded' : 'unchecked', onClick: function onClick() {
          return props.on_select('ignore');
        } },
      'Ne pas prendre en compte les donn\xE9es import\xE9es et laisser la base InstantJob inchang\xE9e'
    ) : null,
    _react2.default.createElement(
      Action,
      {
        imported: props.imported,
        status: props.selected == 'overwrite' ? 'checked' : props.selected && props.exists_new_user ? 'discarded' : 'unchecked',
        onClick: props.exists_new_user || !props.selected ? function () {
          return props.on_select('overwrite');
        } : function () {
          return props.on_select(false);
        }
      },
      'Ecraser les donn\xE9es sur InstantJob et les remplacer par les donn\xE9es de votre fichier ',
      new_field_values_count > 0 ? 'en cr\xE9ant ' + (0, _utilities.human_plural)(new_field_values_count, "%% nouvelle valeur", "%% nouvelles valeurs") : null
    )
  );
};

var MessageInstantJobAppUserConflict = function MessageInstantJobAppUserConflict(props) {
  return _react2.default.createElement(Message, {
    status: 'warning',
    title: 'Les donn\xE9es de ' + (0, _utilities.human_plural)(props.conflicting_users_count, "%% candidat ne pourront pas être modifiées car il indique", "%% candidats ne pourront pas être modifiées car ils indiquent") + ' ces informations via l\'application.'
  });
};

var MessageNewField = function MessageNewField(props) {
  return _react2.default.createElement(
    Message,
    { status: props.selected ? 'ok' : 'warning', title: "Ce champ n'existe pas dans la base InstantJob" },
    _react2.default.createElement(
      'p',
      null,
      'Ce champ correspond-il a un champ de tri (\xE0 choix multiple) ou \xE0 un champ de commentaire ?'
    ),
    _react2.default.createElement(_field_categories_selector2.default, {
      selected: props.selected,
      on_select: props.imported ? function () {} : props.on_select
    })
  );
};

var MessageDuplicateUsers = function MessageDuplicateUsers(props) {
  return _react2.default.createElement(
    Message,
    {
      status: 'warning',
      title: 'Votre fichier contient ' + (0, _utilities.human_plural)(props.duplicate_users_count, "%% addresse mail", "%% adresses mail") + ' en double'
    },
    _react2.default.createElement(
      'p',
      null,
      'Nous avons conserv\xE9 uniquement la derni\xE8re ligne correspondant \xE0 chaque adresse mail dupliqu\xE9e'
    )
  );
};

var MessageInvalidEmails = function MessageInvalidEmails(props) {
  return _react2.default.createElement(
    Message,
    {
      status: 'warning',
      title: 'Votre fichier contient ' + (0, _utilities.human_plural)(props.invalid_emails.length, "%% addresse mail invalide", "%% adresses mail invalides") + ' : ' + (0, _utilities.human_join)(props.invalid_emails, 10)
    },
    _react2.default.createElement(
      'p',
      null,
      'Il faut une adresse mail valide pour envoyer une invitation, ',
      (0, _utilities.human_plural)(props.invalid_emails.length, "ce candidat ne pourra donc pas être importé", "ces candidats ne pourront donc pas être importés"),
      '.'
    )
  );
};

var MessageEmptyFile = function MessageEmptyFile(props) {
  return _react2.default.createElement(Message, {
    status: 'error',
    title: 'Votre fichier ne contient aucune adresse mail valide'
  });
};

var MessageNewValuesNewUsers = function MessageNewValuesNewUsers(props) {
  return _react2.default.createElement(
    Message,
    {
      status: props.validated ? 'ok' : 'warning',
      title: 'Nous avons trouv\xE9 ' + (0, _utilities.human_plural)(props.new_field_values.length, "%% nouvelle valeur", "%% nouvelles valeurs") + ' chez ' + (0, _utilities.human_plural)(props.new_users_count, "le nouveau candidat", "les %% nouveaux candidats") + ' : ' + (0, _utilities.human_join)(props.new_field_values, 10)
    },
    _react2.default.createElement(
      Action,
      { imported: props.imported, status: props.validated ? 'checked' : 'unchecked', onClick: props.onClick },
      'Cr\xE9er ',
      (0, _utilities.human_plural)(props.new_field_values.length, "%% nouvelle valeur", "%% nouvelles valeurs")
    )
  );
};

var Action = function Action(props) {
  var _cx;

  var Icon = props.status == 'checked' ? _md.MdCheckBox : _md.MdCheckBoxOutlineBlank;
  return _react2.default.createElement(
    'div',
    { className: cx('upload-results__message-action', (_cx = {}, (0, _defineProperty3.default)(_cx, 'upload-results__message-action_' + props.status, props.status), (0, _defineProperty3.default)(_cx, 'upload-results__message-action_editable', !props.imported), _cx)), onClick: props.imported ? function () {} : props.onClick },
    _react2.default.createElement(
      'div',
      { className: cx('upload-results__message-action-checkbox') },
      _react2.default.createElement(Icon, null)
    ),
    _react2.default.createElement(
      'div',
      { className: cx('upload-results__message-action-label') },
      props.children
    )
  );
};

var MenuIcon = function MenuIcon(props) {
  switch (props.status) {
    case 'imported':
      return _react2.default.createElement(
        'div',
        { className: cx('upload-results__menu-icon', 'upload-results__menu-icon_imported') },
        _react2.default.createElement(_md.MdCheck, null)
      );
    case 'ready':
      return _react2.default.createElement('div', { className: cx('upload-results__menu-icon', 'upload-results__menu-icon_ready') });
    case 'warning':
      return _react2.default.createElement('div', { className: cx('upload-results__menu-icon', 'upload-results__menu-icon_warning') });
    case 'error':
      return _react2.default.createElement('div', { className: cx('upload-results__menu-icon', 'upload-results__menu-icon_error') });
    default:
      return _react2.default.createElement('div', null);
  }
};

var Statistics = function Statistics(props) {
  return _react2.default.createElement(
    'div',
    { style: { display: 'flex', flexDirection: 'column', alignItems: 'stretch' } },
    (0, _keys2.default)(props.children).map(function (label, index) {
      return _react2.default.createElement(
        'div',
        { key: index, style: { display: 'flex', justifyContent: 'space-between' } },
        _react2.default.createElement(
          'div',
          null,
          label
        ),
        _react2.default.createElement(
          'div',
          null,
          props.children[label]
        )
      );
    })
  );
};

var UploadResults = (0, _reactRedux.connect)(function (state) {
  return {
    fields: state.fields.fields,
    values: state.fields.values,
    users: (0, _users3.get_users)(state)
  };
})(UploadResultsStatic);

UploadResults.defaultProps = {
  upload_results: {
    fields: [],
    values: {},
    users: []
  },
  fields: {},
  values: {},
  users: {},
  update_upload_results: function update_upload_results() {},
  upload_new_file: function upload_new_file() {},
  close: function close() {}
};

exports.default = UploadResults;