148 lines
4.9 KiB
TypeScript
148 lines
4.9 KiB
TypeScript
import type {Page} from '@playwright/test';
|
|
|
|
import type {
|
|
DialogFieldAggregationSelectorValuesQa,
|
|
DialogFieldGroupingSelectorValuesQa,
|
|
DialogFieldLabelModeValuesQa,
|
|
DialogFieldTypeSelectorValuesQa,
|
|
GradientType,
|
|
} from '../../../src/shared';
|
|
import {
|
|
ColorMode,
|
|
DialogColorQa,
|
|
DialogFieldBackgroundSettingsQa,
|
|
DialogFieldMainSectionQa,
|
|
DialogFieldSettingsQa,
|
|
} from '../../../src/shared';
|
|
import {slct, waitForCondition} from '../../utils';
|
|
import {CommonSelectors} from '../constants/common-selectors';
|
|
|
|
import {BarsSettings} from './BarsSettings';
|
|
import type {PlaceholderName} from './SectionVisualization';
|
|
|
|
export default class VisualizationItemDialog {
|
|
barsSettings: BarsSettings;
|
|
private page: Page;
|
|
|
|
constructor(page: Page) {
|
|
this.page = page;
|
|
this.barsSettings = new BarsSettings(page);
|
|
}
|
|
|
|
async open(placeholder: PlaceholderName, fieldName: string) {
|
|
const placeholderContainer = this.page.locator(slct(placeholder));
|
|
const field = placeholderContainer.locator(slct(fieldName));
|
|
|
|
await field.locator('.item-icon').click();
|
|
}
|
|
|
|
async changeTitle(title: string) {
|
|
const input = this.page
|
|
.locator(slct(DialogFieldSettingsQa.FieldTitleInput))
|
|
.locator('input');
|
|
await input.fill(title);
|
|
}
|
|
|
|
async changeSelectorValue(
|
|
selector: DialogFieldMainSectionQa,
|
|
value:
|
|
| DialogFieldTypeSelectorValuesQa
|
|
| DialogFieldGroupingSelectorValuesQa
|
|
| DialogFieldLabelModeValuesQa,
|
|
) {
|
|
await this.page.click(slct(selector));
|
|
|
|
await this.page.click(slct(value));
|
|
}
|
|
|
|
async getSelectorCurrentValue(selector: DialogFieldMainSectionQa) {
|
|
let selectedValue;
|
|
await waitForCondition(async () => {
|
|
await this.page.click(slct(selector), {force: true});
|
|
const listValuesElement = await this.page.$(
|
|
`${CommonSelectors.SelectItem}${CommonSelectors.SelectedItem}`,
|
|
);
|
|
|
|
if (listValuesElement) {
|
|
selectedValue = listValuesElement.getAttribute('data-qa');
|
|
|
|
return Boolean(selectedValue);
|
|
}
|
|
|
|
return false;
|
|
}).catch(() => {
|
|
throw new Error(
|
|
`The value for the selector, according to the qa attribute - ${selector} was not found`,
|
|
);
|
|
});
|
|
// close selector
|
|
await this.page.click(slct(selector), {force: true});
|
|
return selectedValue;
|
|
}
|
|
|
|
async getSelectorListValues(selector: DialogFieldMainSectionQa) {
|
|
let listValues;
|
|
await this.page.click(slct(selector));
|
|
await waitForCondition(async () => {
|
|
const listValuesElements = await this.page.$$(CommonSelectors.SelectItem);
|
|
listValues = await Promise.all(
|
|
listValuesElements.map((el) => el.getAttribute('data-qa')),
|
|
);
|
|
|
|
return listValues && listValues.length;
|
|
}).catch(() => {
|
|
throw new Error(`No list items found for a selector with qa attributes - ${selector}`);
|
|
});
|
|
return listValues;
|
|
}
|
|
|
|
async setAggregation(aggregation: DialogFieldAggregationSelectorValuesQa) {
|
|
await this.page.click(slct(DialogFieldMainSectionQa.AggregationSelector));
|
|
|
|
await this.page.click(slct(aggregation));
|
|
}
|
|
|
|
async changeInputValue(selector: DialogFieldMainSectionQa, value: string) {
|
|
const inputSelector = `${slct(selector)} ${CommonSelectors.TextInput}`;
|
|
|
|
await this.page.waitForSelector(inputSelector);
|
|
|
|
const inputLocator = this.page.locator(inputSelector);
|
|
|
|
await inputLocator.fill(value);
|
|
}
|
|
|
|
async toggleSwitch(selector: string) {
|
|
await this.page.waitForSelector(selector);
|
|
|
|
await this.page.click(selector);
|
|
}
|
|
|
|
async clickOnApplyButton() {
|
|
await this.page.click(slct('field-dialog-apply'));
|
|
}
|
|
|
|
async setGradientBackground(gradientType: GradientType) {
|
|
await this.page.locator(slct(DialogFieldBackgroundSettingsQa.EnableButton)).click();
|
|
await this.page
|
|
.locator(slct(DialogFieldBackgroundSettingsQa.FillTypeButtons))
|
|
.locator(CommonSelectors.RadioButtonOption, {
|
|
has: this.page.locator(`[value="${ColorMode.GRADIENT}"]`),
|
|
})
|
|
.click();
|
|
await this.page.locator(slct(DialogFieldBackgroundSettingsQa.ButtonColorDialog)).click();
|
|
await this.page
|
|
.locator(slct(DialogColorQa.GradientType))
|
|
.locator(CommonSelectors.RadioButtonOption, {
|
|
has: this.page.locator(`[value="${gradientType}"]`),
|
|
})
|
|
.click();
|
|
await this.page.locator(slct(DialogColorQa.ApplyButton)).click();
|
|
}
|
|
|
|
async selectOneOfValues(parent: string, value: string) {
|
|
const radioGroup = this.page.locator(slct(parent));
|
|
await radioGroup.locator(`[value="${value}"]`);
|
|
}
|
|
}
|