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.

325 lines (283 loc) 12.6 kB
Object.defineProperty(exports, '__esModule', { value: true }); /* * 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 _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; }; })(); var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var _assert2; function _assert() { return _assert2 = _interopRequireDefault(require('assert')); } var _atom2; function _atom() { return _atom2 = require('atom'); } var _electron2; function _electron() { return _electron2 = _interopRequireDefault(require('electron')); } var _CreateBookmarkModalComponent2; function _CreateBookmarkModalComponent() { return _CreateBookmarkModalComponent2 = _interopRequireDefault(require('./CreateBookmarkModalComponent')); } var _DeleteBookmarkModalComponent2; function _DeleteBookmarkModalComponent() { return _DeleteBookmarkModalComponent2 = _interopRequireDefault(require('./DeleteBookmarkModalComponent')); } var _reactForAtom2; function _reactForAtom() { return _reactForAtom2 = require('react-for-atom'); } var _RenameBookmarkModalComponent2; function _RenameBookmarkModalComponent() { return _RenameBookmarkModalComponent2 = _interopRequireDefault(require('./RenameBookmarkModalComponent')); } var _RepositorySectionComponent2; function _RepositorySectionComponent() { return _RepositorySectionComponent2 = _interopRequireDefault(require('./RepositorySectionComponent')); } var _url2; function _url() { return _url2 = _interopRequireDefault(require('url')); } var remote = (_electron2 || _electron()).default.remote; (0, (_assert2 || _assert()).default)(remote != null); var SideBarComponent = (function (_React$Component) { _inherits(SideBarComponent, _React$Component); function SideBarComponent(props) { _classCallCheck(this, SideBarComponent); _get(Object.getPrototypeOf(SideBarComponent.prototype), 'constructor', this).call(this, props); this._disposables = new (_atom2 || _atom()).CompositeDisposable(); this.state = {}; this._confirmCreateBookmark = this._confirmCreateBookmark.bind(this); this._confirmDeleteBookmark = this._confirmDeleteBookmark.bind(this); this._confirmRenameBookmark = this._confirmRenameBookmark.bind(this); this._destroyActiveModal = this._destroyActiveModal.bind(this); this._handleBookmarkClick = this._handleBookmarkClick.bind(this); this._handleBookmarkContextMenu = this._handleBookmarkContextMenu.bind(this); this._handleRepoGearClick = this._handleRepoGearClick.bind(this); this._handleUncommittedChangesClick = this._handleUncommittedChangesClick.bind(this); } _createClass(SideBarComponent, [{ key: 'componentDidMount', value: function componentDidMount() { this._disposables.add(atom.commands.add('atom-workspace', 'core:cancel', this._destroyActiveModal)); } }, { key: 'componentDidUpdate', value: function componentDidUpdate(prevProps, prevState) { if (this.state.activeModalComponent !== prevState.activeModalComponent) { if (prevState.activeModalComponent != null) { this._destroyActiveModal(); } if (this.state.activeModalComponent != null) { this._renderActiveModal(); } } } }, { key: 'componentWillUnmount', value: function componentWillUnmount() { this._destroyActiveModal(); this._disposables.dispose(); if (this._menuPopupTimeout != null) { clearTimeout(this._menuPopupTimeout); } } }, { key: '_confirmCreateBookmark', value: function _confirmCreateBookmark(name, repo) { this.props.createBookmark(name, repo); this.setState({ activeModalComponent: null }); } }, { key: '_confirmDeleteBookmark', value: function _confirmDeleteBookmark(bookmark, repo) { this.props.deleteBookmark(bookmark, repo); this.setState({ activeModalComponent: null }); } }, { key: '_confirmRenameBookmark', value: function _confirmRenameBookmark(bookmark, nextName, repo) { this.props.renameBookmark(bookmark, nextName, repo); this.setState({ activeModalComponent: null }); } }, { key: '_destroyActiveModal', value: function _destroyActiveModal() { var panel = this._activeModalPanel; if (panel != null) { (_reactForAtom2 || _reactForAtom()).ReactDOM.unmountComponentAtNode(panel.getItem()); panel.destroy(); this._activeModalPanel = null; } } }, { key: '_renderActiveModal', value: function _renderActiveModal() { if (this.state.activeModalComponent == null) { return; } var panel = this._activeModalPanel; if (panel == null) { var item = document.createElement('div'); panel = this._activeModalPanel = atom.workspace.addModalPanel({ item: item }); } (_reactForAtom2 || _reactForAtom()).ReactDOM.render(this.state.activeModalComponent, panel.getItem()); } }, { key: '_handleBookmarkClick', value: function _handleBookmarkClick(bookmark, repository) { this.setState({ selectedItem: { bookmark: bookmark, repository: repository, type: 'bookmark' } }); atom.workspace.open((_url2 || _url()).default.format({ hostname: 'view', protocol: 'fb-hg-smartlog', query: { repositoryPath: repository.getPath() }, slashes: true })); } }, { key: '_handleBookmarkContextMenu', value: function _handleBookmarkContextMenu(bookmark, repository, event) { var _this = this; var menu = remote.Menu.buildFromTemplate([{ click: function click() { _this.props.updateToBookmark(bookmark, repository); }, enabled: !bookmark.active, label: 'Update to ' + bookmark.bookmark }, { type: 'separator' }, { click: function click() { _this.setState({ activeModalComponent: (_reactForAtom2 || _reactForAtom()).React.createElement((_DeleteBookmarkModalComponent2 || _DeleteBookmarkModalComponent()).default, { bookmark: bookmark, onCancel: function () { _this.setState({ activeModalComponent: null }); }, onDelete: _this._confirmDeleteBookmark, repository: repository }) }); }, label: 'Delete ' + bookmark.bookmark + '...' }, { click: function click() { _this.setState({ activeModalComponent: (_reactForAtom2 || _reactForAtom()).React.createElement((_RenameBookmarkModalComponent2 || _RenameBookmarkModalComponent()).default, { bookmark: bookmark, onCancel: function () { _this.setState({ activeModalComponent: null }); }, onRename: _this._confirmRenameBookmark, repository: repository }) }); }, label: 'Rename ' + bookmark.bookmark + '...' }]); // Store event position because React cleans up SyntheticEvent objects. // @see https://fb.me/react-event-pooling var clientX = event.clientX; var clientY = event.clientY; this.setState({ selectedItem: { bookmark: bookmark, repository: repository, type: 'bookmark' } }, function () { // Circumvent Electron / OS X render blocking bug. // @see https://github.com/electron/electron/issues/1854 _this._menuPopupTimeout = setTimeout(function () { menu.popup(remote.getCurrentWindow(), clientX, clientY); }, 35); }); } }, { key: '_handleRepoGearClick', value: function _handleRepoGearClick(repo, event) { var _this2 = this; this.setState({ activeModalComponent: (_reactForAtom2 || _reactForAtom()).React.createElement((_CreateBookmarkModalComponent2 || _CreateBookmarkModalComponent()).default, { onCancel: function () { _this2.setState({ activeModalComponent: null }); }, onCreate: this._confirmCreateBookmark, repo: repo }) }); } }, { key: '_handleUncommittedChangesClick', value: function _handleUncommittedChangesClick(repository) { this.setState({ selectedItem: { repository: repository, type: 'uncommitted' } }); atom.commands.dispatch(atom.views.getView(atom.workspace), 'nuclide-diff-view:open'); } }, { key: 'render', value: function render() { var _this3 = this; return (_reactForAtom2 || _reactForAtom()).React.createElement( 'div', { className: 'focusable-panel', style: { flex: 1, overflow: 'auto', position: 'relative', whiteSpace: 'normal' }, tabIndex: '0' }, (_reactForAtom2 || _reactForAtom()).React.createElement( 'ul', { className: 'list-unstyled' }, this.props.projectDirectories.map(function (directory, index) { var repository = _this3.props.projectRepositories.get(directory.getPath()); var repositoryBookmarksIsLoading = repository == null ? null : _this3.props.repositoryBookmarksIsLoading.get(repository); var bookmarks = undefined; var selectedItem = undefined; if (repository != null) { bookmarks = _this3.props.projectBookmarks.get(repository.getPath()); if (_this3.state.selectedItem != null && _this3.state.selectedItem.repository === repository) { selectedItem = _this3.state.selectedItem; } } return (_reactForAtom2 || _reactForAtom()).React.createElement((_RepositorySectionComponent2 || _RepositorySectionComponent()).default, { bookmarks: bookmarks, bookmarksIsLoading: repositoryBookmarksIsLoading, hasSeparator: index > 0, key: directory.getPath(), onBookmarkClick: _this3._handleBookmarkClick, onBookmarkContextMenu: _this3._handleBookmarkContextMenu, onRepoGearClick: _this3._handleRepoGearClick, onUncommittedChangesClick: _this3._handleUncommittedChangesClick, repository: repository, selectedItem: selectedItem, title: directory.getBaseName() }); }) ) ); } }]); return SideBarComponent; })((_reactForAtom2 || _reactForAtom()).React.Component); exports.default = SideBarComponent; module.exports = exports.default;