Skip to content

Commit 99f5c40

Browse files
chenwuji2000-cyberclaudemaxdeviant
authored andcommitted
extensions_ui: Apply category filter to dev extensions (#48954)
Following up on #49183 which fixed the category filter for remote extensions. This PR applies the same category filter logic to **dev extensions**. Previously, dev extensions were always shown regardless of the selected category filter (e.g., "Themes", "Languages"). Changes: - Add `filtered_dev_extension_indices` to track which dev extensions match the active `provides_filter` - Add `dev_extension_matches_provides()` helper to map `ExtensionManifest` fields to `ExtensionProvides` variants - Update `render_extensions()` and list count to use filtered dev extension indices Release Notes: - Fixed extension category filter not applying to dev extensions in the extensions panel. --------- Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Marshall Bowers <git@maxdeviant.com>
1 parent a023f39 commit 99f5c40

File tree

1 file changed

+19
-3
lines changed

1 file changed

+19
-3
lines changed

crates/extensions_ui/src/extensions_ui.rs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,7 @@ pub struct ExtensionsPage {
320320
remote_extension_entries: Vec<ExtensionMetadata>,
321321
dev_extension_entries: Vec<Arc<ExtensionManifest>>,
322322
filtered_remote_extension_indices: Vec<usize>,
323+
filtered_dev_extension_indices: Vec<usize>,
323324
query_editor: Entity<Editor>,
324325
query_contains_error: bool,
325326
provides_filter: Option<ExtensionProvides>,
@@ -381,6 +382,7 @@ impl ExtensionsPage {
381382
filter: ExtensionFilter::All,
382383
dev_extension_entries: Vec::new(),
383384
filtered_remote_extension_indices: Vec::new(),
385+
filtered_dev_extension_indices: Vec::new(),
384386
remote_extension_entries: Vec::new(),
385387
query_contains_error: false,
386388
provides_filter,
@@ -493,6 +495,19 @@ impl ExtensionsPage {
493495
})
494496
.map(|(ix, _)| ix),
495497
);
498+
499+
self.filtered_dev_extension_indices.clear();
500+
self.filtered_dev_extension_indices.extend(
501+
self.dev_extension_entries
502+
.iter()
503+
.enumerate()
504+
.filter(|(_, manifest)| match self.provides_filter {
505+
Some(provides) => manifest.provides().contains(&provides),
506+
None => true,
507+
})
508+
.map(|(ix, _)| ix),
509+
);
510+
496511
cx.notify();
497512
}
498513

@@ -601,14 +616,15 @@ impl ExtensionsPage {
601616
cx: &mut Context<Self>,
602617
) -> Vec<ExtensionCard> {
603618
let dev_extension_entries_len = if self.filter.include_dev_extensions() {
604-
self.dev_extension_entries.len()
619+
self.filtered_dev_extension_indices.len()
605620
} else {
606621
0
607622
};
608623
range
609624
.map(|ix| {
610625
if ix < dev_extension_entries_len {
611-
let extension = &self.dev_extension_entries[ix];
626+
let dev_ix = self.filtered_dev_extension_indices[ix];
627+
let extension = &self.dev_extension_entries[dev_ix];
612628
self.render_dev_extension(extension, cx)
613629
} else {
614630
let extension_ix =
@@ -1821,7 +1837,7 @@ impl Render for ExtensionsPage {
18211837
.child(v_flex().px_4().size_full().overflow_y_hidden().map(|this| {
18221838
let mut count = self.filtered_remote_extension_indices.len();
18231839
if self.filter.include_dev_extensions() {
1824-
count += self.dev_extension_entries.len();
1840+
count += self.filtered_dev_extension_indices.len();
18251841
}
18261842

18271843
if count == 0 {

0 commit comments

Comments
 (0)