define([
"jquery",
"underscore",
"backbone",
"views/selectUI/SearchableSelectView",
"models/NodeModel"
],
function($, _, Backbone, SearchableSelect, NodeModel) {
/**
* @class NodeSelect
* @classdesc A select interface that allows the user to search for and
* select a member node
* @extends SearchableSelect
* @constructor
*/
var NodeSelect = SearchableSelect.extend(
/** @lends NodeSelectView.prototype */
{
/**
* The type of View this is
* @type {string}
*/
type: "NodeSelect",
/**
* className - Returns the class names for this view element
*
* @return {string} class names
*/
className: SearchableSelect.prototype.className + " node-select",
/**
* Text to show in the input field before any value has been entered
* @type {string}
*/
placeholderText: "Select a DataONE repository",
/**
* Label for the input element
* @type {string}
*/
inputLabel: "Select a DataONE repository",
/**
* Whether to allow users to select more than one value
* @type {boolean}
*/
allowMulti: true,
/**
* Setting to true gives users the ability to add their own options that
* are not listed in this.options. This can work with either single
* or multiple search select dropdowns
* @type {boolean}
*/
allowAdditions: false,
/**
* Creates a new NodeSelectView
* @param {Object} options - A literal object with options to pass to the view
*/
initialize: function(options){
try {
// Ensure the query fields are cached
if ( typeof MetacatUI.nodeModel === "undefined" ) {
MetacatUI.nodeModel = new NodeModel();
}
var members = MetacatUI.nodeModel.get("members");
// Maps the nodeModel member attributes (keys) to the searchSelect
// dropdown options properties (values)
var map = Object.entries({
logo: "image",
name: "label",
description: "description",
identifier: "value"
});
this.options = [];
// Convert nodeModel members to options of searchSelect
members.forEach((member, i) => {
this.options[i] = {};
for (const [oldName, newName] of map) {
this.options[i][newName] = member[oldName]
}
});
SearchableSelect.prototype.initialize.call(this, options);
} catch (e) {
console.log("Failed to initialize a Node Select View, error message: " + e);
}
}
});
return NodeSelect;
});