Pull the foreign document updating into a utility method and add it to the GenericPopoverMixin
This commit is contained in:
parent
55cff3c048
commit
053ab05dcb
3 changed files with 42 additions and 18 deletions
|
|
@ -1,4 +1,4 @@
|
||||||
import { createItemFromElement, deleteItemFromElement, editItemFromElement } from "./utils.mjs";
|
import { createItemFromElement, deleteItemFromElement, editItemFromElement, updateForeignDocumentFromEvent } from "./utils.mjs";
|
||||||
import { DicePool } from "./DicePool.mjs";
|
import { DicePool } from "./DicePool.mjs";
|
||||||
import { RichEditor } from "./RichEditor.mjs";
|
import { RichEditor } from "./RichEditor.mjs";
|
||||||
import { toBoolean } from "../consts.mjs";
|
import { toBoolean } from "../consts.mjs";
|
||||||
|
|
@ -77,7 +77,7 @@ export function GenericAppMixin(HandlebarsApp) {
|
||||||
this.element.querySelectorAll(`input[data-foreign-update-on]`).forEach(el => {
|
this.element.querySelectorAll(`input[data-foreign-update-on]`).forEach(el => {
|
||||||
const events = el.dataset.foreignUpdateOn.split(`,`);
|
const events = el.dataset.foreignUpdateOn.split(`,`);
|
||||||
for (const event of events) {
|
for (const event of events) {
|
||||||
el.addEventListener(event, this.updateEmbedded);
|
el.addEventListener(event, updateForeignDocumentFromEvent);
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
@ -150,22 +150,6 @@ export function GenericAppMixin(HandlebarsApp) {
|
||||||
});
|
});
|
||||||
app.render({ force: true });
|
app.render({ force: true });
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {Event} event
|
|
||||||
*/
|
|
||||||
async updateForeign(event) {
|
|
||||||
const target = event.currentTarget;
|
|
||||||
const data = target.dataset;
|
|
||||||
const document = await fromUuid(data.foreignUuid);
|
|
||||||
|
|
||||||
let value = target.value;
|
|
||||||
switch (target.type) {
|
|
||||||
case `checkbox`: value = target.checked; break;
|
|
||||||
};
|
|
||||||
|
|
||||||
await document?.update({ [data.foreignName]: value });
|
|
||||||
};
|
|
||||||
// #endregion
|
// #endregion
|
||||||
};
|
};
|
||||||
return GenericRipCryptApp;
|
return GenericRipCryptApp;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { updateForeignDocumentFromEvent } from "../utils.mjs";
|
||||||
|
|
||||||
const { ApplicationV2 } = foundry.applications.api;
|
const { ApplicationV2 } = foundry.applications.api;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -65,6 +67,23 @@ export function GenericPopoverMixin(HandlebarsApp) {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
async _onRender(...args) {
|
||||||
|
await super._onRender(...args);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Foreign update listeners so that we can easily update items that may not
|
||||||
|
be this document itself, but are useful to be able to be edited from this
|
||||||
|
sheet. Primarily useful for editing the Actors' Item collection, or an Items'
|
||||||
|
ActiveEffect collection.
|
||||||
|
*/
|
||||||
|
this.element.querySelectorAll(`input[data-foreign-update-on]`).forEach(el => {
|
||||||
|
const events = el.dataset.foreignUpdateOn.split(`,`);
|
||||||
|
for (const event of events) {
|
||||||
|
el.addEventListener(event, updateForeignDocumentFromEvent);
|
||||||
|
};
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
async close(options = {}) {
|
async close(options = {}) {
|
||||||
// prevent locked popovers from being closed
|
// prevent locked popovers from being closed
|
||||||
if (this.popover.locked && !options.force) { return };
|
if (this.popover.locked && !options.force) { return };
|
||||||
|
|
|
||||||
|
|
@ -42,3 +42,24 @@ export async function deleteItemFromElement(target) {
|
||||||
const item = await fromUuid(itemId);
|
const item = await fromUuid(itemId);
|
||||||
item.delete();
|
item.delete();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates a document using the UUID, expects there to be the following
|
||||||
|
* dataset attributes:
|
||||||
|
* - "data-foreign-uuid" : The UUID of the document to update
|
||||||
|
* - "data-foreign-name" : The dot-separated path of the value to update
|
||||||
|
*
|
||||||
|
* @param {Event} event
|
||||||
|
*/
|
||||||
|
export async function updateForeignDocumentFromEvent(event) {
|
||||||
|
const target = event.currentTarget;
|
||||||
|
const data = target.dataset;
|
||||||
|
const document = await fromUuid(data.foreignUuid);
|
||||||
|
|
||||||
|
let value = target.value;
|
||||||
|
switch (target.type) {
|
||||||
|
case `checkbox`: value = target.checked; break;
|
||||||
|
};
|
||||||
|
|
||||||
|
await document?.update({ [data.foreignName]: value });
|
||||||
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue