text: // Copyright 2015 The Vanadium Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style
  // license that can be found in the LICENSE file.
  
  var log = require('../../lib/log')('components:browse:browse-children');
  var namespaceService = require('../../services/namespace/service');
  
  module.exports = getNamespaceSuggestions;
  
  /*
   * Default event handler for the getNamespaceSuggestions event.
   * Updates the necessary states when getNamespaceSuggestions is triggered.
   * Only does this if the browseState's namespacePrefix has changed.
   * Namespace is the target namespace whose children are to be retrieved.
   */
  function getNamespaceSuggestions(browseState, namespace) {
    // Get children of the chosen prefix.
    // When there is a trailing slash, treat the namespace as the prefix.
    var prefix;
    var len = namespace.length;
    var lastSlashIndex = namespace.lastIndexOf('/');
    if (len > 1 && lastSlashIndex === len - 1) {
      prefix = namespace.substring(0, lastSlashIndex);
    } else {
      prefix = namespaceService.util.stripBasename(namespace);
    }
  
    if (prefix === browseState.namespacePrefix()) {
      return; // The children are already based on the correct glob.
    }
  
    // Update the state prefix and clear out the children.
    browseState.namespacePrefix.set(prefix);
    emptyOutItems();
  
    // Do not search if selecting a namespace root.
    if (prefix === '' && namespace[0] === '/') {
      return;
    }
  
    // Glob the children using this prefix.
    namespaceService.getChildren(prefix).then(function received(items) {
      browseState.put('namespaceSuggestions', items);
    }).catch(function(err) {
      log.warn('Could not glob', prefix, err);
    });
  
    function emptyOutItems() {
      browseState.put('namespaceSuggestions', []);
    }
  }
  
  