diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/rename/modal/rename-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/rename/modal/rename-modal.element.ts index 8ce4664854..143839700f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/rename/modal/rename-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/rename/modal/rename-modal.element.ts @@ -1,15 +1,96 @@ +import { UmbRenameRepository } from '../rename.action.js'; import { UmbRenameModalData, UmbRenameModalValue } from './rename-modal.token.js'; -import { html, customElement } from '@umbraco-cms/backoffice/external/lit'; +import { html, customElement, css } from '@umbraco-cms/backoffice/external/lit'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal'; +import { UmbExtensionApiInitializer } from '@umbraco-cms/backoffice/extension-api'; +import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; @customElement('umb-rename-modal') export class UmbRenameModalElement extends UmbModalBaseElement { - render() { - return html` THIS IS MY RENAME MODAL `; + #renameRepository?: UmbRenameRepository; + + connectedCallback(): void { + super.connectedCallback(); + this.#observeRepository(); } - static styles = [UmbTextStyles]; + #observeRepository() { + if (!this.data?.renameRepositoryAlias) throw new Error('A rename repository alias is required'); + + new UmbExtensionApiInitializer( + this, + umbExtensionsRegistry, + this.data.renameRepositoryAlias, + [this], + (permitted, ctrl) => { + this.#renameRepository = permitted ? (ctrl.api as UmbRenameRepository) : undefined; + }, + ); + } + + async #onSubmit(event: SubmitEvent) { + event.preventDefault(); + if (!this.#renameRepository) throw new Error('Rename repository is not available'); + if (!this.data?.unique) throw new Error('Unique identifier is not available'); + + const form = event.target as HTMLFormElement; + if (!form) return; + + const isValid = form.checkValidity(); + if (!isValid) return; + + const formData = new FormData(form); + const name = formData.get('name') as string; + + const { data } = await this.#renameRepository.rename(this.data?.unique, name); + + if (data) { + this.updateValue({ newName: data }); + this._submitModal(); + } + } + + render() { + return html` + + + +
+ + Name + + +
+
+
+ + + +
+ `; + } + + static styles = [ + UmbTextStyles, + css` + #name { + width: 100%; + } + `, + ]; } export default UmbRenameModalElement; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/rename/modal/rename-modal.token.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/rename/modal/rename-modal.token.ts index 18d3b7eac3..5e55448339 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/rename/modal/rename-modal.token.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/rename/modal/rename-modal.token.ts @@ -2,10 +2,13 @@ import { UMB_RENAME_MODAL_ALIAS } from './manifests.js'; import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; export interface UmbRenameModalData { + renameRepositoryAlias: string; unique: string; } -export interface UmbRenameModalValue {} +export interface UmbRenameModalValue { + newName: string; +} export const UMB_RENAME_MODAL = new UmbModalToken(UMB_RENAME_MODAL_ALIAS, { modal: { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/rename/rename.action.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/rename/rename.action.ts index 1ef5397c4e..3da09d235e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/rename/rename.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-action/common/rename/rename.action.ts @@ -2,9 +2,10 @@ import { UMB_RENAME_MODAL } from './modal/rename-modal.token.js'; import { UmbEntityActionBase } from '@umbraco-cms/backoffice/entity-action'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; import { UmbModalManagerContext, UMB_MODAL_MANAGER_CONTEXT_TOKEN } from '@umbraco-cms/backoffice/modal'; +import { DataSourceResponse } from '@umbraco-cms/backoffice/repository'; export interface UmbRenameRepository { - rename(unique: string, name: string): Promise; + rename(unique: string, name: string): Promise>; } export class UmbRenameEntityAction extends UmbEntityActionBase { @@ -25,10 +26,12 @@ export class UmbRenameEntityAction extends UmbEntityActionBase { + debugger; console.log(value); }); } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-action.model.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-action.model.ts index 3baddeaf1e..b757c5875d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-action.model.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-action.model.ts @@ -38,7 +38,6 @@ export interface MetaEntityAction { * "Umb.Repository.Documents" * ] */ - // TODO: Could we find the repository based on entityTypes? repositoryAlias: string; /**