Path: blob/main/src/vs/workbench/contrib/preferences/browser/settingsSearchMenu.ts
3296 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { IActionViewItemOptions } from '../../../../base/browser/ui/actionbar/actionViewItems.js';6import { AnchorAlignment } from '../../../../base/browser/ui/contextview/contextview.js';7import { DropdownMenuActionViewItem } from '../../../../base/browser/ui/dropdown/dropdownActionViewItem.js';8import { IAction, IActionRunner } from '../../../../base/common/actions.js';9import { SuggestController } from '../../../../editor/contrib/suggest/browser/suggestController.js';10import { localize } from '../../../../nls.js';11import { IContextMenuService } from '../../../../platform/contextview/browser/contextView.js';12import { SuggestEnabledInput } from '../../codeEditor/browser/suggestEnabledInput/suggestEnabledInput.js';13import { EXTENSION_SETTING_TAG, FEATURE_SETTING_TAG, GENERAL_TAG_SETTING_TAG, ID_SETTING_TAG, LANGUAGE_SETTING_TAG, MODIFIED_SETTING_TAG, POLICY_SETTING_TAG } from '../common/preferences.js';1415export class SettingsSearchFilterDropdownMenuActionViewItem extends DropdownMenuActionViewItem {16private readonly suggestController: SuggestController | null;1718constructor(19action: IAction,20options: IActionViewItemOptions,21actionRunner: IActionRunner | undefined,22private readonly searchWidget: SuggestEnabledInput,23@IContextMenuService contextMenuService: IContextMenuService24) {25super(action,26{ getActions: () => this.getActions() },27contextMenuService,28{29...options,30actionRunner,31classNames: action.class,32anchorAlignmentProvider: () => AnchorAlignment.RIGHT,33menuAsChild: true34}35);3637this.suggestController = SuggestController.get(this.searchWidget.inputWidget);38}3940override render(container: HTMLElement): void {41super.render(container);42}4344private doSearchWidgetAction(queryToAppend: string, triggerSuggest: boolean) {45this.searchWidget.setValue(this.searchWidget.getValue().trimEnd() + ' ' + queryToAppend);46this.searchWidget.focus();47if (triggerSuggest && this.suggestController) {48this.suggestController.triggerSuggest();49}50}5152/**53* The created action appends a query to the search widget search string. It optionally triggers suggestions.54*/55private createAction(id: string, label: string, tooltip: string, queryToAppend: string, triggerSuggest: boolean): IAction {56return {57id,58label,59tooltip,60class: undefined,61enabled: true,62run: () => { this.doSearchWidgetAction(queryToAppend, triggerSuggest); }63};64}6566/**67* The created action appends a query to the search widget search string, if the query does not exist.68* Otherwise, it removes the query from the search widget search string.69* The action does not trigger suggestions after adding or removing the query.70*/71private createToggleAction(id: string, label: string, tooltip: string, queryToAppend: string): IAction {72const splitCurrentQuery = this.searchWidget.getValue().split(' ');73const queryContainsQueryToAppend = splitCurrentQuery.includes(queryToAppend);74return {75id,76label,77tooltip,78class: undefined,79enabled: true,80checked: queryContainsQueryToAppend,81run: () => {82if (!queryContainsQueryToAppend) {83const trimmedCurrentQuery = this.searchWidget.getValue().trimEnd();84const newQuery = trimmedCurrentQuery ? trimmedCurrentQuery + ' ' + queryToAppend : queryToAppend;85this.searchWidget.setValue(newQuery);86} else {87const queryWithRemovedTags = this.searchWidget.getValue().split(' ')88.filter(word => word !== queryToAppend).join(' ');89this.searchWidget.setValue(queryWithRemovedTags);90}91this.searchWidget.focus();92}93};94}9596getActions(): IAction[] {97return [98this.createToggleAction(99'modifiedSettingsSearch',100localize('modifiedSettingsSearch', "Modified"),101localize('modifiedSettingsSearchTooltip', "Add or remove modified settings filter"),102`@${MODIFIED_SETTING_TAG}`103),104this.createAction(105'extSettingsSearch',106localize('extSettingsSearch', "Extension ID..."),107localize('extSettingsSearchTooltip', "Add extension ID filter"),108`@${EXTENSION_SETTING_TAG}`,109true110),111this.createAction(112'featuresSettingsSearch',113localize('featureSettingsSearch', "Feature..."),114localize('featureSettingsSearchTooltip', "Add feature filter"),115`@${FEATURE_SETTING_TAG}`,116true117),118this.createAction(119'tagSettingsSearch',120localize('tagSettingsSearch', "Tag..."),121localize('tagSettingsSearchTooltip', "Add tag filter"),122`@${GENERAL_TAG_SETTING_TAG}`,123true124),125this.createAction(126'langSettingsSearch',127localize('langSettingsSearch', "Language..."),128localize('langSettingsSearchTooltip', "Add language ID filter"),129`@${LANGUAGE_SETTING_TAG}`,130true131),132this.createToggleAction(133'onlineSettingsSearch',134localize('onlineSettingsSearch', "Online services"),135localize('onlineSettingsSearchTooltip', "Show settings for online services"),136'@tag:usesOnlineServices'137),138this.createToggleAction(139'policySettingsSearch',140localize('policySettingsSearch', "Policy services"),141localize('policySettingsSearchTooltip', "Show settings for policy services"),142`@${POLICY_SETTING_TAG}`143),144this.createAction(145'idSettingsSearch',146localize('idSettingsSearch', "Setting ID"),147localize('idSettingsSearchTooltip', "Add Setting ID filter"),148`@${ID_SETTING_TAG}`,149false150)151];152}153}154155156