const { hasProperty } = foundry.utils; export function TAFDocumentSheetMixin(HandlebarsApplication) { class TAFDocumentSheet extends HandlebarsApplication { /** @type {Record | null} */ static PROPERTY_TO_PARTIAL = null; /** * This override is used by the mixin in order to allow for partial * re-rendering of applications based on what properties changed. * It requires that a static PROPERTY_TO_PARTIAL to be defined as * an object of path keys to arrays of part IDs in order to work. * This will not interfere with renders that are not started as * part of the actor update lifecycle. */ _configureRenderOptions(options) { if (options.renderContext === `updateActor`) { const propertyToParts = this.constructor.PROPERTY_TO_PARTIAL; if (propertyToParts) { const parts = new Set(); for (const property in propertyToParts) { if (hasProperty(options.renderData, property)) { propertyToParts[property].forEach(partID => parts.add(partID)); }; }; options.parts = options.parts?.filter(part => !parts.has(part)) ?? Array.from(parts); } }; super._configureRenderOptions(options); }; }; return TAFDocumentSheet; };