prevent error when trying to manage active effects on an owned item

This commit is contained in:
Johannes Loher 2021-01-07 11:55:54 +01:00
parent cad0d74522
commit 714efeb4ab
2 changed files with 33 additions and 19 deletions

View file

@ -52,6 +52,9 @@ export class DS4ItemSheet extends ItemSheet<DS4ItemDataType, DS4Item> {
return position; 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 */ /** @override */
@ -60,29 +63,38 @@ export class DS4ItemSheet extends ItemSheet<DS4ItemDataType, DS4Item> {
if (!this.options.editable) return; if (!this.options.editable) return;
html.find(".effect-create").on("click", this._onEffectCreate.bind(this)); html.find(".effect-control").on("click", this._onManageActiveEffect.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"));
});
} }
/** /**
* 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 * @param {Event} event The originating click event
* @private
*/ */
private async _onEffectCreate(event: JQuery.ClickEvent): Promise<unknown> { private async _onManageActiveEffect(event: JQuery.ClickEvent): Promise<unknown> {
event.preventDefault(); 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<unknown> {
const label = `New Effect`; const label = `New Effect`;
const createData = { const createData = {

View file

@ -5,7 +5,7 @@
<div class="effect-image"></div> <div class="effect-image"></div>
<div class="effect-name">Name</div> <div class="effect-name">Name</div>
<div class="effect-controls"> <div class="effect-controls">
<a class="effect-control effect-create" title="Create Effect"><i <a class="effect-control effect-create" data-action="create" title="Create Effect"><i
class="fas fa-plus"></i> Add effect</a> class="fas fa-plus"></i> Add effect</a>
</div> </div>
</li> </li>
@ -13,8 +13,10 @@
<li class="effect flexrow" data-effect-id="{{effect._id}}"> <li class="effect flexrow" data-effect-id="{{effect._id}}">
<h4 class="effect-name">{{effect.label}}</h4> <h4 class="effect-name">{{effect.label}}</h4>
<div class="effect-controls"> <div class="effect-controls">
<a class="effect-control effect-edit" title="Edit Effect"><i class="fas fa-edit"></i></a> <a class="effect-control effect-edit" data-action="edit" title="Edit Effect"><i
<a class="effect-control effect-delete" title="Delete Effect"><i class="fas fa-trash"></i></a> class="fas fa-edit"></i></a>
<a class="effect-control effect-delete" data-action="delete" title="Delete Effect"><i
class="fas fa-trash"></i></a>
</div> </div>
</li> </li>
{{/each}} {{/each}}