/** 
 | 
 * @file          Event Dialog 
 | 
 * @author        Wong Jia Hui (jiahui.wong@3ds.com) 
 | 
 */ 
 | 
import { ButtonSOP } from '../../../libappsop/buttonsop'; 
 | 
import { DialogSOP } from '../../../libappsop/dialogsop'; 
 | 
import { PanelCalendarEventFields, PanelCalendarEvent } from './panel.calendarevent'; 
 | 
import { PanelRecurrenceWeekly } from './panel.recurrenceweekly'; 
 | 
  
 | 
export class DialogCalendarEvent extends DialogSOP<PanelCalendarEventFields> { 
 | 
  public static readonly title = 'Calendar event'; 
 | 
  public pnlCalendarEvent = new PanelCalendarEvent(); 
 | 
  public pnlRecurrenceWeekly = new PanelRecurrenceWeekly(); 
 | 
  public readonly btnCustomizeRepetition = new ButtonSOP('btnCustomize'); 
 | 
  
 | 
  public constructor() { 
 | 
    super('LibCal_dlgEvent', 'btnOK'); 
 | 
  
 | 
    // Set UI element mapping to pair the UI name to the UI element for use in DialogSOP to find the UI object to set value or verify value 
 | 
    // This prevents each new Dialog to duplicate code just to set/verify UI element value 
 | 
    this._uiMap.set('Name', this.pnlCalendarEvent.efName); 
 | 
    this._uiMap.set('Description', this.pnlCalendarEvent.efDescription); 
 | 
    this._uiMap.set('ApplyToNewResources', this.pnlCalendarEvent.cbApplyToNewResources); 
 | 
    this._uiMap.set('IsAllDay', this.pnlCalendarEvent.cbIsAllDay); 
 | 
    this._uiMap.set('Type', this.pnlCalendarEvent.ddslType); 
 | 
    this._uiMap.set('Category', this.pnlCalendarEvent.ddlCategory); 
 | 
    this._uiMap.set('StartDate', this.pnlCalendarEvent.dsStartDate); 
 | 
    this._uiMap.set('EndDate', this.pnlCalendarEvent.dsEndDate); 
 | 
    this._uiMap.set('StartTime', this.pnlCalendarEvent.durationSelectorStart); 
 | 
    this._uiMap.set('EndTime', this.pnlCalendarEvent.durationSelectorEnd); 
 | 
  
 | 
    // Repetition weekly 
 | 
    this._uiMap.set('RecurWeeklyRepeatEvery', this.pnlRecurrenceWeekly.efRepeatFrequency); 
 | 
    this._uiMap.set('RecurWeeklyNoEndDate', this.pnlRecurrenceWeekly.cbNoEndDate); 
 | 
    this._uiMap.set('RecurWeeklyEndAfter', this.pnlRecurrenceWeekly.cbEndAfter); 
 | 
    this._uiMap.set('RecurWeeklyEndBy', this.pnlRecurrenceWeekly.cbEndBy); 
 | 
    this._uiMap.set('RecurWeeklyOccurrencesToEnd', this.pnlRecurrenceWeekly.efNrOfOccurrencesToEnd); 
 | 
    this._uiMap.set('RecurWeeklyEndByDate', this.pnlRecurrenceWeekly.dtsRecurrenceEndDate); 
 | 
  } 
 | 
  
 | 
  /** 
 | 
   * Click on Customize repetition button to expand/collapse. A panel is shown to customize repetition in more details. 
 | 
   */ 
 | 
  public async clickCustomizeRepetition(): Promise<void> { 
 | 
    await this.btnCustomizeRepetition.click(); 
 | 
  } 
 | 
  
 | 
  /** 
 | 
   * Click on the correct Repeat button for this event. As each Repeat type is a button thus we cannot utilize the usual method on dialogSOP.updateDialogvalues. 
 | 
   * 
 | 
   * @param repeat The repeat type for this event. 
 | 
   */ 
 | 
  public async setEventRepeat(repeat: CalendarEventRepeat): Promise<void> { 
 | 
    await this.pnlCalendarEvent.getRepeatButton(repeat).click(); 
 | 
  } 
 | 
} 
 | 
  
 | 
export enum CalendarEventRepeat { 
 | 
  Once = 'Once', 
 | 
  Daily = 'Daily', 
 | 
  Weekly = 'Weekly', 
 | 
  Monthly = 'Monthly', 
 | 
  Yearly = 'Yearly', 
 | 
} 
 | 
  
 | 
const stepDialogCalendarEvent = { 
 | 
  clickCustomizeRepetition: (): string => `In dialog ${DialogCalendarEvent.title}, click on Customize repetition button to expand the detail panel.`, 
 | 
  setEventRepeat: (repeat: CalendarEventRepeat): string => `In dialog ${DialogCalendarEvent.title}, click button Repeat = ${repeat}.`, 
 | 
}; 
 | 
  
 | 
export { stepDialogCalendarEvent as StepDialogCalendarEvent }; 
 |