menu.ts 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import $ from "jquery";
  2. import { DAL } from "../DAL/systemInfo";
  3. class Menu {
  4. private navBar: HTMLElement = document.getElementById("navbar")!;
  5. private initialized: boolean = false;
  6. private filteredHostname: string[] =[];
  7. private filterUpdatedHandlers: (()=>void)[] = [];
  8. public init(): Promise<void> {
  9. if (this.initialized)
  10. return Promise.resolve();
  11. (document.getElementById("navbar-hostfilter")!).addEventListener("change", evt => {
  12. this.checkFilters(evt.target as HTMLSelectElement);
  13. });
  14. return this.reload();
  15. }
  16. public addFilterEventListener(handler: ()=>void) {
  17. this.filterUpdatedHandlers.push(handler);
  18. }
  19. private checkFilters(selectElement: HTMLSelectElement) {
  20. this.filteredHostname = Array.from(selectElement.children).filter(x => (x as HTMLOptionElement).selected).map(x => (x as HTMLOptionElement).value);
  21. for (var i of this.filterUpdatedHandlers)
  22. i();
  23. }
  24. private async reload(): Promise<void> {
  25. let hostFilter: HTMLElement = document.getElementById("navbar-hostfilter")!;
  26. hostFilter.textContent = "";
  27. for (let host of await DAL.SystemInfo.listHosts()) {
  28. let htmlChild: HTMLOptionElement = document.createElement("option");
  29. htmlChild.value = host;
  30. htmlChild.textContent = host;
  31. hostFilter.appendChild(htmlChild);
  32. }
  33. $("#navbar-hostfilter").selectpicker("refresh");
  34. $("#navbar-hostfilter").selectpicker("selectAll");
  35. }
  36. public async show(): Promise<void> {
  37. this.navBar.classList.remove("hidden");
  38. return this.init();
  39. }
  40. public hide() {
  41. this.navBar.classList.add("hidden");
  42. }
  43. public getFilteredHostnames(): string[] {
  44. return this.filteredHostname;
  45. }
  46. }
  47. export default new Menu();