From 30455759e8e2b3c5c6ea75e9019a79fa1af83b58 Mon Sep 17 00:00:00 2001 From: Vlyan Date: Fri, 5 Sep 2025 09:53:48 +0200 Subject: [PATCH] Properties loading optimizations by KitCat --- CHANGELOG.md | 1 + system/scripts/helpers.js | 4 ++-- system/scripts/items/item-sheet.js | 37 +++++++++++++----------------- 3 files changed, 19 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4efb6ac..f91735a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ Date format : day/month/year - Fix for fade configuration (!66) - Added basic token conditions (Thanks to Putty) - Added ability to remove condition from actor sheet and core journal on click. +- Added some Properties loading optimizations (!63 Thanks to KitCat). ## 1.13.0 - 24/08/2025 - Foundry v13 Compatibility (Thx to Litasa) __! Be certain to carefully back up any critical user data before installing this update !__ diff --git a/system/scripts/helpers.js b/system/scripts/helpers.js index f48d0a3..2288ecb 100644 --- a/system/scripts/helpers.js +++ b/system/scripts/helpers.js @@ -189,12 +189,12 @@ export class HelpersL5r5e { // Unknown pack object, iterate all packs if (!document) { - for (const comp of game.packs) { + await Promise.all(game.packs.map(async (comp) => { const tmpData = await comp.getDocument(id); if (tmpData) { document = HelpersL5r5e.createDocumentFromCompendium({ type, data: tmpData }); } - } + })); } // Final diff --git a/system/scripts/items/item-sheet.js b/system/scripts/items/item-sheet.js index 13c5d4a..baa576b 100644 --- a/system/scripts/items/item-sheet.js +++ b/system/scripts/items/item-sheet.js @@ -37,31 +37,26 @@ export class ItemSheetL5r5e extends BaseItemSheetL5r5e { * @private */ async _prepareProperties(sheetData) { - sheetData.data.propertiesList = []; + sheetData.data.propertiesList = await Promise.all((sheetData.data?.system?.properties || []).map(async (property) => { - if (Array.isArray(sheetData.data.system.properties)) { - const props = []; - for (const property of sheetData.data.system.properties) { - const gameProp = await game.l5r5e.HelpersL5r5e.getObjectGameOrPack({ id: property.id, type: "Item" }); - if (gameProp) { - sheetData.data.propertiesList.push(gameProp); - props.push({ id: gameProp.id, name: gameProp.name }); - } else { - // Item not found - console.warn(`L5R5E | IS | Unknown property id[${property.id}], name[${property.name}]`); - sheetData.data.propertiesList.push({ - id: property.id, - name: property.name, - type: "property", - img: "systems/l5r5e/assets/icons/items/property.svg", - removed: true, - }); - } + const gameProp = await game.l5r5e.HelpersL5r5e.getObjectGameOrPack({ id: property.id, type: "Item" }); + if (gameProp) { + return gameProp; } - sheetData.data.system.properties = props; - } + + // Item not found + console.warn(`L5R5E | IS | Unknown property id[${property.id}], name[${property.name}]`); + return { + id: property.id, + name: property.name, + type: "property", + img: "systems/l5r5e/assets/icons/items/property.svg", + removed: true, + }; + })); } + /** * Subscribe to events from the sheet. * @param {jQuery} html HTML content of the sheet.