UNPKG

instantjob-recruiter-client

Version:

a set of tools for creating an instantjob recruiter react client

155 lines (124 loc) 4.54 kB
'use strict'; 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;