Item Support #69
1 changed files with 32 additions and 0 deletions
32
module/apps/utils.mjs
Normal file
32
module/apps/utils.mjs
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
/*
|
||||
This file contains utility methods used by Applications in order to be
|
||||
DRYer
|
||||
*/
|
||||
|
||||
/**
|
||||
* Updates a document using the UUID, this is most useful for editing
|
||||
* documents from a sheet of another document (e.g. an Item embedded
|
||||
* in an Actor). This requires the dataset of the element to have a
|
||||
* "data-foreign-name" which is the data path of the property being
|
||||
* edited. As well as the input, or a parent of it, to have the
|
||||
* "data-foreign-uuid" attribute, representing the UUID of the document
|
||||
* to edit.
|
||||
*/
|
||||
export async function updateForeignDocumentFromEvent(event) {
|
||||
const target = event.currentTarget;
|
||||
const name = target.dataset.foreignName;
|
||||
let uuid = target.dataset.foreignUuid;
|
||||
uuid ??= target.closest(`[data-foreign-uuid]`)?.dataset.foreignUuid;
|
||||
|
||||
if (!name || !uuid) {
|
||||
throw `Cannot edit foreign document with the name and UUID`;
|
||||
};
|
||||
|
||||
let value = target.value;
|
||||
switch (target.type) {
|
||||
case `checkbox`: value = target.checked; break;
|
||||
};
|
||||
|
||||
let doc = await fromUuid(uuid);
|
||||
await doc?.update({ [name]: value });
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue