/** 
 | 
 * @file          Transition Types Form 
 | 
 * @author        Jayden Chew (jayden.chew@3ds.com) 
 | 
 */ 
 | 
import { QContextMenu } from '../../e2elib/lib/api/pageobjects/qcontextmenu.component'; 
 | 
import { Form } from '../../e2elib/lib/src/pageobjects/form.component'; 
 | 
import { ListRow } from '../../e2elib/lib/src/pageobjects/list/listrow.component'; 
 | 
import { ListBase } from '../../libappbase/listbase'; 
 | 
import { ActionTriggerType } from '../../libappbase/utils'; 
 | 
import { AppMP } from '../appmp'; 
 | 
import { DialogCreateEditTransitionType } from '../dialogs/dialog.transitiontype'; 
 | 
  
 | 
export class FormTransitionTypes extends Form { 
 | 
  public listTransitionType = new ListTransitionType(); 
 | 
  
 | 
  public constructor() { 
 | 
    super('FormTransitionTypes'); 
 | 
  } 
 | 
} 
 | 
  
 | 
export class ListTransitionType extends ListBase { 
 | 
  private readonly _cmMenu = new QContextMenu('listContextMenuTransitionType'); 
 | 
  private readonly _dlgTransitionType = new DialogCreateEditTransitionType(); 
 | 
  
 | 
  public constructor() { 
 | 
    super('ListTransitionType'); 
 | 
  } 
 | 
  /** 
 | 
   * To open Transition Type dialog via context menu or action bar page to "Create" or "Edit" (if pass-in tsdRow) 
 | 
   * 
 | 
   * @param via Open the dialog via button or context menu. 
 | 
   * @param transitionTypeRow [Optional] Target Transition Type row to be edited. 
 | 
   * @returns Transition Type dialog 
 | 
   */ 
 | 
  public async openTransitionTypeDialog(via: ActionTriggerType, transitionTypeRow?: ListRow): Promise<DialogCreateEditTransitionType> { 
 | 
    switch (via) { 
 | 
      case ActionTriggerType.Button: 
 | 
        await this.focus(); 
 | 
        if (transitionTypeRow) { 
 | 
          await transitionTypeRow.leftClick(); 
 | 
          await AppMP.getInstance().abpData.btnEdit.click(); 
 | 
        } else { 
 | 
          await AppMP.getInstance().abpData.btnCreate.click(); 
 | 
        } 
 | 
        break; 
 | 
      case ActionTriggerType.ContextMenu: 
 | 
        if (transitionTypeRow) { 
 | 
          await transitionTypeRow.rightClick(undefined, this._cmMenu, ListTransitionTypeContextMenuItem.Edit); 
 | 
        } else { 
 | 
          await this.rightClick(undefined, this._cmMenu, ListTransitionTypeContextMenuItem.Create); 
 | 
        } 
 | 
        break; 
 | 
      default: 
 | 
        break; 
 | 
    } 
 | 
    await this._dlgTransitionType.waitForScreenUpdate(); 
 | 
    return this._dlgTransitionType; 
 | 
  } 
 | 
  
 | 
  /** 
 | 
   * Delete pass-in Transition Type row via "Delete" context menu 
 | 
   * 
 | 
   * @param via Open the dialog via button or context menu. 
 | 
   * @param transitionTypeRows Target unit Transition Type row(s) to be delete 
 | 
   */ 
 | 
  public async deleteTransitionType(via: ActionTriggerType, campaignTypeRows: ListRow[]): Promise<void> { 
 | 
    let modifiers: { control: true } | undefined; 
 | 
    await this.focus(); 
 | 
    for (const [index, row] of campaignTypeRows.entries()) { 
 | 
      modifiers = index !== 0 ? { control: true } : undefined; 
 | 
      await row.leftClick(modifiers); 
 | 
    } 
 | 
  
 | 
    switch (via) { 
 | 
      case ActionTriggerType.Button: 
 | 
        await AppMP.getInstance().abpData.btnDelete.click(); 
 | 
        break; 
 | 
  
 | 
      case ActionTriggerType.ContextMenu: 
 | 
        const lastrowindex = campaignTypeRows.length - 1; 
 | 
        await campaignTypeRows[lastrowindex].rightClick(undefined, this._cmMenu, ListTransitionTypeContextMenuItem.Delete); 
 | 
        break; 
 | 
      default: 
 | 
        break; 
 | 
    } 
 | 
  } 
 | 
} 
 | 
  
 | 
export enum ListTransitionTypeColumn { 
 | 
  Unit = 'Unit', 
 | 
  Name = 'Name', 
 | 
  FromCampaign = 'From campaign', 
 | 
  ToCampaign = 'To campaign', 
 | 
} 
 | 
  
 | 
export enum ListTransitionTypeContextMenuItem { 
 | 
  Create = 'MenuCreate', 
 | 
  Edit = 'MenuEdit', 
 | 
  Delete = 'MenuDelete', 
 | 
} 
 |