Allow editing embedded documents (used for spells here) in the item's sheet itself.

This commit is contained in:
Oliver-Akins 2024-01-11 19:03:24 -07:00
parent 516f7ac826
commit 7381a2a7fe
6 changed files with 56 additions and 7 deletions

View file

@ -14,17 +14,28 @@ export class ActorHandler extends Actor {
return this.actorTypes[this.type];
};
genericEmbeddedUpdate($event) {
async openEmbeddedSheet($event) {
console.log(`openEmbeddedSheet`)
if (this.fn?.openEmbeddedSheet) {
this.fn.openEmbeddedSheet.bind(this)($event);
} else {
const data = $event.currentTarget.dataset;
let item = await fromUuid(data.embeddedEdit);
item?.sheet.render(true);
};
};
async genericEmbeddedUpdate($event) {
if (!this.fn?.genericEmbeddedUpdate) return;
this.fn.genericEmbeddedUpdate.bind(this)($event);
};
genericEmbeddedDelete($event) {
async genericEmbeddedDelete($event) {
if (!this.fn?.genericEmbeddedDelete) return;
this.fn.genericEmbeddedDelete.bind(this)($event);
};
createCustomSpell() {
async createCustomSpell() {
if (!this.fn?.createCustomSpell) return;
this.fn.createCustomSpell.bind(this)();
this.sheet.render(true);

View file

@ -37,11 +37,26 @@ export class PlayerActor {
};
/** @this {Actor} */
static createCustomSpell() {
this.createEmbeddedDocuments(
static async createCustomSpell() {
let items = await this.createEmbeddedDocuments(
"Item",
[{ type: `spell`, name: `New Spell` }]
[{
type: `spell`,
name: game.i18n.format(`dotdungeon.defaults.spell.name`),
}]
);
if (items.length == 0) {
ui.notifications.error(
`dotdungeon.notifications.error.spell-create-failed`,
{ localize: true, console: false }
);
return;
};
this.sheet.render();
if (game.settings.get(`dotdungeon`, `openEmbeddedOnCreate`)) {
for (const item of items) {
item.sheet.render(true);
};
};
};
};

View file

@ -8,4 +8,14 @@ export default function() {
default: true,
requiresReload: false,
});
game.settings.register(`dotdungeon`, `openEmbeddedOnCreate`, {
name: `dotdungeon.settings.openEmbeddedOnCreate.name`,
hint: `dotdungeon.settings.openEmbeddedOnCreate.description`,
scope: `client`,
type: Boolean,
config: true,
default: true,
requiresReload: false,
});
};

View file

@ -24,6 +24,8 @@ export class PlayerSheet extends GenericActorSheet {
.on(`change`, this.actor.genericEmbeddedUpdate.bind(this.actor));
html.find(`[data-embedded-delete]`)
.on(`click`, this.actor.genericEmbeddedDelete.bind(this.actor));
html.find(`[data-embedded-edit]`)
.on(`click`, this.actor.openEmbeddedSheet.bind(this.actor));
};
async getData() {