From e135a44222ada35c830a33659d00e9df39ba0dbd Mon Sep 17 00:00:00 2001 From: Emilio Jimenez <19908114+emiliojc@users.noreply.github.com> Date: Sun, 25 May 2025 21:30:40 +0200 Subject: [PATCH] feat(subclassFeatures): fix adding abilities (#54) * feat(subclassFeatures): fix adding abilities * fix(subclassFeatures): fix tabs names --------- Co-authored-by: JimCanE <6275508-jimcane@users.noreply.gitlab.com> --- module/applications/sheets/subclass.mjs | 41 ++++++++++++------------- module/data/subclass.mjs | 24 +++++++++++++-- 2 files changed, 40 insertions(+), 25 deletions(-) diff --git a/module/applications/sheets/subclass.mjs b/module/applications/sheets/subclass.mjs index 6d6df836..f456aac2 100644 --- a/module/applications/sheets/subclass.mjs +++ b/module/applications/sheets/subclass.mjs @@ -76,11 +76,14 @@ import DaggerheartSheet from './daggerheart-sheet.mjs'; import DaggerheartFeature from '../../data/feature.mjs'; const { ItemSheetV2 } = foundry.applications.sheets; +const { TextEditor } = foundry.applications.ux; +const { duplicate, getProperty } = foundry.utils; export default class SubclassSheet extends DaggerheartSheet(ItemSheetV2) { static DEFAULT_OPTIONS = { tag: 'form', classes: ['daggerheart', 'sheet', 'subclass'], - position: { width: 600 }, + position: { width: 600, height: 600 }, + window: { resizable: true }, actions: { editAbility: this.editAbility, deleteFeatureAbility: this.deleteFeatureAbility @@ -180,28 +183,22 @@ export default class SubclassSheet extends DaggerheartSheet(ItemSheetV2) { } async _onDrop(event) { + event.preventDefault() const data = TextEditor.getDragEventData(event); const item = await fromUuid(data.uuid); - if (item.type === 'feature' && item.system.type === SYSTEM.ITEM.featureTypes.subclass.id) { - if (event.currentTarget.classList.contains('foundation-tab')) { - await this.document.update({ - 'system.foundationFeature.abilities': [ - ...this.document.system.foundationFeature.abilities, - item.system - ] - }); - } else if (event.currentTarget.classList.contains('specialization-tab')) { - await this.document.update({ - 'system.specializationFeature.abilities': [ - ...this.document.system.specializationFeature.abilities, - data.system - ] - }); - } else if (event.currentTarget.classList.contains('mastery-tab')) { - await this.document.update({ - 'system.masteryFeature.abilities': [...this.document.system.masteryFeature.abilities, data.system] - }); - } - } + if (!(item.type === 'feature' && item.system.type === SYSTEM.ITEM.featureTypes.subclass.id)) return; + + let featureField; + if (event.currentTarget.classList.contains('foundation-tab')) featureField = 'foundation'; + else if (event.currentTarget.classList.contains('specialization-tab')) featureField = 'specialization'; + else if (event.currentTarget.classList.contains('mastery-tab')) featureField = 'mastery'; + else return; + + const path = `system.${featureField}Feature.abilities`; + const abilities = duplicate(getProperty(this.document, path)) || []; + const featureData = {name: item.name, img: item.img, uuid: item.uuid }; + abilities.push(featureData); + + await this.document.update({ [path]: abilities }); } } diff --git a/module/data/subclass.mjs b/module/data/subclass.mjs index 9cf327dc..938d290c 100644 --- a/module/data/subclass.mjs +++ b/module/data/subclass.mjs @@ -15,19 +15,37 @@ export default class DhpSubclass extends foundry.abstract.TypeDataModel { }), foundationFeature: new fields.SchemaField({ description: new fields.HTMLField({}), - abilities: new fields.ArrayField(new fields.EmbeddedDataField(DaggerheartFeature)) + abilities: new fields.ArrayField( + new fields.SchemaField({ + name: new fields.StringField({}), + img: new fields.StringField({}), + uuid: new fields.StringField({}) + }) + ) }), specializationFeature: new fields.SchemaField({ unlocked: new fields.BooleanField({ initial: false }), tier: new fields.NumberField({ initial: null, nullable: true, integer: true }), description: new fields.HTMLField({}), - abilities: new fields.ArrayField(new fields.EmbeddedDataField(DaggerheartFeature)) + abilities: new fields.ArrayField( + new fields.SchemaField({ + name: new fields.StringField({}), + img: new fields.StringField({}), + uuid: new fields.StringField({}) + }) + ) }), masteryFeature: new fields.SchemaField({ unlocked: new fields.BooleanField({ initial: false }), tier: new fields.NumberField({ initial: null, nullable: true, integer: true }), description: new fields.HTMLField({}), - abilities: new fields.ArrayField(new fields.EmbeddedDataField(DaggerheartFeature)) + abilities: new fields.ArrayField( + new fields.SchemaField({ + name: new fields.StringField({}), + img: new fields.StringField({}), + uuid: new fields.StringField({}) + }) + ) }), multiclass: new fields.NumberField({ initial: null, nullable: true, integer: true }) };