diff --git a/models/tracker/src/index.ts b/models/tracker/src/index.ts
index b69998c97b..967e786f82 100644
--- a/models/tracker/src/index.ts
+++ b/models/tracker/src/index.ts
@@ -979,6 +979,10 @@ export function createModel (builder: Builder): void {
component: view.component.ValueFilter
})
+ builder.mixin(tracker.class.Project, core.class.Class, view.mixin.AttributeFilterPresenter, {
+ presenter: tracker.component.ProjectFilterValuePresenter
+ })
+
builder.mixin(tracker.class.TypeIssuePriority, core.class.Class, view.mixin.AttributePresenter, {
presenter: tracker.component.PriorityRefPresenter
})
diff --git a/plugins/tracker-resources/src/components/projects/ProjectFilterValuePresenter.svelte b/plugins/tracker-resources/src/components/projects/ProjectFilterValuePresenter.svelte
new file mode 100644
index 0000000000..3d6b08f93a
--- /dev/null
+++ b/plugins/tracker-resources/src/components/projects/ProjectFilterValuePresenter.svelte
@@ -0,0 +1,58 @@
+
+
+
+
+ {#each projects as project, i}
+ {#if value && i < MAX_VISIBLE_PROJECTS}
+ {@const icon =
+ project.icon === tracker.component.IconWithEmojii ? IconWithEmojii : project.icon ?? tracker.icon.Home}
+ {@const iconProps =
+ project.icon === tracker.component.IconWithEmojii
+ ? { icon: project.color }
+ : {
+ fill:
+ project.color !== undefined
+ ? getPlatformColorDef(project.color, $themeStore.dark).icon
+ : getPlatformColorForTextDef(project.name ?? '', $themeStore.dark).icon
+ }}
+
+ {/if}
+ {/each}
+ {#if projects.length > MAX_VISIBLE_PROJECTS}
+
+ +{projects.length - MAX_VISIBLE_PROJECTS}
+
+ {/if}
+
diff --git a/plugins/tracker-resources/src/index.ts b/plugins/tracker-resources/src/index.ts
index ec1e864b04..fdfc22da08 100644
--- a/plugins/tracker-resources/src/index.ts
+++ b/plugins/tracker-resources/src/index.ts
@@ -60,6 +60,7 @@ import StatusPresenter from './components/issues/StatusPresenter.svelte'
import TitlePresenter from './components/issues/TitlePresenter.svelte'
import PriorityFilterValuePresenter from './components/issues/PriorityFilterValuePresenter.svelte'
import StatusFilterValuePresenter from './components/issues/StatusFilterValuePresenter.svelte'
+import ProjectFilterValuePresenter from './components/projects/ProjectFilterValuePresenter.svelte'
import MyIssues from './components/myissues/MyIssues.svelte'
import NewIssueHeader from './components/NewIssueHeader.svelte'
import NopeComponent from './components/NopeComponent.svelte'
@@ -485,7 +486,8 @@ export default async (): Promise => ({
NotificationIssuePresenter,
MilestoneFilter,
PriorityFilterValuePresenter,
- StatusFilterValuePresenter
+ StatusFilterValuePresenter,
+ ProjectFilterValuePresenter
},
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 fbd865a940..6ec62a0b24 100644
--- a/plugins/tracker-resources/src/plugin.ts
+++ b/plugins/tracker-resources/src/plugin.ts
@@ -332,6 +332,7 @@ export default mergeIds(trackerId, tracker, {
PriorityPresenter: '' as AnyComponent,
PriorityFilterValuePresenter: '' as AnyComponent,
StatusFilterValuePresenter: '' as AnyComponent,
+ ProjectFilterValuePresenter: '' as AnyComponent,
PriorityEditor: '' as AnyComponent,
PriorityRefPresenter: '' as AnyComponent,
ComponentEditor: '' as AnyComponent,