mirror of
https://github.com/pebble-dev/clay.git
synced 2026-09-05 16:47:37 -04:00
allow array syntax inside of the messageKey property of a config item
This commit is contained in:
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user