instantjob-recruiter-client
Version:
a set of tools for creating an instantjob recruiter react client
386 lines (312 loc) • 13.3 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _taggedTemplateLiteral2 = require('babel-runtime/helpers/taggedTemplateLiteral');
var _taggedTemplateLiteral3 = _interopRequireDefault(_taggedTemplateLiteral2);
var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
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 _templateObject = (0, _taggedTemplateLiteral3.default)(['\n flex: 1;\n position: relative;\n display: flex;\n align-items: stretch;\n flex-direction: column;\n padding: 0 10px;\n'], ['\n flex: 1;\n position: relative;\n display: flex;\n align-items: stretch;\n flex-direction: column;\n padding: 0 10px;\n']),
_templateObject2 = (0, _taggedTemplateLiteral3.default)(['\n display: flex;\n align-items: center;\n justify-content: space-between;\n'], ['\n display: flex;\n align-items: center;\n justify-content: space-between;\n']),
_templateObject3 = (0, _taggedTemplateLiteral3.default)(['\n display: flex;\n align-items: center;\n font-weight: 500;\n color: ', ';\n font-size: 16px;\n'], ['\n display: flex;\n align-items: center;\n font-weight: 500;\n color: ', ';\n font-size: 16px;\n']),
_templateObject4 = (0, _taggedTemplateLiteral3.default)(['\n ', '\n margin: 0 20px;\n ', '\n'], ['\n ', '\n margin: 0 20px;\n ', '\n']),
_templateObject5 = (0, _taggedTemplateLiteral3.default)(['\n color: ', ';\n '], ['\n color: ', ';\n ']),
_templateObject6 = (0, _taggedTemplateLiteral3.default)(['\n ', '\n margin: 0 10px;\n font-size: 20px;\n'], ['\n ', '\n margin: 0 10px;\n font-size: 20px;\n']),
_templateObject7 = (0, _taggedTemplateLiteral3.default)(['\n width: 120px;\n display: flex;\n justify-content: center;\n font-size: ', ';\n'], ['\n width: 120px;\n display: flex;\n justify-content: center;\n font-size: ', ';\n']),
_templateObject8 = (0, _taggedTemplateLiteral3.default)(['\n ', '\n'], ['\n ', '\n']),
_templateObject9 = (0, _taggedTemplateLiteral3.default)(['\n display: flex;\n align-items: center;\n'], ['\n display: flex;\n align-items: center;\n']);
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _styledComponents = require('styled-components');
var _styledComponents2 = _interopRequireDefault(_styledComponents);
var _reactRedux = require('react-redux');
var _md = require('react-icons/lib/md');
var _filterable_list = require('components/filterable_list/filterable_list');
var _filterable_list2 = _interopRequireDefault(_filterable_list);
var _deals_list = require('components/deals_list');
var _filters = require('components/filterable_list/filters');
var _filters2 = _interopRequireDefault(_filters);
var _filters_title = require('components/filterable_list/filters_title');
var _filters_title2 = _interopRequireDefault(_filters_title);
var _side_panel = require('components/utils/side_panel');
var _side_panel2 = _interopRequireDefault(_side_panel);
var _button = require('components/utils/button');
var _button2 = _interopRequireDefault(_button);
var _month = require('./month');
var _month2 = _interopRequireDefault(_month);
var _week = require('./week');
var _week2 = _interopRequireDefault(_week);
var _auto_bind = require('common/auto_bind');
var _auto_bind2 = _interopRequireDefault(_auto_bind);
var _persistent_state = require('common/persistent_state');
var _persistent_state2 = _interopRequireDefault(_persistent_state);
var _styles = require('common/styles');
var _event_system = require('common/event_system');
var _event_system2 = _interopRequireDefault(_event_system);
var _moment = require('common/moment');
var _moment2 = _interopRequireDefault(_moment);
var _utilities = require('common/utilities');
var _fields = require('selectors/fields');
var _recruiters = require('selectors/recruiters');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var Calendar = function (_Component) {
(0, _inherits3.default)(Calendar, _Component);
function Calendar(props) {
(0, _classCallCheck3.default)(this, Calendar);
var _this = (0, _possibleConstructorReturn3.default)(this, (Calendar.__proto__ || (0, _getPrototypeOf2.default)(Calendar)).call(this, props));
_this.state = _persistent_state2.default.get(props.persistent_state_key, (0, _extends3.default)({}, _filterable_list2.default.initial_state, (0, _deals_list.get_initial_state)(props), {
month_view: true
}));
(0, _auto_bind2.default)(_this);
return _this;
}
(0, _createClass3.default)(Calendar, [{
key: 'componentDidMount',
value: function componentDidMount() {
this.unregister_show_week = _event_system2.default.register('calendar-show-week', this.show_week);
}
}, {
key: 'componentWillUnmount',
value: function componentWillUnmount() {
this.unregister_show_week();
_persistent_state2.default.store(this.props.persistent_state_key, this.state);
}
}, {
key: 'set_state',
value: function set_state(arg) {
this.setState(arg);
}
}, {
key: 'get_filters_and_missions',
value: function get_filters_and_missions() {
var _props = this.props,
missions = _props.missions,
fields = _props.fields,
workplaces = _props.workplaces,
recruiters = _props.recruiters,
get_mission_elements = _props.get_mission_elements;
var _get_filters_and_deal = (0, _deals_list.get_filters_and_deals)({
deals: missions,
fields: fields,
workplaces: workplaces,
recruiters: recruiters,
state: this.state,
setState: this.set_state
}),
filtered_missions = _get_filters_and_deal.deals,
filters = _get_filters_and_deal.filters;
return {
missions: filtered_missions.map(function (mission) {
return (0, _extends3.default)({}, mission, get_mission_elements(mission));
}),
filters: filters
};
}
}, {
key: 'open_filters',
value: function open_filters() {
this.filters.open();
}
}, {
key: 'show_month',
value: function show_month() {
this.setState({ month_view: true });
}
}, {
key: 'show_week',
value: function show_week() {
this.setState({ month_view: false });
}
}, {
key: 'render',
value: function render() {
var _this2 = this;
var _props2 = this.props,
action = _props2.action,
other_eventables = _props2.other_eventables;
var _get_filters_and_miss = this.get_filters_and_missions(),
missions = _get_filters_and_miss.missions,
filters = _get_filters_and_miss.filters;
var month_view = this.state.month_view;
var View = month_view ? _month2.default : _week2.default;
return _react2.default.createElement(
Container,
null,
_react2.default.createElement(
_filters2.default,
{ component: _side_panel2.default, componentRef: function componentRef(filters) {
return _this2.filters = filters;
} },
filters
),
_react2.default.createElement(
Header,
null,
_react2.default.createElement(
ToggleFilters,
{ onClick: this.open_filters },
_react2.default.createElement(_filters_title2.default, null)
),
_react2.default.createElement(
Side,
null,
_react2.default.createElement(
Action,
{ onClick: this.show_month, selected: month_view },
'Mois'
),
_react2.default.createElement(
Action,
{ onClick: this.show_week, selected: !month_view },
'Semaine'
),
_react2.default.createElement(Navigation, { month_view: month_view }),
_react2.default.createElement(_button2.default, action)
)
),
_react2.default.createElement(
View,
null,
[].concat((0, _toConsumableArray3.default)(missions), (0, _toConsumableArray3.default)(other_eventables))
)
);
}
}]);
return Calendar;
}(_react.Component);
Calendar.defaultProps = {
missions: [],
other_eventables: [],
get_mission_elements: function get_mission_elements() {
return {
icon: '!',
color: 'pink'
};
}
};
var Navigation = function (_Component2) {
(0, _inherits3.default)(Navigation, _Component2);
function Navigation(props) {
(0, _classCallCheck3.default)(this, Navigation);
var _this3 = (0, _possibleConstructorReturn3.default)(this, (Navigation.__proto__ || (0, _getPrototypeOf2.default)(Navigation)).call(this, props));
_this3.state = {
week: (0, _moment2.default)()
};
(0, _auto_bind2.default)(_this3);
return _this3;
}
(0, _createClass3.default)(Navigation, [{
key: 'translate',
value: function translate(by) {
var unit = this.props.month_view ? 'month' : 'week';
this.navigate_to((0, _moment2.default)(this.state.week).startOf(unit).add(by, unit));
}
}, {
key: 'show_previous',
value: function show_previous() {
this.translate(-1);
}
}, {
key: 'show_next',
value: function show_next() {
this.translate(1);
}
}, {
key: 'show_today',
value: function show_today() {
this.navigate_to((0, _moment2.default)());
}
}, {
key: 'get_time',
value: function get_time() {
var week = this.state.week;
if (this.props.month_view) {
return (0, _utilities.capitalize_first_letter)(week.format("MMMM"));
} else {
var start = (0, _moment2.default)(week).startOf('week'),
end = (0, _moment2.default)(week).endOf('week');
return start.format("D MMM") + ' - ' + end.format("D MMM");
}
}
}, {
key: 'componentDidMount',
value: function componentDidMount() {
var _this4 = this;
this.stop_retrieving_calendar_week = _event_system2.default.retrieve('calendar-week', function (week) {
return _this4.setState({ week: week });
});
}
}, {
key: 'componentWillUnmount',
value: function componentWillUnmount() {
this.stop_retrieving_calendar_week();
}
}, {
key: 'navigate_to',
value: function navigate_to(day) {
_event_system2.default.post('calendar-week', (0, _moment2.default)(day).startOf('week'));
}
}, {
key: 'render',
value: function render() {
return _react2.default.createElement(
NavigationContainer,
null,
_react2.default.createElement(
Arrow,
{ onClick: this.show_previous },
_react2.default.createElement(_md.MdKeyboardArrowLeft, null)
),
_react2.default.createElement(
Time,
{ month_view: this.props.month_view },
this.get_time()
),
_react2.default.createElement(
Arrow,
{ onClick: this.show_next },
_react2.default.createElement(_md.MdKeyboardArrowRight, null)
),
_react2.default.createElement(
Action,
{ onClick: this.show_today },
'Aujourd\'hui'
)
);
}
}]);
return Navigation;
}(_react.Component);
exports.default = (0, _reactRedux.connect)(function (state) {
return {
fields: (0, _fields.get_missions_fields)(state),
workplaces: state.missions.workplaces,
recruiters: (0, _recruiters.get_recruiters)(state)
};
})(Calendar);
var Container = _styledComponents2.default.div(_templateObject);
var Header = _styledComponents2.default.div(_templateObject2);
var Side = _styledComponents2.default.div(_templateObject3, (0, _styles.color)('black', 'light'));
var Action = _styledComponents2.default.div(_templateObject4, _styles.link, function (_ref) {
var selected = _ref.selected;
return selected ? (0, _styledComponents.css)(_templateObject5, (0, _styles.color)('action')) : '';
});
var Arrow = _styledComponents2.default.div(_templateObject6, _styles.link);
var Time = _styledComponents2.default.div(_templateObject7, function (_ref2) {
var month_view = _ref2.month_view;
return month_view ? '18px' : '14px';
});
var ToggleFilters = _styledComponents2.default.div(_templateObject8, _styles.link);
var NavigationContainer = _styledComponents2.default.div(_templateObject9);