import { Form } from '../../e2elib/lib/src/pageobjects/form.component'; 
 | 
import { PanelBase } from '../../libappbase/panelbase'; 
 | 
import { ListSOP } from '../../libappsop/listsop'; 
 | 
import { DialogDummy } from '../dialogs/dialog.dummy'; 
 | 
import { GaugeSOP } from '../../libappsop/gaugesop'; 
 | 
import { browser } from '../../e2elib/node_modules/protractor'; 
 | 
  
 | 
export class FormKPI extends Form { 
 | 
  public static readonly title = 'KPI Dashboard'; 
 | 
  
 | 
  public panelKPIDashboard = new PanelKPIDashboard(); 
 | 
  public panelKPISelection = new PanelKPISelection(); 
 | 
  
 | 
  public constructor() { 
 | 
    super('FormKPI'); 
 | 
  } 
 | 
  
 | 
  public async openKPIDashboardPanel(): Promise<void> { 
 | 
    await this.panelKPIDashboard.switchTo(); 
 | 
  } 
 | 
  
 | 
  public async openKPISelectionPanel(): Promise<void> { 
 | 
    await this.panelKPISelection.switchTo(); 
 | 
  } 
 | 
} 
 | 
  
 | 
export class PanelKPIDashboard extends PanelBase { 
 | 
  public static readonly title = 'KPI Dashboard'; 
 | 
  public gaugeKPIDashboard = new GaugeKPIDashboard(); 
 | 
  
 | 
  public constructor() { 
 | 
    super('PanelKPIDashboard'); 
 | 
  } 
 | 
  
 | 
  /** 
 | 
   * @override 
 | 
   */ 
 | 
  public async switchTo(): Promise<void> { 
 | 
    await super.switchTo(); 
 | 
    await this.gaugeKPIDashboard.waitUntilPresent(); 
 | 
  } 
 | 
} 
 | 
  
 | 
export class PanelKPISelection extends PanelBase { 
 | 
  public static readonly title = 'KPI Selection'; 
 | 
  public lstKPISelection = new ListKPISelection(); 
 | 
  
 | 
  public constructor() { 
 | 
    super('PanelKPISelection'); 
 | 
  } 
 | 
  
 | 
  /** 
 | 
   * @override 
 | 
   */ 
 | 
  public async switchTo(): Promise<void> { 
 | 
    await super.switchTo(); 
 | 
    await this.lstKPISelection.waitUntilPresent(); 
 | 
  } 
 | 
} 
 | 
  
 | 
export class ListKPISelection extends ListSOP<DialogDummy, ListKPISelectionColumn> { 
 | 
  public static readonly title = 'KPI Selection'; 
 | 
  public constructor() { 
 | 
    super('ListKPISelection', new DialogDummy()); 
 | 
  } 
 | 
  
 | 
  /** 
 | 
   * Deselect all KPI selection in the list 
 | 
   */ 
 | 
  public async deselectAllKPI(): Promise<void> { 
 | 
    await this.selectAllAndSelectContextMenu(listKPISelectionContextMenuItem.Deselect); 
 | 
  
 | 
    // Select first row just to cancel out all rows selection (else subsequent test will not work) 
 | 
    const firstRow = await this.getRowByIndex(0); 
 | 
    await firstRow.leftClick(); 
 | 
  } 
 | 
  
 | 
  /** 
 | 
   * Selects the gauges that are inputted. Optionally define wait time upon selection to allow changes to be persisted to the back-end view. 
 | 
   * 
 | 
   * @param gaugeNames Gauges names that needs to be toggled 
 | 
   * @param waitPersistInViewInMilliseconds (Optional) If test require to wait after selecting KPI, example to allow changs to be persisted to view 
 | 
   */ 
 | 
  public async selectKPI(gaugeNames: string[], waitPersistInViewInMilliseconds?: number): Promise<void> { 
 | 
    for (const gaugeName of gaugeNames) { 
 | 
      const row = await this.getRow({ Name: gaugeName }); 
 | 
      await this.toggleRowCheckbox(row, true); 
 | 
    } 
 | 
  
 | 
    if (waitPersistInViewInMilliseconds) { 
 | 
      await browser.sleep(waitPersistInViewInMilliseconds); 
 | 
    } 
 | 
  } 
 | 
} 
 | 
  
 | 
export class GaugeKPIDashboard extends GaugeSOP { 
 | 
  public static readonly title = 'KPI Dashboard'; 
 | 
  
 | 
  public constructor() { 
 | 
    super('GaugeKPIDashboard'); 
 | 
  } 
 | 
} 
 | 
  
 | 
// Interface for KPI-Value map 
 | 
export interface GaugeIDValueMap { 
 | 
  gaugeName: string; 
 | 
  value: string; 
 | 
} 
 | 
  
 | 
// List KPI selection columns 
 | 
export interface ListKPISelectionColumn { 
 | 
  Name: string; 
 | 
} 
 | 
  
 | 
// List KPI selection context menu items 
 | 
const listKPISelectionContextMenuItem = { 
 | 
  Deselect: { ContextMenu: 'listContextMenuKPI', Name: 'MenuDeselect', Label: 'Deselect' }, 
 | 
  Select: { ContextMenu: 'listContextMenuKPI', Name: 'MenuSelect', Label: 'Select' }, 
 | 
}; 
 | 
  
 | 
export { listKPISelectionContextMenuItem as ListKPISelectionContextMenuItem }; 
 | 
  
 | 
const stepFormKPI = { 
 | 
  deselectAllKPI: (): string => `In the List "${ListKPISelection.title}", deselect all rows.`, 
 | 
  selectKPI: (gaugeNames: string[]): string => `In the List "${ListKPISelection.title}", select row "${gaugeNames}".`, 
 | 
}; 
 | 
  
 | 
export { stepFormKPI as StepFormKPI }; 
 |