Skip to content

Commit

Permalink
move extension containers actions to search (#197533)
Browse files Browse the repository at this point in the history
  • Loading branch information
sandy081 committed Nov 6, 2023
1 parent 912c2d9 commit f8cfa70
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import { EnablementState, IExtensionManagementServerService, IWorkbenchExtension
import { IExtensionIgnoredRecommendationsService, IExtensionRecommendationsService } from 'vs/workbench/services/extensionRecommendations/common/extensionRecommendations';
import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions, IWorkbenchContribution } from 'vs/workbench/common/contributions';
import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors';
import { VIEWLET_ID, IExtensionsWorkbenchService, IExtensionsViewPaneContainer, TOGGLE_IGNORE_EXTENSION_ACTION_ID, INSTALL_EXTENSION_FROM_VSIX_COMMAND_ID, WORKSPACE_RECOMMENDATIONS_VIEW_ID, IWorkspaceRecommendedExtensionsView, AutoUpdateConfigurationKey, HasOutdatedExtensionsContext, SELECT_INSTALL_VSIX_EXTENSION_COMMAND_ID, LIST_WORKSPACE_UNSUPPORTED_EXTENSIONS_COMMAND_ID, ExtensionEditorTab, THEME_ACTIONS_GROUP, INSTALL_ACTIONS_GROUP, OUTDATED_EXTENSIONS_VIEW_ID, CONTEXT_HAS_GALLERY, IExtension } from 'vs/workbench/contrib/extensions/common/extensions';
import { VIEWLET_ID, IExtensionsWorkbenchService, IExtensionsViewPaneContainer, TOGGLE_IGNORE_EXTENSION_ACTION_ID, INSTALL_EXTENSION_FROM_VSIX_COMMAND_ID, WORKSPACE_RECOMMENDATIONS_VIEW_ID, IWorkspaceRecommendedExtensionsView, AutoUpdateConfigurationKey, HasOutdatedExtensionsContext, SELECT_INSTALL_VSIX_EXTENSION_COMMAND_ID, LIST_WORKSPACE_UNSUPPORTED_EXTENSIONS_COMMAND_ID, ExtensionEditorTab, THEME_ACTIONS_GROUP, INSTALL_ACTIONS_GROUP, OUTDATED_EXTENSIONS_VIEW_ID, CONTEXT_HAS_GALLERY, IExtension, extensionsSearchActionsMenu } from 'vs/workbench/contrib/extensions/common/extensions';
import { ReinstallAction, InstallSpecificVersionOfExtensionAction, ConfigureWorkspaceRecommendedExtensionsAction, ConfigureWorkspaceFolderRecommendedExtensionsAction, PromptExtensionInstallFailureAction, SearchExtensionsAction, SwitchToPreReleaseVersionAction, SwitchToReleasedVersionAction, SetColorThemeAction, SetFileIconThemeAction, SetProductIconThemeAction, ClearLanguageAction } from 'vs/workbench/contrib/extensions/browser/extensionsActions';
import { ExtensionsInput } from 'vs/workbench/contrib/extensions/common/extensionsInput';
import { ExtensionEditor } from 'vs/workbench/contrib/extensions/browser/extensionEditor';
Expand Down Expand Up @@ -885,12 +885,11 @@ class ExtensionsContributions extends Disposable implements IWorkbenchContributi
});

const extensionsFilterSubMenu = new MenuId('extensionsFilterSubMenu');
MenuRegistry.appendMenuItem(MenuId.ViewContainerTitle, <ISubmenuItem>{
MenuRegistry.appendMenuItem(extensionsSearchActionsMenu, <ISubmenuItem>{
submenu: extensionsFilterSubMenu,
title: localize('filterExtensions', "Filter Extensions..."),
when: ContextKeyExpr.equals('viewContainer', VIEWLET_ID),
group: 'navigation',
order: 1,
order: 2,
icon: filterIcon,
});

Expand Down Expand Up @@ -1128,10 +1127,9 @@ class ExtensionsContributions extends Disposable implements IWorkbenchContributi
f1: true,
precondition: SearchHasTextContext,
menu: {
id: MenuId.ViewContainerTitle,
when: ContextKeyExpr.equals('viewContainer', VIEWLET_ID),
id: extensionsSearchActionsMenu,
group: 'navigation',
order: 3,
order: 1,
},
run: async (accessor: ServicesAccessor) => {
const viewPaneContainer = accessor.get(IViewsService).getActiveViewPaneContainerWithId(VIEWLET_ID);
Expand Down
20 changes: 16 additions & 4 deletions src/vs/workbench/contrib/extensions/browser/extensionsViewlet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import { append, $, Dimension, hide, show, DragAndDropObserver, trackFocus } fro
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
import { IExtensionsWorkbenchService, IExtensionsViewPaneContainer, VIEWLET_ID, CloseExtensionDetailsOnViewChangeKey, INSTALL_EXTENSION_FROM_VSIX_COMMAND_ID, WORKSPACE_RECOMMENDATIONS_VIEW_ID, AutoCheckUpdatesConfigurationKey, OUTDATED_EXTENSIONS_VIEW_ID, CONTEXT_HAS_GALLERY } from '../common/extensions';
import { IExtensionsWorkbenchService, IExtensionsViewPaneContainer, VIEWLET_ID, CloseExtensionDetailsOnViewChangeKey, INSTALL_EXTENSION_FROM_VSIX_COMMAND_ID, WORKSPACE_RECOMMENDATIONS_VIEW_ID, AutoCheckUpdatesConfigurationKey, OUTDATED_EXTENSIONS_VIEW_ID, CONTEXT_HAS_GALLERY, extensionsSearchActionsMenu } from '../common/extensions';
import { InstallLocalExtensionsInRemoteAction, InstallRemoteExtensionsInLocalAction } from 'vs/workbench/contrib/extensions/browser/extensionsActions';
import { IExtensionManagementService } from 'vs/platform/extensionManagement/common/extensionManagement';
import { IWorkbenchExtensionEnablementService, IExtensionManagementServerService, IExtensionManagementServer } from 'vs/workbench/services/extensionManagement/common/extensionManagement';
Expand Down Expand Up @@ -62,6 +62,8 @@ import { extname } from 'vs/base/common/resources';
import { areSameExtensions } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
import { ILocalizedString } from 'vs/platform/action/common/action';
import { registerNavigableContainer } from 'vs/workbench/browser/actions/widgetNavigationCommands';
import { MenuWorkbenchToolBar } from 'vs/platform/actions/browser/toolbar';
import { createActionViewItem } from 'vs/platform/actions/browser/menuEntryActionViewItem';

export const DefaultViewsContext = new RawContextKey<boolean>('defaultExtensionViews', true);
export const ExtensionsSortByContext = new RawContextKey<string>('extensionsSortByValue', '');
Expand Down Expand Up @@ -554,7 +556,9 @@ export class ExtensionsViewPaneContainer extends ViewPaneContainer implements IE

const searchValue = this.searchViewletState['query.value'] ? this.searchViewletState['query.value'] : '';

this.searchBox = this._register(this.instantiationService.createInstance(SuggestEnabledInput, `${VIEWLET_ID}.searchbox`, header, {
const searchContainer = append(header, $('.extensions-search-container'));

this.searchBox = this._register(this.instantiationService.createInstance(SuggestEnabledInput, `${VIEWLET_ID}.searchbox`, searchContainer, {
triggerCharacters: ['@'],
sortKey: (item: string) => {
if (item.indexOf(':') === -1) { return 'a'; }
Expand All @@ -571,12 +575,20 @@ export class ExtensionsViewPaneContainer extends ViewPaneContainer implements IE
}

this._register(this.searchBox.onInputDidChange(() => {
this.sortByContextKey.set(Query.parse(this.searchBox!.getValue() || '').sortBy);
this.sortByContextKey.set(Query.parse(this.searchBox?.getValue() ?? '').sortBy);
this.triggerSearch();
}, this));

this._register(this.searchBox.onShouldFocusResults(() => this.focusListView(), this));

const controlElement = append(searchContainer, $('.extensions-search-actions-container'));
this._register(this.instantiationService.createInstance(MenuWorkbenchToolBar, controlElement, extensionsSearchActionsMenu, {
toolbarOptions: {
primaryGroup: () => true,
},
actionViewItemProvider: action => createActionViewItem(this.instantiationService, action)
}));

// Register DragAndDrop support
this._register(new DragAndDropObserver(this.root, {
onDragEnd: (e: DragEvent) => undefined,
Expand Down Expand Up @@ -644,7 +656,7 @@ export class ExtensionsViewPaneContainer extends ViewPaneContainer implements IE
this.root.classList.toggle('narrow', dimension.width <= 250);
this.root.classList.toggle('mini', dimension.width <= 200);
}
this.searchBox?.layout(new Dimension(dimension.width - 34 - /*padding*/8, 20));
this.searchBox?.layout(new Dimension(dimension.width - 34 - /*padding*/8 - (24 * 2), 20));
super.layout(new Dimension(dimension.width, dimension.height - 41));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,11 @@
padding: 5px 12px 6px 20px;
}

.extensions-viewlet > .header > .search-box {
.extensions-viewlet > .header > .extensions-search-container {
position: relative;
}

.extensions-viewlet > .header > .extensions-search-container > .search-box {
width: 100%;
height: 28px;
line-height: 18px;
Expand All @@ -34,6 +38,16 @@
-moz-appearance: textfield;
}

.extensions-viewlet > .header > .extensions-search-container > .extensions-search-actions-container {
display: flex;
align-items: center;
position: absolute;
top: 0;
right: 0;
height: 100%;
}


.extensions-viewlet > .extensions {
height: calc(100% - 41px);
}
Expand Down
3 changes: 3 additions & 0 deletions src/vs/workbench/contrib/extensions/common/extensions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import { RawContextKey } from 'vs/platform/contextkey/common/contextkey';
import { IExtensionsStatus } from 'vs/workbench/services/extensions/common/extensions';
import { IExtensionEditorOptions } from 'vs/workbench/contrib/extensions/common/extensionsInput';
import { ProgressLocation } from 'vs/platform/progress/common/progress';
import { MenuId } from 'vs/platform/actions/common/actions';

export const VIEWLET_ID = 'workbench.view.extensions';

Expand Down Expand Up @@ -199,3 +200,5 @@ export const CONTEXT_HAS_GALLERY = new RawContextKey<boolean>('hasGallery', fals
// Context Menu Groups
export const THEME_ACTIONS_GROUP = '_theme_';
export const INSTALL_ACTIONS_GROUP = '0_install';

export const extensionsSearchActionsMenu = new MenuId('extensionsSearchActionsMenu');

0 comments on commit f8cfa70

Please sign in to comment.