mirror of
https://github.com/Microsoft/vscode
synced 2024-10-12 14:30:13 +00:00
Add featured filter
This commit is contained in:
parent
b26c08da6c
commit
5a0df839e3
|
@ -162,7 +162,7 @@ class Query {
|
|||
withFilter(filterType: FilterType, ...values: string[]): Query {
|
||||
const criteria = [
|
||||
...this.state.criteria,
|
||||
...values.map(value => ({ filterType, value }))
|
||||
...values.length ? values.map(value => ({ filterType, value })) : [{ filterType }]
|
||||
];
|
||||
|
||||
return new Query(assign({}, this.state, { criteria }));
|
||||
|
@ -441,6 +441,12 @@ export class ExtensionGalleryService implements IExtensionGalleryService {
|
|||
return '';
|
||||
});
|
||||
|
||||
// Use featured filter
|
||||
text = text.replace(/\bfeatured(\s+|\b|$)/g, () => {
|
||||
query = query.withFilter(FilterType.Featured);
|
||||
return '';
|
||||
});
|
||||
|
||||
text = text.trim();
|
||||
|
||||
if (text) {
|
||||
|
|
|
@ -1757,7 +1757,28 @@ export class ShowPopularExtensionsAction extends Action {
|
|||
return this.viewletService.openViewlet(VIEWLET_ID, true)
|
||||
.then(viewlet => viewlet?.getViewPaneContainer() as IExtensionsViewPaneContainer)
|
||||
.then(viewlet => {
|
||||
viewlet.search('@sort:installs ');
|
||||
viewlet.search('@popular ');
|
||||
viewlet.focus();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export class PredefinedExtensionFilterAction extends Action {
|
||||
|
||||
constructor(
|
||||
id: string,
|
||||
label: string,
|
||||
private readonly filter: string,
|
||||
@IViewletService private readonly viewletService: IViewletService
|
||||
) {
|
||||
super(id, label, undefined, true);
|
||||
}
|
||||
|
||||
run(): Promise<void> {
|
||||
return this.viewletService.openViewlet(VIEWLET_ID, true)
|
||||
.then(viewlet => viewlet?.getViewPaneContainer() as IExtensionsViewPaneContainer)
|
||||
.then(viewlet => {
|
||||
viewlet.search(`${this.filter} `);
|
||||
viewlet.focus();
|
||||
});
|
||||
}
|
||||
|
|
|
@ -19,9 +19,10 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti
|
|||
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
|
||||
import { IExtensionsWorkbenchService, IExtensionsViewPaneContainer, VIEWLET_ID, AutoUpdateConfigurationKey, CloseExtensionDetailsOnViewChangeKey } from '../common/extensions';
|
||||
import {
|
||||
ShowRecommendedExtensionsAction, ShowPopularExtensionsAction,
|
||||
ClearExtensionsInputAction, ChangeSortAction, UpdateAllAction, CheckForUpdatesAction, DisableAllAction, EnableAllAction,
|
||||
EnableAutoUpdateAction, DisableAutoUpdateAction, ShowBuiltInExtensionsAction, InstallVSIXAction, SearchCategoryAction, RecentlyPublishedExtensionsAction, ShowInstalledExtensionsAction, ShowOutdatedExtensionsAction, ShowDisabledExtensionsAction, ShowEnabledExtensionsAction
|
||||
EnableAutoUpdateAction, DisableAutoUpdateAction, ShowBuiltInExtensionsAction, InstallVSIXAction, SearchCategoryAction,
|
||||
RecentlyPublishedExtensionsAction, ShowInstalledExtensionsAction, ShowOutdatedExtensionsAction, ShowDisabledExtensionsAction,
|
||||
ShowEnabledExtensionsAction, PredefinedExtensionFilterAction
|
||||
} from 'vs/workbench/contrib/extensions/browser/extensionsActions';
|
||||
import { IExtensionManagementService, IExtensionGalleryService } from 'vs/platform/extensionManagement/common/extensionManagement';
|
||||
import { IWorkbenchExtensionEnablementService, IExtensionManagementServerService, IExtensionManagementServer } from 'vs/workbench/services/extensionManagement/common/extensionManagement';
|
||||
|
@ -508,9 +509,10 @@ export class ExtensionsViewPaneContainer extends ViewPaneContainer implements IE
|
|||
|
||||
if (this.extensionGalleryService.isEnabled()) {
|
||||
filterActions.splice(0, 0, ...[
|
||||
this.instantiationService.createInstance(ShowPopularExtensionsAction, ShowPopularExtensionsAction.ID, localize('most popular filter', "Most Popular")),
|
||||
this.instantiationService.createInstance(PredefinedExtensionFilterAction, 'extensions.filter.featured', localize('featured filter', "Featured"), '@featured'),
|
||||
this.instantiationService.createInstance(PredefinedExtensionFilterAction, 'extensions.filter.popular', localize('most popular filter', "Most Popular"), '@popular'),
|
||||
this.instantiationService.createInstance(PredefinedExtensionFilterAction, 'extensions.filter.recommended', localize('most popular recommended', "Recommended"), '@recommended'),
|
||||
this.instantiationService.createInstance(RecentlyPublishedExtensionsAction, RecentlyPublishedExtensionsAction.ID, localize('recently published filter', "Recently Published")),
|
||||
this.instantiationService.createInstance(ShowRecommendedExtensionsAction, ShowRecommendedExtensionsAction.ID, localize('recomended filter', "Recommended")),
|
||||
new SubmenuAction('workbench.extensions.action.filterExtensionsByCategory', localize('filter by category', "Category"), EXTENSION_CATEGORIES.map(category => this.instantiationService.createInstance(SearchCategoryAction, `extensions.actions.searchByCategory.${category}`, category, category))),
|
||||
new Separator(),
|
||||
]);
|
||||
|
@ -566,7 +568,14 @@ export class ExtensionsViewPaneContainer extends ViewPaneContainer implements IE
|
|||
}
|
||||
|
||||
private normalizedQuery(): string {
|
||||
return this.searchBox ? this.searchBox.getValue().replace(/@category/g, 'category').replace(/@tag:/g, 'tag:').replace(/@ext:/g, 'ext:') : '';
|
||||
return this.searchBox
|
||||
? this.searchBox.getValue()
|
||||
.replace(/@category/g, 'category')
|
||||
.replace(/@tag:/g, 'tag:')
|
||||
.replace(/@ext:/g, 'ext:')
|
||||
.replace(/@featured/g, 'featured')
|
||||
.replace(/@popular/g, '@sort:installs')
|
||||
: '';
|
||||
}
|
||||
|
||||
saveState(): void {
|
||||
|
|
Loading…
Reference in a new issue