From c8adc19846952ba6d534ab4ba4a0bb3b468fab4b Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Sat, 4 Feb 2023 16:21:21 -0600 Subject: [PATCH] Load stock data on stock change or char upload Extracts the loading logic to a common method returning a promise, both places 'then' the promise. --- src/public/js/burning-serialize.js | 47 +++++++++++++++--------------- src/public/js/burning.js | 24 ++++++++------- 2 files changed, 38 insertions(+), 33 deletions(-) diff --git a/src/public/js/burning-serialize.js b/src/public/js/burning-serialize.js index 484b1cb..684ef23 100644 --- a/src/public/js/burning-serialize.js +++ b/src/public/js/burning-serialize.js @@ -1,8 +1,8 @@ function loadCurrentCharacterFromStruct($scope, charStruct, burningData, appropriateWeapons){ - $scope.name = charStruct.name; - $scope.gender = charStruct.gender; - $scope.stock = charStruct.stock; - + $scope.name = charStruct.name; + $scope.gender = charStruct.gender; + $scope.stock = charStruct.stock; + $scope.ensureStockLoaded($scope.stock).then(() => { // Appropriate weapons must be loaded before calculateLifepathSkills is called. if(serverSettings.storageType != 'server'){ appropriateWeapons.appropriateWeapons = charStruct.approp_weapons; @@ -15,8 +15,8 @@ function loadCurrentCharacterFromStruct($scope, charStruct, burningData, appropr var selectedLifepaths = []; for(var i = 0; i < charStruct.lifepaths.length; i++){ var lp = charStruct.lifepaths[i]; - // lp[0] is setting name, lp[1] is lifepath name. - // lp[2] is brutalLifeDOF, lp[3] is brutalLifeTraitName, + // lp[0] is setting name, lp[1] is lifepath name. + // lp[2] is brutalLifeDOF, lp[3] is brutalLifeTraitName, // lp[4] is lifepath time, if it's variable and the user selected a value // lp[5] is the replacement skill for 'Weapon Of Choice' if it's present. // lp[6] is the replacement stat array, if present. This is needed if the @@ -128,19 +128,19 @@ function loadCurrentCharacterFromStruct($scope, charStruct, burningData, appropr // Load Resources $scope.gear = {}; - for(var i = 0; i < charStruct.gear.length; i++){ + for(var i = 0; i < charStruct.gear.length; i++){ var gear = charStruct.gear[i]; $scope.gear[gear.desc] = new DisplayGear(gear.desc, gear.cost); } $scope.property = {}; - for(var i = 0; i < charStruct.property.length; i++){ + for(var i = 0; i < charStruct.property.length; i++){ var property = charStruct.property[i]; $scope.property[property.desc] = new DisplayGear(property.desc, property.cost); } - + $scope.relationships = {}; - for(var i = 0; i < charStruct.relationships.length; i++){ + for(var i = 0; i < charStruct.relationships.length; i++){ var rel = charStruct.relationships[i]; $scope.relationships[rel.desc] = new DisplayRelationship( rel.desc, @@ -154,13 +154,13 @@ function loadCurrentCharacterFromStruct($scope, charStruct, burningData, appropr } $scope.affiliations = {}; - for(var i = 0; i < charStruct.affiliations.length; i++){ + for(var i = 0; i < charStruct.affiliations.length; i++){ var affil = charStruct.affiliations[i]; $scope.affiliations[affil.desc] = new DisplayAffiliation(affil.desc, affil.importance); } $scope.reputations = {}; - for(var i = 0; i < charStruct.reputations.length; i++){ + for(var i = 0; i < charStruct.reputations.length; i++){ var rep = charStruct.reputations[i]; $scope.reputations[rep.desc] = new DisplayReputation(rep.desc, rep.importance); } @@ -173,14 +173,15 @@ function loadCurrentCharacterFromStruct($scope, charStruct, burningData, appropr $scope.attributeModifierQuestionResults = loadAttributeModifierQuestionResultsFromSave($scope, charStruct.attr_mod_questions); $scope.brutalLifeWithdrawn = charStruct.brutal_life_withdrawn; - + $scope.$digest(); + }); } function convertCurrentCharacterToStruct($scope, appropriateWeapons) { // To serialize: // - Serialized version // - Character name - // - Stock + // - Stock // - Gender // - A list Lifepath names, with setting: [setting, lifepath] // - How many points were spent on which stat @@ -225,10 +226,10 @@ function convertCurrentCharacterToStruct($scope, appropriateWeapons) { var displayStat = $scope.stats[i]; stats.push({ - "name" : displayStat.name, - "shade" : displayStat.shade, - "mentalPoints" : displayStat.mentalPointsSpent, - "physicalPoints" : displayStat.physicalPointsSpent, + "name" : displayStat.name, + "shade" : displayStat.shade, + "mentalPoints" : displayStat.mentalPointsSpent, + "physicalPoints" : displayStat.physicalPointsSpent, "eitherPoints" : displayStat.eitherPointsSpent }); } @@ -277,7 +278,7 @@ function convertCurrentCharacterToStruct($scope, appropriateWeapons) { } var res = serializeResource( $scope.gear, function(display){ - return { + return { "cost" : display.cost, "desc" : display.desc }; @@ -285,7 +286,7 @@ function convertCurrentCharacterToStruct($scope, appropriateWeapons) { chardata.gear = res; var res = serializeResource( $scope.property, function(display){ - return { + return { "cost" : display.cost, "desc" : display.desc }; @@ -293,7 +294,7 @@ function convertCurrentCharacterToStruct($scope, appropriateWeapons) { chardata.property = res; var res = serializeResource( $scope.relationships, function(display){ - return { + return { "desc" : display.desc, "importance" : display.importance, "isImmedFam" : display.isImmedFam, @@ -306,7 +307,7 @@ function convertCurrentCharacterToStruct($scope, appropriateWeapons) { chardata.relationships = res; var res = serializeResource( $scope.affiliations, function(display){ - return { + return { "desc" : display.desc, "importance" : display.importance }; @@ -314,7 +315,7 @@ function convertCurrentCharacterToStruct($scope, appropriateWeapons) { chardata.affiliations = res; var res = serializeResource( $scope.reputations, function(display){ - return { + return { "desc" : display.desc, "importance" : display.importance }; diff --git a/src/public/js/burning.js b/src/public/js/burning.js index e51b17a..573aaed 100644 --- a/src/public/js/burning.js +++ b/src/public/js/burning.js @@ -364,14 +364,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo $scope.stockSelected = true; } - let loadPromises = []; - if(!burningData.resources[$scope.stock]) { - loadPromises.push(burningData.loadResourcesForStock($scope.stock)); - } - if(!burningData.lifepaths[$scope.stock]) { - loadPromises.push(burningData.loadLifepathsForStock($scope.stock)); - } - Promise.all(loadPromises).then(() => { + $scope.ensureStockLoaded($scope.stock).then(() => { var oldName = $scope.name; // Make a blank character sheet $scope.initialize($scope.stock); @@ -386,9 +379,21 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo calculateSpecialTraitsForDisplay($scope, burningData); calculateGearSelectionLists($scope, burningData); calculatePropertySelectionLists($scope, burningData); + $scope.$digest(); }); } + $scope.ensureStockLoaded = function(stock) { + let loadPromises = []; + if(!burningData.lifepaths[stock]) { + loadPromises.push(burningData.loadLifepathsForStock(stock)); + } + if(!burningData.resources[stock]) { + loadPromises.push(burningData.loadResourcesForStock(stock)); + } + return Promise.all(loadPromises); + }; + $scope.onSettingChange = function(){ calculateCurrentSettingLifepathNames($scope, burningData); @@ -413,8 +418,7 @@ function BurningCtrl($scope, $http, $modal, $timeout, settings, appropriateWeapo } burningData.whenStocksLoaded.then(() => { - $scope.stocks = [{ name: "Select a stock" }]; - $scope.stocks = $scope.stocks.concat(Object.values(burningData.stocks)); + $scope.stocks = [{ name: "Select a stock" }, ...Object.values(burningData.stocks)]; $scope.stockSelected = false; $scope.$digest(); });