Skip to content
Snippets Groups Projects
Commit 20ce1fd1 authored by Jaden Diefenbaugh's avatar Jaden Diefenbaugh
Browse files

mutate obj instead of reassign to keep twoway binding

parent 9651cdb4
No related branches found
No related tags found
1 merge request!223Reports overhaul
......@@ -27,6 +27,7 @@ angular.module('reportApp').controller('GroupsController', ['$scope', 'ReportSer
ReportService.createGroup('great');
ReportService.addExperimentToGroup('exp1', 'great');
vm.test = 'test';
vm.report = $scope.report;
// ReportService stuff to be used directly in ui
vm.groups = ReportService.groups;
......@@ -35,7 +36,7 @@ angular.module('reportApp').controller('GroupsController', ['$scope', 'ReportSer
vm.createGroup = function(name) {
ReportService.createGroup(name);
vm.newGroupName = '';
}
};
vm.deleteGroup = ReportService.deleteGroup;
// createGroup input val
......
......@@ -27,7 +27,7 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact
$scope.report_id;
$scope.url_prefix;
$scope.reportFactory = reportFactory;
$scope.report;
$scope.report = {};
$scope.report_experiments = {};
$scope.num_report_items = 0;
$scope.max_num = 0;
......@@ -70,23 +70,47 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact
$scope.table_item_content = dataFactory.getData(data_table_itemcontent_file);
};
// saves a data object to an different object by iterating through
// the data obj's entries and assigning them one-by-one.
// Why? JS is pass-by-value, but complex datatypes (Objects, arrays, funcs) are pointers.
// Angular depends on these pointers in two-way bindings of complex datatypes.
// If one assigns a different obj, the two-way binding is lost!
function mutateSave(saveObj, dataObj){
let t = typeof(dataObj);
if (t === 'object' && saveObj) {
Object.entries(dataObj)
.forEach(([key, val]) => {
saveObj[key] = val;
});
} else if (t === 'array' && typeof(saveObj) === 'array') {
saveObj.length = 0;
dataObj.forEach(e => saveObj.push(e));
}
}
// saves the report data from the API to the $scope
function saveReportData(reportData){
mutateSave($scope.report, reportData);
$scope.report.url_prefix = $scope.url_prefix;
if($scope.report.content.alias_experiments != undefined){
mutateSave($scope.report_experiments_alias, $scope.report.content.alias_experiments);
}
}
function getReportData(user, report_id){
reportFactory.getReportInformation(user, report_id, $scope.url_prefix)
.success(function (reportData){
$scope.report = reportData;
$scope.report.url_prefix = $scope.url_prefix;
var experiments = $scope.report.experiments;
if($scope.report.content.alias_experiments != undefined){
$scope.report_experiments_alias = $scope.report.content.alias_experiments;
}
var promises = [];
saveReportData(reportData);
let promises = [];
function lastTask(){
getPlotters();
}
let experiments = $scope.report.experiments;
if(experiments != undefined){
promises.push(getExperimentDataForAuthor(experiments));
$scope.q.all(promises).then(lastTask);
......@@ -102,15 +126,8 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact
function getReportDataFromNumber(report_number, $q){
reportFactory.getReportInformationFromNumber(report_number, $scope.url_prefix)
.success(function (reportData){
$scope.report = reportData;
$scope.report.url_prefix = $scope.url_prefix;
var experiments = $scope.report.experiments;
if($scope.report.content.alias_experiments != undefined){
$scope.report_experiments_alias = $scope.report.content.alias_experiments;
}
var promises = [];
saveReportData(reportData);
let promises = [];
function lastTask(){
getPlotters();
......@@ -130,13 +147,12 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact
function getExperimentDataReportNumber(report_number){
experimentFactory.getAllExperimentResults($scope.url_prefix, report_number)
.then(function (experiments){
Object.entries(experiments).forEach(([name, exp]) => {
$scope.report_experiments[name] = exp;
});
mutateSave($scope.report_experiments, experiments);
$scope.report.all_experiments = experiments;
var experiment_aliases = Object.keys(experiments);
for(var i = 0; i < experiment_aliases.length; i++){
var experiment_alias = experiment_aliases[i];
let experiment_aliases = Object.keys(experiments);
for(let i = 0; i < experiment_aliases.length; i++){
let experiment_alias = experiment_aliases[i];
if($scope.report.content.alias_experiments != undefined){
if($scope.report.content.alias_experiments[experiment_alias] != undefined){
......@@ -166,7 +182,7 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact
$scope.sorted_experiments_keys_reverse = $scope.report.content.sorted_tables_keys_reverse;
$scope.sorted_experiments_keys_tables_sortkey = $scope.report.content.sorted_tables_sortkey;
}
for(var i = 0; i < Object.keys($scope.sorted_experiments_keys_tables_sortkey).length; i++){
for(let i = 0; i < Object.keys($scope.sorted_experiments_keys_tables_sortkey).length; i++){
$scope.sorted_tables.push(Object.keys($scope.sorted_experiments_keys_tables_sortkey)[i]);
}
});
......@@ -175,13 +191,12 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact
function getExperimentDataForAuthor(all_experiments){
experimentFactory.getAllExperimentResultsForAuthor($scope.user, $scope.report_id, $scope.url_prefix)
.then(function (experiments){
Object.entries(experiments).forEach(([name, exp]) => {
$scope.report_experiments[name] = exp;
});
mutateSave($scope.report_experiments, experiments);
$scope.report.all_experiments = experiments;
var experiment_aliases = Object.keys(experiments);
for(var i = 0; i < experiment_aliases.length; i++){
var experiment_alias = experiment_aliases[i];
let experiment_aliases = Object.keys(experiments);
for(let i = 0; i < experiment_aliases.length; i++){
let experiment_alias = experiment_aliases[i];
if($scope.report.content.alias_experiments != undefined){
if($scope.report.content.alias_experiments[experiment_alias] != undefined){
......@@ -212,7 +227,7 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact
$scope.sorted_experiments_keys_reverse = $scope.report.content.sorted_tables_keys_reverse;
$scope.sorted_experiments_keys_tables_sortkey = $scope.report.content.sorted_tables_sortkey;
}
for(var i = 0; i < Object.keys($scope.sorted_experiments_keys_tables_sortkey).length; i++){
for(let i = 0; i < Object.keys($scope.sorted_experiments_keys_tables_sortkey).length; i++){
$scope.sorted_tables.push(Object.keys($scope.sorted_experiments_keys_tables_sortkey)[i]);
}
......@@ -222,9 +237,9 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact
function getExperimentData(experiment_id){
experimentFactory.getExperimentInformation($scope.url_prefix, experiment_id)
.then(function (experimentData){
var experiments = $scope.report_experiments;
let experiments = $scope.report_experiments;
experiments[experiment_id] = experimentData;
$scope.report_experiments = experiments;
mutateSave($scope.report_experiments, experiments);
$scope.report.all_experiments = experiments;
if($scope.report.content.alias_experiments != undefined){
......@@ -281,7 +296,7 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact
function checkContent(){
if($scope.report.content != undefined){
var orderkeys = [];
let orderkeys = [];
angular.forEach($scope.report.content, function(value, key){
orderkeys.push(key);
});
......@@ -300,21 +315,21 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact
$scope.floating_point_precision.selected = $scope.report.content.floating_point_precision;
}
for(var i = 0; i < $scope.report.orderedcontent.length; i++){
var id_content = $scope.report.orderedcontent[i];
for(let i = 0; i < $scope.report.orderedcontent.length; i++){
let id_content = $scope.report.orderedcontent[i];
addElementToReport(id_content);
}
}
}
function addElementToReport(id_content){
var type = id_content.split("_")[0];
let type = id_content.split("_")[0];
$scope.$broadcast("addSavedElement", id_content, type);
}
function intersectBlocks(experiment_id){
$scope.report_experiments_blocks[experiment_id] = Object.keys($scope.report_experiments[experiment_id].blocks_status);
var values = $.map($scope.report_experiments_blocks[experiment_id], function(value, key) { return value; });
let values = $.map($scope.report_experiments_blocks[experiment_id], function(value, key) { return value; });
$scope.report_experiments_blocks_merged_blocks.push(values);
}
......@@ -324,7 +339,7 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact
//only get algorithms
if(key_algorithm.indexOf("/") != -1){
$scope.report_algorithm_parameters[key_algorithm] = value_algorithm;
var experiment_algorithm_parameter = {};
let experiment_algorithm_parameter = {};
if($scope.report_algorithm_parameters_experiment[experiment_id] == undefined){
$scope.report_algorithm_parameters_experiment[experiment_id] = {};
......@@ -376,7 +391,7 @@ angular.module('reportApp').controller('reportController',['$scope', 'reportFact
}
function unique(list){
var result = [];
let result = [];
$.each(list, function(i, e) {
if ($.inArray(e, result) == -1) result.push(e);
});
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment