{"version":3,"sources":["../node_modules/@scandipwa/scandipwa/src/route/ProductPage/index.js","util/Menu/Menu.js","../node_modules/@scandipwa/scandipwa/src/component/CmsBlock/index.js","util/Menu/index.js","../node_modules/@scandipwa/scandipwa/src/util/Menu/Menu.js","component/CmsBlock/CmsBlock.container.js","../node_modules/@scandipwa/scandipwa/src/query/CmsBlock.query.js","../node_modules/@scandipwa/scandipwa/src/component/NavigationTabs/NavigationTabs.config.js","component/NavigationTabs/NavigationTabs.config.js","query/Menu.query.js","../node_modules/@scandipwa/scandipwa/src/component/Breadcrumb/index.js","component/Breadcrumb/Breadcrumb.component.js","../node_modules/@scandipwa/scandipwa/src/component/CmsBlock/CmsBlock.container.js","component/CmsBlock/CmsBlock.component.js","../node_modules/@scandipwa/scandipwa/src/component/CmsBlock/CmsBlock.component.js","component/Breadcrumbs/Breadcrumbs.component.js","../node_modules/@scandipwa/scandipwa/src/store/ProductListInfo/ProductListInfo.dispatcher.js","../node_modules/@scandipwa/scandipwa/src/query/Menu.query.js","route/CategoryPage/CategoryPage.component.js","component/Breadcrumbs/Breadcrumbs.container.js","../node_modules/@scandipwa/scandipwa/src/type/Breadcrumbs.type.js","../node_modules/@scandipwa/scandipwa/src/component/Pagination/Pagination.container.js","../node_modules/@scandipwa/scandipwa/src/component/PaginationLink/PaginationLink.component.js","../node_modules/@scandipwa/scandipwa/src/component/FilterIcon/FilterIcon.component.js","../node_modules/@scandipwa/scandipwa/src/component/GridIcon/GridIcon.component.js","../node_modules/@scandipwa/scandipwa/src/component/ListIcon/ListIcon.component.js","../node_modules/@scandipwa/scandipwa/src/component/CategoryProductList/index.js","../node_modules/@scandipwa/scandipwa/src/component/Breadcrumb/Breadcrumb.component.js","../node_modules/@scandipwa/scandipwa/src/component/Breadcrumbs/Breadcrumbs.component.js","component/Breadcrumbs/Breadcrumbs.config.js","../node_modules/@scandipwa/scandipwa/src/component/CategoryItemsCount/index.js","component/CategoryItemsCount/CategoryItemsCount.container.js","component/CategoryItemsCount/CategoryItemsCount.component.js","component/CategoryProductList/CategoryProductList.container.js","component/ProductList/ProductList.container.js","../node_modules/@scandipwa/scandipwa/src/component/ProductListPage/index.js","component/ProductListPage/ProductListPage.component.js","../node_modules/@scandipwa/scandipwa/src/component/Pagination/index.js","../node_modules/@scandipwa/scandipwa/src/component/CategorySort/index.js","component/CategorySort/CategorySort.container.js","component/CategorySort/CategorySort.component.js","component/MenuFilters/MenuFilters.container.js","component/SelectedFilters/SelectedFilters.container.js","component/CategoryDetails/CategoryDetails.component.js","../node_modules/@scandipwa/scandipwa/src/store/LinkedProducts/LinkedProducts.action.js","component/ScrollToTopButton/ScrollToTopButton.config.js","../node_modules/@scandipwa/scandipwa/src/component/Breadcrumbs/Breadcrumbs.container.js","../node_modules/@scandipwa/scandipwa/src/component/Pagination/Pagination.config.js","../node_modules/@scandipwa/scandipwa/src/component/Pagination/Pagination.component.js","../node_modules/@scandipwa/scandipwa/src/component/PaginationLink/index.js","../node_modules/@scandipwa/scandipwa/src/component/FilterIcon/index.js","../node_modules/@scandipwa/scandipwa/src/component/GridIcon/index.js","../node_modules/@scandipwa/scandipwa/src/component/ListIcon/index.js","component/ProductLabel/ProductLabel.component.js","../node_modules/@scandipwa/scandipwa/src/component/ProductLinks/ProductLinks.container.js","../node_modules/@scandipwa/scandipwa/src/store/LinkedProducts/LinkedProducts.reducer.js","../node_modules/@scandipwa/scandipwa/src/component/CategoryItemsCount/CategoryItemsCount.container.js","../node_modules/@scandipwa/scandipwa/src/component/CategoryItemsCount/CategoryItemsCount.component.js","../node_modules/@scandipwa/scandipwa/src/component/ProductList/index.js","../node_modules/@scandipwa/scandipwa/src/component/ProductList/ProductList.container.js","component/ProductList/ProductList.component.js","component/ProductListPage/ProductListPage.config.js","../node_modules/@scandipwa/scandipwa/src/component/ProductList/ProductList.component.js","../node_modules/@scandipwa/scandipwa/src/component/CategorySort/CategorySort.container.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/toArray.js","component/MenuFilters/index.js","component/MenuFilters/MenuFilters.component.js","component/SelectedFilters/index.js","component/SelectedFilters/SelectedFilters.component.js","../node_modules/@scandipwa/scandipwa/src/route/CategoryPage/CategoryPage.component.js","../node_modules/@scandipwa/scandipwa/src/component/CategoryDetails/index.js","component/SizeChartPopup/SizeChartPopup.config.js","../node_modules/@scandipwa/scandipwa/src/component/ProductGallery/ProductGallery.config.js","component/ProductGallery/ProductGallery.config.js","../node_modules/@scandipwa/scandipwa/src/component/ProductLinks/index.js","../node_modules/@scandipwa/scandipwa/src/component/ProductLinks/ProductLinks.component.js","route/ProductPage/ProductPage.container.js","../node_modules/react-zoom-pan-pinch/dist/index.es.js","component/MenuMobile/MenuMobile.config.js","../node_modules/@scandipwa/scandipwa/src/component/VideoPopup/VideoPopup.config.js","../node_modules/@scandipwa/scandipwa/src/type/Rating.type.js","route/ProductPage/ProductPage.component.js","../node_modules/@scandipwa/scandipwa/src/component/ProductActions/index.js","component/ProductActions/ProductActions.container.js","component/ProductActions/ProductActions.component.js","component/ProductColorAttribute/ProductColorAttribute.container.js","../node_modules/@scandipwa/scandipwa/src/component/ProductGallery/index.js","component/ProductGallery/ProductGallery.container.js","component/AdditionalPictures/AdditionalPictures.component.js","component/ProductGalleryBaseImage/ProductGalleryBaseImage.container.js","component/ProductGalleryThumbnailImage/ProductGalleryThumbnailImage.container.js","../node_modules/@scandipwa/scandipwa/src/component/Slider/Slider.container.js","../node_modules/@scandipwa/scandipwa/src/component/VideoPopup/VideoPopup.container.js","../node_modules/@scandipwa/scandipwa/src/component/VideoThumbnail/VideoThumbnail.container.js","component/SizeChartPopup/SizeChartPopup.container.js","component/ProductMeasurements/ProductMeasurements.container.js","component/ProductMeasurements/ProductMeasurements.config.js","component/Tab/Tab.container.js","component/Tabs/Tabs.container.js","component/TabbyPdp/TabbyPdp.container.js","component/TamaraPdp/TamaraPdp.container.js","../node_modules/@scandipwa/scandipwa/src/component/ProductAlerts/ProductAlerts.container.js","../node_modules/@scandipwa/scandipwa/src/component/ProductInformation/index.js","component/ProductInformation/ProductInformation.component.js","../node_modules/@scandipwa/scandipwa/src/component/ReviewStar/ReviewStar.component.js","../node_modules/@scandipwa/scandipwa/src/component/ProductTabs/ProductTabs.component.js","../node_modules/@scandipwa/scandipwa/src/component/ProductTab/ProductTab.component.js","../node_modules/@scandipwa/scandipwa/src/route/ProductPage/ProductPage.container.js","../node_modules/@scandipwa/scandipwa/src/store/RecentlyViewedProducts/RecentlyViewedProducts.action.js","../node_modules/@scandipwa/scandipwa/src/component/ProductActions/ProductActions.container.js","component/ProductColorAttribute/index.js","component/ProductColorAttribute/ProductColorAttribute.component.js","../node_modules/@scandipwa/scandipwa/src/component/ProductConfigurableAttributes/index.js","component/ProductGallery/ProductGallery.component.js","component/AdditionalPictures/index.js","component/ProductGalleryBaseImage/index.js","../node_modules/@scandipwa/scandipwa/src/component/ProductGalleryBaseImage/ProductGalleryBaseImage.container.js","component/ProductGalleryBaseImage/ProductGalleryBaseImage.component.js","../node_modules/@scandipwa/scandipwa/src/component/ProductGalleryBaseImage/ProductGalleryBaseImage.component.js","../node_modules/@scandipwa/scandipwa/src/component/ProductGalleryBaseImage/ProductGalleryBaseImage.config.js","component/ProductGalleryThumbnailImage/index.js","component/ProductGalleryThumbnailImage/ProductGalleryThumbnailImage.component.js","../node_modules/@scandipwa/scandipwa/src/component/ProductGalleryThumbnailImage/ProductGalleryThumbnailImage.component.js","../node_modules/@scandipwa/scandipwa/src/component/Slider/index.js","../node_modules/@scandipwa/scandipwa/src/component/VideoPopup/index.js","../node_modules/@scandipwa/scandipwa/src/component/VideoPopup/VideoPopup.component.js","../node_modules/@scandipwa/scandipwa/src/component/VideoThumbnail/index.js","../node_modules/@scandipwa/scandipwa/src/component/VideoThumbnail/VideoThumbnail.component.js","component/SizeChartPopup/index.js","component/SizeChartPopup/SizeChartPopup.component.js","component/ProductMeasurements/index.js","component/ProductMeasurements/ProductMeasurements.component.js","component/Tab/index.js","component/Tab/Tab.component.js","component/Tabs/index.js","component/Tabs/Tabs.component.js","component/TabbyPdp/index.js","query/Tabby.query.js","component/TabbyPdp/TabbyPdp.component.js","component/TabbyPdp/TabbyPdp.config.js","component/TamaraPdp/index.js","query/Tamara.query.js","component/TamaraPdp/TamaraPdp.component.js","../node_modules/@scandipwa/scandipwa/src/component/ProductActions/ProductActions.component.js","../node_modules/@scandipwa/scandipwa/src/component/ProductAlerts/index.js","../node_modules/@scandipwa/scandipwa/src/query/ProductAlerts.query.js","../node_modules/@scandipwa/scandipwa/src/component/ProductAlerts/ProductAlerts.component.js","../node_modules/@scandipwa/scandipwa/src/component/ProductAlerts/ProductAlerts.config.js","../node_modules/@scandipwa/scandipwa/src/component/ProductInformation/ProductInformation.component.js","../node_modules/@scandipwa/scandipwa/src/route/ProductPage/ProductPage.component.js","../node_modules/@scandipwa/scandipwa/src/component/ProductReviewForm/ProductReviewForm.container.js","../node_modules/@scandipwa/scandipwa/src/component/ProductReviewForm/ProductReviewForm.component.js","../node_modules/@scandipwa/scandipwa/src/component/ReviewStar/index.js","../node_modules/@scandipwa/scandipwa/src/component/ProductTabs/index.js","../node_modules/@scandipwa/scandipwa/src/component/ProductTab/index.js","../node_modules/@scandipwa/scandipwa/src/component/Breadcrumbs/index.js","../node_modules/@scandipwa/scandipwa/src/store/LinkedProducts/LinkedProducts.dispatcher.js","component/ProductLabel/index.js"],"names":["getMenuOptions","window","contentConfiguration","header_content","identifier","header_menu","fetchData","rawQueries","onSuccess","onError","preparedQuery","prepareQuery","query","variables","queryHash","hash","JSON","stringify","dataCache","promise","makeCancelable","executeGet","ONE_MONTH_IN_SECONDS","then","response","err","fetchMenu","callback","force","headerMenuLoading","headerMenu","MenuQuery","getQuery","menu","timeout","setTimeout","Menu","getSortedItems","unsortedItems","Array","from","sort","PID","parent_id","P","position","prevPID","prevP","url","url_type","category_id","pathname","search","state","category","page","cms_page_identifier","item","this","getMenuUrl","children","obj","path","value","i","split","length","data","item_id","menuPositionReference","getMenuData","undefined","setToValue","join","items","forEach","realMenuItem","createItem","containerProps","cmsBlock","props","customComponents","setIsLoading","CmsBlockQuery","identifiers","cmsBlocks","setState","SourceCmsBlockContainer","propTypes","PropTypes","func","defaultProps","CmsBlockContainer","Error","Field","addArgument","addField","_getItemsField","setAlias","addFieldList","_getItemFields","HOME_TAB","MENU_TAB","ACCOUNT_TAB","CART_TAB","CHECKOUT_TAB","SEARCH_TAB","NAVIGATION_SEARCH","MOBILE_MENU","EXTRA_LARGE_SCREEN_WIDTH","TIMEOUT_500","TIMEOUT_20","HISTORY_STATE_LENGTH","SourceMenuQuery","mapStateToProps","mapDispatchToProps","dispatch","updateUrlRewrite","urlRewrite","requestedUrl","e","preventDefault","BrowserDatabase","getItem","PREVIOUS_CATEGORY_URL_COOKIE","history","goBack","id","parseInt","type","blockBERequest","push","index","isDisabled","sanitizedUrl","block","elem","onClick","onBreadcrumbClick","tabIndex","itemProp","content","location","origin","renderName","name","isLoading","mods","key","itemScope","itemType","renderLink","SourceBreadcrumb","connect","BreadcrumbComponent","blockType","_getCmsBlock","prevProps","DataContainer","string","isRequired","disabled","renderPlaceholder","SourceCmsBlock","CmsBlockComponent","PureComponent","isDesktop","updateWindowDimensions","bind","addEventListener","removeEventListener","newIsDesktop","innerWidth","DESKTOP_MIN_WIDTH","breadcrumbs","renderBreadcrumbList","renderBreadcrumb","isNotHomeBreadcrumb","to","__","renderDesktopBreadcrumbs","renderMobileBreadCrumb","map","_","areBreadcrumbsVisible","appendWithStoreCode","aria-label","renderHomeBreadcrumb","renderBreadcrumbs","SourceBreadcrumbs","device","DeviceType","BreadcrumbsComponent","options","products","filter","args","updateProductListInfo","error","showNotification","updateNoMatch","updateInfoLoadStatus","ProductListQuery","requireInfo","QueryDispatcher","ProductListInfoDispatcher","_getMenuFields","_getMenuItemsField","_getMenuItemFields","ScrollToTopButton","lazy","Html","CategoryFilterOverlay","isScrollToTopButtonRender","isExtraLargeDesktop","topDetailsHeight","filterWrappersHeight","prevFilterWrappersHeight","menuFiltersHeight","categoryFiltersHeight","sizeFiltersHeight","areMobileFiltersOpen","isMiscellaneousRendered","previousGenderFilter","isScrollFrozen","topDetailsRef","createRef","filtersRef","filtersInnerWrapperPlaceholderRef","lastScroll","onFilterButtonClick","onHeightUpdate","renderSelectedFilters","resetAreMobileFiltersOpen","setTopDetailsHeight","setFilterWrappersHeight","setMenuFiltersHeight","setCategoryFiltersHeight","setSizeFiltersHeight","setIsMiscellaneousRendered","handleStickyFilters","isMobile","stickyClass","stickyFilters","document","getElementsByClassName","currentScroll","pageYOffset","classList","add","remove","handleIosStickyHeader","freezeScroll","prevFilter","currFilter","current","scrollIntoView","behavior","body","style","overflow","SCROLL_TO_TOP_TIMEOUT","clientHeight","unfreezeScroll","backButtonFromPDP","setInterval","showPopup","totalItems","selectedFilters","title","newIsExtraLargeDesktop","EXTRA_LARGE_DESKTOP_MIN_WIDTH","selectedInfoFilter","filters","availableFilters","isMatchingListFilter","isInfoLoading","ref","renderFilterInnerWrapper","renderMoreFiltersButton","renderCategorySort","renderFilterButton","CSS","setVariable","filtersInnerWrapperRef","isNavOnTop","renderMenuFilters","renderFilterOverlay","renderMiscDesktopPlaceholder","renderMiscellaneous","renderItemsCount","renderCategoryProductList","showMoreFilters","onMoreFiltersClick","test","Object","keys","role","isMatchingInfoFilter","requestCategoryFromFilters","isSearchPage","areComponentsLoading","fallback","getAvailableFilters","customFiltersValues","onPopupHide","gender","prev_attribute_options_","attribute_options","selectedSort","isCurrentCategoryLoaded","isPrerendered","isSSR","isCrawler","content_blocks","hide_products","renderContentBlockPlaceholder","top_content","appliedFiltersCount","values","filterArray","sortFields","onSortChange","configSortKey","sortKey","configSortDirection","sortDirection","default_sort_by","updatedSortFields","label","config","logoUrl","publicPath","baseUrl","hideProducts","renderContentBlocks","renderCategoryDetails","wrapperMix","renderContentMobile","renderContent","SourceCategoryPage","toggleOverlayByKey","LocationType","HistoryType","bool","activeOverlay","CategoryPageComponent","sourceMapStateToProps","ConfigReducer","Breadcrumbs","BreadcrumbType","shape","LinkType","BreadcrumbsType","arrayOf","paginationFrame","pagination_frame","paginationFrameSkip","pagination_frame_skip","anchorTextPrevious","anchor_text_for_previous","anchorTextNext","anchor_text_for_next","containerFunctions","getSearchQuery","pageNumber","generateQuery","totalPages","mix","currentPage","_getCurrentPage","prevPageJump","_getPrevPageJump","nextPageJump","_getNextPageJump","firstFramePage","_getFirstFramePage","lastFramePage","_getLastFramePage","shouldRenderNextJump","_shouldRenderNextJump","shouldRenderPreviousJump","_shouldRenderPreviousJump","shouldRenderJumps","_shouldRenderJumps","getQueryParam","maxFirstPage","Math","ceil","minFirstPage","max","min","UTMOST_PAGES_COUNT","withRouter","PaginationContainer","getSearchQueryForPage","url_path","isCurrent","isArrow","aria-current","PaginationLink","width","height","viewBox","fill","xmlns","d","FilterIcon","isActive","GridIcon","ListIcon","getLinkUrl","nameToString","String","breadcrumbsWithHome","toString","match","CHECKOUT_URL","isHomePageUrl","shouldHideBreadcrumbs","pages","ProductListReducer","CategoryItemsCount","promoTiles","product","renderItems","SourceCategoryItemsCount","PagesType","CategoryItemsCountComponent","ProductListDispatcher","isOffline","OfflineReducer","isPageLoading","requestProductList","default","handleData","updateLoadStatus","getIsInfoLoading","isPreventRequest","getIsPreventRequest","categoryIds","navigator","onLine","CategoryProductListContainer","isSignedIn","MyAccountReducer","totalPagesOnServer","pagesNumberToShow","sourceMapDispatchToProps","appendLastLocalPage","updatePagesNumberToShow","hasSignedIn","requestPage","isNext","pageSize","requestProductListInfo","noAttributes","noVariants","isEmptyFilter","infoOptions","minMaxRequested","areMenuFiltersLoading","prevSort","prevSearch","prevPages","pagesCount","pagesLength","_getPageFromUrl","isInfiniteLoaderEnabled","next","_getPagesBounds","minPage","maxPage","loadedPagesCount","isUpdatable","shouldUpdateList","SourceProductListContainer","PAGE_SIZE","ProductListContainer","CategoryReducer","pageViewed","handlePageVisibilityToggle","isVisible","updatePages","numberOfPlaceholders","itemsToRender","DEFAULT_PLACEHOLDER_COUNT_MOBILE","isPlaceholder","productIndex","isPlp","node","sku","random","getPlaceholderRef","renderPlaceholders","renderPlaceholderItems","renderPageItems","as","onChange","className","DEFAULT_PLACEHOLDER_COUNT","ProductListPageComponent","getSelectedLabel","option","charAt","toUpperCase","slice","asc","desc","optionToRemove","selectOptions","reduce","acc","lowerCaseId","toLowerCase","_getLabel","_compareByListOrder","online_from","price","_prepareOptions","entries","sortingOrder","order","a","b","hasOwnProperty","first","Number","MAX_SAFE_INTEGER","second","result","SourceCategorySortContainer","CategorySortContainer","close","checkedDesktopSize","renderSortButton","setDefaultSort","getBanner","bannerList","getElementById","bannerItem","querySelector","isMobileSort","selectedValue","target","direction","documentElement","selectedSortKey","selectedSortDirection","isSelected","mobileTitleVisible","isFilterAppliedFromUrl","sortedSelectOptions","moveDefaultAtBeggining","sanitizedSortedSelectOptions","replace","FIELD_TYPE","select","attr","selectPlaceholder","events","onFocus","unshift","selected","CATEGORY_SORT","sorts","defaultLabel","x","y","isPlaceHolder","renderSortField","CategorySortComponent","filterTitle","getRenderingData","_getMenu","substr","MenuHelper","categoryId","Boolean","find","getUrl","currentCategory","item_class","includes","getSubsubcategories","getUrlParts","pop","isSubCategoryActive","subsubcategories","flat","isMain","childOfHiddenCategory","searchHiddenCategory","isDepest","child","getCurrentCategoryItemWithReduce","getCurrentCategoryItem","storeCode","STORE_CODE_EN","STORE_CODE_UAE","STORE_CODE_KSA_AR","childArray","getStoreCode","categoryItems","findCurrentCategory","getOtherSubcategories","getCollectionsSubcategory","CategoryTreeType","number","MenuFiltersContainer","onResetClick","urlStringToObject","code","optionId","customFilters","customFilter","selectedOptions","selectedOptionsArray","selectedOptionId","part","attributeCode","attributeOptionId","setQueryParams","resetAttribute","priceMin","priceMax","selectedFilter","assign","priceRange","createSearchSelectedFilters","SelectedFiltersContainer","description","parser","renderCategoryName","renderDescription","CategoryDetailsComponent","UPDATE_LINKED_PRODUCTS","updateLinkedProducts","linkedProducts","SCROLL_TO_TOP_BUTTON_SHOW_PX","BreadcrumbsReducer","withReducers","renderPageLink","renderPageIcon","range","RIGHT","LEFT","renderPreviousPageLink","renderFirstPageLink","renderPreviousJump","renderPageLinks","renderNextJump","renderLastPageLink","renderNextPageLink","Pagination","label_text","label_color_background","label_color_foreground","product_badge","areDetailsLoaded","isPDP","isBadge","labelStyle","color","backgroundColor","pseudoElementStyle","borderColor","BadgeLabel","renderProductLabel","ProductLabelComponent","LinkedProductsReducer","siblingsHaveBrands","siblingsHavePriceBadge","siblingsHaveTierPrice","siblingsHaveConfigurableOptions","linkType","numberOfProductsToDisplay","productCardFunctions","setSiblingsHaveBrands","setSiblingsHavePriceBadge","setSiblingsHaveTierPrice","setSiblingsHaveConfigurableOptions","productCardProps","ProductLinksContainer","UPSELL","RELATED","CROSS_SELL","getInitialState","LINKED_PRODUCTS","upsell","related","crosssell","action","updateCrossSell","prevCrossSell","loadPrevPage","loadPage","updatePage","prevLocation","prevPage","isWidget","scrollToTop","isPaginationEnabled","isShowLoading","_isShowLoading","_isVisible","_getIsInfiniteLoaderEnabled","currentLocation","infiniteLoader","pagesLoaded","triggerPageThreeLoad","showNextInfiniteScrollPage","nextProps","nextState","pagesFromState","prevPagesFromState","nextPagesNumberToShow","prevSelectedFilters","prevPagesLoaded","prevIsLoading","prevIsPageLoading","observePageChange","newVal","productsLeftToLoad","nextPageSize","URL","href","searchParams","set","event","renderLoadMoreButton","renderLoadAllButton","renderPage","wrapperRef","nodes","pageRenders","renderProductPage","newProps","_processProps","onKeyUp","renderTitle","renderLoadButton","renderPages","renderPaginationButtons","renderNoProducts","SourceProductList","ProductListComponent","observedNodes","pagesIntersecting","observer","disconnect","threshold","_getThreshold","IntersectionObserver","isIntersecting","indexOf","splice","Infinity","rootMargin","updateObserver","currentNodes","observe","unobserve","observerThreshold","restProps","renderPagination","noopFn","ProductList","_toArray","arr","menuFiltersRef","renderSubcategory","renderSubsubcategory","subcategory","heading","isContentExpanded","isNoContentDisplay","hasClickOutside","any","renderingData","repeat","renderCategoriesPlaceholders","renderSubcategories","MenuFiltersComponent","renderSelectedFilter","renderSelectedPriceFilter","filterCode","attribute","selectedOptionIds","attribute_label","is_boolean","optionLabel","clearAll","onKeyDown","SelectedFiltersComponent","display_mode","DISPLAY_MODE_PRODUCTS","DISPLAY_MODE_BOTH","DISPLAY_MODE_CMS_BLOCK","isContentFiltered","is_anchor","renderFiltersCount","renderFilterButtonPlaceholder","displayProducts","renderFilterPlaceholder","isCategoryAnchor","onGridButtonClick","onListButtonClick","activeLayoutType","GRID_LAYOUT","LIST_LAYOUT","plpTypes","renderLayoutButton","isVisibleOnMobile","layout","cms_block","displayCmsBlock","renderLayoutButtons","renderCmsBlock","noResults","defaultPlpType","selectedLayoutType","storedPlpType","LAYOUT_KEY","SIZE_CHART_POPUP_ID","KIDS_FOOTWEAR_BLOCK_UAE_EN","WOMENS_FOOTWEAR_BLOCK_UAE_EN","MENS_FOOTWEAR_BLOCK_UAE_EN","KIDS_CLOTHES_BLOCK_UAE_EN","WOMENS_CLOTHES_BLOCK_UAE_EN","MENS_CLOTHES_BLOCK_UAE_EN","KIDS_FOOTWEAR_BLOCK_AR","WOMENS_FOOTWEAR_BLOCK_AR","MENS_FOOTWEAR_BLOCK_AR","KIDS_CLOTHES_BLOCK_AR","WOMENS_CLOTHES_BLOCK_AR","MENS_CLOTHES_BLOCK_AR","KIDS_LABELS","MEN_LABELS","WOMEN_LABELS","UNISEX_LABELS","APPAREL_LABELS","FOOTWEAR_LABELS","ACCESSORIES_LABELS","MAX_ZOOM_SCALE","IMAGE_TYPE","VIDEO_TYPE","PLACEHOLDER_TYPE","THUMBNAIL_KEY","AMOUNT_OF_PLACEHOLDERS","NAV_BAR_HEIGHT","BREADCRUMBS_BOTTOM","renderProductCard","renderHeading","ProductLinks","getVariantIndex","variants","withStock","findIndex","vColor","salable_qty","originalGetVariantIndex","totals","CartReducer","cartTotals","ProductReducer","content_html","customer","locale","basePath","base_link_url","UrlRewritesReducer","linkCheckDone","getLink","updateUrl","getSelectedCustomizableOptions","createArrayOfIds","timeoutId","productIds","isTriggered","requestScarabPush","productSKU","ScarabQueue","email","pushRecommenderData","clearTimeout","redirectIfSizeIsNotAvailable","params","URLSearchParams","has","getDataSource","get","size","delete","decodeURIComponent","requestProduct","updateNavigationState","updateMeta","updateHeaderState","updateBreadcrumbs","loadAttributesData","prevProductSKU","prevProduct","stateSKU","prevIsSignedIn","requestedSku","sameStyleColor","variant","stock_status","style_number","debounce","setOfflineNoticeSize","LOADING_TIME","_addToRecentlyViewedProducts","blockPDPRefresh","parameters","convertQueryStringToKeyValuePairs","currentProductSKU","activeProduct","fetchQuery","AttributesQuery","getProductAttributesQuery","setItem","catch","console","log","prices","row_total_including_tax","quantity","logic","isKsa","limit","containerId","RECOMMENDER_PDP_ID","success","SC","objectToUri","updateArray","productOptionsData","productOptionsMulti","productOptions","newProduct","getIsConfigurableParameterSelected","updateQueryParamWithoutHistory","removeQueryParamWithoutHistory","updateUrlStyleNumber","style_data","style_url","prevCategoryId","historyState","replaceState","ids","configurable_options","prevSKU","prevOptionData","newOptionsData","option_id","required","prevRequiredOptions","requiredOptions","SourceProductPageContainer","TotalsType","navigation","object","array","ProductPageContainer","extendStatics","setPrototypeOf","__proto__","p","__extends","constructor","prototype","create","__assign","t","s","n","arguments","call","apply","initialState","wrapperComponent","contentComponent","previousScale","scale","positionX","positionY","transformEnabled","minPositionX","maxPositionX","minPositionY","maxPositionY","minScale","maxScale","limitToBounds","limitToWrapper","centerContent","wrapperClass","contentClass","wheel","step","wheelEnabled","touchPadEnabled","limitsOnWheel","pan","panAnimationType","lockAxisX","lockAxisY","velocity","velocityEqualToMove","velocitySensitivity","velocityActiveScale","velocityMinSpeed","velocityBaseTime","velocityAnimationType","padding","paddingSize","panReturnAnimationTime","panReturnAnimationType","disableOnTarget","pinch","zoomIn","animation","animationType","animationTime","zoomOut","doubleClick","mode","reset","scalePadding","roundNumber","num","decimal","toFixed","checkIsNumber","defaultValue","boundLimiter","minBound","maxBound","getDistance","firstPoint","secondPoint","sqrt","pow","pageX","pageY","deleteUndefinedProps","newObject","handleCallback","handleWheelStop","previousEvent","stateProvider","_a","sign","deltaY","mergeProps","dynamicProps","curr","availableAnimations","easeOut","cos","PI","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","handleDisableAnimation","mounted","cancelAnimationFrame","animate","animationName","_this","startTime","Date","getTime","frameTime","requestAnimationFrame","animateComponent","targetState","speed","_b","scaleDiff","positionXDiff","positionYDiff","applyTransformation","checkZoomBounds","zoom","zoomPadding","enablePadding","minScaleWithPadding","isNaN","checkPositionBounds","bounds","paddingValue","paddingX","offsetWidth","paddingY","offsetHeight","wheelMousePosition","contentRect","getBoundingClientRect","mouseX","clientX","left","mouseY","clientY","top","handleCalculatePositions","newScale","scaleDifference","newPositionX","newPositionY","getClientPosition","touches","handlePanning","_c","startCoords","_d","positions","calculatedPosition","handlePaddingAnimation","handlePanningAnimation","handlePanToBounds","xChanged","yChanged","mousePosX","mousePosY","handleCalculateZoom","delta","disablePadding","getTarget","isBtnFunction","targetScale","wrapperToWindowScale","paddingEnabled","handleCalculateBounds","wrapperWidth","wrapperHeight","newContentWidth","newContentHeight","newDiffWidth","newDiffHeight","getComponentsSizes","diffWidth","diffHeight","scaleWidthFactor","scaleHeightFactor","calculateBoundingArea","handleWheelZoom","stopPropagation","customDelta","getDelta","ctrlKey","isLimitedToBounds","_e","handleZoomToPoint","mousePosition","handlePaddingAnimation$1","handleDoubleClick","resetTransformations","time","getButtonAnimationTime","handleZoomControls","customStep","isZoomIn","animationSpeed","defaultValues","defaultScale","defaultPositionX","defaultPositionY","round","checkIfInfinite","calculatePinchZoom","currentDistance","pinchStartDistance","pinchStartScale","handleZoomPinch","cancelable","firstPointX","firstPointY","calculateMidpoint","getCurrentDistance","lastDistance","velocityTimeSpeed","handleEnableVelocity","startAnimation","handleFireVelocity","animateVelocity","velocityX","velocityY","targetX","targetY","newAnimationTime","maxTargetX","minTargetX","maxTargetY","minTargetY","startPosition","customReturnStep","returnAnimation","currentPositionX","getPosition","currentPositionY","calculateVelocityStart","now","lastMousePosition","position_1","distanceX","distanceY","interval","velocityTime","wrapperToWindowScaleX","wrapperToWindowScaleY","innerHeight","velocity_1","throttle","isLocked","panReturnStep","offset","minTarget","maxTarget","newPosition","propsList","getValidPropsFromObject","Context","createContext","wheelStopEventTimer","wheelAnimationTimer","StateProvider","_super","dynamicValues","windowToWrapperScaleX","windowToWrapperScaleY","isDown","distance","offsetX","offsetY","previousWheelEvent","lastScale","maxBounds","handleWheel","onWheelStart","onWheel","onWheelStop","getCallbackProps","checkPanningTarget","tag","tagName","element","checkIsPanningActive","abs","handleSetUpPanning","onPanningStart","handleStartPanning","contains","onPanning","handleStopPanning","onPanningStop","handlePinchStart","onPinchingStart","handlePinch","onPinching","handlePinchStop","onPinchingStop","handleTouchStart","handleTouch","handleTouchStop","handleDbClick","setScale","setPositionX","newPosX","setPositionY","newPosY","setTransform","resetTransform","setDefaultState","forceUpdate","setWrapperComponent","setContentComponent","transform","WebkitTransform","startTime_1","interval_1","clearInterval","posX","posY","onZoomChange","componentDidMount","passiveOption","componentWillUnmount","componentDidUpdate","oldProps","oldState","wrapper","getWindowScaleY","render","loaded","createElement","Provider","TransformWrapper","rest","getOwnPropertySymbols","propertyIsEnumerable","__rest","styles","css","insertAt","head","getElementsByTagName","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","styleInject","TransformComponent","contentRef","context","Component","contextType","HEADER_HEIGHT","VIDEO_POPUP_ID","VIMEO_FORMAT","RegExp","YOUTUBE_FORMAT","RatingOptionItemType","VoteType","rating_id","rating_code","rating_options","percent","average_rating","nickname","detail","created_at","rating_votes","getScrollPosition","scrollPositionY","scrollY","price_range","minimum_price","final_price","dataSource","setActiveProduct","useEmptyGallerySwitcher","isVariant","isWithEmptySwitcher","showLoader","productForGallery","variantsHighPrice","getHighestVariantPrice","productSkuArray","productButtonStyle","button","carouselId","isRecommender","isProductPage","renderOrganizationSchema","renderProductPageContent","renderAdditionalSections","renderCarousel","SourceProductPage","ProductPageComponent","default_country","OverlayReducer","promoExcludedNotice","promo_excluded_notice","configurableProductsAttrs","tabbyWidgetPdp","getTabbyWidgetPdp","tamaraWidgetPdp","getTamaraWidgetPdp","payload","setIsFooterBootomSpaceNeeded","isFooterBottomSpaceNeeded","showOnlyIfLoaded","getIsSizeDisabled","handleSizeChartClick","updateConfigurableVariantAndQty","addToCartWithReturn","getPreviewProduct","getGalleryProduct","normalizeSelectedOptions","firstAttr","atob","expression","placeholder","checkEmptyValue","prevParameters","urlParams","newParameters","getNewParameters","oldValue","currentParameters","selectedProduct","newIndex","updateConfigurableVariant","setQuantity","showError","validateGroup","validator","errorMessages","errorFields","validateConfigurableProduct","filterAddToCartFileErrors","scrollOptionsIntoView","addToCartTriggeredWithError","validateAttributes","attribute_value","v_attribute_value","attributes","updateSelectedValues","type_id","hasError","Promise","reject","addProductToCart","cartId","getMagentoProduct","color_attr_id","selected_options","resolve","SourceContainer","ProductActionsContainer","isVariantsOutOfStock","isSelectedVariantOutOfStock","attributeValidation","isSizeValid","isColorValid","productAttributes","productGender","customAttributeMetadata","attribute_code","stockStatus","getActiveProduct","dir","variantsInStock","stockCount","styleNumber","qty","productSalableQuantity","renderStock","promo_excluded_flag","model_height","model_sample_size","getIsConfigurableAttributeAvailable","PRODUCT_TYPE","configurable","configurableOptionsRef","isReady","innerLabel","isLabelInner","isSize","productPrice","activeType","price_tiers","priceTiers","activeProductPrice","previewProduct","previewProductPrice","meta","isSchemaRequired","variantsCount","offerCount","priceType","simple","tierPrices","isPreview","pdp_widgets_order","getStore","getState","parsedOrder","parse","availableOrder","payment_method","renderTamaraWidget","Tamara","renderTabbyWidget","Tabby","getPriceForWidgets","grouped","maxQuantity","minQuantity","maxSaleQuantity","DEFAULT_MAX_PRODUCTS","magentoProduct","isWishlistEnabled","isPDPLoading","addToCart","isIconEnabled","renderProductWishlistButton","renderPriceWithGlobalSchema","renderSku","renderAddToCartButton","html","productStoryPart","colorLabel","placeHolder","renderSizeAttribute","renderStockStatus","renderQuantityChanger","renderBrand","renderPdpWidgets","renderColorAttribute","renderPromoExcludedNotice","renderModelInformation","renderQuantityAndSize","renderTierPrices","renderAddToCartActionBlock","renderSizeChartPlaceholder","renderSizeChartPopup","renderExpandableProductInfo","renderCustomAndBundleOptions","renderGroupedOptions","renderDownloadableSamples","renderDownloadableLinks","renderProductAlerts","renderAddToCartMobile","setValidator","renderMobileInfoBlock","renderMobile","renderDesktop","SourceProductActions","productOrVariant","ProductType","configurableVariantIndex","objectOf","groupedProductQuantity","clearGroupedProductQuantity","setGroupedProductQuantity","offerType","stockMeta","metaLink","ProductActionsComponent","use_thumbnail_as_swatch","ProductConfigurableAttributesContainer","ProductColorAttributeContainer","cloudinaryStatus","isCloudinaryCDNActive","onActiveImageChange","handleImageClick","handleOverlayClose","setSliderOverlayWidth","setIsZoomedInState","handleTouchEnd","zoomPositionX","zoomPositionY","isPictureBeingMoved","isNextSlide","isDefaultScale","handleMouseUp","handleMouseDown","activeImage","isZoomEnabled","isSliderOverlay","sliderOverlayWidth","gallery","getGalleryPictures","productName","_getProductName","productId","prevState","prevProdId","isZoomDisabled","isZoomTriggered","isDefaultScaleSet","sliderWidth","media_gallery_entries","mediaGallery","thumbnail","smallImageSize","imageSize","srcMedia","types","base","formatImageUrl","media_type","placeholders","SharedTransitionContainer","registerSharedElementDestination","ProductGalleryContainer","prevActiveImage","childrenRaw","childrenHeight","draggableRef","childrenCount","ANIMATION_DURATION","STOP_SLIDE_COUNT","lastImage","renderButton","sliderRef","Slider","AdditionalPicturesComponent","onLoad","isNotZoomedIn","alt","_getAlt","src","_getSrc","mediaData","thumbnailUrl","nextId","nextThumbnailUrl","nextIsNotZoomedIn","SourceProductGalleryBaseImageContainer","disableZoom","ProductGalleryBaseImageContainer","media","isActiveImage","ProductGalleryThumbnailImageContainer","forwardRef","PopupReducer","popupPayload","VideoPopup","hideActivePopup","onPlayClick","video_content","video_title","isVideoZoomed","onZoomedVideoClick","VideoThumbnailContainer","reviewPayload","SizeChartPopupContainer","measurementsAttributes","getMeasurementsAttributes","stringsToReplace","NULL","regExp","matched","size_spec_table_imp","size_spec_table","measurementTables","CM_MEASUREMENT","INCHES_MEASUREMENT","table","removeUnnecessaryStrings","ProductMeasurementsContainer","_getIsActive","_getMix","TabContainer","activeTab","_initActiveTab","onTabClick","htmlName","renderInactiveTabButtons","tabList","_getTabIdArray","_getActiveTab","tabId","Children","TabsContainer","selector","merchantCode","publicKey","source","currency","currencyRate","theme","productType","discount","discountPercentage","percent_off","minimalPriceValue","regular_price","regularPriceValue","finalPrice","calculateFinalPrice","formatedPrice","roundPrice","script_url","TabbyQuery","getWidgetPdp","script","text","childNodes","TabbyPdpContainer","public_key","currency_code","country_code","TamaraWidgetV2","TamaraQuery","tamaraWidgetConfig","lang","isArabicCacheWorkaround","country","doc","getAttribute","TamaraPdpContainer","isPriceAlertEnabled","product_alert_allow_price","isInStockAlertEnabled","product_alert_allow_stock","message","showErrorNotification","handlePriceDropSubscribeAlertPriceDrop","handlePriceDropSubscribe","PRODUCT_ALERT_PRICE_DROP","handlePriceDropSubscribeAlertInStock","PRODUCT_ALERT_IN_STOCK","ProductAlertsQuery","getProductAlertSubscribeMutation","fetchMutation","getErrorMessage","ProductAlertsContainer","meta_description","matchedContent","cleanedUpContent","htmlContent","renderAdditionalDescription","SourceComponent","ProductInformationComponent","onStarRatingClick","isChecked","checked","ReviewStar","tabs","prevTabs","setActiveTab","tab","currentTab","tabName","renderAllTabs","renderTab","renderActiveTab","renderTabs","ProductTabs","ProductTab","BreadcrumbsDispatcher","MetaDispatcher","ProductDispatcher","metaTitle","MetaReducer","store","areReviewsEnabled","reviews_are_enabled","changeHeaderState","changeNavigationState","TOP_NAVIGATION_TYPE","BOTTOM_NAVIGATION_TYPE","setBigOfflineNotice","isBig","updateWithProduct","updateMetaFromProduct","goToPreviousNavigationState","addRecentlyViewedProduct","isProductInformationTabEmpty","isProductAttributesTabEmpty","htmlElement","DOMParser","parseFromString","innerHTML","getAttributesWithValues","canonical_url","categories","meta_keyword","meta_title","product_links","reviews","short_description","getAreDetailsLoaded","isAttributesTabEmpty","isInformationTabEmpty","getActiveProductDataSource","getUseEmptyGallerySwitcher","getIsVariant","activeMediaGallery","productAttr","activeAttr","attrValue","currAttr","activeAttrValue","stateProduct","productID","isSingleProduct","getProductRequestFilter","PDP","onBackClick","back","status","displayProductStockStatus","display_product_stock_status","isPricePreview","getOfferCount","getOfferType","getStockMeta","getMetaLink","prevSelectedProduct","STOCK_TYPE","IN_STOCK","dynamicPrice","dynamic_price","enteredOptions","bundle","ProductContainer","handleOptionClick","isReplace","isAvailable","getSubHeading","attribute_values","isInvalid","isThumbnail","renderConfigurableAttributeValue","ProductConfigurableAttributes","ProductColorAttributeComponent","imageRef","sliderOverlayRef","shouldRemoveAnimation","animationLoadTimeout","animationTimeoutTimeout","preloadedImage","sharedElementWasEverDetected","handleScroll","topBanner","topBannerHeight","renderAdditionalPicture","updateSharedDestinationElement","banner","bannerHeight","setProperty","prevProductId","prevPathname","newTranslate","isArabic","renderSlide","ratio","isOverlay","zoomScale","renderImage","renderVideo","showCrumbs","showArrows","isInteractionDisabled","onSliderClick","isPDPSlider","renderStageGlide","isPdpDesktopSlider","renderCloseButton","renderSlider","renderSliderOverlay","renderDesktopSlider","ProductGalleryComponent","nextScale","INITIAL_SCALE","TRANSFORMATION_SPEED","TRANSFORMATION_DELAY","file","PRODUCT_MEDIA","isPreventBlink","SourceProductGalleryBaseImage","ProductGalleryBaseImageComponent","display","ProductGalleryBaseImage","srcset","formatImageSetUrl","sizes","renderMedia","SourceProductGalleryThumbnailImage","oneOfType","ProductGalleryThumbnailImageComponent","loadVimeoLibrary","loadYouTubeLibrary","all","vimeoPromise","youTubePromise","cancel","videoId","Vimeo","vimeoComponent","autoplay","YouTube","youTubeComponent","containerClassName","opts","playerVars","vimeo","youTube","video_url","exec","vimeoId","_renderVimeoVideo","youtubeId","_renderYoutubeVideo","_renderVideoContent","renderPlayIcon","VideoThumbnail","division","productDivisionOptions","product_division","isFootwear","isApparel","isKids","isUnisex","renderKidsTab","isMen","renderMenTab","isWomen","renderWomenTab","renderKidsFootwearTab","renderKidsClothingTab","renderMenFootwearTab","renderMenClothingTab","renderWomenFootwearTab","renderWomenClothingTab","renderProductMeasurements","SizeChartPopupComponent","cms","cells","tableWidth","onMouseOver","onButtonClick","renderMeasurementsTable","cell","setCellClassName","parentNode","querySelectorAll","cellIndex","currentCellX","currentCellY","trunc","cellX","cellY","clearCells","measurementsAttribute","onMouseLeave","renderMeasurementsButtons","renderTitleContent","renderMeasurementsTables","renderNotice","ProductMeasurementsComponent","TabComponent","renderTabButtons","firstTab","notActive","cloneElement","TabsComponent","existTabbyProductWidget","TabbyPromo","renderWidget","INTERVAL_RATE","prevFormatedPrice","TabbyPdpComponent","refresh","amount","inline-type","TamaraPdpComponent","prevId","isNotSafariOrIos","ios","safari","showNewReviewPopup","htmlWithItemProp","renderShortDescriptionContent","renderOfferCount","originalPrice","minFinalPrice","maxFinalPrice","renderSchema","renderPrice","renderPriceWithSchema","renderRatingSummary","renderReviewButton","inStock","baseType","notConfigured","OUT_OF_STOCK","renderWishlistButton","renderCompareButton","renderReviewSection","renderSkuAndStock","renderShortDescription","renderConfigurableOptions","isWithoutPriceTotal","Product","renderPriceDropSubscribeButton","renderInStockSubscribeButton","ProductAlerts","cleanDescription","htmlString","trim","nodeName","isHTMLWhiteSpaceOrUndefined","ProductGallery","ProductReviews","ProductAttributes","tabMap","PRODUCT_INFORMATION","shouldTabRender","renderProductInformationTab","PRODUCT_ATTRIBUTES","renderProductAttributesTab","PRODUCT_REVIEWS","renderProductReviewsTab","shouldTabsRender","renderProductTabs","REVIEW_POPUP_ID","renderReviewPopup","ReviewDispatcher","reviewRatings","addReview","submitProductReview","hideActiveOverlay","goToPreviousHeaderState","onReviewSubmitSuccess","_onReviewSubmitSuccess","_onStarRatingClick","onReviewError","_onReviewError","reviewData","firstname","ratingData","isSubmitted","invalidFields","reviewsAreNotValid","form","fields","rating_data","transformToNameValuePair","product_sku","fieldName","ProductReviewFormContainer","ratingTitleMap","1","2","3","4","5","rating","validationRule","validateOn","renderReviewStar","renderReviewRating","summary","renderReviewRatingWrapper","addRequiredTag","textarea","onSubmit","renderReviewFormContent","ProductReviewForm","_processResponse","relatedSKUs","links","link","linked_product_sku","productsSkuArray","notRequireInfo","total_count","prepareRequest","indexedBySku","getIndexedProduct","link_type","associated","LinkedProductsDispatcher"],"mappings":"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","file":"static/js/product.59b4465d.chunk.js","sourcesContent":["/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport { default } from './ProductPage.container';\n","/* eslint-disable @scandipwa/scandipwa-guidelines/export-level-one */\n/*\n * @category Puma\n * @author Deniss Dubinins \n * @license http://opensource.org/licenses/OSL-3.0 The Open Software License 3.0 (OSL-3.0)\n * @copyright Copyright (c) 2022 Scandiweb, Inc (https://scandiweb.com)\n */\n\nimport MenuQuery from 'Query/Menu.query';\nimport { Menu } from 'SourceUtil/Menu/Menu';\nimport { makeCancelable } from 'Util/Promise';\nimport { prepareQuery } from 'Util/Query';\nimport { executeGet } from 'Util/Request';\nimport { hash } from 'Util/Request/Hash';\nimport { ONE_MONTH_IN_SECONDS } from 'Util/Request/QueryDispatcher';\n\nexport * from 'SourceUtil/Menu/Menu';\n\n/** @namespace Util/Menu/getMenuOptions */\nconst getMenuOptions = () => {\n const {\n header_content: { header_menu } = {}\n } = window.contentConfiguration;\n\n return { identifier: header_menu };\n};\n\n/** @namespace Util/Menu/fetchData */\nconst fetchData = (rawQueries, onSuccess = () => { }, onError = () => { }) => {\n const preparedQuery = prepareQuery(rawQueries);\n const { query, variables } = preparedQuery;\n const queryHash = hash(query + JSON.stringify(variables));\n\n if (!window.dataCache) {\n window.dataCache = {};\n }\n\n if (window.dataCache[queryHash]) {\n onSuccess(window.dataCache[queryHash]);\n\n return;\n }\n\n const promise = makeCancelable(\n executeGet(preparedQuery, 'DataContainer', ONE_MONTH_IN_SECONDS)\n );\n\n promise.promise.then(\n /** @namespace Scandipwa/Util/Menu/fetchData/then */\n (response) => {\n window.dataCache[queryHash] = response;\n onSuccess(response);\n },\n\n /** @namespace Scandipwa/Util/Menu/fetchData/then/onError/catch */\n (err) => onError(err)\n );\n};\n\n/** @namespace Scandipwa/Util/Menu/fetchMenu */\nexport const fetchMenu = (callback, force = false) => {\n if ((window.headerMenuLoading || window.headerMenu) && !force) {\n if (window.headerMenuLoading) {\n const timeout = 300;\n\n setTimeout(() => fetchMenu(callback, force), timeout);\n\n return;\n }\n\n callback(window.headerMenu);\n\n return;\n }\n\n window.headerMenuLoading = true;\n\n fetchData(\n [MenuQuery.getQuery(getMenuOptions())],\n ({ menu }) => {\n window.headerMenu = menu;\n window.headerMenuLoading = false;\n\n callback(menu);\n }\n );\n};\n\nexport default new Menu();\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport { default } from './CmsBlock.container';\n","/*\n * @category Puma\n * @author Deniss Dubinins \n * @license http://opensource.org/licenses/OSL-3.0 The Open Software License 3.0 (OSL-3.0)\n * @copyright Copyright (c) 2022 Scandiweb, Inc (https://scandiweb.com)\n */\n\nexport { default, getSortedItems, fetchMenu } from './Menu';\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\n/* eslint-disable no-param-reassign */\n\nexport const TYPE_CUSTOM_URL = 0;\nexport const TYPE_CMS_PAGE = 1;\nexport const TYPE_CATEGORY = 2;\n\n/**\n * Given an array of menu items, returns a copy of the array, sorted by their parent ID, then by their sort order (position)\n *\n * @param unsortedItems an array of items to be sorted\n * @returns {array} the sorted array\n * @namespace Util/Menu/getSortedItems\n */\nexport const getSortedItems = (unsortedItems) => Array.from(unsortedItems).sort((\n { parent_id: PID, position: P },\n { parent_id: prevPID, position: prevP }\n) => (PID - prevPID) || (P - prevP));\n\n/** @namespace Util/Menu */\nexport class Menu {\n getMenuUrl({ url, url_type, category_id }) {\n switch (url_type) {\n case TYPE_CATEGORY:\n return {\n pathname: url,\n search: '',\n state: { category: category_id }\n };\n case TYPE_CMS_PAGE:\n return {\n pathname: url,\n search: '',\n state: { page: true }\n };\n default:\n return url;\n }\n }\n\n getMenuData({\n cms_page_identifier,\n url,\n url_type,\n category_id,\n ...item\n }) {\n return {\n ...item,\n url: this.getMenuUrl({ url, url_type, category_id }),\n children: {}\n };\n }\n\n setToValue(obj, path, value) {\n // eslint-disable-next-line fp/no-let\n let i;\n\n path = path.split('.');\n // eslint-disable-next-line fp/no-loops\n for (i = 0; i < path.length - 1; i++) {\n obj = obj[path[i]];\n }\n obj[path[i]] = value;\n }\n\n createItem(data) {\n const { parent_id, item_id } = data;\n\n if (parent_id === 0) {\n this.menuPositionReference[item_id] = [];\n this.menu[item_id] = this.getMenuData(data);\n } else if (this.menuPositionReference[parent_id] !== undefined) {\n this.menuPositionReference[item_id] = [\n ...this.menuPositionReference[parent_id],\n parent_id\n ];\n\n this.setToValue(\n this.menu,\n `${this.menuPositionReference[item_id].join('.children.')}.children.${item_id}`,\n this.getMenuData(data)\n );\n }\n }\n\n reduce({ items: unsortedItems }) {\n this.menu = {};\n this.menuPositionReference = {};\n\n getSortedItems(unsortedItems).forEach((realMenuItem) => {\n this.createItem(realMenuItem);\n });\n\n return this.menu;\n }\n}\n\nexport default new Menu();\n","import PropTypes from 'prop-types';\n\nimport CmsBlockQuery from 'Query/CmsBlock.query';\nimport { CmsBlockContainer as SourceCmsBlockContainer } from 'SourceComponent/CmsBlock/CmsBlock.container';\n\n/** @namespace Scandipwa/Component/CmsBlock/Container */\nexport class CmsBlockContainer extends SourceCmsBlockContainer {\n static propTypes = {\n ...this.propTypes,\n setIsLoading: PropTypes.func\n };\n\n static defaultProps = {\n ...this.defaultProps,\n setIsLoading: () => {}\n };\n\n containerProps = () => {\n const { cmsBlock } = this.state;\n const { customComponents = {} } = this.props;\n return { cmsBlock, customComponents };\n };\n\n _getCmsBlock() {\n const { identifier, setIsLoading } = this.props;\n\n setIsLoading(true);\n\n this.fetchData(\n [CmsBlockQuery.getQuery({ identifiers: [identifier] })],\n ({ cmsBlocks: { items } }) => {\n if (!items.length) {\n return;\n }\n\n this.setState({ cmsBlock: items[0] });\n setIsLoading(false);\n }\n );\n }\n}\n\nexport default CmsBlockContainer;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport { Field } from 'Util/Query';\n\n/**\n * CMS Blocks Query\n * @class CmsBlocksQuery\n * @namespace Query/CmsBlock/Query */\nexport class CmsBlockQuery {\n /**\n * get CMS Block query\n * @param {{identifier: String, title: String, content: String}} options A object containing different aspects of query, each item can be omitted\n * @return {Field} CMS Block query\n * @memberof CmsBlocksQuery\n */\n getQuery({ identifiers }) {\n if (!identifiers) {\n throw new Error('Missing argument `options`');\n }\n\n return new Field('cmsBlocks')\n .addArgument('identifiers', '[String]', identifiers)\n .addField(this._getItemsField())\n .setAlias('cmsBlocks');\n }\n\n _getItemFields() {\n return [\n 'title',\n 'content',\n 'identifier',\n 'disabled'\n ];\n }\n\n _getItemsField() {\n return new Field('items')\n .addFieldList(this._getItemFields());\n }\n}\n\nexport default new CmsBlockQuery();\n","/* eslint-disable import/prefer-default-export */\n\n/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport const HOME_TAB = 'HOME_TAB';\nexport const MENU_TAB = 'MENU_TAB';\nexport const ACCOUNT_TAB = 'ACCOUNT_TAB';\nexport const CART_TAB = 'CART_TAB';\nexport const CHECKOUT_TAB = 'CHECKOUT_TAB';\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\n\nexport * from 'SourceComponent/NavigationTabs/NavigationTabs.config';\nexport const SEARCH_TAB = 'SEARCH_TAB';\nexport const NAVIGATION_SEARCH = 'navigation_search';\nexport const MOBILE_MENU = 'MOBILE_MENU';\nexport const EXTRA_LARGE_SCREEN_WIDTH = 1181;\nexport const TIMEOUT_500 = 500;\nexport const TIMEOUT_20 = 20;\nexport const HISTORY_STATE_LENGTH = 4;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\n\nimport { MenuQuery as SourceMenuQuery } from 'SourceQuery/Menu.query';\n\n/**\n * Menu Query\n * @class MenuQuery\n * @namespace Scandipwa/Query/Menu/Query */\nexport class MenuQuery extends SourceMenuQuery {\n _getMenuItemFields() {\n return [\n 'url',\n 'icon',\n 'title',\n 'item_id',\n 'position',\n 'url_type',\n 'parent_id',\n 'is_active',\n 'item_class',\n 'category_id',\n 'cms_page_identifier',\n 'category_image',\n 'show_subcategory_menu_images'\n ];\n }\n}\n\nexport default new MenuQuery();\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport { default } from './Breadcrumb.component';\n","/* eslint-disable @scandipwa/scandipwa-guidelines/only-render-in-component */\n/* eslint-disable react/no-unknown-property */\n/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\n\nimport { connect } from 'react-redux';\n\nimport { PREVIOUS_CATEGORY_URL_COOKIE } from 'Route/CategoryPage/CategoryPage.config';\nimport { Breadcrumb as SourceBreadcrumb } from 'SourceComponent/Breadcrumb/Breadcrumb.component';\nimport { updateUrlRewrite } from 'Store/UrlRewrites/UrlRewrites.action';\nimport BrowserDatabase from 'Util/BrowserDatabase';\nimport history from 'Util/History';\n\nimport 'SourceComponent/Breadcrumb/Breadcrumb.style';\nimport './Breadcrumb.extended.style';\n\n/** @namespace Scandipwa/Component/Breadcrumb/Component/mapStateToProps */\nexport const mapStateToProps = () => ({});\n\n/** @namespace Scandipwa/Component/Breadcrumb/Component/mapDispatchToProps */\nexport const mapDispatchToProps = (dispatch) => ({\n updateUrlRewrite: (urlRewrite, requestedUrl) => dispatch(updateUrlRewrite(urlRewrite, requestedUrl))\n});\n\n/** @namespace Scandipwa/Component/Breadcrumb/Component */\nexport class BreadcrumbComponent extends SourceBreadcrumb {\n onBreadcrumbClick(e, url, category_id) {\n e.preventDefault();\n\n const previousCategoryUrl = BrowserDatabase.getItem(PREVIOUS_CATEGORY_URL_COOKIE);\n\n if (url === previousCategoryUrl) {\n history.goBack();\n }\n\n if (category_id) {\n const { updateUrlRewrite } = this.props;\n\n updateUrlRewrite({\n id: parseInt(category_id, 10),\n type: 'CATEGORY',\n blockBERequest: true // Do not send request to BE for urlRewrite retreival\n }, url);\n }\n\n history.push(url);\n }\n\n renderLink() {\n const {\n url,\n index,\n isDisabled,\n category_id\n } = this.props;\n\n const sanitizedUrl = typeof url === 'object' ? url.pathname : url;\n\n return (\n this.onBreadcrumbClick(e, url, category_id) }\n tabIndex={ isDisabled ? '-1' : '0' }\n >\n \n \n { this.renderName() }\n \n \n \n );\n }\n\n renderName() {\n const { name } = this.props;\n\n if (!name) {\n return null;\n }\n\n return name;\n }\n\n render() {\n const { index, url, isDisabled } = this.props;\n\n const isLoading = !url;\n\n if (isLoading && isDisabled) {\n return null;\n }\n\n return (\n \n { this.renderLink() }\n \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(BreadcrumbComponent);\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\nimport PropTypes from 'prop-types';\n\nimport CmsBlockQuery from 'Query/CmsBlock.query';\nimport DataContainer from 'Util/Request/DataContainer';\n\nimport CmsBlock from './CmsBlock.component';\n\n/** @namespace Component/CmsBlock/Container */\nexport class CmsBlockContainer extends DataContainer {\n static propTypes = {\n identifier: PropTypes.string.isRequired\n };\n\n state = {\n cmsBlock: {}\n };\n\n __construct(props) {\n super.__construct(props, 'CmsBlockContainer');\n }\n\n containerProps() {\n const { blockType } = this.props;\n const { cmsBlock } = this.state;\n\n return { cmsBlock, blockType };\n }\n\n componentDidMount() {\n this._getCmsBlock();\n }\n\n componentDidUpdate(prevProps) {\n const { identifier } = this.props;\n const { identifier: prevIdentifier } = prevProps;\n\n if (identifier !== prevIdentifier) {\n this._getCmsBlock();\n }\n }\n\n _getCmsBlock() {\n const { identifier } = this.props;\n\n this.fetchData(\n [CmsBlockQuery.getQuery({ identifiers: [identifier] })],\n ({ cmsBlocks: { items } }) => {\n if (!items.length) {\n return;\n }\n\n this.setState({ cmsBlock: items[0] });\n }\n );\n }\n\n render() {\n return (\n \n );\n }\n}\n\nexport default CmsBlockContainer;\n","/* eslint-disable react/no-unknown-property */\nimport Html from 'Component/Html';\nimport { CmsBlock as SourceCmsBlock } from 'SourceComponent/CmsBlock/CmsBlock.component';\n\n/**\n * Cms Block\n * @class CmsBlock\n * @namespace Scandipwa/Component/CmsBlock/Component */\nexport class CmsBlockComponent extends SourceCmsBlock {\n render() {\n const {\n cmsBlock: {\n identifier,\n content,\n disabled\n }\n } = this.props;\n\n if (disabled) {\n return null;\n }\n\n if (identifier === undefined) {\n return this.renderPlaceholder();\n }\n\n const { customComponents = {} } = this.props;\n\n return (\n \n \n \n );\n }\n}\n\nexport default CmsBlockComponent;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport Html from 'Component/Html';\nimport { ChildrenType } from 'Type/Common.type';\n\nimport './CmsBlock.style';\n\n/**\n * Cms Block\n * @class CmsBlock\n * @namespace Component/CmsBlock/Component\n */\nexport class CmsBlock extends PureComponent {\n static propTypes = {\n cmsBlock: PropTypes.shape({\n identifier: PropTypes.string,\n content: PropTypes.string,\n disabled: PropTypes.bool\n }),\n blockType: PropTypes.string,\n children: ChildrenType\n };\n\n static defaultProps = {\n cmsBlock: {},\n children: [],\n blockType: ''\n };\n\n renderPlaceholder() {\n const {\n children\n } = this.props;\n\n if (children.length) {\n return children;\n }\n\n return null;\n }\n\n render() {\n const {\n cmsBlock: {\n identifier,\n content,\n disabled\n },\n blockType\n } = this.props;\n\n if (disabled) {\n return null;\n }\n\n if (identifier === undefined) {\n return this.renderPlaceholder();\n }\n\n return (\n \n \n \n );\n }\n}\n\nexport default CmsBlock;\n","/* eslint-disable @scandipwa/scandipwa-guidelines/only-render-in-component */\n/* eslint-disable react/no-unknown-property */\n/* eslint-disable @scandipwa/scandipwa-guidelines/jsx-no-conditional */\n/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\n\nimport PropTypes from 'prop-types';\n\nimport Breadcrumb from 'Component/Breadcrumb';\nimport Link from 'Component/Link';\nimport { Breadcrumbs as SourceBreadcrumbs } from 'SourceComponent/Breadcrumbs/Breadcrumbs.component';\nimport { DeviceType } from 'Type/Device.type';\nimport { appendWithStoreCode } from 'Util/Url';\n\nimport { DESKTOP_MIN_WIDTH } from './Breadcrumbs.config';\n\nimport './Breadcrumbs.style';\n\n/** @namespace Scandipwa/Component/Breadcrumbs/Component */\nexport class BreadcrumbsComponent extends SourceBreadcrumbs {\n static propTypes = {\n ...super.propTypes,\n device: DeviceType.isRequired,\n search: PropTypes.string\n };\n\n static defaultProps = {\n search: ''\n };\n\n state = {\n isDesktop: false\n };\n\n updateWindowDimensions = this.updateWindowDimensions.bind(this);\n\n componentDidMount() {\n this.updateWindowDimensions();\n window.addEventListener('resize', this.updateWindowDimensions);\n }\n\n componentWillUnmount() {\n window.removeEventListener('resize', this.updateWindowDimensions);\n }\n\n updateWindowDimensions() {\n const { isDesktop } = this.state;\n const newIsDesktop = (window.innerWidth >= DESKTOP_MIN_WIDTH);\n\n if (isDesktop !== newIsDesktop) {\n this.setState({ isDesktop: newIsDesktop });\n }\n }\n\n renderMobileBreadCrumb() {\n const { breadcrumbs } = this.props;\n const mobileBreadcrumb = breadcrumbs.length > 2\n ? breadcrumbs[breadcrumbs.length - 2] : breadcrumbs[breadcrumbs.length - 1];\n const { name, url } = mobileBreadcrumb || {};\n\n if (breadcrumbs.length === 1) {\n return null;\n }\n\n return (\n \n );\n }\n\n renderDesktopBreadcrumbs() {\n const { breadcrumbs } = this.props;\n\n return breadcrumbs.length\n ? this.renderBreadcrumbList(breadcrumbs)\n : this.renderBreadcrumb({}, 0);\n }\n\n renderHomeBreadcrumb() {\n const { breadcrumbs, search } = this.props;\n\n if (!breadcrumbs.length && !search) {\n return null;\n }\n\n return (\n 1) } }\n to=\"/\"\n >\n { __('Home') }\n \n );\n }\n\n renderBreadcrumbs() {\n const { isDesktop } = this.state;\n const { search } = this.props;\n\n if (search) {\n return (\n \n { `${ __('Search results for:') } '${ search }'` }\n \n );\n }\n\n return (\n \n { !isDesktop ? this.renderMobileBreadCrumb() : this.renderDesktopBreadcrumbs() }\n \n );\n }\n\n renderBreadcrumbList(breadcrumbs) {\n return breadcrumbs.map((_, i) => this.renderBreadcrumb(\n breadcrumbs[breadcrumbs.length - 1 - i], i\n ));\n }\n\n renderBreadcrumb({ url, name, category_id }, i) {\n const { breadcrumbs } = this.props;\n const isDisabled = !url || breadcrumbs.length - 1 === i;\n\n return (\n \n );\n }\n\n render() {\n const { areBreadcrumbsVisible } = this.props;\n\n if (\n !areBreadcrumbsVisible\n || location.pathname === appendWithStoreCode('/')\n || location.pathname === '/'\n ) {\n return null;\n }\n\n return (\n \n { this.renderHomeBreadcrumb() }\n { this.renderBreadcrumbs() }\n \n );\n }\n}\n\nexport default BreadcrumbsComponent;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport ProductListQuery from 'Query/ProductList.query';\nimport { updateNoMatch } from 'Store/NoMatch/NoMatch.action';\nimport { showNotification } from 'Store/Notification/Notification.action';\nimport {\n updateInfoLoadStatus,\n updateProductListInfo\n} from 'Store/ProductListInfo/ProductListInfo.action';\nimport { QueryDispatcher } from 'Util/Request';\n\n/**\n * Product List Info Dispatcher\n * @class ProductListInfoDispatcher\n * @extends QueryDispatcher\n * @namespace Store/ProductListInfo/Dispatcher\n */\nexport class ProductListInfoDispatcher extends QueryDispatcher {\n __construct() {\n super.__construct('ProductListInfo');\n }\n\n onSuccess({ products }, dispatch, options) {\n const {\n args: {\n filter\n }\n } = options;\n\n dispatch(updateProductListInfo(products, filter));\n }\n\n onError(error, dispatch) {\n dispatch(showNotification('error', __('Error fetching Product List Information!'), error));\n dispatch(updateNoMatch(true));\n }\n\n prepareRequest(options, dispatch) {\n dispatch(updateInfoLoadStatus(true));\n\n return ProductListQuery.getQuery({\n ...options,\n requireInfo: true\n });\n }\n}\n\nexport default new ProductListInfoDispatcher();\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport { Field } from 'Util/Query';\n/**\n * Menu Query\n * @class MenuQuery\n * @namespace Query/Menu/Query */\nexport class MenuQuery {\n /**\n * get Menu query\n * @param {{identifier: String}} options A object containing different aspects of query, each item can be omitted\n * @return {Field} Menu query\n * @memberof MenuQuery\n */\n getQuery({ identifier }) {\n return new Field('scandiwebMenu')\n .addArgument('identifier', 'String!', identifier)\n .addFieldList(this._getMenuFields())\n .setAlias('menu');\n }\n\n _getMenuFields() {\n return [\n 'menu_id', 'is_active', 'css_class', this._getMenuItemsField()\n ];\n }\n\n _getMenuItemsField() {\n return new Field('items')\n .addFieldList(this._getMenuItemFields());\n }\n\n _getMenuItemFields() {\n return [\n 'url',\n 'icon',\n 'title',\n 'item_id',\n 'position',\n 'url_type',\n 'parent_id',\n 'is_active',\n 'item_class',\n 'category_id',\n 'cms_page_identifier'\n ];\n }\n}\n\nexport default new MenuQuery();\n","/* eslint-disable react/no-array-index-key */\n/* eslint-disable @scandipwa/scandipwa-guidelines/jsx-no-conditional */\n/* eslint-disable react/prop-types */\n/* eslint-disable max-lines */\n/* eslint-disable react/no-unknown-property */\n/* eslint-disable @scandipwa/scandipwa-guidelines/only-render-in-component */\n/* eslint-disable react/boolean-prop-naming */\n/* eslint-disable max-len */\n/* eslint-disable no-lonely-if */\n/* eslint-disable no-magic-numbers */\n/* eslint-disable jsx-a11y/interactive-supports-focus */\n/* eslint-disable jsx-a11y/click-events-have-key-events */\n/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\n\nimport PropTypes from 'prop-types';\nimport { createRef, lazy, Suspense } from 'react';\n\nimport Breadcrumbs from 'Component/Breadcrumbs';\nimport CategoryItemsCount from 'Component/CategoryItemsCount';\nimport CategoryProductList from 'Component/CategoryProductList';\nimport CategorySort from 'Component/CategorySort';\nimport { DESKTOP_MIN_WIDTH, EXTRA_LARGE_DESKTOP_MIN_WIDTH } from 'Component/CategorySort/CategorySort.config';\nimport ContentWrapper from 'Component/ContentWrapper';\nimport Loader from 'Component/Loader';\nimport MenuFilters from 'Component/MenuFilters';\nimport SelectedFilters from 'Component/SelectedFilters';\nimport TextPlaceholder from 'Component/TextPlaceholder';\nimport { SCROLL_TO_TOP_TIMEOUT } from 'Route/CategoryPage/CategoryPage.config';\nimport { CategoryPage as SourceCategoryPage } from 'SourceRoute/CategoryPage/CategoryPage.component';\nimport { HistoryType, LocationType } from 'Type/Router.type';\nimport { isCrawler, isSSR } from 'Util/Browser';\nimport { handleIosStickyHeader } from 'Util/PromoBanner/PromoBanner';\n\nimport './CategoryPage.style';\nimport './CategoryPage.style.extended.scss';\n\nexport const ScrollToTopButton = lazy(() => import(/* webpackMode: \"lazy\", webpackChunkName: \"footer\" */ 'Component/ScrollToTopButton/ScrollToTopButton.component'));\nexport const Html = lazy(() => import(/* webpackMode: \"lazy\", webpackChunkName: \"cms\" */ 'Component/Html'));\nexport const CategoryFilterOverlay = lazy(() => import(/* webpackMode: \"lazy\", webpackChunkName: \"filters\" */ 'Component/CategoryFilterOverlay'));\n\n/** @namespace Scandipwa/Route/CategoryPage/Component */\nexport class CategoryPageComponent extends SourceCategoryPage {\n static propTypes = {\n ...super.propTypes,\n toggleOverlayByKey: PropTypes.func.isRequired,\n location: LocationType.isRequired,\n history: HistoryType.isRequired,\n sortKey: PropTypes.string.isRequired,\n sortDirection: PropTypes.string.isRequired,\n isInfoLoading: PropTypes.bool.isRequired,\n requestCategoryFromFilters: PropTypes.func.isRequired,\n activeOverlay: PropTypes.string,\n isNavOnTop: PropTypes.bool.isRequired,\n isSearchPage: PropTypes.bool.isRequired,\n baseUrl: PropTypes.string,\n onMoreFiltersClick: PropTypes.func.isRequired,\n showMoreFilters: PropTypes.bool.isRequired,\n showPopup: PropTypes.func.isRequired\n };\n\n static defaultProps = {\n ...super.defaultProps,\n activeOverlay: undefined,\n baseUrl: ''\n };\n\n state = {\n isScrollToTopButtonRender: false,\n isDesktop: false,\n isExtraLargeDesktop: false,\n topDetailsHeight: undefined,\n filterWrappersHeight: undefined,\n prevFilterWrappersHeight: undefined,\n menuFiltersHeight: undefined,\n categoryFiltersHeight: undefined,\n sizeFiltersHeight: undefined,\n areMobileFiltersOpen: false,\n isMiscellaneousRendered: false,\n previousGenderFilter: {}, // if this is to be applied to all filters, BE solution would be better.\n isScrollFrozen: false\n };\n\n topDetailsRef = createRef();\n\n filtersRef = createRef();\n\n filtersInnerWrapperPlaceholderRef = createRef();\n\n lastScroll = 0;\n\n onFilterButtonClick = this.onFilterButtonClick.bind(this);\n\n updateWindowDimensions = this.updateWindowDimensions.bind(this);\n\n onHeightUpdate = this.onHeightUpdate.bind(this);\n\n renderSelectedFilters = this.renderSelectedFilters.bind(this);\n\n componentDidMount() {\n this.updateWindowDimensions();\n window.addEventListener('resize', this.updateWindowDimensions);\n handleIosStickyHeader();\n\n window.addEventListener('scroll', this.handleStickyFilters);\n this.freezeScroll();\n }\n\n componentDidUpdate(prevProps) {\n const { filter: prevFilter } = prevProps;\n const { filter: currFilter } = this.props;\n\n if (JSON.stringify(currFilter) !== JSON.stringify(prevFilter) && this.topDetailsRef.current) {\n this.topDetailsRef.current.scrollIntoView({ behavior: 'smooth' });\n document.body.style.overflow = 'hidden';\n setTimeout(() => {\n document.body.style.overflow = 'initial';\n }, SCROLL_TO_TOP_TIMEOUT);\n }\n\n const { isDesktop } = this.state;\n\n if (isDesktop) {\n const { filterWrappersHeight, topDetailsHeight } = this.state;\n\n if (this.topDetailsRef.current && topDetailsHeight !== this.topDetailsRef.current.clientHeight) {\n this.setTopDetailsHeight(this.topDetailsRef.current.clientHeight);\n }\n\n if (this.filtersRef.current && filterWrappersHeight !== this.filtersRef.current.clientHeight) {\n this.setFilterWrappersHeight(this.filtersRef.current.clientHeight);\n }\n }\n }\n\n componentWillUnmount() {\n window.removeEventListener('resize', this.updateWindowDimensions);\n window.removeEventListener('scroll', this.handleStickyFilters);\n this.unfreezeScroll();\n }\n\n freezeScroll() {\n const { isMobile } = this.props;\n\n if (isMobile && window.backButtonFromPDP) {\n document.body.style.overflow = 'hidden';\n window.backButtonFromPDP = false;\n this.setState({ isScrollFrozen: true });\n setInterval(() => {\n this.unfreezeScroll();\n }, 1500);\n }\n }\n\n unfreezeScroll() {\n document.body.style.overflow = 'initial';\n this.setState({ isScrollFrozen: false });\n }\n\n resetAreMobileFiltersOpen = () => {\n this.setState({ areMobileFiltersOpen: false });\n };\n\n onFilterButtonClick() {\n const { showPopup, totalItems, selectedFilters } = this.props;\n\n showPopup({\n title: __('Filters'),\n totalItems,\n selectedFilters\n });\n\n this.setState({ areMobileFiltersOpen: true });\n }\n\n updateWindowDimensions() {\n const { isDesktop, isExtraLargeDesktop } = this.state;\n const newIsDesktop = (window.innerWidth >= DESKTOP_MIN_WIDTH);\n const newIsExtraLargeDesktop = (window.innerWidth >= EXTRA_LARGE_DESKTOP_MIN_WIDTH);\n\n if (isDesktop !== newIsDesktop) {\n this.setState({ isDesktop: newIsDesktop });\n }\n\n if (isExtraLargeDesktop !== newIsExtraLargeDesktop) {\n this.setState({ isExtraLargeDesktop: newIsExtraLargeDesktop });\n }\n }\n\n setTopDetailsHeight = (value) => {\n this.setState({ topDetailsHeight: value });\n };\n\n setFilterWrappersHeight = (value) => {\n const { filterWrappersHeight } = this.state;\n this.setState({\n filterWrappersHeight: value,\n prevFilterWrappersHeight: filterWrappersHeight\n });\n };\n\n setMenuFiltersHeight = (value) => {\n this.setState({ menuFiltersHeight: value });\n };\n\n setCategoryFiltersHeight = (value) => {\n this.setState({ categoryFiltersHeight: value });\n };\n\n setSizeFiltersHeight = (value) => {\n this.setState({ sizeFiltersHeight: value });\n };\n\n setIsMiscellaneousRendered = (value) => {\n this.setState({ isMiscellaneousRendered: value });\n };\n\n renderSelectedFilters() {\n const { selectedInfoFilter, filters } = this.props;\n\n return (\n \n );\n }\n\n renderMiscellaneous() {\n const { isMatchingListFilter, isInfoLoading } = this.props;\n const { isDesktop, isMiscellaneousRendered } = this.state;\n\n if ((!isMatchingListFilter || isInfoLoading) && !isDesktop && !isMiscellaneousRendered) {\n return (\n <>\n
\n \n
\n
\n \n
\n \n );\n }\n\n if (!isMiscellaneousRendered) {\n this.setIsMiscellaneousRendered(true);\n }\n\n if (!isDesktop) {\n return (\n
\n { this.renderFilterButton() }\n { this.renderCategorySort() }\n { this.renderSelectedFilters() }\n
\n );\n }\n\n return (\n <>\n \n
\n { this.renderFilterInnerWrapper() }\n
\n { this.renderMoreFiltersButton() }\n { this.renderCategorySort() }\n \n );\n }\n\n handleStickyFilters = () => {\n const { isMobile } = this.props;\n const { areMobileFiltersOpen } = this.state;\n\n const stickyClass = 'CategoryPage-Miscellaneous_is_Sticky';\n const stickyFilters = document.getElementsByClassName('CategoryPage-Miscellaneous')[0];\n const { pageYOffset: currentScroll } = window;\n\n if (currentScroll < this.lastScroll || !isMobile) {\n stickyFilters.classList.add(stickyClass);\n } else if (currentScroll > this.lastScroll && !areMobileFiltersOpen && isMobile) {\n stickyFilters.classList.remove(stickyClass);\n }\n\n this.lastScroll = currentScroll;\n };\n\n onHeightUpdate() {\n const {\n prevFilterWrappersHeight\n } = this.state;\n const {\n current: {\n clientHeight\n } = {}\n } = this.filtersRef;\n\n if (clientHeight !== prevFilterWrappersHeight) {\n CSS.setVariable(\n this.filtersInnerWrapperRef,\n 'filter-wrapper-top',\n 'calc(var(--header-height) - 400px)'\n );\n }\n }\n\n renderFilterInnerWrapper() {\n const {\n isDesktop,\n areMobileFiltersOpen\n } = this.state;\n\n const { isNavOnTop } = this.props;\n\n if (!isDesktop && !areMobileFiltersOpen) {\n return null;\n }\n\n return (\n \n { isNavOnTop ? this.renderMenuFilters() : this.renderFilterOverlay() }\n { isNavOnTop ? this.renderFilterOverlay() : this.renderMenuFilters() }\n \n );\n }\n\n renderMiscDesktopPlaceholder() {\n return (\n \n\n );\n }\n\n renderContent() {\n const { isMatchingListFilter, isInfoLoading } = this.props;\n const { isMiscellaneousRendered } = this.state;\n const isLoading = (!isMatchingListFilter && !isMiscellaneousRendered) || isInfoLoading;\n\n return (\n <>\n \n { isLoading ? this.renderMiscDesktopPlaceholder() : this.renderMiscellaneous() }\n \n { this.renderSelectedFilters() }\n { this.renderItemsCount() }\n { this.renderCategoryProductList() }\n \n );\n }\n\n renderMoreFiltersButton() {\n const {\n showMoreFilters,\n onMoreFiltersClick,\n isInfoLoading,\n filters\n } = this.props;\n\n const isSearch = /search/.test(window.location.pathname);\n\n if (isSearch || (!isInfoLoading && Object.keys(filters).length <= 1)) {\n return null;\n }\n\n return (\n \n { showMoreFilters ? __('- Less Filters') : __('+ More Filters') }\n \n );\n }\n\n renderContentMobile() {\n const { isMatchingListFilter, isInfoLoading } = this.props;\n const { isMiscellaneousRendered } = this.state;\n const isLoading = (!isMatchingListFilter && !isMiscellaneousRendered) || isInfoLoading;\n\n return (\n <>\n \n { this.renderMiscellaneous() }\n \n
\n { this.renderFilterInnerWrapper() }\n
\n \n\n { this.renderItemsCount() }\n { this.renderCategoryProductList() }\n \n );\n }\n\n renderMenuFilters() {\n const {\n category,\n history,\n isMatchingInfoFilter,\n isInfoLoading,\n requestCategoryFromFilters,\n isSearchPage,\n showMoreFilters\n } = this.props;\n const { menuFiltersHeight } = this.state;\n\n if (!showMoreFilters) {\n return null;\n }\n\n return (\n \n );\n }\n\n renderFilterOverlay() {\n const {\n selectedFilters,\n isMatchingInfoFilter,\n isInfoLoading,\n history,\n location\n } = this.props;\n\n const {\n categoryFiltersHeight,\n sizeFiltersHeight\n } = this.state;\n\n return (\n \n \n \n );\n }\n\n getAvailableFilters() {\n const {\n filters,\n filters: { gender }\n } = this.props;\n\n const {\n previousGenderFilter,\n previousGenderFilter: { attribute_options: prev_attribute_options_ }\n } = this.state;\n\n if (gender) {\n if (prev_attribute_options_) {\n // eslint-disable-next-line max-len\n if (Object.keys(gender.attribute_options).length >= Object.keys(previousGenderFilter.attribute_options).length) {\n this.setState({ previousGenderFilter: gender });\n } else {\n // eslint-disable-next-line no-param-reassign\n filters.gender = previousGenderFilter;\n }\n } else {\n this.setState({ previousGenderFilter: gender });\n }\n }\n\n return filters;\n }\n\n renderCategoryProductList() {\n const {\n filter,\n search,\n selectedSort,\n selectedFilters,\n isMatchingListFilter,\n isInfoLoading,\n isCurrentCategoryLoaded,\n isMatchingInfoFilter\n } = this.props;\n\n return (\n \n \n \n );\n }\n\n renderContentBlockPlaceholder() {\n return
;\n }\n\n renderContentBlocks() {\n const { category: { content_blocks, id, hide_products } } = this.props;\n\n if (!id) {\n this.renderContentBlockPlaceholder();\n }\n\n if (!content_blocks) {\n return null;\n }\n\n const { top_content } = content_blocks;\n\n if (!top_content || !top_content.length) {\n return null;\n }\n\n if (hide_products) {\n top_content.length = 1;\n }\n\n return top_content.map((block, index) => (\n \n \n \n ));\n }\n\n renderFilterButton() {\n const { selectedFilters } = this.props;\n\n // eslint-disable-next-line fp/no-let\n let appliedFiltersCount = 0;\n\n if (selectedFilters) {\n Object.values(selectedFilters).forEach((filterArray) => {\n appliedFiltersCount += filterArray.length;\n });\n }\n\n return (\n \n { __('Filters') }\n
\n { __('(%s)', appliedFiltersCount) }\n \n );\n }\n\n renderCategorySort() {\n const {\n sortFields,\n selectedSort,\n onSortChange,\n isMatchingInfoFilter,\n sortKey: configSortKey,\n sortDirection: configSortDirection,\n location,\n isInfoLoading,\n category: {\n default_sort_by\n },\n isCurrentCategoryLoaded\n } = this.props;\n\n const { options = {} } = sortFields;\n const updatedSortFields = Object.values(options).map(({ value: id, label }) => ({ id, label }));\n const { sortDirection, sortKey } = selectedSort;\n\n return (\n \n );\n }\n\n renderItemsCount() {\n const { isMatchingListFilter } = this.props;\n\n return (\n \n );\n }\n\n render() {\n const logoUrl = window.publicPath === undefined ? '/assets/images/global/puma-og-logo.png'\n : `${window.location.origin}${window.publicPath}assets/images/global/puma-og-logo.png`;\n const { isScrollToTopButtonRender, isScrollFrozen } = this.state;\n\n const {\n category: { id, hide_products },\n isInfoLoading,\n isMatchingListFilter,\n baseUrl,\n isMobile\n } = this.props;\n\n const hideProducts = typeof hide_products === 'undefined' || hide_products === 1;\n\n return (\n <>\n { !hideProducts && () }\n \n \n { isScrollToTopButtonRender && }\n \n \n \n { this.renderContentBlocks() }\n
\n { !hideProducts && (\n
\n { this.renderCategoryDetails() }\n
\n ) }\n { !hideProducts && (\n \n { isMobile ? this.renderContentMobile() : this.renderContent() }\n \n ) }\n \n \n );\n }\n}\n\nexport default CategoryPageComponent;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\n\nimport { connect } from 'react-redux';\n\nimport {\n mapDispatchToProps,\n mapStateToProps as sourceMapStateToProps\n} from 'SourceComponent/Breadcrumbs/Breadcrumbs.container';\n\nimport Breadcrumbs from './Breadcrumbs.component';\n\n/** @namespace Scandipwa/Component/Breadcrumbs/Container/mapStateToProps */\nexport const mapStateToProps = (state) => ({\n ...sourceMapStateToProps(state),\n device: state.ConfigReducer.device\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Breadcrumbs);\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport PropTypes from 'prop-types';\n\nimport { LinkType } from 'Type/Router.type';\n\nexport const BreadcrumbType = PropTypes.shape({\n url: LinkType,\n name: PropTypes.string\n});\n\nexport const BreadcrumbsType = PropTypes.arrayOf(BreadcrumbType);\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\n\nimport { UTMOST_PAGES_COUNT } from 'Component/Pagination/Pagination.config';\nimport { MixType } from 'Type/Common.type';\nimport { HistoryType, LocationType } from 'Type/Router.type';\nimport { generateQuery, getQueryParam } from 'Util/Url';\n\nimport Pagination from './Pagination.component';\n\n/** @namespace Component/Pagination/Container/mapStateToProps */\nexport const mapStateToProps = (state) => ({\n paginationFrame: state.ConfigReducer.pagination_frame,\n paginationFrameSkip: state.ConfigReducer.pagination_frame_skip,\n anchorTextPrevious: state.ConfigReducer.anchor_text_for_previous,\n anchorTextNext: state.ConfigReducer.anchor_text_for_next\n});\n\n/** @namespace Component/Pagination/Container/mapDispatchToProps */\nexport const mapDispatchToProps = () => ({});\n\n/** @namespace Component/Pagination/Container */\nexport class PaginationContainer extends PureComponent {\n static propTypes = {\n isLoading: PropTypes.bool,\n history: HistoryType.isRequired,\n location: LocationType.isRequired,\n totalPages: PropTypes.number.isRequired,\n paginationFrame: PropTypes.number,\n paginationFrameSkip: PropTypes.number,\n anchorTextPrevious: PropTypes.string,\n anchorTextNext: PropTypes.string,\n id: PropTypes.string,\n mix: MixType\n };\n\n static defaultProps = {\n isLoading: false,\n paginationFrame: 5,\n paginationFrameSkip: null,\n anchorTextPrevious: '',\n anchorTextNext: '',\n id: '',\n mix: {}\n };\n\n containerFunctions = {\n getSearchQuery: this.getSearchQuery.bind(this)\n };\n\n getSearchQuery(pageNumber) {\n const { history, location } = this.props;\n const page = pageNumber !== 1 ? pageNumber : '';\n\n return generateQuery({ page }, location, history);\n }\n\n containerProps() {\n const {\n anchorTextNext,\n anchorTextPrevious,\n id,\n isLoading,\n paginationFrame,\n totalPages,\n location: { pathname },\n mix\n } = this.props;\n\n return {\n anchorTextNext,\n anchorTextPrevious,\n id,\n isLoading,\n paginationFrame,\n pathname,\n totalPages,\n mix,\n currentPage: this._getCurrentPage(),\n prevPageJump: this._getPrevPageJump(),\n nextPageJump: this._getNextPageJump(),\n firstFramePage: this._getFirstFramePage(),\n lastFramePage: this._getLastFramePage(),\n shouldRenderNextJump: this._shouldRenderNextJump(),\n shouldRenderPreviousJump: this._shouldRenderPreviousJump(),\n shouldRenderJumps: this._shouldRenderJumps()\n };\n }\n\n _getCurrentPage() {\n const { location } = this.props;\n\n return +(getQueryParam('page', location) || 1);\n }\n\n // e.g. 5 for pagination like 1 ... 5 6 7 ... 14\n _getFirstFramePage() {\n const { paginationFrame, totalPages } = this.props;\n const maxFirstPage = this._getCurrentPage() - Math.ceil(paginationFrame / 2) + 1;\n const minFirstPage = totalPages - paginationFrame + 1;\n\n return Math.max(1, Math.min(maxFirstPage, minFirstPage));\n }\n\n // e.g. 7 for pagination like 1 ... 5 6 7 ... 14\n _getLastFramePage() {\n const { paginationFrame, totalPages } = this.props;\n\n return Math.min(totalPages, this._getFirstFramePage() + paginationFrame - 1);\n }\n\n // i.e. what page you go to on click on first '...'\n _getPrevPageJump() {\n const { paginationFrameSkip } = this.props;\n\n return Math.max(UTMOST_PAGES_COUNT, this._getFirstFramePage() - paginationFrameSkip);\n }\n\n // i.e. what page you go to on click on second '...'\n _getNextPageJump() {\n const { paginationFrameSkip, totalPages } = this.props;\n\n return Math.min(totalPages - 1, this._getLastFramePage() + paginationFrameSkip);\n }\n\n _shouldRenderJumps() {\n const { paginationFrameSkip } = this.props;\n\n return !(!paginationFrameSkip || paginationFrameSkip < 2);\n }\n\n _shouldRenderNextJump() {\n const { totalPages } = this.props;\n\n if (!this._shouldRenderJumps()) {\n return false;\n }\n\n return totalPages - this._getLastFramePage() >= UTMOST_PAGES_COUNT;\n }\n\n _shouldRenderPreviousJump() {\n if (!this._shouldRenderJumps()) {\n return false;\n }\n\n return this._getFirstFramePage() > UTMOST_PAGES_COUNT;\n }\n\n render() {\n return (\n \n );\n }\n}\n\nexport default withRouter(\n connect(mapStateToProps, mapDispatchToProps)(PaginationContainer)\n);\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport Link from 'Component/Link';\nimport { ChildrenType } from 'Type/Common.type';\n\nimport './PaginationLink.style';\n\n/** @namespace Component/PaginationLink/Component */\nexport class PaginationLink extends PureComponent {\n static propTypes = {\n children: ChildrenType,\n label: PropTypes.string.isRequired,\n isCurrent: PropTypes.bool.isRequired,\n url_path: PropTypes.string.isRequired,\n pageNumber: PropTypes.number.isRequired,\n getSearchQueryForPage: PropTypes.func.isRequired\n };\n\n static defaultProps = {\n children: []\n };\n\n getSearchQueryForPage() {\n const { getSearchQueryForPage, pageNumber } = this.props;\n\n return getSearchQueryForPage(pageNumber);\n }\n\n render() {\n const {\n label,\n url_path: pathname,\n isCurrent,\n children\n } = this.props;\n\n const search = this.getSearchQueryForPage();\n\n const { state = {} } = history.state || {};\n\n return (\n \n { children }\n \n );\n }\n}\n\nexport default PaginationLink;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport { PureComponent } from 'react';\n\nimport './FilterIcon.style';\n\n/** @namespace Component/FilterIcon/Component */\nexport class FilterIcon extends PureComponent {\n render() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n );\n }\n}\n\nexport default FilterIcon;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport './GridIcon.style';\n\n/** @namespace Component/GridIcon/Component */\nexport class GridIcon extends PureComponent {\n static propTypes = {\n isActive: PropTypes.bool\n };\n\n static defaultProps = {\n isActive: false\n };\n\n render() {\n const { isActive } = this.props;\n\n return (\n \n \n \n );\n }\n}\n\nexport default GridIcon;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport './ListIcon.style';\n\n/** @namespace Component/ListIcon/Component */\nexport class ListIcon extends PureComponent {\n static propTypes = {\n isActive: PropTypes.bool\n };\n\n static defaultProps = {\n isActive: false\n };\n\n render() {\n const { isActive } = this.props;\n\n return (\n \n \n \n );\n }\n}\n\nexport default ListIcon;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport { default } from './CategoryProductList.container';\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport ChevronIcon from 'Component/ChevronIcon';\nimport Link from 'Component/Link';\nimport TextPlaceholder from 'Component/TextPlaceholder';\nimport { LinkType } from 'Type/Router.type';\n\nimport './Breadcrumb.style';\n\n/** @namespace Component/Breadcrumb/Component */\nexport class Breadcrumb extends PureComponent {\n static propTypes = {\n index: PropTypes.number.isRequired,\n isDisabled: PropTypes.bool.isRequired,\n url: LinkType,\n name: PropTypes.string\n };\n\n static defaultProps = {\n url: '',\n name: ''\n };\n\n getLinkUrl() {\n const {\n url = ''\n } = this.props;\n\n if (typeof url === 'string' || !url) {\n return {\n pathname: url || '',\n search: '',\n state: {\n ...this.state\n }\n };\n }\n\n return url;\n }\n\n renderLink() {\n const {\n index,\n isDisabled,\n name\n } = this.props;\n\n const url = this.getLinkUrl() || {};\n const nameToString = String(name);\n\n return (\n \n \n \n \n \n \n \n \n );\n }\n\n render() {\n const { index } = this.props;\n\n return (\n \n { this.renderLink() }\n \n );\n }\n}\n\nexport default Breadcrumb;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport Breadcrumb from 'Component/Breadcrumb';\nimport ContentWrapper from 'Component/ContentWrapper';\nimport { CHECKOUT_URL } from 'Route/Checkout/Checkout.config';\nimport { BreadcrumbsType } from 'Type/Breadcrumbs.type';\nimport { appendWithStoreCode, isHomePageUrl } from 'Util/Url';\n\nimport './Breadcrumbs.style';\n\n/**\n * Breadcrumbs\n * @class Breadcrumbs\n * @namespace Component/Breadcrumbs/Component\n */\nexport class Breadcrumbs extends PureComponent {\n static propTypes = {\n breadcrumbs: BreadcrumbsType.isRequired,\n areBreadcrumbsVisible: PropTypes.bool.isRequired\n };\n\n renderBreadcrumb({ url, name }, i) {\n const { breadcrumbs } = this.props;\n const isDisabled = !url || breadcrumbs.length - 1 === i;\n\n return (\n \n );\n }\n\n renderBreadcrumbList(breadcrumbs) {\n const breadcrumbsWithHome = [\n ...breadcrumbs,\n // Looks like a browser bug, temporary fixed with .toString()\n { url: '/', name: __('Home').toString() }\n ];\n\n return breadcrumbsWithHome.map((_, i) => this.renderBreadcrumb(\n breadcrumbsWithHome[breadcrumbsWithHome.length - 1 - i], i\n ));\n }\n\n shouldHideBreadcrumbs() {\n const { areBreadcrumbsVisible } = this.props;\n const { pathname = appendWithStoreCode('/') } = location;\n\n return (\n !areBreadcrumbsVisible\n || pathname.match(appendWithStoreCode(CHECKOUT_URL))\n || isHomePageUrl(pathname)\n );\n }\n\n render() {\n const { breadcrumbs } = this.props;\n\n if (this.shouldHideBreadcrumbs()) {\n return null;\n }\n\n return (\n \n \n \n );\n }\n}\n\nexport default Breadcrumbs;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\n\n// eslint-disable-next-line import/prefer-default-export\nexport const DESKTOP_MIN_WIDTH = 768;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport { default } from './CategoryItemsCount.container';\n","import { connect } from 'react-redux';\n\nimport {\n mapDispatchToProps,\n mapStateToProps as sourceMapStateToProps\n} from 'SourceComponent/CategoryItemsCount/CategoryItemsCount.container';\n\nimport CategoryItemsCount from './CategoryItemsCount.component';\n\n/** @namespace Scandipwa/Component/CategoryItemsCount/Container/mapStateToProps */\nexport const mapStateToProps = (state) => ({\n ...sourceMapStateToProps(state),\n pages: state.ProductListReducer.pages\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(CategoryItemsCount);\n","/* eslint-disable react/no-unknown-property */\n\n/**\n* ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n* See LICENSE for license details.\n*\n* @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n* @package scandipwa/base-theme\n* @link https://github.com/scandipwa/base-theme\n */\n\nimport TextPlaceholder from 'Component/TextPlaceholder';\nimport SourceCategoryItemsCount from 'SourceComponent/CategoryItemsCount/CategoryItemsCount.component';\nimport { PagesType } from 'Type/ProductList.type';\n\n/** @namespace Scandipwa/Component/CategoryItemsCount/Component */\nexport class CategoryItemsCountComponent extends SourceCategoryItemsCount {\n static propTypes = {\n ...super.propTypes,\n pages: PagesType\n };\n\n static defaultProps = {\n ...super.defaultProps,\n pages: []\n };\n\n renderItems() {\n const {\n totalItems,\n pages\n } = this.props;\n\n const promoTiles = [];\n Object.values(pages).map((page) => page.filter((product) => {\n if (typeof product === 'string') {\n promoTiles.push(product);\n }\n\n return product;\n }));\n\n return (\n <>\n { totalItems - promoTiles.length }\n \n { ` ${ totalItems === 1 ? __('Item') : __('Items') }` }\n \n \n );\n }\n\n render() {\n const {\n isMatchingListFilter\n } = this.props;\n\n return (\n

\n \n

\n );\n }\n}\n\nexport default CategoryItemsCountComponent;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\nimport { connect } from 'react-redux';\n\nimport ProductList from 'Component/ProductList';\nimport { updateLoadStatus } from 'Store/ProductList/ProductList.action';\nimport { FilterInputType } from 'Type/Category.type';\n\nimport './CategoryProductList.style';\n\nexport const ProductListDispatcher = import(\n /* webpackMode: \"lazy\", webpackChunkName: \"categoryDispatchers\" */\n 'Store/ProductList/ProductList.dispatcher'\n);\n\n/** @namespace Scandipwa/Component/CategoryProductList/Container/mapStateToProps */\nexport const mapStateToProps = (state) => ({\n pages: state.ProductListReducer.pages,\n isOffline: state.OfflineReducer.isOffline,\n isLoading: state.ProductListReducer.isLoading,\n isPageLoading: state.ProductListReducer.isPageLoading,\n totalItems: state.ProductListReducer.totalItems,\n totalPages: state.ProductListReducer.totalPages\n});\n\n/** @namespace Scandipwa/Component/CategoryProductList/Container/mapDispatchToProps */\nexport const mapDispatchToProps = (dispatch) => ({\n requestProductList: (options) => ProductListDispatcher.then(\n ({ default: dispatcher }) => dispatcher.handleData(dispatch, options)\n ),\n updateLoadStatus: (isLoading) => dispatch(updateLoadStatus(isLoading))\n});\n\n/** @namespace Scandipwa/Component/CategoryProductList/Container */\nexport class CategoryProductListContainer extends PureComponent {\n static propTypes = {\n isLoading: PropTypes.bool.isRequired,\n isMatchingListFilter: PropTypes.bool,\n filter: FilterInputType,\n requestProductList: PropTypes.func.isRequired\n };\n\n static defaultProps = {\n isMatchingListFilter: false,\n filter: {}\n };\n\n containerFunctions = {\n requestProductList: this.requestProductList.bind(this)\n };\n\n getIsInfoLoading() {\n const {\n filter,\n isLoading,\n isMatchingListFilter\n } = this.props;\n\n /**\n * In case the wrong category was passed down to the product list,\n * show the loading animation, it will soon change to proper category.\n */\n if (filter.categoryIds === -1) {\n return true;\n }\n\n if (!navigator.onLine) {\n return false;\n }\n\n // if the filter expected matches the last requested filter\n if (isMatchingListFilter) {\n return false;\n }\n\n return isLoading;\n }\n\n getIsPreventRequest() {\n const { isMatchingListFilter } = this.props;\n return isMatchingListFilter; // if filter match - prevent request\n }\n\n requestProductList(options) {\n const { requestProductList } = this.props;\n requestProductList(options);\n }\n\n containerProps = () => ({\n isInfoLoading: this.getIsInfoLoading(),\n isPreventRequest: this.getIsPreventRequest(),\n mix: { block: 'CategoryProductList' }\n });\n\n render() {\n return (\n \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(CategoryProductListContainer);\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\n\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\n\nimport { PAGE_SIZE } from 'Component/ProductList/ProductList.config';\nimport {\n mapDispatchToProps as sourceMapDispatchToProps,\n mapStateToProps as sourceMapStateToProps,\n ProductListContainer as SourceProductListContainer\n} from 'SourceComponent/ProductList/ProductList.container';\nimport { appendLastLocalPage, updatePagesNumberToShow } from 'Store/ProductList/ProductList.action';\n\n/** @namespace Scandipwa/Component/ProductList/Container/mapStateToProps */\nexport const mapStateToProps = (state) => ({\n ...sourceMapStateToProps(state),\n isSignedIn: state.MyAccountReducer.isSignedIn,\n isPageLoading: state.ProductListReducer.isPageLoading,\n totalPagesOnServer: state.ProductListReducer.totalPagesOnServer,\n pagesNumberToShow: state.ProductListReducer.pagesNumberToShow\n});\n\n/** @namespace Scandipwa/Component/ProductList/Container/mapDispatchToProps */\nexport const mapDispatchToProps = (dispatch) => ({\n ...sourceMapDispatchToProps(dispatch),\n appendLastLocalPage: (currentPage) => dispatch(appendLastLocalPage(currentPage)),\n updatePagesNumberToShow: (pagesNumberToShow) => dispatch(updatePagesNumberToShow(pagesNumberToShow))\n});\n\n/**\n * Category sort\n * @class CategorySort\n * @namespace Scandipwa/Component/ProductList/Container */\nexport class ProductListContainer extends SourceProductListContainer {\n static defaultProps = {\n ...SourceProductListContainer.defaultProps,\n // eslint-disable-next-line no-magic-numbers\n pageSize: PAGE_SIZE\n };\n\n state = {\n ...this.state,\n hasSignedIn: false\n };\n\n containerProps() {\n const {\n isPageLoading,\n pageSize,\n totalItems,\n areComponentsLoading,\n isInfoLoading,\n areMenuFiltersLoading,\n pagesNumberToShow,\n updatePagesNumberToShow,\n sort\n } = this.props;\n\n return {\n ...super.containerProps(),\n isPageLoading,\n pageSize,\n totalItems,\n areComponentsLoading,\n isInfoLoading,\n areMenuFiltersLoading,\n pagesNumberToShow,\n updatePagesNumberToShow,\n sort\n };\n }\n\n componentDidUpdate(prevProps) {\n const {\n sort,\n search,\n filter,\n pages,\n isSignedIn\n } = this.props;\n\n const {\n sort: prevSort,\n search: prevSearch,\n filter: prevFilter,\n pages: prevPages\n } = prevProps;\n\n const { pagesCount, hasSignedIn } = this.state;\n\n if (isSignedIn !== hasSignedIn) {\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({\n hasSignedIn: isSignedIn\n });\n\n this.requestPage();\n }\n\n const pagesLength = Object.keys(pages).length;\n\n if (pagesCount !== pagesLength) {\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({ pagesCount: pagesLength }, () => {\n if (pagesLength === 1) {\n this.requestPage(2, true);\n }\n });\n } else if (pagesLength === 1) {\n if (Object.values(pages)[0][0]?.id !== Object.values(prevPages)[0][0]?.id) {\n this.requestPage(2, true);\n }\n }\n\n if (search !== prevSearch\n || JSON.stringify(sort) !== JSON.stringify(prevSort)\n || JSON.stringify(filter) !== JSON.stringify(prevFilter)\n ) {\n this.setState({ pagesCount: 0 }, () => this.requestPage(this._getPageFromUrl()));\n }\n }\n\n /**\n * Returns if isInfinite loader status\n *\n * @returns {*}\n * @private\n */\n _getIsInfiniteLoaderEnabled() {\n const { isInfiniteLoaderEnabled } = this.props;\n\n return isInfiniteLoaderEnabled;\n }\n\n loadPage(next = true) {\n const { pagesCount } = this.state;\n const {\n isPageLoading,\n appendLastLocalPage,\n totalPagesOnServer\n } = this.props;\n\n const {\n minPage,\n maxPage,\n totalPages,\n loadedPagesCount\n } = this._getPagesBounds();\n const isUpdatable = totalPages > 0 && pagesCount === loadedPagesCount;\n const shouldUpdateList = next ? maxPage < totalPages : minPage > 1;\n\n if (isUpdatable && shouldUpdateList && !isPageLoading) {\n this.setState({ pagesCount: pagesCount + 1 });\n\n if (loadedPagesCount + 1 >= totalPagesOnServer && totalPagesOnServer < totalPages) {\n appendLastLocalPage(loadedPagesCount + 1);\n } else {\n this.requestPage(next ? maxPage + 1 : minPage - 1, true);\n }\n }\n }\n\n updatePage() {\n // Do nothing\n }\n\n requestPage = (currentPage = 1, isNext = false) => {\n const {\n sort,\n search,\n filter,\n pageSize,\n requestProductList,\n requestProductListInfo,\n noAttributes,\n noVariants\n } = this.props;\n\n /**\n * In case the wrong category was passed down to the product list,\n * prevent it from being requested.\n */\n if (filter.categoryIds === -1) {\n return;\n }\n\n /**\n * Do not request page if there are no filters\n */\n if (!search && !this.isEmptyFilter()) {\n return;\n }\n\n // TODO: product list requests filters alongside the page\n // TODO: sometimes product list is requested more then once\n // TODO: the product list should not request itself, when coming from PDP\n\n const options = {\n isNext,\n noAttributes,\n noVariants,\n args: {\n sort,\n filter,\n search,\n pageSize,\n currentPage\n }\n };\n\n const infoOptions = {\n args: {\n filter,\n search\n },\n minMaxRequested: true\n };\n\n requestProductList(options);\n\n if (!isNext) {\n requestProductListInfo(infoOptions);\n }\n };\n}\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(ProductListContainer));\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport { default } from './ProductListPage.component';\n","/* eslint-disable max-lines */\n/* eslint-disable react/no-unknown-property */\n/* eslint-disable @scandipwa/scandipwa-guidelines/only-render-in-component */\n/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\n\nimport PropTypes from 'prop-types';\nimport { lazy, PureComponent, Suspense } from 'react';\nimport { InView } from 'react-intersection-observer';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\n\nimport { DESKTOP_MIN_WIDTH } from 'Component/CategorySort/CategorySort.config';\nimport ProductCard from 'Component/ProductCard';\nimport { FilterType } from 'Type/Category.type';\nimport { ProductType } from 'Type/ProductList.type';\nimport { HistoryType } from 'Type/Router.type';\n\nimport { DEFAULT_PLACEHOLDER_COUNT, DEFAULT_PLACEHOLDER_COUNT_MOBILE } from './ProductListPage.config';\n\nimport 'Component/ProductListPage/ProductListPage.style';\n\nexport const Html = lazy(() => import(/* webpackMode: \"lazy\", webpackChunkName: \"cms\" */ 'Component/Html'));\n\n/** @namespace Scandipwa/Component/ProductListPage/Component/mapStateToProps */\nexport const mapStateToProps = (state) => ({\n content_blocks: state.CategoryReducer.category.content_blocks\n});\n\n/** @namespace Scandipwa/Component/ProductListPage/Component */\nexport class ProductListPageComponent extends PureComponent {\n static propTypes = {\n isLoading: PropTypes.bool,\n isVisible: PropTypes.bool.isRequired,\n isInfiniteLoaderEnabled: PropTypes.bool.isRequired,\n updatePages: PropTypes.func.isRequired,\n numberOfPlaceholders: PropTypes.number,\n selectedFilters: FilterType,\n pageNumber: PropTypes.number,\n items: PropTypes.arrayOf(ProductType),\n history: HistoryType.isRequired,\n content_blocks: PropTypes.shape({\n top_content: PropTypes.arrayOf(PropTypes.string),\n promo_tile: PropTypes.arrayOf(PropTypes.string)\n })\n };\n\n static defaultProps = {\n isLoading: false,\n numberOfPlaceholders: DEFAULT_PLACEHOLDER_COUNT,\n selectedFilters: {},\n pageNumber: null,\n items: [],\n content_blocks: {}\n };\n\n state = {\n isDesktop: false,\n pageViewed: false\n };\n\n updateWindowDimensions = this.updateWindowDimensions.bind(this);\n\n handlePageVisibilityToggle = this.handlePageVisibilityToggle.bind(this);\n\n componentDidMount() {\n this.updateWindowDimensions();\n window.addEventListener('resize', this.updateWindowDimensions);\n }\n\n componentWillUnmount() {\n window.removeEventListener('resize', this.updateWindowDimensions);\n }\n\n updateWindowDimensions() {\n const { isDesktop } = this.state;\n const newIsDesktop = (window.innerWidth >= DESKTOP_MIN_WIDTH);\n\n if (isDesktop !== newIsDesktop) {\n this.setState({ isDesktop: newIsDesktop });\n }\n }\n\n handlePageVisibilityToggle(isVisible) {\n const { updatePages, pageNumber } = this.props;\n const { pageViewed } = this.state;\n\n if (!isVisible) {\n return;\n }\n\n if (!pageViewed) {\n this.setState({ pageViewed: true }, () => updatePages(pageNumber + 1));\n }\n }\n\n renderPlaceholders() {\n const { numberOfPlaceholders, isInfiniteLoaderEnabled } = this.props;\n\n const itemsToRender = (window.innerWidth < DESKTOP_MIN_WIDTH)\n ? DEFAULT_PLACEHOLDER_COUNT_MOBILE : numberOfPlaceholders;\n\n return Array.from(\n { length: itemsToRender },\n (_, i) => (\n \n )\n );\n }\n\n getPlaceholderRef() {\n const { isVisible } = this.props;\n\n if (!isVisible) {\n return undefined;\n }\n\n return (node) => {\n this.node = node;\n };\n }\n\n renderPageItems() {\n const {\n items,\n selectedFilters,\n history,\n isInfiniteLoaderEnabled\n } = this.props;\n\n return items.map((item) => {\n const { sku = null } = item;\n\n // Product\n if (sku) {\n return (\n \n );\n }\n\n // Promo tile. item list is merged and prepared in ProductList.resolver\n return (\n
  • \n \n \n \n
  • \n );\n });\n }\n\n renderPlaceholderItems() {\n return (\n <>\n \n { this.renderPlaceholders() }\n \n );\n }\n\n renderItems() {\n const { items, isLoading, content_blocks } = this.props;\n\n const { isDesktop } = this.state;\n\n if (!items.length || isLoading) {\n return this.renderPlaceholderItems();\n }\n\n if (isDesktop && Object.keys(content_blocks) === 0) {\n return this.renderPlaceholderItems();\n }\n\n return this.renderPageItems();\n }\n\n render() {\n const { pageNumber } = this.props;\n return (\n \n { this.renderItems() }\n \n );\n }\n}\n\nexport default withRouter(connect(mapStateToProps, null)(ProductListPageComponent));\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport { default } from './Pagination.container';\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport { default } from './CategorySort.container';\n","/* eslint-disable @scandipwa/scandipwa-guidelines/jsx-no-props-destruction */\n/* eslint-disable no-prototype-builtins */\n/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\n\nimport SourceCategorySortContainer from 'SourceComponent/CategorySort/CategorySort.container';\n\nimport CategorySortComponent from './CategorySort.component';\n\n/**\n * Category sort container\n * @class CategorySortContainer\n * @namespace Scandipwa/Component/CategorySort/Container */\nexport class CategorySortContainer extends SourceCategorySortContainer {\n containerFunctions = () => ({\n getSelectedLabel: this.getSelectedLabel.bind(this)\n });\n\n /**\n * Returns label for each sort key\n *\n * @param option\n * @returns {{asc: *, desc: *}|{asc: *}}\n * @private\n */\n _getLabel(option) {\n const { id, label: pureLabel } = option;\n\n // eslint-disable-next-line fp/no-let\n let [label] = pureLabel.split(' ');\n label = label.charAt(0).toUpperCase() + label.slice(1);\n\n switch (id) {\n case 'name':\n return {\n asc: __('Product Name: asc'),\n desc: __('Product Name: desc')\n };\n case 'position':\n return {\n asc: __('Latest Products')\n };\n case 'online_from':\n return {\n desc: __('Latest Products')\n };\n case 'price':\n return {\n asc: __('Price Range: Lowest'),\n desc: __('Price Range: Highest')\n };\n default:\n return {\n asc: __('%s: Ascending', label),\n desc: __('%s: Descending', label)\n };\n }\n }\n\n /**\n * Returns options for each sort key\n *\n * @param option\n * @returns {{asc: *, desc: *}|{asc: *}}\n * @private\n */\n _prepareOptions() {\n const {\n sortFields,\n default_sort_by\n } = this.props;\n\n if (!sortFields) {\n return [];\n }\n\n const optionToRemove = default_sort_by === 'position' ? 'online_from' : 'position';\n\n const selectOptions = sortFields.reduce((acc, option) => {\n const { id } = option;\n\n const lowerCaseId = id.toLowerCase();\n\n if (\n (lowerCaseId === 'online_from' || lowerCaseId === 'position')\n && lowerCaseId === optionToRemove\n ) {\n return acc;\n }\n\n const label = this._getLabel(option);\n const { asc, desc } = label;\n\n if (asc) {\n acc.push({\n id: `ASC ${id}`,\n name: id,\n value: `ASC ${id}`,\n label: asc\n });\n }\n\n if (desc) {\n acc.push({\n id: `DESC ${id}`,\n name: id,\n value: `DESC ${id}`,\n label: desc\n });\n }\n\n return acc;\n }, []);\n\n const sortingOrder = {\n online_from: 1,\n position: 2,\n price: 3\n };\n\n selectOptions.sort(this._compareByListOrder('name', sortingOrder));\n return selectOptions;\n }\n\n /**\n * Returns selected sort label\n *\n * @param selectedSort\n * @returns {string}\n */\n getSelectedLabel(selectedSort) {\n const selectOptions = this._prepareOptions();\n\n return Object.entries(selectOptions).reduce((acc, [, option]) => {\n const { id, label } = option;\n\n if (id === selectedSort) {\n return label;\n }\n\n return acc;\n }, '');\n }\n\n /**\n * sort function by order of array\n * ex : list = list.sort(_compareByListOrder('keyname',{'items1':1,'items2':2}))\n * @param key\n * @param sortingOrder\n * @returns int\n */\n _compareByListOrder(key, sortingOrder, order = 'asc') {\n return function (a, b) {\n if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) {\n return 0;\n }\n\n const first = (a[key].toLowerCase() in sortingOrder) ? sortingOrder[a[key]] : Number.MAX_SAFE_INTEGER;\n const second = (b[key].toLowerCase() in sortingOrder) ? sortingOrder[b[key]] : Number.MAX_SAFE_INTEGER;\n\n let result = 0;\n if (first < second) {\n result = -1;\n } else if (first > second) {\n result = 1;\n }\n\n // eslint-disable-next-line no-bitwise\n return (order === 'desc') ? ~result : result;\n };\n }\n\n render() {\n return (\n \n );\n }\n}\n\nexport default CategorySortContainer;\n","/* eslint-disable react/no-array-index-key */\n/* eslint-disable max-lines */\n/* eslint-disable react/no-unknown-property */\n/* eslint-disable @scandipwa/scandipwa-guidelines/only-render-in-component */\n/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport Field from 'Component/Field';\nimport FIELD_TYPE from 'Component/Field/Field.config';\nimport TextPlaceholder from 'Component/TextPlaceholder';\nimport { LocationType } from 'Type/Router.type';\nimport { getQueryParam } from 'Util/Url';\n\nimport { CATEGORY_SORT, DESKTOP_MIN_WIDTH } from './CategorySort.config';\n\nimport './CategorySort.extended.style.scss';\n\n/**\n * Category sort\n * @class CategorySort\n * @namespace Scandipwa/Component/CategorySort/Component */\nexport class CategorySortComponent extends PureComponent {\n static propTypes = {\n onSortChange: PropTypes.func.isRequired,\n sortKey: PropTypes.string.isRequired,\n sortDirection: PropTypes.string.isRequired,\n selectOptions: PropTypes.arrayOf(PropTypes.shape({\n id: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number\n ]),\n value: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number\n ]),\n disabled: PropTypes.bool,\n label: PropTypes.string\n })).isRequired,\n config: PropTypes.arrayOf(PropTypes.string).isRequired,\n location: LocationType.isRequired,\n // eslint-disable-next-line react/boolean-prop-naming\n areComponentsLoading: PropTypes.bool.isRequired\n };\n\n state = {\n close: false,\n isDesktop: false,\n checkedDesktopSize: false\n };\n\n renderSortButton = this.renderSortButton.bind(this);\n\n setDefaultSort = this.setDefaultSort.bind(this);\n\n updateWindowDimensions = this.updateWindowDimensions.bind(this);\n\n /**\n * On component did mount\n */\n componentDidMount() {\n this.updateWindowDimensions();\n window.addEventListener('resize', this.updateWindowDimensions);\n }\n\n /**\n * On component will unmout\n */\n componentWillUnmount() {\n window.removeEventListener('resize', this.updateWindowDimensions);\n }\n\n getBanner = () => {\n const bannerList = document.getElementById('global-promo-banner-list');\n const bannerItem = document.querySelector('[id^=\\'global_promo_banner_\\']');\n return bannerList || bannerItem;\n };\n\n onChange = (value, isMobileSort = false) => {\n const { onSortChange } = this.props;\n const selectedValue = isMobileSort ? value.target.value : value;\n\n const [direction, ...key] = selectedValue.split(' ');\n\n onSortChange(direction, key);\n\n if (this.getBanner()) {\n document.documentElement.classList.add('sticky-ios');\n }\n };\n\n renderPlaceholder() {\n return (\n

    \n \n

    \n );\n }\n\n /**\n * Updates window dimensions\n */\n updateWindowDimensions() {\n const { isDesktop } = this.state;\n const newIsDesktop = (window.innerWidth >= DESKTOP_MIN_WIDTH);\n\n if (isDesktop !== newIsDesktop) {\n this.setState({ isDesktop: newIsDesktop });\n }\n\n this.setState({ checkedDesktopSize: true });\n }\n\n /**\n * Checks if filter is applied from url\n *\n * @returns {boolean}\n */\n isFilterAppliedFromUrl() {\n const { location } = this.props;\n\n const filterAppliedFromUrl = getQueryParam('sortKey', location);\n\n return !!filterAppliedFromUrl;\n }\n\n /**\n * Sets default sort\n */\n setDefaultSort() {\n const { onSortChange, config } = this.props;\n const [sortKey, sortDirection] = config;\n\n this.setState({ close: true });\n onSortChange(sortDirection, sortKey);\n }\n\n /**\n * Render sort button\n *\n * @returns {JSX.Element}\n */\n renderSortButton(option, index) {\n const {\n sortKey: selectedSortKey,\n sortDirection: selectedSortDirection\n } = this.props;\n const { close } = this.state;\n const { label, id } = option;\n\n const [sortDirection, sortKey] = id.split(' ');\n const isSelected = selectedSortKey === sortKey && selectedSortDirection === sortDirection && !close;\n\n return (\n \n {\n this.setState({ close: false });\n this.onChange(`${sortDirection} ${sortKey}`);\n } }\n >\n { label }\n \n { /* eslint-disable-next-line jsx-a11y/control-has-associated-label */ }\n \n
    \n );\n }\n\n /**\n * Render sort title\n *\n * @returns {JSX.Element}\n */\n renderSortTitle() {\n return (\n \n { __('Sort By:') }\n \n );\n }\n\n /**\n * Renders place holders\n * @returns {JSX.Element|unknown[]}\n */\n renderPlaceholders() {\n const { isDesktop } = this.state;\n\n if (!isDesktop) {\n return null;\n }\n\n return (\n \n \n

    \n );\n }\n\n /**\n * Renders sort field\n *\n * @returns {JSX.Element|*}\n */\n renderSortField() {\n const {\n sortKey,\n sortDirection,\n selectOptions,\n areComponentsLoading\n } = this.props;\n const { isDesktop, checkedDesktopSize } = this.state;\n\n const sortedSelectOptions = this.moveDefaultAtBeggining(selectOptions);\n\n if (areComponentsLoading || !checkedDesktopSize) {\n return this.renderPlaceholders();\n }\n\n if (isDesktop) {\n const sanitizedSortedSelectOptions = sortedSelectOptions.map((option) => ({\n ...option,\n id: option.id.replace(' ', '_')\n }));\n\n return (\n \n );\n }\n\n sortedSelectOptions.unshift({\n id: 'sort-by',\n label: __('Sort By:'),\n value: '',\n disabled: true,\n selected: true\n });\n\n return (\n
    \n this.onChange(e, true) }\n block=\"CategorySort\"\n elem=\"Select\"\n >\n { sortedSelectOptions.map(({ label, value }, index) => (\n \n )) }\n \n
    \n );\n }\n\n moveDefaultAtBeggining(sorts) {\n const defaultLabel = 'Default sort';\n\n return sorts.sort(\n // eslint-disable-next-line no-nested-ternary\n (x, y) => (x.label === defaultLabel ? -1 : y.label === defaultLabel ? 1 : 0)\n );\n }\n\n render() {\n const { areComponentsLoading } = this.props;\n\n return (\n
    \n { this.renderSortField() }\n
    \n );\n }\n}\n\nexport default CategorySortComponent;\n","/* eslint-disable @scandipwa/scandipwa-guidelines/jsx-no-props-destruction */\n/* eslint-disable max-lines */\n/**\n * Copyright © Scandiweb, Inc. All rights reserved.\n *\n * @category Puma\n * @package Puma_MenuFilters\n * @author Deniss Strombergs \n */\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\n\nimport { STORE_CODE_EN, STORE_CODE_KSA_AR, STORE_CODE_UAE } from 'Component/Router/Router.config';\nimport { CategoryTreeType } from 'Type/Category.type';\nimport MenuHelper, { fetchMenu } from 'Util/Menu';\nimport DataContainer from 'Util/Request/DataContainer';\n\nimport MenuFiltersComponent from './MenuFilters.component';\n\n/** @namespace Scandipwa/Component/MenuFilters/Container/mapStateToProps */\nexport const mapStateToProps = (state) => ({\n category: state.CategoryReducer.category,\n filterTitle: state.ConfigReducer.filterTitle\n});\n\n/** @namespace Scandipwa/Component/MenuFilters/Container/mapDispatchToProps */\nexport const mapDispatchToProps = () => ({});\n\n/** @namespace Scandipwa/Component/MenuFilters/Container */\nexport class MenuFiltersContainer extends DataContainer {\n static propTypes = {\n category: CategoryTreeType.isRequired,\n menuFiltersHeight: PropTypes.number,\n setMenuFiltersHeight: PropTypes.func,\n areComponentsLoading: PropTypes.bool.isRequired,\n filterTitle: PropTypes.string,\n isSearchPage: PropTypes.bool.isRequired\n };\n\n static defaultProps = {\n menuFiltersHeight: undefined,\n setMenuFiltersHeight: () => null,\n isSearchPage: false,\n filterTitle: ''\n };\n\n state = {\n menu: {}\n };\n\n componentDidMount() {\n this._getMenu();\n }\n\n getUrlParts(url) {\n return (typeof url === 'object' ? url.pathname || '/' : url).substr(1).replace('.html', '').split('/');\n }\n\n _getMenu() {\n fetchMenu((menu) => this.setState({ menu: MenuHelper.reduce(menu) }));\n }\n\n getUrl(url) {\n return typeof url === 'object' ? url.pathname || '/' : url;\n }\n\n onClick(url, categoryId) {\n const { requestCategoryFromFilters } = this.props;\n\n requestCategoryFromFilters(parseInt(categoryId, 10), url);\n }\n\n containerFunctions = {\n onClick: this.onClick.bind(this),\n getRenderingData: this.getRenderingData.bind(this)\n };\n\n isSubCategoryActive(children) {\n return Boolean(children.find((a) => a.isActive));\n }\n\n getSubsubcategories(children, url) {\n return children.map(\n (a) => ({\n title: a.title,\n // eslint-disable-next-line no-nested-ternary\n id: a.id ? a.id : (a?.url?.state?.category ? a.url.state.category : null),\n url: this.getUrl(a.url),\n isActive: this.getUrl(a.url) === url\n })\n );\n }\n\n getOtherSubcategories(currentCategory, url) {\n return Object.values(currentCategory.children).filter(\n (a) => !a.item_class.includes('promotional') && !a.item_class.includes('hidden')\n ).map(\n (a) => ({\n title: a.title,\n children: this.getSubsubcategories(Object.values(a.children), url),\n isActive: this.getUrlParts(url).pop() === this.getUrlParts(a.url).pop()\n || this.isSubCategoryActive(this.getSubsubcategories(Object.values(a.children), url))\n })\n );\n }\n\n getCollectionsSubcategory(currentCategory, url) {\n const subsubcategories = this.getSubsubcategories(\n [\n ...Object.values(currentCategory.children).filter((a) => a.item_class.includes('promotional')),\n ...Object.values(currentCategory.children).filter((a) => a.item_class.includes('hidden'))\n .map((a) => this.getSubsubcategories(Object.values(a.children, url))).flat()\n ],\n url\n );\n\n return {\n title: 'Collections',\n children: subsubcategories,\n isActive: this.isSubCategoryActive(subsubcategories, url)\n };\n }\n\n searchHiddenCategory(children, id) {\n return Object.values(children).find((item) => {\n const { url: { state: { category } = {} } = {} } = item;\n\n if (category === id) {\n return item;\n }\n\n return false;\n });\n }\n\n getCurrentCategoryItem(data, isMain = false) {\n const { children = [] } = data;\n const { category: { id } } = this.props;\n\n return Object.values(isMain ? data : children).find((item) => {\n const { url: { state: { category } = {} } = {}, item_class = '', children = [] } = item;\n\n if (item_class.includes('hidden')) {\n const childOfHiddenCategory = this.searchHiddenCategory(children, id);\n\n if (childOfHiddenCategory) {\n return childOfHiddenCategory;\n }\n }\n\n if (category === id) {\n return item;\n }\n\n return false;\n });\n }\n\n getCurrentCategoryItemWithReduce(data, isDepest = false) {\n if (!data) {\n return false;\n }\n\n return data.reduce((acc, child) => {\n const result = isDepest\n ? this.getCurrentCategoryItemWithReduce(Object.values(child.children))\n : this.getCurrentCategoryItem(child);\n\n if (result) {\n acc.push(child);\n }\n\n return acc;\n }, [])[0];\n }\n\n getStoreCode() {\n // eslint-disable-next-line fp/no-let\n let storeCode = '';\n const firstPathElement = window.location.pathname.split('/')[1];\n switch (firstPathElement) {\n case STORE_CODE_EN:\n storeCode = `/${ STORE_CODE_EN }`;\n break;\n case STORE_CODE_UAE:\n storeCode = `/${ STORE_CODE_UAE }`;\n break;\n case STORE_CODE_KSA_AR:\n storeCode = `/${ STORE_CODE_KSA_AR }`;\n break;\n default:\n break;\n }\n\n return storeCode;\n }\n\n findCurrentCategory(childArray, url) {\n const storeCode = this.getStoreCode();\n const categoryLevel = url.replace(storeCode, '').substr(1).split('/').length.toString();\n\n switch (categoryLevel) {\n case '1':\n return this.getCurrentCategoryItem(childArray, true);\n case '2':\n const categoryItems = this.getCurrentCategoryItemWithReduce(childArray);\n\n // handle categories like new arrivals being at 2 level where it should be 3 level\n if (categoryItems) {\n if (Object.values(Object.values(categoryItems.children)[0].children).length === 0) {\n return this.getCurrentCategoryItemWithReduce(childArray, true);\n }\n } else {\n return this.getCurrentCategoryItemWithReduce(childArray, true);\n }\n\n return categoryItems;\n case '3':\n return this.getCurrentCategoryItemWithReduce(childArray, true);\n default:\n return false;\n }\n }\n\n getRenderingData() {\n const { menu } = this.state;\n const { category } = this.props;\n const { children } = Object.values(menu)[0] || {};\n\n if (!children) {\n return null;\n }\n\n const childArray = Object.values(children);\n const { url } = category;\n\n if (!childArray || !url) {\n return null;\n }\n\n // workaround for search page filters\n // we will return harmless data that will comply with the expected format\n if (url === '/search/') {\n return [true];\n }\n\n const currentCategory = this.findCurrentCategory(childArray, url);\n\n if (!currentCategory) {\n return [];\n }\n\n return [\n ...this.getOtherSubcategories(currentCategory, url),\n this.getCollectionsSubcategory(currentCategory, url)\n ];\n }\n\n render() {\n return (\n \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(MenuFiltersContainer);\n","/**\n * @category Puma\n * @author Deniss Dubinins \n * @copyright Copyright (c) 2022 Scandiweb, Inc (https://scandiweb.com)\n * @license http://opensource.org/licenses/OSL-3.0 The Open Software License 3.0 (OSL-3.0)\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\nimport { withRouter } from 'react-router-dom';\n\nimport { HistoryType, LocationType } from 'Type/Router.type';\nimport { setQueryParams } from 'Util/Url';\n\nimport SelectedFiltersComponent from './SelectedFilters.component';\n\n/** @namespace Scandipwa/Component/SelectedFilters/Container */\nexport class SelectedFiltersContainer extends PureComponent {\n static propTypes = {\n selectedFilters: PropTypes.objectOf(PropTypes.shape).isRequired,\n availableFilters: PropTypes.objectOf(PropTypes.shape).isRequired,\n location: LocationType.isRequired,\n history: HistoryType.isRequired\n };\n\n onResetClick = this.onResetClick.bind(this);\n\n urlStringToObject = this.urlStringToObject.bind(this);\n\n resetAttribute(code, optionId) {\n const { customFilters } = this.urlStringToObject();\n\n return customFilters.split(';').map((customFilter) => {\n if (customFilter.includes(code)) {\n const selectedOptions = customFilter.split(':')[1];\n\n if (selectedOptions === optionId) {\n return null;\n }\n\n const selectedOptionsArray = selectedOptions\n .split(',')\n .filter((selectedOptionId) => selectedOptionId !== optionId);\n\n return `${ code }:${ selectedOptionsArray }`;\n }\n\n return customFilter;\n }).filter((customFilter) => customFilter).join(';');\n }\n\n urlStringToObject() {\n const { location: { search = '' } } = this.props;\n\n return search.substr(1).split('&').reduce((acc, part) => {\n const [key, value] = part.split('=');\n\n return { ...acc, [key]: value };\n }, {});\n }\n\n onResetClick(attributeCode, attributeOptionId) {\n const { location, history } = this.props;\n\n if (attributeCode === 'price') {\n setQueryParams({\n priceMin: '',\n priceMax: '',\n page: ''\n }, location, history);\n\n return;\n }\n\n if (attributeCode && attributeOptionId) {\n setQueryParams({\n customFilters: this.resetAttribute(attributeCode, attributeOptionId),\n page: ''\n }, location, history);\n\n return;\n }\n\n setQueryParams({\n customFilters: '',\n priceMin: '',\n priceMax: '',\n page: ''\n }, location, history);\n }\n\n createSearchSelectedFilters(customFilters, priceMax = 0, priceMin = 0) {\n const selectedFilters = {};\n\n if (!customFilters) {\n if (priceMax && priceMin) {\n return { customFilters: {}, priceRange: { min: priceMin, max: priceMax } };\n }\n\n return {};\n }\n\n // eslint-disable-next-line array-callback-return\n customFilters.split(';').map((customFilter) => {\n const selectedOptions = customFilter.split(':')[1].split(',');\n const selectedFilter = customFilter.split(':')[0];\n Object.assign(selectedFilters, { [selectedFilter]: selectedOptions });\n });\n\n return { customFilters: selectedFilters, priceRange: { min: priceMin, max: priceMax } };\n }\n\n render() {\n const { availableFilters, selectedFilters } = this.props;\n const { customFilters, priceMax = 0, priceMin = 0 } = this.urlStringToObject();\n // eslint-disable-next-line fp/no-let\n let filters = selectedFilters;\n\n if (Object.keys(selectedFilters).length === 0) {\n filters = this.createSearchSelectedFilters(customFilters, priceMax, priceMin);\n }\n\n return (\n \n );\n }\n}\n\nexport default withRouter(SelectedFiltersContainer);\n","/* eslint-disable react/no-unknown-property */\n\n/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\n\nimport parser from 'html-react-parser';\nimport { PureComponent } from 'react';\n\nimport TextPlaceholder from 'Component/TextPlaceholder';\nimport { CategoryTreeType } from 'Type/Category.type';\n\nimport './CategoryDetails.style';\n\n/**\n * Category details\n * @class CategoryDetails\n * @namespace Scandipwa/Component/CategoryDetails/Component */\nexport class CategoryDetailsComponent extends PureComponent {\n static propTypes = {\n category: CategoryTreeType.isRequired\n };\n\n renderCategoryName() {\n const { category: { name, id } } = this.props;\n\n if (id && !name) {\n return null;\n }\n\n return (\n

    \n \n

    \n );\n }\n\n renderDescription() {\n const { category: { description } } = this.props;\n\n if (!description) {\n return null;\n }\n\n return
    { parser(description) }
    ;\n }\n\n render() {\n return (\n
    \n
    \n { this.renderCategoryName() }\n { this.renderDescription() }\n
    \n
    \n );\n }\n}\n\nexport default CategoryDetailsComponent;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport const UPDATE_LINKED_PRODUCTS = 'UPDATE_LINKED_PRODUCTS';\n/**\n * Update upsell products list (rewrite if already exists).\n * @param {Array} upsell List of products returned from fetch\n * @return {void}\n * @namespace Store/LinkedProducts/Action/updateLinkedProducts\n */\nexport const updateLinkedProducts = (linkedProducts) => ({\n type: UPDATE_LINKED_PRODUCTS,\n linkedProducts\n});\n","// eslint-disable-next-line import/prefer-default-export\nexport const SCROLL_TO_TOP_BUTTON_SHOW_PX = 100;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport { connect } from 'react-redux';\n\nimport BreadcrumbsReducer from 'Store/Breadcrumbs/Breadcrumbs.reducer';\nimport { withReducers } from 'Util/DynamicReducer';\n\nimport Breadcrumbs from './Breadcrumbs.component';\n\n/** @namespace Component/Breadcrumbs/Container/mapStateToProps */\nexport const mapStateToProps = (state) => ({\n breadcrumbs: state.BreadcrumbsReducer.breadcrumbs,\n areBreadcrumbsVisible: state.BreadcrumbsReducer.areBreadcrumbsVisible\n});\n\n/** @namespace Component/Breadcrumbs/Container/mapDispatchToProps */\nexport const mapDispatchToProps = () => ({});\n\nexport default withReducers({\n BreadcrumbsReducer\n})(connect(mapStateToProps, mapDispatchToProps)(Breadcrumbs));\n","/* eslint-disable import/prefer-default-export */\n\n/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport const UTMOST_PAGES_COUNT = 2;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport ChevronIcon from 'Component/ChevronIcon';\nimport { LEFT, RIGHT } from 'Component/ChevronIcon/ChevronIcon.config';\nimport PaginationLink from 'Component/PaginationLink';\nimport TextPlaceholder from 'Component/TextPlaceholder';\nimport { MixType } from 'Type/Common.type';\nimport { range } from 'Util/Manipulations';\n\nimport './Pagination.style';\n\n/** @namespace Component/Pagination/Component */\nexport class Pagination extends PureComponent {\n static propTypes = {\n isLoading: PropTypes.bool.isRequired,\n pathname: PropTypes.string.isRequired,\n totalPages: PropTypes.number.isRequired,\n currentPage: PropTypes.number.isRequired,\n getSearchQuery: PropTypes.func.isRequired,\n anchorTextPrevious: PropTypes.string.isRequired,\n anchorTextNext: PropTypes.string.isRequired,\n firstFramePage: PropTypes.number.isRequired,\n lastFramePage: PropTypes.number.isRequired,\n prevPageJump: PropTypes.number.isRequired,\n nextPageJump: PropTypes.number.isRequired,\n shouldRenderNextJump: PropTypes.bool.isRequired,\n shouldRenderPreviousJump: PropTypes.bool.isRequired,\n shouldRenderJumps: PropTypes.bool.isRequired,\n paginationFrame: PropTypes.number.isRequired,\n id: PropTypes.string.isRequired,\n mix: MixType.isRequired\n };\n\n renderPreviousPageLink() {\n const {\n anchorTextPrevious,\n currentPage,\n totalPages,\n paginationFrame\n } = this.props;\n\n /*\n 1. hide 'Previous' button if current page is the first page\n 2. hide 'Previous' button if total number of pages doesn't exceed total number of pages to display\n (i.e. all pages are already shown)\n */\n if (currentPage <= 1 || paginationFrame >= totalPages) {\n return (\n
  • \n );\n }\n\n return this.renderPageLink(\n currentPage - 1,\n __('Previous page'),\n anchorTextPrevious || this.renderPageIcon()\n );\n }\n\n renderPageLinks() {\n const {\n currentPage,\n firstFramePage,\n lastFramePage\n } = this.props;\n\n return range(firstFramePage, lastFramePage).map((page) => this.renderPageLink(\n page,\n __('Page %s', page),\n page.toString(),\n page === currentPage\n ));\n }\n\n renderPageIcon(isNext = false) {\n return (\n \n );\n }\n\n renderNextPageLink() {\n const {\n anchorTextNext,\n currentPage,\n totalPages,\n paginationFrame\n } = this.props;\n\n /*\n 1. hide 'Next' button if current page is the last page\n 2. hide 'Next' button if total number of pages doesn't exceed total number of pages to display\n (i.e. all pages are already shown)\n */\n if (currentPage > totalPages - 1 || paginationFrame >= totalPages) {\n return (\n
  • \n );\n }\n\n return this.renderPageLink(\n currentPage + 1,\n __('Next page'),\n anchorTextNext || this.renderPageIcon(true)\n );\n }\n\n renderPageLink(\n pageNumber,\n label,\n children,\n isCurrent = false\n ) {\n const {\n pathname,\n getSearchQuery\n } = this.props;\n\n return (\n \n \n { children }\n \n
  • \n );\n }\n\n renderFirstPageLink() {\n const { shouldRenderJumps, firstFramePage } = this.props;\n\n if (!shouldRenderJumps || firstFramePage === 1) {\n return null;\n }\n\n return this.renderPageLink(\n 1,\n __('Page %s', 1),\n '1',\n );\n }\n\n renderLastPageLink() {\n const { totalPages, shouldRenderJumps, lastFramePage } = this.props;\n\n if (!shouldRenderJumps || lastFramePage === totalPages) {\n return null;\n }\n\n return this.renderPageLink(\n totalPages,\n __('Page %s', totalPages),\n totalPages.toString(),\n );\n }\n\n // displayed as '...' by default\n renderPreviousJump() {\n const { prevPageJump, shouldRenderPreviousJump } = this.props;\n\n if (!shouldRenderPreviousJump) {\n return null;\n }\n\n return this.renderPageLink(\n prevPageJump,\n __('Page %s', prevPageJump),\n '...',\n );\n }\n\n // displayed as '...' by default\n renderNextJump() {\n const { nextPageJump, shouldRenderNextJump } = this.props;\n\n if (!shouldRenderNextJump) {\n return null;\n }\n\n return this.renderPageLink(\n nextPageJump,\n __('Page %s', nextPageJump),\n '...',\n );\n }\n\n renderPlaceholder() {\n return (\n
      \n { Array.from({ length: 4 }, (_, i) => (\n \n \n \n )) }\n
    \n );\n }\n\n render() {\n const {\n isLoading,\n totalPages,\n id,\n mix\n } = this.props;\n\n if (totalPages === 1) { // do not show pagination, if there are less then one page\n return
      ;\n }\n\n if (isLoading) {\n return this.renderPlaceholder();\n }\n\n return (\n \n );\n }\n}\n\nexport default Pagination;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport { default } from './PaginationLink.component';\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport { default } from './FilterIcon.component';\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport { default } from './GridIcon.component';\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport { default } from './ListIcon.component';\n","/* eslint-disable react/no-unknown-property */\n/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport TextPlaceholder from 'Component/TextPlaceholder';\nimport { ProductType } from 'Type/ProductList.type';\n\nimport './ProductLabel.extended.style';\n\n/** @namespace Scandipwa/Component/ProductLabel/Component */\nexport class ProductLabelComponent extends PureComponent {\n static propTypes = {\n product: ProductType,\n // eslint-disable-next-line react/boolean-prop-naming\n areDetailsLoaded: PropTypes.bool,\n isPDP: PropTypes.bool,\n isBadge: PropTypes.bool\n };\n\n static defaultProps = {\n product: {},\n areDetailsLoaded: false,\n isPDP: false,\n isBadge: false\n };\n\n renderProductLabel() {\n const {\n product: {\n label_text,\n label_color_background,\n label_color_foreground,\n product_badge\n },\n areDetailsLoaded,\n isPDP,\n isBadge\n } = this.props;\n\n const labelStyle = {\n color: label_color_foreground,\n backgroundColor: label_color_background\n };\n\n const pseudoElementStyle = {\n borderColor: `transparent ${label_color_background} transparent transparent`\n };\n\n if (isBadge) {\n if (product_badge) {\n return (\n \n { product_badge }\n \n );\n }\n\n return null;\n }\n\n if (!areDetailsLoaded && isPDP) {\n return (\n \n \n \n );\n }\n\n if (!label_text) {\n return null;\n }\n\n return (\n \n { label_text }\n
      \n
      \n );\n }\n\n render() {\n return this.renderProductLabel();\n }\n}\n\nexport default ProductLabelComponent;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\nimport { connect } from 'react-redux';\n\nimport LinkedProductsReducer from 'Store/LinkedProducts/LinkedProducts.reducer';\nimport { LinkedProductsType } from 'Type/ProductList.type';\nimport { withReducers } from 'Util/DynamicReducer';\n\nimport ProductLinks from './ProductLinks.component';\n\n/** @namespace Component/ProductLinks/Container/mapStateToProps */\nexport const mapStateToProps = (state) => ({\n linkedProducts: state.LinkedProductsReducer.linkedProducts\n});\n\n/** @namespace Component/ProductLinks/Container/mapDispatchToProps */\nexport const mapDispatchToProps = () => ({});\n\n/** @namespace Component/ProductLinks/Container */\nexport class ProductLinksContainer extends PureComponent {\n static propTypes = {\n linkedProducts: LinkedProductsType.isRequired,\n linkType: PropTypes.string.isRequired,\n title: PropTypes.string.isRequired,\n numberOfProductsToDisplay: PropTypes.number,\n areDetailsLoaded: PropTypes.bool\n };\n\n static defaultProps = {\n numberOfProductsToDisplay: 4,\n areDetailsLoaded: true\n };\n\n state = {\n siblingsHaveBrands: false,\n siblingsHavePriceBadge: false,\n siblingsHaveTierPrice: false,\n siblingsHaveConfigurableOptions: false\n };\n\n containerProps() {\n const {\n areDetailsLoaded,\n linkType,\n linkedProducts,\n numberOfProductsToDisplay,\n title\n } = this.props;\n const {\n siblingsHaveBrands,\n siblingsHavePriceBadge,\n siblingsHaveTierPrice,\n siblingsHaveConfigurableOptions\n } = this.state;\n\n return {\n areDetailsLoaded,\n linkType,\n linkedProducts,\n numberOfProductsToDisplay,\n title,\n productCardFunctions: {\n setSiblingsHaveBrands: () => this.setState({ siblingsHaveBrands: true }),\n setSiblingsHavePriceBadge: () => this.setState({ siblingsHavePriceBadge: true }),\n setSiblingsHaveTierPrice: () => this.setState({ siblingsHaveTierPrice: true }),\n setSiblingsHaveConfigurableOptions: () => this.setState({ siblingsHaveConfigurableOptions: true })\n },\n productCardProps: {\n siblingsHaveBrands,\n siblingsHavePriceBadge,\n siblingsHaveTierPrice,\n siblingsHaveConfigurableOptions\n }\n };\n }\n\n render() {\n const {\n linkType,\n linkedProducts: {\n [linkType]: {\n items = []\n } = {}\n }\n } = this.props;\n\n if (items.length === 0) {\n return null;\n }\n\n return (\n \n );\n }\n}\n\nexport default withReducers({\n LinkedProductsReducer\n})(connect(mapStateToProps, mapDispatchToProps)(ProductLinksContainer));\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport BrowserDatabase from 'Util/BrowserDatabase';\n\nimport { UPDATE_LINKED_PRODUCTS } from './LinkedProducts.action';\nimport { LINKED_PRODUCTS } from './LinkedProducts.dispatcher';\n\nexport const UPSELL = 'upsell';\nexport const RELATED = 'related';\nexport const CROSS_SELL = 'crosssell';\n\n/** @namespace Store/LinkedProducts/Reducer/getInitialState */\nexport const getInitialState = () => ({\n linkedProducts: BrowserDatabase.getItem(LINKED_PRODUCTS) || {\n upsell: {},\n related: {},\n crosssell: {}\n }\n});\n\n/** @namespace Store/LinkedProducts/Reducer/LinkedProductsReducer */\nexport const LinkedProductsReducer = (\n state = getInitialState(),\n action\n) => {\n const { type } = action;\n\n if (type !== UPDATE_LINKED_PRODUCTS) {\n return state;\n }\n\n const {\n linkedProducts: {\n [UPSELL]: upsell,\n [RELATED]: related,\n [CROSS_SELL]: crosssell,\n updateCrossSell = false\n }\n } = action;\n\n const {\n linkedProducts: {\n [CROSS_SELL]: prevCrossSell\n }\n } = state;\n\n if (updateCrossSell) {\n return {\n ...state,\n linkedProducts: {\n [UPSELL]: upsell,\n [RELATED]: related,\n [CROSS_SELL]: crosssell\n }\n };\n }\n\n return {\n ...state,\n linkedProducts: {\n [UPSELL]: upsell,\n [RELATED]: related,\n [CROSS_SELL]: {\n ...prevCrossSell,\n ...related,\n items: Object.values({\n ...prevCrossSell.items,\n ...crosssell.items\n })\n }\n }\n };\n};\n\nexport default LinkedProductsReducer;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport { connect } from 'react-redux';\n\nimport CategoryItemsCount from './CategoryItemsCount.component';\n\n/** @namespace Component/CategoryItemsCount/Container/mapStateToProps */\nexport const mapStateToProps = (state) => ({\n totalItems: state.ProductListReducer.totalItems\n});\n\n/** @namespace Component/CategoryItemsCount/Container/mapDispatchToProps */\nexport const mapDispatchToProps = () => ({});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(CategoryItemsCount);\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport TextPlaceholder from 'Component/TextPlaceholder';\n\n/** @namespace Component/CategoryItemsCount/Component */\nexport class CategoryItemsCount extends PureComponent {\n static propTypes = {\n totalItems: PropTypes.number.isRequired,\n isMatchingListFilter: PropTypes.bool\n };\n\n static defaultProps = {\n isMatchingListFilter: false\n };\n\n render() {\n const {\n totalItems,\n isMatchingListFilter\n } = this.props;\n\n return (\n

      \n \n

      \n );\n }\n}\n\nexport default CategoryItemsCount;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport { default } from './ProductList.container';\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\n\nimport ProductListInfoDispatcher from 'Store/ProductListInfo/ProductListInfo.dispatcher';\nimport { FilterInputType, SelectedFiltersType } from 'Type/Category.type';\nimport { MixType } from 'Type/Common.type';\nimport { DeviceType } from 'Type/Device.type';\nimport { PagesType } from 'Type/ProductList.type';\nimport { HistoryType, LocationType } from 'Type/Router.type';\nimport { scrollToTop } from 'Util/Browser';\nimport { getQueryParam, setQueryParams } from 'Util/Url';\n\nimport ProductList from './ProductList.component';\n\n/** @namespace Component/ProductList/Container/mapStateToProps */\nexport const mapStateToProps = (state) => ({\n device: state.ConfigReducer.device\n});\n\n/** @namespace Component/ProductList/Container/mapDispatchToProps */\nexport const mapDispatchToProps = (dispatch) => ({\n requestProductListInfo: (options) => ProductListInfoDispatcher.handleData(dispatch, options)\n});\n\n/** @namespace Component/ProductList/Container */\nexport class ProductListContainer extends PureComponent {\n containerFunctions = {\n loadPrevPage: this.loadPage.bind(this, false),\n loadPage: this.loadPage.bind(this),\n updatePage: this.updatePage.bind(this)\n };\n\n static propTypes = {\n history: HistoryType.isRequired,\n location: LocationType.isRequired,\n pages: PagesType.isRequired,\n pageSize: PropTypes.number,\n isLoading: PropTypes.bool.isRequired,\n isPageLoading: PropTypes.bool,\n totalItems: PropTypes.number.isRequired,\n requestProductList: PropTypes.func.isRequired,\n requestProductListInfo: PropTypes.func.isRequired,\n selectedFilters: SelectedFiltersType,\n isPreventRequest: PropTypes.bool,\n isInfiniteLoaderEnabled: PropTypes.bool,\n isPaginationEnabled: PropTypes.bool,\n filter: FilterInputType,\n search: PropTypes.string,\n sort: PropTypes.objectOf(PropTypes.string),\n noAttributes: PropTypes.bool,\n noVariants: PropTypes.bool,\n isWidget: PropTypes.bool,\n device: DeviceType.isRequired,\n mix: MixType,\n title: PropTypes.string,\n totalPages: PropTypes.number,\n isPlp: PropTypes.bool\n };\n\n static defaultProps = {\n mix: {},\n pageSize: 24,\n filter: {},\n search: '',\n selectedFilters: {},\n sort: undefined,\n isPreventRequest: false,\n isPaginationEnabled: true,\n isInfiniteLoaderEnabled: true,\n isPageLoading: false,\n noAttributes: false,\n noVariants: false,\n isWidget: false,\n title: '',\n totalPages: 1,\n isPlp: false\n };\n\n state = {\n pagesCount: 1\n };\n\n componentDidMount() {\n const { pages, isPreventRequest } = this.props;\n const { pagesCount } = this.state;\n const pagesLength = Object.keys(pages).length;\n\n if (pagesCount !== pagesLength) {\n this.setState({ pagesCount: pagesLength });\n }\n\n // Is true when category is changed. This check prevents making new requests when navigating back to PLP from PDP\n if (!isPreventRequest) {\n this.requestPage(this._getPageFromUrl());\n }\n }\n\n componentDidUpdate(prevProps) {\n const {\n sort,\n search,\n filter,\n pages\n } = this.props;\n\n const {\n sort: prevSort,\n search: prevSearch,\n filter: prevFilter,\n location: prevLocation\n } = prevProps;\n\n const { pagesCount } = this.state;\n const pagesLength = Object.keys(pages).length;\n\n if (pagesCount !== pagesLength) {\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({ pagesCount: pagesLength });\n }\n\n const prevPage = this._getPageFromUrl(prevLocation);\n const currentPage = this._getPageFromUrl();\n\n if (search !== prevSearch\n || currentPage !== prevPage\n || JSON.stringify(sort) !== JSON.stringify(prevSort)\n || JSON.stringify(filter) !== JSON.stringify(prevFilter)\n ) {\n this.requestPage(this._getPageFromUrl());\n }\n }\n\n isEmptyFilter() {\n const { filter } = this.props;\n\n const validFilters = Object.entries(filter).filter(([key, value]) => {\n switch (key) {\n case 'priceRange':\n return value.min > 0 || value.max > 0;\n case 'customFilters':\n return Object.keys(value).length > 0;\n case 'categoryIds':\n default:\n return true;\n }\n });\n\n /**\n * If there is more then one valid filter, filters are not empty.\n */\n return validFilters.length > 0;\n }\n\n requestPage(currentPage = 1, isNext = false) {\n const {\n sort,\n search,\n filter,\n pageSize,\n requestProductList,\n requestProductListInfo,\n noAttributes,\n noVariants,\n isWidget,\n device\n } = this.props;\n\n /**\n * In case the wrong category was passed down to the product list,\n * prevent it from being requested.\n */\n if (filter.categoryIds === -1) {\n return;\n }\n\n /**\n * Do not request page if there are no filters\n */\n if (!search && !this.isEmptyFilter()) {\n return;\n }\n\n // TODO: product list requests filters alongside the page\n // TODO: sometimes product list is requested more then once\n // TODO: the product list should not request itself, when coming from PDP\n\n const options = {\n isNext,\n noAttributes,\n noVariants,\n args: {\n sort,\n filter,\n search,\n pageSize,\n currentPage\n }\n };\n\n const infoOptions = {\n args: {\n filter,\n search\n }\n };\n\n requestProductList(options);\n\n if (!isWidget) {\n requestProductListInfo(infoOptions);\n\n if (!device.isMobile) {\n scrollToTop();\n }\n }\n }\n\n containerProps() {\n const {\n device,\n isLoading,\n isPaginationEnabled,\n isWidget,\n mix,\n pages,\n selectedFilters,\n title,\n totalPages,\n isPlp\n } = this.props;\n\n return {\n device,\n isLoading,\n isPaginationEnabled,\n isWidget,\n mix,\n pages,\n selectedFilters,\n title,\n totalPages,\n currentPage: this._getPageFromUrl(),\n isShowLoading: this._isShowLoading(),\n isVisible: this._isVisible(),\n isPlp,\n requestPage: this.requestPage,\n // disable this property to enable infinite scroll on desktop\n isInfiniteLoaderEnabled: this._getIsInfiniteLoaderEnabled()\n };\n }\n\n _getIsInfiniteLoaderEnabled() { // disable infinite scroll on mobile\n const { isInfiniteLoaderEnabled, device } = this.props;\n\n // allow scroll and mobile\n if (device.isMobile) {\n return isInfiniteLoaderEnabled;\n }\n\n return false;\n }\n\n _getPageFromUrl(url) {\n const { location: currentLocation } = this.props;\n const location = url || currentLocation;\n\n return +(getQueryParam('page', location) || 1);\n }\n\n _getPagesBounds() {\n const { pages, totalItems, pageSize } = this.props;\n const keys = Object.keys(pages);\n\n return {\n maxPage: Math.max(...keys),\n minPage: Math.min(...keys),\n totalPages: Math.ceil(totalItems / pageSize),\n loadedPagesCount: keys.length\n };\n }\n\n _isShowLoading() {\n const { isLoading } = this.props;\n const { minPage } = this._getPagesBounds();\n\n return minPage > 1 && !isLoading;\n }\n\n _isVisible() {\n const { maxPage, totalPages } = this._getPagesBounds();\n\n return maxPage < totalPages;\n }\n\n loadPage(next = true) {\n const { pagesCount } = this.state;\n const { isPageLoading } = this.props;\n\n const {\n minPage,\n maxPage,\n totalPages,\n loadedPagesCount\n } = this._getPagesBounds();\n\n const isUpdatable = totalPages > 0 && pagesCount === loadedPagesCount;\n const shouldUpdateList = next ? maxPage < totalPages : minPage > 1;\n\n if (isUpdatable && shouldUpdateList && !isPageLoading) {\n this.setState({ pagesCount: pagesCount + 1 });\n this.requestPage(next ? maxPage + 1 : minPage - 1, true);\n }\n }\n\n updatePage(pageNumber) {\n const { location, history } = this.props;\n\n setQueryParams({\n page: pageNumber === 1 ? '' : pageNumber\n }, location, history);\n\n scrollToTop();\n }\n\n render() {\n return (\n \n );\n }\n}\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(ProductListContainer));\n","/* eslint-disable no-magic-numbers */\n/* eslint-disable @scandipwa/scandipwa-guidelines/jsx-no-props-destruction */\n/* eslint-disable max-lines */\n/* eslint-disable react/jsx-no-bind */\n/* eslint-disable react/no-unknown-property */\n/* eslint-disable @scandipwa/scandipwa-guidelines/only-render-in-component */\n/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\n\nimport PropTypes from 'prop-types';\n\nimport ProductListPage from 'Component/ProductListPage';\nimport SourceProductList from 'SourceComponent/ProductList/ProductList.component';\nimport { HistoryType } from 'Type/Router.type';\n\nimport './ProductList.extended.style';\n\n/**\n * Category sort\n * @class CategorySort\n * @namespace Scandipwa/Component/ProductList/Component */\nexport class ProductListComponent extends SourceProductList {\n static propTypes = {\n ...super.propTypes,\n history: HistoryType.isRequired,\n isPageLoading: PropTypes.bool.isRequired\n };\n\n /**\n * Default state\n *\n * @type {{infiniteLoader: boolean}}\n */\n state = {\n // On search page we will have infinite scroll by default\n infiniteLoader: /search/.test(window.location.pathname),\n pagesLoaded: 1,\n triggerPageThreeLoad: false\n };\n\n showNextInfiniteScrollPage = this.showNextInfiniteScrollPage.bind(this);\n\n shouldComponentUpdate(nextProps, nextState) {\n const { pagesLoaded: pagesFromState } = nextState;\n const { pagesLoaded: prevPagesFromState } = this.state;\n const {\n pages = {},\n pagesNumberToShow: nextPagesNumberToShow,\n sort,\n selectedFilters\n } = nextProps;\n const {\n pages: prevPages = {},\n pagesNumberToShow,\n sort: prevSort,\n selectedFilters: prevSelectedFilters\n } = this.props;\n\n if (JSON.stringify(sort) !== JSON.stringify(prevSort)\n || JSON.stringify(selectedFilters) !== JSON.stringify(prevSelectedFilters)) {\n this.setState({ infiniteLoader: false });\n }\n\n const pagesLoaded = Object.values(pages).length;\n const prevPagesLoaded = Object.values(prevPages).length;\n const { isLoading, isPageLoading } = nextProps;\n const { isLoading: prevIsLoading, isPageLoading: prevIsPageLoading } = this.props;\n\n return isLoading !== prevIsLoading\n || isPageLoading !== prevIsPageLoading\n || pagesLoaded !== prevPagesLoaded\n || pagesFromState !== prevPagesFromState\n || nextPagesNumberToShow !== pagesNumberToShow;\n }\n\n /**\n * On component did update\n *\n * @param prevProps\n */\n componentDidUpdate(prevProps) {\n const {\n pages = {},\n requestPage,\n pagesNumberToShow,\n updatePagesNumberToShow\n } = this.props;\n const { pages: prevPages = {} } = prevProps;\n const { triggerPageThreeLoad, infiniteLoader } = this.state;\n const pagesLoaded = Math.max(...Object.keys(pages));\n const prevPagesLoaded = Math.max(...Object.keys(prevPages));\n\n if (pagesLoaded !== prevPagesLoaded) {\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({ pagesLoaded });\n\n if (pagesLoaded === 2 && triggerPageThreeLoad) {\n updatePagesNumberToShow(infiniteLoader ? pagesNumberToShow + 1 : pagesNumberToShow);\n this.setState({\n triggerPageThreeLoad: false\n }, () => requestPage(3, true));\n }\n }\n\n this.observePageChange();\n }\n\n showNextInfiniteScrollPage(newVal) {\n const { infiniteLoader } = this.state;\n const {\n requestPage,\n totalPages,\n pagesNumberToShow,\n updatePagesNumberToShow\n } = this.props;\n\n // Page 1 is automatically loaded, page 2 is loaded by clicking \"show more/all\" buttons, so start from page 3\n if (!infiniteLoader || typeof (newVal) !== 'number' || newVal < 3) {\n return;\n }\n\n if (newVal > pagesNumberToShow) {\n updatePagesNumberToShow(newVal);\n\n if (newVal <= totalPages) {\n requestPage(newVal, true);\n }\n }\n }\n\n /**\n * Renders load more button\n *\n * @returns {JSX.Element|null}\n */\n renderLoadMoreButton() {\n const {\n loadPage,\n pageSize,\n totalItems,\n currentPage,\n pagesNumberToShow,\n updatePagesNumberToShow\n } = this.props;\n const { pagesLoaded } = this.state;\n\n const productsLeftToLoad = totalItems - pageSize * currentPage;\n const nextPageSize = (productsLeftToLoad < pageSize) ? productsLeftToLoad : pageSize;\n const url = new URL(window.location.href);\n url.searchParams.set('page', currentPage + 1);// set correct url for anchor tag href attribute\n\n return (\n {\n event.preventDefault();\n loadPage();\n updatePagesNumberToShow(pagesNumberToShow + 1);\n\n // if user clicks the button before request for page 2 is resolved, prepare page 3 as well.\n if (pagesLoaded === 1) {\n this.setState({ triggerPageThreeLoad: true });\n }\n } }\n >\n { __('%s More Items', nextPageSize) }\n \n );\n }\n\n /**\n * Renders load all button\n *\n * @returns {JSX.Element}\n */\n renderLoadAllButton() {\n const { pagesLoaded } = this.state;\n const {\n pagesNumberToShow,\n updatePagesNumberToShow,\n loadPage,\n pages = {}\n } = this.props;\n\n return (\n {\n updatePagesNumberToShow(pagesNumberToShow + 1);\n this.setState({ infiniteLoader: true });\n\n // if user clicks the button before request for page 2 is resolved, prepare page 3 as well.\n if (pagesLoaded === 1) {\n this.setState({ triggerPageThreeLoad: true });\n }\n\n if (Math.max(...Object.keys(pages)) > 2) {\n loadPage();\n }\n } }\n >\n { __('Show All') }\n \n );\n }\n\n /**\n * Renders pagination buttons\n *\n * @returns {JSX.Element}\n */\n renderPaginationButtons() {\n const {\n totalPages,\n isLoading,\n areComponentsLoading,\n isInfoLoading,\n pagesNumberToShow\n } = this.props;\n const { infiniteLoader, pagesLoaded } = this.state;\n\n if (\n pagesNumberToShow === totalPages\n || (isLoading && pagesNumberToShow !== pagesLoaded)\n || (areComponentsLoading && isInfoLoading)\n || infiniteLoader\n ) {\n return null;\n }\n\n return (\n \n { this.renderLoadMoreButton() }\n { this.renderLoadAllButton() }\n \n );\n }\n\n renderProductPage([key, items = []]) {\n const { selectedFilters } = this.props;\n\n const pageNumber = +key;\n\n return this.renderPage({\n selectedFilters,\n pageNumber,\n items,\n key,\n wrapperRef: (node) => {\n this.nodes[pageNumber] = node;\n }\n });\n }\n\n /**\n * Renders pages\n *\n * @returns {unknown[]|*}\n */\n renderPages() {\n const {\n pages,\n isVisible,\n isLoading,\n isPageLoading,\n isInfiniteLoaderEnabled,\n totalPages\n } = this.props;\n const { infiniteLoader, pagesLoaded } = this.state;\n\n if (isLoading) {\n return this.renderPage();\n }\n\n const pageRenders = Object.entries(pages).map(this.renderProductPage.bind(this));\n\n if (\n isVisible\n && isInfiniteLoaderEnabled\n && (infiniteLoader || isPageLoading)\n && pagesLoaded !== totalPages\n ) { // add placeholders to the end of pages if needed\n const key = Math.max(Object.keys(pages)) + 1; // the key should match next page key\n pageRenders.push(this.renderPage({ key }));\n }\n\n return pageRenders;\n }\n\n /**\n * Renders page\n *\n * @param props\n * @returns {JSX.Element}\n */\n renderPage(props = {}) {\n const {\n isInfiniteLoaderEnabled,\n isLoading,\n isVisible,\n currentPage,\n mix,\n areMenuFiltersLoading,\n history,\n pagesNumberToShow\n } = this.props;\n const { infiniteLoader } = this.state;\n\n const newProps = this._processProps(props);\n const { key } = newProps;\n\n if (+key > pagesNumberToShow) {\n return null;\n }\n\n return (\n \n );\n }\n\n renderLoadButton() {\n const {\n isShowLoading,\n isInfiniteLoaderEnabled,\n loadPrevPage\n } = this.props;\n\n if (!isShowLoading || !isInfiniteLoaderEnabled) {\n return null;\n }\n\n return (\n \n { __('Load previous') }\n \n );\n }\n\n render() {\n const {\n totalPages,\n isLoading,\n mix\n } = this.props;\n\n if (!isLoading && totalPages === 0) {\n return this.renderNoProducts();\n }\n\n return (\n \n { this.renderTitle() }\n { this.renderLoadButton() }\n { this.renderPages() }\n { this.renderPaginationButtons() }\n \n );\n }\n}\n\nexport default ProductListComponent;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\n\nexport const DEFAULT_PLACEHOLDER_COUNT = 36;\nexport const DEFAULT_PLACEHOLDER_COUNT_MOBILE = 10;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport Pagination from 'Component/Pagination';\nimport ProductListPage from 'Component/ProductListPage';\nimport { FilterType } from 'Type/Category.type';\nimport { MixType } from 'Type/Common.type';\nimport { DeviceType } from 'Type/Device.type';\nimport { PagesType } from 'Type/ProductList.type';\nimport { scrollToTop } from 'Util/Browser';\nimport { noopFn } from 'Util/Common';\n\nimport { observerThreshold } from './ProductList.config';\n\nimport './ProductList.style';\n\n/**\n * List of category products\n * @class ProductList\n * @namespace Component/ProductList/Component\n */\nexport class ProductList extends PureComponent {\n static propTypes = {\n device: DeviceType.isRequired,\n title: PropTypes.string,\n pages: PagesType.isRequired,\n selectedFilters: FilterType,\n isLoading: PropTypes.bool,\n updatePage: PropTypes.func,\n totalPages: PropTypes.number,\n loadPage: PropTypes.func,\n loadPrevPage: PropTypes.func,\n currentPage: PropTypes.number,\n isShowLoading: PropTypes.bool,\n isVisible: PropTypes.bool,\n isInfiniteLoaderEnabled: PropTypes.bool,\n isPaginationEnabled: PropTypes.bool,\n isWidget: PropTypes.bool,\n isPlp: PropTypes.bool.isRequired,\n mix: MixType\n };\n\n static defaultProps = {\n mix: {},\n title: '',\n isInfiniteLoaderEnabled: false,\n isPaginationEnabled: false,\n selectedFilters: {},\n isLoading: false,\n updatePage: noopFn,\n totalPages: 1,\n loadPage: noopFn,\n loadPrevPage: noopFn,\n currentPage: 1,\n isShowLoading: false,\n isVisible: true,\n isWidget: false\n };\n\n nodes = {};\n\n observedNodes = [];\n\n pagesIntersecting = [];\n\n componentDidUpdate(prevProps) {\n const { isWidget, currentPage, device } = this.props;\n const { currentPage: prevCurrentPage } = prevProps;\n\n // Scroll up on page change, ignore widgets\n if (prevCurrentPage !== currentPage && !isWidget && !device.isMobile) {\n scrollToTop({ behavior: 'smooth' });\n }\n\n const { isInfiniteLoaderEnabled } = this.props;\n\n if (isInfiniteLoaderEnabled) {\n this.observePageChange();\n }\n }\n\n componentWillUnmount() {\n if (this.observer && this.observer.disconnect) {\n this.observer.disconnect();\n }\n\n this.observer = null;\n }\n\n observePageChange() {\n const { updatePage, isLoading } = this.props;\n\n if (isLoading) {\n this.pagesIntersecting = [];\n }\n\n if (!this.observer && 'IntersectionObserver' in window) {\n const threshold = this._getThreshold();\n\n this.observer = new IntersectionObserver((entries) => {\n const { currentPage } = this.props;\n\n entries.forEach(({ target, isIntersecting }) => {\n const page = +Object.keys(this.nodes).find((node) => this.nodes[node] === target);\n const index = this.pagesIntersecting.indexOf(page);\n\n if (isIntersecting && index === -1) {\n this.pagesIntersecting.push(page);\n }\n\n if (!isIntersecting && index > -1) {\n this.pagesIntersecting.splice(index, 1);\n }\n });\n\n const minPage = Math.min(...this.pagesIntersecting);\n\n if (minPage < Infinity && minPage !== currentPage) {\n updatePage(minPage);\n }\n }, {\n rootMargin: '0px',\n threshold\n });\n }\n\n this.updateObserver();\n }\n\n updateObserver() {\n const currentNodes = Object.values(this.nodes);\n\n if (!this.observer || currentNodes.length <= 0) {\n return;\n }\n\n currentNodes.forEach((node) => {\n if (node && !this.observedNodes.includes(node)) {\n this.observer.observe(node);\n this.observedNodes.push(node);\n }\n });\n\n this.observedNodes = this.observedNodes.reduce((acc, node) => {\n if (!currentNodes.includes(node)) {\n this.observer.unobserve(node);\n } else {\n acc.push(node);\n }\n\n return acc;\n }, []);\n }\n\n _getThreshold() {\n const hundredPercent = 100;\n\n return Array.from(\n { length: (hundredPercent / observerThreshold) + 1 },\n (_, i) => i * (observerThreshold / hundredPercent)\n );\n }\n\n renderLoadButton() {\n const {\n isShowLoading,\n isInfiniteLoaderEnabled,\n loadPrevPage\n } = this.props;\n\n if (!isShowLoading || !isInfiniteLoaderEnabled) {\n return null;\n }\n\n return (\n \n { __('Load previous') }\n \n );\n }\n\n renderNoProducts() {\n return (\n
      \n \n

      { __('We are sorry!') }

      \n

      { __('There were no products found matching your request.') }

      \n

      { __('Please, try removing selected filters and try again!') }

      \n
      \n \n );\n }\n\n renderPages() {\n const {\n pages,\n isVisible,\n isLoading,\n isInfiniteLoaderEnabled\n } = this.props;\n\n if (isLoading) {\n return this.renderPage();\n }\n\n const pageRenders = Object.entries(pages).map(this.renderProductPage.bind(this));\n\n if (isVisible && isInfiniteLoaderEnabled) { // add placeholders to the end of pages if needed\n const key = Math.max(Object.keys(pages)) + 1; // the key should match next page key\n\n pageRenders.push(this.renderPage({ key }));\n }\n\n return pageRenders;\n }\n\n _processProps(props) {\n const { isInfiniteLoaderEnabled } = this.props;\n\n if (isInfiniteLoaderEnabled) {\n return props;\n }\n\n // there must be no more then one page per screen\n // if the \"isInfiniteLoaderEnabled\" is false\n const { key, ...restProps } = props;\n\n restProps.key = 0;\n\n return restProps;\n }\n\n renderPage(props = {}) {\n const {\n isInfiniteLoaderEnabled,\n loadPage,\n isLoading,\n isVisible,\n mix,\n isPlp\n } = this.props;\n const {\n items,\n keys,\n pageNumber,\n selectedFilters,\n wrapperRef,\n key\n } = this._processProps(props);\n\n return (\n \n );\n }\n\n renderProductPage([key, items = []]) {\n const { selectedFilters } = this.props;\n\n const pageNumber = +key;\n\n return this.renderPage({\n selectedFilters,\n pageNumber,\n items,\n key,\n wrapperRef: (node) => {\n this.nodes[pageNumber] = node;\n }\n });\n }\n\n renderPagination() {\n const {\n isLoading,\n totalPages,\n isPaginationEnabled\n } = this.props;\n\n if (!isPaginationEnabled) {\n return null;\n }\n\n return (\n \n );\n }\n\n renderTitle() {\n const { title } = this.props;\n\n if (!title) {\n return null;\n }\n\n return (\n

      { title }

      \n );\n }\n\n render() {\n const {\n totalPages,\n isLoading,\n mix\n } = this.props;\n\n if (!isLoading && totalPages === 0) {\n return this.renderNoProducts();\n }\n\n return (\n \n { this.renderTitle() }\n { this.renderLoadButton() }\n { this.renderPages() }\n { this.renderPagination() }\n \n );\n }\n}\n\nexport default ProductList;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport { SortDirectionType } from 'Type/Direction.type';\n\nimport CategorySort from './CategorySort.component';\n\n/** @namespace Component/CategorySort/Container */\nexport class CategorySortContainer extends PureComponent {\n static propTypes = {\n sortFields: PropTypes.oneOfType([\n PropTypes.bool,\n PropTypes.arrayOf(PropTypes.shape({\n id: PropTypes.string,\n label: PropTypes.string\n }))\n ]),\n isMatchingInfoFilter: PropTypes.bool,\n isCurrentCategoryLoaded: PropTypes.bool,\n onSortChange: PropTypes.func.isRequired,\n sortKey: PropTypes.string.isRequired,\n sortDirection: SortDirectionType.isRequired\n };\n\n static defaultProps = {\n sortFields: [],\n isMatchingInfoFilter: false,\n isCurrentCategoryLoaded: false\n };\n\n containerProps() {\n const {\n isCurrentCategoryLoaded,\n isMatchingInfoFilter,\n onSortChange,\n sortDirection,\n sortKey\n } = this.props;\n\n return {\n isCurrentCategoryLoaded,\n isMatchingInfoFilter,\n onSortChange,\n sortDirection,\n sortKey,\n selectOptions: this._prepareOptions()\n };\n }\n\n _getLabel(option) {\n const { id, label: pureLabel } = option;\n\n // eslint-disable-next-line fp/no-let\n let [label] = pureLabel.split(' ');\n\n label = label.charAt(0).toUpperCase() + label.slice(1);\n\n switch (id) {\n case 'name':\n return {\n asc: __('Name: A to Z', label),\n desc: __('Name: Z to A', label)\n };\n case 'position':\n return {\n asc: __('Best match')\n };\n case 'price':\n return {\n asc: __('%s: Low to High', label),\n desc: __('%s: High to Low', label)\n };\n case 'none':\n return {\n asc: __('Best match')\n };\n default:\n return {\n asc: __('%s: Ascending', label),\n desc: __('%s: Descending', label)\n };\n }\n }\n\n _prepareOptions() {\n const { sortFields } = this.props;\n\n if (!sortFields) {\n return [];\n }\n\n const selectOptions = sortFields.reduce((acc, option) => {\n const { id } = option;\n const label = this._getLabel(option);\n const { asc, desc } = label;\n\n if (asc) {\n acc.push({\n id: `ASC ${id}`,\n name: id,\n value: `ASC ${id}`,\n label: asc\n });\n }\n\n if (desc) {\n acc.push({\n id: `DESC ${id}`,\n name: id,\n value: `DESC ${id}`,\n label: desc\n });\n }\n\n return acc;\n }, []);\n\n return selectOptions;\n }\n\n render() {\n return (\n \n );\n }\n}\n\nexport default CategorySortContainer;\n","import arrayWithHoles from \"@babel/runtime/helpers/esm/arrayWithHoles\";\nimport iterableToArray from \"@babel/runtime/helpers/esm/iterableToArray\";\nimport unsupportedIterableToArray from \"@babel/runtime/helpers/esm/unsupportedIterableToArray\";\nimport nonIterableRest from \"@babel/runtime/helpers/esm/nonIterableRest\";\nexport default function _toArray(arr) {\n return arrayWithHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableRest();\n}","/**\n * Copyright © Scandiweb, Inc. All rights reserved.\n *\n * @category Puma\n * @package Puma_MenuFilters\n * @author Deniss Strombergs \n */\n\nexport { default } from './MenuFilters.container';\n","/* eslint-disable max-len */\n/* eslint-disable react/no-unknown-property */\n/* eslint-disable react/boolean-prop-naming */\n/* eslint-disable react/no-unused-prop-types */\n/* eslint-disable @scandipwa/scandipwa-guidelines/only-render-in-component */\n/**\n * Copyright © Scandiweb, Inc. All rights reserved.\n *\n * @category Puma\n * @package Puma_MenuFilters\n * @author Deniss Strombergs \n */\n\nimport PropTypes from 'prop-types';\nimport { createRef, PureComponent } from 'react';\n\nimport { DESKTOP_MIN_WIDTH } from 'Component/CategorySort/CategorySort.config';\nimport ExpandableContent from 'Component/ExpandableContent';\nimport { CategoryTreeType } from 'Type/Category.type';\nimport isMobile from 'Util/Mobile';\n\nimport './MenuFilters.style';\n\n/** @namespace Scandipwa/Component/MenuFilters/Component */\nexport class MenuFiltersComponent extends PureComponent {\n static propTypes = {\n category: CategoryTreeType.isRequired,\n getRenderingData: PropTypes.func.isRequired,\n onClick: PropTypes.func.isRequired,\n menuFiltersHeight: PropTypes.number,\n setMenuFiltersHeight: PropTypes.func.isRequired,\n areComponentsLoading: PropTypes.bool.isRequired,\n filterTitle: PropTypes.string.isRequired,\n isSearchPage: PropTypes.bool.isRequired\n };\n\n static defaultProps = {\n menuFiltersHeight: undefined\n };\n\n state = {\n isDesktop: false\n };\n\n menuFiltersRef = createRef();\n\n renderSubcategory = this.renderSubcategory.bind(this);\n\n renderSubsubcategory = this.renderSubsubcategory.bind(this);\n\n updateWindowDimensions = this.updateWindowDimensions.bind(this);\n\n componentDidMount() {\n this.updateWindowDimensions();\n window.addEventListener('resize', this.updateWindowDimensions);\n }\n\n componentDidUpdate() {\n const { menuFiltersHeight, setMenuFiltersHeight } = this.props;\n\n if (this.menuFiltersRef.current && this.menuFiltersRef.current.clientHeight !== menuFiltersHeight) {\n setMenuFiltersHeight(this.menuFiltersRef.current.clientHeight);\n }\n }\n\n componentWillUnmount() {\n window.removeEventListener('resize', this.updateWindowDimensions);\n }\n\n updateWindowDimensions() {\n const { isDesktop } = this.state;\n const newIsDesktop = (window.innerWidth >= DESKTOP_MIN_WIDTH);\n\n if (isDesktop !== newIsDesktop) {\n this.setState({ isDesktop: newIsDesktop });\n }\n }\n\n renderSubcategory(subcategory) {\n const {\n title,\n children = []\n } = subcategory;\n\n if (!children.length) {\n return null;\n }\n\n return (\n \n { children.map(this.renderSubsubcategory) }\n \n );\n }\n\n renderSubsubcategory(category, index) {\n const {\n title, url, isActive, id\n } = category;\n const { onClick } = this.props;\n\n return (\n \n onClick(url, id) }\n mods={ { isSelected: isActive } }\n >\n { title }\n \n \n );\n }\n\n renderSubcategories(renderingData) {\n if (!renderingData || renderingData.length === 0) {\n return null;\n }\n\n return renderingData.map(((subcategory) => this.renderSubcategory(subcategory)));\n }\n\n renderCategoriesPlaceholders() {\n // eslint-disable-next-line no-magic-numbers\n const sizes = [5, 4, 10, 8, 11];\n\n return sizes.map((item, index) => (\n \n
      \n { 'A'.repeat(item) }\n
      \n \n ));\n }\n\n renderPlaceholder() {\n return (\n \n \n \n { this.renderCategoriesPlaceholders() }\n
    \n \n \n );\n }\n\n render() {\n const {\n getRenderingData,\n areComponentsLoading,\n filterTitle,\n isSearchPage\n } = this.props;\n const { isDesktop } = this.state;\n const renderingData = getRenderingData();\n\n if (!renderingData && !isDesktop) {\n return null;\n }\n\n if ((!renderingData && isDesktop) || areComponentsLoading) {\n return this.renderPlaceholder();\n }\n\n return (\n \n { filterTitle && !isSearchPage &&

    { filterTitle }

    }\n { this.renderSubcategories(renderingData) }\n \n );\n }\n}\n\nexport default MenuFiltersComponent;\n","/**\n * @category Puma\n * @author Deniss Dubinins \n * @copyright Copyright (c) 2022 Scandiweb, Inc (https://scandiweb.com)\n * @license http://opensource.org/licenses/OSL-3.0 The Open Software License 3.0 (OSL-3.0)\n */\n\nexport { default } from './SelectedFilters.container';\n","/* eslint-disable @scandipwa/scandipwa-guidelines/jsx-no-conditional */\n/* eslint-disable react/no-unknown-property */\n/**\n * @category Puma\n * @author Deniss Dubinins \n * @copyright Copyright (c) 2022 Scandiweb, Inc (https://scandiweb.com)\n * @license http://opensource.org/licenses/OSL-3.0 The Open Software License 3.0 (OSL-3.0)\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport './SelectedFilters.style';\n\n/** @namespace Scandipwa/Component/SelectedFilters/Component */\nexport class SelectedFiltersComponent extends PureComponent {\n static propTypes = {\n selectedFilters: PropTypes.objectOf(PropTypes.shape).isRequired,\n availableFilters: PropTypes.objectOf(PropTypes.shape).isRequired,\n onResetClick: PropTypes.func.isRequired\n };\n\n renderSelectedFilters = this.renderSelectedFilters.bind(this);\n\n renderSelectedFilter = this.renderSelectedFilter.bind(this);\n\n renderSelectedPriceFilter = this.renderSelectedPriceFilter.bind(this);\n\n renderSelectedFilters() {\n const { selectedFilters: { customFilters } } = this.props;\n\n return (\n <>\n { this.renderSelectedPriceFilter() }\n { Object.keys(customFilters).map(this.renderSelectedFilter) }\n \n );\n }\n\n renderSelectedPriceFilter() {\n const {\n selectedFilters: {\n priceRange: { min, max } = {}\n },\n onResetClick\n } = this.props;\n\n if (!min && !max) {\n return null;\n }\n\n return (\n onResetClick('price') }\n // eslint-disable-next-line react/jsx-no-bind\n onClick={ () => onResetClick('price') }\n >\n { `${ __('Price') }: ${ min }-${ max }` }\n \n );\n }\n\n renderSelectedFilter(filterCode) {\n const {\n selectedFilters: { customFilters: selectedFilters },\n availableFilters,\n onResetClick\n } = this.props;\n const attribute = availableFilters[filterCode] || {};\n const selectedOptionIds = selectedFilters[filterCode];\n const { attribute_label, attribute_options, is_boolean } = attribute;\n\n // Adding check for possibility that no attribute options are added\n if (!attribute_options) {\n return null;\n }\n\n return selectedOptionIds.map((optionId) => {\n const { label: optionLabel } = attribute_options[optionId] || [];\n\n return (\n onResetClick(filterCode, optionId) }\n // eslint-disable-next-line react/jsx-no-bind\n onClick={ () => onResetClick(filterCode, optionId) }\n >\n { is_boolean\n ? `${ attribute_label || filterCode }`\n : `${ attribute_label || filterCode }: ${ optionLabel || optionId }` }\n \n );\n });\n }\n\n render() {\n const {\n selectedFilters: {\n customFilters = {},\n priceRange: {\n min,\n max\n } = {}\n } = {},\n availableFilters,\n onResetClick\n } = this.props;\n\n if (!Object.keys(availableFilters).length\n || (!Object.keys(customFilters).length && !(min || max))\n ) {\n return null;\n }\n\n return (\n
    \n { this.renderSelectedFilters() }\n \n { __('Clear all') }\n
    \n \n );\n }\n}\n\nexport default SelectedFiltersComponent;\n","/* eslint-disable react/forbid-dom-props */\n/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport PropTypes from 'prop-types';\nimport { lazy, PureComponent, Suspense } from 'react';\n\nimport CategoryDetails from 'Component/CategoryDetails';\nimport CategoryItemsCount from 'Component/CategoryItemsCount';\nimport CategoryProductList from 'Component/CategoryProductList';\nimport CategorySort from 'Component/CategorySort';\nimport ContentWrapper from 'Component/ContentWrapper';\nimport FilterIcon from 'Component/FilterIcon';\nimport GridIcon from 'Component/GridIcon';\nimport Html from 'Component/Html';\nimport ListIcon from 'Component/ListIcon';\nimport Loader from 'Component/Loader';\nimport TextPlaceholder from 'Component/TextPlaceholder';\nimport {\n CategoryTreeType, FilterInputType, FilterType, SortFieldsType\n} from 'Type/Category.type';\nimport { SortDirectionType } from 'Type/Direction.type';\nimport { AttributesType } from 'Type/ProductList.type';\nimport { isCrawler, isSSR } from 'Util/Browser';\nimport BrowserDatabase from 'Util/BrowserDatabase';\n\nimport {\n DISPLAY_MODE_BOTH,\n DISPLAY_MODE_CMS_BLOCK,\n DISPLAY_MODE_PRODUCTS,\n GRID_LAYOUT,\n LAYOUT_KEY,\n LIST_LAYOUT\n} from './CategoryPage.config';\n\nimport './CategoryPage.style';\n\nexport const CategoryFilterOverlay = lazy(() => import(\n /* webpackMode: \"lazy\", webpackChunkName: \"overlays-category\" */ 'Component/CategoryFilterOverlay'\n));\n\n/** @namespace Route/CategoryPage/Component */\nexport class CategoryPage extends PureComponent {\n static propTypes = {\n category: CategoryTreeType.isRequired,\n filters: AttributesType.isRequired,\n sortFields: SortFieldsType.isRequired,\n selectedSort: PropTypes.shape({\n sortDirection: SortDirectionType,\n sortKey: PropTypes.string\n }).isRequired,\n onSortChange: PropTypes.func.isRequired,\n onFilterButtonClick: PropTypes.func.isRequired,\n selectedFilters: FilterType.isRequired,\n filter: FilterInputType.isRequired,\n search: PropTypes.string,\n isContentFiltered: PropTypes.bool,\n isCurrentCategoryLoaded: PropTypes.bool,\n isMatchingListFilter: PropTypes.bool,\n isMatchingInfoFilter: PropTypes.bool,\n isSearchPage: PropTypes.bool.isRequired,\n totalPages: PropTypes.number,\n totalItems: PropTypes.number.isRequired,\n isMobile: PropTypes.bool.isRequired,\n onGridButtonClick: PropTypes.func.isRequired,\n onListButtonClick: PropTypes.func.isRequired,\n defaultPlpType: PropTypes.string,\n selectedLayoutType: PropTypes.string,\n plpTypes: PropTypes.arrayOf(PropTypes.string),\n appliedFiltersCount: PropTypes.number\n };\n\n static defaultProps = {\n isContentFiltered: true,\n isMatchingListFilter: false,\n isCurrentCategoryLoaded: false,\n isMatchingInfoFilter: false,\n totalPages: 1,\n defaultPlpType: '',\n plpTypes: [],\n search: '',\n appliedFiltersCount: 0,\n selectedLayoutType: ''\n };\n\n state = {};\n\n static getDerivedStateFromProps(props) {\n const {\n isMobile,\n defaultPlpType,\n selectedLayoutType\n } = props;\n\n /*\n * Use stored plpType from the BrowserDatabase\n * if there is one\n */\n const storedPlpType = BrowserDatabase.getItem(LAYOUT_KEY) || selectedLayoutType;\n\n if (storedPlpType) {\n const activeLayoutType = isMobile\n ? GRID_LAYOUT\n : storedPlpType || defaultPlpType;\n\n return { activeLayoutType };\n }\n\n const activeLayoutType = isMobile\n ? GRID_LAYOUT\n : selectedLayoutType || defaultPlpType;\n\n return { activeLayoutType };\n }\n\n displayProducts() {\n const {\n category: {\n display_mode = DISPLAY_MODE_PRODUCTS\n } = {}\n } = this.props;\n\n return display_mode === null\n || display_mode === DISPLAY_MODE_PRODUCTS\n || display_mode === DISPLAY_MODE_BOTH;\n }\n\n displayCmsBlock() {\n const { category: { display_mode } = {} } = this.props;\n\n return display_mode === DISPLAY_MODE_CMS_BLOCK\n || display_mode === DISPLAY_MODE_BOTH;\n }\n\n renderCategoryDetails() {\n const {\n category,\n isCurrentCategoryLoaded\n } = this.props;\n\n return (\n \n );\n }\n\n renderFiltersCount() {\n const { appliedFiltersCount } = this.props;\n\n if (!appliedFiltersCount) {\n return null;\n }\n\n return (\n \n { ` (${appliedFiltersCount})` }\n \n );\n }\n\n renderFilterButton() {\n const {\n isContentFiltered,\n totalPages,\n category: { is_anchor },\n isSearchPage,\n isCurrentCategoryLoaded,\n isMatchingInfoFilter,\n onFilterButtonClick\n } = this.props;\n\n if (!isMatchingInfoFilter) {\n return this.renderFilterButtonPlaceholder();\n }\n\n if ((!isContentFiltered && totalPages === 0) || (!is_anchor && !isSearchPage) || !isCurrentCategoryLoaded) {\n return null;\n }\n\n return (\n \n \n { __('Filters') }\n { this.renderFiltersCount() }\n \n );\n }\n\n renderFilterPlaceholder() {\n return (\n
    \n
    \n

    \n { __('Shopping Options') }\n

    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n );\n }\n\n renderFilterButtonPlaceholder() {\n return (\n

    \n \n

    \n );\n }\n\n renderFilterOverlay() {\n const {\n filters,\n selectedFilters,\n isMatchingInfoFilter,\n isSearchPage\n } = this.props;\n\n const { category: { is_anchor } } = this.props;\n\n if (!this.displayProducts()) {\n return null;\n }\n\n return (\n \n \n \n );\n }\n\n renderCategorySort() {\n const {\n sortFields,\n selectedSort,\n onSortChange,\n isMatchingInfoFilter,\n isCurrentCategoryLoaded,\n isMobile\n } = this.props;\n\n const { options = {} } = sortFields;\n const updatedSortFields = Object.values(options).map(({ value: id, label }) => ({ id, label }));\n const { sortDirection, sortKey } = selectedSort;\n\n if (isMobile && !isMatchingInfoFilter) {\n return this.renderFilterButtonPlaceholder();\n }\n\n return (\n \n );\n }\n\n renderLayoutButton(type) {\n const {\n onGridButtonClick,\n onListButtonClick\n } = this.props;\n\n const { activeLayoutType } = this.state;\n\n switch (type) {\n case GRID_LAYOUT:\n return (\n \n \n \n );\n case LIST_LAYOUT:\n return (\n \n \n \n );\n default:\n return false;\n }\n }\n\n renderLayoutButtons() {\n const { plpTypes } = this.props;\n\n /*\n * So far there is only two types of\n * the Storefront list modes\n */\n if (plpTypes.length !== 2) {\n return null;\n }\n\n return (\n
    \n { plpTypes.map(this.renderLayoutButton.bind(this)) }\n
    \n );\n }\n\n renderItemsCount(isVisibleOnMobile = false) {\n const { isMatchingListFilter, isMobile } = this.props;\n\n if ((isVisibleOnMobile && !isMobile) || (!isVisibleOnMobile && isMobile)) {\n return null;\n }\n\n return (\n \n );\n }\n\n renderCategoryProductList() {\n const {\n filter,\n search,\n selectedSort,\n selectedFilters,\n isMatchingListFilter,\n isCurrentCategoryLoaded,\n isMatchingInfoFilter\n } = this.props;\n\n const { activeLayoutType } = this.state;\n\n if (!this.displayProducts()) {\n return null;\n }\n\n return (\n \n { this.renderItemsCount(true) }\n \n
    \n );\n }\n\n renderCmsBlock() {\n const { category: { cms_block } } = this.props;\n\n if (!cms_block || !this.displayCmsBlock()) {\n return null;\n }\n\n const { content, disabled } = cms_block;\n\n if (disabled) {\n return null;\n }\n\n return (\n \n \n
    \n );\n }\n\n renderMiscellaneous() {\n return (\n
    \n \n { this.renderFilterButton() }\n \n \n \n );\n }\n\n renderContent() {\n return (\n <>\n { this.renderFilterOverlay() }\n { this.renderCategoryDetails() }\n { this.renderCmsBlock() }\n { this.renderMiscellaneous() }\n { this.renderCategoryProductList() }\n \n );\n }\n\n render() {\n const hideProducts = !this.displayProducts();\n const { totalItems } = this.props;\n\n return (\n
    \n \n { this.renderContent() }\n \n
    \n );\n }\n}\n\nexport default CategoryPage;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport { default } from './CategoryDetails.component';\n","/**\n * @author Vladislavs Zimnikovs \n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package puma-mx\n */\n\nexport const SIZE_CHART_POPUP_ID = 'SizeChartPopup';\n// PumaPWA UAE only - Size chart block ID's for EN store\nexport const KIDS_FOOTWEAR_BLOCK_UAE_EN = 'size-chart-kids-footwear-uae-en';\nexport const WOMENS_FOOTWEAR_BLOCK_UAE_EN = 'size-chart-womens-footwear-uae-en';\nexport const MENS_FOOTWEAR_BLOCK_UAE_EN = 'size-chart-mens-footwear-uae-en';\nexport const KIDS_CLOTHES_BLOCK_UAE_EN = 'size-chart-kids-clothes-uae-en';\nexport const WOMENS_CLOTHES_BLOCK_UAE_EN = 'size-chart-womens-clothes-uae-en';\nexport const MENS_CLOTHES_BLOCK_UAE_EN = 'size-chart-mens-clothes-uae-en';\n// PumaPWA UAE only - Size chart block ID's for AR store\nexport const KIDS_FOOTWEAR_BLOCK_AR = 'size-chart-kids-footwear-uae-ar';\nexport const WOMENS_FOOTWEAR_BLOCK_AR = 'size-chart-womens-footwear-uae-ar';\nexport const MENS_FOOTWEAR_BLOCK_AR = 'size-chart-mens-footwear-uae-ar';\nexport const KIDS_CLOTHES_BLOCK_AR = 'size-chart-kids-clothes-uae-ar';\nexport const WOMENS_CLOTHES_BLOCK_AR = 'size-chart-womens-clothes-uae-ar';\nexport const MENS_CLOTHES_BLOCK_AR = 'size-chart-mens-clothes-uae-ar';\nexport const KIDS_LABELS = ['Boys', 'Girls', 'الأولاد', 'البنات'];\nexport const MEN_LABELS = ['Men', 'Male', 'الرجال'];\nexport const WOMEN_LABELS = ['Women', 'Female', 'النساء'];\nexport const UNISEX_LABELS = ['Unisex', 'للجميع'];\nexport const APPAREL_LABELS = ['Apparel', 'الملابس'];\nexport const FOOTWEAR_LABELS = ['Footwear', 'الأحذية'];\nexport const ACCESSORIES_LABELS = ['Accessories', 'الإكسسورات'];\n","/* eslint-disable import/prefer-default-export */\n\n/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport const MAX_ZOOM_SCALE = 8;\n\nexport const IMAGE_TYPE = 'image';\nexport const VIDEO_TYPE = 'external-video';\nexport const PLACEHOLDER_TYPE = 'placeholder';\n\nexport const THUMBNAIL_KEY = 'small_image';\nexport const AMOUNT_OF_PLACEHOLDERS = 0;\n\nexport const PRODUCT_GALERY_POPUP_ID = 'ProductGalleryPopup';\n","/* eslint-disable import/prefer-default-export */\n\n/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\n\nexport * from 'SourceComponent/ProductGallery/ProductGallery.config';\nexport const SLIDER_OVERLAY_WHEEL_STEP = 100;\nexport const SLIDER_WHEEL_STEP = 5;\nexport const AMOUNT_OF_PLACEHOLDERS = 4;\nexport const SLIDER_HEIGHT = 87;\nexport const NAV_BAR_HEIGHT = 60;\nexport const BREADCRUMBS_BOTTOM = 80;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport { default } from './ProductLinks.container';\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport PropTypes from 'prop-types';\nimport React, { PureComponent } from 'react';\n\nimport ContentWrapper from 'Component/ContentWrapper';\nimport ProductCard from 'Component/ProductCard';\nimport { LinkedProductsType, ProductCardPropsType } from 'Type/ProductList.type';\n\nimport './ProductLinks.style';\n\n/** @namespace Component/ProductLinks/Component */\nexport class ProductLinks extends PureComponent {\n static propTypes = {\n numberOfProductsToDisplay: PropTypes.number.isRequired,\n areDetailsLoaded: PropTypes.bool.isRequired,\n linkedProducts: LinkedProductsType.isRequired,\n linkType: PropTypes.string.isRequired,\n title: PropTypes.string.isRequired,\n productCardProps: ProductCardPropsType.isRequired,\n productCardFunctions: PropTypes.objectOf(PropTypes.func).isRequired\n };\n\n renderProductCard = this.renderProductCard.bind(this);\n\n renderProductCard(product, i) {\n const {\n productCardProps: {\n siblingsHaveBrands,\n siblingsHavePriceBadge,\n siblingsHaveTierPrice,\n siblingsHaveConfigurableOptions\n },\n productCardFunctions: {\n setSiblingsHaveBrands,\n setSiblingsHavePriceBadge,\n setSiblingsHaveTierPrice,\n setSiblingsHaveConfigurableOptions\n }\n } = this.props;\n const { id = i } = product;\n\n return (\n \n );\n }\n\n renderItems() {\n const {\n linkType,\n linkedProducts: { [linkType]: { items } },\n numberOfProductsToDisplay\n } = this.props;\n\n if (!items) {\n return Array.from(\n { length: numberOfProductsToDisplay },\n (_, i) => this.renderProductCard({}, i)\n );\n }\n\n return items.slice(0, numberOfProductsToDisplay).map(this.renderProductCard);\n }\n\n renderHeading() {\n const { title } = this.props;\n\n return (\n

    \n { title }\n

    \n );\n }\n\n render() {\n const { areDetailsLoaded } = this.props;\n\n if (!areDetailsLoaded) {\n return null;\n }\n\n return (\n \n { this.renderHeading() }\n
      \n { this.renderItems() }\n
    \n \n );\n }\n}\n\nexport default ProductLinks;\n","/* eslint-disable @scandipwa/scandipwa-guidelines/jsx-no-props-destruction */\n/* eslint-disable max-lines */\n/* eslint-disable react/forbid-prop-types */\n/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\n\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router';\n\nimport AttributesQuery from 'Query/Attributes.query';\nimport { LOADING_TIME } from 'Route/CategoryPage/CategoryPage.config';\nimport { RECOMMENDER_PDP_ID } from 'Route/ProductPage/ProductPage.config';\nimport {\n mapDispatchToProps as sourceMapDispatchToProps,\n mapStateToProps as sourceMapStateToProps,\n ProductPageContainer as SourceProductPageContainer\n} from 'SourceRoute/ProductPage/ProductPage.container';\nimport ProductReducer from 'Store/Product/Product.reducer';\nimport { updateUrlRewrite } from 'Store/UrlRewrites/UrlRewrites.action';\nimport { TotalsType } from 'Type/MiniCart.type';\nimport isKsa from 'Util/Arabic/isKsa';\nimport { scrollToTop } from 'Util/Browser';\nimport BrowserDatabase from 'Util/BrowserDatabase';\nimport { withReducers } from 'Util/DynamicReducer';\nimport {\n getIsConfigurableParameterSelected,\n getVariantIndex as originalGetVariantIndex\n} from 'Util/Product';\nimport { handleIosStickyHeader } from 'Util/PromoBanner/PromoBanner';\nimport { debounce, fetchQuery } from 'Util/Request';\nimport {\n convertQueryStringToKeyValuePairs,\n getQueryParam,\n objectToUri,\n removeQueryParamWithoutHistory,\n updateQueryParamWithoutHistory\n} from 'Util/Url';\n\nimport ProductPageComponent from './ProductPage.component';\n\n/** @namespace Scandipwa/Route/ProductPage/Container/getVariantIndex */\nexport const getVariantIndex = (variants, options) => {\n // Hack to use color, instead of search by attributes\n const { color } = options;\n\n if (color && Object.keys(options).length === 1) {\n const withStock = variants.findIndex(\n ({ color: vColor, salable_qty }) => (+color === +vColor && +salable_qty > 0)\n );\n\n return withStock !== -1 ? withStock : variants.findIndex(({ color: vColor }) => +color === +vColor);\n }\n\n return originalGetVariantIndex(variants, options);\n};\n\nexport const BreadcrumbsDispatcher = import(\n /* webpackMode: \"lazy\", webpackChunkName: \"dispatchers\" */\n 'Store/Breadcrumbs/Breadcrumbs.dispatcher'\n);\n\nexport const MetaDispatcher = import(\n /* webpackMode: \"lazy\", webpackChunkName: \"dispatchers\" */\n 'Store/Meta/Meta.dispatcher'\n);\n\nexport const ProductDispatcher = import(\n /* webpackMode: \"lazy\", webpackChunkName: \"dispatchers\" */\n 'Store/Product/Product.dispatcher'\n);\n\n/** @namespace Scandipwa/Route/ProductPage/Container/mapStateToProps */\nexport const mapStateToProps = (state) => ({\n ...sourceMapStateToProps(state),\n totals: state.CartReducer.cartTotals,\n isSignedIn: state.MyAccountReducer.isSignedIn,\n categoryId: state.CategoryReducer.category?.id,\n content_blocks: state.ProductReducer.content_html,\n customer: state.MyAccountReducer.customer,\n locale: state.ConfigReducer.locale,\n basePath: state.ConfigReducer.base_link_url,\n urlRewrite: state.UrlRewritesReducer.urlRewrite\n});\n\n/** @namespace Scandipwa/Route/ProductPage/Container/mapDispatchToProps */\nexport const mapDispatchToProps = (dispatch) => ({\n ...sourceMapDispatchToProps(dispatch),\n updateUrlRewrite: (urlRewrite, requestedUrl) => dispatch(updateUrlRewrite(urlRewrite, requestedUrl))\n});\n\n/** @namespace Scandipwa/Route/ProductPage/Container */\nexport class ProductPageContainer extends SourceProductPageContainer {\n linkCheckDone = false;\n\n containerFunctions = {\n ...this.containerFunctions,\n getLink: this.getLink.bind(this),\n updateUrl: this.updateUrl.bind(this),\n getSelectedCustomizableOptions: this.getSelectedCustomizableOptions.bind(this),\n createArrayOfIds: this.createArrayOfIds.bind(this)\n };\n\n static propTypes = {\n ...super.propTypes,\n totals: TotalsType.isRequired,\n isSignedIn: PropTypes.bool.isRequired,\n navigation: PropTypes.shape(PropTypes.shape).isRequired,\n categoryId: PropTypes.number,\n customer: PropTypes.object,\n locale: PropTypes.string.isRequired,\n basePath: PropTypes.string.isRequired,\n content_blocks: PropTypes.array\n };\n\n static defaultProps = {\n ...super.defaultProps,\n categoryId: 0,\n customer: {},\n content_blocks: []\n };\n\n timeoutId = null;\n\n static getDerivedStateFromProps(props, state) {\n const {\n product: {\n sku,\n variants,\n configurable_options,\n options,\n productOptionsData\n }\n } = props;\n\n const {\n currentProductSKU: prevSKU,\n productOptionsData: prevOptionData\n } = state;\n\n const currentProductSKU = prevSKU === sku ? '' : prevSKU;\n\n /**\n * If the product we expect to load is loaded -\n * reset expected SKU\n */\n if (!configurable_options && !variants) {\n return {\n currentProductSKU\n };\n }\n\n const { search } = window.location;\n // PARAMS UPDATE 1\n const parameters = Object.entries(convertQueryStringToKeyValuePairs(search))\n .reduce((acc, [key, value]) => {\n if (key === 'color' || key === 'size') {\n return { ...acc, [key]: value };\n }\n\n return { ...acc };\n }, {});\n\n const newOptionsData = options.reduce((acc, { option_id, required }) => {\n if (required) {\n acc.push(option_id);\n }\n\n return acc;\n }, []);\n\n const prevRequiredOptions = productOptionsData?.requiredOptions || [];\n const requiredOptions = [...prevRequiredOptions, ...newOptionsData];\n\n return {\n parameters,\n currentProductSKU,\n productOptionsData: {\n ...prevOptionData, ...productOptionsData, requiredOptions\n }\n };\n }\n\n componentDidMount() {\n /**\n * Always request product information. In this case we will have updated data.\n * Service worker will return previous information and updated new information\n * through broadcast.\n */\n this.requestProduct();\n\n /**\n * Always make sure the navigation switches into the MENU tab\n * */\n this.updateNavigationState();\n\n /**\n * Ensure transition PDP => homepage => PDP always having proper meta\n */\n this.updateMeta();\n\n /**\n * Make sure to update header state, the data-source will\n * define the correct information to use for update\n * (it can be a product, history state product or an empty object).\n */\n this.updateHeaderState();\n this.updateBreadcrumbs();\n this.requestScarabPush();\n handleIosStickyHeader();\n\n /**\n * Scroll page top in order to display it from the start\n */\n scrollToTop();\n\n this.loadAttributesData();\n }\n\n componentDidUpdate(prevProps) {\n const {\n isOffline,\n productSKU,\n product,\n location\n } = this.props;\n\n const {\n productSKU: prevProductSKU,\n product: prevProduct,\n location: prevLocation\n } = prevProps;\n\n const { sku: stateSKU } = history?.state?.state?.product || {};\n const { isSignedIn } = this.props;\n const { isSignedIn: prevIsSignedIn = false } = prevProps;\n const dataSource = this.getDataSource();\n const { variants = [] } = dataSource;\n\n if (isSignedIn !== prevIsSignedIn) {\n this.requestProduct();\n }\n\n if (!this.linkCheckDone && variants.length && variants[0].color) {\n this.linkCheckDone = true;\n\n const { history, productSKU } = this.props;\n const { search, pathname } = window.location;\n const params = new URLSearchParams(search);\n\n if (!params.has('color')) {\n const requestedSku = getQueryParam('sku', window.location);\n\n // eslint-disable-next-line fp/no-let\n let sameStyleColor = false;\n\n // eslint-disable-next-line fp/no-let\n let color = variants.reduce((acc, variant) => {\n const {\n sku,\n stock_status,\n color,\n style_number\n } = variant;\n\n if (!requestedSku && stock_status === 'IN_STOCK' && productSKU === style_number) {\n sameStyleColor = color;\n }\n\n if (acc) {\n return acc;\n }\n\n if (requestedSku && requestedSku === sku) {\n return color;\n }\n\n if (!requestedSku && stock_status === 'IN_STOCK') {\n return color;\n }\n\n return false;\n }, false);\n\n if (!sameStyleColor && !color) {\n color = variants.reduce((acc, variant) => {\n const {\n sku,\n stock_status,\n color,\n style_number\n } = variant;\n\n if (!requestedSku && productSKU === style_number) {\n sameStyleColor = color;\n }\n\n if (acc) {\n return acc;\n }\n\n if (requestedSku && requestedSku === sku) {\n return color;\n }\n\n if (!requestedSku && stock_status === 'IN_STOCK') {\n return color;\n }\n\n return false;\n }, false);\n }\n\n if (sameStyleColor) {\n params.set('color', sameStyleColor);\n params.delete('sku');\n } else if (color) {\n params.set('color', color);\n params.delete('sku');\n }\n\n history.replace(\n decodeURIComponent(`${ pathname }?${ params }`),\n history.location.state\n );\n }\n\n // TODO: do we need removeSizeFromUrl() ?\n }\n\n this.redirectIfSizeIsNotAvailable();\n\n if (isOffline) {\n debounce(this.setOfflineNoticeSize, LOADING_TIME)();\n }\n\n /**\n * We should also update product based data if, the URL\n * rewrite SKU has changed to matching the product history SKU\n * one. At this point there could be sufficient data for\n * some updates (i.e. header state).\n */\n if (\n productSKU !== prevProductSKU\n && stateSKU === productSKU\n ) {\n this.updateHeaderState();\n }\n\n /**\n * If product object was changed => it is loaded => we need to\n * update product specific information, i.e. breadcrumbs.\n */\n if (JSON.stringify(product) !== JSON.stringify(prevProduct)) {\n this.updateBreadcrumbs();\n this.updateHeaderState();\n this.updateMeta();\n }\n\n this._addToRecentlyViewedProducts();\n\n if (location && prevLocation && location.search === prevLocation.search) {\n window.blockPDPRefresh = false;\n }\n }\n\n __construct(props) {\n super.__construct(props);\n\n const { search } = window.location;\n\n // PARAMS UPDATE 1\n const parameters = Object.entries(convertQueryStringToKeyValuePairs(search))\n .reduce((acc, [key, value]) => {\n if (key === 'color' || key === 'size') {\n return { ...acc, [key]: value };\n }\n\n return { ...acc };\n }, {});\n\n // eslint-disable-next-line\n delete parameters.size;\n\n this.state = {\n parameters,\n currentProductSKU: '',\n activeProduct: null\n };\n }\n\n componentWillUnmount() {\n const { updateUrlRewrite } = this.props;\n\n if (updateUrlRewrite) {\n updateUrlRewrite({ type: 'PRODUCT' }, null);\n }\n\n if (this.timeoutId) {\n clearTimeout(this.timeoutId);\n }\n }\n\n state = {\n ...this.state,\n productIds: '',\n isTriggered: false\n };\n\n loadAttributesData() {\n if (BrowserDatabase.getItem('productAttributes') === null) {\n fetchQuery(AttributesQuery.getProductAttributesQuery())\n .then(\n /** @namespace Scandipwa/Route/ProductPage/Container/ProductPageContainer/loadAttributesData/then/catch/fetchQuery/then */\n (result) => {\n const expireTime = 3600;\n BrowserDatabase.setItem(result, 'productAttributes', expireTime);\n }\n )\n .catch(\n /** @namespace Scandipwa/Route/ProductPage/Container/ProductPageContainer/loadAttributesData/then/catch */\n (error) => {\n // eslint-disable-next-line no-console\n console.log(error);\n }\n );\n }\n }\n\n requestScarabPush = () => {\n const { customer, isSignedIn, productSKU } = this.props;\n const { isTriggered } = this.state;\n\n if (window.ScarabQueue && !isTriggered && productSKU) {\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({ isTriggered: true });\n if (isSignedIn) {\n if (customer) {\n window.ScarabQueue.push(['setEmail', customer.email]); // Pushing customer email if Signed in\n this.pushRecommenderData();\n }\n } else {\n this.pushRecommenderData();\n }\n }\n // eslint-disable-next-line no-magic-numbers\n this.timeoutId = setTimeout(this.requestScarabPush, 5000); // Every 5 s requesting recommended products\n setTimeout(() => {\n clearTimeout(this.timeoutId);\n // eslint-disable-next-line no-magic-numbers\n }, 15000);\n };\n\n pushRecommenderData() {\n const { productSKU, locale, totals: { items = [] } } = this.props;\n const { createArrayOfIds } = this.containerFunctions;\n\n window.ScarabQueue.push(['cart',\n items.map((product) => (\n {\n item: product.sku,\n price: product.prices.row_total_including_tax.value / product.quantity,\n quantity: product.quantity\n }\n ))\n ]);\n window.ScarabQueue.push(['availabilityZone', locale]);\n window.ScarabQueue.push(['view', `${productSKU}`]);\n window.ScarabQueue.push(['recommend', {\n logic: isKsa() ? 'RELATED_LOGIC_PDP_KSA' : 'RELATED_LOGIC_PDP', // unique logic\n limit: 10,\n containerId: RECOMMENDER_PDP_ID, // unique container\n success(SC) {\n createArrayOfIds(SC.page.products.map((product) => product.id));\n }\n }]);\n\n window.ScarabQueue.push(['go']);\n }\n\n redirectIfSizeIsNotAvailable = () => {\n const { history } = this.props;\n const { search, pathname } = window.location;\n const params = new URLSearchParams(search);\n\n if (params.has('size') && params.has('color')) {\n const dataSource = this.getDataSource();\n const { variants = [] } = dataSource;\n\n const variantIndex = getVariantIndex(\n variants,\n { color: params.get('color'), size: params.get('size') }\n );\n\n if (variantIndex === -1) {\n params.delete('size');\n\n history.replace(\n decodeURIComponent(`${ pathname }?${ params }`),\n history.location.state\n );\n }\n }\n };\n\n getLink(key, value) {\n const { search, pathname } = window.location;\n\n const obj = {\n ...convertQueryStringToKeyValuePairs(search)\n };\n\n if (key) {\n obj[key] = value;\n }\n\n const query = objectToUri(obj);\n\n return `${pathname}${query}`;\n }\n\n getSelectedCustomizableOptions(values, updateArray = false) {\n const { productOptionsData } = this.state;\n\n if (updateArray) {\n this.setState({\n productOptionsData:\n { ...productOptionsData, productOptionsMulti: values }\n });\n } else {\n this.setState({\n productOptionsData:\n { ...productOptionsData, productOptions: values }\n });\n }\n }\n\n updateUrl(key, value, parameters, newProduct) {\n const { history } = this.props;\n\n const isParameterSelected = getIsConfigurableParameterSelected(parameters, key, value);\n\n if (isParameterSelected) {\n updateQueryParamWithoutHistory(key, value, history, window.location);\n } else {\n removeQueryParamWithoutHistory(key, history, window.location);\n }\n\n if (newProduct) {\n this.updateUrlStyleNumber(newProduct);\n }\n }\n\n updateUrlStyleNumber(newProduct) {\n const { history } = this.props;\n\n const { style_data: { style_url = '' } = {} } = newProduct;\n\n if (style_url) {\n window.blockPDPRefresh = true;\n history.replace(`${ style_url }${ window.location.search }`);\n }\n }\n\n updateBreadcrumbs() {\n const { updateBreadcrumbs, location, categoryId } = this.props;\n const { state: { prevCategoryId = null } = {} } = location;\n updateBreadcrumbs(this.getDataSource(), prevCategoryId || categoryId);\n if (categoryId && !prevCategoryId) {\n const historyState = history.state ? history.state.state : null;\n history.replaceState({\n ...history.state,\n state: {\n ...historyState, prevCategoryId: categoryId\n }\n }, '');\n }\n }\n\n // eslint-disable-next-line react/sort-comp\n createArrayOfIds(ids) {\n this.setState({\n productIds: ids\n });\n }\n\n render() {\n return (\n \n );\n }\n}\n\nexport default withReducers({\n ProductReducer\n})(withRouter(\n connect(mapStateToProps, mapDispatchToProps)(ProductPageContainer)\n));\n","import React, { Component } from 'react';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\n\nvar initialState = {\r\n wrapperComponent: null,\r\n contentComponent: null,\r\n previousScale: 1,\r\n scale: 1,\r\n positionX: 0,\r\n positionY: 0,\r\n options: {\r\n disabled: false,\r\n transformEnabled: true,\r\n minPositionX: null,\r\n maxPositionX: null,\r\n minPositionY: null,\r\n maxPositionY: null,\r\n minScale: 1,\r\n maxScale: 8,\r\n limitToBounds: true,\r\n limitToWrapper: false,\r\n centerContent: true,\r\n wrapperClass: \"\",\r\n contentClass: \"\",\r\n },\r\n wheel: {\r\n disabled: false,\r\n step: 5,\r\n wheelEnabled: true,\r\n touchPadEnabled: true,\r\n limitsOnWheel: false,\r\n },\r\n pan: {\r\n disabled: false,\r\n panAnimationType: \"linear\",\r\n lockAxisX: false,\r\n lockAxisY: false,\r\n velocity: true,\r\n velocityEqualToMove: true,\r\n velocitySensitivity: 2,\r\n velocityActiveScale: 1,\r\n velocityMinSpeed: 1,\r\n velocityBaseTime: 1600,\r\n velocityAnimationType: \"easeOutQuart\",\r\n padding: true,\r\n paddingSize: 30,\r\n panReturnAnimationTime: 400,\r\n panReturnAnimationType: \"easeOut\",\r\n disableOnTarget: [],\r\n },\r\n pinch: {\r\n disabled: false,\r\n },\r\n zoomIn: {\r\n disabled: false,\r\n step: 20,\r\n animation: true,\r\n animationType: \"easeOut\",\r\n animationTime: 200,\r\n },\r\n zoomOut: {\r\n disabled: false,\r\n step: 20,\r\n animation: true,\r\n animationType: \"easeOut\",\r\n animationTime: 200,\r\n },\r\n doubleClick: {\r\n disabled: false,\r\n step: 20,\r\n mode: \"zoomIn\",\r\n animation: true,\r\n animationType: \"easeOut\",\r\n animationTime: 200,\r\n },\r\n reset: {\r\n disabled: false,\r\n animation: true,\r\n animationType: \"easeOut\",\r\n animationTime: 200,\r\n },\r\n scalePadding: {\r\n disabled: false,\r\n size: 0.2,\r\n animationTime: 200,\r\n animationType: \"easeOut\",\r\n },\r\n};\n\n/**\r\n * Rounds number to given decimal\r\n * eg. roundNumber(2.34343, 1) => 2.3\r\n */\r\nvar roundNumber = function (num, decimal) {\r\n return Number(num.toFixed(decimal));\r\n};\r\n/**\r\n * Checks if value is number, if not it returns default value\r\n * 1# eg. checkIsNumber(2, 30) => 2\r\n * 2# eg. checkIsNumber(null, 30) => 30\r\n */\r\nvar checkIsNumber = function (num, defaultValue) {\r\n return typeof num === \"number\" ? num : defaultValue;\r\n};\r\n/**\r\n * Keeps value between given bounds, used for limiting view to given boundaries\r\n * 1# eg. boundLimiter(2, 0, 3, true) => 2\r\n * 2# eg. boundLimiter(4, 0, 3, true) => 3\r\n * 3# eg. boundLimiter(-2, 0, 3, true) => 0\r\n * 4# eg. boundLimiter(10, 0, 3, false) => 10\r\n */\r\nvar boundLimiter = function (value, minBound, maxBound, isActive) {\r\n if (!isActive)\r\n return roundNumber(value, 2);\r\n if (value < minBound)\r\n return roundNumber(minBound, 2);\r\n if (value > maxBound)\r\n return roundNumber(maxBound, 2);\r\n return roundNumber(value, 2);\r\n};\r\n/**\r\n * Calculate bounding area of zoomed/panned element\r\n */\r\nvar calculateBoundingArea = function (wrapperWidth, newContentWidth, diffWidth, wrapperHeight, newContentHeight, diffHeight, limitToWrapper) {\r\n var scaleWidthFactor = wrapperWidth > newContentWidth\r\n ? diffWidth * (limitToWrapper ? 1 : 0.5)\r\n : 0;\r\n var scaleHeightFactor = wrapperHeight > newContentHeight\r\n ? diffHeight * (limitToWrapper ? 1 : 0.5)\r\n : 0;\r\n var minPositionX = wrapperWidth - newContentWidth - scaleWidthFactor;\r\n var maxPositionX = scaleWidthFactor;\r\n var minPositionY = wrapperHeight - newContentHeight - scaleHeightFactor;\r\n var maxPositionY = scaleHeightFactor;\r\n return { minPositionX: minPositionX, maxPositionX: maxPositionX, minPositionY: minPositionY, maxPositionY: maxPositionY };\r\n};\r\n/**\r\n * Returns distance between two points x,y\r\n */\r\nvar getDistance = function (firstPoint, secondPoint) {\r\n return Math.sqrt(Math.pow(firstPoint.pageX - secondPoint.pageX, 2) +\r\n Math.pow(firstPoint.pageY - secondPoint.pageY, 2));\r\n};\r\n/**\r\n * Delete undefined values from object keys\r\n * Used for deleting empty props\r\n */\r\nvar deleteUndefinedProps = function (value) {\r\n var newObject = __assign({}, value);\r\n Object.keys(newObject).forEach(function (key) { return newObject[key] === undefined && delete newObject[key]; });\r\n return newObject;\r\n};\r\n/**\r\n * Fire callback if it's function\r\n */\r\nvar handleCallback = function (callback, props) {\r\n if (callback && typeof callback === \"function\") {\r\n callback(props);\r\n }\r\n};\r\nvar handleWheelStop = function (previousEvent, event, stateProvider) {\r\n var scale = stateProvider.scale, _a = stateProvider.options, maxScale = _a.maxScale, minScale = _a.minScale;\r\n if (!previousEvent)\r\n return false;\r\n if (scale < maxScale || scale > minScale)\r\n return true;\r\n if (Math.sign(previousEvent.deltaY) !== Math.sign(event.deltaY))\r\n return true;\r\n if (previousEvent.deltaY > 0 && previousEvent.deltaY < event.deltaY)\r\n return true;\r\n if (previousEvent.deltaY < 0 && previousEvent.deltaY > event.deltaY)\r\n return true;\r\n if (Math.sign(previousEvent.deltaY) !== Math.sign(event.deltaY))\r\n return true;\r\n return false;\r\n};\r\nvar mergeProps = function (initialState, dynamicProps) {\r\n return Object.keys(initialState).reduce(function (acc, curr) {\r\n if (typeof dynamicProps[curr] === \"object\" && dynamicProps[curr] !== null) {\r\n acc[curr] = __assign(__assign({}, initialState[curr]), dynamicProps[curr]);\r\n }\r\n else {\r\n acc[curr] =\r\n dynamicProps[curr] === undefined\r\n ? initialState[curr]\r\n : dynamicProps[curr];\r\n }\r\n return acc;\r\n }, {});\r\n};\r\nfunction getWindowScaleY(wrapper) {\r\n if (!wrapper)\r\n return 0;\r\n return window.innerHeight / wrapper.offsetHeight;\r\n}\r\nfunction getWindowScaleX(wrapper) {\r\n if (!wrapper)\r\n return 0;\r\n return window.innerWidth / wrapper.offsetWidth;\r\n}\n\n/**\r\n * Functions should return denominator of the target value, which is the next animation step.\r\n * t is a value from 0 to 1, reflecting the percentage of animation status.\r\n */\r\nvar easeOut = function (t) {\r\n return -Math.cos(t * Math.PI) / 2 + 0.5;\r\n};\r\n// linear\r\nvar linear = function (t) {\r\n return t;\r\n};\r\n// accelerating from zero velocity\r\nvar easeInQuad = function (t) {\r\n return t * t;\r\n};\r\n// decelerating to zero velocity\r\nvar easeOutQuad = function (t) {\r\n return t * (2 - t);\r\n};\r\n// acceleration until halfway, then deceleration\r\nvar easeInOutQuad = function (t) {\r\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\r\n};\r\n// accelerating from zero velocity\r\nvar easeInCubic = function (t) {\r\n return t * t * t;\r\n};\r\n// decelerating to zero velocity\r\nvar easeOutCubic = function (t) {\r\n return --t * t * t + 1;\r\n};\r\n// acceleration until halfway, then deceleration\r\nvar easeInOutCubic = function (t) {\r\n return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\r\n};\r\n// accelerating from zero velocity\r\nvar easeInQuart = function (t) {\r\n return t * t * t * t;\r\n};\r\n// decelerating to zero velocity\r\nvar easeOutQuart = function (t) {\r\n return 1 - --t * t * t * t;\r\n};\r\n// acceleration until halfway, then deceleration\r\nvar easeInOutQuart = function (t) {\r\n return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t;\r\n};\r\n// accelerating from zero velocity\r\nvar easeInQuint = function (t) {\r\n return t * t * t * t * t;\r\n};\r\n// decelerating to zero velocity\r\nvar easeOutQuint = function (t) {\r\n return 1 + --t * t * t * t * t;\r\n};\r\n// acceleration until halfway, then deceleration\r\nvar easeInOutQuint = function (t) {\r\n return t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t;\r\n};\r\nvar availableAnimations = {\r\n easeOut: easeOut,\r\n linear: linear,\r\n easeInQuad: easeInQuad,\r\n easeOutQuad: easeOutQuad,\r\n easeInOutQuad: easeInOutQuad,\r\n easeInCubic: easeInCubic,\r\n easeOutCubic: easeOutCubic,\r\n easeInOutCubic: easeInOutCubic,\r\n easeInQuart: easeInQuart,\r\n easeOutQuart: easeOutQuart,\r\n easeInOutQuart: easeInOutQuart,\r\n easeInQuint: easeInQuint,\r\n easeOutQuint: easeOutQuint,\r\n easeInOutQuint: easeInOutQuint,\r\n};\n\nfunction handleDisableAnimation() {\r\n if (!this.mounted)\r\n return;\r\n if (this.animation) {\r\n cancelAnimationFrame(this.animation);\r\n }\r\n this.animate = false;\r\n this.animation = false;\r\n this.velocity = false;\r\n}\r\nfunction animate(animationName, animationTime, callback) {\r\n var _this = this;\r\n if (!this.mounted)\r\n return;\r\n var startTime = new Date().getTime();\r\n var lastStep = 1;\r\n // if another animation is active\r\n handleDisableAnimation.call(this);\r\n // new animation\r\n this.animation = function () {\r\n if (!_this.animation || !_this.mounted)\r\n return;\r\n var frameTime = new Date().getTime() - startTime;\r\n var animationProgress = frameTime / animationTime;\r\n var animationType = availableAnimations[animationName];\r\n var step = animationType(animationProgress);\r\n if (frameTime >= animationTime) {\r\n callback(lastStep);\r\n _this.animation = null;\r\n }\r\n else {\r\n callback(step);\r\n requestAnimationFrame(_this.animation);\r\n }\r\n };\r\n requestAnimationFrame(this.animation);\r\n}\r\nfunction animateComponent(_a) {\r\n var _this = this;\r\n var targetState = _a.targetState, speed = _a.speed, type = _a.type;\r\n var _b = this.stateProvider, scale = _b.scale, positionX = _b.positionX, positionY = _b.positionY;\r\n var scaleDiff = targetState.scale - scale;\r\n var positionXDiff = targetState.positionX - positionX;\r\n var positionYDiff = targetState.positionY - positionY;\r\n if (speed === 0) {\r\n this.stateProvider.previousScale = this.stateProvider.scale;\r\n this.stateProvider.scale = targetState.scale;\r\n this.stateProvider.positionX = targetState.positionX;\r\n this.stateProvider.positionY = targetState.positionY;\r\n this.applyTransformation();\r\n }\r\n else {\r\n // animation start timestamp\r\n animate.call(this, type, speed, function (step) {\r\n _this.stateProvider.previousScale = _this.stateProvider.scale;\r\n _this.stateProvider.scale = scale + scaleDiff * step;\r\n _this.stateProvider.positionX = positionX + positionXDiff * step;\r\n _this.stateProvider.positionY = positionY + positionYDiff * step;\r\n // apply animation changes\r\n _this.applyTransformation();\r\n });\r\n }\r\n}\n\nfunction checkZoomBounds(zoom, minScale, maxScale, zoomPadding, enablePadding) {\r\n var scalePadding = enablePadding ? zoomPadding : 0;\r\n var minScaleWithPadding = minScale - scalePadding;\r\n if (!isNaN(maxScale) && zoom >= maxScale)\r\n return maxScale;\r\n if (!isNaN(minScale) && zoom <= minScaleWithPadding)\r\n return minScaleWithPadding;\r\n return zoom;\r\n}\r\nfunction checkPositionBounds(positionX, positionY, bounds, limitToBounds, paddingValue, wrapperComponent) {\r\n var minPositionX = bounds.minPositionX, minPositionY = bounds.minPositionY, maxPositionX = bounds.maxPositionX, maxPositionY = bounds.maxPositionY;\r\n var paddingX = wrapperComponent\r\n ? (paddingValue * wrapperComponent.offsetWidth) / 100\r\n : 0;\r\n var paddingY = wrapperComponent\r\n ? (paddingValue * wrapperComponent.offsetHeight) / 100\r\n : 0;\r\n var x = boundLimiter(positionX, minPositionX - paddingX, maxPositionX + paddingX, limitToBounds);\r\n var y = boundLimiter(positionY, minPositionY - paddingY, maxPositionY + paddingY, limitToBounds);\r\n return { x: x, y: y };\r\n}\r\nfunction getDelta(event, customDelta) {\r\n var deltaY = event ? (event.deltaY < 0 ? 1 : -1) : 0;\r\n var delta = checkIsNumber(customDelta, deltaY);\r\n return delta;\r\n}\r\nfunction wheelMousePosition(event, contentComponent, scale) {\r\n var contentRect = contentComponent.getBoundingClientRect();\r\n // mouse position x, y over wrapper component\r\n var mouseX = (event.clientX - contentRect.left) / scale;\r\n var mouseY = (event.clientY - contentRect.top) / scale;\r\n if (isNaN(mouseX) || isNaN(mouseY))\r\n console.error(\"No mouse or touch offset found\");\r\n return {\r\n mouseX: mouseX,\r\n mouseY: mouseY,\r\n };\r\n}\r\nfunction getComponentsSizes(wrapperComponent, contentComponent, newScale) {\r\n var wrapperWidth = wrapperComponent.offsetWidth;\r\n var wrapperHeight = wrapperComponent.offsetHeight;\r\n var contentWidth = contentComponent.offsetWidth;\r\n var contentHeight = contentComponent.offsetHeight;\r\n var newContentWidth = contentWidth * newScale;\r\n var newContentHeight = contentHeight * newScale;\r\n var newDiffWidth = wrapperWidth - newContentWidth;\r\n var newDiffHeight = wrapperHeight - newContentHeight;\r\n return {\r\n wrapperWidth: wrapperWidth,\r\n wrapperHeight: wrapperHeight,\r\n newContentWidth: newContentWidth,\r\n newDiffWidth: newDiffWidth,\r\n newContentHeight: newContentHeight,\r\n newDiffHeight: newDiffHeight,\r\n };\r\n}\r\nfunction handleCalculatePositions(mouseX, mouseY, newScale, bounds, limitToBounds) {\r\n var _a = this.stateProvider, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY, transformEnabled = _a.options.transformEnabled;\r\n var scaleDifference = newScale - scale;\r\n if (typeof mouseX !== \"number\" || typeof mouseY !== \"number\")\r\n return console.error(\"Mouse X and Y position were not provided!\");\r\n if (!transformEnabled)\r\n return { newPositionX: positionX, newPositionY: positionY };\r\n var calculatedPositionX = positionX - mouseX * scaleDifference;\r\n var calculatedPositionY = positionY - mouseY * scaleDifference;\r\n // do not limit to bounds when there is padding animation,\r\n // it causes animation strange behaviour\r\n var newPositions = checkPositionBounds(calculatedPositionX, calculatedPositionY, bounds, limitToBounds, 0, null);\r\n return newPositions;\r\n}\n\nfunction getClientPosition(event) {\r\n var touches = event.touches;\r\n // Mobile points\r\n if (touches && touches.length === 1) {\r\n return { clientX: touches[0].clientX, clientY: touches[0].clientY };\r\n }\r\n // Desktop points\r\n if (!touches) {\r\n return { clientX: event.clientX, clientY: event.clientY };\r\n }\r\n return null;\r\n}\r\nfunction handlePanning(event) {\r\n var _a = this.stateProvider, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY, _b = _a.options, limitToBounds = _b.limitToBounds, minScale = _b.minScale, _c = _a.pan, lockAxisX = _c.lockAxisX, lockAxisY = _c.lockAxisY, padding = _c.padding, paddingSize = _c.paddingSize, wrapperComponent = _a.wrapperComponent;\r\n if (!this.startCoords)\r\n return;\r\n var _d = this.startCoords, x = _d.x, y = _d.y;\r\n var positions = getClientPosition(event);\r\n if (!positions)\r\n return console.error(\"Cannot find mouse client positions\");\r\n var clientX = positions.clientX, clientY = positions.clientY;\r\n // Get Position\r\n var mouseX = clientX - x;\r\n var mouseY = clientY - y;\r\n var newPositionX = lockAxisX ? positionX : mouseX;\r\n var newPositionY = lockAxisY ? positionY : mouseY;\r\n // padding\r\n var paddingValue = padding && scale >= minScale ? paddingSize : 0;\r\n // If position didn't change\r\n if (newPositionX === positionX && newPositionY === positionY)\r\n return;\r\n var calculatedPosition = checkPositionBounds(newPositionX, newPositionY, this.bounds, limitToBounds, paddingValue, wrapperComponent);\r\n // Save panned position\r\n handlePaddingAnimation.call(this, calculatedPosition.x, calculatedPosition.y);\r\n}\r\nfunction handlePanningAnimation() {\r\n var _a = this.stateProvider, scale = _a.scale, minScale = _a.options.minScale, _b = _a.pan, disabled = _b.disabled, padding = _b.padding, panReturnAnimationTime = _b.panReturnAnimationTime, panReturnAnimationType = _b.panReturnAnimationType;\r\n var isDisabled = disabled || scale < minScale || !padding;\r\n if (isDisabled)\r\n return;\r\n var targetState = handlePanToBounds.call(this);\r\n animateComponent.call(this, {\r\n targetState: targetState,\r\n speed: panReturnAnimationTime,\r\n type: panReturnAnimationType,\r\n });\r\n}\r\nfunction handlePanToBounds() {\r\n var _a = this.stateProvider, positionX = _a.positionX, positionY = _a.positionY, scale = _a.scale, _b = _a.options, disabled = _b.disabled, limitToBounds = _b.limitToBounds, limitToWrapper = _b.limitToWrapper;\r\n var wrapperComponent = this.state.wrapperComponent;\r\n if (disabled)\r\n return;\r\n var _c = this.bounds, maxPositionX = _c.maxPositionX, minPositionX = _c.minPositionX, maxPositionY = _c.maxPositionY, minPositionY = _c.minPositionY;\r\n var xChanged = positionX > maxPositionX || positionX < minPositionX;\r\n var yChanged = positionY > maxPositionY || positionY < minPositionY;\r\n var mouseX = positionX > maxPositionX\r\n ? wrapperComponent.offsetWidth\r\n : this.stateProvider.minPositionX || 0;\r\n var mouseY = positionY > maxPositionY\r\n ? wrapperComponent.offsetHeight\r\n : this.stateProvider.minPositionY || 0;\r\n var mousePosX = mouseX;\r\n var mousePosY = mouseY;\r\n var _d = handleCalculatePositions.call(this, mousePosX, mousePosY, scale, this.bounds, limitToBounds || limitToWrapper), x = _d.x, y = _d.y;\r\n return {\r\n scale: scale,\r\n positionX: xChanged ? x : positionX,\r\n positionY: yChanged ? y : positionY,\r\n };\r\n}\r\nfunction handlePaddingAnimation(positionX, positionY) {\r\n var padding = this.stateProvider.pan.padding;\r\n if (!padding)\r\n return;\r\n this.stateProvider.positionX = positionX;\r\n this.stateProvider.positionY = positionY;\r\n this.applyTransformation();\r\n}\n\nfunction handleCalculateZoom(delta, step, disablePadding, getTarget, isBtnFunction) {\r\n var _a = this.stateProvider, scale = _a.scale, _b = _a.options, maxScale = _b.maxScale, minScale = _b.minScale, _c = _a.scalePadding, size = _c.size, disabled = _c.disabled, wrapperComponent = _a.wrapperComponent;\r\n var targetScale = null;\r\n if (isBtnFunction) {\r\n var scaleFactor = window.innerWidth * 0.0001;\r\n var zoomFactor = delta < 0 ? 30 : 20;\r\n targetScale =\r\n scale + (step - step * scaleFactor) * delta * (scale / zoomFactor);\r\n }\r\n else {\r\n var wrapperToWindowScale = 2 - window.innerWidth / wrapperComponent.offsetWidth;\r\n var scaleFactor = Math.max(0.2, Math.min(0.99, wrapperToWindowScale));\r\n var zoomFactor = 20;\r\n targetScale =\r\n scale + step * delta * ((scale - scale * scaleFactor) / zoomFactor);\r\n }\r\n if (getTarget)\r\n return targetScale;\r\n var paddingEnabled = disablePadding ? false : !disabled;\r\n var newScale = checkZoomBounds(roundNumber(targetScale, 3), minScale, maxScale, size, paddingEnabled);\r\n return newScale;\r\n}\r\nfunction handleCalculateBounds(newScale, limitToWrapper) {\r\n var _a = this.stateProvider, wrapperComponent = _a.wrapperComponent, contentComponent = _a.contentComponent;\r\n var _b = getComponentsSizes(wrapperComponent, contentComponent, newScale), wrapperWidth = _b.wrapperWidth, wrapperHeight = _b.wrapperHeight, newContentWidth = _b.newContentWidth, newDiffWidth = _b.newDiffWidth, newContentHeight = _b.newContentHeight, newDiffHeight = _b.newDiffHeight;\r\n var bounds = calculateBoundingArea(wrapperWidth, newContentWidth, newDiffWidth, wrapperHeight, newContentHeight, newDiffHeight, limitToWrapper);\r\n // Save bounds\r\n this.bounds = bounds;\r\n return bounds;\r\n}\r\n/**\r\n * Wheel zoom event\r\n */\r\nfunction handleWheelZoom(event) {\r\n var _a = this.stateProvider, scale = _a.scale, contentComponent = _a.contentComponent, limitToBounds = _a.options.limitToBounds, _b = _a.scalePadding, size = _b.size, disabled = _b.disabled, _c = _a.wheel, step = _c.step, limitsOnWheel = _c.limitsOnWheel;\r\n event.preventDefault();\r\n event.stopPropagation();\r\n var delta = getDelta(event, null);\r\n var newScale = handleCalculateZoom.call(this, delta, step, !event.ctrlKey);\r\n // if scale not change\r\n if (scale === newScale)\r\n return;\r\n var bounds = handleCalculateBounds.call(this, newScale, !limitsOnWheel);\r\n var _d = wheelMousePosition(event, contentComponent, scale), mouseX = _d.mouseX, mouseY = _d.mouseY;\r\n var isLimitedToBounds = limitToBounds && (disabled || size === 0 || limitsOnWheel);\r\n var _e = handleCalculatePositions.call(this, mouseX, mouseY, newScale, bounds, isLimitedToBounds), x = _e.x, y = _e.y;\r\n this.bounds = bounds;\r\n this.stateProvider.previousScale = scale;\r\n this.stateProvider.scale = newScale;\r\n this.stateProvider.positionX = x;\r\n this.stateProvider.positionY = y;\r\n this.applyTransformation();\r\n}\r\n/**\r\n * Zoom for animations\r\n */\r\nfunction handleZoomToPoint(isDisabled, scale, mouseX, mouseY, event) {\r\n var _a = this.stateProvider, contentComponent = _a.contentComponent, _b = _a.options, disabled = _b.disabled, minScale = _b.minScale, maxScale = _b.maxScale, limitToBounds = _b.limitToBounds, limitToWrapper = _b.limitToWrapper;\r\n if (disabled || isDisabled)\r\n return;\r\n var newScale = checkZoomBounds(roundNumber(scale, 2), minScale, maxScale, null, null);\r\n var bounds = handleCalculateBounds.call(this, newScale, limitToWrapper);\r\n var mousePosX = mouseX;\r\n var mousePosY = mouseY;\r\n // if event is present - use it's mouse position\r\n if (event) {\r\n var mousePosition = wheelMousePosition(event, contentComponent, scale);\r\n mousePosX = mousePosition.mouseX;\r\n mousePosY = mousePosition.mouseY;\r\n }\r\n var _c = handleCalculatePositions.call(this, mousePosX, mousePosY, newScale, bounds, limitToBounds), x = _c.x, y = _c.y;\r\n return { scale: newScale, positionX: x, positionY: y };\r\n}\r\nfunction handlePaddingAnimation$1() {\r\n var _a = this.stateProvider, scale = _a.scale, wrapperComponent = _a.wrapperComponent, _b = _a.options, minScale = _b.minScale, limitToBounds = _b.limitToBounds, _c = _a.scalePadding, disabled = _c.disabled, animationTime = _c.animationTime, animationType = _c.animationType;\r\n var isDisabled = disabled || scale >= minScale;\r\n if (scale >= 1 || limitToBounds) {\r\n // fire fit to bounds animation\r\n handlePanningAnimation.call(this);\r\n }\r\n if (isDisabled)\r\n return;\r\n var mouseX = wrapperComponent.offsetWidth / 2;\r\n var mouseY = wrapperComponent.offsetHeight / 2;\r\n var targetState = handleZoomToPoint.call(this, false, minScale, mouseX, mouseY, null);\r\n animateComponent.call(this, {\r\n targetState: targetState,\r\n speed: animationTime,\r\n type: animationType,\r\n });\r\n}\r\n/**\r\n * Button zoom events\r\n */\r\nfunction handleDoubleClick(event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n var _a = this.stateProvider, contentComponent = _a.contentComponent, scale = _a.scale, _b = _a.doubleClick, disabled = _b.disabled, mode = _b.mode, step = _b.step, animationTime = _b.animationTime, animationType = _b.animationType;\r\n if (mode === \"reset\") {\r\n return resetTransformations.call(this, event, animationTime);\r\n }\r\n var delta = mode === \"zoomOut\" ? -1 : 1;\r\n var newScale = handleCalculateZoom.call(this, delta, step, undefined, undefined, true);\r\n var _c = wheelMousePosition(event, contentComponent, scale), mouseX = _c.mouseX, mouseY = _c.mouseY;\r\n var targetState = handleZoomToPoint.call(this, disabled, newScale, mouseX, mouseY);\r\n if (targetState.scale === scale)\r\n return;\r\n var targetScale = handleCalculateZoom.call(this, delta, step, true, undefined, true);\r\n var time = getButtonAnimationTime(targetScale, newScale, animationTime);\r\n animateComponent.call(this, {\r\n targetState: targetState,\r\n speed: time,\r\n type: animationType,\r\n });\r\n}\r\nfunction handleZoomControls(customDelta, customStep) {\r\n var _a = this.stateProvider, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY, wrapperComponent = _a.wrapperComponent, zoomIn = _a.zoomIn, zoomOut = _a.zoomOut;\r\n var wrapperWidth = wrapperComponent.offsetWidth;\r\n var wrapperHeight = wrapperComponent.offsetHeight;\r\n var mouseX = (wrapperWidth / 2 - positionX) / scale;\r\n var mouseY = (wrapperHeight / 2 - positionY) / scale;\r\n var newScale = handleCalculateZoom.call(this, customDelta, customStep, undefined, undefined, true);\r\n var isZoomIn = newScale > scale;\r\n var animationSpeed = isZoomIn\r\n ? zoomIn.animationTime\r\n : zoomOut.animationTime;\r\n var animationType = isZoomIn ? zoomIn.animationType : zoomOut.animationType;\r\n var isDisabled = isZoomIn ? zoomIn.disabled : zoomOut.disabled;\r\n var targetState = handleZoomToPoint.call(this, isDisabled, newScale, mouseX, mouseY);\r\n if (targetState.scale === scale)\r\n return;\r\n var targetScale = handleCalculateZoom.call(this, customDelta, customStep, true, undefined, true);\r\n var time = getButtonAnimationTime(targetScale, newScale, animationSpeed);\r\n animateComponent.call(this, {\r\n targetState: targetState,\r\n speed: time,\r\n type: animationType,\r\n });\r\n}\r\nfunction resetTransformations(animationSpeed) {\r\n var _a = this.props.defaultValues, defaultScale = _a.defaultScale, defaultPositionX = _a.defaultPositionX, defaultPositionY = _a.defaultPositionY;\r\n var _b = this.stateProvider, scale = _b.scale, positionX = _b.positionX, positionY = _b.positionY, reset = _b.reset, _c = _b.options, disabled = _c.disabled, limitToBounds = _c.limitToBounds, centerContent = _c.centerContent, limitToWrapper = _c.limitToWrapper;\r\n if (disabled || reset.disabled)\r\n return;\r\n if (scale === defaultScale &&\r\n positionX === defaultPositionX &&\r\n positionY === defaultPositionY)\r\n return;\r\n var speed = typeof animationSpeed === \"number\" ? animationSpeed : reset.animationTime;\r\n var targetScale = checkIsNumber(defaultScale, initialState.scale);\r\n var newPositionX = checkIsNumber(defaultPositionX, initialState.positionX);\r\n var newPositionY = checkIsNumber(defaultPositionY, initialState.positionY);\r\n if ((limitToBounds && !limitToWrapper) || centerContent) {\r\n var bounds = handleCalculateBounds.call(this, targetScale, limitToWrapper);\r\n newPositionX = bounds.minPositionX;\r\n newPositionY = bounds.minPositionY;\r\n }\r\n var targetState = {\r\n scale: targetScale,\r\n positionX: newPositionX,\r\n positionY: newPositionY,\r\n };\r\n animateComponent.call(this, {\r\n targetState: targetState,\r\n speed: speed,\r\n type: reset.animationType,\r\n });\r\n}\r\nfunction getButtonAnimationTime(targetScale, newScale, time) {\r\n return time * (newScale / targetScale);\r\n}\n\nfunction round(number, decimal) {\r\n var roundNumber = Math.pow(10, decimal);\r\n return Math.round(number * roundNumber) / roundNumber;\r\n}\r\nfunction getCurrentDistance(event) {\r\n return getDistance(event.touches[0], event.touches[1]);\r\n}\r\nfunction checkIfInfinite(number) {\r\n return number === Infinity || number === -Infinity;\r\n}\r\nfunction calculatePinchZoom(currentDistance, pinchStartDistance) {\r\n var _a = this.stateProvider, _b = _a.options, minScale = _b.minScale, maxScale = _b.maxScale, _c = _a.scalePadding, size = _c.size, disabled = _c.disabled;\r\n if (typeof pinchStartDistance !== \"number\" ||\r\n typeof currentDistance !== \"number\")\r\n return console.error(\"Pinch touches distance was not provided\");\r\n if (currentDistance < 0)\r\n return;\r\n var touchProportion = currentDistance / pinchStartDistance;\r\n var scaleDifference = touchProportion * this.pinchStartScale;\r\n return checkZoomBounds(roundNumber(scaleDifference, 2), minScale, maxScale, size, !disabled);\r\n}\r\nfunction calculateMidpoint(event, scale, contentComponent) {\r\n var contentRect = contentComponent.getBoundingClientRect();\r\n var touches = event.touches;\r\n var firstPointX = round(touches[0].clientX - contentRect.left, 5);\r\n var firstPointY = round(touches[0].clientY - contentRect.top, 5);\r\n var secondPointX = round(touches[1].clientX - contentRect.left, 5);\r\n var secondPointY = round(touches[1].clientY - contentRect.top, 5);\r\n return {\r\n mouseX: (firstPointX + secondPointX) / 2 / scale,\r\n mouseY: (firstPointY + secondPointY) / 2 / scale,\r\n };\r\n}\r\nfunction handleZoomPinch(event) {\r\n var _a = this.stateProvider, scale = _a.scale, _b = _a.options, limitToBounds = _b.limitToBounds, limitToWrapper = _b.limitToWrapper, _c = _a.scalePadding, disabled = _c.disabled, size = _c.size, limitsOnWheel = _a.wheel.limitsOnWheel, pinch = _a.pinch;\r\n var contentComponent = this.state.contentComponent;\r\n if (pinch.disabled || this.stateProvider.options.disabled)\r\n return;\r\n if (event.cancelable) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n // if one finger starts from outside of wrapper\r\n if (this.pinchStartDistance === null)\r\n return;\r\n // Position transformation\r\n var _d = calculateMidpoint(event, scale, contentComponent), mouseX = _d.mouseX, mouseY = _d.mouseY;\r\n // if touches goes off of the wrapper element\r\n if (checkIfInfinite(mouseX) || checkIfInfinite(mouseY))\r\n return;\r\n var currentDistance = getCurrentDistance(event);\r\n var newScale = calculatePinchZoom.call(this, currentDistance, this.pinchStartDistance);\r\n if (checkIfInfinite(newScale) || newScale === scale)\r\n return;\r\n // Get new element sizes to calculate bounds\r\n var bounds = handleCalculateBounds.call(this, newScale, limitToWrapper);\r\n // Calculate transformations\r\n var isLimitedToBounds = limitToBounds && (disabled || size === 0 || limitsOnWheel);\r\n var _e = handleCalculatePositions.call(this, mouseX, mouseY, newScale, bounds, isLimitedToBounds), x = _e.x, y = _e.y;\r\n this.lastDistance = currentDistance;\r\n this.stateProvider.positionX = x;\r\n this.stateProvider.positionY = y;\r\n this.stateProvider.scale = newScale;\r\n this.stateProvider.previousScale = scale;\r\n // update component transformation\r\n this.applyTransformation();\r\n}\n\nvar throttleTime = 30;\r\nfunction velocityTimeSpeed(speed, animationTime) {\r\n var velocityEqualToMove = this.stateProvider.pan.velocityEqualToMove;\r\n if (velocityEqualToMove) {\r\n return animationTime - animationTime / Math.max(1, speed);\r\n }\r\n return animationTime;\r\n}\r\nfunction handleEnableVelocity() {\r\n this.setState({ startAnimation: false });\r\n}\r\nfunction handleFireVelocity() {\r\n this.setState({ startAnimation: true });\r\n}\r\nfunction animateVelocity() {\r\n var _this = this;\r\n var _a = this.stateProvider, positionX = _a.positionX, positionY = _a.positionY, limitToBounds = _a.options.limitToBounds, _b = _a.pan, velocityBaseTime = _b.velocityBaseTime, lockAxisX = _b.lockAxisX, lockAxisY = _b.lockAxisY, velocityAnimationType = _b.velocityAnimationType, panReturnAnimationTime = _b.panReturnAnimationTime, panReturnAnimationType = _b.panReturnAnimationType, padding = _b.padding, paddingSize = _b.paddingSize, wrapperComponent = _a.wrapperComponent;\r\n if (!this.mounted)\r\n return;\r\n if (!this.velocity || !this.bounds)\r\n return handleDisableAnimation.call(this);\r\n var _c = this.bounds, maxPositionX = _c.maxPositionX, minPositionX = _c.minPositionX, maxPositionY = _c.maxPositionY, minPositionY = _c.minPositionY;\r\n var _d = this.velocity, velocityX = _d.velocityX, velocityY = _d.velocityY, velocity = _d.velocity;\r\n var animationTime = velocityTimeSpeed.call(this, velocity, velocityBaseTime);\r\n if (!animationTime) {\r\n handlePanningAnimation.call(this);\r\n return;\r\n }\r\n var targetX = velocityX;\r\n var targetY = velocityY;\r\n // pan return animation\r\n var newAnimationTime = animationTime > panReturnAnimationTime\r\n ? animationTime\r\n : panReturnAnimationTime;\r\n var paddingValue = padding ? paddingSize : 0;\r\n var paddingX = wrapperComponent\r\n ? (paddingValue * wrapperComponent.offsetWidth) / 100\r\n : 0;\r\n var paddingY = wrapperComponent\r\n ? (paddingValue * wrapperComponent.offsetHeight) / 100\r\n : 0;\r\n var maxTargetX = maxPositionX + paddingX;\r\n var minTargetX = minPositionX - paddingX;\r\n var maxTargetY = maxPositionY + paddingY;\r\n var minTargetY = minPositionY - paddingY;\r\n var startPosition = checkPositionBounds(positionX, positionY, this.bounds, limitToBounds, paddingValue, wrapperComponent);\r\n var startTime = new Date().getTime();\r\n // animation start timestamp\r\n animate.call(this, velocityAnimationType, newAnimationTime, function (step) {\r\n var frameTime = new Date().getTime() - startTime;\r\n var animationProgress = frameTime / panReturnAnimationTime;\r\n var returnAnimation = availableAnimations[panReturnAnimationType];\r\n var customReturnStep = returnAnimation(animationProgress);\r\n if (frameTime > panReturnAnimationTime ||\r\n customReturnStep > 1 ||\r\n customReturnStep === Infinity ||\r\n customReturnStep === -Infinity)\r\n customReturnStep = 1;\r\n var currentPositionX = getPosition(lockAxisX, targetX, step, customReturnStep, minPositionX, maxPositionX, limitToBounds, positionX, startPosition.x, minTargetX, maxTargetX);\r\n var currentPositionY = getPosition(lockAxisY, targetY, step, customReturnStep, minPositionY, maxPositionY, limitToBounds, positionY, startPosition.y, minTargetY, maxTargetY);\r\n if (positionX !== currentPositionX || positionY !== currentPositionY) {\r\n // Save panned position\r\n _this.stateProvider.positionX = currentPositionX;\r\n _this.stateProvider.positionY = currentPositionY;\r\n // apply animation changes\r\n _this.applyTransformation();\r\n }\r\n });\r\n}\r\nfunction calculateVelocityStart(event) {\r\n var _this = this;\r\n var _a = this.stateProvider, scale = _a.scale, disabled = _a.options.disabled, _b = _a.pan, velocity = _b.velocity, velocitySensitivity = _b.velocitySensitivity, velocityActiveScale = _b.velocityActiveScale, velocityMinSpeed = _b.velocityMinSpeed, wrapperComponent = _a.wrapperComponent;\r\n if (!velocity || velocityActiveScale >= scale || disabled)\r\n return;\r\n handleEnableVelocity.call(this);\r\n var now = Date.now();\r\n if (this.lastMousePosition) {\r\n var position_1 = getClientPosition(event);\r\n if (!position_1)\r\n return console.error(\"No mouse or touch position detected\");\r\n var clientX = position_1.clientX, clientY = position_1.clientY;\r\n var distanceX = clientX - this.lastMousePosition.clientX;\r\n var distanceY = clientY - this.lastMousePosition.clientY;\r\n var interval = now - this.velocityTime;\r\n var wrapperToWindowScaleX = 2 - wrapperComponent.offsetWidth / window.innerWidth;\r\n var wrapperToWindowScaleY = 2 - wrapperComponent.offsetHeight / window.innerHeight;\r\n var scaledX = 20 * Math.max(velocityMinSpeed, Math.min(2, wrapperToWindowScaleX));\r\n var scaledY = 20 * Math.max(velocityMinSpeed, Math.min(2, wrapperToWindowScaleY));\r\n var velocityX = (distanceX / interval) * velocitySensitivity * scale * scaledX;\r\n var velocityY = (distanceY / interval) * velocitySensitivity * scale * scaledY;\r\n var speed = distanceX * distanceX + distanceY * distanceY;\r\n var velocity_1 = (Math.sqrt(speed) / interval) * velocitySensitivity;\r\n if (this.velocity && velocity_1 < this.velocity.velocity && this.throttle)\r\n return;\r\n this.velocity = { velocityX: velocityX, velocityY: velocityY, velocity: velocity_1 };\r\n // throttling\r\n if (this.throttle)\r\n clearTimeout(this.throttle);\r\n this.throttle = setTimeout(function () {\r\n if (_this.mounted)\r\n _this.throttle = false;\r\n }, throttleTime);\r\n }\r\n var position = getClientPosition(event);\r\n this.lastMousePosition = position;\r\n this.velocityTime = now;\r\n}\r\nfunction getPosition(isLocked, target, step, panReturnStep, minBound, maxBound, limitToBounds, offset, startPosition, minTarget, maxTarget) {\r\n if (limitToBounds) {\r\n if (startPosition > minBound && offset > maxBound) {\r\n var newPosition = startPosition - (startPosition - maxBound) * panReturnStep;\r\n if (newPosition > maxTarget)\r\n return maxTarget;\r\n if (newPosition < maxBound)\r\n return maxBound;\r\n return newPosition;\r\n }\r\n if (startPosition < minBound && offset < minBound) {\r\n var newPosition = startPosition - (startPosition - minBound) * panReturnStep;\r\n if (newPosition < minTarget)\r\n return minTarget;\r\n if (newPosition > minBound)\r\n return minBound;\r\n return newPosition;\r\n }\r\n }\r\n if (isLocked)\r\n return startPosition;\r\n var offsetPosition = offset + target * step;\r\n return boundLimiter(offsetPosition, minBound, maxBound, limitToBounds);\r\n}\n\n// We want to make event listeners non-passive, and to do so have to check\r\nfunction makePassiveEventOption(passive) {\r\n return passive;\r\n}\n\nvar propsList = [\r\n \"previousScale\",\r\n \"scale\",\r\n \"positionX\",\r\n \"positionY\",\r\n \"defaultPositionX\",\r\n \"defaultPositionY\",\r\n \"defaultScale\",\r\n \"onWheelStart\",\r\n \"onWheel\",\r\n \"onWheelStop\",\r\n \"onPanningStart\",\r\n \"onPanning\",\r\n \"onPanningStop\",\r\n \"onPinchingStart\",\r\n \"onPinching\",\r\n \"onPinchingStop\",\r\n \"onZoomChange\",\r\n \"options\",\r\n \"wheel\",\r\n \"scalePadding\",\r\n \"pan\",\r\n \"pinch\",\r\n \"zoomIn\",\r\n \"zoomOut\",\r\n \"doubleClick\",\r\n \"reset\",\r\n];\r\nvar getValidPropsFromObject = function (props) {\r\n return Object.keys(props).reduce(function (acc, key) {\r\n if (propsList.includes(key)) {\r\n acc[key] = props[key];\r\n }\r\n return acc;\r\n }, {});\r\n};\n\nvar Context = React.createContext({});\r\nvar wheelStopEventTimer = null;\r\nvar wheelStopEventTime = 180;\r\nvar wheelAnimationTimer = null;\r\nvar wheelAnimationTime = 100;\r\nvar StateProvider = /** @class */ (function (_super) {\r\n __extends(StateProvider, _super);\r\n function StateProvider() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.mounted = true;\r\n _this.state = {\r\n wrapperComponent: undefined,\r\n contentComponent: undefined,\r\n };\r\n _this.stateProvider = __assign(__assign(__assign(__assign({}, initialState), mergeProps(initialState, _this.props.dynamicValues)), _this.props.defaultValues), { previousScale: _this.props.dynamicValues.scale ||\r\n _this.props.defaultValues.scale ||\r\n initialState.scale });\r\n _this.windowToWrapperScaleX = 0;\r\n _this.windowToWrapperScaleY = 0;\r\n // panning helpers\r\n _this.startCoords = null;\r\n _this.isDown = false;\r\n // pinch helpers\r\n _this.pinchStartDistance = null;\r\n _this.lastDistance = null;\r\n _this.pinchStartScale = null;\r\n _this.distance = null;\r\n _this.bounds = null;\r\n // velocity helpers\r\n _this.velocityTime = null;\r\n _this.lastMousePosition = null;\r\n _this.velocity = null;\r\n _this.offsetX = null;\r\n _this.offsetY = null;\r\n _this.throttle = false;\r\n // wheel helpers\r\n _this.previousWheelEvent = null;\r\n _this.lastScale = null;\r\n // animations helpers\r\n _this.animate = null;\r\n _this.animation = null;\r\n _this.maxBounds = null;\r\n //////////\r\n // Wheel\r\n //////////\r\n _this.handleWheel = function (event) {\r\n var _a = _this.stateProvider, scale = _a.scale, _b = _a.wheel, disabled = _b.disabled, wheelEnabled = _b.wheelEnabled, touchPadEnabled = _b.touchPadEnabled;\r\n var _c = _this.props, onWheelStart = _c.onWheelStart, onWheel = _c.onWheel, onWheelStop = _c.onWheelStop;\r\n var _d = _this.state, wrapperComponent = _d.wrapperComponent, contentComponent = _d.contentComponent;\r\n if (_this.isDown ||\r\n disabled ||\r\n _this.stateProvider.options.disabled ||\r\n !wrapperComponent ||\r\n !contentComponent)\r\n return;\r\n // ctrlKey detects if touchpad execute wheel or pinch gesture\r\n if (!wheelEnabled && !event.ctrlKey)\r\n return;\r\n if (!touchPadEnabled && event.ctrlKey)\r\n return;\r\n // Wheel start event\r\n if (!wheelStopEventTimer) {\r\n _this.lastScale = scale;\r\n handleDisableAnimation.call(_this);\r\n handleCallback(onWheelStart, _this.getCallbackProps());\r\n }\r\n // Wheel event\r\n handleWheelZoom.call(_this, event);\r\n handleCallback(onWheel, _this.getCallbackProps());\r\n _this.applyTransformation(null, null, null);\r\n _this.previousWheelEvent = event;\r\n // Wheel stop event\r\n if (handleWheelStop(_this.previousWheelEvent, event, _this.stateProvider)) {\r\n clearTimeout(wheelStopEventTimer);\r\n wheelStopEventTimer = setTimeout(function () {\r\n if (!_this.mounted)\r\n return;\r\n handleCallback(onWheelStop, _this.getCallbackProps());\r\n wheelStopEventTimer = null;\r\n }, wheelStopEventTime);\r\n }\r\n // cancel animation\r\n _this.animate = false;\r\n // fire animation\r\n _this.lastScale = _this.stateProvider.scale;\r\n clearTimeout(wheelAnimationTimer);\r\n wheelAnimationTimer = setTimeout(function () {\r\n if (!_this.mounted)\r\n return;\r\n handlePaddingAnimation$1.call(_this, event);\r\n }, wheelAnimationTime);\r\n };\r\n //////////\r\n // Panning\r\n //////////\r\n _this.checkPanningTarget = function (event) {\r\n var disableOnTarget = _this.stateProvider.pan.disableOnTarget;\r\n return (disableOnTarget\r\n .map(function (tag) { return tag.toUpperCase(); })\r\n .includes(event.target.tagName) ||\r\n disableOnTarget.find(function (element) {\r\n return event.target.classList.value.includes(element);\r\n }));\r\n };\r\n _this.checkIsPanningActive = function (event) {\r\n var disabled = _this.stateProvider.pan.disabled;\r\n var _a = _this.state, wrapperComponent = _a.wrapperComponent, contentComponent = _a.contentComponent;\r\n return (!_this.isDown ||\r\n disabled ||\r\n _this.stateProvider.options.disabled ||\r\n (event.touches &&\r\n (event.touches.length !== 1 ||\r\n Math.abs(_this.startCoords.x - event.touches[0].clientX) < 1 ||\r\n Math.abs(_this.startCoords.y - event.touches[0].clientY) < 1)) ||\r\n !wrapperComponent ||\r\n !contentComponent);\r\n };\r\n _this.handleSetUpPanning = function (x, y) {\r\n var _a = _this.stateProvider, positionX = _a.positionX, positionY = _a.positionY;\r\n _this.isDown = true;\r\n _this.startCoords = { x: x - positionX, y: y - positionY };\r\n handleCallback(_this.props.onPanningStart, _this.getCallbackProps());\r\n };\r\n _this.handleStartPanning = function (event) {\r\n var _a = _this.stateProvider, wrapperComponent = _a.wrapperComponent, scale = _a.scale, _b = _a.options, minScale = _b.minScale, maxScale = _b.maxScale, limitToWrapper = _b.limitToWrapper, disabled = _a.pan.disabled;\r\n var target = event.target, touches = event.touches;\r\n if (disabled ||\r\n _this.stateProvider.options.disabled ||\r\n (wrapperComponent && !wrapperComponent.contains(target)) ||\r\n _this.checkPanningTarget(event) ||\r\n scale < minScale ||\r\n scale > maxScale)\r\n return;\r\n handleDisableAnimation.call(_this);\r\n _this.bounds = handleCalculateBounds.call(_this, scale, limitToWrapper);\r\n // Mobile points\r\n if (touches && touches.length === 1) {\r\n _this.handleSetUpPanning(touches[0].clientX, touches[0].clientY);\r\n }\r\n // Desktop points\r\n if (!touches) {\r\n _this.handleSetUpPanning(event.clientX, event.clientY);\r\n }\r\n };\r\n _this.handlePanning = function (event) {\r\n if (_this.isDown)\r\n event.preventDefault();\r\n if (_this.checkIsPanningActive(event))\r\n return;\r\n event.stopPropagation();\r\n calculateVelocityStart.call(_this, event);\r\n handlePanning.call(_this, event);\r\n handleCallback(_this.props.onPanning, _this.getCallbackProps());\r\n };\r\n _this.handleStopPanning = function () {\r\n if (_this.isDown) {\r\n _this.isDown = false;\r\n _this.animate = false;\r\n _this.animation = false;\r\n handleFireVelocity.call(_this);\r\n handleCallback(_this.props.onPanningStop, _this.getCallbackProps());\r\n var _a = _this.stateProvider, velocity = _a.pan.velocity, scale = _a.scale;\r\n // start velocity animation\r\n if (_this.velocity && velocity && scale > 1) {\r\n animateVelocity.call(_this);\r\n }\r\n else {\r\n // fire fit to bounds animation\r\n handlePanningAnimation.call(_this);\r\n }\r\n }\r\n };\r\n //////////\r\n // Pinch\r\n //////////\r\n _this.handlePinchStart = function (event) {\r\n var scale = _this.stateProvider.scale;\r\n event.preventDefault();\r\n event.stopPropagation();\r\n handleDisableAnimation.call(_this);\r\n var distance = getDistance(event.touches[0], event.touches[1]);\r\n _this.pinchStartDistance = distance;\r\n _this.lastDistance = distance;\r\n _this.pinchStartScale = scale;\r\n _this.isDown = false;\r\n handleCallback(_this.props.onPinchingStart, _this.getCallbackProps());\r\n };\r\n _this.handlePinch = function (event) {\r\n _this.isDown = false;\r\n handleZoomPinch.call(_this, event);\r\n handleCallback(_this.props.onPinching, _this.getCallbackProps());\r\n };\r\n _this.handlePinchStop = function () {\r\n if (typeof _this.pinchStartScale === \"number\") {\r\n _this.isDown = false;\r\n _this.velocity = null;\r\n _this.lastDistance = null;\r\n _this.pinchStartScale = null;\r\n _this.pinchStartDistance = null;\r\n handlePaddingAnimation$1.call(_this);\r\n handleCallback(_this.props.onPinchingStop, _this.getCallbackProps());\r\n }\r\n };\r\n //////////\r\n // Touch Events\r\n //////////\r\n _this.handleTouchStart = function (event) {\r\n var _a = _this.stateProvider, wrapperComponent = _a.wrapperComponent, contentComponent = _a.contentComponent, scale = _a.scale, _b = _a.options, disabled = _b.disabled, minScale = _b.minScale;\r\n var touches = event.touches;\r\n if (disabled || !wrapperComponent || !contentComponent || scale < minScale)\r\n return;\r\n handleDisableAnimation.call(_this);\r\n if (touches && touches.length === 1)\r\n return _this.handleStartPanning(event);\r\n if (touches && touches.length === 2)\r\n return _this.handlePinchStart(event);\r\n };\r\n _this.handleTouch = function (event) {\r\n var _a = _this.stateProvider, pan = _a.pan, pinch = _a.pinch, options = _a.options;\r\n if (options.disabled)\r\n return;\r\n if (!pan.disabled && event.touches.length === 1)\r\n return _this.handlePanning(event);\r\n if (!pinch.disabled && event.touches.length === 2)\r\n return _this.handlePinch(event);\r\n };\r\n _this.handleTouchStop = function () {\r\n _this.handleStopPanning();\r\n _this.handlePinchStop();\r\n };\r\n //////////\r\n // Controls\r\n //////////\r\n _this.zoomIn = function (event) {\r\n var _a = _this.stateProvider, _b = _a.zoomIn, disabled = _b.disabled, step = _b.step, options = _a.options;\r\n var _c = _this.state, wrapperComponent = _c.wrapperComponent, contentComponent = _c.contentComponent;\r\n if (!event)\r\n throw Error(\"Zoom in function requires event prop\");\r\n if (disabled || options.disabled || !wrapperComponent || !contentComponent)\r\n return;\r\n handleZoomControls.call(_this, 1, step);\r\n };\r\n _this.zoomOut = function (event) {\r\n var _a = _this.stateProvider, _b = _a.zoomOut, disabled = _b.disabled, step = _b.step, options = _a.options;\r\n var _c = _this.state, wrapperComponent = _c.wrapperComponent, contentComponent = _c.contentComponent;\r\n if (!event)\r\n throw Error(\"Zoom out function requires event prop\");\r\n if (disabled || options.disabled || !wrapperComponent || !contentComponent)\r\n return;\r\n handleZoomControls.call(_this, -1, step);\r\n };\r\n _this.handleDbClick = function (event) {\r\n var _a = _this.stateProvider, options = _a.options, _b = _a.doubleClick, disabled = _b.disabled, step = _b.step;\r\n var _c = _this.state, wrapperComponent = _c.wrapperComponent, contentComponent = _c.contentComponent;\r\n if (!event)\r\n throw Error(\"Double click function requires event prop\");\r\n if (disabled || options.disabled || !wrapperComponent || !contentComponent)\r\n return;\r\n handleDoubleClick.call(_this, event, 1, step);\r\n };\r\n _this.setScale = function (newScale, speed, type) {\r\n if (speed === void 0) { speed = 200; }\r\n if (type === void 0) { type = \"easeOut\"; }\r\n var _a = _this.stateProvider, positionX = _a.positionX, positionY = _a.positionY, scale = _a.scale, disabled = _a.options.disabled;\r\n var _b = _this.state, wrapperComponent = _b.wrapperComponent, contentComponent = _b.contentComponent;\r\n if (disabled || !wrapperComponent || !contentComponent)\r\n return;\r\n var targetState = {\r\n positionX: positionX,\r\n positionY: positionY,\r\n scale: isNaN(newScale) ? scale : newScale,\r\n };\r\n animateComponent.call(_this, {\r\n targetState: targetState,\r\n speed: speed,\r\n type: type,\r\n });\r\n };\r\n _this.setPositionX = function (newPosX, speed, type) {\r\n if (speed === void 0) { speed = 200; }\r\n if (type === void 0) { type = \"easeOut\"; }\r\n var _a = _this.stateProvider, positionX = _a.positionX, positionY = _a.positionY, scale = _a.scale, _b = _a.options, disabled = _b.disabled, transformEnabled = _b.transformEnabled;\r\n var _c = _this.state, wrapperComponent = _c.wrapperComponent, contentComponent = _c.contentComponent;\r\n if (disabled || !transformEnabled || !wrapperComponent || !contentComponent)\r\n return;\r\n var targetState = {\r\n positionX: isNaN(newPosX) ? positionX : newPosX,\r\n positionY: positionY,\r\n scale: scale,\r\n };\r\n animateComponent.call(_this, {\r\n targetState: targetState,\r\n speed: speed,\r\n type: type,\r\n });\r\n };\r\n _this.setPositionY = function (newPosY, speed, type) {\r\n if (speed === void 0) { speed = 200; }\r\n if (type === void 0) { type = \"easeOut\"; }\r\n var _a = _this.stateProvider, positionX = _a.positionX, scale = _a.scale, positionY = _a.positionY, _b = _a.options, disabled = _b.disabled, transformEnabled = _b.transformEnabled;\r\n var _c = _this.state, wrapperComponent = _c.wrapperComponent, contentComponent = _c.contentComponent;\r\n if (disabled || !transformEnabled || !wrapperComponent || !contentComponent)\r\n return;\r\n var targetState = {\r\n positionX: positionX,\r\n positionY: isNaN(newPosY) ? positionY : newPosY,\r\n scale: scale,\r\n };\r\n animateComponent.call(_this, {\r\n targetState: targetState,\r\n speed: speed,\r\n type: type,\r\n });\r\n };\r\n _this.setTransform = function (newPosX, newPosY, newScale, speed, type) {\r\n if (speed === void 0) { speed = 200; }\r\n if (type === void 0) { type = \"easeOut\"; }\r\n var _a = _this.stateProvider, positionX = _a.positionX, positionY = _a.positionY, scale = _a.scale, _b = _a.options, disabled = _b.disabled, transformEnabled = _b.transformEnabled;\r\n var _c = _this.state, wrapperComponent = _c.wrapperComponent, contentComponent = _c.contentComponent;\r\n if (disabled || !transformEnabled || !wrapperComponent || !contentComponent)\r\n return;\r\n var targetState = {\r\n positionX: isNaN(newPosX) ? positionX : newPosX,\r\n positionY: isNaN(newPosY) ? positionY : newPosY,\r\n scale: isNaN(newScale) ? scale : newScale,\r\n };\r\n animateComponent.call(_this, {\r\n targetState: targetState,\r\n speed: speed,\r\n type: type,\r\n });\r\n };\r\n _this.resetTransform = function () {\r\n var _a = _this.stateProvider.options, disabled = _a.disabled, transformEnabled = _a.transformEnabled;\r\n if (disabled || !transformEnabled)\r\n return;\r\n resetTransformations.call(_this);\r\n };\r\n _this.setDefaultState = function () {\r\n _this.animation = null;\r\n _this.stateProvider = __assign(__assign(__assign({}, _this.stateProvider), { scale: initialState.scale, positionX: initialState.positionX, positionY: initialState.positionY }), _this.props.defaultValues);\r\n _this.forceUpdate();\r\n };\r\n //////////\r\n // Setters\r\n //////////\r\n _this.setWrapperComponent = function (wrapperComponent) {\r\n _this.setState({ wrapperComponent: wrapperComponent });\r\n };\r\n _this.setContentComponent = function (contentComponent) {\r\n _this.setState({ contentComponent: contentComponent }, function () {\r\n var _a = _this.stateProvider, wrapperComponent = _a.wrapperComponent, _b = _a.options, centerContent = _b.centerContent, limitToBounds = _b.limitToBounds, limitToWrapper = _b.limitToWrapper, scale = _a.scale;\r\n var _c = _this.props.defaultValues, positionX = _c.positionX, positionY = _c.positionY;\r\n if ((limitToBounds && !limitToWrapper) ||\r\n (centerContent && !positionX && !positionY)) {\r\n var transform = \"translate(25%, 25%) scale(\" + scale + \")\";\r\n contentComponent.style.transform = transform;\r\n contentComponent.style.WebkitTransform = transform;\r\n // force update to inject state to the context\r\n _this.forceUpdate();\r\n var startTime_1 = new Date().getTime();\r\n var maxTimeWait_1 = 2000;\r\n var interval_1 = setInterval(function () {\r\n if (wrapperComponent.offsetWidth) {\r\n var bounds = handleCalculateBounds.call(_this, scale, false);\r\n _this.stateProvider.positionX = bounds.minPositionX;\r\n _this.stateProvider.positionY = bounds.minPositionY;\r\n _this.applyTransformation(null, null, null);\r\n clearInterval(interval_1);\r\n interval_1 = null;\r\n }\r\n else if (new Date().getTime() - startTime_1 > maxTimeWait_1) {\r\n clearInterval(interval_1);\r\n interval_1 = null;\r\n }\r\n }, 20);\r\n }\r\n else {\r\n _this.applyTransformation(null, null, null);\r\n }\r\n });\r\n };\r\n _this.applyTransformation = function (newScale, posX, posY) {\r\n if (!_this.mounted)\r\n return;\r\n var contentComponent = _this.state.contentComponent;\r\n var onZoomChange = _this.props.onZoomChange;\r\n var _a = _this.stateProvider, previousScale = _a.previousScale, scale = _a.scale, positionX = _a.positionX, positionY = _a.positionY;\r\n if (!contentComponent)\r\n return console.error(\"There is no content component\");\r\n var transform = \"translate(\" + (posX || positionX) + \"px, \" + (posY ||\r\n positionY) + \"px) scale(\" + (newScale || scale) + \")\";\r\n contentComponent.style.transform = transform;\r\n contentComponent.style.WebkitTransform = transform;\r\n // force update to inject state to the context\r\n _this.forceUpdate();\r\n if (onZoomChange && previousScale !== scale) {\r\n handleCallback(onZoomChange, _this.getCallbackProps());\r\n }\r\n };\r\n //////////\r\n // Props\r\n //////////\r\n _this.getCallbackProps = function () { return getValidPropsFromObject(_this.stateProvider); };\r\n return _this;\r\n }\r\n StateProvider.prototype.componentDidMount = function () {\r\n var passiveOption = makePassiveEventOption(false);\r\n // Panning on window to allow panning when mouse is out of wrapper\r\n window.addEventListener(\"mousedown\", this.handleStartPanning, passiveOption);\r\n window.addEventListener(\"mousemove\", this.handlePanning, passiveOption);\r\n window.addEventListener(\"mouseup\", this.handleStopPanning, passiveOption);\r\n };\r\n StateProvider.prototype.componentWillUnmount = function () {\r\n var passiveOption = makePassiveEventOption(false);\r\n window.removeEventListener(\"mousedown\", this.handleStartPanning, passiveOption);\r\n window.removeEventListener(\"mousemove\", this.handlePanning, passiveOption);\r\n window.removeEventListener(\"mouseup\", this.handleStopPanning, passiveOption);\r\n handleDisableAnimation.call(this);\r\n };\r\n StateProvider.prototype.componentDidUpdate = function (oldProps, oldState) {\r\n var _a = this.state, wrapperComponent = _a.wrapperComponent, contentComponent = _a.contentComponent;\r\n var dynamicValues = this.props.dynamicValues;\r\n if (!oldState.contentComponent && contentComponent) {\r\n this.stateProvider.contentComponent = contentComponent;\r\n }\r\n if (!oldState.wrapperComponent &&\r\n wrapperComponent &&\r\n wrapperComponent !== undefined) {\r\n this.stateProvider.wrapperComponent = wrapperComponent;\r\n this.windowToWrapperScaleX = getWindowScaleX(wrapperComponent);\r\n this.windowToWrapperScaleY = getWindowScaleY(wrapperComponent);\r\n // Zooming events on wrapper\r\n var passiveOption = makePassiveEventOption(false);\r\n wrapperComponent.addEventListener(\"wheel\", this.handleWheel, passiveOption);\r\n wrapperComponent.addEventListener(\"dblclick\", this.handleDbClick, passiveOption);\r\n wrapperComponent.addEventListener(\"touchstart\", this.handleTouchStart, passiveOption);\r\n wrapperComponent.addEventListener(\"touchmove\", this.handleTouch, passiveOption);\r\n wrapperComponent.addEventListener(\"touchend\", this.handleTouchStop, passiveOption);\r\n }\r\n // set bound for animations\r\n if ((wrapperComponent && contentComponent) ||\r\n oldProps.dynamicValues !== dynamicValues) {\r\n this.maxBounds = handleCalculateBounds.call(this, this.stateProvider.scale, this.stateProvider.options.limitToWrapper);\r\n }\r\n // must be at the end of the update function, updates\r\n if (oldProps.dynamicValues && oldProps.dynamicValues !== dynamicValues) {\r\n this.animation = null;\r\n this.stateProvider = __assign(__assign({}, this.stateProvider), mergeProps(this.stateProvider, dynamicValues));\r\n this.applyTransformation(null, null, null);\r\n }\r\n };\r\n StateProvider.prototype.render = function () {\r\n var _a = this.state, wrapperComponent = _a.wrapperComponent, contentComponent = _a.contentComponent;\r\n /**\r\n * Context provider value\r\n */\r\n var value = {\r\n loaded: Boolean(wrapperComponent && contentComponent),\r\n state: this.getCallbackProps(),\r\n dispatch: {\r\n setScale: this.setScale,\r\n setPositionX: this.setPositionX,\r\n setPositionY: this.setPositionY,\r\n zoomIn: this.zoomIn,\r\n zoomOut: this.zoomOut,\r\n setTransform: this.setTransform,\r\n resetTransform: this.resetTransform,\r\n setDefaultState: this.setDefaultState,\r\n },\r\n nodes: {\r\n setWrapperComponent: this.setWrapperComponent,\r\n setContentComponent: this.setContentComponent,\r\n },\r\n };\r\n var children = this.props.children;\r\n var content = typeof children === \"function\"\r\n ? children(__assign(__assign({}, value.state), value.dispatch))\r\n : children;\r\n return React.createElement(Context.Provider, { value: value }, content);\r\n };\r\n return StateProvider;\r\n}(Component));\n\nvar TransformWrapper = function (_a) {\r\n var children = _a.children, defaultPositionX = _a.defaultPositionX, defaultPositionY = _a.defaultPositionY, defaultScale = _a.defaultScale, onWheelStart = _a.onWheelStart, onWheel = _a.onWheel, onWheelStop = _a.onWheelStop, onPanningStart = _a.onPanningStart, onPanning = _a.onPanning, onPanningStop = _a.onPanningStop, onPinchingStart = _a.onPinchingStart, onPinching = _a.onPinching, onPinchingStop = _a.onPinchingStop, onZoomChange = _a.onZoomChange, rest = __rest(_a, [\"children\", \"defaultPositionX\", \"defaultPositionY\", \"defaultScale\", \"onWheelStart\", \"onWheel\", \"onWheelStop\", \"onPanningStart\", \"onPanning\", \"onPanningStop\", \"onPinchingStart\", \"onPinching\", \"onPinchingStop\", \"onZoomChange\"]);\r\n var props = __assign({}, rest);\r\n if (props.options && props.options.limitToWrapper) {\r\n props.options.limitToBounds = true;\r\n }\r\n return (React.createElement(StateProvider, { defaultValues: deleteUndefinedProps({\r\n positionX: defaultPositionX,\r\n positionY: defaultPositionY,\r\n scale: defaultScale,\r\n }), dynamicValues: deleteUndefinedProps(getValidPropsFromObject(props)), onWheelStart: onWheelStart, onWheel: onWheel, onWheelStop: onWheelStop, onPanningStart: onPanningStart, onPanning: onPanning, onPanningStop: onPanningStop, onPinchingStart: onPinchingStart, onPinching: onPinching, onPinchingStop: onPinchingStop, onZoomChange: onZoomChange }, children));\r\n};\n\nfunction styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar css = \".TransformComponent-module_container__3NwNd {\\n position: relative;\\n width: fit-content;\\n height: fit-content;\\n overflow: hidden;\\n -webkit-touch-callout: none; /* iOS Safari */\\n -webkit-user-select: none; /* Safari */\\n -khtml-user-select: none; /* Konqueror HTML */\\n -moz-user-select: none; /* Firefox */\\n -ms-user-select: none; /* Internet Explorer/Edge */\\n user-select: none;\\n margin: 0;\\n padding: 0;\\n}\\n.TransformComponent-module_content__TZU5O {\\n display: flex;\\n flex-wrap: wrap;\\n width: fit-content;\\n height: fit-content;\\n margin: 0;\\n padding: 0;\\n transform-origin: 0% 0%;\\n}\\n.TransformComponent-module_content__TZU5O img {\\n pointer-events: none;\\n}\\n\";\nvar styles = {\"container\":\"TransformComponent-module_container__3NwNd\",\"content\":\"TransformComponent-module_content__TZU5O\"};\nstyleInject(css);\n\nvar TransformComponent = /** @class */ (function (_super) {\r\n __extends(TransformComponent, _super);\r\n function TransformComponent() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.wrapperRef = React.createRef();\r\n _this.contentRef = React.createRef();\r\n return _this;\r\n }\r\n TransformComponent.prototype.componentDidMount = function () {\r\n var nodes = this.context.nodes;\r\n nodes.setWrapperComponent(this.wrapperRef.current);\r\n nodes.setContentComponent(this.contentRef.current);\r\n };\r\n TransformComponent.prototype.render = function () {\r\n var children = this.props.children;\r\n var _a = this.context.state, positionX = _a.positionX, positionY = _a.positionY, scale = _a.scale, _b = _a.options, wrapperClass = _b.wrapperClass, contentClass = _b.contentClass;\r\n var style = {\r\n WebkitTransform: \"translate(\" + positionX + \"px, \" + positionY + \"px) scale(\" + scale + \")\",\r\n transform: \"translate(\" + positionX + \"px, \" + positionY + \"px) scale(\" + scale + \")\",\r\n };\r\n return (React.createElement(\"div\", { ref: this.wrapperRef, className: \"react-transform-component \" + styles.container + \" \" + wrapperClass },\r\n React.createElement(\"div\", { ref: this.contentRef, className: \"react-transform-element \" + styles.content + \" \" + contentClass, style: style }, children)));\r\n };\r\n return TransformComponent;\r\n}(React.Component));\r\nTransformComponent.contextType = Context;\n\nexport { TransformComponent, TransformWrapper };\n//# sourceMappingURL=index.es.js.map\n","export const HEADER_HEIGHT = 61;\n\nexport default HEADER_HEIGHT;\n","/* eslint-disable import/prefer-default-export */\n\n/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport const VIDEO_POPUP_ID = 'VIDEO_POPUP_ID';\n\n/**\n * An expression that checks for vimeo URLs described in https://developer.vimeo.com/api/oembed/videos#table-1 and matches the video id\n * @type {RegExp}\n */\nexport const VIMEO_FORMAT = new RegExp('(?:https?//)?vimeo.com[\\\\w/]*/(\\\\d+)$');\nexport const YOUTUBE_FORMAT = new RegExp('(?:https?//)?www.youtube.com/watch\\\\?v=([\\\\w\\\\-]+)');\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport PropTypes from 'prop-types';\n\nexport const RatingOptionItemType = PropTypes.shape({\n option_id: PropTypes.string,\n value: PropTypes.string\n});\n\nexport const RatingItemsType = PropTypes.arrayOf(\n PropTypes.shape({\n rating_id: PropTypes.string,\n rating_code: PropTypes.string,\n rating_options: PropTypes.arrayOf(RatingOptionItemType)\n })\n);\n\nexport const VoteType = PropTypes.shape({\n rating_code: PropTypes.string,\n value: PropTypes.string,\n percent: PropTypes.number\n});\n\nexport const ReviewItemType = PropTypes.shape({\n average_rating: PropTypes.number,\n nickname: PropTypes.string,\n title: PropTypes.string,\n detail: PropTypes.string,\n created_at: PropTypes.string,\n rating_votes: PropTypes.arrayOf(VoteType)\n});\n","/* eslint-disable react/prop-types */\n/* eslint-disable max-lines */\n/* eslint-disable react/no-unknown-property */\n/* eslint-disable @scandipwa/scandipwa-guidelines/only-render-in-component */\n/* eslint-disable react/forbid-prop-types */\n/* eslint-disable react/boolean-prop-naming */\n/* eslint-disable react/no-unused-state */\n/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-ProductReviewListtheme\n */\n\nimport PropTypes from 'prop-types';\nimport { lazy, Suspense } from 'react';\n\nimport Breadcrumbs from 'Component/Breadcrumbs';\nimport ContentWrapper from 'Component/ContentWrapper';\nimport { ProductCarousel } from 'Component/Html/Html.component';\nimport ProductActions from 'Component/ProductActions';\nimport ProductInformation from 'Component/ProductInformation';\nimport {\n SCROLL_TO_TOP_BUTTON_SHOW_PX\n} from 'Component/ScrollToTopButton/ScrollToTopButton.config';\nimport { Html } from 'Route/CategoryPage/CategoryPage.component';\nimport NoMatchHandler from 'Route/NoMatchHandler';\nimport { RECOMMENDER_PDP_ID } from 'Route/ProductPage/ProductPage.config';\nimport {\n ProductPage as SourceProductPage\n} from 'SourceRoute/ProductPage/ProductPage.component';\nimport { handleIosStickyHeader } from 'Util/PromoBanner/PromoBanner';\n\nimport './ProductPage.style';\nimport './ProductPage.style.override';\n\n// eslint-disable-next-line max-len\nexport const ScrollToTopButton = lazy(() => import(/* webpackMode: \"lazy\", webpackChunkName: \"footer\" */ 'Component/ScrollToTopButton/ScrollToTopButton.component'));\n\n/** @namespace Scandipwa/Route/ProductPage/Component */\nexport class ProductPageComponent extends SourceProductPage {\n static propTypes = {\n ...super.propTypes,\n productOptionsData: PropTypes.object.isRequired,\n product: PropTypes.object.isRequired,\n content_blocks: PropTypes.array,\n // eslint-disable-next-line react/no-unused-prop-types\n customer: PropTypes.object,\n // eslint-disable-next-line react/no-unused-prop-types\n locale: PropTypes.string.isRequired,\n basePath: PropTypes.string.isRequired\n };\n\n state = {\n isScrollToTopButtonRender: false\n };\n\n static defaultProps = {\n customer: {},\n content_blocks: []\n };\n\n componentDidMount() {\n window.addEventListener('scroll', this.getScrollPosition);\n handleIosStickyHeader();\n window.backButtonFromPDP = true;\n }\n\n componentWillUnmount() {\n window.removeEventListener('scroll', this.getScrollPosition);\n }\n\n getScrollPosition = () => {\n const scrollPositionY = window.scrollY;\n\n this.setState({\n isScrollToTopButtonRender: scrollPositionY >= SCROLL_TO_TOP_BUTTON_SHOW_PX\n });\n };\n\n getHighestVariantPrice() {\n const { product: { variants } } = this.props;\n\n if (!variants) {\n return null;\n }\n\n return Math.max(...variants.map((variant) => {\n const {\n price_range: {\n minimum_price: {\n final_price: {\n value\n }\n }\n }\n } = variant;\n\n return value.toFixed(2);\n }));\n }\n\n renderProductPageContent() {\n const {\n getLink,\n dataSource,\n areDetailsLoaded,\n activeProduct,\n setActiveProduct,\n updateUrl,\n useEmptyGallerySwitcher,\n parameters,\n isVariant\n } = this.props;\n\n return (\n \n );\n }\n\n renderAdditionalSections() {\n const {\n dataSource,\n parameters,\n areDetailsLoaded\n } = this.props;\n\n return (\n \n );\n }\n\n renderOrganizationSchema() {\n const { basePath } = this.props;\n const logoUrl = window.publicPath === undefined ? '/assets/images/global/puma-og-logo.png'\n : `${ window.location.origin }${ window.publicPath }assets/images/global/puma-og-logo.png`;\n\n return (\n \n \n \n \n );\n }\n\n renderContentBlockPlaceholder() {\n return
    ;\n }\n\n renderContentBlocks() {\n const { content_blocks, product } = this.props;\n\n if (!content_blocks || !content_blocks.length) {\n return null;\n }\n\n if (!product || !product.id) {\n this.renderContentBlockPlaceholder();\n }\n\n return content_blocks.map((block) => (\n \n \n \n ));\n }\n\n renderCarousel() {\n const { history, productIds } = this.props;\n\n if (productIds.length === 0) {\n return null;\n }\n\n return (\n \n );\n }\n\n render() {\n const { isScrollToTopButtonRender } = this.state;\n\n return (\n \n \n { isScrollToTopButtonRender\n && }\n \n { this.renderOrganizationSchema() }\n \n \n { this.renderProductPageContent() }\n \n { this.renderAdditionalSections() }\n { this.renderContentBlocks() }\n \n { this.renderCarousel() }\n
    \n \n \n );\n }\n}\n\nexport default ProductPageComponent;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport { default } from './ProductActions.container';\n","/* eslint-disable max-lines */\n/* eslint-disable @scandipwa/scandipwa-guidelines/jsx-no-props-destruction */\n/**\n * @author Vladislavs Zimnikovs \n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package puma-mx\n */\n\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\n\nimport { mapDispatchToProps as sourceMapDispatchToProps } from 'Component/Product/Product.container';\nimport { SIZE_CHART_POPUP_ID } from 'Component/SizeChartPopup/SizeChartPopup.config';\nimport { getVariantIndex } from 'Route/ProductPage/ProductPage.container';\nimport {\n mapStateToProps as sourceMapStateToProps,\n ProductActionsContainer as SourceContainer\n} from 'SourceComponent/ProductActions/ProductActions.container';\nimport { setIsFooterBootomSpaceNeeded } from 'Store/HeaderAndFooter/HeaderAndFooter.action';\nimport { showPopup } from 'Store/Popup/Popup.action';\nimport { updateUrlRewrite } from 'Store/UrlRewrites/UrlRewrites.action';\nimport history from 'Util/History';\nimport { validateGroup } from 'Util/Validator';\n\nimport ProductActionsComponent from './ProductActions.component';\n\n/** @namespace Scandipwa/Component/ProductActions/Container/mapStateToProps */\nexport const mapStateToProps = (state) => ({\n ...sourceMapStateToProps(state),\n default_country: state.ConfigReducer.default_country,\n urlRewrite: state.UrlRewritesReducer.urlRewrite,\n activeOverlay: state.OverlayReducer.activeOverlay,\n promoExcludedNotice: state.ConfigReducer.promo_excluded_notice,\n configurableProductsAttrs: state.ConfigReducer.configurableProductsAttrs,\n tabbyWidgetPdp: state.ConfigReducer.getTabbyWidgetPdp,\n tamaraWidgetPdp: state.ConfigReducer.getTamaraWidgetPdp\n});\n\n/** @namespace Scandipwa/Component/ProductActions/Container/mapDispatchToProps */\nexport const mapDispatchToProps = (dispatch) => ({\n ...sourceMapDispatchToProps(dispatch),\n showPopup: (payload) => dispatch(showPopup(SIZE_CHART_POPUP_ID, payload)),\n updateUrlRewrite: (urlRewrite, requestedUrl) => dispatch(updateUrlRewrite(urlRewrite, requestedUrl)),\n setIsFooterBootomSpaceNeeded:\n (isFooterBottomSpaceNeeded) => dispatch(\n setIsFooterBootomSpaceNeeded(isFooterBottomSpaceNeeded)\n )\n});\n\n/** @namespace Scandipwa/Component/ProductActions/Container */\nexport class ProductActionsContainer extends SourceContainer {\n static propTypes = {\n ...SourceContainer.propTypes,\n showPopup: PropTypes.func.isRequired,\n promoExcludedNotice: PropTypes.string.isRequired\n };\n\n containerFunctions = {\n ...this.containerFunctions,\n showOnlyIfLoaded: this.showOnlyIfLoaded.bind(this),\n getIsSizeDisabled: this.getIsSizeDisabled.bind(this),\n handleSizeChartClick: this.handleSizeChartClick.bind(this),\n updateConfigurableVariantAndQty: this.updateConfigurableVariantAndQty.bind(this),\n addToCartWithReturn: this.addToCartWithReturn.bind(this),\n getPreviewProduct: this.getPreviewProduct.bind(this),\n getGalleryProduct: this.getGalleryProduct.bind(this)\n };\n\n containerProps() {\n const { parameters, promoExcludedNotice } = this.props;\n\n return {\n ...super.containerProps(),\n parameters,\n promoExcludedNotice\n };\n }\n\n showOnlyIfLoaded(expression, content, placeholder = content) {\n const { areDetailsLoaded } = this.props;\n\n if (expression) {\n return content;\n }\n\n if (!areDetailsLoaded) {\n return placeholder;\n }\n\n if (areDetailsLoaded && !expression) {\n return null;\n }\n\n return content;\n }\n\n getNewParameters(parameters, key, value = '') {\n return {\n ...parameters,\n [key]: value.toString()\n };\n }\n\n /**\n * Overridden to add updateUrl()\n * @param key\n * @param value\n */\n updateConfigurableVariant(key, value, checkEmptyValue = false) {\n const { parameters: prevParameters } = this.state;\n const { search } = window.location;\n const urlParams = new URLSearchParams(search);\n const newParameters = this.getNewParameters(prevParameters, key, value);\n\n if (!newParameters.color && urlParams.has('color')) {\n newParameters.color = urlParams.get('color');\n }\n\n const { [key]: oldValue, ...currentParameters } = newParameters;\n const parameters = oldValue === '' && checkEmptyValue ? currentParameters : newParameters;\n\n this.setState({ parameters });\n\n const { updateUrl, product: { variants } } = this.props;\n const { selectedProduct } = this.state;\n\n const newIndex = getVariantIndex(variants, parameters);\n\n const newProduct = newIndex === -1 ? null : variants[newIndex];\n\n if (newProduct !== selectedProduct) {\n this.setState({\n selectedProduct: newProduct,\n parameters\n });\n }\n\n updateUrl(key, value, parameters, newProduct);\n }\n\n async updateConfigurableVariantAndQty(key, value) {\n const { parameters } = this.props;\n await this.updateConfigurableVariant(key, value);\n\n if (key === 'color' && parameters.size) {\n this.updateConfigurableVariant('size', parameters.size);\n }\n\n this.setQuantity(1);\n }\n\n handleSizeChartClick() {\n const { showPopup } = this.props;\n const { location: { search } } = window;\n\n this.setState({ search });\n\n showPopup({\n title: __('SIZE GUIDE')\n });\n }\n\n // The product to show when user land on PDP and no size is yet selected.\n // Used for style number, price, etc...\n getPreviewProduct() {\n const {\n parameters,\n parameters: { color },\n product: { variants = [] } = {}\n } = this.props;\n\n if (color && Object.keys(parameters).length === 1) {\n const index = variants.findIndex(({ color: vColor }) => +color === +vColor);\n\n if (index !== -1) {\n return variants[index];\n }\n }\n\n return false;\n }\n\n getGalleryProduct() {\n const {\n parameters: { color },\n product: { variants = [] } = {}\n } = this.props;\n\n if (color) {\n const index = variants.findIndex(({ color: vColor }) => +color === +vColor);\n\n if (index !== -1) {\n return variants[index];\n }\n }\n\n return false;\n }\n\n validateAttributes() {\n const { showError } = this.props;\n const { location: { search } } = history;\n const params = new URLSearchParams(search);\n\n if (!params.get('color')) {\n showError(__('Please select color'));\n }\n\n if (!params.get('size')) {\n showError(__('Please select size'));\n }\n }\n\n hasError() {\n const { errorMessages, errorFields, values } = validateGroup(this.validator);\n\n if (\n errorFields\n || errorMessages\n || this.validateConfigurableProduct()\n || this.filterAddToCartFileErrors(values)\n ) {\n this.scrollOptionsIntoView();\n this.setState({ addToCartTriggeredWithError: true });\n this.validateAttributes();\n\n return true;\n }\n\n return false;\n }\n\n getIsSizeDisabled({ attribute_value }) {\n const { parameters: { color }, product: { variants } } = this.props;\n\n const withStock = variants.findIndex(\n ({\n color: vColor,\n salable_qty,\n attributes: {\n size: { attribute_value: v_attribute_value }\n }\n }) => (+color === +vColor && +attribute_value === +v_attribute_value && +salable_qty > 0)\n );\n\n return withStock === -1;\n }\n\n normalizeSelectedOptions = (options, firstAttr) => {\n if (parseInt(atob(options[1]).split('/')[1], 10) === firstAttr) {\n return [options[1], options[0]];\n }\n\n return options;\n };\n\n async addToCartWithReturn() {\n this.updateSelectedValues();\n const { showError, configurableProductsAttrs } = this.props;\n const { search } = window.location;\n const urlParams = new URLSearchParams(search);\n const {\n selectedProduct: {\n type_id,\n style_number\n }\n } = this.state;\n\n if (this.hasError()) {\n if (urlParams.has('_sgm_campaign') && urlParams.has('color') && urlParams.has('size')) {\n const { parameters } = this.props;\n await this.setState({ parameters });\n } else {\n return Promise.reject();\n }\n }\n\n const { addProductToCart, cartId } = this.props;\n const products = this.getMagentoProduct();\n const { color_attr_id } = configurableProductsAttrs;\n\n products.map((product) => {\n if (type_id === 'simple' && style_number) {\n // eslint-disable-next-line no-param-reassign\n product.sku = style_number;\n }\n\n // eslint-disable-next-line no-param-reassign\n product.selected_options = this.normalizeSelectedOptions(product.selected_options, color_attr_id);\n\n return product;\n });\n\n await addProductToCart({ products, cartId })\n .catch(\n /** @namespace Scandipwa/Component/ProductActions/Container/ProductActionsContainer/addToCartWithReturn/addProductToCart/catch */\n (error) => {\n if (error) {\n showError(error);\n }\n\n return Promise.reject();\n }\n );\n\n return Promise.resolve();\n }\n\n render() {\n return (\n \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ProductActionsContainer);\n","/* eslint-disable @scandipwa/scandipwa-guidelines/no-jsx-variables */\n/* eslint-disable @scandipwa/scandipwa-guidelines/jsx-no-conditional */\n/* eslint-disable react/prop-types */\n/* eslint-disable max-lines */\n/* eslint-disable react/no-unknown-property */\n/* eslint-disable react/forbid-prop-types */\n/* eslint-disable react/boolean-prop-naming */\n/* eslint-disable @scandipwa/scandipwa-guidelines/only-render-in-component */\n/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\n\n/* eslint-disable no-restricted-syntax */\n/* eslint-disable react/no-array-index-key */\n// Disabled due placeholder needs\n\nimport PropTypes from 'prop-types';\n\nimport AddToCart from 'Component/AddToCart';\nimport ExpandableContent from 'Component/ExpandableContent';\nimport Field from 'Component/Field';\nimport FIELD_TYPE from 'Component/Field/Field.config';\nimport PRODUCT_TYPE from 'Component/Product/Product.config';\nimport ProductColorAttribute from 'Component/ProductColorAttribute';\nimport ProductConfigurableAttributes from 'Component/ProductConfigurableAttributes';\nimport ProductCustomizableOptions from 'Component/ProductCustomizableOptions';\nimport ProductGallery from 'Component/ProductGallery';\nimport ProductLabel from 'Component/ProductLabel';\nimport ProductPrice from 'Component/ProductPrice';\nimport ProductWishlistButton from 'Component/ProductWishlistButton';\nimport SizeChartPopup from 'Component/SizeChartPopup';\nimport { WOMEN_LABELS } from 'Component/SizeChartPopup/SizeChartPopup.config';\nimport TabbyPdp from 'Component/TabbyPdp';\nimport TamaraPdp from 'Component/TamaraPdp';\nimport TextPlaceholder from 'Component/TextPlaceholder';\nimport { GRID_LAYOUT } from 'Route/CategoryPage/CategoryPage.config';\nimport {\n ProductActions as SourceProductActions\n} from 'SourceComponent/ProductActions/ProductActions.component';\nimport { DeviceType } from 'Type/Device.type';\nimport { ProductType } from 'Type/ProductList.type';\nimport { isCrawler, isSSR } from 'Util/Browser';\nimport BrowserDatabase from 'Util/BrowserDatabase';\nimport getStore from 'Util/Store';\nimport { convertQueryStringToKeyValuePairs } from 'Util/Url';\n\nimport { DEFAULT_MAX_PRODUCTS } from './ProductActions.config';\n\nimport './ProductActions.style';\nimport './ProductActions.style.override';\n\n/**\n * Product actions\n * @class ProductActions\n * @namespace Scandipwa/Component/ProductActions/Component */\nexport class ProductActionsComponent extends SourceProductActions {\n static propTypes = {\n ...super.propTypes,\n productOrVariant: ProductType.isRequired,\n configurableVariantIndex: PropTypes.number,\n showOnlyIfLoaded: PropTypes.func.isRequired,\n updateConfigurableVariant: PropTypes.func.isRequired,\n parameters: PropTypes.objectOf(PropTypes.string).isRequired,\n getIsSizeDisabled: PropTypes.func.isRequired,\n groupedProductQuantity: PropTypes.objectOf(PropTypes.number).isRequired,\n clearGroupedProductQuantity: PropTypes.func.isRequired,\n setGroupedProductQuantity: PropTypes.func.isRequired,\n getSelectedCustomizableOptions: PropTypes.func.isRequired,\n productOptionsData: PropTypes.object.isRequired,\n offerCount: PropTypes.number.isRequired,\n offerType: PropTypes.string.isRequired,\n stockMeta: PropTypes.string.isRequired,\n metaLink: PropTypes.string.isRequired,\n device: DeviceType.isRequired,\n productForGallery: PropTypes.object.isRequired,\n updateConfigurableVariantAndQty: PropTypes.func.isRequired,\n handleSizeChartClick: PropTypes.func.isRequired,\n variantsHighPrice: PropTypes.number,\n setIsFooterBootomSpaceNeeded: PropTypes.func.isRequired,\n promoExcludedNotice: PropTypes.string.isRequired\n };\n\n static defaultProps = {\n ...super.defaultProps,\n variantsHighPrice: null\n };\n\n state = {\n isVariantsOutOfStock: false,\n isSelectedVariantOutOfStock: false,\n attributeValidation: { isSizeValid: true, isColorValid: true }\n };\n\n componentDidUpdate(prevProps) {\n const { product: prevProduct } = prevProps;\n const { product } = this.props;\n const { gender } = this.state;\n\n if (product !== prevProduct || !gender) {\n const productAttributes = BrowserDatabase.getItem('productAttributes');\n\n if (!productAttributes\n || Object.keys(product).length === 0\n || Object.keys(product.attributes).length === 0) {\n return;\n }\n\n const {\n product: {\n gender: productGender\n }\n } = this.props;\n\n const { customAttributeMetadata: { items } } = productAttributes;\n const result = { gender: null };\n\n items.forEach((item) => {\n const { attribute_code } = item;\n\n if (attribute_code === 'gender') {\n const { attribute_options } = item;\n\n attribute_options.forEach(({ value, label }) => {\n if (+value === +productGender) {\n result.gender = label;\n // eslint-disable-next-line no-useless-return\n return;\n }\n });\n\n // eslint-disable-next-line no-useless-return\n return;\n }\n });\n\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({ gender: result.gender });\n }\n }\n\n renderStock(stockStatus) {\n if (stockStatus === 'OUT_OF_STOCK') {\n return (\n
    \n \n \n \n { __('Out of stock') }\n
    \n );\n }\n\n return (\n \n
    \n \n { __('In stock') }\n \n \n );\n }\n\n renderSku() {\n const {\n getActiveProduct,\n showOnlyIfLoaded,\n getPreviewProduct\n } = this.props;\n\n // eslint-disable-next-line fp/no-let\n let { style_number } = getActiveProduct();\n\n if (!style_number) {\n const { style_number: previewStyleNumber } = getPreviewProduct();\n\n style_number = previewStyleNumber;\n }\n\n return (\n \n { showOnlyIfLoaded(\n style_number,\n (\n <>\n \n { __('Art:.') }\n \n \n { `${ style_number }` }\n \n \n ),\n \n ) }\n \n );\n }\n\n renderStockStatus() {\n const {\n getActiveProduct,\n getPreviewProduct,\n areDetailsLoaded,\n product\n } = this.props;\n\n if (!areDetailsLoaded) {\n return (\n \n \n \n );\n }\n\n const { variants } = product;\n\n const variantsInStock = variants.filter((variant) => (variant.stock_status === 'IN_STOCK'));\n const stockCount = variantsInStock.reduce((acc, variant) => {\n const styleNumber = variant.style_number;\n const qty = variant.salable_qty;\n\n if (acc[styleNumber] === undefined) {\n acc[styleNumber] = qty;\n } else {\n acc[styleNumber] += qty;\n }\n\n return acc;\n }, {});\n\n const variant = getPreviewProduct() || getActiveProduct();\n const productSalableQuantity = variants\n // eslint-disable-next-line no-magic-numbers\n ? stockCount[variant.style_number]\n : variant.salable_qty;\n\n const stockStatus = !variantsInStock.length ? 'OUT_OF_STOCK' : productSalableQuantity || variant.stock_status;\n\n if (!variantsInStock.length) {\n this.setState({\n isVariantsOutOfStock: true\n });\n } else {\n this.setState({\n isVariantsOutOfStock: false\n });\n }\n\n if (stockStatus === 'OUT_OF_STOCK') {\n this.setState({ isSelectedVariantOutOfStock: true });\n } else {\n this.setState({ isSelectedVariantOutOfStock: false });\n }\n\n return this.renderStock(stockStatus);\n }\n\n renderPromoExcludedNotice() {\n const {\n promoExcludedNotice,\n areDetailsLoaded,\n getPreviewProduct,\n getActiveProduct\n } = this.props;\n\n if (!areDetailsLoaded) {\n return null;\n }\n\n const { promo_excluded_flag } = getPreviewProduct() || getActiveProduct();\n\n if (!promo_excluded_flag || !promoExcludedNotice) {\n return null;\n }\n\n return (\n \n { promoExcludedNotice }\n
    \n );\n }\n\n renderModelInformation() {\n const {\n areDetailsLoaded,\n getPreviewProduct,\n getActiveProduct\n } = this.props;\n\n const { gender } = this.state;\n\n if (!areDetailsLoaded) {\n return null;\n }\n\n const { model_height, model_sample_size } = getPreviewProduct() || getActiveProduct();\n\n if (!model_height || !model_sample_size || !gender) {\n return null;\n }\n\n return (\n \n
    \n { WOMEN_LABELS.includes(gender)\n ? __('FEMALE: Our model is %s cm tall and wears size %s', model_height, model_sample_size)\n : __('MALE: Our model is %s cm tall and wears size %s', model_height, model_sample_size) }\n
    \n );\n }\n\n renderColorAttribute() {\n const {\n getLink,\n updateConfigurableVariantAndQty,\n parameters,\n areDetailsLoaded,\n product,\n product: {\n configurable_options,\n configurable_options: {\n color\n } = {},\n type_id,\n variants\n },\n getIsConfigurableAttributeAvailable\n } = this.props;\n const { attributeValidation } = this.state;\n\n if (type_id !== PRODUCT_TYPE.configurable && configurable_options) {\n return null;\n }\n\n const params = Object.keys(parameters).length !== 0\n ? parameters : convertQueryStringToKeyValuePairs(window.location.search);\n\n return (\n \n \n \n );\n }\n\n renderSizeAttribute() {\n const {\n getLink,\n parameters,\n areDetailsLoaded,\n product,\n product: { configurable_options, type_id, variants },\n getIsSizeDisabled,\n getIsConfigurableAttributeAvailable,\n updateConfigurableVariantAndQty\n } = this.props;\n\n const { attributeValidation } = this.state;\n\n if (type_id !== PRODUCT_TYPE.configurable) {\n return null;\n }\n\n return (\n \n \n \n );\n }\n\n renderPrice() {\n const {\n getActiveProduct,\n product: { price_range = null } = {},\n productPrice,\n getPreviewProduct\n } = this.props;\n\n const product = getActiveProduct();\n const { type_id: activeType, price_tiers: priceTiers = [], price_range: activeProductPrice } = product;\n\n if (activeType === PRODUCT_TYPE.configurable) {\n const previewProduct = getPreviewProduct();\n\n if (previewProduct !== false) {\n const { price_range: priceRange } = previewProduct;\n const previewProductPrice = priceRange;\n\n return (\n \n \n \n );\n }\n }\n\n if (!price_range) {\n return ;\n }\n\n if (!productPrice) {\n return null;\n }\n\n return (\n \n \n \n );\n }\n\n getPriceForWidgets() {\n const {\n getActiveProduct,\n getPreviewProduct\n } = this.props;\n\n const product = getActiveProduct();\n const { type_id: activeType, price_range: activeProductPrice } = product;\n\n if (activeType === PRODUCT_TYPE.configurable) {\n const previewProduct = getPreviewProduct();\n\n if (previewProduct !== false) {\n const { price_range: priceRange } = previewProduct;\n return priceRange;\n }\n }\n\n return activeProductPrice;\n }\n\n renderPdpWidgets() {\n const { pdp_widgets_order } = getStore().getState().ConfigReducer;\n const parsedOrder = pdp_widgets_order ? Object.values(JSON.parse(pdp_widgets_order)) : null;\n const availableOrder = {};\n\n if (parsedOrder) {\n parsedOrder.forEach((item) => {\n availableOrder[item.payment_method] = item.position;\n });\n }\n\n return (\n \n { this.renderTamaraWidget(availableOrder.Tamara ? availableOrder.Tamara : 0) }\n { this.renderTabbyWidget(availableOrder.Tabby ? availableOrder.Tabby : 0) }\n \n );\n }\n\n renderTamaraWidget(order) {\n const { tamaraWidgetPdp } = this.props;\n\n return (\n \n );\n }\n\n renderTabbyWidget(order) {\n const { tabbyWidgetPdp } = this.props;\n\n return (\n \n );\n }\n\n renderCustomizableOptions() {\n const {\n product: { options },\n getSelectedCustomizableOptions,\n productOptionsData,\n device,\n areDetailsLoaded,\n updateSelectedValues\n } = this.props;\n\n if (!areDetailsLoaded || (options && options.length === 0)) {\n return null;\n }\n\n if (device.isMobile) {\n return null;\n }\n\n return (\n \n \n \n );\n }\n\n renderQuantityChanger() {\n const {\n quantity,\n getPreviewProduct,\n getActiveProduct,\n setQuantity,\n product: { type_id },\n areDetailsLoaded\n } = this.props;\n\n if (type_id === PRODUCT_TYPE.grouped || !areDetailsLoaded) {\n return null;\n }\n\n const {\n maxQuantity,\n minQuantity,\n salable_qty\n } = getPreviewProduct() || getActiveProduct();\n\n const selectOptions = [];\n\n const maxSaleQuantity = salable_qty < DEFAULT_MAX_PRODUCTS\n ? salable_qty\n : DEFAULT_MAX_PRODUCTS - 1;\n\n // eslint-disable-next-line fp/no-loops,no-magic-numbers,fp/no-let\n for (let i = 1; i <= maxSaleQuantity; i++) {\n selectOptions.push({\n id: i,\n value: i,\n label: i.toString()\n });\n }\n\n return (\n \n );\n }\n\n getGalleryProduct() {\n const {\n productForGallery,\n product: { type_id },\n getGalleryProduct\n } = this.props;\n\n if (type_id === PRODUCT_TYPE.configurable) {\n const previewProduct = getGalleryProduct();\n\n if (previewProduct !== false) {\n return previewProduct;\n }\n }\n\n return productForGallery;\n }\n\n renderProductWishlistButton() {\n const {\n magentoProduct,\n isWishlistEnabled,\n product,\n parameters,\n areDetailsLoaded\n } = this.props;\n\n if (magentoProduct.length === 0 || !isWishlistEnabled) {\n return null;\n }\n\n return (\n \n );\n }\n\n renderAddToCartButton(layout = GRID_LAYOUT) {\n const {\n quantity,\n areDetailsLoaded,\n setIsFooterBootomSpaceNeeded,\n getActiveProduct,\n getPreviewProduct,\n addToCartWithReturn,\n updateSelectedValues\n } = this.props;\n const { isVariantsOutOfStock, isSelectedVariantOutOfStock } = this.state;\n\n const { salable_qty } = getPreviewProduct() || getActiveProduct();\n\n if (isVariantsOutOfStock) {\n setIsFooterBootomSpaceNeeded(false);\n return null;\n }\n\n setIsFooterBootomSpaceNeeded(true);\n\n return (\n <>\n \n { this.renderProductWishlistButton() }\n \n );\n }\n\n renderOfferCount() {\n const { offerCount } = this.props;\n\n if (offerCount >= 1) {\n return (\n \n );\n }\n\n return null;\n }\n\n renderSizeChartPlaceholder() {\n const { handleSizeChartClick, areDetailsLoaded } = this.props;\n const { isVariantsOutOfStock } = this.state;\n\n return (\n \n { !areDetailsLoaded\n ? \n : (\n <>\n \n { __('SIZE GUIDE') }\n \n
    \n \n ) }\n
    \n );\n }\n\n renderMobileInfoBlock() {\n const { device } = this.props;\n\n if (!device.isMobile) {\n return null;\n }\n\n return (\n \n { this.renderName() }\n \n { this.renderPriceWithGlobalSchema() }\n { this.renderSku() }\n \n \n );\n }\n\n renderSizeChartPopup() {\n const { product, parameters, areDetailsLoaded } = this.props;\n\n return (\n \n );\n }\n\n renderAddToCartActionBlock() {\n return (\n \n { this.renderAddToCartButton() }\n \n );\n }\n\n renderAddToCartMobile() {\n return (\n \n { this.renderAddToCartButton() }\n \n );\n }\n\n renderExpandableProductInfo() {\n const {\n areDetailsLoaded,\n product: {\n attributes = {},\n description: { html = '' } = {}\n },\n getActiveProduct,\n getPreviewProduct\n } = this.props;\n\n if (!areDetailsLoaded) {\n return (\n \n );\n }\n\n const productStoryPart = html.match(/

    (.*?)<\\/p>/);\n\n if (!productStoryPart) {\n return null;\n }\n\n // eslint-disable-next-line fp/no-let\n let { style_number, color } = getActiveProduct();\n\n if (!style_number || !color) {\n const {\n style_number: previewStyleNumber,\n color: previewColor\n } = getPreviewProduct();\n\n style_number = previewStyleNumber;\n color = previewColor;\n }\n\n const colorLabel = attributes?.color?.attribute_options?.[color]?.label;\n\n return (\n \n \n

    { productStoryPart[1] }

    \n
      \n
    • \n { __('Style: ') }\n { style_number }\n
    • \n { colorLabel &&
    • { __('Color: ') + colorLabel }
    • }\n
    \n \n { __('Read more') }\n \n \n \n );\n }\n\n renderQuantityAndSize() {\n const { areDetailsLoaded } = this.props;\n\n const placeHolder = (\n \n );\n\n return (\n \n { areDetailsLoaded ? this.renderSizeAttribute() : placeHolder }\n \n { areDetailsLoaded ? this.renderStockStatus() : null }\n { areDetailsLoaded ? this.renderQuantityChanger() : placeHolder }\n \n \n );\n }\n\n renderDesktop() {\n const {\n areDetailsLoaded,\n product\n } = this.props;\n\n return (\n <>\n \n \n \n { this.renderBrand(true) }\n { this.renderName() }\n \n { this.renderPriceWithGlobalSchema() }\n { this.renderSku() }\n \n { this.renderPdpWidgets() }\n { this.renderColorAttribute() }\n { this.renderPromoExcludedNotice() }\n { this.renderModelInformation() }\n { this.renderQuantityAndSize() }\n { this.renderTierPrices() }\n { this.renderAddToCartActionBlock() }\n { this.renderSizeChartPlaceholder() }\n { this.renderSizeChartPopup() }\n { this.renderExpandableProductInfo() }\n { this.renderCustomAndBundleOptions() }\n { this.renderGroupedOptions() }\n { this.renderDownloadableSamples() }\n { this.renderDownloadableLinks() }\n { this.renderProductAlerts() }\n \n );\n }\n\n renderMobile() {\n const { product } = this.props;\n\n return (\n <>\n \n \n \n \n { this.renderPriceWithGlobalSchema() }\n { this.renderSku() }\n \n { this.renderPdpWidgets() }\n { this.renderColorAttribute() }\n { this.renderPromoExcludedNotice() }\n { this.renderModelInformation() }\n { this.renderQuantityAndSize() }\n { this.renderTierPrices() }\n { this.renderSizeChartPlaceholder() }\n { this.renderSizeChartPopup() }\n { this.renderExpandableProductInfo() }\n { this.renderBrand(true) }\n { this.renderProductAlerts() }\n { this.renderCustomAndBundleOptions() }\n { this.renderGroupedOptions() }\n { this.renderDownloadableSamples() }\n { this.renderDownloadableLinks() }\n { this.renderAddToCartMobile() }\n \n );\n }\n\n render() {\n const { areDetailsLoaded, device: { isMobile } = {}, setValidator } = this.props;\n\n return (\n <>\n { this.renderMobileInfoBlock() }\n \n
    setValidator(elem) }>\n { isMobile ? this.renderMobile() : this.renderDesktop() }\n
    \n \n );\n }\n}\n\nexport default ProductActionsComponent;\n","/* eslint-disable @scandipwa/scandipwa-guidelines/jsx-no-props-destruction */\n/**\n * @author Vladislavs Zimnikovs \n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package puma-mx\n */\n\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\n\nimport ProductColorAttributeComponent from 'Component/ProductColorAttribute/ProductColorAttribute.component';\nimport ProductConfigurableAttributesContainer\nfrom 'Component/ProductConfigurableAttributes/ProductConfigurableAttributes.container';\n\n/** @namespace Scandipwa/Component/ProductColorAttribute/Container/mapStateToProps */\nexport const mapStateToProps = (state) => ({\n use_thumbnail_as_swatch: state.ConfigReducer.use_thumbnail_as_swatch\n});\n\n/** @namespace Scandipwa/Component/ProductColorAttribute/Container/mapDispatchToProps */\n// eslint-disable-next-line no-unused-vars\nexport const mapDispatchToProps = (dispatch) => ({});\n\n/** @namespace Scandipwa/Component/ProductColorAttribute/Container */\nexport class ProductColorAttributeContainer extends ProductConfigurableAttributesContainer {\n static propTypes = {\n ...super.propTypes,\n use_thumbnail_as_swatch: PropTypes.bool\n };\n\n static defaultProps = {\n ...super.defaultProps,\n use_thumbnail_as_swatch: false\n };\n\n render() {\n return (\n \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ProductColorAttributeContainer);\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport { default } from './ProductGallery.container';\n","/* eslint-disable @scandipwa/scandipwa-guidelines/jsx-no-props-destruction */\n/* eslint-disable max-lines */\n/* eslint-disable react/boolean-prop-naming */\n/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\nimport { connect } from 'react-redux';\nimport { Subscribe } from 'unstated';\n\nimport { AMOUNT_OF_PLACEHOLDERS, IMAGE_TYPE, THUMBNAIL_KEY } from 'Component/ProductGallery/ProductGallery.config';\nimport SharedTransitionContainer from 'Component/SharedTransition/SharedTransition.unstated';\nimport { DeviceType } from 'Type/Device.type';\nimport { ProductType } from 'Type/ProductList.type';\nimport { formatImageUrl } from 'Util/ImageCDN';\n\nimport ProductGalleryComponent from './ProductGallery.component';\n\n/** @namespace Scandipwa/Component/ProductGallery/Container/mapStateToProps */\n// eslint-disable-next-line no-unused-vars\nexport const mapStateToProps = (state) => ({\n device: state.ConfigReducer.device,\n cloudinaryStatus: state.ConfigReducer.isCloudinaryCDNActive\n});\n\n/** @namespace Scandipwa/Component/ProductGallery/Container/mapDispatchToProps */\nexport const mapDispatchToProps = () => ({});\n\n/** @namespace Scandipwa/Component/ProductGallery/Container */\nexport class ProductGalleryContainer extends PureComponent {\n static propTypes = {\n product: ProductType.isRequired,\n areDetailsLoaded: PropTypes.bool,\n cloudinaryStatus: PropTypes.bool.isRequired,\n device: DeviceType.isRequired\n };\n\n static defaultProps = {\n areDetailsLoaded: false\n };\n\n containerFunctions = {\n onActiveImageChange: this.onActiveImageChange.bind(this),\n handleImageClick: this.handleImageClick.bind(this),\n handleOverlayClose: this.handleOverlayClose.bind(this),\n setSliderOverlayWidth: this.setSliderOverlayWidth.bind(this),\n setIsZoomedInState: this.setIsZoomedInState.bind(this)\n };\n\n static getDerivedStateFromProps(props, state) {\n const { product: { id } } = props;\n const { prevProdId } = state;\n if (prevProdId === id) {\n return null;\n }\n\n return { prevProdId: id, activeImage: 0 };\n }\n\n componentDidUpdate(prevProps, prevState) {\n const { activeImage, isSliderOverlay } = this.state;\n const { activeImage: prevActiveImage } = prevState;\n\n if (activeImage !== prevActiveImage && isSliderOverlay) {\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({\n isNextSlide: true\n });\n }\n\n if (!isSliderOverlay) {\n window.removeEventListener('mouseup', this.handleMouseUp);\n window.removeEventListener('mousedown', this.handleMouseDown);\n }\n }\n\n componentWillUnmount() {\n window.removeEventListener('mousedown', this.handleMouseDown);\n window.removeEventListener('mouseup', this.handleMouseUp);\n window.removeEventListener('touchstart', this.handleTouchStart);\n window.removeEventListener('touchend', this.handleTouchEnd);\n }\n\n __construct(props) {\n super.__construct(props);\n\n const { product: { id } } = props;\n\n this.state = {\n activeImage: 0,\n isZoomEnabled: false,\n prevProdId: id,\n isSliderOverlay: false,\n sliderOverlayWidth: 0,\n zoomPositionX: 0,\n zoomPositionY: 0,\n isPictureBeingMoved: false,\n isZoomDisabled: false,\n isNextSlide: false,\n isDefaultScale: false\n };\n }\n\n onActiveImageChange(activeImage) {\n this.setState({\n activeImage,\n isZoomEnabled: false\n });\n }\n\n setIsZoomedInState(isZoomTriggered = false, isSliderOverlay, zoomIn, resetTransform, e) {\n const { isPictureBeingMoved, isDefaultScale } = this.state;\n const { device } = this.props;\n const isDefaultScaleSet = device.isMobile ? isDefaultScale : false;\n\n if (isPictureBeingMoved && isZoomTriggered) {\n zoomIn(e);\n } else if (!isPictureBeingMoved && !isZoomTriggered) {\n resetTransform(e);\n } else if (!isDefaultScaleSet && !isPictureBeingMoved && isZoomTriggered) {\n zoomIn(e);\n }\n\n window.addEventListener('touchstart', this.handleTouchStart);\n window.addEventListener('mousedown', this.handleMouseDown);\n }\n\n handleTouchStart = ({ clientX, clientY }) => {\n window.addEventListener('touchend', this.handleTouchEnd);\n\n this.setState({\n zoomPositionX: clientX,\n zoomPositionY: clientY,\n isPictureBeingMoved: false,\n isNextSlide: false,\n isDefaultScale: false\n });\n };\n\n handleTouchEnd = ({ clientX, clientY }) => {\n const { zoomPositionX, zoomPositionY } = this.state;\n\n // eslint-disable-next-line no-magic-numbers\n if ((Math.abs(zoomPositionX - clientX) > 10 || Math.abs(zoomPositionY - clientY) > 10)) {\n this.setState({\n isPictureBeingMoved: true\n });\n }\n\n window.removeEventListener('touchend', this.handleTouchEnd);\n };\n\n handleMouseUp = ({ clientX, clientY }) => {\n const { zoomPositionX, zoomPositionY } = this.state;\n\n // eslint-disable-next-line no-magic-numbers\n if ((Math.abs(zoomPositionX - clientX) > 10 || Math.abs(zoomPositionY - clientY) > 10)) {\n this.setState({\n isPictureBeingMoved: true\n });\n }\n\n window.removeEventListener('mouseup', this.handleMouseUp);\n };\n\n handleMouseDown = ({ clientX, clientY }) => {\n window.addEventListener('mouseup', this.handleMouseUp);\n\n this.setState({\n zoomPositionX: clientX,\n zoomPositionY: clientY,\n isPictureBeingMoved: false,\n isNextSlide: false\n });\n };\n\n setSliderOverlayWidth(sliderWidth) {\n this.setState({\n sliderOverlayWidth: sliderWidth\n });\n }\n\n handleImageClick() {\n const { isSliderOverlay } = this.state;\n\n if (!isSliderOverlay) {\n this.setState({\n isSliderOverlay: true,\n isDefaultScale: true\n });\n }\n\n document.documentElement.classList.add('overlayFullScreen');\n }\n\n handleOverlayClose() {\n this.setState({\n isSliderOverlay: false,\n sliderOverlayWidth: 0\n });\n\n document.body.style.position = 'relative';\n document.body.style.overflow = 'initial';\n document.documentElement.classList.remove('overlayFullScreen');\n }\n\n getGalleryPictures() {\n const {\n areDetailsLoaded,\n device,\n cloudinaryStatus,\n product: {\n media_gallery_entries: mediaGallery = [],\n thumbnail: { url } = {},\n name\n }\n } = this.props;\n const { isSliderOverlay } = this.state;\n const smallImageSize = device.isMobile ? '480' : '706';\n const imageSize = isSliderOverlay ? '1536' : smallImageSize;\n\n if (mediaGallery.length) {\n return Object.values(mediaGallery.reduce((acc, srcMedia) => {\n const {\n types,\n position,\n disabled,\n base\n } = srcMedia;\n\n const canBeShown = !disabled;\n if (!canBeShown) {\n return acc;\n }\n\n const isThumbnail = types.includes(THUMBNAIL_KEY);\n const key = isThumbnail ? 0 : position + 1;\n\n return base && {\n ...acc,\n [key]: {\n ...srcMedia,\n base: {\n url: formatImageUrl(\n cloudinaryStatus,\n srcMedia.base.url,\n imageSize\n )\n }\n }\n };\n }, {}));\n }\n\n if (!url) {\n return Array(AMOUNT_OF_PLACEHOLDERS).fill({ media_type: 'placeholder' });\n }\n\n const placeholders = !areDetailsLoaded\n ? Array(AMOUNT_OF_PLACEHOLDERS).fill({ media_type: 'placeholder' }) : [];\n\n return [\n {\n thumbnail: { url },\n base: { url: formatImageUrl(cloudinaryStatus, url, '480') },\n id: THUMBNAIL_KEY,\n label: name,\n media_type: IMAGE_TYPE\n },\n ...placeholders\n ];\n }\n\n containerProps = () => {\n const {\n activeImage, isZoomEnabled, isSliderOverlay, sliderOverlayWidth, isNextSlide\n } = this.state;\n const { product: { id }, cloudinaryStatus } = this.props;\n\n return {\n gallery: this.getGalleryPictures(),\n productName: this._getProductName(),\n activeImage,\n isZoomEnabled,\n productId: id,\n isSliderOverlay,\n sliderOverlayWidth,\n cloudinaryStatus,\n isNextSlide\n };\n };\n\n /**\n * Returns the name of the product this gallery if for\n * @private\n */\n _getProductName() {\n const { product: { name } } = this.props;\n return name;\n }\n\n render() {\n return (\n \n { ({ registerSharedElementDestination }) => (\n \n ) }\n \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ProductGalleryContainer);\n","/* eslint-disable @scandipwa/scandipwa-guidelines/only-render-in-component */\n/* eslint-disable react/no-unknown-property */\n/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\n\nimport PropTypes from 'prop-types';\nimport React from 'react';\n\nimport Draggable from 'Component/Draggable';\nimport Slider from 'Component/Slider/Slider.component';\nimport { DeviceType } from 'Type/Device.type';\nimport CSS from 'Util/CSS';\n\nimport { ANIMATION_DURATION, STOP_SLIDE_COUNT } from './AdditionalPictures.config';\n\nimport './AdditionalPictures.style';\n\n/**\n * AdditionalPictures component\n * @class AdditionalPictures\n * @namespace Scandipwa/Component/AdditionalPictures/Component */\nexport class AdditionalPicturesComponent extends Slider {\n static propTypes = {\n ...super.propTypes,\n isLoading: PropTypes.bool.isRequired,\n device: DeviceType\n };\n\n static defaultProps = {\n ...super.defaultProps,\n device: null\n };\n\n componentDidUpdate(prevProps) {\n const { activeImage: prevActiveImage } = prevProps;\n const { activeImage, children: childrenRaw } = this.props;\n const { children: [{ clientHeight: childrenHeight }] } = this.draggableRef.current;\n\n const children = childrenRaw.flat();\n const childrenCount = children.filter((child) => (child !== false)).length;\n\n if (activeImage !== prevActiveImage) {\n CSS.setVariable(\n this.draggableRef,\n 'animation-speed',\n `${ Math.abs((prevActiveImage - activeImage) * ANIMATION_DURATION) }ms`\n );\n\n CSS.setVariable(\n this.draggableRef,\n 'translateY',\n '0px'\n );\n\n if (children.length >= STOP_SLIDE_COUNT) {\n CSS.setVariable(\n this.draggableRef,\n 'translateY',\n `${-childrenHeight * activeImage}px`\n );\n }\n\n if (activeImage >= childrenCount - STOP_SLIDE_COUNT && childrenCount >= STOP_SLIDE_COUNT) {\n CSS.setVariable(\n this.draggableRef,\n 'translateY',\n `${-childrenHeight * (childrenCount - STOP_SLIDE_COUNT) }px`\n );\n }\n }\n }\n\n render() {\n const {\n mix,\n children: childrenRaw,\n activeImage,\n isLoading\n } = this.props;\n\n const children = childrenRaw.flat();\n const childrenCount = children.filter((child) => (child !== false)).length;\n const lastImage = activeImage > childrenCount - activeImage - STOP_SLIDE_COUNT;\n\n return (\n
    \n { this.renderButton('left', childrenCount) }\n \n \n { children }\n \n
    \n { this.renderButton('right', childrenCount, lastImage) }\n \n );\n }\n}\n\nexport default AdditionalPicturesComponent;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\n\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router';\n\nimport {\n ProductGalleryBaseImageContainer as SourceProductGalleryBaseImageContainer\n} from 'SourceComponent/ProductGalleryBaseImage/ProductGalleryBaseImage.container';\n\n/** @namespace Scandipwa/Component/ProductGalleryBaseImage/Container/mapStateToProps */\nexport const mapStateToProps = (state) => ({\n cloudinaryStatus: state.ConfigReducer.isCloudinaryCDNActive\n});\n\n/** @namespace Scandipwa/Component/ProductGalleryBaseImage/Container/mapDispatchToProps */\nexport const mapDispatchToProps = () => ({});\n\n/** @namespace Scandipwa/Component/ProductGalleryBaseImage/Container */\nexport class ProductGalleryBaseImageContainer extends SourceProductGalleryBaseImageContainer {\n static propTypes = {\n ...super.propTypes,\n cloudinaryStatus: PropTypes.bool.isRequired,\n disableZoom: PropTypes.func,\n scale: PropTypes.number,\n previousScale: PropTypes.number,\n isZoomEnabled: PropTypes.bool\n };\n\n static defaultProps = {\n ...super.defaultProps,\n disableZoom: () => null,\n scale: 1,\n previousScale: 1,\n isZoomEnabled: true\n };\n\n // This is necessary to make product main image to change when user clicks on swatch colors\n shouldComponentUpdate(nextProps) {\n const { mediaData: { id, thumbnail: { url: thumbnailUrl } }, isNotZoomedIn } = this.props;\n const {\n mediaData: { id: nextId, thumbnail: { url: nextThumbnailUrl } },\n isNotZoomedIn: nextIsNotZoomedIn\n } = nextProps;\n\n return id !== nextId || thumbnailUrl !== nextThumbnailUrl\n || isNotZoomedIn !== nextIsNotZoomedIn;\n }\n\n containerProps = () => {\n const {\n cloudinaryStatus,\n onLoad,\n isZoomEnabled,\n isNotZoomedIn,\n setIsZoomedInState,\n isSliderOverlay,\n zoomIn,\n resetTransform,\n isDesktop,\n onActiveImageChange,\n index\n } = this.props;\n\n return ({\n alt: this._getAlt(),\n src: this._getSrc(),\n cloudinaryStatus,\n onLoad,\n isZoomEnabled,\n isNotZoomedIn,\n setIsZoomedInState,\n isSliderOverlay,\n zoomIn,\n resetTransform,\n isDesktop,\n onActiveImageChange,\n index\n });\n };\n}\n\nexport default withRouter(\n connect(mapStateToProps, mapDispatchToProps)(ProductGalleryBaseImageContainer)\n);\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\n\nimport PropTypes from 'prop-types';\nimport { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router';\n\nimport ProductGalleryThumbnailImageComponent from './ProductGalleryThumbnailImage.component';\n\n/** @namespace Scandipwa/Component/ProductGalleryThumbnailImage/Container/mapStateToProps */\nexport const mapStateToProps = (state) => ({\n cloudinaryStatus: state.ConfigReducer.isCloudinaryCDNActive\n});\n\n/** @namespace Scandipwa/Component/ProductGalleryThumbnailImage/Container/mapDispatchToProps */\nexport const mapDispatchToProps = () => ({});\n\n/** @namespace Scandipwa/Component/ProductGalleryThumbnailImage/Container */\nexport class ProductGalleryThumbnailImageContainer extends Component {\n static propTypes = {\n media: PropTypes.shape({\n label: PropTypes.string,\n file: PropTypes.string,\n media_type: PropTypes.string,\n id: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number\n ]),\n thumbnail: PropTypes.shape({\n url: PropTypes.string\n })\n }).isRequired,\n index: PropTypes.number.isRequired,\n onActiveImageChange: PropTypes.func.isRequired,\n isActiveImage: PropTypes.bool,\n // eslint-disable-next-line react/boolean-prop-naming\n cloudinaryStatus: PropTypes.bool.isRequired,\n isLoading: PropTypes.bool.isRequired\n };\n\n static defaultProps = {\n isActiveImage: false\n };\n\n containerProps = () => {\n const {\n media,\n index,\n onActiveImageChange,\n cloudinaryStatus,\n isActiveImage,\n isLoading\n } = this.props;\n\n return ({\n media,\n index,\n onActiveImageChange,\n cloudinaryStatus,\n isActiveImage,\n isLoading\n });\n };\n\n render() {\n return (\n \n );\n }\n}\n\nexport default withRouter(\n connect(mapStateToProps, mapDispatchToProps)(ProductGalleryThumbnailImageContainer)\n);\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport { connect } from 'react-redux';\n\nimport Slider from './Slider.component';\n\n/** @namespace Component/Slider/Container/mapStateToProps */\nexport const mapStateToProps = (state) => ({\n device: state.ConfigReducer.device\n});\n\n/** @namespace Component/Slider/Container/mapDispatchToProps */\nexport const mapDispatchToProps = () => ({});\n\n// eslint-disable-next-line @scandipwa/scandipwa-guidelines/always-both-mappings\nexport default connect(mapStateToProps, mapDispatchToProps, null, { forwardRef: true })(Slider);\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport { connect } from 'react-redux';\n\nimport VideoPopup from './VideoPopup.component';\nimport { VIDEO_POPUP_ID } from './VideoPopup.config';\n\n/** @namespace Component/VideoPopup/Container/mapStateToProps */\nexport const mapStateToProps = (state) => ({\n payload: state.PopupReducer.popupPayload[VIDEO_POPUP_ID] || {}\n});\n\n/** @namespace Component/VideoPopup/Container/mapDispatchToProps */\nexport const mapDispatchToProps = () => ({});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(VideoPopup);\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\nimport { connect } from 'react-redux';\n\nimport { VIDEO_POPUP_ID } from 'Component/VideoPopup/VideoPopup.config';\nimport { hideActivePopup } from 'Store/Overlay/Overlay.action';\nimport { showPopup } from 'Store/Popup/Popup.action';\nimport { MediaItemType } from 'Type/ProductList.type';\n\nimport VideoThumbnail from './VideoThumbnail.component';\n\n/** @namespace Component/VideoThumbnail/Container/mapStateToProps\n */\nexport const mapStateToProps = () => ({});\n\n/** @namespace Component/VideoThumbnail/Container/mapDispatchToProps */\nexport const mapDispatchToProps = (dispatch) => ({\n showPopup: (payload) => dispatch(showPopup(VIDEO_POPUP_ID, payload)),\n hideActivePopup: () => dispatch(hideActivePopup())\n});\n\n/**\n * @class VideoThumbnailContainer\n * @namespace Component/VideoThumbnail/Container */\nexport class VideoThumbnailContainer extends PureComponent {\n static propTypes = {\n media: MediaItemType.isRequired,\n showPopup: PropTypes.func.isRequired,\n isVideoZoomed: PropTypes.bool.isRequired,\n hideActivePopup: PropTypes.func.isRequired,\n onZoomedVideoClick: PropTypes.func.isRequired\n };\n\n containerFunctions = {\n onPlayClick: this.onPlayClick.bind(this)\n };\n\n /**\n * Handles events that occur when the user clicks or taps on a video thumbnail.\n * Displays a popup with the corresponding video.\n * @param event\n * @private\n */\n onPlayClick(event) {\n const {\n media,\n media: {\n video_content: {\n video_title\n } = {}\n } = {},\n showPopup,\n isVideoZoomed,\n onZoomedVideoClick\n } = this.props;\n\n event.preventDefault();\n\n if (isVideoZoomed) {\n onZoomedVideoClick();\n }\n\n setTimeout(() => {\n showPopup({\n media,\n title: video_title\n });\n }, 0);\n }\n\n render() {\n const { media } = this.props;\n\n return (\n \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(VideoThumbnailContainer);\n","/* eslint-disable @scandipwa/scandipwa-guidelines/jsx-no-props-destruction */\n/* eslint-disable react/forbid-prop-types */\n/**\n * @author Vladislavs Zimnikovs \n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package puma-mx\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\nimport { connect } from 'react-redux';\n\nimport SizeChartPopupComponent from 'Component/SizeChartPopup/SizeChartPopup.component';\nimport { SIZE_CHART_POPUP_ID } from 'Component/SizeChartPopup/SizeChartPopup.config';\n\n/** @namespace Scandipwa/Component/SizeChartPopup/Container/mapStateToProps */\nexport const mapStateToProps = (state) => ({\n reviewPayload: state.PopupReducer.popupPayload[SIZE_CHART_POPUP_ID] || {},\n code: state.ConfigReducer.code\n});\n\n/** @namespace Scandipwa/Component/SizeChartPopup/Container/mapDispatchToProps */\nexport const mapDispatchToProps = () => ({});\n\n/** @namespace Scandipwa/Component/SizeChartPopup/Container */\nexport class SizeChartPopupContainer extends PureComponent {\n static propTypes = {\n reviewPayload: PropTypes.object.isRequired,\n code: PropTypes.string.isRequired\n };\n\n render() {\n return (\n \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(SizeChartPopupContainer);\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\n\nimport { PureComponent } from 'react';\n\nimport { ProductType } from 'Type/ProductList.type';\n\nimport ProductMeasurementsComponent from './ProductMeasurements.component';\nimport { CM_MEASUREMENT, INCHES_MEASUREMENT } from './ProductMeasurements.config';\n\n/**\n * Product measurements container\n * @class ProductMeasurementsContainer\n * @namespace Scandipwa/Component/ProductMeasurements/Container */\nexport class ProductMeasurementsContainer extends PureComponent {\n static propTypes = {\n product: ProductType.isRequired\n };\n\n /**\n * Container props\n *\n * @returns {{measurementsAttributes: (string|unknown)[]}}\n */\n containerProps = () => ({\n measurementsAttributes: this.getMeasurementsAttributes()\n });\n\n /**\n * Removes unnecessary string from table html\n *\n * @param html\n * @returns {*}\n */\n removeUnnecessaryStrings(html) {\n const stringsToReplace = {\n NULL: '',\n '^(-(?!([1-99](Y|M))))$': '' // Doesn't remove \"-\" symbol for cases like 12-13Y or 1-3M\n };\n\n const regExp = new RegExp(Object.keys(stringsToReplace).join('|'), 'gi');\n\n return html && html.replace(regExp, (matched) => stringsToReplace[matched]);\n }\n\n /**\n * Returns measurements attributes\n *\n * @returns {[string, unknown]}\n */\n getMeasurementsAttributes() {\n const {\n product: {\n size_spec_table_imp = '',\n size_spec_table = ''\n }\n } = this.props;\n\n const measurementTables = {\n [CM_MEASUREMENT]: size_spec_table,\n [INCHES_MEASUREMENT]: size_spec_table_imp\n };\n\n return Object.entries(measurementTables).reduce((acc, [key, table]) => {\n if (table) {\n acc.push({\n name: key,\n value: this.removeUnnecessaryStrings(table)\n });\n }\n\n return acc;\n }, []);\n }\n\n render() {\n return (\n \n );\n }\n}\n\nexport default ProductMeasurementsContainer;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\n\nexport const INCHES_MEASUREMENT = 'inches';\nexport const CM_MEASUREMENT = 'cm';\n","/**\n * @author Vladislavs Zimnikovs \n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package puma-mx\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport { ChildrenType, MixType } from 'Type/Common.type';\n\nimport TabComponent from './Tab.component';\n\n/** @namespace Scandipwa/Component/Tab/Container */\nexport class TabContainer extends PureComponent {\n static propTypes = {\n isActive: PropTypes.bool,\n mix: MixType,\n children: ChildrenType.isRequired\n };\n\n static defaultProps = {\n isActive: false,\n mix: {}\n };\n\n containerProps = () => ({\n isActive: this._getIsActive(),\n mix: this._getMix()\n });\n\n _getMix() {\n const { mix } = this.props;\n\n return mix;\n }\n\n _getIsActive() {\n const { isActive } = this.props;\n\n return isActive;\n }\n\n render() {\n const { children } = this.props;\n\n return (\n \n { children }\n \n );\n }\n}\n\nexport default TabContainer;\n","/**\n * @author Vladislavs Zimnikovs \n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package puma-mx\n */\n\nimport PropTypes from 'prop-types';\nimport { Children, PureComponent } from 'react';\n\nimport { ChildrenType } from 'Type/Common.type';\n\nimport TabsComponent from './Tabs.component';\n\n/** @namespace Scandipwa/Component/Tabs/Container */\nexport class TabsContainer extends PureComponent {\n static propTypes = {\n children: ChildrenType.isRequired,\n htmlName: PropTypes.string,\n // eslint-disable-next-line react/boolean-prop-naming\n renderInactiveTabButtons: PropTypes.bool\n };\n\n static defaultProps = {\n htmlName: '',\n renderInactiveTabButtons: false\n };\n\n state = {\n activeTab: this._initActiveTab()\n };\n\n containerFunctions = {\n onTabClick: this.onTabClick.bind(this)\n };\n\n _initActiveTab() {\n const { children } = this.props;\n\n children.forEach((child) => {\n if (child) {\n const { props: { id } } = child;\n\n return id;\n }\n\n return null;\n });\n }\n\n containerProps = () => {\n const { htmlName, renderInactiveTabButtons } = this.props;\n\n return {\n tabList: this._getTabIdArray(),\n activeTab: this._getActiveTab(),\n htmlName,\n renderInactiveTabButtons\n };\n };\n\n onTabClick(tabId) {\n this.setState({ activeTab: tabId });\n }\n\n _getTabIdArray() {\n const { children } = this.props;\n\n return Children.map(children, (child) => {\n if (!child) {\n return null;\n }\n\n const { props: { id, label } = {} } = child;\n\n return { id, label };\n }) || [];\n }\n\n _getActiveTab() {\n const { activeTab } = this.state;\n\n return activeTab;\n }\n\n render() {\n const { children } = this.props;\n\n return (\n \n { children }\n \n );\n }\n}\n\nexport default TabsContainer;\n","/* eslint-disable react/prop-types */\n/**\n * Copyright © Scandiweb, Inc. All rights reserved.\n *\n * @category Puma\n * @package Puma_Tabby\n * @author Beshoy Samuel \n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport TabbyQuery from 'Query/Tabby.query';\nimport { PriceType } from 'Type/Price.type';\nimport {\n calculateFinalPrice,\n roundPrice\n} from 'Util/Price';\nimport { fetchQuery } from 'Util/Request/Query';\n\nimport TabbyPdpComponent from './TabbyPdp.component';\n\n/** @namespace Scandipwa/Component/TabbyPdp/Container */\nexport class TabbyPdpContainer extends PureComponent {\n state = {\n selector: null,\n merchantCode: null,\n publicKey: null,\n source: null,\n currency: null,\n currencyRate: null,\n theme: null,\n productType: null,\n error: null,\n isLoading: true\n };\n\n static propTypes = {\n price: PriceType,\n order: PropTypes.number\n };\n\n static defaultProps = {\n price: {},\n order: 0\n };\n\n componentDidMount() {\n const {\n tabbyWidgetPdp: {\n script_url = '',\n selector = '',\n merchantCode = '',\n publicKey = '',\n source = '',\n currency = '',\n currencyRate = '',\n theme = '',\n productType = '',\n error = ''\n } = {}\n } = this.props;\n\n if (script_url === '') {\n fetchQuery(TabbyQuery.getWidgetPdp()).then(\n /** @namespace Scandipwa/Component/TabbyPdp/Container/TabbyPdpContainer/componentDidMount/then/catch/fetchQuery/then */\n ({ getTabbyWidgetPdp }) => {\n const {\n script_url,\n selector,\n merchantCode,\n publicKey,\n source,\n currency,\n currencyRate,\n theme,\n productType,\n error\n } = getTabbyWidgetPdp;\n\n if (script_url === '') {\n this.setState({ isLoading: false, error: true });\n } else {\n const script = document.createElement('script');\n script.type = 'text/javascript';\n script.text = `(function(a,b,c,d){\n a='${script_url}';\n b=document;c='script';d=b.createElement(c);d.src=a;\n d.type='text/java'+c;d.async=true;\n d.id='tabbypdpwidget';\n a=b.getElementsByTagName(c)[0];a.parentNode.insertBefore(d,a)\n })()`;\n\n document.head.insertBefore(script, document.head.childNodes[0]);\n\n this.setState({\n selector,\n merchantCode,\n publicKey,\n source,\n currency,\n currencyRate,\n theme,\n productType,\n error,\n isLoading: false\n });\n }\n }\n ).catch(\n /** @namespace Scandipwa/Component/TabbyPdp/Container/TabbyPdpContainer/componentDidMount/then/catch */\n () => {\n this.setState({ isLoading: false, error: true });\n }\n );\n } else {\n const script = document.createElement('script');\n script.type = 'text/javascript';\n script.text = `(function(a,b,c,d){\n a='${script_url}';\n b=document;c='script';d=b.createElement(c);d.src=a;\n d.type='text/java'+c;d.async=true;\n d.id='tabbypdpwidget';\n a=b.getElementsByTagName(c)[0];a.parentNode.insertBefore(d,a)\n })()`;\n\n document.head.insertBefore(script, document.head.childNodes[0]);\n\n this.setState({\n selector,\n merchantCode,\n publicKey,\n source,\n currency,\n currencyRate,\n theme,\n productType,\n error,\n isLoading: false\n });\n }\n }\n\n containerProps = () => {\n const { price, order } = this.props;\n if (!price) {\n return {};\n }\n\n const {\n price: {\n minimum_price: {\n discount: {\n percent_off: discountPercentage\n } = {},\n final_price: {\n value: minimalPriceValue\n } = {},\n regular_price: {\n value: regularPriceValue\n } = {}\n } = {}\n } = {}\n } = this.props;\n\n if (!minimalPriceValue || !regularPriceValue) {\n return {};\n }\n\n const finalPrice = calculateFinalPrice(discountPercentage, minimalPriceValue, regularPriceValue);\n const formatedPrice = roundPrice(finalPrice);\n\n return {\n formatedPrice,\n order,\n ...this.state\n };\n };\n\n render() {\n return (\n \n );\n }\n}\n\nexport default TabbyPdpContainer;\n","/* eslint-disable react/prop-types */\n/**\n * Copyright © Scandiweb, Inc. All rights reserved.\n *\n * @category Puma\n * @package Puma_Tamara\n * @author Beshoy Samuel \n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport TamaraQuery from 'Query/Tamara.query';\nimport { PriceType } from 'Type/Price.type';\nimport {\n calculateFinalPrice,\n roundPrice\n} from 'Util/Price';\nimport { fetchQuery } from 'Util/Request/Query';\n\nimport TamaraPdpComponent from './TamaraPdp.component';\n\n/** @namespace Scandipwa/Component/TamaraPdp/Container */\nexport class TamaraPdpContainer extends PureComponent {\n state = {\n public_key: null,\n currency_code: null,\n country_code: null,\n payment_method: null,\n error: null,\n isLoading: true\n };\n\n static propTypes = {\n price: PriceType,\n order: PropTypes.number\n };\n\n static defaultProps = {\n price: {},\n order: 0\n };\n\n componentDidMount() {\n const {\n tamaraWidgetPdp: {\n script_url = '',\n public_key = '',\n currency_code = '',\n country_code = '',\n payment_method = {},\n error = ''\n } = {}\n } = this.props;\n\n if (window.TamaraWidgetV2) {\n this.setState({ isLoading: false, error: false });\n\n return;\n }\n\n if (script_url === '') {\n fetchQuery(TamaraQuery.getWidgetPdp()).then(\n /** @namespace Scandipwa/Component/TamaraPdp/Container/TamaraPdpContainer/componentDidMount/then/catch/fetchQuery/then */\n ({ getTamaraWidgetPdp }) => {\n const {\n script_url, public_key, currency_code, country_code, payment_method, error\n } = getTamaraWidgetPdp;\n\n const script = document.createElement('script');\n script.type = 'text/javascript';\n script.text = `(function(a,b,c,d){\n a='${script_url}';\n b=document;c='script';d=b.createElement(c);d.src=a;\n d.type='text/java'+c;d.async=true;\n d.id='tamarapdpwidget';\n a=b.getElementsByTagName(c)[0];a.parentNode.insertBefore(d,a)\n })()`;\n\n document.head.insertBefore(script, document.head.childNodes[0]);\n\n window.tamaraWidgetConfig = {\n lang: this.isArabicCacheWorkaround() ? 'ar' : 'en',\n country: country_code,\n publicKey: public_key,\n css: `\n .tamara-summary-widget__container {\n --font-primary: var(--font-FFDIN),DroidKufi_Regular,Arial;,sans-serif;\n --font-secondary: var(--font-FFDIN),DroidKufi_Regular,Arial;,sans-serif;\n }\n `\n };\n\n this.setState({\n public_key,\n currency_code,\n country_code,\n payment_method,\n error,\n isLoading: false\n });\n }\n ).catch(\n /** @namespace Scandipwa/Component/TamaraPdp/Container/TamaraPdpContainer/componentDidMount/then/catch */\n () => {\n this.setState({ isLoading: false, error: true });\n }\n );\n } else {\n const script = document.createElement('script');\n script.type = 'text/javascript';\n script.text = `(function(a,b,c,d){\n a='${script_url}';\n b=document;c='script';d=b.createElement(c);d.src=a;\n d.type='text/java'+c;d.async=true;\n d.id='tamarapdpwidget';\n a=b.getElementsByTagName(c)[0];a.parentNode.insertBefore(d,a)\n })()`;\n\n document.head.insertBefore(script, document.head.childNodes[0]);\n\n window.tamaraWidgetConfig = {\n lang: this.isArabicCacheWorkaround() ? 'ar' : 'en',\n country: country_code,\n publicKey: public_key,\n css: `\n .tamara-summary-widget__container {\n --font-primary: var(--font-FFDIN),DroidKufi_Regular,Arial;,sans-serif;\n --font-secondary: var(--font-FFDIN),DroidKufi_Regular,Arial;,sans-serif;\n }\n `\n };\n\n this.setState({\n public_key,\n currency_code,\n country_code,\n payment_method,\n error,\n isLoading: false\n });\n }\n }\n\n isArabicCacheWorkaround() {\n const doc = document.documentElement;\n\n if (doc) {\n return doc.getAttribute('dir') === 'rtl';\n }\n\n return false;\n }\n\n containerProps = () => {\n const { price, order } = this.props;\n if (!price) {\n return {};\n }\n\n const {\n price: {\n minimum_price: {\n discount: {\n percent_off: discountPercentage\n } = {},\n final_price: {\n value: minimalPriceValue\n } = {},\n regular_price: {\n value: regularPriceValue\n } = {}\n } = {}\n } = {}\n } = this.props;\n\n if (!minimalPriceValue || !regularPriceValue) {\n return {};\n }\n\n const finalPrice = calculateFinalPrice(discountPercentage, minimalPriceValue, regularPriceValue);\n const formatedPrice = roundPrice(finalPrice);\n\n const {\n public_key, currency_code, country_code, payment_method, error, isLoading\n } = this.state;\n\n return {\n public_key,\n formatedPrice,\n order,\n currency_code,\n country_code,\n payment_method,\n error,\n isLoading\n };\n };\n\n render() {\n return (\n \n );\n }\n}\n\nexport default TamaraPdpContainer;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\nimport { connect } from 'react-redux';\n\nimport ProductAlertsQuery from 'Query/ProductAlerts.query';\nimport { showNotification } from 'Store/Notification/Notification.action';\nimport { StockStatusType } from 'Type/StockStatus.type';\nimport { fetchMutation, getErrorMessage } from 'Util/Request';\n\nimport ProductAlerts from './ProductAlerts.component';\nimport { PRODUCT_ALERT_IN_STOCK, PRODUCT_ALERT_PRICE_DROP } from './ProductAlerts.config';\n\n/** @namespace Component/ProductAlerts/Container/mapStateToProps */\nexport const mapStateToProps = (state) => ({\n isPriceAlertEnabled: state.ConfigReducer.product_alert_allow_price,\n isInStockAlertEnabled: state.ConfigReducer.product_alert_allow_stock,\n isSignedIn: state.MyAccountReducer.isSignedIn\n});\n\n/** @namespace Component/ProductAlerts/Container/mapDispatchToProps */\nexport const mapDispatchToProps = (dispatch) => ({\n showNotification: (type, message) => dispatch(showNotification(type, message)),\n showErrorNotification: (message) => dispatch(showNotification('error', message))\n});\n\n/** @namespace Component/ProductAlerts/Container */\nexport class ProductAlertsContainer extends PureComponent {\n static propTypes = {\n isSignedIn: PropTypes.bool.isRequired,\n productId: PropTypes.number.isRequired,\n showErrorNotification: PropTypes.func.isRequired,\n showNotification: PropTypes.func.isRequired,\n isInStockAlertEnabled: PropTypes.bool,\n isPriceAlertEnabled: PropTypes.bool,\n stockStatus: StockStatusType\n };\n\n static defaultProps = {\n isInStockAlertEnabled: false,\n isPriceAlertEnabled: false,\n stockStatus: null\n };\n\n containerFunctions = {\n handlePriceDropSubscribeAlertPriceDrop: this.handlePriceDropSubscribe.bind(this, PRODUCT_ALERT_PRICE_DROP),\n handlePriceDropSubscribeAlertInStock: this.handlePriceDropSubscribe.bind(this, PRODUCT_ALERT_IN_STOCK)\n };\n\n containerProps() {\n const {\n isInStockAlertEnabled,\n isPriceAlertEnabled,\n stockStatus\n } = this.props;\n\n return {\n isInStockAlertEnabled,\n isPriceAlertEnabled,\n stockStatus\n };\n }\n\n async handlePriceDropSubscribe(type) {\n const {\n productId,\n showErrorNotification,\n showNotification,\n isSignedIn\n } = this.props;\n\n if (!isSignedIn) {\n showNotification('info', __('Please sign in to subscribe for notification'));\n\n return;\n }\n\n const query = ProductAlertsQuery.getProductAlertSubscribeMutation(productId, type);\n\n try {\n const productAlertSubscribe = await fetchMutation(query);\n\n if (productAlertSubscribe) {\n showNotification('success', __('You saved the alert subscription'));\n }\n } catch (error) {\n showErrorNotification(getErrorMessage(error));\n }\n }\n\n render() {\n return (\n \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ProductAlertsContainer);\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport { default } from './ProductInformation.component';\n","/* eslint-disable @scandipwa/scandipwa-guidelines/jsx-no-conditional */\n/* eslint-disable react/no-unknown-property */\n/**\n * @author Vladislavs Zimnikovs \n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package puma-mx\n */\n\nimport Html from 'Component/Html';\nimport TextPlaceholder from 'Component/TextPlaceholder';\nimport { ProductInformation as SourceComponent } from 'SourceComponent/ProductInformation/ProductInformation.component';\n\nimport './ProductInformation.style.override';\n\n/** @namespace Scandipwa/Component/ProductInformation/Component */\nexport class ProductInformationComponent extends SourceComponent {\n renderContent() {\n const { areDetailsLoaded, product: { description } } = this.props;\n const heading = description || areDetailsLoaded ? __('ABOUT PRODUCT') : ;\n\n return (\n \n

    \n { heading }\n

    \n { description || areDetailsLoaded\n ? this.renderDescription()\n : (\n \n ) }\n \n );\n }\n\n renderDescription() {\n const {\n product: {\n meta_description,\n description: {\n html = ''\n } = {}\n },\n areDetailsLoaded\n } = this.props;\n\n if (!html && areDetailsLoaded) {\n return null;\n }\n const matchedContent = html.match(/

    (.*?)<\\/p>/g);\n const cleanedUpContent = matchedContent ? html.match(/

    (.*?)<\\/p>/g)[0]?.replace(/<[^>]*>/g, '') : '';\n // eslint-disable-next-line max-len, no-magic-numbers\n const htmlContent = matchedContent && html.match(/

    (.*?)<\\/p>/g).length === 1 && html.match(/

    /g).length === 3\n ? `${html.replace('

    ', '

    ') }
    ` : html;\n\n const productsDescriptionString = meta_description || cleanedUpContent || '';\n\n return (\n
    \n \n \n { this.renderAdditionalDescription('care_instructions') }\n { this.renderAdditionalDescription('material_composition') }\n
    \n );\n }\n\n renderAdditionalDescription(attributeCode) {\n const { product: { attributes } } = this.props;\n\n const { attribute_value, attribute_label } = attributes[attributeCode] || {};\n\n if (!attribute_label || !attribute_value) {\n return null;\n }\n\n return (\n ${ attribute_label.toUpperCase() }

    ${ attribute_value }` } />\n );\n }\n}\n\nexport default ProductInformationComponent;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport './ReviewStar.style';\n\n/** @namespace Component/ReviewStar/Component */\nexport class ReviewStar extends PureComponent {\n static propTypes = {\n value: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n title: PropTypes.string.isRequired,\n isChecked: PropTypes.bool.isRequired,\n option_id: PropTypes.string.isRequired,\n rating_id: PropTypes.string.isRequired,\n onStarRatingClick: PropTypes.func.isRequired\n };\n\n onStarRatingClick = this.onStarRatingClick.bind(this);\n\n onStarRatingClick() {\n const {\n rating_id,\n option_id,\n onStarRatingClick\n } = this.props;\n\n onStarRatingClick(rating_id, option_id);\n }\n\n render() {\n const {\n name,\n value,\n title,\n isChecked,\n rating_id,\n option_id\n } = this.props;\n\n return (\n \n );\n }\n}\n\nexport default ReviewStar;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport ContentWrapper from 'Component/ContentWrapper';\nimport ProductTab from 'Component/ProductTab';\nimport { isCrawler, isSSR } from 'Util/Browser';\nimport { isMobile } from 'Util/Mobile';\n\nimport './ProductTabs.style';\n\n/** @namespace Component/ProductTabs/Component */\nexport class ProductTabs extends PureComponent {\n static propTypes = {\n tabs: PropTypes.arrayOf(PropTypes.shape({\n name: PropTypes.string.isRequired,\n render: PropTypes.func.isRequired\n })).isRequired\n };\n\n onTabClick = this.onTabClick.bind(this);\n\n __construct(props) {\n super.__construct(props);\n const { tabs } = this.props;\n\n if (tabs.length > 0) {\n const { tabs: [{ id }] } = this.props;\n\n this.state = {\n activeTab: id\n };\n } else {\n this.state = {\n activeTab: ''\n };\n }\n }\n\n componentDidUpdate(prevProps) {\n const { tabs: prevTabs } = prevProps;\n const { tabs } = this.props;\n\n if (prevTabs.length !== tabs.length) {\n const [{ id }] = tabs;\n\n this.setActiveTab(id);\n }\n }\n\n onTabClick(tab) {\n const { tabs } = this.props;\n const { activeTab } = this.state;\n\n const { id: currentTab } = tabs.find(({ name }) => name === tab);\n\n if (activeTab !== currentTab) {\n this.setActiveTab(currentTab);\n }\n }\n\n setActiveTab(activeTab) {\n this.setState({ activeTab });\n }\n\n renderActiveTab() {\n const { tabs } = this.props;\n const { activeTab } = this.state;\n const { render } = tabs.find(({ id }) => id === activeTab) || {};\n\n if (!render) {\n return null;\n }\n\n return render();\n }\n\n renderAllTabs() {\n const { tabs } = this.props;\n\n return tabs.map(({ render, name }) => render(name));\n }\n\n renderTab(item) {\n const { activeTab } = this.state;\n const { id, name } = item;\n\n return (\n \n );\n }\n\n renderTabs() {\n const { tabs } = this.props;\n\n if (tabs.length === 0) {\n return null;\n }\n\n if (isMobile.any() || isSSR() || isCrawler()) {\n return this.renderAllTabs();\n }\n\n return (\n <>\n
      \n { tabs.map(this.renderTab.bind(this)) }\n
    \n { this.renderActiveTab() }\n \n );\n }\n\n render() {\n return (\n \n { this.renderTabs() }\n \n );\n }\n}\n\nexport default ProductTabs;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport { noopFn } from 'Util/Common';\n\nimport './ProductTab.style';\n\n/** @namespace Component/ProductTab/Component */\nexport class ProductTab extends PureComponent {\n static propTypes = {\n tabName: PropTypes.string.isRequired,\n onClick: PropTypes.func,\n isActive: PropTypes.bool\n };\n\n static defaultProps = {\n onClick: noopFn,\n isActive: false\n };\n\n onClick = this.onClick.bind(this);\n\n onClick() {\n const { onClick, tabName } = this.props;\n\n onClick(tabName);\n }\n\n render() {\n const { tabName, isActive } = this.props;\n\n return (\n \n \n { tabName.toUpperCase() }\n \n \n );\n }\n}\n\nexport default ProductTab;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router';\n\nimport { PDP } from 'Component/Header/Header.config';\nimport { MENU_TAB } from 'Component/NavigationTabs/NavigationTabs.config';\nimport { LOADING_TIME } from 'Route/CategoryPage/CategoryPage.config';\nimport { changeNavigationState, goToPreviousNavigationState } from 'Store/Navigation/Navigation.action';\nimport { BOTTOM_NAVIGATION_TYPE, TOP_NAVIGATION_TYPE } from 'Store/Navigation/Navigation.reducer';\nimport { setBigOfflineNotice } from 'Store/Offline/Offline.action';\nimport ProductReducer from 'Store/Product/Product.reducer';\nimport { addRecentlyViewedProduct } from 'Store/RecentlyViewedProducts/RecentlyViewedProducts.action';\nimport { ProductType } from 'Type/ProductList.type';\nimport { HistoryType, LocationType, MatchType } from 'Type/Router.type';\nimport { scrollToTop } from 'Util/Browser';\nimport { withReducers } from 'Util/DynamicReducer';\nimport { getAttributesWithValues, getIsConfigurableParameterSelected } from 'Util/Product';\nimport { debounce } from 'Util/Request';\nimport {\n convertQueryStringToKeyValuePairs,\n objectToUri,\n removeQueryParamWithoutHistory,\n updateQueryParamWithoutHistory\n} from 'Util/Url';\n\nimport ProductPage from './ProductPage.component';\n\nexport const BreadcrumbsDispatcher = import(\n /* webpackMode: \"lazy\", webpackChunkName: \"dispatchers\" */\n 'Store/Breadcrumbs/Breadcrumbs.dispatcher'\n);\n\nexport const MetaDispatcher = import(\n /* webpackMode: \"lazy\", webpackChunkName: \"dispatchers\" */\n 'Store/Meta/Meta.dispatcher'\n);\n\nexport const ProductDispatcher = import(\n /* webpackMode: \"lazy\", webpackChunkName: \"dispatchers\" */\n 'Store/Product/Product.dispatcher'\n);\n\n/** @namespace Route/ProductPage/Container/mapStateToProps */\nexport const mapStateToProps = (state) => ({\n isOffline: state.OfflineReducer.isOffline,\n product: state.ProductReducer.product,\n metaTitle: state.MetaReducer.title,\n isMobile: state.ConfigReducer.device.isMobile,\n store: state.ConfigReducer.code,\n areReviewsEnabled: state.ConfigReducer.reviews_are_enabled\n});\n\n/** @namespace Route/ProductPage/Container/mapDispatchToProps */\nexport const mapDispatchToProps = (dispatch) => ({\n changeHeaderState: (state) => dispatch(changeNavigationState(TOP_NAVIGATION_TYPE, state)),\n changeNavigationState: (state) => dispatch(changeNavigationState(BOTTOM_NAVIGATION_TYPE, state)),\n requestProduct: (options) => {\n // TODO: check linked products, there might be issues :'(\n ProductDispatcher.then(\n ({ default: dispatcher }) => dispatcher.handleData(dispatch, options)\n );\n },\n setBigOfflineNotice: (isBig) => dispatch(setBigOfflineNotice(isBig)),\n updateBreadcrumbs: (breadcrumbs, prevCategoryId) => BreadcrumbsDispatcher.then(\n ({ default: dispatcher }) => dispatcher.updateWithProduct(breadcrumbs, prevCategoryId, dispatch)\n ),\n updateMetaFromProduct: (product) => MetaDispatcher.then(\n ({ default: dispatcher }) => dispatcher.updateWithProduct(product, dispatch)\n ),\n goToPreviousNavigationState: (state) => dispatch(goToPreviousNavigationState(TOP_NAVIGATION_TYPE, state)),\n addRecentlyViewedProduct: (product, store) => dispatch(addRecentlyViewedProduct(product, store))\n});\n\n/** @namespace Route/ProductPage/Container */\nexport class ProductPageContainer extends PureComponent {\n static propTypes = {\n location: LocationType,\n changeHeaderState: PropTypes.func.isRequired,\n setBigOfflineNotice: PropTypes.func.isRequired,\n changeNavigationState: PropTypes.func.isRequired,\n updateMetaFromProduct: PropTypes.func.isRequired,\n updateBreadcrumbs: PropTypes.func.isRequired,\n requestProduct: PropTypes.func.isRequired,\n isOffline: PropTypes.bool.isRequired,\n productSKU: PropTypes.string,\n productID: PropTypes.number,\n product: ProductType.isRequired,\n history: HistoryType.isRequired,\n match: MatchType.isRequired,\n goToPreviousNavigationState: PropTypes.func.isRequired,\n metaTitle: PropTypes.string,\n addRecentlyViewedProduct: PropTypes.func.isRequired,\n store: PropTypes.string.isRequired,\n isMobile: PropTypes.bool.isRequired,\n areReviewsEnabled: PropTypes.bool.isRequired\n };\n\n static defaultProps = {\n location: { state: {} },\n productSKU: '',\n productID: 0,\n metaTitle: undefined\n };\n\n state = {\n parameters: {},\n currentProductSKU: '',\n activeProduct: null\n };\n\n containerFunctions = {\n getLink: this.getLink.bind(this),\n setActiveProduct: this.setActiveProduct.bind(this),\n isProductInformationTabEmpty: this.isProductInformationTabEmpty.bind(this),\n isProductAttributesTabEmpty: this.isProductAttributesTabEmpty.bind(this)\n };\n\n setOfflineNoticeSize = this.setOfflineNoticeSize.bind(this);\n\n static getDerivedStateFromProps(props, state) {\n const {\n product: {\n sku,\n variants,\n configurable_options,\n options,\n productOptionsData\n },\n location: { search }\n } = props;\n\n const {\n currentProductSKU: prevSKU,\n productOptionsData: prevOptionData\n } = state;\n\n const currentProductSKU = prevSKU === sku ? '' : prevSKU;\n\n /**\n * If the product we expect to load is loaded -\n * reset expected SKU\n */\n if (!configurable_options && !variants) {\n return {\n currentProductSKU\n };\n }\n\n const parameters = Object.entries(convertQueryStringToKeyValuePairs(search))\n .reduce((acc, [key, value]) => {\n if (key in configurable_options) {\n return { ...acc, [key]: value };\n }\n\n return acc;\n }, {});\n\n if (Object.keys(parameters).length !== Object.keys(configurable_options).length) {\n return {\n parameters,\n currentProductSKU\n };\n }\n\n const newOptionsData = options.reduce((acc, { option_id, required }) => {\n if (required) {\n acc.push(option_id);\n }\n\n return acc;\n }, []);\n\n const prevRequiredOptions = productOptionsData?.requiredOptions || [];\n const requiredOptions = [...prevRequiredOptions, ...newOptionsData];\n\n return {\n parameters,\n currentProductSKU,\n productOptionsData: {\n ...prevOptionData, ...productOptionsData, requiredOptions\n }\n };\n }\n\n componentDidMount() {\n /**\n * Always request product information. In this case we will have updated data.\n * Service worker will return previous information and updated new information\n * through broadcast.\n */\n this.requestProduct();\n\n /**\n * Always make sure the navigation switches into the MENU tab\n * */\n this.updateNavigationState();\n\n /**\n * Ensure transition PDP => homepage => PDP always having proper meta\n */\n this.updateMeta();\n\n /**\n * Make sure to update header state, the data-source will\n * define the correct information to use for update\n * (it can be a product, history state product or an empty object).\n */\n this.updateHeaderState();\n this.updateBreadcrumbs();\n\n /**\n * Scroll page top in order to display it from the start\n */\n scrollToTop();\n }\n\n componentDidUpdate(prevProps) {\n const {\n isOffline,\n productSKU,\n product\n } = this.props;\n\n const {\n productSKU: prevProductSKU,\n product: prevProduct\n } = prevProps;\n\n const { sku: stateSKU } = history?.state?.state?.product || {};\n\n if (isOffline) {\n debounce(this.setOfflineNoticeSize, LOADING_TIME)();\n }\n\n /**\n * We should also update product based data if, the URL\n * rewrite SKU has changed to matching the product history SKU\n * one. At this point there could be sufficient data for\n * some updates (i.e. header state).\n */\n if (\n productSKU !== prevProductSKU\n && stateSKU === productSKU\n ) {\n this.updateHeaderState();\n }\n\n /**\n * If product object was changed => it is loaded => we need to\n * update product specific information, i.e. breadcrumbs.\n */\n if (JSON.stringify(product) !== JSON.stringify(prevProduct)) {\n this.updateBreadcrumbs();\n this.updateHeaderState();\n this.updateMeta();\n }\n\n this._addToRecentlyViewedProducts();\n }\n\n setActiveProduct(product) {\n this.setState({ activeProduct: product });\n }\n\n isProductInformationTabEmpty() {\n const { description: { html = '' } = {} } = this.getDataSource();\n // handling cases when empty html tag is received\n const htmlElement = new DOMParser().parseFromString(html, 'text/html');\n\n return !htmlElement?.body?.innerHTML;\n }\n\n isProductAttributesTabEmpty() {\n const dataSource = this.getDataSource();\n\n return Object.keys(getAttributesWithValues(dataSource) || {}).length === 0;\n }\n\n _addToRecentlyViewedProducts() {\n const {\n product,\n product: { sku },\n addRecentlyViewedProduct,\n store\n } = this.props;\n\n // necessary for skipping not loaded products\n if (!sku) {\n return;\n }\n\n // push into localstorage only preview of product (image, name and etc)\n const {\n canonical_url,\n categories,\n configurable_options,\n description,\n items,\n meta_description,\n meta_keyword,\n meta_title,\n options,\n product_links,\n reviews,\n short_description,\n variants,\n ...productPreview\n } = product;\n\n addRecentlyViewedProduct(productPreview, store);\n }\n\n setOfflineNoticeSize() {\n const { setBigOfflineNotice, productSKU } = this.props;\n const { sku } = this.getDataSource();\n\n /**\n * If there is any information about the product, in example,\n * we know it's URL-rewrite SKU is matching the product SKU -\n * show the small offline notice, else - show larger one.\n */\n if (sku !== productSKU) {\n setBigOfflineNotice(true);\n } else {\n setBigOfflineNotice(false);\n }\n }\n\n getLink(key, value) {\n const { location: { search, pathname } } = this.props;\n const obj = {\n ...convertQueryStringToKeyValuePairs(search)\n };\n\n if (key) {\n obj[key] = value;\n }\n\n const query = objectToUri(obj);\n\n return `${pathname}${query}`;\n }\n\n containerProps() {\n const { isMobile, location, areReviewsEnabled } = this.props;\n const { parameters } = this.state;\n\n return {\n areDetailsLoaded: this.getAreDetailsLoaded(),\n isAttributesTabEmpty: this.isProductAttributesTabEmpty(),\n isInformationTabEmpty: this.isProductInformationTabEmpty(),\n activeProduct: this.getActiveProductDataSource(),\n dataSource: this.getDataSource(),\n useEmptyGallerySwitcher: this.getUseEmptyGallerySwitcher(),\n isVariant: this.getIsVariant(),\n isMobile,\n parameters,\n location,\n areReviewsEnabled\n };\n }\n\n getIsVariant() {\n const { activeProduct } = this.state;\n\n if (!activeProduct) {\n return false;\n }\n\n const { product: { id } = {} } = this.props;\n const { id: childId } = activeProduct;\n\n return id !== childId;\n }\n\n updateUrl(key, value, parameters) {\n const { location, history } = this.props;\n\n const isParameterSelected = getIsConfigurableParameterSelected(parameters, key, value);\n\n if (isParameterSelected) {\n updateQueryParamWithoutHistory(key, value, history, location);\n } else {\n removeQueryParamWithoutHistory(key, history, location);\n }\n }\n\n getAreDetailsLoaded() {\n const { product } = this.props;\n const dataSource = this.getDataSource();\n\n return dataSource === product;\n }\n\n getUseEmptyGallerySwitcher() {\n const { activeProduct } = this.state;\n const product = this.getDataSource();\n\n if (!activeProduct || !product) {\n return false;\n }\n\n const { media_gallery_entries: mediaGallery = [] } = product;\n const { media_gallery_entries: activeMediaGallery = [] } = activeProduct;\n\n return mediaGallery.length > 1 || activeMediaGallery.length > 1;\n }\n\n getActiveProductDataSource() {\n const { activeProduct } = this.state;\n const product = this.getDataSource();\n\n if (!activeProduct || !product) {\n return product;\n }\n\n const { attributes: productAttr = {}, media_gallery_entries: mediaGallery = [] } = product;\n const { attributes: activeAttr = {}, media_gallery_entries: activeMediaGallery = [] } = activeProduct;\n\n const attributes = {};\n\n Object.keys(productAttr).forEach((attr) => {\n const { [attr]: { attribute_value: attrValue }, [attr]: currAttr } = productAttr;\n const { [attr]: { attribute_value: activeAttrValue } = {} } = activeAttr;\n\n attributes[attr] = {\n ...currAttr,\n attribute_value: activeAttrValue || attrValue\n };\n });\n\n return {\n ...product,\n attributes,\n media_gallery_entries: activeMediaGallery.length === 0 ? mediaGallery : activeMediaGallery\n };\n }\n\n getDataSource() {\n const {\n productSKU,\n product\n } = this.props;\n\n const { sku } = product;\n const { product: stateProduct } = history?.state?.state || {};\n const { sku: stateSKU } = stateProduct || {};\n\n /**\n * If URL rewrite requested matches loaded product SKU\n * assume it is a data-source.\n */\n if (productSKU === sku) {\n return product;\n }\n\n /**\n * If URL rewrite requested matches product SKU from\n * history state - it is a data-source.\n */\n if (productSKU === stateSKU) {\n return stateProduct;\n }\n\n /**\n * Else there is no place to get a up-to-date\n * information about the product from.\n */\n return {};\n }\n\n getProductRequestFilter() {\n const { productID } = this.props;\n\n return { productID };\n }\n\n requestProduct() {\n const { requestProduct, productSKU } = this.props;\n const { currentProductSKU } = this.state;\n\n /**\n * If URL rewrite was not passed - do not request the product.\n */\n if (!productSKU) {\n return;\n }\n\n /**\n * Skip loading the same product SKU the second time\n */\n if (currentProductSKU === productSKU) {\n return;\n }\n\n this.setState({ currentProductSKU: productSKU });\n\n const options = {\n isSingleProduct: true,\n args: { filter: this.getProductRequestFilter() }\n };\n\n requestProduct(options);\n }\n\n updateNavigationState() {\n const { changeNavigationState } = this.props;\n\n changeNavigationState({ name: MENU_TAB });\n }\n\n updateMeta() {\n const { updateMetaFromProduct } = this.props;\n\n updateMetaFromProduct(this.getDataSource());\n }\n\n updateHeaderState() {\n const { name = '' } = this.getDataSource();\n const { changeHeaderState } = this.props;\n\n changeHeaderState({\n name: PDP,\n title: name,\n onBackClick: () => history.back()\n });\n }\n\n updateBreadcrumbs() {\n const { updateBreadcrumbs, location } = this.props;\n const { state: { prevCategoryId = null } = {} } = location;\n\n updateBreadcrumbs(this.getDataSource(), prevCategoryId);\n }\n\n render() {\n return (\n \n );\n }\n}\n\nexport default withReducers({\n ProductReducer\n})(withRouter(\n connect(mapStateToProps, mapDispatchToProps)(ProductPageContainer)\n));\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport const UPDATE_RECENTLY_VIEWED_PRODUCTS = 'UPDATE_RECENTLY_VIEWED_PRODUCTS';\nexport const ADD_RECENTLY_VIEWED_PRODUCT = 'ADD_RECENTLY_VIEWED_PRODUCT';\nexport const UPDATE_LOAD_STATUS = 'UPDATE_LOAD_STATUS';\n\n/**\n * Add RecentlyViewed product into list.\n * @param {Object} product Product returned from fetch\n * @param {String} store code\n * @return {void}\n * @namespace Store/RecentlyViewedProducts/Action/addRecentlyViewedProduct\n */\nexport const addRecentlyViewedProduct = (product, store) => ({\n type: ADD_RECENTLY_VIEWED_PRODUCT,\n product,\n store\n});\n\n/**\n * Update RecentlyViewed products list.\n * @param {Object} product Product returned from fetch\n * @return {void}\n * @namespace Store/RecentlyViewedProducts/Action/updateRecentlyViewedProducts\n */\nexport const updateRecentlyViewedProducts = (products, storeCode) => ({\n type: UPDATE_RECENTLY_VIEWED_PRODUCTS,\n products,\n storeCode\n});\n\n/**\n * Update loading status\n * @param {Boolean} status Loading indication boolean\n * @return {void}\n * @namespace Store/RecentlyViewedProducts/Action/updateLoadStatus\n */\nexport const updateLoadStatus = (status) => ({\n type: UPDATE_LOAD_STATUS,\n isLoading: status\n});\n","/* eslint-disable spaced-comment */\n/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\n\nimport PRODUCT_TYPE from 'Component/Product/Product.config';\nimport {\n mapDispatchToProps,\n mapStateToProps as sourceMapStateToProps,\n ProductContainer\n} from 'Component/Product/Product.container';\nimport { STOCK_TYPE } from 'Component/Product/Stock.config';\n\nimport ProductActions from './ProductActions.component';\n\n/** @namespace Component/ProductActions/Container/mapStateToProps */\nexport const mapStateToProps = (state) => ({\n ...sourceMapStateToProps(state),\n isPriceAlertEnabled: state.ConfigReducer.product_alert_allow_price,\n isInStockAlertEnabled: state.ConfigReducer.product_alert_allow_stock,\n displayProductStockStatus: state.ConfigReducer.display_product_stock_status,\n areReviewsEnabled: state.ConfigReducer.reviews_are_enabled\n});\n\n/** @namespace Component/ProductActions/Container */\nexport class ProductActionsContainer extends ProductContainer {\n static propTypes = {\n ...ProductContainer.propTypes,\n areDetailsLoaded: PropTypes.bool.isRequired,\n getLink: PropTypes.func.isRequired,\n areReviewsEnabled: PropTypes.bool.isRequired,\n displayProductStockStatus: PropTypes.bool.isRequired,\n isInStockAlertEnabled: PropTypes.bool.isRequired,\n setActiveProduct: PropTypes.func.isRequired\n };\n\n containerFunctions = {\n ...this.containerFunctions,\n showOnlyIfLoaded: this.showOnlyIfLoaded.bind(this)\n };\n\n containerProps() {\n const {\n areDetailsLoaded,\n areReviewsEnabled,\n displayProductStockStatus,\n getLink,\n isInStockAlertEnabled,\n isPriceAlertEnabled\n } = this.props;\n\n return {\n ...super.containerProps(),\n areDetailsLoaded,\n areReviewsEnabled,\n displayProductStockStatus,\n getLink,\n isInStockAlertEnabled,\n isPriceAlertEnabled,\n isPricePreview: this.isPricePreview(),\n offerCount: this.getOfferCount(),\n offerType: this.getOfferType(),\n stockMeta: this.getStockMeta(),\n metaLink: this.getMetaLink()\n };\n }\n\n componentDidUpdate(prevProps, prevState) {\n super.componentDidUpdate(prevProps, prevState);\n\n const { selectedProduct: prevSelectedProduct } = prevState;\n const { selectedProduct } = this.state;\n const { setActiveProduct } = this.props;\n\n // Updates ProductPages active product state, to\n // match selected product variant\n if (selectedProduct !== prevSelectedProduct) {\n setActiveProduct(selectedProduct);\n }\n }\n\n //#region META\n getMetaLink() {\n const { getLink } = this.props;\n\n return window.location.origin + getLink().replace(/\\?.*/, '');\n }\n\n getStockMeta() {\n const {\n product,\n product: { variants = [] },\n configurableVariantIndex\n } = this.props;\n\n const {\n stock_status\n } = variants[configurableVariantIndex] || product;\n\n if (stock_status === STOCK_TYPE.IN_STOCK) {\n return 'https://schema.org/InStock';\n }\n\n return 'https://schema.org/OutOfStock';\n }\n\n getOfferType() {\n const { product: { variants } } = this.props;\n\n if (variants && variants.length >= 1) {\n return 'https://schema.org/AggregateOffer';\n }\n\n return 'https://schema.org/Offer';\n }\n\n getOfferCount() {\n const { product: { variants } } = this.props;\n\n if (variants && variants.length) {\n return variants.length;\n }\n\n return 0;\n }\n //#endregion\n\n showOnlyIfLoaded(expression, content, placeholder = content) {\n const { areDetailsLoaded } = this.props;\n\n if (!areDetailsLoaded) {\n return placeholder;\n }\n\n if (areDetailsLoaded && !expression) {\n return null;\n }\n\n return content;\n }\n\n // Display preview price for bundle when nothing is selected\n isPricePreview() {\n const {\n product: {\n type_id: type,\n dynamic_price: dynamicPrice\n } = {}\n } = this.props;\n\n const { enteredOptions = [], selectedOptions = [] } = this.state;\n\n return (\n enteredOptions.length <= 0\n && selectedOptions.length <= 0\n && type === PRODUCT_TYPE.bundle\n && dynamicPrice\n );\n }\n\n render() {\n return (\n \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ProductActionsContainer);\n","/**\n * @author Vladislavs Zimnikovs \n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package puma-mx\n */\n\nexport { default } from './ProductColorAttribute.container';\n","/* eslint-disable react/no-unknown-property */\n/**\n * @author Vladislavs Zimnikovs \n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package puma-mx\n */\n\nimport PropTypes from 'prop-types';\n\nimport ExpandableContent from 'Component/ExpandableContent';\nimport ProductAttributeValue from 'Component/ProductAttributeValue';\nimport ProductConfigurableAttributes\nfrom 'Component/ProductConfigurableAttributes/ProductConfigurableAttributes.component';\nimport TextPlaceholder from 'Component/TextPlaceholder';\n\nimport './ProductColorAttribute.style';\n\n/** @namespace Scandipwa/Component/ProductColorAttribute/Component */\nexport class ProductColorAttributeComponent extends ProductConfigurableAttributes {\n static propTypes = {\n ...super.propTypes,\n use_thumbnail_as_swatch: PropTypes.bool.isRequired\n };\n\n renderConfigurableAttributeValue(attribute) {\n const {\n getIsConfigurableAttributeAvailable,\n handleOptionClick,\n getLink,\n isSelected,\n product,\n parameters\n } = this.props;\n\n const { attribute_value } = attribute;\n\n return (\n \n );\n }\n\n renderSwatch(option) {\n const {\n attributeValidation: { isColorValid },\n getSubHeading,\n use_thumbnail_as_swatch\n } = this.props;\n const { attribute_values } = option;\n\n return (\n <>\n \n { attribute_values.map((attribute_value) => (\n this.renderConfigurableAttributeValue({ ...option, attribute_value })\n )) }\n \n \n \n { __('Color:') }\n \n \n { getSubHeading(option) }\n \n \n \n );\n }\n\n renderPlaceholders() {\n const { numberOfPlaceholders, isContentExpanded } = this.props;\n\n return (\n <>\n { numberOfPlaceholders.map((length, i) => (\n \n \n { Array.from({ length }, (_, i) => (\n \n )) }\n \n \n )) }\n \n \n \n
    \n \n );\n }\n}\n\nexport default ProductColorAttributeComponent;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport { default } from './ProductConfigurableAttributes.container';\n","/* eslint-disable react/no-array-index-key */\n/* eslint-disable @scandipwa/scandipwa-guidelines/jsx-no-conditional */\n/* eslint-disable react/no-unknown-property */\n/* eslint-disable max-lines */\n/* eslint-disable @scandipwa/scandipwa-guidelines/only-render-in-component */\n/* eslint-disable max-len */\n/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\n\nimport PropTypes from 'prop-types';\nimport { createRef, PureComponent } from 'react';\nimport { withRouter } from 'react-router';\nimport { TransformWrapper } from 'react-zoom-pan-pinch';\n\nimport AdditionalPictures from 'Component/AdditionalPictures';\nimport { DESKTOP_MIN_WIDTH } from 'Component/CategorySort/CategorySort.config';\nimport Image from 'Component/Image';\nimport { HEADER_HEIGHT } from 'Component/MenuMobile/MenuMobile.config';\nimport {\n BREADCRUMBS_BOTTOM,\n IMAGE_TYPE,\n MAX_ZOOM_SCALE,\n NAV_BAR_HEIGHT,\n PLACEHOLDER_TYPE,\n VIDEO_TYPE\n} from 'Component/ProductGallery/ProductGallery.config';\nimport ProductGalleryBaseImage from 'Component/ProductGalleryBaseImage';\nimport ProductGalleryThumbnailImage from 'Component/ProductGalleryThumbnailImage';\nimport Slider from 'Component/Slider';\nimport VideoPopup from 'Component/VideoPopup';\nimport VideoThumbnail from 'Component/VideoThumbnail';\nimport { DeviceType } from 'Type/Device.type';\nimport { ProductType } from 'Type/ProductList.type';\nimport { LocationType } from 'Type/Router.type';\nimport { isArabic } from 'Util/Arabic';\nimport CSS from 'Util/CSS';\nimport isMobile from 'Util/Mobile/isMobile';\nimport { getBanner, handleIosStickyHeader } from 'Util/PromoBanner/PromoBanner';\n\nimport './ProductGallery.style';\n\n/**\n * Product gallery\n * @class ProductGallery\n * @namespace Scandipwa/Component/ProductGallery/Component */\nexport class ProductGalleryComponent extends PureComponent {\n static propTypes = {\n gallery: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.oneOfType([\n PropTypes.number,\n PropTypes.string\n ]),\n image: PropTypes.string,\n isPlaceholder: PropTypes.bool,\n alt: PropTypes.string,\n type: PropTypes.string\n })\n ).isRequired,\n productId: PropTypes.number,\n isZoomEnabled: PropTypes.bool.isRequired,\n onActiveImageChange: PropTypes.func.isRequired,\n activeImage: PropTypes.number.isRequired,\n registerSharedElementDestination: PropTypes.func.isRequired,\n location: LocationType.isRequired,\n handleImageClick: PropTypes.func.isRequired,\n handleOverlayClose: PropTypes.func.isRequired,\n setSliderOverlayWidth: PropTypes.func,\n isSliderOverlay: PropTypes.bool,\n sliderOverlayWidth: PropTypes.number,\n // eslint-disable-next-line react/boolean-prop-naming\n areDetailsLoaded: PropTypes.bool.isRequired,\n product: ProductType.isRequired,\n setIsZoomedInState: PropTypes.func.isRequired,\n device: DeviceType.isRequired\n };\n\n static defaultProps = {\n productId: 0,\n sliderOverlayWidth: 0,\n setSliderOverlayWidth: {},\n isSliderOverlay: false\n };\n\n maxScale = MAX_ZOOM_SCALE;\n\n imageRef = createRef();\n\n sliderRef = createRef();\n\n sliderOverlayRef = createRef();\n\n sliderWidth = 0;\n\n shouldRemoveAnimation = false;\n\n animationLoadTimeout = null;\n\n // Timeout to handle animation timeout\n animationTimeoutTimeout = null;\n\n // Image passed from PLP\n preloadedImage = null;\n\n sharedElementWasEverDetected = false;\n\n updateWindowDimensions = this.updateWindowDimensions.bind(this);\n\n state = {\n isDesktop: false\n };\n\n componentDidMount() {\n this.updateSharedDestinationElement();\n\n const banner = getBanner();\n const bannerHeight = banner && banner.offsetHeight\n && banner.offsetHeight > window.scrollY ? banner.offsetHeight - window.scrollY : 0;\n\n document.documentElement.style.setProperty(\n '--slider-overlay-height',\n `${ window.innerHeight - HEADER_HEIGHT - bannerHeight }px`\n );\n\n document.documentElement.style.setProperty(\n '--breadcrumbs-bottom',\n `${ BREADCRUMBS_BOTTOM }px`\n );\n\n if (bannerHeight) {\n document.documentElement.style.setProperty(\n '--breadcrumbs-bottom',\n `${ BREADCRUMBS_BOTTOM + bannerHeight }px`\n );\n }\n\n this.updateWindowDimensions();\n window.addEventListener('resize', this.updateWindowDimensions);\n\n this.handleScroll();\n window.addEventListener('scroll', this.handleScroll);\n }\n\n componentDidUpdate(prevProps) {\n const {\n productId,\n location: { pathname },\n isSliderOverlay,\n setSliderOverlayWidth,\n activeImage\n } = this.props;\n\n const {\n productId: prevProductId,\n location: {\n pathname: prevPathname\n }\n } = prevProps;\n\n this.handleScroll();\n\n if (isSliderOverlay) {\n const sliderWidth = this.sliderRef.current.draggableRef.current.offsetWidth;\n const newTranslate = -activeImage * sliderWidth;\n\n setSliderOverlayWidth(sliderWidth);\n\n CSS.setVariable(\n this.sliderRef.current.draggableRef,\n 'translateX',\n `${isArabic() ? Math.abs(newTranslate) : newTranslate}px`\n );\n } else if (document.documentElement.style.overflow === 'hidden') {\n document.documentElement.style.overflow = 'initial';\n }\n\n if (productId !== prevProductId) {\n this.updateSharedDestinationElement();\n }\n\n if (this.sliderRef && pathname !== prevPathname && this.sliderRef.current) {\n CSS.setVariable(\n this.sliderRef.current.draggableRef,\n 'animation-speed',\n 0\n );\n }\n }\n\n componentWillUnmount() {\n window.removeEventListener('scroll', this.handleScroll);\n window.removeEventListener('resize', this.updateWindowDimensions);\n }\n\n __construct(props, context) {\n super.__construct(props, context);\n this.renderSlide = this.renderSlide.bind(this);\n }\n\n updateWindowDimensions() {\n const { isDesktop } = this.state;\n const newIsDesktop = (window.innerWidth >= DESKTOP_MIN_WIDTH);\n\n if (isDesktop !== newIsDesktop) {\n this.setState({ isDesktop: newIsDesktop });\n }\n }\n\n isLoading() {\n const {\n areDetailsLoaded,\n product: {\n thumbnail\n }\n } = this.props;\n\n return !areDetailsLoaded || !thumbnail;\n }\n\n handleScroll = () => {\n const topBanner = document.querySelector('[id^=\\'global_promo_banner_\\']');\n const topBannerHeight = topBanner ? topBanner.offsetHeight : 0;\n const top = window.pageYOffset > topBannerHeight\n ? NAV_BAR_HEIGHT\n : topBannerHeight + NAV_BAR_HEIGHT - window.pageYOffset;\n\n CSS.setVariable(\n this.sliderOverlayRef,\n 'slider-overlay-top',\n `${top}px`\n );\n };\n\n updateSharedDestinationElement() {\n const { registerSharedElementDestination } = this.props;\n registerSharedElementDestination(this.imageRef);\n }\n\n renderAdditionalPicture = (media, index = 0) => {\n const { onActiveImageChange, activeImage } = this.props;\n const isLoading = this.isLoading();\n\n return (\n \n );\n };\n\n /**\n * Renders a video thumbnail which opens popup player on click/tap\n * @param media\n * @param index\n * @returns {*}\n * @private\n */\n renderVideo(media, index) {\n return (\n \n );\n }\n\n renderPlaceholder(index) {\n return (\n \n );\n }\n\n /**\n * Renders a product image to be displayed in the gallery\n * @param mediaData\n * @param index\n * @param isOverlay\n * @returns {*}\n * @private\n */\n renderImage(mediaData, index, isOverlay = false) {\n const {\n isSliderOverlay,\n setIsZoomedInState,\n device,\n onActiveImageChange\n } = this.props;\n const { isDesktop } = this.state;\n\n // eslint-disable-next-line no-magic-numbers\n const zoomScale = device.isMobile ? 3.2 : 2.2;\n\n return (\n \n { ({\n scale,\n resetTransform,\n setTransform,\n zoomIn\n }) => {\n const isNotZoomedIn = scale === 1;\n\n return (\n \n );\n } }\n \n );\n }\n\n /**\n * Checks for the type of the slide and renders it accordingly\n * @param media\n * @param index\n * @param isOverlay\n * @returns {null|*}\n */\n renderSlide(isOverlay, media, index) {\n const { media_type } = media;\n\n switch (media_type) {\n case IMAGE_TYPE:\n return this.renderImage(media, index, isOverlay);\n case VIDEO_TYPE:\n return this.renderVideo(media, index);\n case PLACEHOLDER_TYPE:\n return this.renderPlaceholder(index);\n default:\n return null;\n }\n }\n\n renderAdditionalPictures() {\n const { gallery, onActiveImageChange, activeImage } = this.props;\n\n const isLoading = this.isLoading();\n\n if (gallery.length === 1) {\n return
    ;\n }\n\n return (\n \n { gallery.map(this.renderAdditionalPicture) }\n \n );\n }\n\n renderSlider(showCrumbs = false, isOverlay = false) {\n const {\n gallery,\n isZoomEnabled,\n onActiveImageChange,\n sliderOverlayWidth,\n handleImageClick,\n activeImage,\n isSliderOverlay\n } = this.props;\n\n const { isDesktop } = this.state;\n\n return (\n
    \n \n { gallery.map(this.renderSlide.bind(this, isOverlay)) }\n \n { isMobile.any() ? this.renderStageGlide() : null }\n
    \n );\n }\n\n renderDesktopSlider() {\n const {\n gallery,\n isZoomEnabled,\n onActiveImageChange,\n sliderOverlayWidth,\n handleImageClick,\n activeImage,\n isSliderOverlay\n } = this.props;\n\n return (\n \n { gallery.map(this.renderSlide.bind(this, false)) }\n \n );\n }\n\n renderStageGlide() {\n const { gallery, activeImage } = this.props;\n\n if (this.isLoading()) {\n return null;\n }\n\n return (\n
    \n { gallery.map((media, i) => (\n \n )) }\n
    \n );\n }\n\n renderCloseButton() {\n const { handleOverlayClose } = this.props;\n\n return (\n \n \n \n \n
    \n );\n }\n\n renderSliderOverlay() {\n const { isSliderOverlay, device: { isMobile } = {} } = this.props;\n\n if (!isSliderOverlay) {\n return null;\n }\n\n document.body.style.position = 'fixed';\n document.body.style.width = '100%';\n document.body.style.height = '100%';\n document.body.style.overflow = 'hidden';\n\n if (isMobile) {\n document.documentElement.style.overflow = 'hidden';\n }\n\n document.addEventListener('touchmove', (e) => {\n if (window.scrollY === window.innerHeight - 1 || window.scrollY < 1) {\n e.preventDefault();\n }\n });\n\n handleIosStickyHeader();\n\n return (\n \n { this.renderCloseButton() }\n { this.renderSlider(true, true) }\n \n );\n }\n\n render() {\n const { isSliderOverlay } = this.props;\n const { isDesktop } = this.state;\n\n return (\n
    \n { isSliderOverlay && this.renderSliderOverlay() }\n { isDesktop && this.renderDesktopSlider() }\n { !isDesktop && this.renderSlider() }\n \n
    \n );\n }\n}\n\nexport default withRouter(ProductGalleryComponent);\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\n\nexport { default } from './AdditionalPictures.component';\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\nexport { default } from './ProductGalleryBaseImage.container';\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport PropTypes from 'prop-types';\nimport { Component } from 'react';\nimport { withRouter } from 'react-router';\n\nimport { LocationType } from 'Type/Router.type';\nimport media, { PRODUCT_MEDIA } from 'Util/Media/Media';\n\nimport ProductGallery from './ProductGalleryBaseImage.component';\nimport { INITIAL_SCALE, TRANSFORMATION_DELAY, TRANSFORMATION_SPEED } from './ProductGalleryBaseImage.config';\n\n/** @namespace Component/ProductGalleryBaseImage/Container */\nexport class ProductGalleryBaseImageContainer extends Component {\n static propTypes = {\n disableZoom: PropTypes.func.isRequired,\n scale: PropTypes.number.isRequired,\n previousScale: PropTypes.number.isRequired,\n index: PropTypes.number.isRequired,\n mediaData: PropTypes.shape({\n id: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number\n ]),\n label: PropTypes.string,\n file: PropTypes.string,\n base: PropTypes.shape({\n url: PropTypes.string\n })\n }).isRequired,\n isZoomEnabled: PropTypes.bool.isRequired,\n setTransform: PropTypes.func.isRequired,\n location: LocationType.isRequired\n };\n\n shouldComponentUpdate(nextProps) {\n const { scale, mediaData: { id } } = this.props;\n const { scale: nextScale, mediaData: { id: nextId } } = nextProps;\n\n if (scale !== nextScale || id !== nextId) {\n return true;\n }\n\n return false;\n }\n\n componentDidUpdate(prevProps) {\n const {\n scale,\n previousScale,\n disableZoom,\n location: { pathname },\n setTransform\n } = this.props;\n const { location: { pathname: prevPathname } } = prevProps;\n\n if (pathname !== prevPathname && scale !== INITIAL_SCALE) {\n setTimeout(\n () => setTransform(null, null, INITIAL_SCALE, TRANSFORMATION_SPEED),\n TRANSFORMATION_DELAY\n );\n }\n\n if (scale === 1 && previousScale !== 1) {\n disableZoom();\n }\n }\n\n containerProps() {\n return {\n alt: this._getAlt(),\n src: this._getSrc()\n };\n }\n\n _getAlt() {\n const { mediaData: { label } = {} } = this.props;\n\n return label || '';\n }\n\n _getSrc() {\n const {\n mediaData: { file, base: { url: baseUrl } = {} },\n isZoomEnabled\n } = this.props;\n\n if (!isZoomEnabled) {\n return baseUrl || media(file, PRODUCT_MEDIA);\n }\n\n return file ? media(file, PRODUCT_MEDIA) : baseUrl;\n }\n\n render() {\n return (\n \n );\n }\n}\n\nexport default withRouter(\n ProductGalleryBaseImageContainer\n);\n","/* eslint-disable react/jsx-no-bind */\n/* eslint-disable react/no-unknown-property */\n/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\n\nimport PropTypes from 'prop-types';\nimport { TransformComponent } from 'react-zoom-pan-pinch';\n\nimport Image from 'Component/Image';\nimport SourceProductGalleryBaseImage from 'SourceComponent/ProductGalleryBaseImage/ProductGalleryBaseImage.component';\n\n/** @namespace Scandipwa/Component/ProductGalleryBaseImage/Component */\nexport class ProductGalleryBaseImageComponent extends SourceProductGalleryBaseImage {\n static propTypes = {\n src: PropTypes.string.isRequired,\n alt: PropTypes.string.isRequired,\n onLoad: PropTypes.func\n };\n\n render() {\n const {\n src,\n alt,\n onLoad,\n isNotZoomedIn,\n setIsZoomedInState,\n isSliderOverlay,\n zoomIn,\n resetTransform,\n isOverlay,\n isDesktop,\n onActiveImageChange,\n index\n } = this.props;\n\n if (!isSliderOverlay || !isOverlay) {\n return (\n \n \n onActiveImageChange(index) : undefined }\n isPreventBlink\n />\n \n );\n }\n\n return (\n \n \n {\n setIsZoomedInState(isNotZoomedIn, isSliderOverlay, zoomIn, resetTransform, e);\n } }\n >\n \n \n \n );\n }\n}\n\nexport default ProductGalleryBaseImageComponent;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\nimport { TransformComponent } from 'react-zoom-pan-pinch';\n\nimport Image from 'Component/Image';\n\n/** @namespace Component/ProductGalleryBaseImage/Component */\nexport class ProductGalleryBaseImage extends PureComponent {\n static propTypes = {\n src: PropTypes.string.isRequired,\n alt: PropTypes.string.isRequired\n };\n\n render() {\n const { src, alt } = this.props;\n\n return (\n \n \n \n \n );\n }\n}\n\nexport default ProductGalleryBaseImage;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\nexport const TRANSFORMATION_DELAY = 0;\nexport const TRANSFORMATION_SPEED = 0;\nexport const INITIAL_SCALE = 1;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\n\nexport { default } from './ProductGalleryThumbnailImage.container';\n","/* eslint-disable react/no-unknown-property */\n/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\n\nimport PropTypes from 'prop-types';\n\nimport Image from 'Component/Image';\nimport {\n THUMBNAIL_KEY\n} from 'Component/ProductGallery/ProductGallery.config';\nimport {\n ProductGalleryThumbnailImage as SourceProductGalleryThumbnailImage\n} from 'SourceComponent/ProductGalleryThumbnailImage/ProductGalleryThumbnailImage.component';\nimport { formatImageSetUrl, formatImageUrl } from 'Util/ImageCDN';\n\nimport './ProductGalleryThumbnailImage.style';\n\n/** @namespace Scandipwa/Component/ProductGalleryThumbnailImage/Component */\nexport class ProductGalleryThumbnailImageComponent extends SourceProductGalleryThumbnailImage {\n static propTypes = {\n media: PropTypes.shape({\n label: PropTypes.string,\n file: PropTypes.string,\n media_type: PropTypes.string,\n id: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number\n ]),\n thumbnail: PropTypes.shape({\n url: PropTypes.string\n })\n }).isRequired,\n index: PropTypes.number.isRequired,\n onActiveImageChange: PropTypes.func.isRequired,\n isActiveImage: PropTypes.bool,\n isLoading: PropTypes.bool.isRequired\n };\n\n renderImage() {\n const {\n media: {\n label: alt,\n thumbnail: { url: thumbnailUrl } = {},\n id\n },\n cloudinaryStatus\n } = this.props;\n\n if (id === THUMBNAIL_KEY) {\n return this.renderPlaceholder();\n }\n\n const src = thumbnailUrl || '';\n\n return (\n \n );\n }\n\n onActiveImageChange = () => {\n const { index, onActiveImageChange } = this.props;\n onActiveImageChange(index);\n };\n\n render() {\n const { isActiveImage, isLoading } = this.props;\n\n return (\n \n { this.renderMedia() }\n \n );\n }\n}\n\nexport default ProductGalleryThumbnailImageComponent;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport Image from 'Component/Image';\nimport {\n IMAGE_TYPE, PLACEHOLDER_TYPE, THUMBNAIL_KEY, VIDEO_TYPE\n} from 'Component/ProductGallery/ProductGallery.config';\nimport media, { PRODUCT_MEDIA } from 'Util/Media';\n\nimport './ProductGalleryThumbnailImage.style';\n\n/** @namespace Component/ProductGalleryThumbnailImage/Component */\nexport class ProductGalleryThumbnailImage extends PureComponent {\n static propTypes = {\n media: PropTypes.shape({\n label: PropTypes.string,\n file: PropTypes.string,\n media_type: PropTypes.string,\n id: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number\n ]),\n thumbnail: PropTypes.shape({\n url: PropTypes.string\n })\n }).isRequired\n };\n\n renderMedia() {\n const { media: { media_type } } = this.props;\n\n switch (media_type) {\n case VIDEO_TYPE:\n return this.renderVideo();\n case IMAGE_TYPE:\n return this.renderImage();\n case PLACEHOLDER_TYPE:\n return this.renderPlaceholder();\n default:\n return null;\n }\n }\n\n renderPlaceholder() {\n return (\n \n );\n }\n\n renderVideo() {\n const {\n media: {\n thumbnail: { url },\n label\n }\n } = this.props;\n\n return (\n \n );\n }\n\n renderImage() {\n const {\n media: {\n label: alt,\n file,\n thumbnail: { url: thumbnailUrl } = {},\n id\n }\n } = this.props;\n\n if (id === THUMBNAIL_KEY) {\n return this.renderPlaceholder();\n }\n\n const src = thumbnailUrl || media(file, PRODUCT_MEDIA);\n\n return (\n \n );\n }\n\n render() {\n return (\n \n { this.renderMedia() }\n \n );\n }\n}\n\nexport default ProductGalleryThumbnailImage;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport { default } from './Slider.container';\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport { default } from './VideoPopup.container';\n","/* eslint-disable react/no-unused-state */\n\n/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport { PureComponent } from 'react';\n\nimport Popup from 'Component/Popup';\nimport { MediaItemType } from 'Type/ProductList.type';\nimport { makeCancelable } from 'Util/Promise';\n\nimport { VIDEO_POPUP_ID, VIMEO_FORMAT, YOUTUBE_FORMAT } from './VideoPopup.config';\n\nimport './VideoPopup.style';\n\n/**\n * A popup capable of displaying a video\n * @class VideoPopup\n * @namespace Component/VideoPopup/Component\n */\nexport class VideoPopup extends PureComponent {\n static propTypes = {\n payload: MediaItemType.isRequired\n };\n\n componentDidMount() {\n this.loadVimeoLibrary();\n this.loadYouTubeLibrary();\n\n Promise.all([\n this.vimeoPromise,\n this.youTubePromise\n ]).then(\n /** @namespace Component/VideoPopup/Component/VideoPopup/componentDidMount/all/then */\n () => this.forceUpdate()\n );\n }\n\n componentWillUnmount() {\n if (this.youTubePromise) {\n this.youTubePromise.cancel();\n }\n\n if (this.vimeoPromise) {\n this.vimeoPromise.cancel();\n }\n }\n\n /**\n * Renders a video provided by Vimeo\n * @param videoId\n * @returns {*}\n * @private\n */\n _renderVimeoVideo(videoId) {\n const Vimeo = this.vimeoComponent;\n\n if (!Vimeo) {\n return null;\n }\n\n return (\n \n );\n }\n\n /**\n * Renders a video provided by Youtube\n * @param videoId\n * @returns {*}\n * @private\n */\n _renderYoutubeVideo(videoId) {\n const YouTube = this.youTubeComponent;\n\n if (!YouTube) {\n return null;\n }\n\n return (\n \n );\n }\n\n loadVimeoLibrary() {\n this.vimeoPromise = makeCancelable(import('react-vimeo'));\n\n this.vimeoPromise.promise.then(\n /** @namespace Component/VideoPopup/Component/VideoPopup/loadVimeoLibrary/then */\n ({ default: vimeo }) => {\n this.vimeoComponent = vimeo;\n }\n );\n }\n\n loadYouTubeLibrary() {\n this.youTubePromise = makeCancelable(import('react-youtube'));\n\n this.youTubePromise.promise.then(\n /** @namespace Component/VideoPopup/Component/VideoPopup/loadYouTubeLibrary/then */\n ({ default: youTube }) => {\n this.youTubeComponent = youTube;\n }\n );\n }\n\n /**\n * Parses the video URL and renders the video accordingly\n * @returns {null|*}\n * @private\n */\n _renderVideoContent() {\n const {\n payload: {\n media: {\n video_content: { video_url } = {}\n } = {}\n }\n } = this.props;\n\n if (!video_url) {\n return null;\n }\n\n const [, vimeoId] = VIMEO_FORMAT.exec(video_url) || [];\n\n if (vimeoId) {\n return this._renderVimeoVideo(vimeoId);\n }\n\n const [, youtubeId] = YOUTUBE_FORMAT.exec(video_url);\n\n if (youtubeId) {\n return this._renderYoutubeVideo(youtubeId);\n }\n\n return null;\n }\n\n render() {\n return (\n \n
    \n
    \n { this._renderVideoContent() }\n
    \n
    \n
    \n );\n }\n}\n\nexport default VideoPopup;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport { default } from './VideoThumbnail.container';\n","/* eslint-disable react/no-unused-state */\n\n/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport Image from 'Component/Image/Image.container';\nimport { MediaItemType } from 'Type/ProductList.type';\n\nimport './VideoThumbnail.style';\n\n/**\n * VideoThumbnail component\n * @class VideoThumbnail\n * @namespace Component/VideoThumbnail/Component */\nexport class VideoThumbnail extends PureComponent {\n static propTypes = {\n media: MediaItemType.isRequired,\n onPlayClick: PropTypes.func.isRequired\n };\n\n /**\n * Renders an icon indicating that the video can be played\n */\n renderPlayIcon() {\n return (\n \n { __('Play video') }\n \n );\n }\n\n render() {\n const {\n media: {\n thumbnail: { url },\n video_content: { video_title }\n },\n onPlayClick\n } = this.props;\n\n return (\n
    \n \n \n { this.renderPlayIcon() }\n \n
    \n );\n }\n}\n\nexport default VideoThumbnail;\n","/**\n * @author Vladislavs Zimnikovs \n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package puma-mx\n */\n\nexport { default } from './SizeChartPopup.container';\n","/* eslint-disable react/no-unknown-property */\n/* eslint-disable max-lines */\n/* eslint-disable @scandipwa/scandipwa-guidelines/jsx-no-conditional */\n/* eslint-disable @scandipwa/scandipwa-guidelines/only-render-in-component */\n/* eslint-disable react/boolean-prop-naming */\n/* eslint-disable react/forbid-prop-types */\n/**\n * @author Vladislavs Zimnikovs \n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package puma-mx\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport CmsBlock from 'Component/CmsBlock';\nimport Popup from 'Component/Popup';\nimport ProductMeasurements from 'Component/ProductMeasurements';\nimport {\n ACCESSORIES_LABELS,\n APPAREL_LABELS,\n FOOTWEAR_LABELS,\n KIDS_CLOTHES_BLOCK_AR,\n KIDS_CLOTHES_BLOCK_UAE_EN,\n KIDS_FOOTWEAR_BLOCK_AR,\n KIDS_FOOTWEAR_BLOCK_UAE_EN,\n KIDS_LABELS,\n MEN_LABELS,\n MENS_CLOTHES_BLOCK_AR,\n MENS_CLOTHES_BLOCK_UAE_EN,\n MENS_FOOTWEAR_BLOCK_AR,\n MENS_FOOTWEAR_BLOCK_UAE_EN,\n SIZE_CHART_POPUP_ID,\n UNISEX_LABELS,\n WOMEN_LABELS,\n WOMENS_CLOTHES_BLOCK_AR,\n WOMENS_CLOTHES_BLOCK_UAE_EN,\n WOMENS_FOOTWEAR_BLOCK_AR,\n WOMENS_FOOTWEAR_BLOCK_UAE_EN\n} from 'Component/SizeChartPopup/SizeChartPopup.config';\nimport Tab from 'Component/Tab';\nimport Tabs from 'Component/Tabs';\nimport BrowserDatabase from 'Util/BrowserDatabase';\n\nimport './SizeChartPopup.style';\n\n/** @namespace Scandipwa/Component/SizeChartPopup/Component */\nexport class SizeChartPopupComponent extends PureComponent {\n static propTypes = {\n code: PropTypes.string.isRequired,\n product: PropTypes.object,\n parameters: PropTypes.objectOf(PropTypes.string),\n areDetailsLoaded: PropTypes.bool\n };\n\n static defaultProps = {\n product: {},\n parameters: {},\n areDetailsLoaded: false\n };\n\n state = {\n gender: null,\n division: null\n };\n\n componentDidUpdate(prevProps) {\n const { product: prevProduct } = prevProps;\n const { product } = this.props;\n const { gender, division } = this.state;\n\n if (product !== prevProduct || !gender || !division) {\n const productAttributes = BrowserDatabase.getItem('productAttributes');\n\n if (!productAttributes\n || Object.keys(product).length === 0\n || Object.keys(product.attributes).length === 0) {\n return;\n }\n\n const {\n product: {\n gender: productGender,\n attributes: {\n product_division: {\n attribute_options: productDivisionOptions\n }\n }\n }\n } = this.props;\n\n const { customAttributeMetadata: { items } } = productAttributes;\n const result = { gender: null, division: null };\n\n items.forEach((item) => {\n const { attribute_code } = item;\n\n if (attribute_code === 'gender') {\n const { attribute_options } = item;\n\n attribute_options.forEach(({ value, label }) => {\n if (+value === +productGender) {\n result.gender = label;\n // eslint-disable-next-line no-useless-return\n return;\n }\n });\n\n // eslint-disable-next-line no-useless-return\n return;\n }\n });\n\n result.division = Object.values(productDivisionOptions)[0].label;\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({ gender: result.gender, division: result.division });\n }\n }\n\n isKids() {\n const { gender } = this.state;\n\n return KIDS_LABELS.includes(gender);\n }\n\n isMen() {\n const { gender } = this.state;\n\n return MEN_LABELS.includes(gender);\n }\n\n isWomen() {\n const { gender } = this.state;\n\n return WOMEN_LABELS.includes(gender);\n }\n\n isUnisex() {\n const { gender } = this.state;\n\n return UNISEX_LABELS.includes(gender);\n }\n\n isApparel() {\n const { division } = this.state;\n\n return APPAREL_LABELS.includes(division);\n }\n\n isFootwear() {\n const { division } = this.state;\n\n return FOOTWEAR_LABELS.includes(division);\n }\n\n isAccessories() {\n const { division } = this.state;\n\n return ACCESSORIES_LABELS.includes(division);\n }\n\n renderProductMeasurements() {\n const { product, parameters, areDetailsLoaded } = this.props;\n\n if (!product || !parameters || !areDetailsLoaded) {\n return null;\n }\n\n return (\n \n );\n }\n\n renderContent() {\n if (!this.isFootwear() && !this.isApparel()) {\n return null;\n }\n\n return (\n \n { (this.isKids() || this.isUnisex()) ? this.renderKidsTab() : null }\n { (this.isMen() || this.isUnisex()) ? this.renderMenTab() : null }\n { (this.isWomen() || this.isUnisex()) ? this.renderWomenTab() : null }\n \n );\n }\n\n renderKidsTab() {\n return (\n \n \n { this.isFootwear() ? this.renderKidsFootwearTab() : null }\n { this.isApparel() ? this.renderKidsClothingTab() : null }\n \n \n );\n }\n\n renderKidsFootwearTab() {\n const { code } = this.props;\n\n if (!code) {\n return null;\n }\n\n // PumaPWA UAE only\n const identifier = code.includes('en') ? KIDS_FOOTWEAR_BLOCK_UAE_EN : KIDS_FOOTWEAR_BLOCK_AR;\n\n return (\n \n \n \n );\n }\n\n renderKidsClothingTab() {\n const { code } = this.props;\n\n if (!code) {\n return null;\n }\n\n // PumaPWA UAE only\n const identifier = code.includes('en') ? KIDS_CLOTHES_BLOCK_UAE_EN : KIDS_CLOTHES_BLOCK_AR;\n\n return (\n \n \n \n );\n }\n\n renderMenTab() {\n return (\n \n \n { this.isFootwear() ? this.renderMenFootwearTab() : null }\n { this.isApparel() ? this.renderMenClothingTab() : null }\n \n \n );\n }\n\n renderMenFootwearTab() {\n const { code } = this.props;\n\n if (!code) {\n return null;\n }\n\n // PumaPWA UAE only\n const identifier = code.includes('en') ? MENS_FOOTWEAR_BLOCK_UAE_EN : MENS_FOOTWEAR_BLOCK_AR;\n\n return (\n \n \n \n );\n }\n\n renderMenClothingTab() {\n const { code } = this.props;\n\n if (!code) {\n return null;\n }\n\n // PumaPWA UAE only\n const identifier = code.includes('en') ? MENS_CLOTHES_BLOCK_UAE_EN : MENS_CLOTHES_BLOCK_AR;\n\n return (\n \n \n \n );\n }\n\n renderWomenTab() {\n return (\n \n \n { this.isFootwear() ? this.renderWomenFootwearTab() : null }\n { this.isApparel() ? this.renderWomenClothingTab() : null }\n \n \n );\n }\n\n renderWomenFootwearTab() {\n const { code } = this.props;\n\n if (!code) {\n return null;\n }\n\n // PumaPWA UAE only\n const identifier = code.includes('en') ? WOMENS_FOOTWEAR_BLOCK_UAE_EN : WOMENS_FOOTWEAR_BLOCK_AR;\n\n return (\n \n \n \n );\n }\n\n renderWomenClothingTab() {\n const { code } = this.props;\n\n if (!code) {\n return null;\n }\n\n // PumaPWA UAE only\n const identifier = code.includes('en') ? WOMENS_CLOTHES_BLOCK_UAE_EN : WOMENS_CLOTHES_BLOCK_AR;\n\n return (\n \n \n \n );\n }\n\n render() {\n return (\n \n \n { this.renderContent() }\n \n { this.renderProductMeasurements() }\n \n );\n }\n}\n\nexport default SizeChartPopupComponent;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\n\nexport { default } from './ProductMeasurements.container';\n","/* eslint-disable max-lines */\n/* eslint-disable react/no-unknown-property */\n/* eslint-disable @scandipwa/scandipwa-guidelines/only-render-in-component */\n/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport ContentWrapper from 'Component/ContentWrapper';\nimport Html from 'Component/Html';\n\nimport { CM_MEASUREMENT, INCHES_MEASUREMENT } from './ProductMeasurements.config';\n\nimport './ProductMeasurements.style';\n\n/**\n * Product measurements\n * @class ProductMeasurements\n * @namespace Scandipwa/Component/ProductMeasurements/Component */\nexport class ProductMeasurementsComponent extends PureComponent {\n static propTypes = {\n measurementsAttributes: PropTypes.arrayOf(PropTypes.shape({\n name: PropTypes.string,\n value: PropTypes.string\n })).isRequired\n };\n\n /**\n * Default state\n *\n * @type {{cms: boolean}}\n */\n state = {\n cms: true\n };\n\n cells = null;\n\n tableWidth = 1;\n\n onMouseOver = this.onMouseOver.bind(this);\n\n onButtonClick = this.onButtonClick.bind(this);\n\n renderMeasurementsTable = this.renderMeasurementsTable.bind(this);\n\n setCellClassName(cell, className) {\n // eslint-disable-next-line no-param-reassign\n cell.className = className;\n }\n\n clearCells() {\n if (this.cells) {\n this.cells.forEach((cell) => {\n this.setCellClassName(cell, 'ProductMeasurements-Cell');\n });\n }\n }\n\n onMouseOver(event) {\n const cell = event.target;\n const table = cell.parentNode.parentNode.parentNode;\n\n if (!this.cells) {\n this.cells = table.querySelectorAll('th, td');\n this.tableWidth = Array.from(this.cells).filter((cell) => cell.tagName === 'TH').length;\n }\n\n const cellIndex = Array.prototype.indexOf.call(this.cells, cell);\n const currentCellX = cellIndex % this.tableWidth;\n const currentCellY = Math.trunc(cellIndex / this.tableWidth);\n\n if (currentCellX && currentCellY) {\n this.cells.forEach((cell, a) => {\n const cellX = a % this.tableWidth;\n const cellY = Math.trunc(a / this.tableWidth);\n\n if (\n ((cellY === currentCellY && cellX <= currentCellX)\n || (cellX === currentCellX && cellY <= currentCellY))\n && a <= cellIndex\n ) {\n if (!cellX || !cellY) {\n this.setCellClassName(cell, 'ProductMeasurements-Cell_edge');\n } else if (a === cellIndex) {\n this.setCellClassName(cell, 'ProductMeasurements-Cell_point');\n } else {\n this.setCellClassName(cell, 'ProductMeasurements-Cell_intermediate');\n }\n } else {\n this.setCellClassName(cell, 'ProductMeasurements-Cell');\n }\n });\n } else {\n this.clearCells();\n }\n }\n\n onButtonClick(cms) {\n this.cells = null;\n this.setState({\n cms\n });\n }\n\n /**\n * Renders measurement table\n *\n * @param measurementsAttribute\n * @returns {JSX.Element}\n */\n renderMeasurementsTable(measurementsAttribute, index) {\n const { cms } = this.state;\n const { name, value: html } = measurementsAttribute;\n\n if (!html) {\n return null;\n }\n\n const isVisible = (cms && name === CM_MEASUREMENT) || (!cms && name === INCHES_MEASUREMENT);\n\n return (\n this.clearCells() }\n >\n \n \n );\n }\n\n /**\n * Renders measurement tables with switch buttons\n *\n * @returns {JSX.Element}\n */\n renderMeasurementsTables() {\n const { measurementsAttributes } = this.props;\n\n return (\n \n { this.renderMeasurementsButtons() }\n { measurementsAttributes.map(this.renderMeasurementsTable) }\n \n );\n }\n\n /**\n * Renders title un subtitle before the measurement tables\n *\n * @returns {JSX.Element}\n */\n renderTitleContent() {\n return (\n \n

    \n { __('Product measurements') }\n

    \n

    \n { __('Find your perfect fit with our detailed product measurement. Important measurements'\n + ' for each size are listed in the table in both centimeters and inches.') }\n

    \n \n );\n }\n\n /**\n * Renders buttons to change measurement\n *\n * @returns {JSX.Element}\n */\n renderMeasurementsButtons() {\n const { cms } = this.state;\n\n return (\n \n this.onButtonClick(false) }\n >\n { __('Inches') }\n \n this.onButtonClick(true) }\n >\n { __('cm') }\n \n \n );\n }\n\n /**\n * Renders notice text under measurement tables\n *\n * @returns {JSX.Element}\n */\n renderNotice() {\n return (\n \n { __('Please note all measurements shown are specific to this product.') }\n

    \n );\n }\n\n /**\n * Renders measurement section content\n *\n * @returns {JSX.Element}\n */\n renderContent() {\n return (\n <>\n { this.renderTitleContent() }\n { this.renderMeasurementsTables() }\n { this.renderNotice() }\n \n );\n }\n\n render() {\n const { measurementsAttributes } = this.props;\n\n if (!measurementsAttributes.length) {\n return null;\n }\n\n return (\n \n { this.renderContent() }\n \n );\n }\n}\n\nexport default ProductMeasurementsComponent;\n","/**\n * @author Vladislavs Zimnikovs \n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package puma-mx\n */\n\nexport { default } from './Tab.container';\n","/* eslint-disable react/no-unknown-property */\n/**\n * @author Vladislavs Zimnikovs \n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package puma-mx\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport { ChildrenType, MixType } from 'Type/Common.type';\n\n/** @namespace Scandipwa/Component/Tab/Component */\nexport class TabComponent extends PureComponent {\n static propTypes = {\n mix: MixType.isRequired,\n isActive: PropTypes.bool.isRequired,\n children: ChildrenType.isRequired\n };\n\n render() {\n const { children, isActive, mix } = this.props;\n\n if (!isActive) {\n return null;\n }\n\n return (\n
    \n { children }\n
    \n );\n }\n}\n\nexport default TabComponent;\n","/**\n * @author Vladislavs Zimnikovs \n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package puma-mx\n */\n\nexport { default } from './Tabs.container';\n","/* eslint-disable react/no-unknown-property */\n/**\n * @author Vladislavs Zimnikovs \n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package puma-mx\n */\n\nimport PropTypes from 'prop-types';\nimport { Children, cloneElement, PureComponent } from 'react';\n\nimport { ChildrenType } from 'Type/Common.type';\n\nimport './Tabs.style';\n\n/** @namespace Scandipwa/Component/Tabs/Component */\nexport class TabsComponent extends PureComponent {\n static propTypes = {\n activeTab: PropTypes.string,\n onTabClick: PropTypes.func.isRequired,\n tabList: PropTypes.arrayOf(PropTypes.shape({\n id: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired\n })).isRequired,\n children: ChildrenType.isRequired,\n htmlName: PropTypes.string.isRequired,\n // eslint-disable-next-line react/boolean-prop-naming\n renderInactiveTabButtons: PropTypes.bool.isRequired\n };\n\n static defaultProps = {\n activeTab: null\n };\n\n onTabClick = (id) => () => {\n const { onTabClick } = this.props;\n\n onTabClick(id);\n };\n\n renderTabButtons = ({ id, label }) => {\n const { activeTab, tabList } = this.props;\n const [{ id: firstTab }] = tabList;\n\n return (\n \n { label }\n \n );\n };\n\n renderTabs = (child) => {\n if (!child) {\n return null;\n }\n\n const { activeTab, tabList } = this.props;\n const { props: { id } } = child;\n const [{ id: firstTab }] = tabList;\n\n return cloneElement(child, { key: id, isActive: (activeTab || firstTab) === id });\n };\n\n render() {\n const {\n children, tabList, htmlName, renderInactiveTabButtons\n } = this.props;\n\n return (\n
    \n { tabList.length > 1 && (\n
    \n { tabList.map(this.renderTabButtons) }\n
    \n ) }\n { renderInactiveTabButtons\n && (\n
    \n { tabList.map(this.renderTabButtons) }\n
    \n ) }\n
    \n { Children.map(children, this.renderTabs) }\n
    \n
    \n );\n }\n}\n\nexport default TabsComponent;\n","/**\n * Copyright © Scandiweb, Inc. All rights reserved.\n *\n * @category Puma\n * @package Puma_Tabby\n * @author Beshoy Samuel \n */\n\nexport { default } from './TabbyPdp.container';\n","/**\n * Copyright © Scandiweb, Inc. All rights reserved.\n *\n * @category Puma\n * @package Puma_Tabby\n * @author Beshoy Samuel \n */\n\nimport { Field } from 'Util/Query';\n\n/** @namespace Scandipwa/Query/Tabby/Query */\nexport class TabbyQuery {\n getWidgetPdp() {\n return new Field('getTabbyWidgetPdp')\n .addFieldList([\n 'script_url',\n 'selector',\n 'merchantCode',\n 'publicKey',\n 'source',\n 'currency',\n 'currencyRate',\n 'theme',\n 'productType',\n 'error'\n ]);\n }\n}\n\nexport default new TabbyQuery();\n","/* eslint-disable react/no-unknown-property */\n/* eslint-disable new-cap */\n/* eslint-disable react/prop-types */\n/* eslint-disable @scandipwa/scandipwa-guidelines/only-render-in-component */\n/**\n * Copyright © Scandiweb, Inc. All rights reserved.\n *\n * @category Puma\n * @package Puma_Tabby\n * @author Beshoy Samuel \n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport INTERVAL_RATE from './TabbyPdp.config';\n\n/** @namespace Scandipwa/Component/TabbyPdp/Component */\nexport class TabbyPdpComponent extends PureComponent {\n static propTypes = {\n formatedPrice: PropTypes.number,\n order: PropTypes.number,\n selector: PropTypes.string,\n merchantCode: PropTypes.string,\n publicKey: PropTypes.string,\n source: PropTypes.string,\n currency: PropTypes.string,\n currencyRate: PropTypes.string,\n theme: PropTypes.string,\n productType: PropTypes.string,\n error: PropTypes.string,\n isLoading: PropTypes.bool\n };\n\n static defaultProps = {\n formatedPrice: null,\n order: 0,\n selector: null,\n merchantCode: null,\n publicKey: null,\n source: null,\n currency: null,\n currencyRate: null,\n theme: null,\n productType: null,\n error: null,\n isLoading: null\n };\n\n existTabbyProductWidget = setInterval(() => {\n if (window.TabbyPromo) {\n this.renderWidget();\n clearInterval(this.existTabbyProductWidget);\n }\n }, INTERVAL_RATE);\n\n componentDidUpdate(prevProps) {\n const { prevFormatedPrice } = prevProps;\n const { formatedPrice } = this.props;\n\n if (prevFormatedPrice !== formatedPrice) {\n this.renderWidget();\n }\n }\n\n componentWillUnmount() {\n clearInterval(this.existTabbyProductWidget);\n }\n\n isArabicCacheWorkaround() {\n const doc = document.documentElement;\n\n if (doc) {\n return doc.getAttribute('dir') === 'rtl';\n }\n\n return false;\n }\n\n renderWidget = () => {\n const {\n formatedPrice,\n selector,\n merchantCode,\n publicKey,\n source,\n currency,\n currencyRate,\n theme,\n productType,\n error,\n isLoading\n } = this.props;\n\n if (!error\n && !isLoading\n && publicKey\n && window.TabbyPromo !== undefined\n ) {\n window.TabbyPromo({\n selector,\n merchantCode,\n publicKey,\n lang: this.isArabicCacheWorkaround() ? 'ar_SA' : 'en_US',\n source,\n currency,\n currencyRate,\n theme,\n productType,\n price: formatedPrice\n });\n }\n };\n\n render() {\n const {\n publicKey, error, isLoading, order\n } = this.props;\n\n if (isLoading || !publicKey || error) {\n return null;\n }\n\n return (\n \n );\n }\n}\n\nexport default TabbyPdpComponent;\n","export const INTERVAL_RATE = 300;\nexport default INTERVAL_RATE;\n","/**\n * Copyright © Scandiweb, Inc. All rights reserved.\n *\n * @category Puma\n * @package Puma_Tamara\n * @author Beshoy Samuel \n */\n\nexport { default } from './TamaraPdp.container';\n","/**\n * Copyright © Scandiweb, Inc. All rights reserved.\n *\n * @category Puma\n * @package Puma_Tamara\n * @author Beshoy Samuel \n */\n\nimport { Field } from 'Util/Query';\n\n/** @namespace Scandipwa/Query/Tamara/Query */\nexport class TamaraQuery {\n getWidgetPdp() {\n return new Field('getTamaraWidgetPdp')\n .addFieldList([\n 'script_url',\n 'public_key',\n 'currency_code',\n 'country_code',\n new Field('payment_method')\n .addFieldList([\n 'name',\n 'min_limit',\n 'max_limit',\n 'currency',\n 'number_of_instalments',\n 'description'\n ]),\n 'error'\n ]);\n }\n}\n\nexport default new TamaraQuery();\n","/* eslint-disable @scandipwa/scandipwa-guidelines/jsx-no-props-destruction */\n/* eslint-disable react/no-unknown-property */\n/* eslint-disable react/prop-types */\n/* eslint-disable @scandipwa/scandipwa-guidelines/only-render-in-component */\n/**\n * Copyright © Scandiweb, Inc. All rights reserved.\n *\n * @category Puma\n * @package Puma_Tamara\n * @author Beshoy Samuel \n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport './TamaraPdp.style';\n\n/** @namespace Scandipwa/Component/TamaraPdp/Component */\nexport class TamaraPdpComponent extends PureComponent {\n static propTypes = {\n formatedPrice: PropTypes.number,\n order: PropTypes.number,\n error: PropTypes.string,\n isLoading: PropTypes.bool\n };\n\n static defaultProps = {\n formatedPrice: null,\n order: 0,\n error: null,\n isLoading: true\n };\n\n componentDidUpdate(prevProps) {\n const { prevFormatedPrice } = prevProps;\n const { formatedPrice } = this.props;\n\n if (prevFormatedPrice !== formatedPrice && window.TamaraWidgetV2) {\n window.TamaraWidgetV2.refresh();\n }\n }\n\n render() {\n const {\n formatedPrice, error, isLoading, order\n } = this.props;\n\n if (isLoading || !formatedPrice || error) {\n return null;\n }\n\n return (\n
    \n \n
    \n );\n }\n}\n\nexport default TamaraPdpComponent;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport PropTypes from 'prop-types';\n\nimport Html from 'Component/Html';\nimport { Product } from 'Component/Product/Product.component';\nimport PRODUCT_TYPE from 'Component/Product/Product.config';\nimport { STOCK_TYPE } from 'Component/Product/Stock.config';\nimport ProductAlerts from 'Component/ProductAlerts';\nimport TextPlaceholder from 'Component/TextPlaceholder';\nimport TierPrices from 'Component/TierPrices';\nimport { isCrawler, isSSR } from 'Util/Browser';\nimport {\n showNewReviewPopup\n} from 'Util/Product';\n\nimport './ProductActions.style';\n\n/**\n * Product actions\n * @class ProductActions\n * @namespace Component/ProductActions/Component\n */\nexport class ProductActions extends Product {\n static propTypes = {\n ...Product.propTypes,\n showOnlyIfLoaded: PropTypes.func.isRequired,\n areDetailsLoaded: PropTypes.bool.isRequired,\n getLink: PropTypes.func.isRequired,\n offerCount: PropTypes.number.isRequired,\n offerType: PropTypes.string.isRequired,\n stockMeta: PropTypes.string.isRequired,\n metaLink: PropTypes.string.isRequired,\n isPriceAlertEnabled: PropTypes.bool.isRequired,\n isInStockAlertEnabled: PropTypes.bool.isRequired,\n isWishlistEnabled: PropTypes.bool.isRequired,\n displayProductStockStatus: PropTypes.bool.isRequired,\n areReviewsEnabled: PropTypes.bool.isRequired,\n isPricePreview: PropTypes.bool\n };\n\n static defaultProps = {\n ...Product.defaultProps,\n productName: '',\n isPricePreview: false\n };\n\n className = 'ProductActions';\n\n componentDidUpdate(prevProps) {\n const { product: { id: prevId } } = prevProps;\n const { product: { id }, minQuantity, setQuantity } = this.props;\n\n if (id !== prevId) {\n setQuantity(minQuantity);\n }\n }\n\n renderReviewButton() {\n const { device, areReviewsEnabled } = this.props;\n\n if (!areReviewsEnabled) {\n return null;\n }\n\n const isNotSafariOrIos = !device.ios && !device.safari;\n\n return (\n \n \n { __('Write a review') }\n \n \n );\n }\n\n renderSkuAndStock() {\n const {\n getActiveProduct,\n showOnlyIfLoaded\n } = this.props;\n\n const { sku } = getActiveProduct();\n\n return (\n \n { showOnlyIfLoaded(\n sku,\n (\n <>\n { this.renderSku() }\n { this.renderStock() }\n \n ),\n \n ) }\n \n );\n }\n\n renderShortDescriptionContent() {\n const { product: { short_description } } = this.props;\n const { html } = short_description || {};\n\n const htmlWithItemProp = `
    ${ html }
    `;\n\n return (\n
    \n { html ? :

    }\n
    \n );\n }\n\n renderShortDescription() {\n const { product: { short_description, id } } = this.props;\n const { html } = short_description || {};\n\n if (!html && id) {\n return null;\n }\n\n return (\n \n { this.renderShortDescriptionContent() }\n \n );\n }\n\n renderOfferCount() {\n const { offerCount } = this.props;\n\n if (offerCount > 1) {\n return (\n \n );\n }\n\n return null;\n }\n\n renderSchema() {\n const {\n productName,\n stockMeta,\n metaLink\n } = this.props;\n\n return (\n <>\n { this.renderOfferCount() }\n \n \n { /* eslint-disable-next-line react/forbid-elements */ }\n \n { productName }\n \n \n );\n }\n\n renderPriceWithSchema() {\n const {\n productPrice\n } = this.props;\n\n const {\n originalPrice: {\n minFinalPrice: {\n value: minFinalPrice = 0\n } = {},\n maxFinalPrice: {\n value: maxFinalPrice = 0\n } = {}\n } = {}\n } = productPrice;\n\n return (\n \n { this.renderSchema() }\n \n { this.renderPrice() }\n \n );\n }\n\n renderPriceWithGlobalSchema() {\n const {\n offerType,\n product: {\n type_id: type\n }\n } = this.props;\n\n if (type === PRODUCT_TYPE.grouped) {\n return null;\n }\n\n return (\n \n { this.renderPriceWithSchema() }\n \n );\n }\n\n renderReviewSection() {\n return (\n \n { this.renderRatingSummary() }\n { this.renderReviewButton() }\n \n );\n }\n\n renderPrice() {\n const {\n getActiveProduct,\n inStock,\n product: { type_id: baseType, price_range = null } = {},\n isPricePreview\n } = this.props;\n const { type_id: activeType } = getActiveProduct();\n\n const notConfigured = baseType === PRODUCT_TYPE.configurable && activeType === baseType;\n\n if (!price_range) {\n return ;\n }\n\n return super.renderPrice(!inStock || notConfigured || isPricePreview);\n }\n\n renderTierPrices() {\n const { getActiveProduct } = this.props;\n\n return (\n
    \n \n
    \n );\n }\n\n renderProductAlerts() {\n const {\n areDetailsLoaded,\n isInStockAlertEnabled,\n isPriceAlertEnabled,\n getActiveProduct,\n inStock\n } = this.props;\n\n if (\n (!isInStockAlertEnabled && !isPriceAlertEnabled)\n || !areDetailsLoaded\n ) {\n return null;\n }\n\n const { id } = getActiveProduct();\n\n return (\n \n \n \n );\n }\n\n renderAddToCartActionBlock() {\n return (\n \n { this.renderQuantityChanger() }\n { this.renderAddToCartButton() }\n
    \n { this.renderWishlistButton() }\n { this.renderCompareButton() }\n
    \n \n );\n }\n\n renderAddToCartMobile() {\n return (\n \n { this.renderQuantityChanger() }\n { this.renderAddToCartButton() }\n { this.renderWishlistButton() }\n \n );\n }\n\n renderDesktop() {\n return (\n <>\n { this.renderBrand(true) }\n { this.renderName() }\n { this.renderReviewSection() }\n { this.renderSkuAndStock() }\n { this.renderShortDescription() }\n { this.renderConfigurableOptions() }\n { this.renderCustomAndBundleOptions() }\n { this.renderGroupedOptions() }\n { this.renderDownloadableSamples() }\n { this.renderDownloadableLinks() }\n { this.renderTierPrices() }\n { this.renderProductAlerts() }\n { this.renderPriceWithGlobalSchema() }\n { this.renderAddToCartActionBlock() }\n \n );\n }\n\n renderMobile() {\n const { product: { type_id: type } } = this.props;\n const isWithoutPriceTotal = type === PRODUCT_TYPE.grouped;\n\n return (\n <>\n { this.renderTierPrices() }\n
    \n { this.renderPriceWithGlobalSchema() }\n { this.renderSkuAndStock() }\n
    \n
    \n { this.renderReviewSection() }\n { this.renderCompareButton() }\n
    \n { this.renderBrand(true) }\n { this.renderShortDescription() }\n { this.renderProductAlerts() }\n { this.renderConfigurableOptions() }\n { this.renderCustomAndBundleOptions() }\n { this.renderGroupedOptions() }\n { this.renderDownloadableSamples() }\n { this.renderDownloadableLinks() }\n { this.renderAddToCartMobile() }\n \n );\n }\n\n render() {\n const { device: { isMobile } = {}, setValidator } = this.props;\n\n return (\n
    setValidator(elem) }>\n { isMobile ? this.renderMobile() : this.renderDesktop() }\n
    \n );\n }\n}\n\nexport default ProductActions;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport { default } from './ProductAlerts.container';\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport { Field } from 'Util/Query';\n\n/** @namespace Query/ProductAlerts/Query */\nexport class ProductAlertsQuery {\n getProductAlertSubscribeMutation(productId, type) {\n return new Field('productAlertSubscribe')\n .addArgument('productId', 'ID!', productId)\n .addArgument('type', 'String!', type);\n }\n}\n\nexport default new ProductAlertsQuery();\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport { STOCK_TYPE } from 'Component/Product/Stock.config';\nimport { StockStatusType } from 'Type/StockStatus.type';\n\nimport './ProductAlerts.style';\n\n/** @namespace Component/ProductAlerts/Component */\nexport class ProductAlerts extends PureComponent {\n static propTypes = {\n handlePriceDropSubscribeAlertPriceDrop: PropTypes.func.isRequired,\n handlePriceDropSubscribeAlertInStock: PropTypes.func.isRequired,\n isInStockAlertEnabled: PropTypes.bool,\n isPriceAlertEnabled: PropTypes.bool,\n stockStatus: StockStatusType\n };\n\n static defaultProps = {\n isInStockAlertEnabled: false,\n isPriceAlertEnabled: false,\n stockStatus: null\n };\n\n renderPriceDropSubscribeButton() {\n const { handlePriceDropSubscribeAlertPriceDrop, isPriceAlertEnabled } = this.props;\n\n if (!isPriceAlertEnabled) {\n return null;\n }\n\n return (\n \n { __('Notify me when the price drops') }\n \n );\n }\n\n renderInStockSubscribeButton() {\n const {\n handlePriceDropSubscribeAlertInStock,\n isInStockAlertEnabled,\n stockStatus\n } = this.props;\n\n if (!isInStockAlertEnabled) {\n return null;\n }\n\n if (stockStatus === STOCK_TYPE.IN_STOCK || !stockStatus) {\n return null;\n }\n\n return (\n \n { __('Notify me when this product is in stock') }\n \n );\n }\n\n render() {\n return (\n \n { this.renderPriceDropSubscribeButton() }\n { this.renderInStockSubscribeButton() }\n \n );\n }\n}\n\nexport default ProductAlerts;\n","/* eslint-disable import/prefer-default-export */\n\n/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport const PRODUCT_ALERT_PRICE_DROP = 'PRODUCT_ALERT_PRICE_DROP';\nexport const PRODUCT_ALERT_IN_STOCK = 'PRODUCT_ALERT_IN_STOCK';\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport ContentWrapper from 'Component/ContentWrapper';\nimport ExpandableContent from 'Component/ExpandableContent';\nimport Html from 'Component/Html';\nimport TextPlaceholder from 'Component/TextPlaceholder';\nimport { ProductType } from 'Type/ProductList.type';\n\nimport './ProductInformation.style';\n\n/** @namespace Component/ProductInformation/Component */\nexport class ProductInformation extends PureComponent {\n static propTypes = {\n product: ProductType.isRequired,\n areDetailsLoaded: PropTypes.bool.isRequired\n };\n\n renderDescription() {\n const { product: { description: { html } = {} } } = this.props;\n\n if (!html) {\n return (\n \n );\n }\n\n const cleanDescription = html.replace(/<\\/?[^>]+(>|$)/g, '');\n\n return (\n
    \n \n \n
    \n );\n }\n\n renderContent() {\n const { areDetailsLoaded } = this.props;\n const heading = areDetailsLoaded ? __('About') : '';\n\n return (\n \n { this.renderDescription() }\n \n );\n }\n\n isHTMLWhiteSpaceOrUndefined(htmlString) {\n if (!htmlString || htmlString.trim() === '') {\n return true;\n }\n\n // creates a DOM object from string\n const parser = new DOMParser();\n const document = parser.parseFromString(htmlString.trim(), 'text/html');\n\n // handles the case of plain text\n if (document.body.children.length === 0) {\n return false;\n }\n\n // check if at least one HTML element has content\n const elementsWithContent = Array.from(document.body.children).filter(\n (element) => element.innerHTML !== '' || element.nodeName === 'IMG'\n );\n\n return elementsWithContent.length === 0;\n }\n\n render() {\n const {\n areDetailsLoaded,\n product: {\n description: { html } = {}\n }\n } = this.props;\n\n if (this.isHTMLWhiteSpaceOrUndefined(html) && areDetailsLoaded) {\n return null;\n }\n\n return (\n \n { this.renderContent() }\n \n );\n }\n}\n\nexport default ProductInformation;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/base-ProductReviewListtheme\n */\n\nimport PropTypes from 'prop-types';\nimport { lazy, PureComponent, Suspense } from 'react';\n\nimport ContentWrapper from 'Component/ContentWrapper';\nimport Loader from 'Component/Loader/Loader.component';\nimport Popup from 'Component/Popup/Popup.container';\nimport ProductActions from 'Component/ProductActions';\nimport ProductInformation from 'Component/ProductInformation';\nimport ProductLinks from 'Component/ProductLinks';\nimport ProductReviewForm from 'Component/ProductReviewForm/ProductReviewForm.container';\nimport { REVIEW_POPUP_ID } from 'Component/ProductReviews/ProductReviews.config';\nimport ProductTabs from 'Component/ProductTabs';\nimport NoMatchHandler from 'Route/NoMatchHandler';\nimport {\n PRODUCT_ATTRIBUTES,\n PRODUCT_INFORMATION,\n PRODUCT_REVIEWS\n} from 'Route/ProductPage/ProductPage.config';\nimport { RELATED, UPSELL } from 'Store/LinkedProducts/LinkedProducts.reducer';\nimport { ProductType } from 'Type/ProductList.type';\n\nimport './ProductPage.style';\n\nexport const ProductGallery = lazy(() => import(\n /* webpackMode: \"lazy\", webpackChunkName: \"product-gallery\" */\n 'Component/ProductGallery'\n));\n\nexport const ProductReviews = lazy(() => import(\n /* webpackMode: \"lazy\", webpackChunkName: \"product-reviews\" */\n 'Component/ProductReviews'\n));\nexport const ProductAttributes = lazy(() => import(\n /* webpackMode: \"lazy\", webpackChunkName: \"product-attributes\" */\n 'Component/ProductAttributes'\n));\n\n/** @namespace Route/ProductPage/Component */\nexport class ProductPage extends PureComponent {\n static propTypes = {\n getLink: PropTypes.func.isRequired,\n parameters: PropTypes.objectOf(PropTypes.string).isRequired,\n dataSource: ProductType.isRequired,\n activeProduct: ProductType.isRequired,\n areDetailsLoaded: PropTypes.bool.isRequired,\n isInformationTabEmpty: PropTypes.bool.isRequired,\n isAttributesTabEmpty: PropTypes.bool.isRequired,\n setActiveProduct: PropTypes.func.isRequired,\n useEmptyGallerySwitcher: PropTypes.bool.isRequired,\n isVariant: PropTypes.bool.isRequired,\n areReviewsEnabled: PropTypes.bool.isRequired\n };\n\n tabMap = {\n [PRODUCT_INFORMATION]: {\n name: __('About'),\n shouldTabRender: () => {\n const { isInformationTabEmpty } = this.props;\n\n return !isInformationTabEmpty;\n },\n render: (key) => this.renderProductInformationTab(key)\n },\n [PRODUCT_ATTRIBUTES]: {\n name: __('Details'),\n shouldTabRender: () => {\n const { isAttributesTabEmpty } = this.props;\n\n return !isAttributesTabEmpty;\n },\n render: (key) => this.renderProductAttributesTab(key)\n },\n [PRODUCT_REVIEWS]: {\n name: __('Reviews'),\n shouldTabRender: () => {\n const { areReviewsEnabled } = this.props;\n\n return areReviewsEnabled;\n },\n render: (key) => this.renderProductReviewsTab(key)\n }\n };\n\n renderProductPageContent() {\n const {\n getLink,\n dataSource,\n areDetailsLoaded,\n activeProduct,\n setActiveProduct,\n useEmptyGallerySwitcher,\n parameters,\n isVariant\n } = this.props;\n\n return (\n <>\n \n \n \n );\n }\n\n renderProductInformationTab(key) {\n const {\n dataSource,\n parameters,\n areDetailsLoaded\n } = this.props;\n\n return (\n \n );\n }\n\n renderProductAttributesTab(key) {\n const {\n activeProduct,\n areDetailsLoaded\n } = this.props;\n\n return (\n } key={ key }>\n \n \n );\n }\n\n renderProductReviewsTab(key) {\n const {\n dataSource,\n areDetailsLoaded\n } = this.props;\n\n return (\n } key={ key }>\n \n \n );\n }\n\n shouldTabsRender() {\n return Object.entries(this.tabMap)\n .map(([id, values]) => ({ id, ...values }))\n .filter(({ shouldTabRender }) => shouldTabRender());\n }\n\n renderProductTabs() {\n const tabs = this.shouldTabsRender();\n\n if (!tabs) {\n return null;\n }\n\n return (\n \n );\n }\n\n renderAdditionalSections() {\n const {\n areDetailsLoaded\n } = this.props;\n\n return (\n <>\n { this.renderProductTabs() }\n \n \n \n );\n }\n\n renderReviewPopup() {\n const { dataSource } = this.props;\n\n return (\n \n \n \n );\n }\n\n render() {\n return (\n \n \n \n { this.renderProductPageContent() }\n \n { this.renderAdditionalSections() }\n { this.renderReviewPopup() }\n \n \n );\n }\n}\n\nexport default ProductPage;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\nimport { connect } from 'react-redux';\n\nimport { goToPreviousNavigationState } from 'Store/Navigation/Navigation.action';\nimport { TOP_NAVIGATION_TYPE } from 'Store/Navigation/Navigation.reducer';\nimport { showNotification } from 'Store/Notification/Notification.action';\nimport { hideActiveOverlay } from 'Store/Overlay/Overlay.action';\nimport { CustomerType } from 'Type/Account.type';\nimport { ProductType } from 'Type/ProductList.type';\nimport { RatingItemsType } from 'Type/Rating.type';\nimport transformToNameValuePair from 'Util/Form/Transform';\nimport { getErrorMessage } from 'Util/Request';\n\nimport ProductReviewForm from './ProductReviewForm.component';\n\nexport const ReviewDispatcher = import(\n /* webpackMode: \"lazy\", webpackChunkName: \"dispatchers\" */\n 'Store/Review/Review.dispatcher'\n);\n\n/** @namespace Component/ProductReviewForm/Container/mapStateToProps */\nexport const mapStateToProps = (state) => ({\n customer: state.MyAccountReducer.customer,\n reviewRatings: state.ConfigReducer.reviewRatings\n});\n\n/** @namespace Component/ProductReviewForm/Container/mapDispatchToProps */\nexport const mapDispatchToProps = (dispatch) => ({\n addReview: (options) => ReviewDispatcher.then(\n ({ default: dispatcher }) => dispatcher.submitProductReview(dispatch, options)\n ),\n showNotification: (type, message) => dispatch(showNotification(type, message)),\n hideActiveOverlay: () => dispatch(hideActiveOverlay()),\n goToPreviousHeaderState: () => dispatch(goToPreviousNavigationState(TOP_NAVIGATION_TYPE))\n});\n\n/** @namespace Component/ProductReviewForm/Container */\nexport class ProductReviewFormContainer extends PureComponent {\n static propTypes = {\n showNotification: PropTypes.func.isRequired,\n goToPreviousHeaderState: PropTypes.func.isRequired,\n hideActiveOverlay: PropTypes.func.isRequired,\n reviewRatings: RatingItemsType.isRequired,\n product: ProductType.isRequired,\n addReview: PropTypes.func.isRequired,\n customer: CustomerType.isRequired\n };\n\n containerFunctions = ({\n onReviewSubmitSuccess: this._onReviewSubmitSuccess.bind(this),\n onStarRatingClick: this._onStarRatingClick.bind(this),\n onReviewError: this._onReviewError.bind(this)\n });\n\n __construct(props) {\n super.__construct(props);\n\n const { customer: { firstname: nickname } } = this.props;\n const reviewData = { nickname };\n\n this.state = {\n isLoading: false,\n ratingData: {},\n reviewData,\n isSubmitted: false\n };\n }\n\n containerProps() {\n const { reviewRatings } = this.props;\n const {\n isLoading,\n ratingData,\n reviewData,\n isSubmitted\n } = this.state;\n\n return {\n isLoading,\n isSubmitted,\n ratingData,\n reviewData,\n reviewRatings\n };\n }\n\n _onReviewError(_, invalidFields) {\n const reviewsAreNotValid = invalidFields;\n\n this.setState({ isLoading: !reviewsAreNotValid });\n }\n\n async _onReviewSubmitSuccess(form, fields) {\n const {\n product,\n addReview,\n hideActiveOverlay,\n goToPreviousHeaderState,\n showNotification\n } = this.props;\n\n const { ratingData: rating_data } = this.state;\n\n this.setState({ isLoading: true });\n\n const {\n nickname,\n title,\n detail\n } = transformToNameValuePair(fields);\n\n const { sku: product_sku } = product;\n\n try {\n await addReview({\n nickname,\n title,\n detail,\n product_sku,\n rating_data\n });\n\n this.setState({\n ratingData: {},\n reviewData: {}\n });\n\n goToPreviousHeaderState();\n hideActiveOverlay();\n } catch (error) {\n showNotification('error', getErrorMessage(error));\n } finally {\n this.setState({ isLoading: false });\n }\n }\n\n _onStarRatingClick(rating_id, option_id) {\n this.setState(({ ratingData }) => ({\n ratingData: { ...ratingData, [rating_id]: option_id }\n }));\n }\n\n _handleFieldChange(fieldName, value) {\n this.setState(({ reviewData }) => ({\n reviewData: { ...reviewData, [fieldName]: value }\n }));\n }\n\n render() {\n return (\n \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ProductReviewFormContainer);\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport FieldGroup from 'Component//FieldGroup';\nimport Field from 'Component/Field';\nimport FIELD_TYPE from 'Component/Field/Field.config';\nimport Form from 'Component/Form';\nimport Loader from 'Component/Loader';\nimport ReviewStar from 'Component/ReviewStar';\nimport { RatingItemsType } from 'Type/Rating.type';\n\nimport './ProductReviewForm.style';\n\n/**\n * ProductReviewForm\n * @class ProductReviewForm\n * @namespace Component/ProductReviewForm/Component\n */\nexport class ProductReviewForm extends PureComponent {\n static propTypes = {\n reviewRatings: RatingItemsType.isRequired,\n isLoading: PropTypes.bool.isRequired,\n onReviewSubmitSuccess: PropTypes.func.isRequired,\n onReviewError: PropTypes.func.isRequired,\n onStarRatingClick: PropTypes.func.isRequired,\n ratingData: PropTypes.objectOf(PropTypes.string).isRequired,\n reviewData: PropTypes.shape({\n nickname: PropTypes.string,\n summary: PropTypes.string,\n detail: PropTypes.string\n }).isRequired\n };\n\n ratingTitleMap = {\n 1: __('Awful'),\n 2: __('Bad'),\n 3: __('Average'),\n 4: __('Good'),\n 5: __('Awesome')\n };\n\n renderReviewStar(options, rating_id) {\n const { ratingData, onStarRatingClick } = this.props;\n const { option_id, value } = options;\n const isChecked = !!ratingData[rating_id] && ratingData[rating_id] === option_id;\n\n return (\n \n );\n }\n\n renderReviewRating() {\n const { reviewRatings } = this.props;\n\n return reviewRatings.map((rating) => {\n const { rating_id, rating_code, rating_options } = rating;\n\n return (\n \n
    \n \n { rating_code }\n \n { rating_options\n .sort(({ value }, { value: nextValue }) => nextValue - value)\n .map((option) => this.renderReviewStar(option, rating_id)) }\n
    \n \n );\n });\n }\n\n renderButton() {\n return (\n \n { __('Submit Review') }\n \n );\n }\n\n renderReviewRatingWrapper() {\n const { reviewRatings } = this.props;\n\n if (reviewRatings && reviewRatings.length === 0) {\n return null;\n }\n\n return (\n \n { this.renderReviewRating() }\n \n );\n }\n\n renderReviewFormContent() {\n const { reviewData } = this.props;\n const {\n nickname = '',\n summary = '',\n detail = ''\n } = reviewData;\n\n return (\n \n { this.renderReviewRatingWrapper() }\n \n \n \n \n \n \n );\n }\n\n render() {\n const {\n isLoading,\n onReviewSubmitSuccess,\n onReviewError\n } = this.props;\n\n return (\n \n \n { this.renderReviewFormContent() }\n { this.renderButton() }\n \n );\n }\n}\n\nexport default ProductReviewForm;\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport { default } from './ReviewStar.component';\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport { default } from './ProductTabs.component';\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport { default } from './ProductTab.component';\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nexport { default } from './Breadcrumbs.container';\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/scandipwa\n * @link https://github.com/scandipwa/scandipwa\n */\n\nimport ProductListQuery from 'Query/ProductList.query';\nimport { updateLinkedProducts } from 'Store/LinkedProducts/LinkedProducts.action';\nimport { showNotification } from 'Store/Notification/Notification.action';\nimport BrowserDatabase from 'Util/BrowserDatabase';\nimport { getIndexedProduct } from 'Util/Product';\nimport { fetchQuery, QueryDispatcher } from 'Util/Request';\nimport { ONE_MONTH_IN_SECONDS } from 'Util/Request/QueryDispatcher';\n\nexport const LINKED_PRODUCTS = 'LINKED_PRODUCTS';\n\n/**\n * Linked Prodcts List Dispatcher\n * @class LinkedProductsDispatcher\n * @extends QueryDispatcher\n * @namespace Store/LinkedProducts/Dispatcher\n */\nexport class LinkedProductsDispatcher extends QueryDispatcher {\n __construct() {\n super.__construct('LinkedProducts', ONE_MONTH_IN_SECONDS);\n }\n\n onSuccess(data, dispatch, product_links) {\n const linkedProducts = this._processResponse(data, product_links);\n\n BrowserDatabase.setItem(linkedProducts, LINKED_PRODUCTS);\n dispatch(updateLinkedProducts(linkedProducts));\n }\n\n onError(error, dispatch) {\n dispatch(showNotification('error', __('Error fetching LinkedProducts!'), error));\n }\n\n /**\n * Prepare LinkedProducts query\n * @return {Query} ProductList query\n * @memberof LinkedProductsDispatcher\n * @param product_links\n */\n prepareRequest(product_links) {\n const relatedSKUs = product_links.reduce((links, link) => {\n const { linked_product_sku } = link;\n\n return [...links, linked_product_sku];\n }, []);\n\n return [\n ProductListQuery.getQuery({\n args: {\n filter: {\n productsSkuArray: relatedSKUs\n }\n },\n notRequireInfo: true\n })\n ];\n }\n\n /**\n * Clear linked products list\n * @param {{productsSkuArray: Array}} options A object containing different aspects of query, each item can be omitted\n * @return {Query} ProductList query\n * @memberof LinkedProductsDispatcher\n */\n clearLinkedProducts(dispatch, updateCrossSell = false) {\n const linkedProducts = {\n upsell: { total_count: 0, items: [] },\n related: { total_count: 0, items: [] },\n crosssell: { total_count: 0, items: [] }\n };\n\n BrowserDatabase.setItem(linkedProducts, LINKED_PRODUCTS);\n\n dispatch(updateLinkedProducts({\n ...linkedProducts,\n updateCrossSell\n }));\n }\n\n async fetchCrossSellProducts(dispatch, product_links) {\n const query = this.prepareRequest(product_links);\n const data = await fetchQuery(query);\n const { crosssell } = this._processResponse(data, product_links);\n const linkedProducts = BrowserDatabase.getItem(LINKED_PRODUCTS) || {};\n\n Object.assign(linkedProducts, {\n crosssell,\n updateCrossSell: true\n });\n\n dispatch(updateLinkedProducts(linkedProducts));\n }\n\n clearCrossSellProducts(dispatch) {\n const linkedProducts = BrowserDatabase.getItem(LINKED_PRODUCTS) || {};\n\n Object.assign(linkedProducts, {\n crosssell: { total_count: 0, items: [] },\n updateCrossSell: true\n });\n\n dispatch(updateLinkedProducts(linkedProducts));\n }\n\n _processResponse(data, product_links) {\n const { products: { items } } = data;\n\n const indexedBySku = items.reduce((acc, item) => {\n const { sku } = item;\n\n acc[sku] = getIndexedProduct(item);\n\n return acc;\n }, {});\n\n const linkedProducts = product_links.reduce((acc, link) => {\n const { linked_product_sku, link_type } = link;\n\n if (indexedBySku[linked_product_sku] && acc[link_type]) {\n acc[link_type].items.push(\n indexedBySku[linked_product_sku]\n );\n\n acc[link_type].total_count++;\n }\n\n return acc;\n }, {\n upsell: { total_count: 0, items: [] },\n related: { total_count: 0, items: [] },\n crosssell: { total_count: 0, items: [] },\n associated: { total_count: 0, items: [] }\n });\n\n return linkedProducts;\n }\n}\n\nexport default new LinkedProductsDispatcher();\n","/**\n * ScandiPWA - Progressive Web App for Magento\n *\n * Copyright © Scandiweb, Inc. All rights reserved.\n * See LICENSE for license details.\n *\n * @license OSL-3.0 (Open Software License (\"OSL\") v. 3.0)\n * @package scandipwa/base-theme\n * @link https://github.com/scandipwa/base-theme\n */\n\nexport { default } from './ProductLabel.component';\n"],"sourceRoot":""}