fix(vscode): distinguish filtered marketplace empty states

Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com>
This commit is contained in:
markijbema
2026-06-24 14:09:12 +00:00
co-authored by kiloconnect[bot]
parent 04d454b5b3
commit 5fe01e71c7
3 changed files with 18 additions and 8 deletions
@@ -7,7 +7,12 @@ import {
type MarketplaceRemoveContext,
} from "../../src/services/marketplace/actions"
import type { McpMarketplaceItem } from "../../src/services/marketplace/types"
import { filterItems, installedScopes, retain } from "../../webview-ui/src/components/marketplace/utils"
import {
filterItems,
hasRelevantItems,
installedScopes,
retain,
} from "../../webview-ui/src/components/marketplace/utils"
import type { MarketplaceItem } from "../../webview-ui/src/types/marketplace"
const project = "/repo"
@@ -133,11 +138,10 @@ describe("Marketplace installation metadata", () => {
"mcp:warehouse": { vscodeExtension: ["data.warehouse"] },
}).map((item) => item.id),
).toEqual(["reviewer", "warehouse"])
expect(
filterItems(items, metadata, "warehouse", "all", [], [], {}, true, {
"agent:reviewer": { filename: ["*.review.ts"] },
}),
).toEqual([])
const relevance = { "agent:reviewer": { filename: ["*.review.ts"] } }
expect(filterItems(items, metadata, "warehouse", "all", [], [], {}, true, relevance)).toEqual([])
expect(hasRelevantItems(items, relevance)).toBe(true)
expect(hasRelevantItems(items, {})).toBe(false)
})
})
@@ -12,7 +12,7 @@ import type {
MarketplaceRelevanceMetadata,
} from "../../types/marketplace"
import { useLanguage } from "../../context/language"
import { filterItems, retain } from "./utils"
import { filterItems, hasRelevantItems, retain } from "./utils"
import { ItemCard } from "./ItemCard"
import { MarketplaceContribute } from "./MarketplaceContribute"
@@ -171,7 +171,9 @@ export const MarketplaceListView = (props: Props) => {
fallback={
<div class="marketplace-empty">
<span class="marketplace-empty-message">
{relevant() ? props.relevantEmptyMessage : props.emptyMessage}
{relevant() && !hasRelevantItems(props.items, props.relevance)
? props.relevantEmptyMessage
: props.emptyMessage}
</span>
<MarketplaceContribute />
</div>
@@ -4,6 +4,10 @@ import type {
MarketplaceRelevanceMetadata,
} from "../../types/marketplace"
export function hasRelevantItems(items: MarketplaceItem[], relevance: MarketplaceRelevanceMetadata): boolean {
return items.some((item) => !!relevance[`${item.type}:${item.id}`])
}
export function retain<T>(selected: T[], available: T[]): T[] {
const values = new Set(available)
const next = selected.filter((value) => values.has(value))