diff --git a/src/module/sheets/characterSheet.mjs b/src/module/sheets/characterSheet.mjs index af8fdb09..bb6f9d84 100644 --- a/src/module/sheets/characterSheet.mjs +++ b/src/module/sheets/characterSheet.mjs @@ -901,33 +901,33 @@ export class CharacterSheet extends foundry.appv1.sheets.ActorSheet { evt.stopPropagation(); } }) - - html.on('dragstart', '.equipment', (evt) => { - evt.originalEvent.dataTransfer.setData("application/json", JSON.stringify({ - documentId: evt.currentTarget.dataset.id - })); - }) - - html.on('drop', '.equipped', async (evt) => { - const {actor, target, setId} = evt.currentTarget.dataset; - try { - const {documentId} = JSON.parse(evt.originalEvent.dataTransfer.getData("application/json")); + /* + html.on('dragstart', '.equipment', (evt) => { + evt.originalEvent.dataTransfer.setData("application/json", JSON.stringify({ + documentId: evt.currentTarget.dataset.id + })); + })*/ + /* + html.on('drop', '.equipped', async (evt) => { + const {actor, target, setId} = evt.currentTarget.dataset; + try { + const {documentId} = JSON.parse(evt.originalEvent.dataTransfer.getData("application/json")); - if (actor === this.object._id && documentId) { // managing equipped items - //const slot = this.#isWorn(documentId, setId) - //const updateObject = await this.#getEquipmentset(Number(setId)) - const updateObject = this.#mapAllSets() - updateObject[`system.heldenausruestung.${setId}.${target}`] = documentId; - console.log(updateObject); + if (actor === this.object._id && documentId) { // managing equipped items + //const slot = this.#isWorn(documentId, setId) + //const updateObject = await this.#getEquipmentset(Number(setId)) + const updateObject = this.#mapAllSets() + updateObject[`system.heldenausruestung.${setId}.${target}`] = documentId; + console.log(updateObject); - await this.object.update(updateObject); - } + await this.object.update(updateObject); + } - evt.stopPropagation(); - } catch (e) { - } - }) + evt.stopPropagation(); + } catch (e) { + } + })*/ new foundry.applications.ux.ContextMenu(html[0], '.talent.rollable', [ { diff --git a/src/module/sheets/groupSheet.mjs b/src/module/sheets/groupSheet.mjs index 3126e411..58ba836a 100644 --- a/src/module/sheets/groupSheet.mjs +++ b/src/module/sheets/groupSheet.mjs @@ -219,11 +219,11 @@ export class GroupSheet extends HandlebarsApplicationMixin(ActorSheetV2) { } } - context.equipments = []; + context.inventoryItems = []; const actorData = context.document; - Object.values(actorData.items).forEach((item, index) => { + actorData.items.forEach((item, index) => { if (item.type === "Equipment") { - context.equipments.push({ + context.inventoryItems.push({ index: index, id: item._id, quantity: item.system.quantity, @@ -255,6 +255,7 @@ export class GroupSheet extends HandlebarsApplicationMixin(ActorSheetV2) { // Drag-drop new foundry.applications.ux.DragDrop.implementation({ + dragSelector: ".inventory-table .equipment", dropSelector: ".inventory-table", permissions: { dragstart: this._canDragStart.bind(this), @@ -280,13 +281,53 @@ export class GroupSheet extends HandlebarsApplicationMixin(ActorSheetV2) { } - // TODO needs to be fixed once Character Sheet is migrated to ActorSheetV2 - _onDrop(event) { - const data = event.dataTransfer.getData("application/json") - if (!data) return false - console.log(data) + /** + * An event that occurs when a drag workflow begins for a draggable item on the sheet. + * @param {DragEvent} event The initiating drag start event + * @returns {Promise} + * @protected + */ + async _onDragStart(event) { + const target = event.currentTarget; + if ("link" in event.target.dataset) return; + let dragData; + // Owned Items + if (target.dataset.itemId) { + const item = this.actor.items.get(target.dataset.itemId); + dragData = item.toDragData(); + } + + // Active Effect + if (target.dataset.effectId) { + const effect = this.actor.effects.get(target.dataset.effectId); + dragData = effect.toDragData(); + } + + // Set data transfer + if (!dragData) return; + event.dataTransfer.setData("text/plain", JSON.stringify(dragData)); } + // TODO needs to be fixed once Character Sheet is migrated to ActorSheetV2 + async _onDrop(event) { + const data = TextEditor.implementation.getDragEventData(event); + const actor = this.actor; + const allowed = Hooks.call("dropActorSheetData", actor, this, data); + if (allowed === false) return; + + // Dropped Documents + const documentClass = foundry.utils.getDocumentClass(data.type); + if (documentClass) { + const document = await documentClass.fromDropData(data); + await this._onDropDocument(event, document); + + // No duplication by moving items from one actor to another + if (document.parent) { + document.parent.items.get(document._id).delete() + } + await this._onDropDocument(event, document); + } + } } diff --git a/src/templates/actor/group/tab-inventory.hbs b/src/templates/actor/group/tab-inventory.hbs index f6107c7e..d238d631 100644 --- a/src/templates/actor/group/tab-inventory.hbs +++ b/src/templates/actor/group/tab-inventory.hbs @@ -14,7 +14,7 @@ {{#each inventoryItems}} - + {{this.name}} {{this.quantity}}