instantjob-recruiter-client
Version:
a set of tools for creating an instantjob recruiter react client
534 lines (458 loc) • 17 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _keys = require('babel-runtime/core-js/object/keys');
var _keys2 = _interopRequireDefault(_keys);
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
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 _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _bind = require('classnames/bind');
var _bind2 = _interopRequireDefault(_bind);
var _md = require('react-icons/lib/md');
var _button = require('components/utils/button');
var _button2 = _interopRequireDefault(_button);
var _exclusive_field = require('components/exclusive_field');
var _exclusive_field2 = _interopRequireDefault(_exclusive_field);
var _styles = require('common/styles');
var _utilities = require('common/utilities');
var _store = require('common/store');
var _store2 = _interopRequireDefault(_store);
var _auto_bind = require('common/auto_bind');
var _auto_bind2 = _interopRequireDefault(_auto_bind);
var _display = require('actions/display');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var examples = {
user: {
comment: 'Ex: Num\xE9ro de dossier, Commentaire suite \xE0 l\'entretien, Date de naissance ...',
non_exclusive: 'Ex: Langue, Comp\xE9tences, \xC9tablissement pr\xE9f\xE9r\xE9 ...',
exclusive: 'Ex: \xC9quipe, Dossier valid\xE9, Qualification ...',
file: 'Ex: Titre de s\xE9jour, Carte vitale, RIB ...'
},
mission: {
comment: 'Ex: R\xE9f\xE9rence de la mission, Pr\xE9cisions sur l\'acc\xE8s au lieu, Donn\xE9es de contact ...',
non_exclusive: 'Ex: Mat\xE9riel requis, Personnes \xE0 contacter ...',
exclusive: 'Ex: Client, Tenue vestimentaire ...',
computed: 'Ex: Montant HT, Montant TTC ...'
},
mission_proposal: {
comment: 'Ex: Chiffre d\'affaire r\xE9alis\xE9, Appr\xE9ciation suite \xE0 la mission ...',
non_exclusive: 'Ex: Comp\xE9tences valid\xE9es ...',
exclusive: 'Ex: Note sur la mission, Tenue ...',
template: 'Ex: Contrat de travail, Autorisation d\'acc\xE8s au lieu de la mission ...',
computed: 'Ex: Nom du contact, Salaire, ...'
},
shift: {
comment: 'Ex: Commentaire, Nombre de clients servis, Bonus ...',
non_exclusive: 'Ex: Pause, Primes ...',
exclusive: 'Ex: Panier repas ...',
computed: 'Ex: Salaire, Prime de dimanche, ...'
},
value: {
comment: 'Ex: Num\xE9ro de t\xE9l\xE9phone ...',
non_exclusive: 'Ex: Mat\xE9riel demand\xE9 ...',
exclusive: 'Ex: Type de client ...',
computed: 'Ex: Adresse compl\xE8te ...'
},
workplace: {
comment: 'Ex: Num\xE9ro de t\xE9l\xE9phone ...',
non_exclusive: 'Ex: \xC9quipements pr\xE9sents ...',
exclusive: 'Ex: Client ...'
},
deal: {
computed: 'Ex: Total HT, Total TTC ...',
template: 'Ex: Devis, Facture ...'
}
};
var cx = _bind2.default.bind(require('styles/new_field_form.scss'));
var NewFieldForm = function (_Component) {
(0, _inherits3.default)(NewFieldForm, _Component);
function NewFieldForm(props) {
(0, _classCallCheck3.default)(this, NewFieldForm);
var _this = (0, _possibleConstructorReturn3.default)(this, (NewFieldForm.__proto__ || (0, _getPrototypeOf2.default)(NewFieldForm)).call(this, props));
_this.state = {
kind: _this.props.type == "mission" && (0, _utilities.array_from_hash)(_this.props.existing_fields).length > 0 ? "" : "new"
};
(0, _auto_bind2.default)(_this);
return _this;
}
(0, _createClass3.default)(NewFieldForm, [{
key: 'render',
value: function render() {
var _this2 = this;
switch (this.state.kind) {
case "new":
return _react2.default.createElement(New, this.props);
case "recycled":
return _react2.default.createElement(Recycled, this.props);
default:
return _react2.default.createElement(
'div',
{ className: cx('new-field-form') },
_react2.default.createElement(
'div',
{ className: cx('new-field-form__mission', 'new-field-form__mission_choice') },
_react2.default.createElement(
'span',
null,
'Quel genre de champ voulez-vous cr\xE9er ?'
),
_react2.default.createElement(
'div',
{ className: cx('new-field-form__mission__buttons') },
_react2.default.createElement(
'div',
{ className: cx('new-field-form__mission__buttons__button') },
_react2.default.createElement(
_button2.default,
{ onClick: function onClick() {
return _this2.setState({ kind: "new" });
} },
'Cr\xE9er un champ mission sp\xE9cifique'
)
),
_react2.default.createElement(
'div',
{ className: cx('new-field-form__mission__buttons__description') },
'Vous pourrez ainsi renseigner des informations sur vos missions et choisir de les partager avec les candidats.'
)
),
_react2.default.createElement(
'div',
{ className: cx('new-field-form__mission__buttons') },
_react2.default.createElement(
'div',
{ className: cx('new-field-form__mission__buttons__button') },
_react2.default.createElement(
_button2.default,
{ onClick: function onClick() {
return _this2.setState({ kind: "recycled" });
} },
'R\xE9utiliser un champ candidat'
)
),
_react2.default.createElement(
'div',
{ className: cx('new-field-form__mission__buttons__description') },
'Cela permet de r\xE9utiliser dans la fiche descriptive de la mission un champ utilis\xE9 pour filtrer vos candidats'
)
)
)
);
}
}
}]);
return NewFieldForm;
}(_react.Component);
var Recycled = function (_Component2) {
(0, _inherits3.default)(Recycled, _Component2);
function Recycled(props) {
(0, _classCallCheck3.default)(this, Recycled);
var _this3 = (0, _possibleConstructorReturn3.default)(this, (Recycled.__proto__ || (0, _getPrototypeOf2.default)(Recycled)).call(this, props));
_this3.state = {
id: false,
shared_with_user: false
};
(0, _auto_bind2.default)(_this3);
return _this3;
}
(0, _createClass3.default)(Recycled, [{
key: 'toggle_shared_with_user',
value: function toggle_shared_with_user() {
this.setState((0, _utilities.property_toggler)("shared_with_user"));
}
}, {
key: 'create_field',
value: function create_field() {
this.props.recycle_field(this.state);
}
}, {
key: 'render',
value: function render() {
var _this4 = this;
return _react2.default.createElement(
'div',
{ className: cx('new-field-form__mission') },
_react2.default.createElement(
'div',
null,
_react2.default.createElement(_exclusive_field2.default, {
values: (0, _utilities.array_from_hash)(this.props.existing_fields),
selected: this.state.id,
on_clear: function on_clear() {
return _this4.setState({ id: false });
},
name: "Quel champ voulez-vous réutiliser ?",
on_select_value: function on_select_value(id) {
return _this4.setState({ id: id });
},
allow_creating_values: false
})
),
_react2.default.createElement(Setting, {
label: 'Visible par le candidat',
toggle: this.toggle_shared_with_user
}),
_react2.default.createElement(
'div',
{ className: cx('new-field-form__create-button') },
_react2.default.createElement(
_button2.default,
{ disabled: !this.state.id, onClick: this.create_field, icon: _md.MdDone },
'Cr\xE9er le nouveau champ'
)
)
);
}
}]);
return Recycled;
}(_react.Component);
var New = function (_Component3) {
(0, _inherits3.default)(New, _Component3);
function New(props) {
(0, _classCallCheck3.default)(this, New);
var _this5 = (0, _possibleConstructorReturn3.default)(this, (New.__proto__ || (0, _getPrototypeOf2.default)(New)).call(this, props));
_this5.state = {
name: "",
category: "non_exclusive",
shared_with_user: true,
shared_by_user: true
};
(0, _auto_bind2.default)(_this5);
return _this5;
}
(0, _createClass3.default)(New, [{
key: 'componentDidMount',
value: function componentDidMount() {
this.name_input.focus();
}
}, {
key: 'create_field',
value: function create_field() {
this.props.create_field(this.state);
}
}, {
key: 'update_field',
value: function update_field(state) {
this.setState(state);
}
}, {
key: 'get_settings',
value: function get_settings() {
var _this6 = this;
switch (this.props.type) {
case "user":
return [{
label: "Renseigné par le candidat",
initial: this.state.shared_by_user,
toggle: function toggle() {
return _this6.setState((0, _utilities.property_toggler)("shared_by_user"));
}
}];
case "mission":
return [{
label: "Visible par le candidat",
initial: this.state.shared_with_user,
toggle: function toggle() {
return _this6.setState((0, _utilities.property_toggler)("shared_with_user"));
}
}];
default:
return [];
}
}
}, {
key: 'render_setting',
value: function render_setting(setting, index) {
return _react2.default.createElement(Setting, (0, _extends3.default)({ key: index }, setting));
}
}, {
key: 'render',
value: function render() {
var _this7 = this;
var type = this.props.type;
var _state = this.state,
name = _state.name,
category = _state.category;
return _react2.default.createElement(
'div',
{ className: cx('new-field-form', 'new-field-form_new') },
_react2.default.createElement(
'div',
{ className: cx('new-field-form__parameters') },
_react2.default.createElement(FieldNameInput, { ref: function ref(name_input) {
return _this7.name_input = name_input;
}, on_change: this.update_field }),
_react2.default.createElement(FieldCategorySelection, {
on_change: this.update_field,
options: (0, _keys2.default)(examples[type]),
examples: examples[type][category]
})
),
this.get_settings().map(this.render_setting),
_react2.default.createElement(
'div',
{ className: cx('new-field-form__create-button') },
_react2.default.createElement(
_button2.default,
{ disabled: name.trim().length == 0, onClick: this.create_field, icon: _md.MdDone },
'Cr\xE9er le nouveau champ'
)
)
);
}
}]);
return New;
}(_react.Component);
var FieldNameInput = function (_Component4) {
(0, _inherits3.default)(FieldNameInput, _Component4);
function FieldNameInput(props) {
(0, _classCallCheck3.default)(this, FieldNameInput);
var _this8 = (0, _possibleConstructorReturn3.default)(this, (FieldNameInput.__proto__ || (0, _getPrototypeOf2.default)(FieldNameInput)).call(this, props));
_this8.state = {
name: ""
};
(0, _auto_bind2.default)(_this8);
return _this8;
}
(0, _createClass3.default)(FieldNameInput, [{
key: 'focus',
value: function focus() {
this.input.focus();
}
}, {
key: 'onChange',
value: function onChange(_ref) {
var name = _ref.target.value;
var state = { name: name };
this.setState(state);
this.props.on_change(state);
}
}, {
key: 'render',
value: function render() {
var _this9 = this;
return _react2.default.createElement('input', {
ref: function ref(input) {
return _this9.input = input;
},
className: cx('new-field-form__name-input'),
type: 'text',
placeholder: "Nom",
value: this.state.name,
onChange: this.onChange
});
}
}]);
return FieldNameInput;
}(_react.Component);
var FieldCategorySelection = function (_Component5) {
(0, _inherits3.default)(FieldCategorySelection, _Component5);
function FieldCategorySelection(props) {
(0, _classCallCheck3.default)(this, FieldCategorySelection);
var _this10 = (0, _possibleConstructorReturn3.default)(this, (FieldCategorySelection.__proto__ || (0, _getPrototypeOf2.default)(FieldCategorySelection)).call(this, props));
_this10.state = {
category: 'non_exclusive'
};
(0, _auto_bind2.default)(_this10);
return _this10;
}
(0, _createClass3.default)(FieldCategorySelection, [{
key: 'on_change',
value: function on_change(category) {
var state = { category: category };
this.setState(state);
this.props.on_change(state);
}
}, {
key: 'make_option',
value: function make_option(id) {
var names = {
comment: 'Texte libre',
non_exclusive: 'Multi-valeur à choix multiples',
exclusive: 'Multi-valeur à choix unique',
file: 'Document stocké',
template: 'Document g\xE9n\xE9r\xE9 \xE0 partir d\'un mod\xE8le',
computed: 'Valeur calculée'
};
return { id: id, name: names[id] };
}
}, {
key: 'render',
value: function render() {
var _props = this.props,
options = _props.options,
examples = _props.examples;
return _react2.default.createElement(
'div',
{ className: cx('new-field-form__category-selection') },
_react2.default.createElement(_exclusive_field2.default, {
values: options.map(this.make_option),
selected: this.state.category,
name: "Catégorie",
on_select_value: this.on_change,
allow_creating_values: false,
searchable: false
}),
_react2.default.createElement(
'div',
{ className: cx('new-field-form__category-selection-examples') },
examples
)
);
}
}]);
return FieldCategorySelection;
}(_react.Component);
var Setting = function (_Component6) {
(0, _inherits3.default)(Setting, _Component6);
function Setting(props) {
(0, _classCallCheck3.default)(this, Setting);
var _this11 = (0, _possibleConstructorReturn3.default)(this, (Setting.__proto__ || (0, _getPrototypeOf2.default)(Setting)).call(this, props));
_this11.state = {
checked: props.initial
};
(0, _auto_bind2.default)(_this11);
return _this11;
}
(0, _createClass3.default)(Setting, [{
key: 'toggle',
value: function toggle() {
this.setState((0, _utilities.property_toggler)('checked'));
this.props.toggle();
}
}, {
key: 'render',
value: function render() {
var label = this.props.label;
return _react2.default.createElement(
'div',
{ onClick: this.toggle, className: cx('new-field-form__setting', { 'new-field-form__setting_checked': this.state.checked }) },
this.state.checked ? _react2.default.createElement(_md.MdCheckBox, null) : _react2.default.createElement(_md.MdCheckBoxOutlineBlank, null),
_react2.default.createElement(
'div',
{ className: cx('new-field-form__setting-label') },
label
)
);
}
}]);
return Setting;
}(_react.Component);
NewFieldForm.defaultProps = {
create_field: function create_field() {},
existing_fields: {},
type: 'mission'
};
exports.default = NewFieldForm;