|
|
|
import { Locator } from "@playwright/test";
|
|
|
|
import { DashboardPage } from "../";
|
|
|
|
import BasePage from "../../Base";
|
|
|
|
|
|
|
|
export class ViewSidebarPage extends BasePage {
|
|
|
|
readonly project: any;
|
|
|
|
readonly dashboard: DashboardPage;
|
|
|
|
readonly createGalleryButton: Locator;
|
|
|
|
readonly createGridButton: Locator;
|
|
|
|
readonly createFormButton: Locator;
|
|
|
|
readonly createKanbanButton: Locator;
|
|
|
|
|
|
|
|
constructor(dashboard: DashboardPage) {
|
|
|
|
super(dashboard.rootPage);
|
|
|
|
this.dashboard = dashboard;
|
|
|
|
this.createGalleryButton = this.get().locator('.nc-create-gallery-view');
|
|
|
|
this.createGridButton = this.get().locator('.nc-create-grid-view');
|
|
|
|
this.createFormButton = this.get().locator('.nc-create-form-view');
|
|
|
|
this.createKanbanButton = this.get().locator('.nc-create-kanban-view');
|
|
|
|
}
|
|
|
|
|
|
|
|
get() {
|
|
|
|
return this.dashboard.get().locator('.nc-view-sidebar');
|
|
|
|
}
|
|
|
|
|
|
|
|
private async createView({ title, locator }: { title: string, locator: Locator }) {
|
|
|
|
await locator.click();
|
|
|
|
await this.rootPage.locator('input[id="form_item_title"]').fill(title);
|
|
|
|
await this.rootPage.locator('.ant-modal-content').locator('button:has-text("Submit")').click();
|
|
|
|
await this.toastWait({ message: 'View created successfully'});
|
|
|
|
}
|
|
|
|
|
|
|
|
async createGalleryView({ title }: { title: string }) {
|
|
|
|
await this.createView({ title, locator: this.createGalleryButton });
|
|
|
|
}
|
|
|
|
|
|
|
|
async createGridView({ title }: { title: string }) {
|
|
|
|
await this.createView({ title, locator: this.createGridButton });
|
|
|
|
}
|
|
|
|
|
|
|
|
async createFormView({ title }: { title: string }) {
|
|
|
|
await this.createView({ title, locator: this.createFormButton });
|
|
|
|
}
|
|
|
|
|
|
|
|
async createKanbanView({ title }: { title: string }) {
|
|
|
|
await this.createView({ title, locator: this.createKanbanButton });
|
|
|
|
}
|
|
|
|
|
|
|
|
async verifyView({ title, index }: { title: string, index: number }) {
|
|
|
|
return await this.assertInnerTextWithRetry({
|
|
|
|
locator: this.get().locator(`.nc-views-menu`).locator('.ant-menu-title-content').nth(index),
|
|
|
|
text: title,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
async verifyViewNotPresent({ title, index }: { title: string, index: number }) {
|
|
|
|
const viewList = this.get().locator(`.nc-views-menu`).locator('.ant-menu-title-content');
|
|
|
|
if(await viewList.count() <= index) {
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
|
|
|
return await this.assertNotInnerTextWithRetry({
|
|
|
|
locator: this.get().locator(`.nc-views-menu`).locator('.ant-menu-title-content').nth(index),
|
|
|
|
text: title,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
async reorderViews({sourceView, destinationView}: {
|
|
|
|
sourceView: string,
|
|
|
|
destinationView: string,
|
|
|
|
}) {
|
|
|
|
|
|
|
|
await this.dashboard.get().locator(`[pw-data="view-sidebar-drag-handle-${sourceView}"]`).dragTo(
|
|
|
|
this.get().locator(`[pw-data="view-sidebar-view-${destinationView}"]`),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
async deleteView({ title }: { title: string }) {
|
|
|
|
await this.get().locator(`[pw-data="view-sidebar-view-${title}"]`).hover();
|
|
|
|
await this.get()
|
|
|
|
.locator(`[pw-data="view-sidebar-view-actions-${title}"]`)
|
|
|
|
.locator('.nc-view-delete-icon')
|
|
|
|
.click();
|
|
|
|
|
|
|
|
await this.rootPage.locator('.nc-modal-view-delete').locator('button:has-text("Submit")').click();
|
|
|
|
await this.rootPage.locator('.nc-modal-view-delete').locator('button:has-text("Submit")').waitFor({ state: 'detached' });
|
|
|
|
await this.toastWait({ message: 'View deleted successfully'});
|
|
|
|
}
|
|
|
|
}
|