daggerheart/module/applications/dialogs/actionSelectionDialog.mjs
WBHarry 3eda3c4c05
Some checks are pending
Project CI / build (24.x) (push) Waiting to run
[Feature] Action Areas (#1815)
* Functioning setup

* .

* Fixes

* Completed

* Apply suggestions from code review

Co-authored-by: Carlos Fernandez <CarlosFdez@users.noreply.github.com>

* using function.call instead of function.bind

* Run lint fix on action areas PR (#1820)

* .

* .

* Restructured getTemplateShape to be a lot more readable

* .

* .

* Changed from 'area' to 'areas'

* .

* Moved the areas button to the left

* Fix regression with actions list

* Updated all SRD adversaries

---------

Co-authored-by: Carlos Fernandez <CarlosFdez@users.noreply.github.com>
Co-authored-by: Carlos Fernandez <cfern1990@gmail.com>
2026-04-21 22:27:52 +02:00

91 lines
2.3 KiB
JavaScript

const { ApplicationV2, HandlebarsApplicationMixin } = foundry.applications.api;
export default class ActionSelectionDialog extends HandlebarsApplicationMixin(ApplicationV2) {
constructor(item, event, options = {}) {
super(options);
this.#item = item;
this.#event = event;
}
/* -------------------------------------------- */
/** @override */
static DEFAULT_OPTIONS = {
classes: ['daggerheart', 'dh-style', 'dialog'],
actions: {
choose: ActionSelectionDialog.#onChooseAction
},
position: {
width: 400
}
};
/* -------------------------------------------- */
static PARTS = {
actions: {
template: 'systems/daggerheart/templates/dialogs/actionSelect.hbs'
}
};
#item;
get item() {
return this.#item;
}
#event;
get event() {
return this.#event;
}
#action;
get action() {
return this.#action ?? null;
}
/* -------------------------------------------- */
/** @override */
get title() {
return game.i18n.localize('DAGGERHEART.CONFIG.SelectAction.selectAction');
}
/* -------------------------------------------- */
/** @inheritDoc */
async _prepareContext(options) {
const actions = this.#item.system.actionsList.map(action => ({
...action.toObject(),
id: action.id,
img: action.baseAction ? action.parent.parent.img : action.img
})),
itemName = this.#item.name;
return {
...(await super._prepareContext(options)),
actions,
itemName
};
}
static async #onChooseAction(event, button) {
const { actionId } = button.dataset;
this.action = this.item.system.actionsList.find(a => a._id === actionId);
Object.defineProperty(this.event, 'shiftKey', {
get() {
return event.shiftKey;
}
});
this.close();
}
static create(item, event, options) {
return new Promise(resolve => {
const dialog = new this(item, event, options);
dialog.addEventListener('close', () => resolve(dialog.action), { once: true });
dialog.render({ force: true });
});
}
}