From c7bb4b80977fabe771ed698e8a2d35d593b384e2 Mon Sep 17 00:00:00 2001 From: Thaum Rystra <9525416+ThaumRystra@users.noreply.github.com> Date: Mon, 18 Sep 2023 13:31:48 +0200 Subject: [PATCH] Fixed issue where duplicated point buys cause row-id collision in dep graph --- .../buildComputation/linkTypeDependencies.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/app/imports/api/engine/computation/buildComputation/linkTypeDependencies.js b/app/imports/api/engine/computation/buildComputation/linkTypeDependencies.js index 85a7b551..a3d65599 100644 --- a/app/imports/api/engine/computation/buildComputation/linkTypeDependencies.js +++ b/app/imports/api/engine/computation/buildComputation/linkTypeDependencies.js @@ -259,19 +259,23 @@ function linkPointBuy(dependencyGraph, prop) { dependOnCalc({ dependencyGraph, prop, key: 'max' }); dependOnCalc({ dependencyGraph, prop, key: 'cost' }); dependOnCalc({ dependencyGraph, prop, key: 'total' }); - prop.values?.forEach(row => { + prop.values?.forEach((row, index) => { + // Get a unique id for the row because it might be shared among duplicated point buy tables + // prop._id is forced unique by the database, so it can be used instead + const uniqueRowId = prop._id + '_row_' + index; // Wrap the document in a new object so we don't bash it unintentionally const pointBuyRow = { ...row, + _id: uniqueRowId, type: 'pointBuyRow', tableName: prop.name, tableId: prop._id, } - dependencyGraph.addNode(row._id, pointBuyRow); + dependencyGraph.addNode(pointBuyRow._id, pointBuyRow); linkVariableName(dependencyGraph, pointBuyRow); - dependOnCalc({ dependencyGraph, pointBuyRow, key: 'row.min' }); - dependOnCalc({ dependencyGraph, pointBuyRow, key: 'row.max' }); - dependOnCalc({ dependencyGraph, pointBuyRow, key: 'row.cost' }); + dependOnCalc({ dependencyGraph, pointBuyRow, key: 'min' }); + dependOnCalc({ dependencyGraph, pointBuyRow, key: 'max' }); + dependOnCalc({ dependencyGraph, pointBuyRow, key: 'cost' }); }); if (prop.inactive) return; }