{"version":3,"file":"bulk-trash.action-CT1ona5L.js","sources":["../../../src/packages/core/recycle-bin/entity-bulk-action/bulk-trash/bulk-trash.action.ts"],"sourcesContent":["import type { UmbRecycleBinRepository } from '../../recycle-bin-repository.interface.js';\r\nimport { UmbEntityTrashedEvent } from '../../entity-action/trash/index.js';\r\nimport type { MetaEntityBulkActionTrashKind } 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\tUmbRequestReloadChildrenOfEntityEvent,\r\n\tUmbRequestReloadStructureForEntityEvent,\r\n} from '@umbraco-cms/backoffice/entity-action';\r\nimport { UmbEntityBulkActionBase } from '@umbraco-cms/backoffice/entity-bulk-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 } from '@umbraco-cms/backoffice/entity';\r\nimport type { UmbItemRepository } from '@umbraco-cms/backoffice/repository';\r\n\r\nexport class UmbTrashEntityBulkAction<\r\n\tMetaKindType extends MetaEntityBulkActionTrashKind = MetaEntityBulkActionTrashKind,\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._confirmTrash(this._items);\r\n\t\tawait this.#requestBulkTrash(this.selection);\r\n\t}\r\n\r\n\tprotected async _confirmTrash(items: Array) {\r\n\t\tconst headline = '#actions_trash';\r\n\t\tconst message = '#defaultdialogs_confirmBulkTrash';\r\n\r\n\t\t// TODO: consider showing more details about the items being trashed\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_trash',\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 #requestBulkTrash(uniques: Array) {\r\n\t\tconst recycleBinRepository = await createExtensionApiByAlias(\r\n\t\t\tthis,\r\n\t\t\tthis.args.meta.recycleBinRepositoryAlias,\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 recycleBinRepository.requestTrash({ 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: `Trashed ${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 trashedEvent = new UmbEntityTrashedEvent({\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(trashedEvent);\r\n\t\t});\r\n\t}\r\n}\r\n\r\nexport { UmbTrashEntityBulkAction as api };\r\n"],"names":["UmbTrashEntityBulkAction","UmbEntityBulkActionBase","#localize","UmbLocalizationController","#requestItems","#requestBulkTrash","items","umbConfirmModal","itemRepository","createExtensionApiByAlias","data","uniques","recycleBinRepository","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","trashedEvent","UmbEntityTrashedEvent"],"mappings":";;;;;;;;;AAgBO,MAAMA,UAEHC,EAAsC;AAAA,EAFzC,cAAA;AAAA,UAAA,GAAA,SAAA,GAGM,KAAAC,KAAA,IAAIC,EAA0B,IAAI,GAC9C,KAAA,SAAqB,CAAC;AAAA,EAAA;AAAA,EADtBD;AAAA,EAGA,MAAe,UAAU;AACpB,QAAA,KAAK,WAAW,WAAW;AACxB,YAAA,IAAI,MAAM,oBAAoB;AAIrC,UAAM,KAAKE,GAAc,GACnB,MAAA,KAAK,cAAc,KAAK,MAAM,GAC9B,MAAA,KAAKC,GAAkB,KAAK,SAAS;AAAA,EAAA;AAAA,EAG5C,MAAgB,cAAcC,GAAmB;AAK1C,UAAAC,EAAgB,KAAK,OAAO;AAAA,MACjC,UALgB;AAAA,MAMhB,SAAS,KAAKL,GAAU,OALT,oCAKyBI,EAAM,MAAM;AAAA,MACpD,OAAO;AAAA,MACP,cAAc;AAAA,IAAA,CACd;AAAA,EAAA;AAAA,EAGF,MAAMF,KAAgB;AACrB,UAAMI,IAAiB,MAAMC;AAAA,MAC5B;AAAA,MACA,KAAK,KAAK,KAAK;AAAA,IAChB,GAEM,EAAE,MAAAC,EAAK,IAAI,MAAMF,EAAe,aAAa,KAAK,SAAS;AAE5D,SAAA,SAASE,KAAQ,CAAC;AAAA,EAAA;AAAA,EAGxB,MAAML,GAAkBM,GAAwB;AAC/C,UAAMC,IAAuB,MAAMH;AAAA,MAClC;AAAA,MACA,KAAK,KAAK,KAAK;AAAA,IAChB,GAEMI,IAAsB,MAAM,KAAK,WAAWC,CAAwB,GAEpEC,IAA2B,CAAC;AAElC,eAAWC,KAAUL,GAAS;AACvB,YAAA,EAAE,OAAAM,MAAU,MAAML,EAAqB,aAAa,EAAE,QAAAI,GAAQ;AAEpE,UAAIC,GAAO;AACV,cAAMC,IAAe,EAAE,MAAM,EAAE,SAASD,EAAM,UAAU;AACnC,QAAAJ,GAAA,KAAK,UAAUK,CAAY;AAAA,MAAA;AAEhD,QAAAH,EAAU,KAAKC,CAAM;AAAA,IACtB;AAGG,QAAAD,EAAU,SAAS,GAAG;AACzB,YAAMG,IAAe;AAAA,QACpB,MAAM,EAAE,SAAS,WAAWH,EAAU,MAAM,IAAIA,EAAU,WAAW,IAAI,SAAS,OAAO,GAAG;AAAA,MAC7F;AACqB,MAAAF,GAAA,KAAK,YAAYK,CAAY;AAAA,IAAA;AAG7C,UAAA,KAAKC,GAAQJ,CAAS;AAAA,EAAA;AAAA,EAG7B,MAAMI,GAAQJ,GAA0B;AACvC,UAAMK,IAAgB,MAAM,KAAK,WAAWC,CAAkB;AAC9D,QAAI,CAACD,EAAqB,OAAA,IAAI,MAAM,iCAAiC;AAErE,UAAME,IAAe,MAAM,KAAK,WAAWC,CAAwB;AACnE,QAAI,CAACD,EAAoB,OAAA,IAAI,MAAM,gCAAgC;AAE7D,UAAAE,IAAaJ,EAAc,cAAc,GACzCJ,IAASI,EAAc,UAAU;AAEnC,QAAAI,KAAcR,MAAW,QAAW;AACjC,YAAAS,IAAO,EAAE,YAAAD,GAAY,QAAAR,EAAO,GAE5BU,IAAiB,IAAIC,EAAsCF,CAAI;AACrE,MAAAH,EAAa,cAAcI,CAAc;AAEnC,YAAAE,IAAkB,IAAIC,EAAwCJ,CAAI;AACxE,MAAAH,EAAa,cAAcM,CAAe;AAAA,IAAA;AAK5B,IAFQ,KAAK,OAAO,OAAO,CAACE,MAASf,EAAU,SAASe,EAAK,MAAM,CAAC,EAEpE,QAAQ,CAACA,MAAS;AAC1B,YAAAC,IAAe,IAAIC,EAAsB;AAAA,QAC9C,QAAQF,EAAK;AAAA,QACb,YAAYA,EAAK;AAAA,MAAA,CACjB;AAED,MAAAR,EAAa,cAAcS,CAAY;AAAA,IAAA,CACvC;AAAA,EAAA;AAEH;"}