From dcdc1b776479b535cbefbbfb176cfb72277a8094 Mon Sep 17 00:00:00 2001 From: Oliver-Akins Date: Wed, 10 Jan 2024 19:17:44 -0700 Subject: [PATCH] Add event listening for embedded item deletion --- module/documents/Actor/Player.mjs | 35 +++++++++++++++++++++++++------ module/sheets/PlayerSheet.mjs | 4 +++- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/module/documents/Actor/Player.mjs b/module/documents/Actor/Player.mjs index 7e02f72..39ae1a8 100644 --- a/module/documents/Actor/Player.mjs +++ b/module/documents/Actor/Player.mjs @@ -1,24 +1,47 @@ export class PlayerActor { + /** @this {Actor} */ static async genericEmbeddedUpdate($event) { - let data = $event.target.dataset; + let data = $event.delegateTarget.dataset; let item = await fromUuid(data.embeddedId); item?.update({ [data.embeddedUpdate]: $event.target.value }); + this.sheet.render(); }; + /** @this {Actor} */ static async genericEmbeddedDelete($event) { - let data = $event.target.dataset; - let itemID = data.embeddedId; - if (!itemID) { - // TODO: Throw a notification here + let data = $event.delegateTarget.dataset; + let item = await fromUuid(data.embeddedId); + + if (!item) { + ui.notifications.error( + `dotdungeon.notification.error.item-not-found`, + { console: false } + ); return; }; - // TODO: Ask for confirmation before deleting + + Dialog.confirm({ + title: game.i18n.format( + `dotdungeon.dialogs.${item.type}.delete.title`, + item + ), + content: game.i18n.format( + `dotdungeon.dialogs.${item.type}.delete.content`, + item + ), + yes: () => { + item.delete(); + }, + defaultYes: false, + }); }; + /** @this {Actor} */ static createCustomSpell() { this.createEmbeddedDocuments( "Item", [{ type: `spell`, name: `New Spell` }] ); + this.sheet.render(); }; }; diff --git a/module/sheets/PlayerSheet.mjs b/module/sheets/PlayerSheet.mjs index 6d07e99..a867f47 100644 --- a/module/sheets/PlayerSheet.mjs +++ b/module/sheets/PlayerSheet.mjs @@ -21,7 +21,9 @@ export class PlayerSheet extends GenericActorSheet { html.find(`.add-spell`).on(`click`, this.actor.createCustomSpell.bind(this.actor)); html.find(`[data-embedded-update]`) - .on(`change`, this.actor.updateEmbeddedDocument.bind(this.actor)); + .on(`change`, this.actor.genericEmbeddedUpdate.bind(this.actor)); + html.find(`[data-embedded-delete]`) + .on(`click`, this.actor.genericEmbeddedDelete.bind(this.actor)); }; async getData() {