Skip to content

Commit

Permalink
Improve connection quickpick and status bar item (#1258)
Browse files Browse the repository at this point in the history
* Deprecate `sqltools.showStatusbar` setting

* Clarify ownership of our status bar item

* Use `+` codicon for connection picker toolbar button
Our dark-mode SVG became invisible on default color theme

* Show `+` button on connection quickpick when no connections exist
  • Loading branch information
gjsjohnmurray authored Jan 2, 2024
1 parent b0dd32a commit 3bb336d
Show file tree
Hide file tree
Showing 5 changed files with 16 additions and 11 deletions.
3 changes: 2 additions & 1 deletion packages/extension/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -433,7 +433,8 @@
"sqltools.showStatusbar": {
"type": "boolean",
"default": true,
"description": "Toggle statusbar visibility."
"description": "Toggle statusbar item visibility.",
"deprecationMessage": "Deprecated. Use statusbar context menu option instead."
},
"sqltools.disableChordKeybindings": {
"type": "boolean",
Expand Down
9 changes: 4 additions & 5 deletions packages/plugins/connection-manager/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,13 @@ import { getDataPath, SESSION_FILES_DIRNAME } from '@sqltools/util/path';
import { extractConnName, getQueryParameters } from '@sqltools/util/query';
import { isEmpty } from '@sqltools/util/validation';
import Context from '@sqltools/vscode/context';
import { getIconPaths } from '@sqltools/vscode/icons';
import { getOrCreateEditor, getSelectedText, readInput } from '@sqltools/vscode/utils';
import { getEditorQueryDetails } from '@sqltools/vscode/utils/query';
import { quickPick, quickPickSearch } from '@sqltools/vscode/utils/quickPick';
import path from 'path';
import { promises as fs } from 'fs';
import { file } from 'tempy';
import { CancellationTokenSource, commands, ConfigurationTarget, env as vscodeEnv, Progress, ProgressLocation, QuickPickItem, TextDocument, TextEditor, Uri, window, workspace } from 'vscode';
import { CancellationTokenSource, commands, ConfigurationTarget, env as vscodeEnv, Progress, ProgressLocation, QuickPickItem, TextDocument, TextEditor, ThemeIcon, Uri, window, workspace } from 'vscode';
import CodeLensPlugin from '../codelens/extension';
import { ConnectRequest, DisconnectRequest, ForceListRefresh, GetChildrenForTreeItemRequest, GetConnectionPasswordRequest, GetConnectionsRequest, GetInsertQueryRequest, ProgressNotificationComplete, ProgressNotificationCompleteParams, ProgressNotificationStart, ProgressNotificationStartParams, ReleaseResultsRequest, RunCommandRequest, GetResultsRequest, SearchConnectionItemsRequest, TestConnectionRequest } from './contracts';
import DependencyManager from './dependency-manager/extension';
Expand Down Expand Up @@ -568,11 +567,11 @@ export class ConnectionManagerPlugin implements IExtensionPlugin {
matchOnDescription: true,
matchOnDetail: true,
placeHolder: 'Pick a connection',
placeHolderDisabled: 'You don\'t have any connections yet.',
title: 'Connections',
placeHolderDisabled: 'You don\'t have any connections defined yet. Use the \'+\' button above to add one.',
title: 'SQLTools Connections',
buttons: [
{
iconPath: getIconPaths('add-connection'),
iconPath: new ThemeIcon('add'),
tooltip: 'Add New Connection',
cb: () => commands.executeCommand(`${EXT_NAMESPACE}.openAddConnectionScreen`),
} as any,
Expand Down
6 changes: 4 additions & 2 deletions packages/plugins/connection-manager/status-bar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,19 @@ import { EXT_NAMESPACE } from '@sqltools/util/constants';
let statusBar: StatusBarItem & { setText: (text?: string) => void };

statusBar = <typeof statusBar>window.createStatusBarItem(StatusBarAlignment.Left, 10);
statusBar.tooltip = 'Select a connection';
statusBar.name = 'SQLTools Connection';
statusBar.tooltip = 'Select a SQLTools connection';
statusBar.command = `${EXT_NAMESPACE}.selectConnection`;

statusBar.setText = text => (statusBar.text = `$(database) ${text || 'Connect'}`);

statusBar.setText();

// The sqltools.showStatusbar setting has been deprecated. Use statusbar context menu option instead, which has priority over this one.
const updateVisibility = () => Config.showStatusbar ? statusBar.show() : statusBar.hide();

updateVisibility();

Config.addOnUpdateHook(({ event }) => event.affectsConfig('showStatusbar') && updateVisibility);
Config.addOnUpdateHook(({ event }) => event.affectsConfig('showStatusbar') && updateVisibility());

export default statusBar;
2 changes: 1 addition & 1 deletion packages/types/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -516,7 +516,7 @@ export interface ISettings {
*/
autoConnectTo?: string | string[];
/**
* Help SQLTools development.
* Deprecated. Use statusbar context menu option instead.
* @type {boolean}
* @default true
* @memberof ISettings
Expand Down
7 changes: 5 additions & 2 deletions packages/vscode/utils/quickPick.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,16 @@ export async function quickPick<T = QuickPickItem | any>(
qPick.hide();
});

// Handle case discrepancy between our property name and the vscode one
qPick.placeholder = qPickOptions.placeHolder;
delete qPickOptions.placeHolder;

Object.keys(qPickOptions).forEach(k => {
qPick[k] = qPickOptions[k];
});
qPick.items = items;
qPick.enabled = items.length > 0;

if (!qPick.enabled) qPick.placeholder = placeHolderDisabled || qPick.placeholder;
if (!items.length) qPick.placeholder = placeHolderDisabled || qPick.placeholder;

qPick.title = `${qPickOptions.title || 'Items'} (${items.length})`;

Expand Down

0 comments on commit 3bb336d

Please sign in to comment.