create a blueprint
This commit is contained in:
@@ -1,23 +1,31 @@
|
||||
import { UmbDocumentCreateBlueprintRepository } from './repository/document-create-blueprint.repository.js';
|
||||
import { UMB_CREATE_BLUEPRINT_MODAL } from './modal/create-blueprint-modal.token.js';
|
||||
import type { UmbEntityActionArgs } from '@umbraco-cms/backoffice/entity-action';
|
||||
import { UmbEntityActionBase } from '@umbraco-cms/backoffice/entity-action';
|
||||
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
|
||||
import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal';
|
||||
import { UmbDocumentBlueprintDetailRepository } from '@umbraco-cms/backoffice/document-blueprint';
|
||||
|
||||
export class UmbCreateDocumentBlueprintEntityAction extends UmbEntityActionBase<never> {
|
||||
#repository = new UmbDocumentBlueprintDetailRepository(this);
|
||||
#repository = new UmbDocumentCreateBlueprintRepository(this);
|
||||
|
||||
constructor(host: UmbControllerHost, args: UmbEntityActionArgs<never>) {
|
||||
super(host, args);
|
||||
}
|
||||
|
||||
async execute() {
|
||||
if (!this.args.unique) throw new Error('Unique is required');
|
||||
|
||||
const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT);
|
||||
const modalContext = modalManager.open(this, UMB_CREATE_BLUEPRINT_MODAL, {
|
||||
data: { unique: this.args.unique },
|
||||
});
|
||||
await modalContext.onSubmit().catch(() => undefined);
|
||||
|
||||
const { name, parent } = modalContext.getValue();
|
||||
if (!name) return;
|
||||
|
||||
// TODO: Doesn't show the green popup on success? tryExecuteAndNotify is used in the repository.
|
||||
await this.#repository.create({ name, parent, document: { id: this.args.unique } });
|
||||
}
|
||||
}
|
||||
export default UmbCreateDocumentBlueprintEntityAction;
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
export * from './modal/index.js';
|
||||
export * from './repository/index.js';
|
||||
|
||||
@@ -1,19 +1,16 @@
|
||||
import { UmbDocumentDetailRepository } from '../../../repository/index.js';
|
||||
import type { UmbCreateBlueprintModalData } from './create-blueprint-modal.token.js';
|
||||
import type { UmbCreateBlueprintModalData, UmbCreateBlueprintModalValue } from './create-blueprint-modal.token.js';
|
||||
import { html, customElement, css, state } from '@umbraco-cms/backoffice/external/lit';
|
||||
import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
|
||||
import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal';
|
||||
import type { UmbDocumentDetailModel } from '@umbraco-cms/backoffice/document';
|
||||
import {
|
||||
type UmbDocumentBlueprintDetailModel,
|
||||
UmbDocumentBlueprintDetailRepository,
|
||||
} from '@umbraco-cms/backoffice/document-blueprint';
|
||||
import type { UUIInputEvent } from '@umbraco-cms/backoffice/external/uui';
|
||||
import { UmbId } from '@umbraco-cms/backoffice/id';
|
||||
|
||||
@customElement('umb-create-blueprint-modal')
|
||||
export class UmbCreateBlueprintModalElement extends UmbModalBaseElement<UmbCreateBlueprintModalData, never> {
|
||||
#blueprintRepository = new UmbDocumentBlueprintDetailRepository(this);
|
||||
export class UmbCreateBlueprintModalElement extends UmbModalBaseElement<
|
||||
UmbCreateBlueprintModalData,
|
||||
UmbCreateBlueprintModalValue
|
||||
> {
|
||||
#documentRepository = new UmbDocumentDetailRepository(this);
|
||||
|
||||
#documentUnique = '';
|
||||
@@ -39,24 +36,8 @@ export class UmbCreateBlueprintModalElement extends UmbModalBaseElement<UmbCreat
|
||||
this._blueprintName = data.variants[0].name;
|
||||
}
|
||||
|
||||
#mapDocumentToBlueprintModel() {
|
||||
if (!this.#document) return;
|
||||
const variants = this.#document?.variants.map((variant) => ({ ...variant, name: this._blueprintName }));
|
||||
const model: UmbDocumentBlueprintDetailModel = {
|
||||
...this.#document,
|
||||
entityType: 'document-blueprint',
|
||||
variants,
|
||||
unique: UmbId.new(),
|
||||
};
|
||||
|
||||
return model;
|
||||
}
|
||||
|
||||
async #handleSave() {
|
||||
const model = this.#mapDocumentToBlueprintModel();
|
||||
if (!model) return;
|
||||
const { error } = await this.#blueprintRepository.create(model, null);
|
||||
console.log('error', error);
|
||||
this.value = { name: this._blueprintName, parent: null };
|
||||
this.modalContext?.submit();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,10 +1,16 @@
|
||||
import type { ReferenceByIdModel } from '@umbraco-cms/backoffice/external/backend-api';
|
||||
import { UmbModalToken } from '@umbraco-cms/backoffice/modal';
|
||||
|
||||
export interface UmbCreateBlueprintModalData {
|
||||
unique: string | null;
|
||||
}
|
||||
|
||||
export const UMB_CREATE_BLUEPRINT_MODAL = new UmbModalToken<UmbCreateBlueprintModalData, never>(
|
||||
export interface UmbCreateBlueprintModalValue {
|
||||
name: string;
|
||||
parent: ReferenceByIdModel | null;
|
||||
}
|
||||
|
||||
export const UMB_CREATE_BLUEPRINT_MODAL = new UmbModalToken<UmbCreateBlueprintModalData, UmbCreateBlueprintModalValue>(
|
||||
'Umb.Modal.CreateBlueprint',
|
||||
{
|
||||
modal: {
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
import { UmbDocumentCreateBlueprintServerDataSource } from './document-create-blueprint.server.data-source.js';
|
||||
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
|
||||
import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
|
||||
import { UMB_NOTIFICATION_CONTEXT } from '@umbraco-cms/backoffice/notification';
|
||||
import type { UmbApi } from '@umbraco-cms/backoffice/extension-api';
|
||||
import type { CreateDocumentBlueprintFromDocumentRequestModel } from '@umbraco-cms/backoffice/external/backend-api';
|
||||
|
||||
export class UmbDocumentCreateBlueprintRepository extends UmbControllerBase implements UmbApi {
|
||||
#dataSource = new UmbDocumentCreateBlueprintServerDataSource(this);
|
||||
|
||||
#notificationContext?: typeof UMB_NOTIFICATION_CONTEXT.TYPE;
|
||||
|
||||
constructor(host: UmbControllerHost) {
|
||||
super(host);
|
||||
|
||||
this.consumeContext(UMB_NOTIFICATION_CONTEXT, (instance) => {
|
||||
this.#notificationContext = instance;
|
||||
});
|
||||
}
|
||||
|
||||
async create(requestBody: CreateDocumentBlueprintFromDocumentRequestModel) {
|
||||
const { data, error } = await this.#dataSource.create(requestBody);
|
||||
if (!error) {
|
||||
return { data };
|
||||
}
|
||||
return { error };
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
import {
|
||||
DocumentBlueprintService,
|
||||
type CreateDocumentBlueprintFromDocumentRequestModel,
|
||||
} from '@umbraco-cms/backoffice/external/backend-api';
|
||||
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
|
||||
import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources';
|
||||
|
||||
/**
|
||||
* A data source for the Document Create Blueprint that fetches data from the server
|
||||
* @export
|
||||
* @class UmbDocumentCreateBlueprintServerDataSource
|
||||
* @implements {RepositoryDetailDataSource}
|
||||
*/
|
||||
export class UmbDocumentCreateBlueprintServerDataSource {
|
||||
#host: UmbControllerHost;
|
||||
|
||||
/**
|
||||
* Creates an instance of UmbDocumentCreateBlueprintServerDataSource.
|
||||
* @param {UmbControllerHost} host
|
||||
* @memberof UmbDocumentCreateBlueprintServerDataSource
|
||||
*/
|
||||
constructor(host: UmbControllerHost) {
|
||||
this.#host = host;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches the Culture and Hostnames for the given Document unique
|
||||
* @param {string} unique
|
||||
* @memberof UmbDocumentCreateBlueprintServerDataSource
|
||||
*/
|
||||
async create(requestBody: CreateDocumentBlueprintFromDocumentRequestModel) {
|
||||
return tryExecuteAndNotify(this.#host, DocumentBlueprintService.postDocumentBlueprintFromDocument({ requestBody }));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
export { UmbDocumentCreateBlueprintRepository } from './document-create-blueprint.repository.js';
|
||||
export { UMB_DOCUMENT_CREATE_BLUEPRINT_REPOSITORY_ALIAS } from './manifests.js';
|
||||
@@ -0,0 +1,13 @@
|
||||
import { UmbDocumentCreateBlueprintRepository } from './document-create-blueprint.repository.js';
|
||||
import type { ManifestRepository } from '@umbraco-cms/backoffice/extension-registry';
|
||||
|
||||
export const UMB_DOCUMENT_CREATE_BLUEPRINT_REPOSITORY_ALIAS = 'Umb.Repository.Document.CreateBlueprint';
|
||||
|
||||
const repository: ManifestRepository = {
|
||||
type: 'repository',
|
||||
alias: UMB_DOCUMENT_CREATE_BLUEPRINT_REPOSITORY_ALIAS,
|
||||
name: 'Document Create Blueprint Repository',
|
||||
api: UmbDocumentCreateBlueprintRepository,
|
||||
};
|
||||
|
||||
export const manifests = [repository];
|
||||
Reference in New Issue
Block a user