allow array syntax inside of the messageKey property of a config item

This commit is contained in:
Keegan
2016-06-15 23:58:41 -07:00
parent 3cffa3a275
commit dd6fe54834
4 changed files with 89 additions and 28 deletions
+41 -8
View File
@@ -265,9 +265,8 @@ Clay.prepareForAppMessage = function(val) {
if (Array.isArray(val)) {
result = [];
val.forEach(function(item) {
var itemConverted = Clay.prepareForAppMessage(item);
result.push(itemConverted);
val.forEach(function(item, index) {
result[index] = Clay.prepareForAppMessage(item);
});
} else if (typeof val === 'object' && val) {
if (typeof val.value === 'number') {
@@ -297,20 +296,54 @@ Clay.prepareForAppMessage = function(val) {
* assign arrays into individual keys
* @see {prepareForAppMessage}
* @param {Object} settings
* @param {Object} messageKeys
* @returns {{}}
*/
Clay.prepareSettingsForAppMessage = function(settings, messageKeys) {
var result = {};
Clay.prepareSettingsForAppMessage = function(settings) {
// flatten settings
var flatSettings = {};
Object.keys(settings).forEach(function(key) {
var val = settings[key];
var matches = key.match(/(.+?)(?:\[(\d*)\])?$/);
if (!matches[2]) {
flatSettings[key] = val;
return;
}
var position = parseInt(matches[2] || 0, 10);
key = matches[1];
if (typeof flatSettings[key] === 'undefined') {
flatSettings[key] = [];
}
flatSettings[key][position] = val;
});
var result = {};
Object.keys(flatSettings).forEach(function(key) {
var messageKey = messageKeys[key];
var settingArr = Clay.prepareForAppMessage(settings[key]);
var settingArr = Clay.prepareForAppMessage(flatSettings[key]);
settingArr = Array.isArray(settingArr) ? settingArr : [settingArr];
settingArr.forEach(function(setting, index) {
result[messageKey + index] = setting;
if (typeof setting !== 'undefined') {
result[messageKey + index] = setting;
}
});
});
// validate the settings
Object.keys(result).forEach(function(key) {
if (Array.isArray(result[key])) {
throw new Error('Clay does not support 2 dimensional arrays for item ' +
'values. Make sure you are not attempting to use array ' +
'syntax (eg: "myMessageKey[2]") in the messageKey for ' +
'components that return an array, such as a checkboxgroup');
}
});
return result;
};