renhao
2023-09-21 1aa9f2bb83dd9e4b7517f1cbf06b0db53979bb31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/**
 * @file          Panel for weekly recurrence
 * @author        Pethaperumal Natarajan (Pethaperumal.NATARAJAN.intern@3ds.com)
 */
 
import { ButtonSOP } from '../../../libappsop/buttonsop';
import { CheckboxSOP } from '../../../libappsop/checkboxsop';
import { DateTimeSelectorSOP } from '../../../libappsop/datetimeselectorsop';
import { EditFieldSOP } from '../../../libappsop/editfieldsop';
import { PanelSOP } from '../../../libappsop/panelsop';
import { UtilSOP } from '../../../libappsop/utilsop';
 
export class PanelRecurrenceWeekly extends PanelSOP {
  // Buttons
  public readonly btnMonday = new ButtonSOP('btnMonday');
  public readonly btnTuesday = new ButtonSOP('btnTuesday');
  public readonly btnWednesday = new ButtonSOP('btnWednesday');
  public readonly btnThursday = new ButtonSOP('btnThursday');
  public readonly btnFriday = new ButtonSOP('btnFriday');
  public readonly btnSaturday = new ButtonSOP('btnSaturday');
  public readonly btnSunday = new ButtonSOP('btnSunday');
 
  // Edit Fields
  public readonly efRepeatFrequency = new EditFieldSOP('edtEveryNrOfWeeks');
  public readonly efNrOfOccurrencesToEnd = new EditFieldSOP('edtNrOfOccurrences');
 
  // Checkboxes
  public readonly cbNoEndDate = new CheckboxSOP('ckbNoEndDate');
  public readonly cbEndAfter = new CheckboxSOP('ckbEndAfter');
  public readonly cbEndBy = new CheckboxSOP('ckbEndBy');
 
  // Date Time Selector
  public readonly dtsRecurrenceEndDate = new DateTimeSelectorSOP('dsEndOfPeriod');
 
  public constructor() {
    super('pnlRecurrenceDetails');
  }
 
  /**
   * Click day buttons to indicate repeat on days. Pass empty array to toggle off all day buttons.
   *
   * @param toggleOnDays One or more day number to toggle on.
   */
  public async setRepeatWeeklyOnDays(toggleOnDays: number[]): Promise<void> {
    await this.toggleRepeatOnDayButton(this.btnMonday, toggleOnDays.includes(1)); // Checks if day index part of passed in "days", the method will correctly click button to toggle on/off
    await this.toggleRepeatOnDayButton(this.btnTuesday, toggleOnDays.includes(2));
    await this.toggleRepeatOnDayButton(this.btnWednesday, toggleOnDays.includes(3));
    await this.toggleRepeatOnDayButton(this.btnThursday, toggleOnDays.includes(4));
    await this.toggleRepeatOnDayButton(this.btnFriday, toggleOnDays.includes(5));
    await this.toggleRepeatOnDayButton(this.btnSaturday, toggleOnDays.includes(6));
    await this.toggleRepeatOnDayButton(this.btnSunday, toggleOnDays.includes(0));
  }
 
  private async toggleRepeatOnDayButton(btnDay: ButtonSOP, toggleOn: boolean): Promise<void> {
    if ((await btnDay.isToggled()) !== toggleOn) {
      await btnDay.click();
    }
  }
}
 
const stepPanelRecurrenceWeekly = {
  setRepeatWeeklyOnDays: (toggleOnDays: number[]): string => {
    const action = toggleOnDays.length === 0 ? 'ensure no Repeat on days button pressed' : `ensure only Repeat on days button pressed for ${UtilSOP.getDaysString(toggleOnDays)}`;
    return `In panel Repetition details, ${action}.`;
  },
};
 
export { stepPanelRecurrenceWeekly as StepPanelRecurrenceWeekly };