// playwright-dev-page.ts import { Locator } from "@playwright/test"; import BasePage from "../../Base"; import { DashboardPage } from ".."; export class ExpandedFormPage extends BasePage { readonly dashboard: DashboardPage; readonly addNewTableButton: Locator; constructor(dashboard: DashboardPage) { super(dashboard.rootPage); this.dashboard = dashboard; this.addNewTableButton = this.dashboard.get().locator(".nc-add-new-table"); } get() { return this.dashboard.get().locator(`.nc-drawer-expanded-form`); } async fillField({ columnTitle, value, type = "text", }: { columnTitle: string; value: string; type?: string; }) { const field = this.get().locator( `[pw-data="nc-expand-col-${columnTitle}"]` ); await field.hover(); switch (type) { case "text": await field.locator("input").fill(value); break; case "belongsTo": await field.locator(".nc-action-icon").click(); await this.dashboard.linkRecord.select(value); break; case "hasMany": case "manyToMany": await field.locator(`[data-cy="nc-child-list-button-link-to"]`).click(); await this.dashboard.linkRecord.select(value); break; } } async save() { await this.get().locator('button:has-text("Save Row")').click(); await this.get().press("Escape"); await this.get().waitFor({ state: "hidden" }); await this.toastWait({ message: `updated successfully.` }); await this.rootPage .locator('[pw-data="grid-load-spinner"]') .waitFor({ state: "hidden" }); } }