Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature: Bulk Delete/Trash referenced by #18393

Open
wants to merge 178 commits into
base: v15/dev
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
178 commits
Select commit Hold shift + click to select a range
01516bb
add trash confirm modal
madsrasmussen Feb 6, 2025
9ccb58a
make referenceRepo optional + adjust styling
madsrasmussen Feb 6, 2025
f99562a
add referenceRepository to media trash action
madsrasmussen Feb 6, 2025
e7348f5
Merge branch 'v15/dev' into v15/feature/delete-referenced-by
madsrasmussen Feb 6, 2025
edb6a7c
wip entity-item-ref extension point
madsrasmussen Feb 6, 2025
62f1bd7
clean up
madsrasmussen Feb 6, 2025
fd06887
add ref list element
madsrasmussen Feb 6, 2025
977b047
fix styling
madsrasmussen Feb 6, 2025
0731f66
Update document-item-ref.element.ts
madsrasmussen Feb 6, 2025
5901d4a
move item repo
madsrasmussen Feb 6, 2025
5b0444f
implement for input member
madsrasmussen Feb 6, 2025
d073ab5
enable action slot
madsrasmussen Feb 7, 2025
964e86c
add null check
madsrasmussen Feb 7, 2025
e1cbf73
fix sorting again
madsrasmussen Feb 7, 2025
b986ebd
fix sorting again
madsrasmussen Feb 7, 2025
a98e3db
use member element
madsrasmussen Feb 7, 2025
3aba568
add draft styling back
madsrasmussen Feb 7, 2025
f4547b5
move item repository
madsrasmussen Feb 7, 2025
1adf436
implement for user input
madsrasmussen Feb 7, 2025
db9b9d3
pass readonly and standalone props
madsrasmussen Feb 7, 2025
1088b04
make editPath a state
madsrasmussen Feb 7, 2025
d70fb95
Update member-item-ref.element.ts
madsrasmussen Feb 7, 2025
914953b
Fix user item ref
madsrasmussen Feb 7, 2025
726d07d
remove open button
madsrasmussen Feb 7, 2025
efe75be
remove unused
madsrasmussen Feb 7, 2025
33f3759
remove unused
madsrasmussen Feb 8, 2025
95c12ec
check for section permission
madsrasmussen Feb 8, 2025
dea4393
Merge branch 'v15/feature/entity-item-ref-extension' into v15/feature…
madsrasmussen Feb 8, 2025
c1276e4
add null check
madsrasmussen Feb 9, 2025
93aa0ea
change to use entity-item-ref element
madsrasmussen Feb 9, 2025
dbd27cc
register media item ref
madsrasmussen Feb 9, 2025
e940f6e
Merge branch 'v15/dev' into v15/feature/entity-item-ref-extension
madsrasmussen Feb 10, 2025
0afe46c
add fallback element
madsrasmussen Feb 10, 2025
e446c42
Merge branch 'v15/feature/entity-item-ref-extension' into v15/feature…
madsrasmussen Feb 10, 2025
4394db3
show 3 references
madsrasmussen Feb 10, 2025
4ffa3d6
wip data mapper concept
madsrasmussen Feb 10, 2025
fa49110
add unique to modal route registration
madsrasmussen Feb 11, 2025
a76b30a
add unique to modal router
madsrasmussen Feb 11, 2025
ed0deb6
remove unused id
madsrasmussen Feb 11, 2025
0f72728
Update member-item-ref.element.ts
madsrasmussen Feb 11, 2025
13d5fea
append unique
madsrasmussen Feb 11, 2025
494fcbe
compare with old value
madsrasmussen Feb 11, 2025
3c67f00
only recreate the controller if the entity type changes
madsrasmussen Feb 11, 2025
b521750
fix console warning
madsrasmussen Feb 11, 2025
4988c80
Merge branch 'v15/feature/entity-item-ref-extension' into v15/feature…
madsrasmussen Feb 11, 2025
80b144e
implement for document item ref
madsrasmussen Feb 11, 2025
08d3add
Added $type to ReferenceResponseModels
Migaroez Feb 11, 2025
2cb20c8
move logic to item data resolver
madsrasmussen Feb 11, 2025
0c15b41
render draft as a tag
madsrasmussen Feb 11, 2025
7fe30d7
Update document-item-ref.element.ts
madsrasmussen Feb 11, 2025
e8ad351
Merge branch 'v15/dev' into v15/feature/entity-item-ref-extension
madsrasmussen Feb 11, 2025
cb4df75
Merge branch 'v15/feature/entity-item-ref-extension' into v15/feature…
madsrasmussen Feb 11, 2025
212ae20
Merge branch 'v15/feature/reference-types' into v15/feature/$type-dat…
madsrasmussen Feb 11, 2025
9be6d81
generate server models
madsrasmussen Feb 11, 2025
e47217e
add more helpers to data resolver
madsrasmussen Feb 11, 2025
f45ae29
export resolver
madsrasmussen Feb 11, 2025
2b0ae99
add observables
madsrasmussen Feb 11, 2025
0ae2420
use observables in document item ref
madsrasmussen Feb 11, 2025
6f7cc8e
add data resolver to tree item
madsrasmussen Feb 11, 2025
ef1638b
add observable state
madsrasmussen Feb 11, 2025
029cc3c
use const
madsrasmussen Feb 11, 2025
cdcbf31
align models
madsrasmussen Feb 11, 2025
f6ac0e4
get icon from document type object
madsrasmussen Feb 11, 2025
ff164c7
observe name and state
madsrasmussen Feb 11, 2025
fe1fbea
Merge branch 'v15/dev' into v15/feature/entity-item-ref-extension
madsrasmussen Feb 12, 2025
9b47824
update observed value when a new item is set
madsrasmussen Feb 12, 2025
d43c6cb
Merge branch 'v15/dev' into v15/feature/entity-item-ref-extension
madsrasmussen Feb 12, 2025
dbb744d
Merge branch 'v15/feature/entity-item-ref-extension' into v15/feature…
madsrasmussen Feb 12, 2025
f218486
update method name
madsrasmussen Feb 12, 2025
dc1b5ce
update method names
madsrasmussen Feb 12, 2025
a1444b5
pass model type
madsrasmussen Feb 12, 2025
41a0c11
pass context type
madsrasmussen Feb 12, 2025
9b3f45d
use api prop instead of context
madsrasmussen Feb 12, 2025
c075deb
use api prop instead of context
madsrasmussen Feb 12, 2025
cf34d19
fix types
madsrasmussen Feb 12, 2025
1b04ec7
use addUniquePaths for modal registration
madsrasmussen Feb 13, 2025
6dea5f0
Merge branch 'v15/feature/entity-item-ref-extension' into v15/feature…
madsrasmussen Feb 13, 2025
f1dc763
Merge branch 'v15/feature/display-current-variant-item-name' into v15…
madsrasmussen Feb 13, 2025
1c8432a
add fallback
madsrasmussen Feb 13, 2025
bafd96b
use ref list
madsrasmussen Feb 13, 2025
ec95d71
Merge branch 'v15/dev' into v15/feature/display-current-variant-item-…
madsrasmussen Feb 13, 2025
9f62268
Merge branch 'v15/feature/display-current-variant-item-name' into v15…
madsrasmussen Feb 13, 2025
870cd86
use reference items for media
madsrasmussen Feb 13, 2025
f43e32e
make mapper name more generic
madsrasmussen Feb 13, 2025
bb03968
make default ref item always readonly
madsrasmussen Feb 13, 2025
fbf9f2f
export types
madsrasmussen Feb 13, 2025
75face7
temp fake variants array
madsrasmussen Feb 13, 2025
63e03ac
add variants array to model
madsrasmussen Feb 13, 2025
575f3b2
Update media-references-workspace-info-app.element.ts
madsrasmussen Feb 13, 2025
81a0805
add variants to model
madsrasmussen Feb 13, 2025
934e03b
hardcode fake array
madsrasmussen Feb 13, 2025
54814c1
register media ref item
madsrasmussen Feb 13, 2025
bbc5fee
update mock data
madsrasmussen Feb 13, 2025
193d93a
dot not allow conditions for data mappers
madsrasmussen Feb 13, 2025
57b1145
add data mapper
madsrasmussen Feb 13, 2025
5f9d9d4
prefix info routes
madsrasmussen Feb 13, 2025
a731160
prefix all ref routes
madsrasmussen Feb 13, 2025
ddbec2a
return undefined if there is not edit path
madsrasmussen Feb 13, 2025
c401187
Merge branch 'v15/feature/$type-data-mapper-extension' into v15/featu…
madsrasmussen Feb 14, 2025
83cf3c2
Merge branch 'v15/dev' into v15/feature/display-current-variant-item-…
madsrasmussen Feb 14, 2025
23fd63d
Merge branch 'v15/feature/display-current-variant-item-name' into v15…
madsrasmussen Feb 14, 2025
6b1891e
Merge branch 'v15/feature/$type-data-mapper-extension' into v15/featu…
madsrasmussen Feb 14, 2025
b518e78
add types for reference data source + repository
madsrasmussen Feb 14, 2025
161c9d5
split trash with relation into its own action
madsrasmussen Feb 14, 2025
a8324b6
render descendants with references
madsrasmussen Feb 14, 2025
541753c
fix length check
madsrasmussen Feb 14, 2025
dcc9b3d
set standalone attribute
madsrasmussen Feb 14, 2025
d3e2db5
implement for media
madsrasmussen Feb 14, 2025
e311867
move trash
madsrasmussen Feb 16, 2025
1e084b4
wip delete with relation
madsrasmussen Feb 16, 2025
9e273f9
move to element
madsrasmussen Feb 16, 2025
c18e8e7
Merge branch 'v15/dev' into v15/feature/display-current-variant-item-…
madsrasmussen Feb 17, 2025
ece64d9
Merge branch 'v15/feature/display-current-variant-item-name' into v15…
madsrasmussen Feb 17, 2025
46b050a
fix name collision
madsrasmussen Feb 17, 2025
11b3e04
require data source identifier
madsrasmussen Feb 17, 2025
2d3ca29
use management api mapper
madsrasmussen Feb 17, 2025
1c5aedf
add management api mapper
madsrasmussen Feb 17, 2025
edefa42
Merge branch 'v15/dev' into v15/feature/display-current-variant-item-…
madsrasmussen Feb 17, 2025
ac8955e
fix type errors
madsrasmussen Feb 17, 2025
2cbe1ef
Update index.ts
madsrasmussen Feb 17, 2025
0a62426
align naming
madsrasmussen Feb 17, 2025
8dd474d
Merge branch 'v15/feature/display-current-variant-item-name' into v15…
madsrasmussen Feb 17, 2025
5a38296
Merge branch 'v15/feature/$type-data-mapper-extension' into v15/featu…
madsrasmussen Feb 17, 2025
f83ee80
show references when deleting a document
madsrasmussen Feb 17, 2025
1443b9c
Update delete-with-relation-modal.element.ts
madsrasmussen Feb 17, 2025
6815160
use deleteWithRelation kind for media
madsrasmussen Feb 17, 2025
0e206b6
clean up
madsrasmussen Feb 17, 2025
2823164
localize trash
madsrasmussen Feb 17, 2025
e0eca32
fix type
madsrasmussen Feb 17, 2025
1f264f6
Update trash-with-relation.action.ts
madsrasmussen Feb 17, 2025
c37302e
override confirm methods in trash and delete actions
madsrasmussen Feb 17, 2025
cbd7ea4
Update index.ts
madsrasmussen Feb 17, 2025
7655089
export constants
madsrasmussen Feb 17, 2025
a178424
Limit referenced-by document and media endpoints to references only.
AndyButland Feb 17, 2025
aafc107
Merge branch 'v15/task/limit-referenced-by-endpoints-to-dependencies-…
madsrasmussen Feb 18, 2025
a63bdcd
Merge branch 'v15/dev' into v15/feature/delete-referenced-by
madsrasmussen Feb 18, 2025
3d6be7a
Update document-reference-table.element.ts
madsrasmussen Feb 18, 2025
ac83775
add methods to get bulk references for documents
madsrasmussen Feb 18, 2025
b4de0be
wip bulk trash
madsrasmussen Feb 18, 2025
7559785
Merge branch 'v15/dev' into v15/feature/$type-data-mapper-extension
nielslyngsoe Feb 18, 2025
c17d198
add todo comment
nielslyngsoe Feb 18, 2025
6dcc897
implement path pattern for media item
nielslyngsoe Feb 18, 2025
8dd8293
clean up
nielslyngsoe Feb 18, 2025
608b103
more clean up
nielslyngsoe Feb 18, 2025
3e06749
sort imports
nielslyngsoe Feb 18, 2025
a92ea32
member edit path pattern
nielslyngsoe Feb 18, 2025
9b1534f
clean up
nielslyngsoe Feb 18, 2025
9b070c0
remove unused variant id
madsrasmussen Feb 19, 2025
32c3d17
export extension types
madsrasmussen Feb 19, 2025
cc94607
Merge branch 'v15/feature/$type-data-mapper-extension' into v15/featu…
madsrasmussen Feb 19, 2025
c60a519
wip bulk trash with relation
madsrasmussen Feb 19, 2025
474eb51
debounce incoming events
madsrasmussen Feb 19, 2025
4332a37
look up items + notify
madsrasmussen Feb 19, 2025
9ab8987
add todo
madsrasmussen Feb 19, 2025
b0459c0
temp solution to make it non breaking
madsrasmussen Feb 19, 2025
91914ab
add bulk delete
madsrasmussen Feb 19, 2025
9b0601e
better description
madsrasmussen Feb 19, 2025
0a87152
implement methods for are referenced
madsrasmussen Feb 19, 2025
d7c0081
change to use bulk trash with relation
madsrasmussen Feb 19, 2025
dc5b622
implement delete with relation kind
madsrasmussen Feb 19, 2025
db83007
deprecation warnings
madsrasmussen Feb 19, 2025
74242ea
move files
madsrasmussen Feb 19, 2025
9b4d22d
move files
madsrasmussen Feb 19, 2025
e61d63c
export const
madsrasmussen Feb 19, 2025
b486cf9
use correct kind
madsrasmussen Feb 20, 2025
2b0ceab
align naming
madsrasmussen Feb 20, 2025
aa8bbea
Merge branch 'v15/feature/$type-data-mapper-extension' into v15/featu…
madsrasmussen Feb 20, 2025
6463334
Merge branch 'v15/dev' into v15/feature/delete-referenced-by
nielslyngsoe Feb 20, 2025
d7410a0
upper case Trash
nielslyngsoe Feb 20, 2025
6e3ff86
correct uui-text impl
nielslyngsoe Feb 20, 2025
67e6b7a
Merge branch 'v15/feature/delete-referenced-by' into v15/feature/bulk…
madsrasmussen Feb 20, 2025
cab36dc
Merge branch 'v15/dev' into v15/feature/bulk-delete-referenced-by
madsrasmussen Feb 20, 2025
8aed597
add comment about the v2 name
madsrasmussen Feb 20, 2025
91f6952
fix circular depdendencies
madsrasmussen Feb 21, 2025
68689c8
Merge branch 'v15/dev' into v15/feature/bulk-delete-referenced-by
madsrasmussen Feb 21, 2025
6f49a75
rename const
madsrasmussen Feb 21, 2025
3d62521
split to module
madsrasmussen Feb 21, 2025
9339a6e
import global components
madsrasmussen Feb 21, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/Umbraco.Web.UI.Client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
"./entity-bulk-action": "./dist-cms/packages/core/entity-bulk-action/index.js",
"./entity-create-option-action": "./dist-cms/packages/core/entity-create-option-action/index.js",
"./entity": "./dist-cms/packages/core/entity/index.js",
"./entity-item": "./dist-cms/packages/core/entity-item/index.js",
"./event": "./dist-cms/packages/core/event/index.js",
"./extension-registry": "./dist-cms/packages/core/extension-registry/index.js",
"./health-check": "./dist-cms/packages/health-check/index.js",
Expand Down
4 changes: 4 additions & 0 deletions src/Umbraco.Web.UI.Client/src/assets/lang/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -511,6 +511,10 @@ export default {
confirmlogout: 'Are you sure?',
confirmSure: 'Are you sure?',
confirmTrash: (name: string) => `Are you sure you want to move <strong>${name}</strong> to the Recycle Bin?`,
confirmBulkTrash: (total: number) =>
`Are you sure you want to move <strong>${total} ${total === 1 ? 'item' : 'items'}</strong> to the Recycle Bin?`,
confirmBulkDelete: (total: number) =>
`Are you sure you want to delete <strong>${total} ${total === 1 ? 'item' : 'items'}</strong>?`,
cut: 'Cut',
editDictionary: 'Edit dictionary item',
editLanguage: 'Edit language',
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import type { UmbEntityActionEventArgs } from './entity-action.event.js';
import { UmbEntityActionEvent } from './entity-action.event.js';

export class UmbEntityDeletedEvent extends UmbEntityActionEvent {
static readonly TYPE = 'entity-deleted';

constructor(args: UmbEntityActionEventArgs) {
super(UmbEntityDeletedEvent.TYPE, args);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ export * from './entity-action-base.js';
export * from './entity-action-list.element.js';
export * from './entity-action.event.js';
export * from './entity-updated.event.js';
export * from './entity-deleted.event.js';
export type * from './types.js';

export { UmbRequestReloadStructureForEntityEvent } from './request-reload-structure-for-entity.event.js';
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { UMB_ENTITY_BULK_ACTION_DEFAULT_KIND_MANIFEST } from '../../default/default.action.kind.js';
import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry';

export const UMB_ENTITY_BULK_ACTION_DELETE_KIND = 'delete';

export const UMB_ENTITY_BULK_ACTION_DELETE_KIND_MANIFEST: UmbExtensionManifestKind = {
type: 'kind',
alias: 'Umb.Kind.EntityBulkAction.Delete',
matchKind: UMB_ENTITY_BULK_ACTION_DELETE_KIND,
matchType: 'entityBulkAction',
manifest: {
...UMB_ENTITY_BULK_ACTION_DEFAULT_KIND_MANIFEST.manifest,
type: 'entityBulkAction',
kind: UMB_ENTITY_BULK_ACTION_DELETE_KIND,
api: () => import('./bulk-delete.action.js'),
weight: 1100,
meta: {
icon: 'icon-trash',
label: '#actions_delete',
},
},
};

export const manifest = UMB_ENTITY_BULK_ACTION_DELETE_KIND_MANIFEST;
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
import { UmbEntityBulkActionBase } from '../../entity-bulk-action-base.js';
import type { MetaEntityBulkActionDeleteKind } from './types.js';
import { createExtensionApiByAlias } from '@umbraco-cms/backoffice/extension-registry';
import { umbConfirmModal } from '@umbraco-cms/backoffice/modal';
import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action';
import {
UmbEntityDeletedEvent,
UmbRequestReloadChildrenOfEntityEvent,
UmbRequestReloadStructureForEntityEvent,
} from '@umbraco-cms/backoffice/entity-action';
import { UMB_NOTIFICATION_CONTEXT } from '@umbraco-cms/backoffice/notification';
import { UmbLocalizationController } from '@umbraco-cms/backoffice/localization-api';
import { UMB_ENTITY_CONTEXT, type UmbEntityModel } from '@umbraco-cms/backoffice/entity';
import type { UmbDetailRepository, UmbItemRepository } from '@umbraco-cms/backoffice/repository';

export class UmbDeleteEntityBulkAction<
MetaKindType extends MetaEntityBulkActionDeleteKind = MetaEntityBulkActionDeleteKind,
> extends UmbEntityBulkActionBase<MetaKindType> {
#localize = new UmbLocalizationController(this);
_items: Array<any> = [];

override async execute() {
if (this.selection?.length === 0) {
throw new Error('No items selected.');
}

// TODO: Move item look up to a future bulk action context
await this.#requestItems();
await this._confirmDelete(this._items);
await this.#requestBulkDelete(this.selection);
}

protected async _confirmDelete(items: Array<any>) {
const headline = '#actions_delete';
const message = '#defaultdialogs_confirmBulkDelete';

// TODO: consider showing more details about the items being deleted
await umbConfirmModal(this._host, {
headline,
content: this.#localize.string(message, items.length),
color: 'danger',
confirmLabel: '#actions_delete',
});
}

async #requestItems() {
const itemRepository = await createExtensionApiByAlias<UmbItemRepository<any>>(
this,
this.args.meta.itemRepositoryAlias,
);

const { data } = await itemRepository.requestItems(this.selection);

this._items = data ?? [];
}

async #requestBulkDelete(uniques: Array<string>) {
const detailRepository = await createExtensionApiByAlias<UmbDetailRepository<UmbEntityModel>>(
this,
this.args.meta.detailRepositoryAlias,
);

const notificationContext = await this.getContext(UMB_NOTIFICATION_CONTEXT);

const succeeded: Array<string> = [];

for (const unique of uniques) {
const { error } = await detailRepository.delete(unique);

if (error) {
const notification = { data: { message: error.message } };
notificationContext?.peek('danger', notification);
} else {
succeeded.push(unique);
}
}

if (succeeded.length > 0) {
const notification = {
data: { message: `Deleted ${succeeded.length} ${succeeded.length === 1 ? 'item' : 'items'}` },
};
notificationContext?.peek('positive', notification);
}

await this.#notify(succeeded);
}

async #notify(succeeded: Array<string>) {
const entityContext = await this.getContext(UMB_ENTITY_CONTEXT);
if (!entityContext) throw new Error('Entity Context is not available');

const eventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT);
if (!eventContext) throw new Error('Event Context is not available');

const entityType = entityContext.getEntityType();
const unique = entityContext.getUnique();

if (entityType && unique !== undefined) {
const args = { entityType, unique };

const reloadChildren = new UmbRequestReloadChildrenOfEntityEvent(args);
eventContext.dispatchEvent(reloadChildren);

const reloadStructure = new UmbRequestReloadStructureForEntityEvent(args);
eventContext.dispatchEvent(reloadStructure);
}

const succeededItems = this._items.filter((item) => succeeded.includes(item.unique));

succeededItems.forEach((item) => {
const deletedEvent = new UmbEntityDeletedEvent({
unique: item.unique,
entityType: item.entityType,
});

eventContext.dispatchEvent(deletedEvent);
});
}
}

export { UmbDeleteEntityBulkAction as api };
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export {
UMB_ENTITY_BULK_ACTION_DELETE_KIND_MANIFEST,
UMB_ENTITY_BULK_ACTION_DELETE_KIND,
} from './bulk-delete.action.kind.js';
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export * from './bulk-delete.action.js';
export type * from './types.js';
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import { manifest as deleteKindManifest } from './bulk-delete.action.kind.js';
import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry';

export const manifests: Array<UmbExtensionManifest | UmbExtensionManifestKind> = [deleteKindManifest];
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import type {
ManifestEntityBulkAction,
MetaEntityBulkActionDefaultKind,
} from '@umbraco-cms/backoffice/extension-registry';

export interface ManifestEntityBulkActionDeleteKind extends ManifestEntityBulkAction<MetaEntityBulkActionDeleteKind> {
type: 'entityBulkAction';
kind: 'delete';
}

export interface MetaEntityBulkActionDeleteKind extends MetaEntityBulkActionDefaultKind {
detailRepositoryAlias: string;
itemRepositoryAlias: string;
}

declare global {
interface UmbExtensionManifestMap {
umbManifestEntityBulkActionDeleteKind: ManifestEntityBulkActionDeleteKind;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export const UMB_ENTITY_BULK_ACTION_TRASH_KIND = 'trash';
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
import type { UmbRepositoryErrorResponse } from '../../../repository/types.js';
import type { UmbBulkTrashRequestArgs } from './types.js';
import type { UmbApi } from '@umbraco-cms/backoffice/extension-api';

/**
* @deprecated since 15.3.0. Will be removed in 17.0.0. Call trash method on UmbRecycleBin repositories instead.
* @exports
* @interface UmbBulkTrashRepository
* @augments UmbApi
*/
export interface UmbBulkTrashRepository extends UmbApi {
requestBulkTrash(args: UmbBulkTrashRequestArgs): Promise<UmbRepositoryErrorResponse>;
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
import { UMB_ENTITY_BULK_ACTION_DEFAULT_KIND_MANIFEST } from '../../default/default.action.kind.js';
import { UMB_ENTITY_BULK_ACTION_TRASH_KIND } from './constants.js';
import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry';

export const manifest: UmbExtensionManifestKind = {
type: 'kind',
alias: 'Umb.Kind.EntityBulkAction.Trash',
matchKind: 'trash',
matchKind: UMB_ENTITY_BULK_ACTION_TRASH_KIND,
matchType: 'entityBulkAction',
manifest: {
...UMB_ENTITY_BULK_ACTION_DEFAULT_KIND_MANIFEST.manifest,
type: 'entityBulkAction',
kind: 'trash',
kind: UMB_ENTITY_BULK_ACTION_TRASH_KIND,
api: () => import('./trash.action.js'),
weight: 700,
forEntityTypes: [],
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import type { UmbBulkTrashRepository } from './trash-repository.interface.js';
import { createExtensionApiByAlias } from '@umbraco-cms/backoffice/extension-registry';
import { UmbEntityBulkActionBase } from '@umbraco-cms/backoffice/entity-bulk-action';
import { UmbEntityBulkActionBase, type UmbEntityBulkActionArgs } from '@umbraco-cms/backoffice/entity-bulk-action';
import {
UmbRequestReloadChildrenOfEntityEvent,
UmbRequestReloadStructureForEntityEvent,
Expand All @@ -9,8 +9,26 @@ import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action';
import { UMB_ENTITY_CONTEXT } from '@umbraco-cms/backoffice/entity';
import { umbConfirmModal } from '@umbraco-cms/backoffice/modal';
import type { MetaEntityBulkActionTrashKind } from '@umbraco-cms/backoffice/extension-registry';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import { UmbDeprecation } from '@umbraco-cms/backoffice/utils';

/**
* @deprecated since v15.3.0. Will be removed in v17.0.0. import `UmbMediaTrashEntityBulkAction` from @umbraco-cms/backoffice/recycle-bin instead.
* @exports
* @class UmbMediaTrashEntityBulkAction
* @augments {UmbEntityBulkActionBase<MetaEntityBulkActionTrashKind>}
*/
export class UmbMediaTrashEntityBulkAction extends UmbEntityBulkActionBase<MetaEntityBulkActionTrashKind> {
constructor(host: UmbControllerHost, args: UmbEntityBulkActionArgs<MetaEntityBulkActionTrashKind>) {
super(host, args);

new UmbDeprecation({
removeInVersion: '17.0.0',
deprecated: 'UmbMediaTrashEntityBulkAction',
solution: 'import UmbMediaTrashEntityBulkAction from @umbraco-cms/backoffice/recycle-bin instead.',
}).warn();
}

async execute() {
if (this.selection?.length === 0) return;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
export type * from './duplicate-to/index.js';
export type * from './move-to/index.js';
export type * from './trash/index.js';
export type * from './bulk-delete/index.js';
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
export type * from './common/index.js';
export * from './entity-bulk-action-base.js';
export * from './entity-bulk-action.element.js';
export type * from './entity-bulk-action.interface.js';
export type * from './entity-bulk-action-element.interface.js';
export * from './common/bulk-delete/index.js';
export type * from './types.js';

export { UMB_ENTITY_BULK_ACTION_DEFAULT_KIND_MANIFEST } from './default/default.action.kind.js';
export {
UMB_ENTITY_BULK_ACTION_DELETE_KIND_MANIFEST,
UMB_ENTITY_BULK_ACTION_DELETE_KIND,
} from './common/bulk-delete/bulk-delete.action.kind.js';

export { UMB_ENTITY_BULK_ACTION_TRASH_KIND } from './common/trash/constants.js';
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,14 @@ import { manifests as defaultEntityBulkActionManifests } from './default/manifes
import { manifests as duplicateEntityBulkActionManifests } from './common/duplicate-to/manifests.js';
import { manifests as moveToEntityBulkActionManifests } from './common/move-to/manifests.js';
import { manifests as trashEntityBulkActionManifests } from './common/trash/manifests.js';
import { manifests as deleteEntityBulkActionManifests } from './common/bulk-delete/manifests.js';

import type { UmbExtensionManifestKind } from '@umbraco-cms/backoffice/extension-registry';

export const manifests: Array<UmbExtensionManifest | UmbExtensionManifestKind> = [
...defaultEntityBulkActionManifests,
...duplicateEntityBulkActionManifests,
...moveToEntityBulkActionManifests,
...trashEntityBulkActionManifests,
...deleteEntityBulkActionManifests,
];
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
import type { MetaEntityBulkAction } from '../extension-registry/extensions/entity-bulk-action.extension.js';

export type * from './common/types.js';
export type * from './entity-bulk-action.interface.js';
export type * from './entity-bulk-action-element.interface.js';

export interface UmbEntityBulkActionArgs<MetaArgsType extends MetaEntityBulkAction> {
entityType: string;
meta: MetaArgsType;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import type { UmbEntityModel } from '../types.js';
import type { ManifestEntityItemRef } from './entity-item-ref.extension.js';
import { customElement, property, type PropertyValueMap, state, css, html } from '@umbraco-cms/backoffice/external/lit';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import { UmbExtensionsElementInitializer } from '@umbraco-cms/backoffice/extension-api';
import { UMB_MARK_ATTRIBUTE_NAME } from '@umbraco-cms/backoffice/const';
import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry';
import { UmbRoutePathAddendumContext } from '@umbraco-cms/backoffice/router';
import type { UmbEntityModel } from '@umbraco-cms/backoffice/entity';

import './default-item-ref.element.js';
import { UmbRoutePathAddendumContext } from '@umbraco-cms/backoffice/router';

@customElement('umb-entity-item-ref')
export class UmbEntityItemRefElement extends UmbLitElement {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
import './entity-item-ref.element.js';
Original file line number Diff line number Diff line change
@@ -1,3 +1 @@
import './entity-item-ref.element.js';

export * from './entity-item-ref.element.js';
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
import './entity-item-ref/global-components.js';
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './entity-item-ref/index.js';
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import type { UmbNamedEntityModel } from '@umbraco-cms/backoffice/entity';

export interface UmbDefaultItemModel extends UmbNamedEntityModel {
icon?: string;
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
export { UMB_ENTITY_CONTEXT } from './entity.context-token.js';
export { UmbEntityContext } from './entity.context.js';
export * from './entity-item-ref/index.js';
export type * from './types.js';
4 changes: 0 additions & 4 deletions src/Umbraco.Web.UI.Client/src/packages/core/entity/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,3 @@ export interface UmbEntityModel {
export interface UmbNamedEntityModel extends UmbEntityModel {
name: string;
}

export interface UmbDefaultItemModel extends UmbNamedEntityModel {
icon?: string;
}
1 change: 1 addition & 0 deletions src/Umbraco.Web.UI.Client/src/packages/core/entry-point.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { UmbExtensionsApiInitializer, type UmbEntryPointOnInit } from '@umbraco-
import './property-action/components/index.js';
import './menu/components/index.js';
import './extension-registry/components/index.js';
import './entity-item/global-components.js';

export const onInit: UmbEntryPointOnInit = (host, extensionRegistry) => {
new UmbExtensionsApiInitializer(host, extensionRegistry, 'globalContext', [host]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@ export interface ManifestEntityBulkAction<MetaType extends MetaEntityBulkAction
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
export interface MetaEntityBulkAction {}

export interface ManifestEntityBulkActionDefaultKind extends ManifestEntityBulkAction<MetaEntityBulkActionDefaultKind> {
export interface ManifestEntityBulkActionDefaultKind<
MetaKindType extends MetaEntityBulkActionDefaultKind = MetaEntityBulkActionDefaultKind,
> extends ManifestEntityBulkAction<MetaKindType> {
type: 'entityBulkAction';
kind: 'default';
}
Expand Down
Loading
Loading