mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-27 01:25:36 -05:00
Notebooks View: Do not recenter view when selecting a notebook that is visible (#15442)
* do not focus element when tree item is visible * reset reveal behavior * add comment
This commit is contained in:
@@ -68,7 +68,7 @@ export class BookTreeViewProvider implements vscode.TreeDataProvider<BookTreeIte
|
||||
book && // The notebook is part of a book in the viewlet (otherwise nothing to reveal)
|
||||
(this._openAsUntitled ? notebookPath?.scheme === 'untitled' : notebookPath?.scheme !== 'untitled')) // The notebook is of the correct type for this tree view
|
||||
{
|
||||
await this.revealDocumentInTreeView(notebookPath);
|
||||
await this.revealDocumentInTreeView(notebookPath, true, true);
|
||||
}
|
||||
});
|
||||
this._extensionContext.subscriptions.push(azdata.nb.registerNavigationProvider(this));
|
||||
@@ -391,7 +391,13 @@ export class BookTreeViewProvider implements vscode.TreeDataProvider<BookTreeIte
|
||||
}
|
||||
}
|
||||
|
||||
async revealDocumentInTreeView(uri?: vscode.Uri, shouldReveal: boolean = true): Promise<BookTreeItem | undefined> {
|
||||
/**
|
||||
* Reveals the given uri in the tree view.
|
||||
* @param uri The path to the notebook. If it's undefined then the current active notebook is revealed in the Tree View.
|
||||
* @param shouldReveal A boolean to expand the parent node.
|
||||
* @param shouldFocus A boolean to focus on the tree item.
|
||||
*/
|
||||
async revealDocumentInTreeView(uri: vscode.Uri | undefined, shouldReveal: boolean, shouldFocus: boolean): Promise<BookTreeItem | undefined> {
|
||||
let bookItem: BookTreeItem;
|
||||
let notebookPath: string;
|
||||
// If no uri is passed in, try to use the current active notebook editor
|
||||
@@ -405,17 +411,18 @@ export class BookTreeViewProvider implements vscode.TreeDataProvider<BookTreeIte
|
||||
}
|
||||
|
||||
if (shouldReveal || this._bookViewer?.visible) {
|
||||
bookItem = notebookPath ? await this.findAndExpandParentNode(notebookPath) : undefined;
|
||||
bookItem = notebookPath ? await this.findAndExpandParentNode(notebookPath, shouldFocus) : undefined;
|
||||
// Select + focus item in viewlet if books viewlet is already open, or if we pass in variable
|
||||
if (bookItem?.contextValue && bookItem.contextValue !== 'pinnedNotebook') {
|
||||
// Note: 3 is the maximum number of levels that the vscode APIs let you expand to
|
||||
await this._bookViewer.reveal(bookItem, { select: true, focus: true, expand: true });
|
||||
await this._bookViewer.reveal(bookItem, { select: true, focus: shouldFocus, expand: true });
|
||||
}
|
||||
}
|
||||
|
||||
return bookItem;
|
||||
}
|
||||
|
||||
async findAndExpandParentNode(notebookPath: string): Promise<BookTreeItem | undefined> {
|
||||
async findAndExpandParentNode(notebookPath: string, shouldFocus: boolean): Promise<BookTreeItem | undefined> {
|
||||
notebookPath = notebookPath.replace(/\\/g, '/');
|
||||
const parentBook = this.books.find(b => notebookPath.indexOf(b.bookPath) > -1);
|
||||
if (!parentBook) {
|
||||
@@ -470,7 +477,7 @@ export class BookTreeViewProvider implements vscode.TreeDataProvider<BookTreeIte
|
||||
}
|
||||
try {
|
||||
// TO DO: Check why the reveal fails during initial load with 'TreeError [bookTreeView] Tree element not found'
|
||||
await this._bookViewer.reveal(bookItemToExpand, { select: false, focus: true, expand: true });
|
||||
await this._bookViewer.reveal(bookItemToExpand, { select: false, focus: shouldFocus, expand: true });
|
||||
}
|
||||
catch (e) {
|
||||
console.error(e);
|
||||
|
||||
@@ -150,9 +150,9 @@ export async function activate(extensionContext: vscode.ExtensionContext): Promi
|
||||
|
||||
azdata.nb.onDidChangeActiveNotebookEditor(e => {
|
||||
if (e.document.uri.scheme === 'untitled') {
|
||||
providedBookTreeViewProvider.revealDocumentInTreeView(e.document.uri, false);
|
||||
providedBookTreeViewProvider.revealDocumentInTreeView(e.document.uri, false, false);
|
||||
} else {
|
||||
bookTreeViewProvider.revealDocumentInTreeView(e.document.uri, false);
|
||||
bookTreeViewProvider.revealDocumentInTreeView(e.document.uri, false, false);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -244,7 +244,7 @@ describe('BooksTreeViewTests', function () {
|
||||
|
||||
it('revealActiveDocumentInViewlet should return correct bookItem for highlight', async () => {
|
||||
let notebook1Path = path.join(rootFolderPath, 'Book', 'content', 'notebook1.ipynb').replace(/\\/g, '/');
|
||||
let currentSelection = await bookTreeViewProvider.findAndExpandParentNode(notebook1Path);
|
||||
let currentSelection = await bookTreeViewProvider.findAndExpandParentNode(notebook1Path, true);
|
||||
should(currentSelection).not.be.undefined();
|
||||
equalBookItems(currentSelection, expectedNotebook1);
|
||||
});
|
||||
@@ -329,7 +329,7 @@ describe('BooksTreeViewTests', function () {
|
||||
|
||||
it('revealActiveDocumentInViewlet should return correct bookItem for highlight', async () => {
|
||||
let notebook1Path = path.join(rootFolderPath, 'Book', 'content', 'notebook1.ipynb').replace(/\\/g, '/');
|
||||
let currentSelection = await providedbookTreeViewProvider.findAndExpandParentNode(notebook1Path);
|
||||
let currentSelection = await providedbookTreeViewProvider.findAndExpandParentNode(notebook1Path, true);
|
||||
should(currentSelection).not.be.undefined();
|
||||
equalBookItems(currentSelection, expectedNotebook1);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user