import { CellPageObject } from '.'; import BasePage from '../../../Base'; import { expect, Locator } from '@playwright/test'; export class TimeCellPageObject extends BasePage { readonly cell: CellPageObject; constructor(cell: CellPageObject) { super(cell.rootPage); this.cell = cell; } get({ index, columnHeader }: { index?: number; columnHeader: string }) { return this.cell.get({ index, columnHeader }); } async verify({ index, columnHeader, value }: { index: number; columnHeader: string; value: string }) { const cell = this.get({ index, columnHeader }); await cell.scrollIntoViewIfNeeded(); await cell.locator(`.nc-time-picker[title="${value}"]`).waitFor({ state: 'visible' }); await expect(cell.locator(`[title="${value}"]`)).toBeVisible(); } async selectTime({ // hour: 0 - 23 // minute: 0 - 59 // second: 0 - 59 hour, minute, fillValue, locator, selectFromPicker = false, }: { hour: number; minute: number; fillValue: string; locator: Locator; selectFromPicker?: boolean; }) { const timeInput = locator.locator('.nc-time-input'); await timeInput.click(); const dropdown = this.rootPage.locator('.nc-picker-time.active'); await dropdown.waitFor({ state: 'visible' }); if (!selectFromPicker) { await timeInput.fill(fillValue); await this.rootPage.keyboard.press('Shift+Enter'); await this.rootPage.keyboard.press('Escape'); } else { await dropdown .locator(`[data-testid="time-option-${String(hour).padStart(2, '0')}:${String(minute).padStart(2, '0')}"]`) .scrollIntoViewIfNeeded(); await dropdown .locator(`[data-testid="time-option-${String(hour).padStart(2, '0')}:${String(minute).padStart(2, '0')}"]`) .click(); } await dropdown.waitFor({ state: 'hidden' }); } async save() { await this.rootPage.locator('button:has-text("Ok"):visible').click(); } async set({ index, columnHeader, value }: { index: number; columnHeader: string; value: string }) { const [hour, minute, _second] = value.split(':'); await this.get({ index, columnHeader }).click(); await this.get({ index, columnHeader }).dblclick(); await this.selectTime({ hour: +hour, minute: +minute, fillValue: value, locator: this.get({ index, columnHeader }), selectFromPicker: +minute === 0 || +minute === 30, }); } }