diff --git a/models/tracker/src/index.ts b/models/tracker/src/index.ts
index 331c4b8c6c..947b93738a 100644
--- a/models/tracker/src/index.ts
+++ b/models/tracker/src/index.ts
@@ -931,6 +931,10 @@ export function createModel (builder: Builder): void {
presenter: tracker.component.ComponentPresenter
})
+ builder.mixin(tracker.class.Component, core.class.Class, view.mixin.AttributeFilterPresenter, {
+ presenter: tracker.component.ComponentFilterValuePresenter
+ })
+
builder.mixin(tracker.class.Project, core.class.Class, view.mixin.ObjectPresenter, {
presenter: tracker.component.ProjectPresenter
})
diff --git a/plugins/tracker-resources/src/components/components/ComponentFilterValuePresenter.svelte b/plugins/tracker-resources/src/components/components/ComponentFilterValuePresenter.svelte
new file mode 100644
index 0000000000..b640cf8b47
--- /dev/null
+++ b/plugins/tracker-resources/src/components/components/ComponentFilterValuePresenter.svelte
@@ -0,0 +1,42 @@
+
+
+
+
+ {#each components as component, i}
+ {#if value && i < MAX_VISIBLE_COMPONENTS}
+
{component.label}
+ {/if}
+ {/each}
+ {#if components.length > MAX_VISIBLE_COMPONENTS}
+
+ +{components.length - MAX_VISIBLE_COMPONENTS}
+
+ {/if}
+
diff --git a/plugins/tracker-resources/src/index.ts b/plugins/tracker-resources/src/index.ts
index 8aa9e54f2e..a9b0ab374c 100644
--- a/plugins/tracker-resources/src/index.ts
+++ b/plugins/tracker-resources/src/index.ts
@@ -56,6 +56,7 @@ import MyIssues from './components/myissues/MyIssues.svelte'
import NewIssueHeader from './components/NewIssueHeader.svelte'
import NopeComponent from './components/NopeComponent.svelte'
import ProjectFilterValuePresenter from './components/projects/ProjectFilterValuePresenter.svelte'
+import ComponentFilterValuePresenter from './components/components/ComponentFilterValuePresenter.svelte'
import RelationsPopup from './components/RelationsPopup.svelte'
import SetDueDateActionPopup from './components/SetDueDateActionPopup.svelte'
import SetParentIssueActionPopup from './components/SetParentIssueActionPopup.svelte'
@@ -398,7 +399,8 @@ export default async (): Promise => ({
MilestoneFilter,
PriorityFilterValuePresenter,
StatusFilterValuePresenter,
- ProjectFilterValuePresenter
+ ProjectFilterValuePresenter,
+ ComponentFilterValuePresenter
},
completion: {
IssueQuery: async (client: Client, query: string, filter?: { in?: RelatedDocument[], nin?: RelatedDocument[] }) =>
diff --git a/plugins/tracker-resources/src/plugin.ts b/plugins/tracker-resources/src/plugin.ts
index 3644e73d10..2f9f9d0906 100644
--- a/plugins/tracker-resources/src/plugin.ts
+++ b/plugins/tracker-resources/src/plugin.ts
@@ -313,6 +313,7 @@ export default mergeIds(trackerId, tracker, {
PriorityFilterValuePresenter: '' as AnyComponent,
StatusFilterValuePresenter: '' as AnyComponent,
ProjectFilterValuePresenter: '' as AnyComponent,
+ ComponentFilterValuePresenter: '' as AnyComponent,
PriorityEditor: '' as AnyComponent,
PriorityRefPresenter: '' as AnyComponent,
ComponentEditor: '' as AnyComponent,
diff --git a/plugins/view-resources/src/components/filter/ObjectFilter.svelte b/plugins/view-resources/src/components/filter/ObjectFilter.svelte
index b15d07c138..3399c0f3ea 100644
--- a/plugins/view-resources/src/components/filter/ObjectFilter.svelte
+++ b/plugins/view-resources/src/components/filter/ObjectFilter.svelte
@@ -116,7 +116,7 @@
}
function isSelected (value: Doc | undefined | null, values: any[]): boolean {
- if (grouppingManager !== undefined) {
+ if (value != null && grouppingManager !== undefined) {
return grouppingManager.hasValue(value, values)
}
return values.includes(value?._id ?? value)