forked from facebookarchive/atom-ide-ui
-
Notifications
You must be signed in to change notification settings - Fork 0
/
pane-item.js
61 lines (54 loc) · 2.04 KB
/
pane-item.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/**
* Copyright (c) 2017-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
* @flow
* @format
*/
import invariant from 'assert';
import {observableFromSubscribeFunction} from 'nuclide-commons/event';
import dockForLocation from './dock-for-location';
export function isPending(paneItem: atom$PaneItem) {
const pane = atom.workspace.paneForItem(paneItem);
return pane && pane.getPendingItem() === paneItem;
}
export function observePendingStateEnd(paneItem: atom$PaneItem) {
invariant(
typeof paneItem.onDidTerminatePendingState === 'function',
'paneItem must implement onDidTerminatePendingState method',
);
return observableFromSubscribeFunction(
paneItem.onDidTerminatePendingState.bind(paneItem),
);
}
const CONSOLE_VIEW_URI = 'atom://nuclide/console';
export function isConsoleVisible(): boolean {
const consolePane = atom.workspace.paneForURI(CONSOLE_VIEW_URI);
const consoleItem = consolePane && consolePane.itemForURI(CONSOLE_VIEW_URI);
const paneContainer = atom.workspace.paneContainerForItem(consoleItem);
// This visibility check has been taken from
// https://github.com/atom/atom/blob/v1.28.2/src/workspace.js#L1084
return (
(paneContainer === atom.workspace.getCenter() ||
(paneContainer != null && paneContainer.isVisible())) &&
consoleItem === consolePane.getActiveItem()
);
}
export function showDockedPaneItem(item: Object) {
const pane = atom.workspace.paneForItem(item);
// We want to call workspace.open but it has no option to
// show the new pane without activating it.
// So instead we find the dock for the pane and show() it directly.
// https://github.com/atom/atom/issues/16007
if (pane != null) {
pane.activateItem(item);
const dock = dockForLocation(pane.getContainer().getLocation());
if (dock != null) {
dock.show();
}
}
}