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,