From 714efeb4ab315292e4f04adef4f9582e7fe979b0 Mon Sep 17 00:00:00 2001 From: Johannes Loher Date: Thu, 7 Jan 2021 11:55:54 +0100 Subject: [PATCH] prevent error when trying to manage active effects on an owned item --- src/module/item/item-sheet.ts | 44 ++++++++++++++++--------- src/templates/item/partials/effects.hbs | 8 +++-- 2 files changed, 33 insertions(+), 19 deletions(-) diff --git a/src/module/item/item-sheet.ts b/src/module/item/item-sheet.ts index 8670dc3e..b9bc1272 100644 --- a/src/module/item/item-sheet.ts +++ b/src/module/item/item-sheet.ts @@ -52,6 +52,9 @@ export class DS4ItemSheet extends ItemSheet { return position; } + private readonly ownedItemActiveEffectWarning = + "Managing Active Effects within an Owned Item is not currently supported and will be added in a subsequent update."; + /* -------------------------------------------- */ /** @override */ @@ -60,29 +63,38 @@ export class DS4ItemSheet extends ItemSheet { if (!this.options.editable) return; - html.find(".effect-create").on("click", this._onEffectCreate.bind(this)); - - html.find(".effect-edit").on("click", (ev) => { - const li = $(ev.currentTarget).parents(".effect"); - console.log(li.data("effectId")); - const effect = this.item.effects.get(li.data("effectId")); - effect.sheet.render(true); - }); - - html.find(".effect-delete").on("click", async (ev) => { - const li = $(ev.currentTarget).parents(".effect"); - await this.item.deleteEmbeddedEntity("ActiveEffect", li.data("effectId")); - }); + html.find(".effect-control").on("click", this._onManageActiveEffect.bind(this)); } /** - * Handle creating a new ActiveEffect for the item using initial data defined in the HTML dataset + * Handle management of ActiveEffects. * @param {Event} event The originating click event - * @private */ - private async _onEffectCreate(event: JQuery.ClickEvent): Promise { + private async _onManageActiveEffect(event: JQuery.ClickEvent): Promise { event.preventDefault(); + if (this.item.isOwned) { + return ui.notifications.warn(this.ownedItemActiveEffectWarning); + } + const a = event.currentTarget; + const li = $(a).parents(".effect"); + + switch (a.dataset["action"]) { + case "create": + return this._createActiveEffect(); + case "edit": + const effect = this.item.effects.get(li.data("effectId")); + return effect.sheet.render(true); + case "delete": { + return this.item.deleteEmbeddedEntity("ActiveEffect", li.data("effectId")); + } + } + } + + /** + * Create a new ActiveEffect for the item using default data. + */ + private async _createActiveEffect(): Promise { const label = `New Effect`; const createData = { diff --git a/src/templates/item/partials/effects.hbs b/src/templates/item/partials/effects.hbs index 819290d6..b4cf02bc 100644 --- a/src/templates/item/partials/effects.hbs +++ b/src/templates/item/partials/effects.hbs @@ -5,7 +5,7 @@
Name
@@ -13,8 +13,10 @@
  • {{effect.label}}

    - - + +
  • {{/each}}