UNPKG

atom-nuclide

Version:

A unified developer experience for web and mobile development, built as a suite of features on top of Atom to provide hackability and the support of an active community.

172 lines (138 loc) 6.1 kB
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } /* * Copyright (c) 2015-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the license found in the LICENSE file in * the root directory of this source tree. */ var _assert2; function _assert() { return _assert2 = _interopRequireDefault(require('assert')); } var _nuclideRemoteConnection2; function _nuclideRemoteConnection() { return _nuclideRemoteConnection2 = require('../../nuclide-remote-connection'); } var _reactForAtom2; function _reactForAtom() { return _reactForAtom2 = require('react-for-atom'); } var _atom2; function _atom() { return _atom2 = require('atom'); } var _StatusBarTile2; function _StatusBarTile() { return _StatusBarTile2 = _interopRequireDefault(require('./StatusBarTile')); } var _commonsNodeNuclideUri2; function _commonsNodeNuclideUri() { return _commonsNodeNuclideUri2 = _interopRequireDefault(require('../../commons-node/nuclideUri')); } var _ConnectionState2; function _ConnectionState() { return _ConnectionState2 = _interopRequireDefault(require('./ConnectionState')); } var RemoteProjectsController = (function () { function RemoteProjectsController() { _classCallCheck(this, RemoteProjectsController); this._statusBarTile = null; this._disposables = new (_atom2 || _atom()).CompositeDisposable(); this._statusSubscription = null; this._disposables.add(atom.workspace.onDidChangeActivePaneItem(this._disposeSubscription.bind(this)), atom.workspace.onDidStopChangingActivePaneItem(this._updateConnectionStatus.bind(this))); } _createClass(RemoteProjectsController, [{ key: '_disposeSubscription', value: function _disposeSubscription() { var subscription = this._statusSubscription; if (subscription) { this._disposables.remove(subscription); subscription.dispose(); this._statusSubscription = null; } } }, { key: '_updateConnectionStatus', value: function _updateConnectionStatus(paneItem) { var _this = this; this._disposeSubscription(); if (!atom.workspace.isTextEditor(paneItem)) { this._renderStatusBar((_ConnectionState2 || _ConnectionState()).default.NONE); return; } // Flow does not understand that isTextEditor refines the type to atom$TextEditor var textEditor = paneItem; var fileUri = textEditor.getPath(); if (!fileUri) { return; } if ((_commonsNodeNuclideUri2 || _commonsNodeNuclideUri()).default.isLocal(fileUri)) { this._renderStatusBar((_ConnectionState2 || _ConnectionState()).default.LOCAL, fileUri); return; } var updateStatus = function updateStatus(isConnected) { _this._renderStatusBar(isConnected ? (_ConnectionState2 || _ConnectionState()).default.CONNECTED : (_ConnectionState2 || _ConnectionState()).default.DISCONNECTED, fileUri); }; var connection = (_nuclideRemoteConnection2 || _nuclideRemoteConnection()).ServerConnection.getForUri(fileUri); if (connection == null) { updateStatus(false); return; } var socket = connection.getSocket(); updateStatus(socket.isConnected()); this._statusSubscription = socket.onStatus(updateStatus); this._disposables.add(this._statusSubscription); } }, { key: 'consumeStatusBar', value: function consumeStatusBar(statusBar) { var _this2 = this; this._statusBarDiv = document.createElement('div'); this._statusBarDiv.className = 'nuclide-remote-projects inline-block'; var tooltip = atom.tooltips.add(this._statusBarDiv, { title: 'Click to show details of connection.' }); (0, (_assert2 || _assert()).default)(this._statusBarDiv); var rightTile = statusBar.addLeftTile({ item: this._statusBarDiv, priority: -99 }); this._disposables.add(new (_atom2 || _atom()).Disposable(function () { (0, (_assert2 || _assert()).default)(_this2._statusBarDiv); var parentNode = _this2._statusBarDiv.parentNode; if (parentNode) { parentNode.removeChild(_this2._statusBarDiv); } (_reactForAtom2 || _reactForAtom()).ReactDOM.unmountComponentAtNode(_this2._statusBarDiv); _this2._statusBarDiv = null; rightTile.destroy(); tooltip.dispose(); })); var textEditor = atom.workspace.getActiveTextEditor(); if (textEditor != null) { this._updateConnectionStatus(textEditor); } } }, { key: '_renderStatusBar', value: function _renderStatusBar(connectionState, fileUri) { if (!this._statusBarDiv) { return; } var component = (_reactForAtom2 || _reactForAtom()).ReactDOM.render((_reactForAtom2 || _reactForAtom()).React.createElement((_StatusBarTile2 || _StatusBarTile()).default, { connectionState: connectionState, fileUri: fileUri }), this._statusBarDiv); (0, (_assert2 || _assert()).default)(component instanceof (_StatusBarTile2 || _StatusBarTile()).default); this._statusBarTile = component; } }, { key: 'destroy', value: function destroy() { this._disposables.dispose(); } }]); return RemoteProjectsController; })(); module.exports = RemoteProjectsController;