Home Manual Reference Source

src/page_objects/web/general/nav.panel.js

import BasePage from "../../base.page.js";

/** 
 * NavPanel 
 * @extends BasePage
 */
class NavPanel extends BasePage {
  /**
   * @param {args} args Args from controller
   */
  constructor(args) {
    super(args);
  }

  // PAGE ELEMENTS
  /* eslint-disable require-jsdoc */
  navPanel() {
    return this.element("nav#nav");
  }

  home() {
    return this.element("nav#nav a[href='/']");
  }

  chat() {
    return this.element("nav#nav a[href='/chat']");
  }

  contacts() {
    return this.element("nav#nav a[href='/contacts']");
  }

  roomSystems() {
    return this.element("nav#nav a[href='/room-systems']");
  }

  meetings() {
    return this.element("nav#nav a[href='/meetings']");
  }

  sideNavHandle() {
    return this.element("#sideNavHandle");
  }

  sideNavContainer() {
    return this.element('[class^="components-SideNav-SideNav__container"]');
  }
  /* eslint-enable require-jsdoc */

  // PAGE FUNCTIONS

  /**
   * Determines if side nav is expanded
   * @returns {Boolean} True if side nave is expanded
   */
  async isSideNavExpanded() {
    const sideNavClass = await this.sideNavContainer().getAttribute("class");
    return sideNavClass.includes("wide");
  }

  /**
   * Expand the side nave
   */
  async expandSideNav() {
    if (!await this.isSideNavExpanded()) {
      try {
        await this.doubleClickSideNav();
        await this.browser.waitUntil(
          async () => await this.isSideNavExpanded(),
          10000
        );
      } catch (e) {
        throw new Error("Error expanding side nav:", e);
      }
    } else {
      throw new Error("Side nav is already expanded.");
    }
  }

  /**
   * Double click the side nave to expand or collapse it
   * @todo use POMLS double click
   */
  async doubleClickSideNav() {
    await this.sideNavHandle().waitForVisible();
    await this.browser.doubleClick(this.sideNavHandle().selector);
    await this.browser.pause(3000);
  }

  /**
   * Collapse the side nav
   */
  async collapseSideNav() {
    if (await this.isSideNavExpanded()) {
      try {
        await this.doubleClickSideNav();
        await this.browser.waitUntil(async () => {
          const expanded = (await this.isSideNavExpanded()) ? false : true;
          return expanded;
        }, 10000);
      } catch (e) {
        throw new Error("Error collapsing side nav:", e);
      }
    } else {
      throw new Error("Side nav is already collapsed.");
    }
  }
}

export default NavPanel;