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.

212 lines (169 loc) 7.95 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 _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })(); exports.getEmptBookShelfState = getEmptBookShelfState; exports.serializeBookShelfState = serializeBookShelfState; exports.deserializeBookShelfState = deserializeBookShelfState; exports.getRepoPathToEditors = getRepoPathToEditors; exports.shortHeadChangedNotification = shortHeadChangedNotification; exports.getShortHeadChangesFromStateStream = getShortHeadChangesFromStateStream; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var _constants2; function _constants() { return _constants2 = require('./constants'); } var _immutable2; function _immutable() { return _immutable2 = _interopRequireDefault(require('immutable')); } var _assert2; function _assert() { return _assert2 = _interopRequireDefault(require('assert')); } var _rxjsBundlesRxUmdMinJs2; function _rxjsBundlesRxUmdMinJs() { return _rxjsBundlesRxUmdMinJs2 = require('rxjs/bundles/Rx.umd.min.js'); } var _commonsAtomFeatureConfig2; function _commonsAtomFeatureConfig() { return _commonsAtomFeatureConfig2 = _interopRequireDefault(require('../../commons-atom/featureConfig')); } var _commonsNodeNuclideUri2; function _commonsNodeNuclideUri() { return _commonsNodeNuclideUri2 = _interopRequireDefault(require('../../commons-node/nuclideUri')); } var _nuclideHgGitBridge2; function _nuclideHgGitBridge() { return _nuclideHgGitBridge2 = require('../../nuclide-hg-git-bridge'); } var _nuclideAnalytics2; function _nuclideAnalytics() { return _nuclideAnalytics2 = require('../../nuclide-analytics'); } function getEmptBookShelfState() { return { repositoryPathToState: (_immutable2 || _immutable()).default.Map() }; } // Maps are serialized as key/value pairs array to match Map `enries` format. function serializeBookShelfState(bookShelfState) { var repositoryPathToState = bookShelfState.repositoryPathToState; var serializedRepositoryPathToState = Array.from(repositoryPathToState.entries()).map(function (_ref) { var _ref2 = _slicedToArray(_ref, 2); var repositoryPath = _ref2[0]; var repositoryState = _ref2[1]; var serializedShortHeadToFileList = { activeShortHead: repositoryState.activeShortHead, shortHeadsToFileList: Array.from(repositoryState.shortHeadsToFileList.entries()) }; return [repositoryPath, serializedShortHeadToFileList]; }); return { repositoryPathToState: serializedRepositoryPathToState }; } function deserializeBookShelfState(serializedBookShelfState) { if (serializedBookShelfState == null || serializedBookShelfState.repositoryPathToState == null) { return getEmptBookShelfState(); } var repositoryPathToState = (_immutable2 || _immutable()).default.Map(serializedBookShelfState.repositoryPathToState.map(function (_ref3) { var _ref32 = _slicedToArray(_ref3, 2); var repositoryPath = _ref32[0]; var repositoryState = _ref32[1]; return [repositoryPath, { activeShortHead: repositoryState.activeShortHead, isRestoring: false, shortHeadsToFileList: (_immutable2 || _immutable()).default.Map(repositoryState.shortHeadsToFileList) }]; })); return { repositoryPathToState: repositoryPathToState }; } function getRepoPathToEditors() { var reposToEditors = new Map(); atom.workspace.getTextEditors().filter(function (textEditor) { return textEditor.getPath() != null && textEditor.getPath() !== ''; }).map(function (textEditor) { return { textEditor: textEditor, repository: (0, (_nuclideHgGitBridge2 || _nuclideHgGitBridge()).repositoryForPath)(textEditor.getPath() || '') }; }).filter(function (_ref4) { var repository = _ref4.repository; return repository != null; }).forEach(function (_ref5) { var repository = _ref5.repository; var textEditor = _ref5.textEditor; (0, (_assert2 || _assert()).default)(repository); var repositoryPath = repository.getWorkingDirectory(); reposToEditors.set(repositoryPath, (reposToEditors.get(repositoryPath) || []).concat([textEditor])); }); return reposToEditors; } function shortHeadChangedNotification(repository, newShortHead, restorePaneItemState) { return (_rxjsBundlesRxUmdMinJs2 || _rxjsBundlesRxUmdMinJs()).Observable.create(function (observer) { var workingDirectoryName = (_commonsNodeNuclideUri2 || _commonsNodeNuclideUri()).default.basename(repository.getWorkingDirectory()); // TODO(most): Should we handle empty bookmark switches differently? var newShortHeadDisplayText = newShortHead.length > 0 ? 'to `' + newShortHead + '`' : ''; var shortHeadChangeNotification = atom.notifications.addInfo('`' + workingDirectoryName + '`\'s active bookmark have changed ' + newShortHeadDisplayText, { detail: 'Would you like to open the files you had active then?\n \n' + 'ProTip: Change the default behavior from \'Nuclide Settings>IDE Settings>Book Shelf\'', dismissable: true, buttons: [{ onDidClick: function onDidClick() { restorePaneItemState(repository, newShortHead); observer.complete(); }, text: 'Open files' }, { onDidClick: function onDidClick() { (_commonsAtomFeatureConfig2 || _commonsAtomFeatureConfig()).default.set((_constants2 || _constants()).ACTIVE_SHORTHEAD_CHANGE_BEHAVIOR_CONFIG, (_constants2 || _constants()).ActiveShortHeadChangeBehavior.ALWAYS_IGNORE); observer.complete(); }, text: 'Always ignore' }] }); var dismissSubscription = shortHeadChangeNotification.onDidDismiss(function () { (0, (_nuclideAnalytics2 || _nuclideAnalytics()).track)('bookshelf-dismiss-restore-prompt'); observer.complete(); }); return function unsubscribe() { dismissSubscription.dispose(); shortHeadChangeNotification.dismiss(); }; }); } function getShortHeadChangesFromStateStream(states) { return states // $FlowFixMe(matthewwithanm): Type this. .pairwise().flatMap(function (_ref6) { var _ref62 = _slicedToArray(_ref6, 2); var oldBookShelfState = _ref62[0]; var newBookShelfState = _ref62[1]; var oldRepositoryPathToState = oldBookShelfState.repositoryPathToState; return (_rxjsBundlesRxUmdMinJs2 || _rxjsBundlesRxUmdMinJs()).Observable.from(Array.from(newBookShelfState.repositoryPathToState.entries()).filter(function (_ref7) { var _ref72 = _slicedToArray(_ref7, 2); var repositoryPath = _ref72[0]; var newRepositoryState = _ref72[1]; var oldRepositoryState = oldRepositoryPathToState.get(repositoryPath); return oldRepositoryState != null && oldRepositoryState.activeShortHead !== newRepositoryState.activeShortHead; }).map(function (_ref8) { var _ref82 = _slicedToArray(_ref8, 2); var repositoryPath = _ref82[0]; var newRepositoryState = _ref82[1]; var activeShortHead = newRepositoryState.activeShortHead; return { repositoryPath: repositoryPath, activeShortHead: activeShortHead }; })); }); }