Skip to content

Commit 6effe32

Browse files
Document Recycle Bin: Fix missing item name when restoring (#20599)
allow to pass in a item data resolver
1 parent f0ac7b4 commit 6effe32

File tree

5 files changed

+35
-13
lines changed

5 files changed

+35
-13
lines changed

src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-action/restore-from-recycle-bin/modal/restore-from-recycle-bin-modal.element.ts

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,7 @@ import { UmbModalBaseElement, umbOpenModal } from '@umbraco-cms/backoffice/modal
1010
import { createExtensionApiByAlias } from '@umbraco-cms/backoffice/extension-registry';
1111
import type { UmbItemRepository } from '@umbraco-cms/backoffice/repository';
1212

13-
const elementName = 'umb-restore-from-recycle-bin-modal';
14-
15-
@customElement(elementName)
13+
@customElement('umb-restore-from-recycle-bin-modal')
1614
export class UmbRestoreFromRecycleBinModalElement extends UmbModalBaseElement<
1715
UmbRestoreFromRecycleBinModalData,
1816
UmbRestoreFromRecycleBinModalValue
@@ -21,10 +19,13 @@ export class UmbRestoreFromRecycleBinModalElement extends UmbModalBaseElement<
2119
private _isAutomaticRestore = false;
2220

2321
@state()
24-
private _restoreItem?: any;
22+
private _destinationItem?: any;
2523

2624
@state()
27-
private _destinationItem?: any;
25+
private _destinationItemName?: string;
26+
27+
@state()
28+
private _restoreItemName?: string;
2829

2930
#recycleBinRepository?: UmbRecycleBinRepository;
3031

@@ -34,7 +35,16 @@ export class UmbRestoreFromRecycleBinModalElement extends UmbModalBaseElement<
3435
super.firstUpdated(_changedProperties);
3536
if (!this.data?.unique) throw new Error('Cannot restore an item without a unique identifier.');
3637

37-
this._restoreItem = await this.#requestItem(this.data.unique);
38+
const restoreItem = await this.#requestItem(this.data.unique);
39+
40+
if (this.data.itemDataResolver) {
41+
const resolver = new this.data.itemDataResolver(this);
42+
resolver.setData(restoreItem);
43+
this._restoreItemName = await resolver.getName();
44+
} else {
45+
this._restoreItemName = restoreItem.name;
46+
}
47+
3848
const unique = await this.#requestAutomaticRestoreDestination();
3949

4050
if (unique !== undefined) {
@@ -47,9 +57,7 @@ export class UmbRestoreFromRecycleBinModalElement extends UmbModalBaseElement<
4757
// TODO: handle ROOT lookup. Currently, we can't look up the root in the item repository.
4858
// This is a temp solution to show something in the UI.
4959
if (unique === null) {
50-
this._destinationItem = {
51-
name: 'ROOT',
52-
};
60+
this._destinationItemName = 'Root';
5361

5462
this.#setDestinationValue({
5563
unique: null,
@@ -61,6 +69,14 @@ export class UmbRestoreFromRecycleBinModalElement extends UmbModalBaseElement<
6169
this._destinationItem = await this.#requestItem(unique);
6270
if (!this._destinationItem) throw new Error('Cant find destination item.');
6371

72+
if (this.data?.itemDataResolver) {
73+
const resolver = new this.data.itemDataResolver(this);
74+
resolver.setData(this._destinationItem);
75+
this._destinationItemName = await resolver.getName();
76+
} else {
77+
this._destinationItemName = this._destinationItem.name;
78+
}
79+
6480
this.#setDestinationValue({
6581
unique: this._destinationItem.unique,
6682
entityType: this._destinationItem.entityType,
@@ -138,7 +154,7 @@ export class UmbRestoreFromRecycleBinModalElement extends UmbModalBaseElement<
138154
<umb-body-layout headline="Restore">
139155
<uui-box>
140156
${this._isAutomaticRestore
141-
? html` Restore ${this._restoreItem?.name} to ${this._destinationItem?.name}`
157+
? html` Restore ${this._restoreItemName} to ${this._destinationItemName}`
142158
: this.#renderCustomSelectDestination()}
143159
</uui-box>
144160
${this.#renderActions()}
@@ -151,8 +167,8 @@ export class UmbRestoreFromRecycleBinModalElement extends UmbModalBaseElement<
151167
<h4>Cannot automatically restore this item.</h4>
152168
<p>There is no location where this item can be automatically restored. You can select a new location below.</p>
153169
<h5>Restore to:</h5>
154-
${this._destinationItem
155-
? html`<uui-ref-node name=${this._destinationItem.name}>
170+
${this._destinationItem && this._destinationItemName
171+
? html`<uui-ref-node name=${this._destinationItemName}>
156172
<uui-action-bar slot="actions">
157173
<uui-button @click=${() => (this._destinationItem = undefined)} label="Remove"
158174
>${this.localize.term('general_remove')}</uui-button
@@ -186,6 +202,6 @@ export default UmbRestoreFromRecycleBinModalElement;
186202

187203
declare global {
188204
interface HTMLElementTagNameMap {
189-
[elementName]: UmbRestoreFromRecycleBinModalElement;
205+
['umb-restore-from-recycle-bin-modal']: UmbRestoreFromRecycleBinModalElement;
190206
}
191207
}

src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-action/restore-from-recycle-bin/modal/restore-from-recycle-bin-modal.token.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity';
2+
import type { UmbItemDataResolverConstructor } from '@umbraco-cms/backoffice/entity-item';
23
import type { UmbPickerModalData, UmbPickerModalValue } from '@umbraco-cms/backoffice/modal';
34
import { UmbModalToken } from '@umbraco-cms/backoffice/modal';
45

@@ -7,6 +8,7 @@ export interface UmbRestoreFromRecycleBinModalData {
78
entityType: string;
89
recycleBinRepositoryAlias: string;
910
itemRepositoryAlias: string;
11+
itemDataResolver?: UmbItemDataResolverConstructor;
1012
pickerModal: UmbModalToken<UmbPickerModalData<any>, UmbPickerModalValue> | string;
1113
}
1214

src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-action/restore-from-recycle-bin/restore-from-recycle-bin.action.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ export class UmbRestoreFromRecycleBinEntityAction extends UmbEntityActionBase<Me
2424
entityType: this.args.entityType,
2525
recycleBinRepositoryAlias: this.args.meta.recycleBinRepositoryAlias,
2626
itemRepositoryAlias: this.args.meta.itemRepositoryAlias,
27+
itemDataResolver: this.args.meta.itemDataResolver,
2728
pickerModal: this.args.meta.pickerModal,
2829
},
2930
});

src/Umbraco.Web.UI.Client/src/packages/core/recycle-bin/entity-action/restore-from-recycle-bin/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import type { ManifestEntityAction, MetaEntityActionDefaultKind } from '@umbraco-cms/backoffice/entity-action';
2+
import type { UmbItemDataResolverConstructor } from '@umbraco-cms/backoffice/entity-item';
23
import type { UmbModalToken, UmbPickerModalData, UmbPickerModalValue } from '@umbraco-cms/backoffice/modal';
34

45
export interface ManifestEntityActionRestoreFromRecycleBinKind
@@ -10,6 +11,7 @@ export interface ManifestEntityActionRestoreFromRecycleBinKind
1011
export interface MetaEntityActionRestoreFromRecycleBinKind extends MetaEntityActionDefaultKind {
1112
recycleBinRepositoryAlias: string;
1213
itemRepositoryAlias: string;
14+
itemDataResolver?: UmbItemDataResolverConstructor;
1315
pickerModal: UmbModalToken<UmbPickerModalData<any>, UmbPickerModalValue> | string;
1416
}
1517

src/Umbraco.Web.UI.Client/src/packages/documents/documents/recycle-bin/entity-action/manifests.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ export const manifests: Array<UmbExtensionManifest> = [
4646
forEntityTypes: [UMB_DOCUMENT_ENTITY_TYPE],
4747
meta: {
4848
itemRepositoryAlias: UMB_DOCUMENT_ITEM_REPOSITORY_ALIAS,
49+
itemDataResolver: UmbDocumentItemDataResolver,
4950
recycleBinRepositoryAlias: UMB_DOCUMENT_RECYCLE_BIN_REPOSITORY_ALIAS,
5051
pickerModal: UMB_DOCUMENT_PICKER_MODAL,
5152
},

0 commit comments

Comments
 (0)