@wix/design-system
Version:
@wix/design-system
135 lines • 4.22 kB
JavaScript
import { baseUniDriverFactory, getByHook } from '../utils/test-utils/unidriver';
export const popoverNextUniDriverFactory = (base, body) => {
const byHook = (hook) => base.$(`[data-hook="${hook}"]`);
const getRoot = async () => {
const isBaseRoot = !!(await base.attr('data-popover-root'));
return isBaseRoot ? base : base.$('[data-popover-root]');
};
const getRootDataHook = async () => {
return (await (await getRoot()).attr('data-hook')) ?? undefined;
};
const getTrigger = async () => {
const dataHook = await getRootDataHook();
return getByHook(body, `${dataHook}-trigger`);
};
const getContent = async () => {
const dataHook = await getRootDataHook();
let content;
try {
content = await getByHook(body, `${dataHook}-content`);
}
catch (e) { }
return content;
};
const getTriggerElement = async () => (await getTrigger()).getNative();
const triggerExists = async () => {
try {
const trigger = await getTrigger();
return trigger.exists();
}
catch {
return false;
}
};
const getContentElement = async () => (await getContent())?.getNative();
return {
...baseUniDriverFactory(base),
/**
* Clicks the trigger element
* @returns {Promise<void>}
*/
click: async () => {
try {
const trigger = await getTrigger();
return trigger.click();
}
catch { }
},
/**
* Gets the trigger element
* @returns {Promise<any>}
*/
getTriggerElement,
/**
* Gets the target element
* @deprecated use getTriggerElement
* @returns {Promise<any>}
*/
getTargetElement: getTriggerElement,
/**
* Checks whether the trigger element exists
* @returns {Promise<boolean>}
*/
triggerExists,
/**
* Checks whether target element exists
* @deprecated use triggerExists
* @returns {Promise<boolean>}
*/
isTargetElementExists: triggerExists,
/**
* Gets the portal element
* @deprecated
* @returns {Promise<any>}
*/
getPortalElement: async () => byHook('popover-portal').getNative(),
/**
* Gets the content element
* @returns {Promise<any>}
*/
getContentElement,
/**
* Checks whether content element exists
* @returns {Promise<boolean>}
*/
isContentElementExists: async () => (await getContent())?.exists() ?? false,
/**
* Triggers a mouseEnter event
* @returns {Promise<void>}
*/
mouseEnter: async () => {
const root = await getRoot();
return root.hover();
},
/**
* Triggers a mouseLeave event
* @returns {Promise<void>}
*/
mouseLeave: async () => {
const root = await getRoot();
return root.mouse.leave();
},
/**
* Clicks outside the target element
* @returns {Promise<void>}
*/
clickOutside: async () => body.click(),
/**
* Gets the arrow offset
* @returns {Promise<any>}
*/
getArrowOffset: async () => (await byHook('popover-arrow').getNative())?.style,
/**
* Gets content as unidriver element
* @deprecated
* @internal
* Use `getContent` instead.
* This is left out for feature parity.
*/
getContentElementUniDriver: async () => getContent(),
/**
* Checks whether the content is visible
* @returns {Promise<boolean>}
*/
isContentVisible: async () => {
try {
const content = await getContent();
return (await content?.exists()) === true;
}
catch {
return false;
}
},
};
};
//# sourceMappingURL=PopoverNext.uni.driver.js.map