From ae91d6786f85686420a8c5f828de67f2800cd3cc Mon Sep 17 00:00:00 2001 From: WBHarry Date: Sat, 31 Jan 2026 19:32:51 +0100 Subject: [PATCH] Fixed actions not being delete:able --- module/data/fields/_module.mjs | 1 - module/data/fields/actionField.mjs | 11 ++- module/data/fields/mappingField.mjs | 128 ---------------------------- 3 files changed, 5 insertions(+), 135 deletions(-) delete mode 100644 module/data/fields/mappingField.mjs diff --git a/module/data/fields/_module.mjs b/module/data/fields/_module.mjs index 2a8ba454..58423979 100644 --- a/module/data/fields/_module.mjs +++ b/module/data/fields/_module.mjs @@ -3,5 +3,4 @@ export { default as FormulaField } from './formulaField.mjs'; export { default as ForeignDocumentUUIDField } from './foreignDocumentUUIDField.mjs'; export { default as ForeignDocumentUUIDArrayField } from './foreignDocumentUUIDArrayField.mjs'; export { default as TriggerField } from './triggerField.mjs'; -export { default as MappingField } from './mappingField.mjs'; export * as ActionFields from './action/_module.mjs'; diff --git a/module/data/fields/actionField.mjs b/module/data/fields/actionField.mjs index 1305a6d8..d0cc808b 100644 --- a/module/data/fields/actionField.mjs +++ b/module/data/fields/actionField.mjs @@ -1,6 +1,5 @@ import DHActionConfig from '../../applications/sheets-configs/action-config.mjs'; import { itemAbleRollParse } from '../../helpers/utils.mjs'; -import MappingField from './mappingField.mjs'; /** * Specialized collection type for stored actions. @@ -11,9 +10,9 @@ export class ActionCollection extends Collection { constructor(model, entries) { super(); this.#model = model; - for (const entry of entries) { - if (!(entry instanceof game.system.api.models.actions.actionsTypes.base)) continue; - this.set(entry._id, entry); + for (const [key, value] of entries) { + if (!(value instanceof game.system.api.models.actions.actionsTypes.base)) continue; + this.set(key, value); } } @@ -61,7 +60,7 @@ export class ActionCollection extends Collection { /** * Field that stores actions. */ -export class ActionsField extends MappingField { +export class ActionsField extends foundry.data.fields.TypedObjectField { constructor(options) { super(new ActionField(), options); } @@ -70,7 +69,7 @@ export class ActionsField extends MappingField { /** @inheritDoc */ initialize(value, model, options) { - const actions = Object.values(super.initialize(value, model, options)); + const actions = Object.entries(super.initialize(value, model, options)); return new ActionCollection(model, actions); } } diff --git a/module/data/fields/mappingField.mjs b/module/data/fields/mappingField.mjs deleted file mode 100644 index 31d91c76..00000000 --- a/module/data/fields/mappingField.mjs +++ /dev/null @@ -1,128 +0,0 @@ -/** - * A subclass of ObjectField that represents a mapping of keys to the provided DataField type. - * - * @param {DataField} model The class of DataField which should be embedded in this field. - * @param {MappingFieldOptions} [options={}] Options which configure the behavior of the field. - * @property {string[]} [initialKeys] Keys that will be created if no data is provided. - * @property {MappingFieldInitialValueBuilder} [initialValue] Function to calculate the initial value for a key. - * @property {boolean} [initialKeysOnly=false] Should the keys in the initialized data be limited to the keys provided - * by `options.initialKeys`? - */ -export default class MappingField extends foundry.data.fields.ObjectField { - constructor(model, options) { - if (!(model instanceof foundry.data.fields.DataField)) { - throw new Error('MappingField must have a DataField as its contained element'); - } - super(options); - - /** - * The embedded DataField definition which is contained in this field. - * @type {DataField} - */ - this.model = model; - model.parent = this; - } - - /* -------------------------------------------- */ - - /** @inheritDoc */ - static get _defaults() { - return foundry.utils.mergeObject(super._defaults, { - initialKeys: null, - initialValue: null, - initialKeysOnly: false - }); - } - - /* -------------------------------------------- */ - - /** @inheritDoc */ - _cleanType(value, options) { - Object.entries(value).forEach(([k, v]) => { - if (k.startsWith('-=')) return; - value[k] = this.model.clean(v, options); - }); - return value; - } - - /* -------------------------------------------- */ - - /** @inheritDoc */ - getInitialValue(data) { - let keys = this.initialKeys; - const initial = super.getInitialValue(data); - if (!keys || !foundry.utils.isEmpty(initial)) return initial; - if (!(keys instanceof Array)) keys = Object.keys(keys); - for (const key of keys) initial[key] = this._getInitialValueForKey(key); - return initial; - } - - /* -------------------------------------------- */ - - /** - * Get the initial value for the provided key. - * @param {string} key Key within the object being built. - * @param {object} [object] Any existing mapping data. - * @returns {*} Initial value based on provided field type. - */ - _getInitialValueForKey(key, object) { - const initial = this.model.getInitialValue(); - return this.initialValue?.(key, initial, object) ?? initial; - } - - /* -------------------------------------------- */ - - /** @override */ - _validateType(value, options = {}) { - if (foundry.utils.getType(value) !== 'Object') throw new Error('must be an Object'); - const errors = this._validateValues(value, options); - if (!foundry.utils.isEmpty(errors)) { - const failure = new foundry.data.validation.DataModelValidationFailure(); - failure.elements = Object.entries(errors).map(([id, failure]) => ({ id, failure })); - throw failure.asError(); - } - } - - /* -------------------------------------------- */ - - /** - * Validate each value of the object. - * @param {object} value The object to validate. - * @param {object} options Validation options. - * @returns {Record} An object of value-specific errors by key. - */ - _validateValues(value, options) { - const errors = {}; - for (const [k, v] of Object.entries(value)) { - if (k.startsWith('-=')) continue; - const error = this.model.validate(v, options); - if (error) errors[k] = error; - } - return errors; - } - - /* -------------------------------------------- */ - - /** @override */ - initialize(value, model, options = {}) { - if (!value) return value; - const obj = {}; - const initialKeys = this.initialKeys instanceof Array ? this.initialKeys : Object.keys(this.initialKeys ?? {}); - const keys = this.initialKeysOnly ? initialKeys : Object.keys(value); - for (const key of keys) { - const data = value[key] ?? this._getInitialValueForKey(key, value); - obj[key] = this.model.initialize(data, model, options); - } - return obj; - } - - /* -------------------------------------------- */ - - /** @inheritDoc */ - _getField(path) { - if (path.length === 0) return this; - else if (path.length === 1) return this.model; - path.shift(); - return this.model._getField(path); - } -}