blob: 5cb7186a70d8ee14c0a8bd387cf017fbe26287da [file] [log] [blame]
// 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', []);
}
}