menu.ts 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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 async 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. await this.reload();
  15. this.initialized = true;
  16. }
  17. public addFilterEventListener(handler: ()=>void) {
  18. this.filterUpdatedHandlers.push(handler);
  19. }
  20. private checkFilters(selectElement: HTMLSelectElement) {
  21. this.filteredHostname = Array.from(selectElement.children).filter(x => (x as HTMLOptionElement).selected).map(x => (x as HTMLOptionElement).value);
  22. for (var i of this.filterUpdatedHandlers)
  23. i();
  24. }
  25. private async reload(): Promise<void> {
  26. let hostFilter: HTMLElement = document.getElementById("navbar-hostfilter")!;
  27. hostFilter.textContent = "";
  28. for (let host of await DAL.SystemInfo.listHosts()) {
  29. let htmlChild: HTMLOptionElement = document.createElement("option");
  30. htmlChild.value = host;
  31. htmlChild.textContent = host;
  32. hostFilter.appendChild(htmlChild);
  33. }
  34. $("#navbar-hostfilter").selectpicker("refresh");
  35. $("#navbar-hostfilter").selectpicker("selectAll");
  36. }
  37. public async show(): Promise<void> {
  38. this.navBar.classList.remove("hidden");
  39. return this.init();
  40. }
  41. public hide() {
  42. this.navBar.classList.add("hidden");
  43. }
  44. public getFilteredHostnames(): string[] {
  45. return this.filteredHostname;
  46. }
  47. }
  48. export default new Menu();