Skip to content

Commit

Permalink
directive cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
amirsedghi committed Feb 27, 2018
1 parent 815f998 commit 8342840
Show file tree
Hide file tree
Showing 5 changed files with 19 additions and 97 deletions.
2 changes: 1 addition & 1 deletion client/common/directives/ModelField/ModelField.js
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ angular.module('dashboard.directives.ModelField', [
</div>\
</div>';
break;
case 'statuses':
case 'status-multi-select':
template = '<label class="col-sm-2 control-label" ng-if="data.isQualifyingProject" >{{ display.label || key | translate }}:</label>\
<div class="col-sm-10 multi-select" ng-if="data.isQualifyingProject">\
<div class="error-message" ng-if="display.error.length > 0">{{ display.error }}</div>\
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,6 @@ angular.module('dashboard.directives.ModelFieldStatusMultiSelect', [])
scope.selected = [];
if (!property) property = {};
if (!property.display) property.display = {};

initOptions();
initData();

//Handle translating multi-select checks to scope.data output format
Expand All @@ -54,18 +52,12 @@ angular.module('dashboard.directives.ModelFieldStatusMultiSelect', [])
var params = {};
GeneralModelService.list(apiPath, params, {preventCancel: true}).then(function(response){
if (!response) return;

for(var i=0; i<response.length; i++) {
response[i].value = makeReadable(response[i].value);
if (response[i].value.indexOf('Mrf') > -1) {
response[i].value = response[i].value.replace('Mrf', 'MRF');
}
response[i].value = makeReadable(response[i].key);
}

scope.multiSelectOptions = response;
element.html(getTemplate()).show();
$compile(element.contents())(scope);

if (scope.modelData && scope.modelData.trialId) {
var apiPath = scope.modelData.isQualifyingProject ? scope.options.qualifyingStatusApi : scope.options.trialApi;
var output = {};
Expand All @@ -80,7 +72,6 @@ angular.module('dashboard.directives.ModelFieldStatusMultiSelect', [])
if (response.length > 0) scope.data = output;
})
}

scope.$on('removeModelFieldMultiSelect', function($event, key) {
if (key !== scope.key) return;
$timeout(function() {
Expand All @@ -90,6 +81,10 @@ angular.module('dashboard.directives.ModelFieldStatusMultiSelect', [])
})
}

/**
* convert unum formatted string to a readable format
* @param {String} string
*/
function makeReadable(string) {
for (var i=0; i<string.length; i++) {
if (i === 0) {
Expand All @@ -100,95 +95,20 @@ angular.module('dashboard.directives.ModelFieldStatusMultiSelect', [])
string = string.replaceAt(i-1, ' ');
}
}
return string;
}

/**
* parses multi-select options and checks if string, array, or object
* if string - try parsing first based on new line character; if no new-line character assume comma separated
* if array - check if array of string values or array of key/value pair objects
* if object - parse as key/value pair object ordered by key
*/
function initOptions() {
var options = scope.options || property.display.options;
if (typeof options === 'string') {
//Check if options on new line
if (options.indexOf('\n') > -1) {
//Options separated by new line
options = options.split('\n');
} else {
//assume options separated by comma
options = options.split(',');
}
}

var keyOverride = property.display.key || 'key';
var valueOverride = property.display.value || 'value';
if (Array.isArray(options)) {
//Check if array of strings
for (var i in options) {
var item = options[i];
if (typeof item === 'string') {
//string option
var option = {key: item, value: item};
scope.multiSelectOptions.push(option);
} else if (item && typeof item === 'object') {
//Objects (key/value pair)
var key = item[keyOverride] || i; //fallback to index if no key
var option = { key: key, value: item[valueOverride], item: item };
scope.multiSelectOptions.push(option);
}
}

} else if (options && typeof options === 'object') {
//Assume object containing key/value pair
var keys = Object.keys(options);
for (var k in keys) {
var key = keys[k];
var option = { key: key, value: options[key] };
scope.multiSelectOptions.push(option);
}
if (string.indexOf('Mrf') > -1) {
string = string.replace('Mrf', 'MRF');
}
return string;
}

/**
* Initial data load by checking desired output as comma, array, or object
*/
function initData() {
// reset all to false - used to rebuild data if revert is required
for (var k in scope.selected) {
scope.selected[k] = false
};
if (typeof property.display.output === 'undefined') {
var options = scope.options || property.display.options;
property.display.output = options instanceof Array ? "comma" : "object";
}
if (typeof scope.data === 'string') {
if (!scope.data) scope.data = "";
var items = scope.data.split('","');
for (var i in items) {
var item = items[i];
if (item[0] == '"') item = item.substring(1, item.length);
if (item[item.length-1] == '"') item = item.substring(0, item.length-1);
var index = _.findIndex(scope.multiSelectOptions, {key: item});
if (index > -1) scope.selected[index] = true;
}
} else if (Array.isArray(scope.data)) {
if (!scope.data) scope.data = [];
for (var i in scope.data) {
var value = scope.data[i];
var index = _.findIndex(scope.multiSelectOptions, {key: value});
if (index > -1) scope.selected[index] = true;
}
} else if (scope.data && typeof scope.data === 'object') {
if (!scope.data) scope.data = {};
var keys = Object.keys(scope.data);
for (var k in keys) {
var key = keys[k];
var index = _.findIndex(scope.multiSelectOptions, {key: key});
if (index > -1) scope.selected[index] = true;
}
}
}

function clickMultiSelectCheckbox(index, selectedOption) {
Expand All @@ -197,6 +117,9 @@ angular.module('dashboard.directives.ModelFieldStatusMultiSelect', [])

if (scope.selected.indexOf(false) > -1) {
scope.selectAll = false;
}
else if (Object.values(scope.selected).length === scope.multiSelectOptions.length) {
scope.selectAll = true;
}

for (var i in scope.selected) {
Expand Down Expand Up @@ -231,7 +154,6 @@ angular.module('dashboard.directives.ModelFieldStatusMultiSelect', [])
}, 1);

if (scope.selected.indexOf(true) < 0) {
console.log('we get here...');
delete scope.data;
}

Expand Down
10 changes: 5 additions & 5 deletions dist/app.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/app.js.map

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/vendor.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 8342840

Please sign in to comment.