diff --git a/src/Contracts/ViewModels.ts b/src/Contracts/ViewModels.ts
index c44a86041..38091f611 100644
--- a/src/Contracts/ViewModels.ts
+++ b/src/Contracts/ViewModels.ts
@@ -286,6 +286,7 @@ export interface TabOptions {
rid?: string;
node?: TreeNode;
theme?: string;
+ index?: number;
}
export interface DocumentsTabOptions extends TabOptions {
diff --git a/src/Explorer/Explorer.tsx b/src/Explorer/Explorer.tsx
index f5368679b..3c93ee918 100644
--- a/src/Explorer/Explorer.tsx
+++ b/src/Explorer/Explorer.tsx
@@ -1394,7 +1394,11 @@ export default class Explorer {
tab.hashLocation().startsWith(hashLocation)
) as TerminalTab[];
- const index = terminalTabs.length + 1;
+ let index = 1;
+ if (terminalTabs.length > 0) {
+ index = terminalTabs[terminalTabs.length - 1].index + 1;
+ }
+
const newTab = new TerminalTab({
account: userContext.databaseAccount,
tabKind: ViewModels.CollectionTabKind.Terminal,
@@ -1407,6 +1411,7 @@ export default class Explorer {
onLoadStartKey: null,
container: this,
kind: kind,
+ index: index,
});
this.tabsManager.activateNewTab(newTab);
diff --git a/src/Explorer/Tabs/TabsBase.ts b/src/Explorer/Tabs/TabsBase.ts
index 2130a6715..feb0d2e03 100644
--- a/src/Explorer/Tabs/TabsBase.ts
+++ b/src/Explorer/Tabs/TabsBase.ts
@@ -16,6 +16,7 @@ import { TabsManager } from "./TabsManager";
// TODO: Use specific actions for logging telemetry data
export default class TabsBase extends WaitsForTemplateViewModel {
private static id = 0;
+ public readonly index: number;
public closeTabButton: ViewModels.Button;
public node: ViewModels.TreeNode;
public collection: ViewModels.CollectionBase;
@@ -35,6 +36,7 @@ export default class TabsBase extends WaitsForTemplateViewModel {
constructor(options: ViewModels.TabOptions) {
super();
+ this.index = options.index;
this._theme = ThemeUtility.getMonacoTheme(options.theme);
this.node = options.node;
this.collection = options.collection;
diff --git a/src/Explorer/Tabs/TerminalTab.tsx b/src/Explorer/Tabs/TerminalTab.tsx
index b3126d790..c0c7bf8c6 100644
--- a/src/Explorer/Tabs/TerminalTab.tsx
+++ b/src/Explorer/Tabs/TerminalTab.tsx
@@ -1,3 +1,4 @@
+import { Spinner, SpinnerSize } from "@fluentui/react";
import * as ko from "knockout";
import * as React from "react";
import { ReactAdapter } from "../../Bindings/ReactBindingHandler";
@@ -33,7 +34,7 @@ class NotebookTerminalComponentAdapter implements ReactAdapter {
databaseAccount={this.getDatabaseAccount()}
/>
) : (
- <>>
+
);
}
}
@@ -51,7 +52,11 @@ export default class TerminalTab extends TabsBase {
() => userContext?.databaseAccount
);
this.notebookTerminalComponentAdapter.parameters = ko.computed(() => {
- if (this.isTemplateReady() && this.container.isNotebookEnabled()) {
+ if (
+ this.isTemplateReady() &&
+ this.container.isNotebookEnabled() &&
+ this.container.notebookServerInfo().notebookServerEndpoint
+ ) {
return true;
}
return false;
diff --git a/src/Explorer/Tree/Collection.ts b/src/Explorer/Tree/Collection.ts
index ffd236573..ac3cc06ca 100644
--- a/src/Explorer/Tree/Collection.ts
+++ b/src/Explorer/Tree/Collection.ts
@@ -690,14 +690,23 @@ export default class Collection implements ViewModels.Collection {
}
public onNewMongoShellClick() {
- const id = this.container.tabsManager.getTabs(ViewModels.CollectionTabKind.MongoShell).length + 1;
+ const mongoShellTabs = this.container.tabsManager.getTabs(
+ ViewModels.CollectionTabKind.MongoShell
+ ) as MongoShellTab[];
+
+ let index = 1;
+ if (mongoShellTabs.length > 0) {
+ index = mongoShellTabs[mongoShellTabs.length - 1].index + 1;
+ }
+
const mongoShellTab: MongoShellTab = new MongoShellTab({
tabKind: ViewModels.CollectionTabKind.MongoShell,
- title: "Shell " + id,
+ title: "Shell " + index,
tabPath: "",
collection: this,
node: this,
hashLocation: `${Constants.HashRoutePrefixes.collectionsWithIds(this.databaseId, this.id())}/mongoShell`,
+ index: index,
});
this.container.tabsManager.activateNewTab(mongoShellTab);