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}