@wix/design-system
Version:
@wix/design-system
93 lines • 3.49 kB
JavaScript
import { baseUniDriverFactory } from '../utils/test-utils/unidriver';
export const tabsUniDriverFactory = (base) => {
const findFirst = async (query) => {
const item = base.$$(query).get(0);
return (await item.exists()) ? item : null;
};
const getItemsContainer = async () => findFirst('div[role="tablist"]');
const getItems = async () => {
const itemsContainer = await getItemsContainer();
const tabs = itemsContainer &&
(await itemsContainer.getAll('button[role="tab"]'));
// @ts-expect-error
return tabs?.map(child => child);
};
const getItemsContainerType = async () => {
const itemContainer = await getItemsContainer();
return (await itemContainer?.attr('data-type'));
};
return {
...baseUniDriverFactory(base),
/**
* Gets all titles text
* @return {Promise<string[]>}
*/
getTitles: async () => Promise.all((await getItems()).map(item => item.text())),
/**
* Clicks the tab at index
* @param {number} index
* @return {Promise<void>}
*/
clickTabAt: async (index) => (await getItems())[index].click(),
/**
* Gets active tab index
* @return {Promise<number>}
*/
getActiveTabIndex: async () => {
const itemsDataActivePromises = (await getItems()).map(item => item.attr('data-active'));
const itemsDataActive = await Promise.all(itemsDataActivePromises);
return itemsDataActive.findIndex(active => active === 'true');
},
/**
* Checks whether tabs type is default
* @return {Promise<boolean>}
*/
isDefaultType: async () => !(await getItemsContainerType()),
/**
* Gets tabs container type
* @return {Promise<string>}
*/
getItemsContainerType,
/**
* Gets the data-hook
* @param {number} index
* @return {Promise<string>}
*/
getDataHook: async (index) => (await getItems())[index].attr('data-hook'),
/**
* Gets a set of tabs widths
* @return {Promise<Set<string>>}
*/
getItemsWidth: async () => {
const items = await getItems();
const itemsWidthArrayPromise = items.map(item => item._prop('style').then((style) => style.width));
const itemsWidthArray = await Promise.all(itemsWidthArrayPromise);
return new Set(itemsWidthArray);
},
/**
* Checks whether tabs has a divider
* @return {Promise<boolean>}
*/
hasDivider: async () => (await base.attr('data-divider')) === 'true',
/**
* Gets the side content
* @return {Promise<UniDriver|null>}
*/
getSideContent: async () => findFirst(`[data-content="true"]`),
/**
* Gets tabs max widths
* @return {Promise<string[]>}
*/
getItemsMaxWidths: async () => Promise.all((await getItems()).map(item => item
._prop('style')
.then((style) => style.maxWidth))),
/**
* Gets tabs min widths
* @return {Promise<string[]>}
*/
getItemsMinWidths: async () => Promise.all((await getItems()).map(item => item
._prop('style')
.then((style) => style.minWidth))),
};
};
//# sourceMappingURL=Tabs.uni.driver.js.map