Merge pull request #5205 from solgenomics/topic/generic_trial_upload
[sgn.git] / js / source / legacy / solGS / selectMenu.js
blobe58bb03fbc675982fb8e9469ad14e92b7499d0cc
1 /*
2 creates and populates select menu with lists and datasets for analysis tools.
3 */
5 class SelectMenu {
6   constructor(menuDivId, selectId, menuClass, label) {
7     menuDivId = menuDivId.replace(/#/, "");
8     selectId = selectId.replace(/#/, "");
9     if(menuClass) {
10       menuClass = menuClass.replace(/\./, "");
11     }
13     this.menuDivId = menuDivId;
14     this.selectId = selectId;
15     this.menuClass = menuClass || "form-control";
16     this.label = label || ''; // || "Select a population";
17     this.menu;
18   }
20   createSelectMenu() {
21     var menu = document.createElement("select");
22     menu.id = this.selectId;
23     menu.className = this.menuClass;
25     var option = document.createElement("option");
26     option.selected = this.label;
27     option.value = "";
28     option.innerHTML = this.label;
29     // option.disabled = true;
31     menu.appendChild(option);
33     this.menu = menu;
34     return menu;
35   }
37   getSelectMenuOptions() {
38     var selectMenu = document.getElementById(this.selectId);
39     var options;
41     if (selectMenu) {
42       options = selectMenu.options;
43     }
44     
45     return options;
46   }
48   createOptionElement(dt) {
49     var option = document.createElement("option");
51     option.value = dt.id;
52     option.dataset.pop = JSON.stringify(dt);
53     option.innerHTML = dt.name;
55     return option;
57   }
59   createOptions(data) {
60     var menu = this.menu;
61     if (!menu) {
62       menu = this.createSelectMenu();
63     }
65     data.forEach(function (dt) {
66       var option = this.createOptionElement(dt);
67       menu.appendChild(option);
68     }.bind(this));
70     return menu;
71   }
73   updateOptions(newPop) {
74     var options = this.getSelectMenuOptions();
75     if (options) {
76       if (newPop){
77         var newOption = this.createOptionElement(newPop);
78         options.add(newOption);
79       }
80     }
82   }
84   displayMenu(menuElems) {
85     document.querySelector(`#${this.menuDivId}`).appendChild(menuElems);
86   }
88   addOptionsSeparator (text) {
89     var option = document.createElement("option");
90     option.innerHTML = `-------- ${text.toUpperCase()} --------`;
91     option.disabled = true;
93     this.menu.appendChild(option);
94   }
97   populateMenu(pops) {
98     pops = pops.flat();
99     this.createSelectMenu();
100     var menuElems = this.createOptions(pops);
101     this.displayMenu(menuElems);
103   }