wix-style-react
Version:
wix-style-react
85 lines • 4.33 kB
JavaScript
import addItemDriverFactory from '../AddItem/AddItem.driver';
import { dataAttributes, dataHooks } from './constants';
import { tooltipLegacyDriverFactory } from '../Tooltip/Tooltip.driver';
const imageViewerDriverFactory = ({ element, wrapper, eventTrigger }) => {
const byHook = dataHook => element.querySelector(`[data-hook="${dataHook}"]`);
const hasDataAttribute = (dataAttr, el) => el.getAttribute(dataAttr) === 'true';
const addItemDriver = () => addItemDriverFactory({
element: byHook(dataHooks.addItem),
eventTrigger,
});
const getTooltipDriver = dataHook => tooltipLegacyDriverFactory({
element: element.querySelector(`[data-hook="${dataHook}"]`),
eventTrigger,
});
const getImageElement = () => byHook(dataHooks.image);
const getPreviousImageElement = () => byHook(dataHooks.previousImage);
const isImagesContainerElementVisible = () => hasDataAttribute(dataAttributes.containerVisible, byHook(dataHooks.imagesContainer));
const isImageElementVisible = imgElement => hasDataAttribute(dataAttributes.imageVisible, imgElement);
const hoverElement = () => eventTrigger.mouseOver(element);
const showButtons = hoverElement;
return {
exists: () => !!element,
getElement: () => element, // for backward compatibility
element: () => element, // same as unidriver language
updateExists: () => !!byHook(dataHooks.update),
updateButtonExists: () => !!byHook(dataHooks.update),
removeButtonExists: () => !!byHook(dataHooks.remove),
downloadButtonExists: () => !!byHook(dataHooks.download),
moreButtonExists: () => !!byHook(dataHooks.more),
clickAdd: () => addItemDriver().click(),
clickUpdate: () => {
showButtons();
eventTrigger.click(byHook(dataHooks.update));
},
clickDownload: () => {
showButtons();
eventTrigger.click(byHook(dataHooks.download));
},
clickRemove: () => {
showButtons();
eventTrigger.click(byHook(dataHooks.remove));
},
getContainerStyles: () => element.getAttribute('style'),
getAddTooltipContent: () => addItemDriver().getTooltipContent(),
getUpdateTooltipContent: () => getTooltipDriver(dataHooks.updateTooltip).getTooltipText(),
getDownloadTooltipContent: () => getTooltipDriver(dataHooks.downloadTooltip).getTooltipText(),
getRemoveTooltipContent: () => getTooltipDriver(dataHooks.removeTooltip).getTooltipText(),
getMoreTooltipContent: () => getTooltipDriver(dataHooks.moreTooltip).getTooltipText(),
isDisabled: () => element.getAttribute('data-disabled') === 'true',
isAddItemVisible: () => !!byHook(dataHooks.addItem),
isLoaderVisible: () => !!byHook(dataHooks.loader),
isImageLoaded: () => hasDataAttribute(dataAttributes.imageLoaded, element),
isImageVisible: () => {
const image = getImageElement();
return (!!image &&
isImageElementVisible(image) &&
isImagesContainerElementVisible());
},
isPreviousImageVisible: () => {
const previousImage = getPreviousImageElement();
return (!!previousImage &&
isImageElementVisible(previousImage) &&
isImagesContainerElementVisible());
},
getImageUrl: () => {
const imageUrl = getImageElement();
return imageUrl && imageUrl.getAttribute('src');
},
getPreviousImageUrl: () => {
const previousImage = getPreviousImageElement();
return previousImage && previousImage.getAttribute('src');
},
hover: () => hoverElement(),
// Status
/** Return true if the given status is displayed */
hasStatus: status => {
const statusEl = element.querySelector(`[data-hook='${dataHooks.errorTooltip}']`);
return (statusEl && statusEl.getAttribute('data-status')) === status;
},
/** If there's a status message, returns its text value */
getStatusMessage: () => getTooltipDriver('status-indicator-tooltip').getTooltipText(0),
};
};
export default imageViewerDriverFactory;
//# sourceMappingURL=ImageViewer.driver.js.map