Préparer l'ouverture de conteneurs

Centraliser les méthodes pour retrouver un item, splitter, etc
Les mêmes actions seront disponibles dans la fenêtre des conteneurs

Préparer aussi le drop sur la fenêtre d'un conteneur
This commit is contained in:
Vincent Vandemeulebrouck
2021-12-05 01:48:26 +01:00
parent f1608170d1
commit ef56b58d72
3 changed files with 89 additions and 57 deletions

View File

@ -0,0 +1,55 @@
import { DialogSplitItem } from "./dialog-split-item.js";
import { Misc } from "./misc.js";
export class RdDSheetUtility {
static getItem(event, actor) {
return actor.items.get(RdDSheetUtility.getItemId(event));
}
static getItemId(event) {
return RdDSheetUtility.getEventItemData(event, "item-id");
}
static getEventItemData(event, property) {
const node = RdDSheetUtility.getEventElement(event);
return node?.data(property);
}
static getEventElement(event) {
return $(event.currentTarget)?.parents(".item");
}
static extractItemDropParameters(event, dragData, actor, objetVersConteneur) {
console.log("extractItemDropParameters", actor.id, dragData);
const itemId = dragData.id || dragData.data._id;
const destItemId = $(event.target).parents(".item").attr("data-item-id");
return {
sourceActorId: dragData.actorId,
targetActorId: actor.id,
itemId: itemId,
destId: destItemId,
srcId: objetVersConteneur[itemId],
onEnleverConteneur: () => { delete objetVersConteneur[itemId]; },
onAjouterDansConteneur: (conteneurId) => { objetVersConteneur[itemId] = conteneurId; }
}
}
static async splitItem(item, actor, onSplit = ()=>{}) {
const dialog = await DialogSplitItem.create(item, async (item, split) => {
await RdDSheetUtility._onSplitItem(item, split, actor);
onSplit();
});
dialog.render(true);
}
static async _onSplitItem(item, split, actor) {
if (split >= 1 && split < Misc.data(item).data.quantite) {
await item.diminuerQuantite(split);
const itemData = duplicate(Misc.data(item));
// todo: ajouter dans le même conteneur?
itemData.data.quantite = split;
await actor.createEmbeddedDocuments('Item', [itemData])
}
}
}