58 lines
1.3 KiB
JavaScript
58 lines
1.3 KiB
JavaScript
|
|
import _ from '../lodash.custom';
|
|
|
|
|
|
const _get_localized = function(ret, locales) {
|
|
if (typeof(ret) == 'object' && typeof(ret.names) == 'object') {
|
|
for (let locale of locales) {
|
|
if (ret.names[locale]) {
|
|
return ret.names[locale];
|
|
}
|
|
}
|
|
return '';
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
|
|
|
|
class Record {
|
|
data = {};
|
|
default_locales = [];
|
|
|
|
constructor(data, default_locales) {
|
|
this.data = data || {};
|
|
this.default_locales = default_locales || ['en'];
|
|
}
|
|
|
|
get(prop, default_value) {
|
|
return this.get_with_locales(prop, this.default_locales, default_value);
|
|
}
|
|
|
|
|
|
get_with_locales(prop, locales, default_value) {
|
|
// Treat pseudo-property 'name' as if it never existed
|
|
if (prop.substr(-5) === '.name') {
|
|
prop = prop.substr(0, prop.length - 5);
|
|
}
|
|
|
|
// TODO handle most_specific_subdivision (here or in PHP)?
|
|
|
|
let ret = _.get(this.data, prop, default_value);
|
|
|
|
// Localize property, if possible
|
|
ret = _get_localized(ret, locales);
|
|
|
|
return ret;
|
|
}
|
|
|
|
/**
|
|
* Get error message, if any
|
|
* @return string Error Message
|
|
*/
|
|
error() {
|
|
return _.get(this.data, 'extra.error', '');
|
|
}
|
|
}
|
|
|
|
export default Record; |