diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/modals/composition-picker/composition-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/modals/composition-picker/composition-picker-modal.element.ts index 09da018e5e..4019b14607 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/modals/composition-picker/composition-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/modals/composition-picker/composition-picker-modal.element.ts @@ -1,3 +1,4 @@ +import { UmbDocumentTypeCompositionRepository } from '../../repository/index.js'; import type { UmbCompositionPickerModalData, UmbCompositionPickerModalValue, @@ -5,7 +6,6 @@ import type { import { css, html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; import type { UmbTreeElement } from '@umbraco-cms/backoffice/tree'; -import { UmbDocumentTypeDetailRepository } from '../../repository/index.js'; @customElement('umb-composition-picker-modal') export class UmbCompositionPickerModalElement extends UmbModalBaseElement< @@ -17,6 +17,8 @@ export class UmbCompositionPickerModalElement extends UmbModalBaseElement< // As well as other document types that has a composition already. // OBS: If a document type 1 has a composition document type 2, document type 2 cannot add any compositions. + #compositionRepository = new UmbDocumentTypeCompositionRepository(this); + @state() private _selectionConfiguration = { multiple: true, @@ -30,12 +32,17 @@ export class UmbCompositionPickerModalElement extends UmbModalBaseElement< connectedCallback() { super.connectedCallback(); - this._selectionConfiguration = { ...this._selectionConfiguration, selection: (this.data?.selection as []) ?? [] }; - this.#getcomposition() + this.#getcomposition() } async #getcomposition() { + const unique = this.data?.unique; + + if (!unique) throw new Error('Unique is required'); + + const something = await this.#compositionRepository.read(unique); + console.log(something) } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/composition/document-type-composition.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/composition/document-type-composition.repository.ts new file mode 100644 index 0000000000..3d76177bb9 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/composition/document-type-composition.repository.ts @@ -0,0 +1,20 @@ +import { UmbDocumentTypeCompositionServerDataSource } from './document-type-composition.server.data-source.js'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbRepositoryBase } from '@umbraco-cms/backoffice/repository'; + +export class UmbDocumentTypeCompositionRepository extends UmbRepositoryBase { + #compositionSource: UmbDocumentTypeCompositionServerDataSource; + + constructor(host: UmbControllerHost) { + super(host); + this.#compositionSource = new UmbDocumentTypeCompositionServerDataSource(this); + } + + async read(unique:string) { + return this.#compositionSource.read(unique); + } + + async update(args: any) { + return this.#compositionSource.update(args); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/composition/document-type-composition.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/composition/document-type-composition.server.data-source.ts new file mode 100644 index 0000000000..bed10dece9 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/composition/document-type-composition.server.data-source.ts @@ -0,0 +1,45 @@ +import { type DocumentTypeCompositionRequestModel, DocumentTypeResource } from '@umbraco-cms/backoffice/backend-api'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; + +/** + * A data source for the Document Type Composition that fetches data from the server + * @export + * @class UmbDocumentTypeCompositionServerDataSource + */ +export class UmbDocumentTypeCompositionServerDataSource { + #host: UmbControllerHost; + + /** + * Creates an instance of UmbDocumentTypeCompositionServerDataSource. + * @param {UmbControllerHost} host + * @memberof UmbDocumentTypeCompositionServerDataSource + */ + constructor(host: UmbControllerHost) { + this.#host = host; + } + /** + * Fetches the compatible compositions for a document type from the server + * @param {string} unique + * @return {*} + * @memberof UmbDocumentTypeCompositionServerDataSource + */ + async read(unique: string) { + return tryExecuteAndNotify(this.#host, DocumentTypeResource.getDocumentTypeByIdCompositionReferences({id:unique})); + } + /** + * Updates the compositions for a document type on the server + * @param {DocumentTypeCompositionRequestModel} requestBody + * @return {*} + * @memberof UmbDocumentTypeCompositionServerDataSource + */ + async update(data: any) { + const requestBody: DocumentTypeCompositionRequestModel = { + id: '', + isElement: false, + currentCompositeIds: [], + currentPropertyAliases: [], + } + return tryExecuteAndNotify(this.#host, DocumentTypeResource.postDocumentTypeAvailableCompositions({ requestBody })); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/composition/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/composition/index.ts new file mode 100644 index 0000000000..99c179ec94 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/composition/index.ts @@ -0,0 +1,2 @@ +export { UmbDocumentTypeCompositionRepository } from './document-type-composition.repository.js'; +export { UMB_DOCUMENT_TYPE_COMPOSITION_REPOSITORY_ALIAS } from './manifests.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/composition/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/composition/manifests.ts new file mode 100644 index 0000000000..eb98332a8e --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/composition/manifests.ts @@ -0,0 +1,13 @@ +import { UmbDocumentTypeCompositionRepository } from './document-type-composition.repository.js'; +import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry'; + +export const UMB_DOCUMENT_TYPE_COMPOSITION_REPOSITORY_ALIAS = 'Umb.Repository.DocumentType.Composition'; + +const queryRepository: ManifestRepository = { + type: 'repository', + alias: UMB_DOCUMENT_TYPE_COMPOSITION_REPOSITORY_ALIAS, + name: 'Document Type Composition Repository', + api: UmbDocumentTypeCompositionRepository, +}; + +export const manifests = [queryRepository]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/detail/document-type-detail.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/detail/document-type-detail.repository.ts index 4ef8074720..3113963d80 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/detail/document-type-detail.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/detail/document-type-detail.repository.ts @@ -1,15 +1,11 @@ -import { ContentTypeCompositionResponseModelBaseModel } from '@umbraco-cms/backoffice/backend-api'; import type { UmbDocumentTypeDetailModel } from '../../types.js'; import { UmbDocumentTypeDetailServerDataSource } from './document-type-detail.server.data-source.js'; import { UMB_DOCUMENT_TYPE_DETAIL_STORE_CONTEXT } from './document-type-detail.store.js'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import { DataSourceResponse, UmbDetailRepositoryBase } from '@umbraco-cms/backoffice/repository'; +import { UmbDetailRepositoryBase } from '@umbraco-cms/backoffice/repository'; export class UmbDocumentTypeDetailRepository extends UmbDetailRepositoryBase { constructor(host: UmbControllerHost) { super(host, UmbDocumentTypeDetailServerDataSource, UMB_DOCUMENT_TYPE_DETAIL_STORE_CONTEXT); - } - async readCompositions(unique: string): Promise> { - return this.readCompositions(unique); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/detail/document-type-detail.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/detail/document-type-detail.server.data-source.ts index 5774983189..7042af6b84 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/detail/document-type-detail.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/detail/document-type-detail.server.data-source.ts @@ -282,14 +282,4 @@ export class UmbDocumentTypeDetailServerDataSource implements UmbDetailDataSourc }), ); } - async readCompositions(unique: string) { - if (!unique) throw new Error('Unique is missing.'); - - return tryExecuteAndNotify( - this.#host, - DocumentTypeResource.getDocumentTypeByIdCompositionReferences({ - id: unique, - }), - ); - } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/index.ts index 5abd54bbee..60ef7a8f2d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/index.ts @@ -1,3 +1,4 @@ export * from './detail/index.js'; export * from './item/index.js'; export * from './structure/index.js'; +export * from './composition/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/manifests.ts index bb35952020..ebf3d51552 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/repository/manifests.ts @@ -1,4 +1,5 @@ import { manifests as detailManifests } from './detail/manifests.js'; import { manifests as itemManifests } from './item/manifests.js'; +import {manifests as compositionManifests} from './composition/manifests.js'; -export const manifests = [...detailManifests, ...itemManifests]; +export const manifests = [...detailManifests, ...itemManifests,...compositionManifests]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/views/design/document-type-workspace-view-edit.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/views/design/document-type-workspace-view-edit.element.ts index dd3cde2b86..06cee2b153 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/views/design/document-type-workspace-view-edit.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/views/design/document-type-workspace-view-edit.element.ts @@ -286,12 +286,6 @@ export class UmbDocumentTypeWorkspaceViewEditElement extends UmbLitElement imple } async #openCompositionModal() { - const repo = new UmbDocumentTypeDetailRepository(this); - - - console.log('repo',repo) - const something = await repo.readCompositions(this._compositionConfiguration!.unique); - console.log('data',something) const modalContext = this._modalManagerContext?.open(UMB_COMPOSITION_PICKER_MODAL, { data: this._compositionConfiguration,