composition repo

This commit is contained in:
Lone Iversen
2024-02-07 10:33:16 +01:00
parent 984f09a281
commit 32fb7d8666
10 changed files with 94 additions and 25 deletions

View File

@@ -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)
}

View File

@@ -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);
}
}

View File

@@ -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 }));
}
}

View File

@@ -0,0 +1,2 @@
export { UmbDocumentTypeCompositionRepository } from './document-type-composition.repository.js';
export { UMB_DOCUMENT_TYPE_COMPOSITION_REPOSITORY_ALIAS } from './manifests.js';

View File

@@ -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];

View File

@@ -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<UmbDocumentTypeDetailModel> {
constructor(host: UmbControllerHost) {
super(host, UmbDocumentTypeDetailServerDataSource, UMB_DOCUMENT_TYPE_DETAIL_STORE_CONTEXT);
}
async readCompositions(unique: string): Promise<DataSourceResponse<ContentTypeCompositionResponseModelBaseModel>> {
return this.readCompositions(unique);
}
}

View File

@@ -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,
}),
);
}
}

View File

@@ -1,3 +1,4 @@
export * from './detail/index.js';
export * from './item/index.js';
export * from './structure/index.js';
export * from './composition/index.js';

View File

@@ -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];

View File

@@ -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,