all files / packages/navigation/processors/nav-area-mapper/ api.js

25% Statements 7/28
0% Branches 0/8
14.29% Functions 1/7
25% Lines 7/28
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83                                                                                                                                                       
'use strict';
 
var _ = require('lodash');
 
module.exports = function navigationMapper_API(aliasMap, log) {
 
  var debug = log.debug;
 
  function apiMapper (pages) {
    var res = [];
 
    _(pages)
      .filter('module')  // take only the modules on the top level
      .sortBy('module')  // alphabetic sort
      .groupBy('module') // group by name
      .forEach(function (components, moduleName) {
        debug('Processing module: %s', moduleName);
        var mod = _.find(components, {name: moduleName, module: moduleName});
 
        // module is defined and not only the module
        if (mod) {
          var navGroup = {
            name: moduleName,
            type: 'groups',
            href: mod.path,
            navItems: []
          };
          res.push(navGroup);
 
          _(components)
          .filter(function (it) {
            return it.docType !== 'module' && it.docType !== 'overview';
          })
          .sortBy('docType')
          .groupBy('docType')
          .forEach(function (categories, typeName) {
            var navItems = [];
            var type = _.find(pages, {moduleName: moduleName, groupType: typeName, docType: 'componentGroup'});
 
            navGroup.navItems.push({
              name: typeName,
              type: 'section',
              href: type.path,
              navItems: navItems
            });
 
            _(categories)
              .sortBy('name')
              .forEach(function (it) {
                if (it.docType !== 'module') {
                  navItems.push({
                    name: it.name,
                    type: it.docType,
                    href: it.path
                  });
              }
            });
          });
        } else {
          if (!mod) {
            log.error('No %s module found, related components:', moduleName);
            components.forEach(function(c) {
              log.error(' - ' + c.name + ' - ' + c.path);
            });
          } else {
            log.warn('Module %s has no components', moduleName);
          }
        }
      });
    return res;
  };
 
  Object.defineProperty(apiMapper, 'area', {
    value: 'api'
  });
 
  Object.defineProperty(apiMapper, 'title', {
    value: 'API'
  });
 
  return apiMapper;
};