UNPKG

ethoinfo-framework

Version:

ethoinfo-framework [![Build Status](https://travis-ci.org/ethoinformatics/ethoinfo-framework.png)](https://travis-ci.org/ethoinformatics/ethoinfo-framework) =============

97 lines (74 loc) 2.25 kB
var _ = require('lodash'), q = require('q'); function DescriptionManager(registry, domainName){ var self = this; var app = require('app')(); var domain = app.getDomain(domainName), fields = domain.getService('form-fields'); function getCodes(field){ if (!field) return q.fcall(_.constant([])); var codeDomain = app.getDomain(field.domain); if (!codeDomain) return q.fcall(_.constant([])); var codeDescManager = codeDomain.getService('description-manager'), codeEntitymanager = codeDomain.getService('entity-manager'); return codeEntitymanager .getAll() .then(function(codes){ return codes.map(function(code){ return { value: code._id, description: codeDescManager.getShortDescription(code), }; }); }); } self.getShortDescription = function(entity){ var service = domain.getService('short-description'); if (_.isFunction(service)){ return service(entity); } else if (_.isString(service)){ return entity[service]; } else { return entity.name || entity.title || entity._id; } return ''; }; var service = domain.getService('long-description'); var codedFields = _.chain(fields) .pluck('fields') .map(function(o){ return _.pairs(o); }) .flatten() .map(function(pair){ return _.extend({}, {name: pair[0]}, pair[1]); }) .filter(function(field){ return field.type == 'lookup'; }) .value(); var loadCodePromises = codedFields .map(function(field){ return getCodes(field); }); self.getLongDescription = function(entity){ if (!service) return q(self.getShortDescription(entity)); return q.all(loadCodePromises) .then(function(results){ var codeLookups = _.zip(codedFields, results); var self = { getDescription: function(fieldName, value){ value = value || entity[fieldName]; var codeLookup = _.find(codeLookups, function(pair){ return pair[0].name == fieldName; }); if (!codeLookup) return 'invalid value'; var code = _.find(codeLookup[1], function(code){ return code.value == value; }); return code ? code.description : 'invalid value'; }, }; return service.call(self, entity); }); }; } module.exports = DescriptionManager;