Skip to content

Commit

Permalink
Merge pull request #1391 from umbraco/bugfix/rename-file-system-file
Browse files Browse the repository at this point in the history
Bugfix: Rename file system file
  • Loading branch information
iOvergaard committed Apr 2, 2024
2 parents 755f3aa + 05e67c3 commit fa6e846
Show file tree
Hide file tree
Showing 60 changed files with 322 additions and 225 deletions.
@@ -1,9 +1,9 @@
import { UmbEntityActionBase } from '../../entity-action-base.js';
import { UmbRequestReloadStructureForEntityEvent } from '../../request-reload-structure-for-entity.event.js';
import { createExtensionApiByAlias, type MetaEntityActionDeleteKind } from '@umbraco-cms/backoffice/extension-registry';
import { umbConfirmModal } from '@umbraco-cms/backoffice/modal';
import type { UmbDetailRepository, UmbItemRepository } from '@umbraco-cms/backoffice/repository';
import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action';
import { UmbRequestReloadStructureForEntityEvent } from '@umbraco-cms/backoffice/event';

export class UmbDeleteEntityAction extends UmbEntityActionBase<MetaEntityActionDeleteKind> {
// TODO: make base type for item and detail models
Expand Down
1 change: 0 additions & 1 deletion src/packages/core/entity-action/common/index.ts
@@ -1,6 +1,5 @@
export * from './duplicate/duplicate.action.js';
export * from './delete/delete.action.js';
export * from './move/move.action.js';
export * from './rename/index.js';
export * from './sort-children-of/sort-children-of.action.js';
export * from './trash/trash.action.js';
3 changes: 0 additions & 3 deletions src/packages/core/entity-action/common/rename/index.ts

This file was deleted.

12 changes: 0 additions & 12 deletions src/packages/core/entity-action/common/rename/modal/manifests.ts

This file was deleted.

This file was deleted.

This file was deleted.

23 changes: 0 additions & 23 deletions src/packages/core/entity-action/common/rename/rename.action.ts

This file was deleted.

14 changes: 0 additions & 14 deletions src/packages/core/entity-action/common/rename/types.ts

This file was deleted.

1 change: 1 addition & 0 deletions src/packages/core/entity-action/index.ts
Expand Up @@ -5,4 +5,5 @@ export * from './entity-action.event.js';
export * from './entity-action.interface.js';
export * from './types.js';

export { UmbRequestReloadStructureForEntityEvent } from './request-reload-structure-for-entity.event.js';
export { UMB_ENTITY_ACTION_DEFAULT_KIND_MANIFEST } from './default/default.action.kind.js';
2 changes: 0 additions & 2 deletions src/packages/core/entity-action/manifests.ts
Expand Up @@ -2,7 +2,6 @@ import { manifests as defaultEntityActionManifests } from './default/manifests.j
import { manifests as deleteEntityActionManifests } from './common/delete/manifests.js';
import { manifests as duplicateEntityActionManifests } from './common/duplicate/manifests.js';
import { manifests as moveEntityActionManifests } from './common/move/manifests.js';
import { manifests as renameEntityActionManifests } from './common/rename/manifests.js';
import { manifests as trashEntityActionManifests } from './common/trash/manifests.js';
import { manifests as sortChildrenOfEntityActionManifests } from './common/sort-children-of/manifests.js';

Expand All @@ -11,7 +10,6 @@ export const manifests = [
...deleteEntityActionManifests,
...duplicateEntityActionManifests,
...moveEntityActionManifests,
...renameEntityActionManifests,
...trashEntityActionManifests,
...sortChildrenOfEntityActionManifests,
];
@@ -1,4 +1,5 @@
import { UmbEntityActionEvent, type UmbEntityActionEventArgs } from '@umbraco-cms/backoffice/entity-action';
import type { UmbEntityActionEventArgs } from './entity-action.event.js';
import { UmbEntityActionEvent } from './entity-action.event.js';

export class UmbRequestReloadStructureForEntityEvent extends UmbEntityActionEvent {
static readonly TYPE = 'request-reload-structure-for-entity';
Expand Down
1 change: 0 additions & 1 deletion src/packages/core/event/index.ts
Expand Up @@ -6,4 +6,3 @@ export * from './input.event.js';
export * from './progress.event.js';
export * from './selected.event.js';
export * from './selection-change.event.js';
export * from './request-reload-structure-for-entity.event.js';
Expand Up @@ -68,19 +68,20 @@ export interface MetaEntityActionTrashKind extends MetaEntityActionDefaultKind {
}

// RENAME
export interface ManifestEntityActionRenameKind extends ManifestEntityAction<MetaEntityActionRenameKind> {
export interface ManifestEntityActionRenameServerFileKind
extends ManifestEntityAction<MetaEntityActionRenameServerFileKind> {
type: 'entityAction';
kind: 'rename';
kind: 'renameServerFile';
}

export interface MetaEntityActionRenameKind extends MetaEntityActionDefaultKind {
export interface MetaEntityActionRenameServerFileKind extends MetaEntityActionDefaultKind {
renameRepositoryAlias: string;
itemRepositoryAlias: string;
}

// RELOAD TREE ITEM CHILDREN
export interface ManifestEntityActionReloadTreeItemChildrenKind
extends ManifestEntityAction<MetaEntityActionRenameKind> {
extends ManifestEntityAction<MetaEntityActionRenameServerFileKind> {
type: 'entityAction';
kind: 'reloadTreeItemChildren';
}
Expand Down
4 changes: 2 additions & 2 deletions src/packages/core/extension-registry/models/index.ts
Expand Up @@ -6,7 +6,7 @@ import type { ManifestDashboardCollection } from './dashboard-collection.model.j
import type {
ManifestEntityAction,
ManifestEntityActionDeleteKind,
ManifestEntityActionRenameKind,
ManifestEntityActionRenameServerFileKind,
ManifestEntityActionReloadTreeItemChildrenKind,
ManifestEntityActionDuplicateKind,
ManifestEntityActionMoveKind,
Expand Down Expand Up @@ -107,7 +107,7 @@ export type ManifestEntityActions =
| ManifestEntityAction
| ManifestEntityActionDefaultKind
| ManifestEntityActionDeleteKind
| ManifestEntityActionRenameKind
| ManifestEntityActionRenameServerFileKind
| ManifestEntityActionReloadTreeItemChildrenKind
| ManifestEntityActionDuplicateKind
| ManifestEntityActionMoveKind
Expand Down
6 changes: 4 additions & 2 deletions src/packages/core/manifests.ts
@@ -1,6 +1,6 @@
import { manifests as collectionManifests } from './collection/manifests.js';
import { manifests as cultureManifests } from './culture/manifests.js';
import { manifests as contentTypeManifests } from './content-type/manifests.js';
import { manifests as cultureManifests } from './culture/manifests.js';
import { manifests as debugManifests } from './debug/manifests.js';
import { manifests as entityActionManifests } from './entity-action/manifests.js';
import { manifests as extensionManifests } from './extension-registry/manifests.js';
Expand All @@ -9,6 +9,7 @@ import { manifests as modalManifests } from './modal/common/manifests.js';
import { manifests as propertyActionManifests } from './property-action/manifests.js';
import { manifests as propertyEditorManifests } from './property-editor/manifests.js';
import { manifests as sectionManifests } from './section/manifests.js';
import { manifests as serverFileSystemManifests } from './server-file-system/manifests.js';
import { manifests as settingsManifests } from './settings/manifests.js';
import { manifests as themeManifests } from './themes/manifests.js';
import { manifests as treeManifests } from './tree/manifests.js';
Expand All @@ -18,8 +19,8 @@ import type { ManifestTypes, UmbBackofficeManifestKind } from './extension-regis

export const manifests: Array<ManifestTypes | UmbBackofficeManifestKind> = [
...collectionManifests,
...cultureManifests,
...contentTypeManifests,
...cultureManifests,
...debugManifests,
...entityActionManifests,
...extensionManifests,
Expand All @@ -28,6 +29,7 @@ export const manifests: Array<ManifestTypes | UmbBackofficeManifestKind> = [
...propertyActionManifests,
...propertyEditorManifests,
...sectionManifests,
...serverFileSystemManifests,
...settingsManifests,
...themeManifests,
...treeManifests,
Expand Down
1 change: 1 addition & 0 deletions src/packages/core/server-file-system/index.ts
@@ -1,2 +1,3 @@
export * from './append-file-extension.function.js';
export * from './server-path-unique-serializer.js';
export * from './rename/index.js';
3 changes: 3 additions & 0 deletions src/packages/core/server-file-system/manifests.ts
@@ -0,0 +1,3 @@
import { manifests as renameEntityActionManifests } from '../server-file-system/rename/manifests.js';

export const manifests = [...renameEntityActionManifests];
3 changes: 3 additions & 0 deletions src/packages/core/server-file-system/rename/index.ts
@@ -0,0 +1,3 @@
export * from './types.js';
export * from './rename-server-file.action.js';
export * from './rename-server-file-repository-base.js';
@@ -1,4 +1,4 @@
import { manifests as renameModalManifests } from './modal/manifests.js';
import { manifest as renameKindManifest } from './rename.action.kind.js';
import { manifest as renameKindManifest } from './rename-server-file.action.kind.js';

export const manifests = [...renameModalManifests, renameKindManifest];
12 changes: 12 additions & 0 deletions src/packages/core/server-file-system/rename/modal/manifests.ts
@@ -0,0 +1,12 @@
import type { ManifestModal } from '@umbraco-cms/backoffice/extension-registry';

export const UMB_RENAME_SERVER_FILE_MODAL_ALIAS = 'Umb.Modal.ServerFile.Rename';

export const manifests: Array<ManifestModal> = [
{
type: 'modal',
alias: UMB_RENAME_SERVER_FILE_MODAL_ALIAS,
name: 'Rename Server File Modal',
js: () => import('./rename-server-file-modal.element.js'),
},
];
@@ -1,14 +1,22 @@
import type { UmbRenameRepository } from '../types.js';
import type { UmbRenameModalData, UmbRenameModalValue } from './rename-modal.token.js';
import { html, customElement, css } from '@umbraco-cms/backoffice/external/lit';
import type { UmbRenameServerFileRepository } from '../types.js';
import type { UmbRenameModalData, UmbRenameServerFileModalValue } from './rename-server-file-modal.token.js';
import type { PropertyValueMap } from '@umbraco-cms/backoffice/external/lit';
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 { UmbExtensionApiInitializer } from '@umbraco-cms/backoffice/extension-api';
import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry';
import type { UmbItemRepository } from '@umbraco-cms/backoffice/repository';

@customElement('umb-rename-modal')
export class UmbRenameModalElement extends UmbModalBaseElement<UmbRenameModalData, UmbRenameModalValue> {
#renameRepository?: UmbRenameRepository<any>;
export class UmbRenameModalElement extends UmbModalBaseElement<UmbRenameModalData, UmbRenameServerFileModalValue> {
// TODO: make base type for item and detail models
#itemRepository?: UmbItemRepository<any>;
#renameRepository?: UmbRenameServerFileRepository<any>;
#init?: Promise<unknown>;

@state()
_name = '';

connectedCallback(): void {
super.connectedCallback();
Expand All @@ -17,16 +25,41 @@ export class UmbRenameModalElement extends UmbModalBaseElement<UmbRenameModalDat

#observeRepository() {
if (!this.data?.renameRepositoryAlias) throw new Error('A rename repository alias is required');
if (!this.data?.itemRepositoryAlias) throw new Error('An item repository alias is required');

// TODO: We should properly look into how we can simplify the one time usage of a extension api, as its a bit of overkill to take conditions/overwrites and observation of extensions into play here: [NL]
// But since this happens when we execute an action, it does most likely not hurt any users, but it is a bit of a overkill to do this for every action: [NL]
this.#init = Promise.all([
new UmbExtensionApiInitializer(
this,
umbExtensionsRegistry,
this.data.itemRepositoryAlias,
[this],
(permitted, ctrl) => {
this.#itemRepository = permitted ? (ctrl.api as UmbItemRepository<any>) : undefined;
},
).asPromise(),

new UmbExtensionApiInitializer(
this,
umbExtensionsRegistry,
this.data.renameRepositoryAlias,
[this],
(permitted, ctrl) => {
this.#renameRepository = permitted ? (ctrl.api as UmbRenameServerFileRepository<any>) : undefined;
},
).asPromise(),
]);
}

protected async firstUpdated(_changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): Promise<void> {
super.firstUpdated(_changedProperties);
if (!this.data?.unique) throw new Error('Unique identifier is not available');
await this.#init;
if (!this.#itemRepository) throw new Error('Item repository is not available');

new UmbExtensionApiInitializer(
this,
umbExtensionsRegistry,
this.data.renameRepositoryAlias,
[this],
(permitted, ctrl) => {
this.#renameRepository = permitted ? (ctrl.api as UmbRenameRepository<any>) : undefined;
},
);
const { data } = await this.#itemRepository.requestItems([this.data.unique]);
this._name = data?.[0].name ?? '';
}

async #onSubmit(event: SubmitEvent) {
Expand Down Expand Up @@ -64,6 +97,7 @@ export class UmbRenameModalElement extends UmbModalBaseElement<UmbRenameModalDat
type="text"
id="name"
name="name"
value=${this._name}
placeholder="Enter new name..."
required
required-message="Name is required"></uui-input>
Expand Down

0 comments on commit fa6e846

Please sign in to comment.