diff --git a/models/tracker/src/index.ts b/models/tracker/src/index.ts index 204bdabe80..28f87fc255 100644 --- a/models/tracker/src/index.ts +++ b/models/tracker/src/index.ts @@ -923,6 +923,10 @@ export function createModel (builder: Builder): void { presenter: tracker.component.ProjectPresenter }) + builder.mixin(tracker.class.Project, core.class.Class, view.mixin.SpacePresenter, { + presenter: tracker.component.ProjectSpacePresenter + }) + classPresenter( builder, tracker.class.Component, diff --git a/models/view/src/index.ts b/models/view/src/index.ts index b8565b830e..a1d8f8dd73 100644 --- a/models/view/src/index.ts +++ b/models/view/src/index.ts @@ -57,6 +57,7 @@ import type { ObjectValidator, PreviewPresenter, SortFunc, + SpacePresenter, SpaceHeader, SpaceName, ViewAction, @@ -170,6 +171,11 @@ export class TActivityAttributePresenter extends TClass implements ActivityAttri presenter!: AnyComponent } +@Mixin(view.mixin.SpacePresenter, core.class.Class) +export class TSpacePresenter extends TClass implements SpacePresenter { + presenter!: AnyComponent +} + @Mixin(view.mixin.ObjectPresenter, core.class.Class) export class TObjectPresenter extends TClass implements ObjectPresenter { presenter!: AnyComponent @@ -369,6 +375,7 @@ export function createModel (builder: Builder): void { TObjectEditorFooter, TSpaceHeader, TSpaceName, + TSpacePresenter, TIgnoreActions, TPreviewPresenter, TLinkPresenter, diff --git a/plugins/tracker-resources/src/components/projects/ProjectPresenter.svelte b/plugins/tracker-resources/src/components/projects/ProjectPresenter.svelte index 839f530be5..89ade4d74d 100644 --- a/plugins/tracker-resources/src/components/projects/ProjectPresenter.svelte +++ b/plugins/tracker-resources/src/components/projects/ProjectPresenter.svelte @@ -1,5 +1,5 @@ -{#if model?.specials} - getActions(space)}> - {#each model.specials as special} - - - - {/each} - -{/if} +
+
+ +
+ + {value.name} + +
diff --git a/plugins/tracker-resources/src/components/projects/ProjectSpacePresenter.svelte b/plugins/tracker-resources/src/components/projects/ProjectSpacePresenter.svelte new file mode 100644 index 0000000000..f19156e574 --- /dev/null +++ b/plugins/tracker-resources/src/components/projects/ProjectSpacePresenter.svelte @@ -0,0 +1,43 @@ + + + +{#if model.specials} + getActions(space)}> + {#each model.specials as special} + + + + {/each} + +{/if} diff --git a/plugins/tracker-resources/src/index.ts b/plugins/tracker-resources/src/index.ts index b572c0d6bb..ef97732d0b 100644 --- a/plugins/tracker-resources/src/index.ts +++ b/plugins/tracker-resources/src/index.ts @@ -128,6 +128,7 @@ import StatusRefPresenter from './components/issues/StatusRefPresenter.svelte' import TimeSpendReportPopup from './components/issues/timereport/TimeSpendReportPopup.svelte' import CreateProject from './components/projects/CreateProject.svelte' import ProjectPresenter from './components/projects/ProjectPresenter.svelte' +import ProjectSpacePresenter from './components/projects/ProjectSpacePresenter.svelte' import MoveIssues from './components/issues/Move.svelte' import IssueStatistics from './components/sprints/IssueStatistics.svelte' import SprintRefPresenter from './components/sprints/SprintRefPresenter.svelte' @@ -433,6 +434,7 @@ export default async (): Promise => ({ TemplateEstimationEditor, CreateProject, ProjectPresenter, + ProjectSpacePresenter, IssueStatistics, StatusRefPresenter, RelatedIssuesSection, diff --git a/plugins/tracker-resources/src/plugin.ts b/plugins/tracker-resources/src/plugin.ts index 10490a2a24..d014c84c22 100644 --- a/plugins/tracker-resources/src/plugin.ts +++ b/plugins/tracker-resources/src/plugin.ts @@ -336,6 +336,7 @@ export default mergeIds(trackerId, tracker, { DueDatePresenter: '' as AnyComponent, EditIssueTemplate: '' as AnyComponent, CreateProject: '' as AnyComponent, + ProjectSpacePresenter: '' as AnyComponent, ProjectPresenter: '' as AnyComponent, NewIssueHeader: '' as AnyComponent, IconPresenter: '' as AnyComponent, diff --git a/plugins/view/src/index.ts b/plugins/view/src/index.ts index 3147f1e89a..394756fafe 100644 --- a/plugins/view/src/index.ts +++ b/plugins/view/src/index.ts @@ -166,6 +166,13 @@ export interface ActivityAttributePresenter extends Class { presenter: AnyComponent } +/** + * @public + */ +export interface SpacePresenter extends Class { + presenter: AnyComponent +} + /** * @public */ @@ -627,7 +634,8 @@ const view = plugin(viewId, { SortFuncs: '' as Ref>, AllValuesFunc: '' as Ref>, ObjectPanel: '' as Ref>, - LinkProvider: '' as Ref> + LinkProvider: '' as Ref>, + SpacePresenter: '' as Ref> }, class: { ViewletPreference: '' as Ref>, diff --git a/plugins/workbench-resources/src/components/navigator/SpacesNav.svelte b/plugins/workbench-resources/src/components/navigator/SpacesNav.svelte index 4a8d68a13c..688e83f212 100644 --- a/plugins/workbench-resources/src/components/navigator/SpacesNav.svelte +++ b/plugins/workbench-resources/src/components/navigator/SpacesNav.svelte @@ -13,7 +13,7 @@ // limitations under the License. --> {#each spaces as space, i (space._id)} - {#await getObjectPresenter(client, space._class, { key: '' }) then presenter} + {#await getPresenter(space._class) then presenter} {#if separate && model.specials && i !== 0}{/if} {#if model.specials && presenter} - + {:else} {#await getSpaceName(client, space) then name}