instantjob-recruiter-client
Version:
a set of tools for creating an instantjob recruiter react client
155 lines (124 loc) • 4.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _promise = require('babel-runtime/core-js/promise');
var _promise2 = _interopRequireDefault(_promise);
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
exports.init_websocket = init_websocket;
var _es6Actioncable = require('es6-actioncable');
var _es6Actioncable2 = _interopRequireDefault(_es6Actioncable);
var _constants = require('common/constants');
var _moment = require('common/moment');
var _moment2 = _interopRequireDefault(_moment);
var _request = require('common/request');
var _request2 = _interopRequireDefault(_request);
var _utilities = require('common/utilities');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var Websocket = function () {
function Websocket(websocket_params) {
(0, _classCallCheck3.default)(this, Websocket);
this.consumer = _es6Actioncable2.default.createConsumer((0, _constants.make_websocket_path)(websocket_params));
_constants.DEV && console.log('connection succeeded ' + (0, _moment2.default)().format());
}
(0, _createClass3.default)(Websocket, [{
key: 'get_consumer',
value: function get_consumer() {
if (!this.consumer) {
this.connect();
}
return this.consumer;
}
}, {
key: 'close_connection',
value: function close_connection() {
if (this.consumer) {
_es6Actioncable2.default.endConsumer(this.consumer);
}
delete this.consumer;
}
}]);
return Websocket;
}();
var websocket = void 0;
function init_websocket(websocket_params) {
websocket = new Websocket(websocket_params);
}
var Channel = function () {
function Channel(channel_name, params) {
var _this = this;
(0, _classCallCheck3.default)(this, Channel);
this.registered_events = {};
this.store_actions = {};
this.destroy_actions = {};
this.waiting = {};
this.channel_name = channel_name + 'Channel';
this.subscription = websocket.get_consumer().subscriptions.create((0, _extends3.default)({ channel: this.channel_name }, params), {
connected: function connected() {
_constants.DEV && console.log('connected to ' + _this.channel_name);
},
received: function received(_ref) {
var event = _ref.event,
action = _ref.action,
model = _ref.model,
url = _ref.url,
object = _ref.object,
id = _ref.id;
if (event) {
_constants.DEV && console.info(event, object);
var callback = _this.registered_events[event];
callback && callback(object);
} else if (action == 'store') {
_constants.DEV && console.info(action, model, url);
if (!_this.waiting[model]) {
_this.waiting[model] = {};
}
if ((0, _utilities.set_count)(_this.waiting[model]) == 0) {
setTimeout(function () {
var callback = _this.store_actions[model];
callback && _promise2.default.all((0, _utilities.array_from_set)(_this.waiting[model]).map(function (url) {
return _request2.default.get(url);
})).then(callback);
_this.waiting[model] = {};
}, 500);
}
_this.waiting[model][url] = true;
} else if (action == 'destroy') {
_constants.DEV && console.info(action, model, id);
var _callback = _this.destroy_actions[model];
_callback && _callback(id);
}
}
});
}
(0, _createClass3.default)(Channel, [{
key: 'register',
value: function register(event, callback) {
this.registered_events[event] = callback;
}
}, {
key: 'register_store',
value: function register_store(model, callback) {
this.store_actions[model] = callback;
}
}, {
key: 'register_destroy',
value: function register_destroy(model, callback) {
this.destroy_actions[model] = callback;
}
}, {
key: 'unsubscribe',
value: function unsubscribe() {
if (this.subscription) {
this.subscription.unsubscribe();
}
}
}]);
return Channel;
}();
exports.default = Channel;