From 56f79d1daeb03d8005344d1ce9daf3631dec1db8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Thu, 2 Feb 2023 13:04:47 +0100 Subject: [PATCH] initial merge --- .../libs/extensions-registry/tree.models.ts | 4 +- .../libs/models/index.ts | 21 +- .../detail-repository.interface.ts | 27 +++ .../repositories/tree-repository.interface.ts | 20 ++ .../document.repository.ts} | 11 +- .../documents/documents/tree/manifests.ts | 4 +- .../repository/template.repository.ts | 225 ++++++++++++++++++ .../tree/data/template.tree.repository.ts | 1 - .../data/template.detail.repository.ts | 2 + 9 files changed, 285 insertions(+), 30 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/libs/repositories/detail-repository.interface.ts create mode 100644 src/Umbraco.Web.UI.Client/libs/repositories/tree-repository.interface.ts rename src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/{tree/data/document.tree.repository.ts => repository/document.repository.ts} (83%) create mode 100644 src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/repository/template.repository.ts diff --git a/src/Umbraco.Web.UI.Client/libs/extensions-registry/tree.models.ts b/src/Umbraco.Web.UI.Client/libs/extensions-registry/tree.models.ts index 38bc2a54bb..017bede8bd 100644 --- a/src/Umbraco.Web.UI.Client/libs/extensions-registry/tree.models.ts +++ b/src/Umbraco.Web.UI.Client/libs/extensions-registry/tree.models.ts @@ -1,5 +1,5 @@ import type { ManifestBase } from './models'; -import type { UmbTreeRepositoryFactory } from '@umbraco-cms/models'; +import type { UmbRepositoryFactory } from '@umbraco-cms/models'; export interface ManifestTree extends ManifestBase { type: 'tree'; @@ -8,5 +8,5 @@ export interface ManifestTree extends ManifestBase { export interface MetaTree { storeAlias?: string; - repository?: UmbTreeRepositoryFactory; + repository?: UmbRepositoryFactory; } diff --git a/src/Umbraco.Web.UI.Client/libs/models/index.ts b/src/Umbraco.Web.UI.Client/libs/models/index.ts index 9e91bcb3df..dd5781d98f 100644 --- a/src/Umbraco.Web.UI.Client/libs/models/index.ts +++ b/src/Umbraco.Web.UI.Client/libs/models/index.ts @@ -7,6 +7,7 @@ import { PagedEntityTreeItem, ProblemDetails, } from '@umbraco-cms/backend-api'; +import { UmbTreeRepository } from 'libs/repositories/tree-repository.interface'; import { Observable } from 'rxjs'; // Extension Manifests @@ -159,24 +160,6 @@ export interface DataSourceResponse { } // TODO; figure out why we can't add UmbControllerHostInterface as host type -export interface UmbTreeRepositoryFactory { +export interface UmbRepositoryFactory { new (host: any): UmbTreeRepository; } - -export interface UmbTreeRepository { - requestRootItems: () => Promise<{ - data: PagedEntityTreeItem | undefined; - error: ProblemDetails | undefined; - }>; - requestChildrenOf: (parentKey: string | null) => Promise<{ - data: PagedEntityTreeItem | undefined; - error: ProblemDetails | undefined; - }>; - requestItems: (keys: string[]) => Promise<{ - data: Array | undefined; - error: ProblemDetails | undefined; - }>; - rootItems: () => Promise>; - childrenOf: (parentKey: string | null) => Promise>; - items: (keys: string[]) => Promise>; -} diff --git a/src/Umbraco.Web.UI.Client/libs/repositories/detail-repository.interface.ts b/src/Umbraco.Web.UI.Client/libs/repositories/detail-repository.interface.ts new file mode 100644 index 0000000000..3c1b9a828f --- /dev/null +++ b/src/Umbraco.Web.UI.Client/libs/repositories/detail-repository.interface.ts @@ -0,0 +1,27 @@ +import type { ProblemDetails } from "@umbraco-cms/backend-api"; + +export interface UmbDetailRepository { + + createDetailsScaffold(parentKey: string | null): Promise<{ + data?: DetailType; + error?: ProblemDetails; + }> + + requestDetails(key: string): Promise<{ + data?: DetailType; + error?: ProblemDetails; + }> + + create(data: DetailType): Promise<{ + error?: ProblemDetails; + }> + + save(data: DetailType): Promise<{ + error?: ProblemDetails; + }> + + delete(key: string): Promise<{ + error?: ProblemDetails; + }> + +} diff --git a/src/Umbraco.Web.UI.Client/libs/repositories/tree-repository.interface.ts b/src/Umbraco.Web.UI.Client/libs/repositories/tree-repository.interface.ts new file mode 100644 index 0000000000..c084828171 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/libs/repositories/tree-repository.interface.ts @@ -0,0 +1,20 @@ +import type { Observable } from "rxjs"; +import { EntityTreeItem, PagedEntityTreeItem, ProblemDetails } from "@umbraco-cms/backend-api"; + +export interface UmbTreeRepository { + requestRootItems: () => Promise<{ + data: PagedEntityTreeItem | undefined; + error: ProblemDetails | undefined; + }>; + requestChildrenOf: (parentKey: string | null) => Promise<{ + data: PagedEntityTreeItem | undefined; + error: ProblemDetails | undefined; + }>; + requestItems: (keys: string[]) => Promise<{ + data: Array | undefined; + error: ProblemDetails | undefined; + }>; + rootItems: () => Promise>; + childrenOf: (parentKey: string | null) => Promise>; + items: (keys: string[]) => Promise>; +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/tree/data/document.tree.repository.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/repository/document.repository.ts similarity index 83% rename from src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/tree/data/document.tree.repository.ts rename to src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/repository/document.repository.ts index 55ce9f8f0e..dcddd65a08 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/tree/data/document.tree.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/repository/document.repository.ts @@ -1,17 +1,16 @@ -import { DocumentTreeServerDataSource } from './sources/document.tree.server.data'; -import { UmbDocumentTreeStore, UMB_DOCUMENT_TREE_STORE_CONTEXT_TOKEN } from './document.tree.store'; -import type { DocumentTreeDataSource } from './sources/document.tree.data.source.interface'; +import { DocumentTreeServerDataSource } from '../tree/data/sources/document.tree.server.data'; +import { UmbDocumentTreeStore, UMB_DOCUMENT_TREE_STORE_CONTEXT_TOKEN } from '../tree/data/document.tree.store'; +import type { DocumentTreeDataSource } from '../tree/data/sources/document.tree.data.source.interface'; import { UmbControllerHostInterface } from '@umbraco-cms/controller'; -import { UmbNotificationService, UMB_NOTIFICATION_SERVICE_CONTEXT_TOKEN } from '@umbraco-cms/notification'; import { UmbContextConsumerController } from '@umbraco-cms/context-api'; import { ProblemDetails } from '@umbraco-cms/backend-api'; -import type { UmbTreeRepository } from '@umbraco-cms/models'; +import type { UmbTreeRepository } from 'libs/repositories/tree-repository.interface'; // Move to documentation / JSdoc /* We need to create a new instance of the repository from within the element context. We want the notifications to be displayed in the right context. */ // element -> context -> repository -> (store) -> data source // All methods should be async and return a promise. Some methods might return an observable as part of the promise response. -export class UmbDocumentTreeRepository implements UmbTreeRepository { +export class UmbDocumentRepository implements UmbTreeRepository { #init!: Promise; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/tree/manifests.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/tree/manifests.ts index ff537562a9..12fa66a9e4 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/tree/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/tree/manifests.ts @@ -1,5 +1,5 @@ import { UMB_DOCUMENT_TREE_STORE_CONTEXT_TOKEN } from './data/document.tree.store'; -import { UmbDocumentTreeRepository } from './data/document.tree.repository'; +import { UmbDocumentRepository } from '../repository/document.repository'; import type { ManifestTree, ManifestTreeItemAction } from '@umbraco-cms/models'; const treeAlias = 'Umb.Tree.Documents'; @@ -10,7 +10,7 @@ const tree: ManifestTree = { name: 'Documents Tree', meta: { storeAlias: UMB_DOCUMENT_TREE_STORE_CONTEXT_TOKEN.toString(), - repository: UmbDocumentTreeRepository, + repository: UmbDocumentRepository, } }; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/repository/template.repository.ts b/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/repository/template.repository.ts new file mode 100644 index 0000000000..9199a0c364 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/repository/template.repository.ts @@ -0,0 +1,225 @@ +import { UmbTemplateDetailServerDataSource } from '../workspace/data/sources/template.detail.server.data'; +import { TemplateTreeServerDataSource } from '../tree/data/sources/template.tree.server.data'; +import { UmbTemplateDetailStore, UMB_TEMPLATE_DETAIL_STORE_CONTEXT_TOKEN } from '../workspace/data/template.detail.store'; +import { UmbTemplateTreeStore, UMB_TEMPLATE_TREE_STORE_CONTEXT_TOKEN } from './template.tree.store'; +import { UmbControllerHostInterface } from '@umbraco-cms/controller'; +import { UmbNotificationService, UMB_NOTIFICATION_SERVICE_CONTEXT_TOKEN } from '@umbraco-cms/notification'; +import { UmbContextConsumerController } from '@umbraco-cms/context-api'; +import { ProblemDetails, Template } from '@umbraco-cms/backend-api'; +import { UmbDetailRepository } from 'libs/repositories/detail-repository.interface'; +import { UmbTreeRepository } from 'libs/repositories/tree-repository.interface'; + +// Move to documentation / JSdoc +/* We need to create a new instance of the repository from within the element context. We want the notifications to be displayed in the right context. */ +// element -> context -> repository -> (store) -> data source +// All methods should be async and return a promise. Some methods might return an observable as part of the promise response. +export class UmbTemplateRepository implements UmbTreeRepository, UmbDetailRepository