From e22928b59ec6b7e3408858c10f0b8eab351e4c0f Mon Sep 17 00:00:00 2001 From: Nikhil Nagarajan Date: Wed, 7 Jan 2026 13:03:22 -0500 Subject: [PATCH] Improved Schema and now it works --- module/data/action/summonAction.mjs | 24 +++----- module/data/fields/action/summonField.mjs | 75 ++++++++--------------- 2 files changed, 36 insertions(+), 63 deletions(-) diff --git a/module/data/action/summonAction.mjs b/module/data/action/summonAction.mjs index 56e0446c..68f93510 100644 --- a/module/data/action/summonAction.mjs +++ b/module/data/action/summonAction.mjs @@ -1,20 +1,20 @@ +import DHSummonField from '../fields/action/summonField.mjs'; import DHBaseAction from './baseAction.mjs'; +import DHSummonDialog from '../../applications/dialogs/summonDialog.mjs'; export default class DHSummonAction extends DHBaseAction { static defineSchema() { - const fields = foundry.data.fields; return { ...super.defineSchema(), - summon: new fields.ArrayField(new fields.SchemaField({ - actorUUID: new fields.DocumentUUIDField({ type: 'Actor', required: true }), - count: new fields.NumberField({ required: true, default: 1, min: 1, integer: true }) - }), { required: false, initial: [] }) + summon: new DHSummonField({ required: false, initial: [] }) }; } + static extraSchemas=[...super.extraSchemas,'summon']; + get defaultValues() { return { - summon: { actorUUID: "", count: 1 } + summon: [] }; } @@ -30,12 +30,6 @@ export default class DHSummonAction extends DHBaseAction { return game.user.can('TOKEN_CREATE'); } - //Accessor for summon manager for performing the summon action - get summonManager() { - return game.dh.summon; //incomplete implementation - } - - //Logic to perform the summon action - incomplete implementation async _performAction(event, ...args) { const validSummons = this.summon.filter(entry => entry.actorUUID); if (validSummons.length === 0) { @@ -50,5 +44,7 @@ export default class DHSummonAction extends DHBaseAction { console.log(`- Ready to summon ${entry.count}x [${actor?.name || "Unknown Actor"}]`); } console.groupEnd(); - } -} + + //Todo: Open Summon Dialog + } +} \ No newline at end of file diff --git a/module/data/fields/action/summonField.mjs b/module/data/fields/action/summonField.mjs index 7bcd1145..1abb31f4 100644 --- a/module/data/fields/action/summonField.mjs +++ b/module/data/fields/action/summonField.mjs @@ -1,61 +1,38 @@ -import DHSummonDialog from '../../../applications/dialogs/summonDialog.mjs'; - const fields = foundry.data.fields; -export default class DHSummonField extends fields.SchemaField { +export default class DHSummonField extends fields.ArrayField { /** * Action Workflow order */ static order = 120; constructor(options = {}, context = {}) { - const summonFields = { - summon: new fields.ArrayField(new fields.SchemaField({ - actorUUID: new fields.DocumentUUIDField({ - type: 'Actor', - required: true }), - count: new fields.NumberField({ - required: true, - default: 1, - min: 1, - integer: true }) - }), { required: false, initial: [] }) - }; + const summonFields = new fields.SchemaField({ + actorUUID: new fields.DocumentUUIDField({ + type: 'Actor', + required: true + }), + count: new fields.NumberField({ + required: true, + default: 1, + min: 1, + integer: true + }) + }) super(summonFields, options, context); + + // summon: new fields.ArrayField(new fields.SchemaField({ + // actorUUID: new fields.DocumentUUIDField({ + // type: 'Actor', + // required: true }), + // count: new fields.NumberField({ + // required: true, + // default: 1, + // min: 1, + // integer: true }) + // }), { required: false, initial: [] }) + // }; + // super(summonFields, options, context); } - /** - * Summon Action Workflow part. - * Must be called within Action context or similar. - * @param {object} config Object that contains workflow datas. Usually made from Action Fields prepareConfig methods. - */ - static async execute(config) { - const selected = await DHSummonDialog.configure(config, this.item); - if (!selected) return false; - return await DHSummonField.summon.call(this, selected); - } - /** - * Update Action Workflow config object. - * Must be called within Action context. - * @param {object} config Object that contains workflow datas. Usually made from Action Fields prepareConfig methods. - */ - prepareConfig(config) { - if (!canvas.scene){ - ui.notifications.warn(game.i18n.localize("DAGGERHEART.ACTIONS.TYPES.summon.error")); - return false; - } - return true; - } - /** - * Logic to perform the summon action - incomplete implementation - */ - - get defaultValues() { - return { - summon: { actorUUID: "", count: 1 } - }; - } - get canSummon() { - return game.user.can('TOKEN_CREATE'); - } } \ No newline at end of file