{"version":3,"file":"bulk-delete.action-wZYSm2uv.js","sources":["../../../src/packages/core/entity-bulk-action/entity-bulk-action-base.ts","../../../src/packages/core/entity-bulk-action/common/bulk-delete/bulk-delete.action.ts"],"sourcesContent":["import type { UmbEntityBulkAction } from './entity-bulk-action.interface.js';\r\nimport type { UmbEntityBulkActionArgs } from './types.js';\r\nimport type { MetaEntityBulkAction } from '@umbraco-cms/backoffice/extension-registry';\r\nimport { UmbActionBase } from '@umbraco-cms/backoffice/action';\r\n\r\nexport abstract class UmbEntityBulkActionBase\r\n\textends UmbActionBase>\r\n\timplements UmbEntityBulkAction\r\n{\r\n\tselection: Array = [];\r\n\r\n\tabstract override execute(): Promise;\r\n}\r\n","import { UmbEntityBulkActionBase } from '../../entity-bulk-action-base.js';\r\nimport type { MetaEntityBulkActionDeleteKind } from './types.js';\r\nimport { createExtensionApiByAlias } from '@umbraco-cms/backoffice/extension-registry';\r\nimport { umbConfirmModal } from '@umbraco-cms/backoffice/modal';\r\nimport { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action';\r\nimport {\r\n\tUmbEntityDeletedEvent,\r\n\tUmbRequestReloadChildrenOfEntityEvent,\r\n\tUmbRequestReloadStructureForEntityEvent,\r\n} from '@umbraco-cms/backoffice/entity-action';\r\nimport { UMB_NOTIFICATION_CONTEXT } from '@umbraco-cms/backoffice/notification';\r\nimport { UmbLocalizationController } from '@umbraco-cms/backoffice/localization-api';\r\nimport { UMB_ENTITY_CONTEXT, type UmbEntityModel } from '@umbraco-cms/backoffice/entity';\r\nimport type { UmbDetailRepository, UmbItemRepository } from '@umbraco-cms/backoffice/repository';\r\n\r\nexport class UmbDeleteEntityBulkAction<\r\n\tMetaKindType extends MetaEntityBulkActionDeleteKind = MetaEntityBulkActionDeleteKind,\r\n> extends UmbEntityBulkActionBase {\r\n\t#localize = new UmbLocalizationController(this);\r\n\t_items: Array = [];\r\n\r\n\toverride async execute() {\r\n\t\tif (this.selection?.length === 0) {\r\n\t\t\tthrow new Error('No items selected.');\r\n\t\t}\r\n\r\n\t\t// TODO: Move item look up to a future bulk action context\r\n\t\tawait this.#requestItems();\r\n\t\tawait this._confirmDelete(this._items);\r\n\t\tawait this.#requestBulkDelete(this.selection);\r\n\t}\r\n\r\n\tprotected async _confirmDelete(items: Array) {\r\n\t\tconst headline = '#actions_delete';\r\n\t\tconst message = '#defaultdialogs_confirmBulkDelete';\r\n\r\n\t\t// TODO: consider showing more details about the items being deleted\r\n\t\tawait umbConfirmModal(this._host, {\r\n\t\t\theadline,\r\n\t\t\tcontent: this.#localize.string(message, items.length),\r\n\t\t\tcolor: 'danger',\r\n\t\t\tconfirmLabel: '#actions_delete',\r\n\t\t});\r\n\t}\r\n\r\n\tasync #requestItems() {\r\n\t\tconst itemRepository = await createExtensionApiByAlias>(\r\n\t\t\tthis,\r\n\t\t\tthis.args.meta.itemRepositoryAlias,\r\n\t\t);\r\n\r\n\t\tconst { data } = await itemRepository.requestItems(this.selection);\r\n\r\n\t\tthis._items = data ?? [];\r\n\t}\r\n\r\n\tasync #requestBulkDelete(uniques: Array) {\r\n\t\tconst detailRepository = await createExtensionApiByAlias>(\r\n\t\t\tthis,\r\n\t\t\tthis.args.meta.detailRepositoryAlias,\r\n\t\t);\r\n\r\n\t\tconst notificationContext = await this.getContext(UMB_NOTIFICATION_CONTEXT);\r\n\r\n\t\tconst succeeded: Array = [];\r\n\r\n\t\tfor (const unique of uniques) {\r\n\t\t\tconst { error } = await detailRepository.delete(unique);\r\n\r\n\t\t\tif (error) {\r\n\t\t\t\tconst notification = { data: { message: error.message } };\r\n\t\t\t\tnotificationContext?.peek('danger', notification);\r\n\t\t\t} else {\r\n\t\t\t\tsucceeded.push(unique);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (succeeded.length > 0) {\r\n\t\t\tconst notification = {\r\n\t\t\t\tdata: { message: `Deleted ${succeeded.length} ${succeeded.length === 1 ? 'item' : 'items'}` },\r\n\t\t\t};\r\n\t\t\tnotificationContext?.peek('positive', notification);\r\n\t\t}\r\n\r\n\t\tawait this.#notify(succeeded);\r\n\t}\r\n\r\n\tasync #notify(succeeded: Array) {\r\n\t\tconst entityContext = await this.getContext(UMB_ENTITY_CONTEXT);\r\n\t\tif (!entityContext) throw new Error('Entity Context is not available');\r\n\r\n\t\tconst eventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT);\r\n\t\tif (!eventContext) throw new Error('Event Context is not available');\r\n\r\n\t\tconst entityType = entityContext.getEntityType();\r\n\t\tconst unique = entityContext.getUnique();\r\n\r\n\t\tif (entityType && unique !== undefined) {\r\n\t\t\tconst args = { entityType, unique };\r\n\r\n\t\t\tconst reloadChildren = new UmbRequestReloadChildrenOfEntityEvent(args);\r\n\t\t\teventContext.dispatchEvent(reloadChildren);\r\n\r\n\t\t\tconst reloadStructure = new UmbRequestReloadStructureForEntityEvent(args);\r\n\t\t\teventContext.dispatchEvent(reloadStructure);\r\n\t\t}\r\n\r\n\t\tconst succeededItems = this._items.filter((item) => succeeded.includes(item.unique));\r\n\r\n\t\tsucceededItems.forEach((item) => {\r\n\t\t\tconst deletedEvent = new UmbEntityDeletedEvent({\r\n\t\t\t\tunique: item.unique,\r\n\t\t\t\tentityType: item.entityType,\r\n\t\t\t});\r\n\r\n\t\t\teventContext.dispatchEvent(deletedEvent);\r\n\t\t});\r\n\t}\r\n}\r\n\r\nexport { UmbDeleteEntityBulkAction as api };\r\n"],"names":["UmbEntityBulkActionBase","UmbActionBase","UmbDeleteEntityBulkAction","#localize","UmbLocalizationController","#requestItems","#requestBulkDelete","items","umbConfirmModal","itemRepository","createExtensionApiByAlias","data","uniques","detailRepository","notificationContext","UMB_NOTIFICATION_CONTEXT","succeeded","unique","error","notification","#notify","entityContext","UMB_ENTITY_CONTEXT","eventContext","UMB_ACTION_EVENT_CONTEXT","entityType","args","reloadChildren","UmbRequestReloadChildrenOfEntityEvent","reloadStructure","UmbRequestReloadStructureForEntityEvent","item","deletedEvent","UmbEntityDeletedEvent"],"mappings":"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"}