Added support for JSON

This commit is contained in:
Andris Reinman 2016-08-29 15:51:20 +03:00
parent 35078defb6
commit 69ff628cda
7 changed files with 55 additions and 5 deletions

View file

@ -24,6 +24,7 @@ module.exports.types = {
'date-eur': 'Date (DD/MM/YYYY)',
'birthday-us': 'Birthday (MM/DD)',
'birthday-eur': 'Birthday (DD/MM)',
json: 'JSON value for custom rendering',
option: 'Option'
};
@ -34,6 +35,7 @@ module.exports.genericTypes = {
website: 'string',
longtext: 'textarea',
gpg: 'textarea',
json: 'textarea',
number: 'number',
'date-us': 'date',
'date-eur': 'date',
@ -106,7 +108,7 @@ module.exports.get = (id, callback) => {
return callback(err);
}
let field = rows && rows[0] && tools.convertKeys(rows[0]) || false;
field.isGroup = module.exports.grouped.includes(field.type);
field.isGroup = module.exports.grouped.includes(field.type) || field.type === 'json';
return callback(null, field);
});
});
@ -329,6 +331,7 @@ function addCustomField(listId, name, defaultValue, type, group, groupTemplate,
break;
case 'gpg':
case 'longtext':
case 'json':
query = 'ALTER TABLE `subscription__' + listId + '` ADD COLUMN `' + column + '` TEXT DEFAULT NULL';
break;
case 'number':
@ -412,6 +415,35 @@ module.exports.getRow = (fieldList, values, useDate, showAll, onlyExisting) => {
row.push(item);
break;
}
case 'json':
{
let value;
let json = (valueList[field.column] || '').toString().trim();
try {
let parsed = JSON.parse(json);
if (Array.isArray(parsed)) {
parsed = {
values: parsed
};
}
value = json ? render(field.groupTemplate, parsed) : '';
} catch (E) {
value = E.message;
}
let item = {
type: field.type,
name: field.name,
column: field.column,
value: (valueList[field.column] || '').toString().trim(),
visible: !!field.visible,
mergeTag: field.key,
mergeValue: value || field.defaultValue,
['type' + (field.type || '').toString().trim().replace(/(?:^|\-)([a-z])/g, (m, c) => c.toUpperCase())]: true
};
row.push(item);
break;
}
case 'number':
{
let item = {