{"version":3,"sources":["images/sustainability/oekotex.png","images/sustainability/gots.png","images/sustainability/recycled.png","images/sustainability/organic.png","images/sustainability/ecovero.png","images/sustainability/ocsblended.png","../../shared/lib/images/sustainability/ocs.png","../../shared/lib/images/sustainability/grs.png","../../shared/lib/images/sustainability/grsmixed.png","../../shared/lib/images/sustainability/grsnylon.png","images/silhouette/shirt.jpg","../../shared/lib/images/collections/reorder/swim.jpg","../../shared/lib/images/collections/reorder/main.jpg","../../shared/lib/images/collections/reorder/outerwear.jpg","../../shared/lib/images/collections/reorder/friendship.jpg","../../shared/lib/images/collections/reorder/sport.jpg","../../shared/lib/images/collections/preorder/w20/sport.jpg","../../shared/lib/images/collections/preorder/w20/outerwear.jpg","../../shared/lib/images/collections/preorder/w20/main.jpg","../../shared/lib/images/collections/preorder/s21/sport.jpg","../../shared/lib/images/collections/preorder/s21/swim.jpg","../../shared/lib/images/collections/preorder/s21/outerwear.jpg","../../shared/lib/images/collections/preorder/s21/main.jpg","../../shared/lib/images/collections/preorder/w21/sport.jpg","../../shared/lib/images/collections/preorder/w21/outerwear.jpg","../../shared/lib/images/collections/preorder/w21/main.jpg","serviceWorker.ts","config.ts","store/alert/actions.ts","store/user/actions.ts","images/svg/Molo_Logo_Black_WS.svg","components/layout/MoloRingloader.tsx","models/Filter.ts","store/session/reducers.ts","models/Basket.ts","store/order/reducers.ts","store/user/reducers.ts","store/products/reducers.ts","store/collections/reducers.ts","store/alert/reducers.ts","store/index.ts","store/globalAxios.ts","store/products/ProductApi.ts","store/products/actions.ts","components/b2b/OrderTypeChooser.tsx","components/b2b/PreOrderChooser.tsx","store/order/OrderApi.ts","store/order/actions.ts","components/b2b/CreateOrderBody.tsx","components/shared/OrderFlow.tsx","components/layout/Modal/Modal.tsx","components/layout/QuantityInput.tsx","components/layout/QuantityGrid.tsx","models/Beans.ts","../../../src/models/Style.ts","models/MoloItem.ts","utils/priceHelper.ts","components/shared/ProductOverlay.tsx","components/shared/ProductListItem.tsx","store/session/actions.ts","constants/productSort.ts","utils/FilterHelper.ts","components/form/CheckboxInput.tsx","components/layout/AccordionPanel.tsx","components/shared/FilterComponent.tsx","components/shared/StickyHeader.tsx","components/shared/InfinityList.tsx","store/collections/actions.ts","images/svg/filter_icon_black.svg","components/shared/ProductList.tsx","components/b2b/ProductListContainer.tsx","components/b2b/EditNavOrderContainer.tsx","components/b2b/CollectionChooser.tsx","components/b2b/CollectionListContainer.tsx","components/b2b/CreateOrderModal.tsx","components/b2b/MyMolo.tsx","components/b2b/MyMoloOverlay.tsx","store/files/FileApi.ts","components/b2b/ProductDownloadModalContent.tsx","components/b2b/ProductDownloadModal.tsx","components/shared/SearchBox.tsx","utils/use-debounce.ts","components/b2b/ShopDropdown.tsx","components/layout/Dropdown.tsx","components/b2b/DeleteOrderModal.tsx","components/shared/CountDown2.tsx","utils/deliveryWindowsHelper.ts","components/shared/Dashboard/ShippedOrdercalendar.tsx","../../src/AccordionPanel.tsx","../../../src/form/CheckboxInput.tsx","../../../src/layout/MoloRingloader.tsx","../../../src/constants/productSort.ts","../../src/CollectionsChooser.tsx","../../../../src/images/svg/FilterIcon.tsx","../../src/StickyHeader.tsx","../../../src/layout/Barcode.tsx","../../src/ProductListItem.tsx","../../../src/models/Beans.ts","../../src/InfinityList.tsx","../../src/ProductList.tsx","../../../src/utils/FilterHelper.ts","../../src/AmountFilter.tsx","../../src/Modal.tsx","../../src/FilterComponent.tsx","../../../src/layout/Overlay.tsx","../../src/SendMailBody.tsx","../../src/QuantityInput.tsx","../../src/SendMailModal.tsx","../../src/EditLineDiscountModal.tsx","../../src/QuantityGrid.tsx","../../../src/Dashboard/Calendar.tsx","../../../src/models/MoloItem.ts","../../../src/Dashboard/ChartSummaryHighcharts.tsx","../../../src/Dashboard/DashboardHelper.ts","../../../src/utils/deliveryWindowsHelper.ts","../../../src/Dashboard/DeliveryWindows.tsx","../../src/EditLineDiscountMultipleModal.tsx","../../../src/utils/priceHelper.ts","../../../src/utils/UtilHelper.ts","../../../src/models/OrderHeader.ts","../../../src/Dashboard/Details.tsx","../../../src/Dashboard/MoveDropModal.tsx","../../../src/models/Order.ts","../../../src/layout/StepWizard.tsx","components/shared/TrackingModal.tsx","components/b2b/ShippedCalendar.tsx","components/layout/SidebarMenu.tsx","components/shared/Dashboard/OrderSummary.tsx","components/shared/Dashboard/DashboardHelper.ts","components/shared/Dashboard/dashboard.d.ts","components/b2b/ShippedItemsOverview.tsx","utils/DashboardFilterHelper.ts","components/shared/Dashboard/DeliveryWindows.tsx","components/shared/Dashboard/StyleCarousel.tsx","components/shared/Dashboard/ChartSummaryHighcharts.tsx","components/layout/Modal/ConfirmModal.tsx","components/shared/Dashboard/Details.tsx","components/shared/DashboardFilterComponent.tsx","components/b2b/OrderPreview.tsx","components/b2b/DashboardOverlay.tsx","components/b2b/ShippedOrdersOverlay.tsx","components/shared/OpenOrdersBody.tsx","components/shared/AllOrdersOverlay.tsx","components/layout/Header.tsx","components/b2b/BasketDropUpItem.tsx","components/b2b/BasketDropUp.tsx","components/b2b/BasketComponent.tsx","utils/UtilHelper.ts","components/layout/MainContainer.tsx","components/layout/DashboardContainer.tsx","components/b2b/DownloadOrderImagesModal.tsx","components/b2b/CheckoutContainer.tsx","components/shared/Dashboard/MoveDropModal.tsx","components/shared/Dashboard/Dashboard.tsx","components/shared/SearchPage.tsx","components/form/Input.tsx","components/form/Button.tsx","components/auth/Login.tsx","components/auth/Logout.tsx","components/auth/ForgotPassword.tsx","components/b2b/StockHasChangedOverlay.tsx","components/b2b/LookUpNavOrder.tsx","images/svg/download_icon_large.svg","images/svg/download_success.svg","components/b2b/ProductDownloadImagesPage.tsx","components/b2b/EditOrderHandlerOverlay.tsx","App.tsx","index.tsx","../../shared/lib/images/logobanner.jpg"],"names":["module","exports","Boolean","window","location","hostname","match","appConfig","api","baseUrl","media","setAlert","message","type","async","id","uuid","dispatch","setAlertAction","payload","setTimeout","removeAlertAction","isUserValid","response","UserApi","undefined","disallowedTypes","data","disallowTypes","JSON","parse","map","OrdertypeType","toLowerCase","authUser","currencyCode","customerData","customer","email","login","user","e","console","log","isValid","logoutUser","clearLocalStorage","keysToRemove","key","localStorage","getItem","removeItem","updatePassword","oldPassword","newPassword","loginUser","password","url","axios","post","devToken","defaults","headers","common","resetPassword","params","Email","_style","_extends","Object","assign","bind","target","i","arguments","length","source","prototype","hasOwnProperty","call","apply","this","SvgMoloLogoBlackWs","_ref","svgRef","title","props","createElement","x","y","viewBox","style","enableBackground","xmlSpace","ref","className","points","transform","width","height","d","ForwardRef","forwardRef","MoloRingloader","React","position","display","justifyContent","alignItems","flexDirection","flexGrow","Logo","marginBottom","BarLoader","initialFilter","seasons","productGroups","productCategories","deliveryWindows","collections","sustainability","activeFilters","combineReducers","filter","state","isFetching","action","newFilter","initialBasket","total","currency","items","numberOfItems","basketLines","changes","order","orders","closedOrders","basket","isDashboardFetching","dashboardDeliveryWindows","recentClosedOrders","orderIsPending","orderNotFound","allClosedOrders","allOpenOrders","allClosedOrdersPending","allOpenOrdersPending","basketChanges","newBasket","shops","navOrders","shippingAddresses","isfetchingShippingAdresses","recentClosedOrdersLocalStorage","localStorageClosedOrders","uniqBy","dashboardOrder","dashboardData","userIsInformed","isValidated","token","productStore","isFetchingOrderTypes","orderTypes","moloItems","isFetchingCollectionMasters","styles","alertState","alert","allReducers","session","alertStore","createStore","rootReducer","applyMiddleware","thunk","reduxStore","interceptors","use","status","Promise","reject","error","request","config","mediaBaseUrl","ProductApi","search","query","currencycode","autoComplete","autoComplete2","getOrderTypes","registerMediaToken","jwtToken","getImageMap","seasonCode","master","color","getMaster","pricegroup","getMoloItem","getMasters","finalResponse","chunky","chunk","requests","moloItem","push","responses","all","getProductGroupConfig","setFetchingOrderTypes","types","ProdctApi","indexOf","OrderTypeChooser","Component","constructor","super","box","t","myTween","imagesIsLoded","imagesLoaded","initialized","imageDoneLoading","setState","componentDidUpdate","prevProps","prevState","preOrders","orderType","render","reOrders","multiPreorders","constructed","find","delivery","description","basepath","imageOnErrorHandler","event","currentTarget","src","Fragment","visibility","Link","to","concat","alt","onLoad","onError","connect","mapStateToProps","states","ownProps","mapDispatchToProps","PreOrderTypeChooser","getImage","banner","replace","sort","reverse","OrderApi","_class","getOrder","apporderid","orderId","getOrderFromLocalStorage","getRecentOrdersFromLocalStorage","removeRecentOrdersFromLocalStorage","appOrderId","setItem","stringify","getOpenOrders","getClosedOrders","getShops","createOrder","customerId","customerid","applyChanges","itemId","itemno","quantity","updateOrder","patch","applyOrder","deleteOrder","peakNavOrders","peakNavOrdersNew","final","allshops","peakNavCustomerShipments","allShops","peakNavOrderUnshippedShipments","sonumber","peakNavShipmentItems","bsl","peakNavOrderShipments","peakNavOrderUnshippedItems","deliverycode","SO","lookupOrderInNav","openNavOrder","navorderid","navOrderId","getSeasonOrderTypes","seasoncode","getItemOrderTypes","getCustomerShippingAddresses","moveOrderDelivery","deliveryCode","newDate","srcDeliveryCode","getCountryRegionCodes","ensureOrderStockChanges","confirmChange","changeOrderQuantity","GetMoloItemsOnOrder","getCustomerDeliveryDownloadInfo","customerno","getOrderDeliveries","getGotIt","storageVal","getFilteredOrderLines","getAllClosedOrders","peakNavordersResponse","shipmentsResponse","item","isFullyShipped","getAllOpenOrders","res","sellToCustomerName","shipttoname","sellToCustomerNo","selltocustomerno","sellToAddress","sellToCity","sellToCountry_RegionCode","ordertype","salespersonnote","PeakShipmentTracking","setOrderSucces","addClosedOrderToRecent","getOpenOrdersSuccess","setIsFetchingShippingAddresses","setIsDashboardFetching","setFetching","orderDeletedSuccess","setOrderIsPending","isPending","setOrderNotFound","notFound","clearShop","orderheader","orderState","navImportRef","getBasket","setOrder","String","addClosedOrderToRecentAction","found","orderIsFinal","createAndSetOrder","salespersonNote","createdOrder","trim","activeOrderId","getBasketSuccess","orderLines","cloneDeep","o","orderTotals","amount","noOfItems","compileBasket","applyChangesFromDashboard","getDashboardOrderState","shouldAddToRecent","setUserHasConfirmed","informed","setUserIsInformed","CreateOrderBody","useParams","userState","useSelector","currentStep","setCurrentStep","useState","setInitialized","selected","setSelected","steps","setSteps","selectedShop","setShop","setComment","stepLabels","shop","useEffect","initializeSteps","nextStep","name","Name","CustomerId","address","city","step","index","onClick","onSelectOrderType","onSelectShop","onSubmit","preventDefault","placeholder","onChange","value","maxLength","OrderFlow","createNeworder","onClickSelectOrder","orderFlowDone","orderTypeResponse","shopsResponse","localStorageOrder","ordersForCurrentOrderType","maxWidth","margin","onClickOrderType","multiOrderTypes","withRouter","Modal","isShowing","hide","children","footer","size","hideFooter","hideHeader","bodyClasses","header","hideClose","modalSize","hideIsTriggered","setHideIsTriggered","node","useRef","onKeyPressed","document","addEventListener","handleClickOutside","current","contains","classList","removeEventListener","ReactDOM","createPortal","FaTimes","getElementById","QuantityInput","available","blocked","idx","handleKeyDown","handleOnFocus","handeClick","soldOut","setValue","handleChange","updateChanges","convertAvailable","availability","realAvailable","renderInput","onKeyDown","onFocus","regularDiv","tabIndex","QuantityGrid","tableRef","createRef","currentRowIndex","cellLength","tableLength","currentCellIndex","realCellIndex","inputsRendered","initialCheck","rows","cells","initialFocus","handleKeyUp","isRight","isLeft","isUp","isDown","handleNextInput","currentInput","select","closest","add","allCells","getElementsByTagName","remove","handleOnClick","field","rowIndex","inputs","input","cellIndex","focus","keys","selectedProduct","colorCode","querySelector","querySelectorAll","clone","el","scrollIntoView","sizes","code","itemKey","myComponentClass","masterId","imgUrl","colorName","sizeCode","sizeName","toUpperCase","availablenos","StyleBean","colorBlocked","deliveryWindow","discontinued","fabricComposition","styleNote","gots","oekotex","organic","ecovero","colorComment","styleComment","whp","msrp","totalDisp","collectionName","navCollection","recycled","b2BColorComment","b2BMasterComment","priceType","ocsno","ocsblended","grsno","getWHPWithDiscount","discount","bean","oekoTex","orderLine","masterid","colorcode","colorname","unitPrice","MoloItem","description2","ean","fabric","refill","seasonSort","shelfNo","deliveryShipmentDate","Date","deliveryWindowLabel","build","colorblocked","itemid","masterno","pricetype","sizecode","sizename","shipmentDate","shipmentdate","today","mapMoloItems","mapped","newStyle","roundAmount","toLocaleString","navigator","language","minimumFractionDigits","ProductOverlay","initialChanges","initialMoloItems","initialSizes","itemsLoading","infoOpen","imageMap","imageMapCurrentIndex","isOverflowed","imageIsExpanded","moloMaster","prices","initialLoadDone","product","renderOrderGrid","lazyLoadMaster","applyBasketChanges","handleOverFlow","renderColors","DetectableOverflow","isSoldOut","changeProduct","textTransform","encodeURI","maxHeight","fontSize","bottom","PropagateLoader","renderSizes","selectedMoloItem","renderHeader","label","Tooltip","content","Position","RIGHT","pathname","queryString","collection","FaExternalLinkAlt","FaExclamation","dangerouslySetInnerHTML","__html","onHandleOpenOrderFlow","renderOrderFlow","hasOrderType","isCurrentOrderType","getOrderType","renderModalContent","imgStr","imageurl","imageOverlay","OekotexImage","xmlns","dir","GotsImage","OCSnoImage","OcsBlendedImage","startsWith","GRSNylonImage","GRSMixedImage","GRSnoImage","OrganicImage","EcoveroImage","RecycleImage","price","linediscount","marginTop","renderFooter","image","onHideModal","createStyle","checkOrderType","productState","grouped","groupedSorted","groupKey","diffPrices","showModal","ProductListItem","hidePrice","imageUrl","inBasket","FaComment","LazyLoadImage","threshold","visibleByDefault","scrollPosition","placeholderSrc","shirtImg","getPriceString","applyFilter","resetFilter","reset","productListCategorySort","productGroupSortArray","FilterHelper","isInitialFilterReady","filterIsEmpty","resultByFilter","newStyles","chunks","group","subCategories","original","productGroup","uniq","productCategory","cloned","sustainabilityItems","ocs_100","ocs_blended","grs","hydrateSeasons","hydrateProductGroups","sortBy","hydrateDeliveryWindows","hydrateProductCategories","hydrateSustainability","sustainabilityFilters","hydrateProductCategoriesByCollectionSort","categories","sorted","keysNotInSort","cat","keysInSort","CheckboxInput","checked","htmlFor","AccordionPanel","accordionPanelRef","open","stateClass","accordionStyle","handleClick","scrollHeight","updateHeight","heading","FaChevronDown","FilterComponent","searchTerm","getFilter","productGroupConfig","filterState","initFilters","componentWillUnmount","groupName","rule","includeStyles","include","delta","ORproperties","ORpropety","local","findIndex","onFilterSelectionSeason","selectedSeason","selectedSeasonIsActive","changeActiveFilters","onFilterSelectionProductGroup","selectedProductGroup","selectedProductGroupIsActive","onFilterSelectionSustainability","selectedIsActive","onFilterSelectionDeliveryWindow","selectedDeliveryWindow","selectedDeliveryWindowIsActive","onFilterSelectionProductCategory","selectedProdoctCategory","selectedProdoctCategoryWindowIsActive","filterType","filterValue","isActive","tempResult","filterTypeIndex","splice","showFilter","sustainabilityName","productGroupName","productCategoryName","StickyHeader","showGoBack","goBack","onSticky","onUnSticky","isSticky","setSticky","top","innerWidth","container","throttle","handleScroll","getBoundingClientRect","FaChevronLeft","trackWindowScroll","elements","handleOnProductClick","lineDiscount","isInBasket","lazyLoadMoloMaster","loadItems","hasMore","loader","ClipLoader","element","rendered","masterColor","quantityLabel","InfiniteScroll","pageStart","loadMore","useWindow","getCollectionsSuccess","setFetcingCollectionMasters","getCollections","orderTypeName","getCollectionMasters","mapStyles","getCollectionMasterSuccess","setDeliveryWindows","products","allDeliveryWindows","uniqueWindows","setDeliveryWindowsSuccess","CollectionApi","_g2","SvgFilterIconBlack","fill","cx","cy","r","ProductList","productSortedByCategory","tempProductListStyle","rowGap","cursor","gridTemplateColumns","gridColumnGap","listStyle","padding","productOverlayComponent","filteredStyles","selectedSustainability","stickies","listIndex","infiniteLoaderCurrentIndex","chunked","currentCategory","showInSeasonOnly","productSortedByCategoryAsMap","Map","sortBySeasonMaster","gbs","array","reduce","objectsByKeyValue","obj","sortKeys","years","substring","year","mappedInSeasonOrder","set","orderBy","newSort","forEach","handleOnChangeProduct","newChanges","history","line","categoryName","updateItems","counter","has","get","nextElement","componentDidMount","filterHasChanged","withOutNOS","latestYear","inSeason","getProductCategoriesAsMap","next","ignoreFilter","getProductCategories","inCat","productMap","masterIds","renderCategory","renderOverlay","useProductOrderType","simple","useInfiniteScroll","InfinityList","FilterIcon","ProductListContainer","loading","init","collectionState","EditNavOrderContainer","allowedTypes","col","c","CollectionChooser","sortedCollections","isOdd","num","replaceAll","CollectionListContainer","a","b","collectionStore","CreateOrderModal","initialState","showOverlay","forceReset","handleCommentChange","MyMolo","_this","formData","newPassword2","errors","showErrors","shopNavOrders","editableNavOrders","loadingNavOrder","loadingShopOrders","handleSubmit","FormData","checkErrors","handleOrderClick","isNavOrder","navOrderResponse","createdapporderid","shouldHide","onChangeShop","currentShop","isAlreadyOpen","renderNavOrderTable","beingmodifiedby","orderidcreated","orderidmodified","shiptoaddress","shiptocity","shiptocounty","inscanner","orderisfinal","externaldocumentno","Tabs","selectedIndex","onSelect","TabList","Tab","TabPanel","noValidate","required","should","show","isProfile","FileApi","createOrderImageZip","downloadZipFile","createCustomerDropZip","createCustomerUnshippedItemsZip","createCustomerBSLItemsZip","createCustomerMultipleDropZip","ProductDownloadModalContent","generatingFile","shopDeliveryInfo","futureDrops","previousDrops","futureDropsGroupedBySeason","activeSection","groupBy","dummyResponse","daystoseasonstartshipping","groupBySeason","handleDropClick","href","onClickPreviousDrops","drop","renderDrops","drops","info","deliveryshipment","toLocaleDateString","left","SearchBox","isSearching","setIsSearching","currentIndex","setCurrentIndex","filteredSuggestions","setFilteredSuggestions","debouncedSearchTerm","delay","debouncedValue","setDebouncedValue","handler","clearTimeout","useDebounce","useHistory","inputField","then","complete","simpliFied","s","handlekeyDown","direction","handleQuery","clonedQuery","close","handleAutoCompleteClick","suggestion","persist","onChangeHandler","FaSearch","PulseLoader","highligted","RegExp","formatStringByRelevance","ShopDropDown","onClickCreateOrder","onClickDeleteOrder","hideDelete","onClickMyMolo","onClickProfile","onClickProductDownload","showProductDownload","handleToggle","FaUserCircle","deleteOrderText","Dropdown","identifier","multi","allOption","allLabel","extraLabel","DEFAULT_PLACEHOLDER_STRING","onClickSelected","isItemSelected","Array","isArray","val","printValue","v","join","stopPropagation","trigger","FaCaretDown","valueRender","isFunction","isString","renderExtraLabel","FaCheck","ShopOverlay","onClickConfirmDelete","useDispatch","onClickDeleteOrderConfirm","CountDown2","intervalId","setIntervalId","setCounter","dateFromCurrent","setDateFromCurrent","dateFrom","iid","setInterval","timeLeft","toISOString","getTime","clearInterval","ms","delim","showWith0","hours","Math","floor","minutes","parseInt","convertMillisToTime","checkMonthGaps","months","monthNames","newMonths","shippingDate","month","currentMonth","nextMonth","diff","monthDiff","newMonthDate","newMonthYear","getFullYear","monthNumber","getMonth","newMonth","addMinmumMonths","firstMonth","lastMonth","reneDiff","monthsToAdd","nmy","otherClone","setMonth","d1","d2","positionDrops","orderDrops","dropsSorted","dropsSortedByPosition","1","2","3","4","5","dropsForMonth","toString","m","weekcount","getWeekCount","weeksInMonth","getWeeksInMonth","weekNumber","getWeekNumber","yearStart","first_day_of_month","first_week_number","ceil","getDay","last_day_of_month","month_number","firstOfMonth","lastOfMonth","used","getDate","UTC","setUTCDate","getUTCDate","getUTCDay","getUTCFullYear","formatDate","dateObj","format","isNaN","isValidDate","day","pad","n","ShippedOrdersCalendar","showLeftArrow","showRightArrow","showArrows","arrowsInitialized","gotIt","handleResize","scrollWidth","clientWidth","onClickGotIt","onClickFilterGroup","scrollLeftRight","scrollLeft","setupMonths","TweenLite","duration","opacity","stagger","date","newMonthsWithMinimumMonths","setupDrops","dr","shippingFrom","shippingdateVisual","delivreryShortdescription","deliveryPrintdescription","nooftrackingcodes","postioned","onClickDrop","onClickViewTracking","$index","gridRowStart","gridRow","renderMonths","gridTemplateRows","onScroll","FaThumbsUp","Icon","icon","iconSize","groupedBySeason","OrderHeader","orderHeader","userName","salesbookuser","orderstate","navorderId","selltocustomername","sellToCustomerName2","selltocustomername2","selltoaddress","sellToAddress2","selltoaddress2","selltocity","sellToContact","selltocontact","sellToPostCode","selltopostcode","sellToCounty","selltocounty","selltocountry_regioncode","sellToPhone","selltophone","sellToContactEMail","selltocontactemail","shipToCode","shiptocode","shipToName","shiptoname","shipToName2","shiptoname2","shipToAddress","shipToAddress2","shiptoaddress2","shipToCity","shipToContact","shiptocontact","shipToPostCode","shipToCounty","shipToCountry_RegionCode","shiptocountry_regioncode","shipTo_Firstname","shipto_firstname","shipTo_Lastname","shipto_lastname","shippingComment","shippingcomment","shipToEMail","shiptoemail","shipToPhone","shiptophone","salesPersonCode","salespersoncode","orderLinediscount","orderlinediscount","orderComment","ordercomment","orderAccessId","orderaccessid","vatRegistrationNo","vatregistrationno","orderNeedsFollowUp","orderneedsfollowup","externalDocumentNo","poOpen","poopen","poClosed","poclosed","removeFreigth","removefreigth","navimportref","removeHandlingFee","removehandeligfee","buildFromB2B","bgcolor","TrackingModal","trackingBsl","trackingLinks","setTrackingLinks","links","isFecthing","setIsFetching","getTrackingLink","Spinner","List","sx","component","aria-label","link","ListItem","button","trackinglink","parcelno","Divider","ShippedCalendar","showTrackingModal","setShowTrackingModal","setTrackingBsl","anyunshipped","outstandingQuantity","allShipments","getShipments","getDeliveryWindows","deliverywindows","shipped","minHeight","RingLoader","onHandleClickBSL","hideEditLink","SidebarMenu","showSidebar","childRef","onClose","OrderSummary","selectedCategory","categoryChanged","showDownloadLink","scrollableElement","hasOverflow","setHasOverflow","clientHeight","lineHeight","category","hidePrices","onClickHandler","salesOptions","revenue","orderlines","totalDiscount","orderline","linediscountAmount","parseFloat","totalDiscountAmount","getSalesOptionsTotal","colSpan","onDownloadProductImages","float","backgroundColor","paddingTop","FaDownload","marginLeft","dividers","groupings","divider","linesWith","valueKey","labelKey","groupSimilarColors","q","g","DIVIDERS","singularTitle","isCalendarView","ShippedItemsOverview","sidebarOpen","setSidebarOpen","activeItems","setActiveItems","setproductSortedByCategory","helper","onChangeCategory","groupedOrderlines","FaArrowLeft","getSizes","DashboardFilterHelper","topCollection","productgroup","productcategory","ecovery","hydrateCollections","DeliveryWindows","showContextMenu","ContextMenu","Menu","MenuItem","text","clientX","clientY","isContextMenuOpen","FaPen","StyleCarousel","slides","interval","slide","slideClassName","ChartSummaryHighcharts","chartQuantifier","chartOptions","chartOptionsDesktop","drawChart","subGroup","toFixed","chart","fontColor","credits","enabled","plotOptions","pie","animation","easing","shadow","borderWidth","center","showInLegend","dataLabels","align","distance","crop","formatter","point","colors","legend","layout","verticalAlign","itemStyle","itemMarginBottom","series","inside","softConnector","innerSize","toggleQuantitfier","HighchartsReact","highcharts","Highcharts","options","ConfirmModal","Details","showDeleteModal","modal","isListView","showSizes","rrpMap","allSizes","componentRef","openDeleteModal","onHide","onClickDelete","onHideProductOverlay","disableActions","renderTableHeader","renderTableHeaderPrint","getSustainability","renderTableBody","withSubtotal","filterByValue","quantityShipped","unique","humanReadableLineUnitPrices","totalLineDiscountAmount","lineDiscountPct","totalLineAmount","getStyleBean","groupedMoloItems","renderGrid","quantityOveride","renderPrint","groupedByDeliveryCode","groupByDeliveryCode","sortedWithGroup","groupByProductGroup","FaCircle","deliveryGroup","values","isLast","allTheValues","spread","union","totalQuantity","deliveryshiptmentdate","textAlign","marginRight","FaList","FaTh","ReactToPrint","FaPrint","DashboardFilterComponent","onClickGoBack","selectedCategoryIsActive","onFilterSelectionCollection","selectedCollection","selectedCollectionIsActive","hideGoBack","onClickCloseFilter","deliveryWindowName","Dashboard","salesOptionsTotal","showDeliveryModal","basketIsEmpty","filteredOrderLines","filterInitialized","dashboardLoading","masters","loadingMasters","changedFilter","overflow","FaCaretLeft","resetDashboard","confirmed","DashboardOverlay","activeOrder","setActiveOrder","setGlobalState","loadingSeasons","loadingCollections","showProductOverlay","newState","getGroupedMoloItems","getRRPMap","getAllSizes","filtered","Overlay","renderPreview","OrderPreview","level","OrderTableRow","expanded","onClickOrder","onClickViewOrder","openOrders","statusClass","paddingLeft","orderdate","ShippedOrdersOverlay","setOrders","selectedBSLItems","setSelectedBSLItems","setShowSidebar","setSelectedShop","isFetchingItems","setIsFetchingItems","searchString","setSearchString","setinitialized","setOrderTypes","selectedOrderType","setSelectedOrderType","selectedStatus","setSelectedStatus","allStatus","setAllStatus","filteredItems","setFilteredItems","activeOrderIds","setActiveOrderIds","showDashOverlay","setShowDashOverlay","activeViewOrder","setActiveViewOrder","getInitialShop","filterItems","orderQuantity","allOrders","InvoiceCustomer","spliced","filterByOrderType","filterByOrderStatus","onCloseSidebar","valueOf","renderSidebarMenuContent","sum","li","qty","onUpdateOrder","onFetching","isNavOrderTable","isImported","option","onClickOption","OpenOrdersBody","setOpenOrders","setClosedOrders","openFilteredItems","setOpenFilteredItems","closedFilteredItems","setClosedFilteredItems","openItems","closedItems","openOrdersResponse","navRefs","split","openStuff","navRef","ot","fetching","AllOrdersOverlay","setTabIndex","ti","Header","showOrderModal","showNavOrderModal","isCheckoutPage","showSearch","showShopOverlay","showDeleteOrderModal","showMyMolo","myMoloIsProfile","showShippedOverlay","setMenuItems","toggleSidebar","onClickSetCollectionType","editMode","onClickSetOrderType","onClickSetDeliveryType","onClickSetSustainability","onClickSearchIcon","onClickShopIcon","showCreateOrderModal","openNavOrderModal","onClickLinkHandler","onCLickChangeDashboardOrder","upcomingLabel","renderLinks","del","renderOrderDropdownItem","useLabel","includes","dropDownItems","hoursLeft","createdUtc","recent","isDashboard","FaTrash","from","limit","DeleteOrderModal","deletedOrder","MyMoloOverlay","ProductDownloadModal","BasketDropUpItem","setShowModal","BasketDropUp","showDropUp","setShowDeleteModal","setOrderHandler","onClickCreateModal","isFetchingOrder","FaAngleUp","BasketComponent","previousNonDashboardUrl","isCheckout","isDetailsPage","showGotItModal","showGatherModal","showDashboardLink","showDropup","showContinueShopping","FaShoppingCart","showCheckoutLink","grupedDeliveryWindows","forceAlert","FaChevronRight","MainContainer","userSate","hideBasket","DownloadOrderImagesModal","downloadURL","setDownloadURL","downloading","setDownloading","getFile","CheckoutContainer","selectedAddress","showNewShipTo","countryCodes","defaultCountryCode","orderIsProcessed","orderIsBeingProcessed","showDownloadModal","showDownload","onSelectAddress","onSelectNewAddressOption","renderShipping","addressid","postcode","fontStyle","textDecoration","handleOnSubmit","processedOrderId","multiAddress","getNewAddressValues","checkoutData","entry","entries","File","substr","onChangeValue","toggleShowShipTo","renderShipToGroup","preFill","defaultValue","CountryCode","countryCode","renderMoreOrders","handleOnClickDownloadImages","renderConfirm","renderCheckoutForm","borderBottom","FaTruck","right","CSSTransition","in","timeout","classNames","paramOrderId","orderSelectedAddressId","orderSelectedAddress","MoveDropModal","onSelectSlot","slot","currentDrop","start","end","moveDrop","deliveryChanged","resource","moment","renderBody","Calendar","defaultDate","dateClick","selectedText","startDate","getMoloItems","mapAllMoloItems","mastersRequest","masterResponse","reMapAllsizes","theArr","zidex","orderLinesToUpdate","sizeToUpdate","allDay","dropMoved","sizesToRemove","l","origin","shouldUpdateOrderlines","shouldInitDasboard","initDashboard","SearchPage","suggestions","loaded","noResult","prevPage","doSearch","result","searchQuery","splitted","aCompare","bCompare","formatAllStringsWithRelevance","doQuery","that","innerHTML","path","paddingBottom","BounceLoader","Input","inputType","Button","handleCLick","Login","formValues","redirectToReferrer","UNSAFE_componentWillReceiveProps","nextProps","referer","Redirect","backgroundSize","backgroundRepeat","backgroundPosition","background","borderRadius","process","Logout","userIsInvalid","ForgotPassword","backgroundImage","StockHasChangedModal","isConfirming","ensureStockHasChanged","fetchingOrderId","confirmChanges","renderContent","was","isnow","currentOrder","prevOrder","shouldCheck","LookUpNavOrder","orderNotfound","SvgDownloadIconLarge","fillRule","SvgDownloadSuccess","ProductDownloadImagesPage","previousStep","isGeneratingFile","downloadSucceded","dropStep","downloadAction","selectedDrop","currentDropsGroupedBySeason","currentDrops","consolidateGroups","season","dropKey","similar","other","pseudoGroup","daysfromtoday","dropsInluded","onClickGetFile","dropsToDownload","onClickShop","onClickDropType","dropType","onClickSeason","seasonName","renderLastStep","DownloadIconLarge","DownloadSuccessLarge","renderSeason","renderDropTypeChooser","renderShopChooser","disabled","EditOrderHandlerOverlay","continueEdit","closeOrder","submitOrder","editableOrder","initializeInterval","validate","presentDate","orderCreated","onChangeOption","isAuthenticated","PrivateRoute","containerType","routeComponent","desktopOnly","rest","RouteComponent","renderShopContainer","Route","DashboardContainer","App","alerts","appUserHasBeenValidated","showCriticalModal","setShowCriticalModal","criticalMessage","setCriticalMessage","createBrowserHistory","listen","toast","dismiss","timer","timerForBuild","checkVersion","buildResponse","localStorageBuild","buildVersion","reload","CriticalModal","success","ToastContainer","POSITION","BOTTOM_LEFT","autoClose","closeButton","Router","exact","Switch","PreOrderChooser","Provider","store","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.a350a03a.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/oekotex.bf803c99.png\";","module.exports = __webpack_public_path__ + \"static/media/gots.1578fd39.png\";","module.exports = __webpack_public_path__ + \"static/media/recycled.17b57f5c.png\";","module.exports = __webpack_public_path__ + \"static/media/organic.bd9b60d6.png\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASQAAAA8CAYAAADPC8euAAAACXBIWXMAAAsSAAALEgHS3X78AAAP60lEQVR4nO1dXW7bOhZmBvM2BpIB5t25K4i7ArsLGEd3BXFWUN8VNFnBuCuIs4Kq3kDjFdR+H6D2Cm4M+L0DZj7mMoykc0geSpatDwhQ1xJFU+THw/N79o+v/35SSg3VgWCfLc44Penl40ul1CU+rvbZ4tn5fqCUuii5fYV7zfebfbbYFN27zxZPvXw8Irpj7n3tD+43n5/32WJV1HfdfsHvyqy+5ebeXj6eKKX+pZT6L9p8c2/BGOnf8YPo++M+W0yIa2pBLx/PlFKfiGd9sMeyw+Ggl4/LuGSplLpTSn3H5z/22WJmvrTuW/69xe9TL6LP+PdHpZS7OGcVRPsRA2S+32kisEjNvvfMGsgy3OP/7f6MrM960H+zSM/u+xm+1wQ0V0pdO8/43MvHS9yzAVHN0cdKQtILt5ePt0qpfsVlmX62S+gNgSLGbUdGBw3zbi4x57aYs+47m2L+mk3zdZ3+7dRHEDgHQaXEvKxtkNFTARkZDPH9T6XUV5BdaXsOqOvOIZE1il4+ztCXmN/SoUHss8V0ny3suTnXn/X/O73qW6eON9+dAiGtIbHYf0W77KeKo5l7/6Pzfc7oxxCLrgj6pVzZ/cXR9QM+K+w4t/ts8SIl2EdMApxFfAhHNk4fOkI6HkyxEes1sTO/6hQI6UXX4vyVHU9mRf9p3wtx9Mb6+tbjGDHHS3Bhdgn9YkZGN4R2RxB9H6kjWknfNzjDV2EI3VUjwJiUSYcG3zxIuMPhYon5fI1Tybm97tqsQ+JCL7Zf1rVLiJU2ljgWXfXysStevgLnXZu07vfZgrNrP4LEzNHwlRBBBOaoohXYz47CXlnSQ6ieZ84wXGRlhFwDONIRRwrt0A7MoUM1BoyZ0al2OqT/w14Qdw4ZvMDS8xjy0NYprt5paomlnyD1GNjPspXe3wv+Qgkjt8Xiij42BYqQdkzi79AO2PP40T6xcCSkrbVQ2oito3t491v0UaCXj+/B0ueucrWAjNY+CxhSj77+Af81tL7TbgXmY5ZCuY7n585R04VWNA7qtmJBGrwiLuvI6IiA+WhODW82WQ4hzT0kgUPEhtN/fQ38fIpM5DNr0Wyh5/E6PukdHu2X+WmYI+ME/X3pMxTtxu0gZmOYE4SkIKnULSlxntfUUbJDAOz5awC96Jn1eWJLxsb/8Fh0SLNePrYJwt7lB3C8slG2CCauzxEIwV3IuSXVKI8dfIK+ueZt22nsAcSl+zxwlL3BkgIkMconqQlColwO1p0y+3RwLDqkK0gY5m9gfXfufDcs8+AGi7smfRf9gvZYFiosrHe7PZ57a/3XEMdHm4xuKc9sBkifpArXBHHgWVUEqTrp6LTQZgmpypxN6UGeK66ZOgTzzDCbmx3cXPdc1j8cDd+FteBIt8LzjZPgDpLSTICMlGXdqMKkRosWRX67zrp2WuDEst23XIfUwUJFvJGNf6YOJYGh4E/isoOJs+tQDzqz/+mBo4eq49jGeUZnXTsxdIR0ejgUnyROIK3EMbVDi9AR0okBRzFKL3OVMpQEbVPHxk6ZfYLoCOk0wTkKpZSSulCRDoU4+lg2+BFdOK4AClawTVFytyZQZz+ZPklZQlKiCEkskBbK8wH+bMumsbRuTtXPyYqZLEpm+OQmFqwDR0dIVsbFjJsJE4vzCV7ptegtYPqfIK6NCp0w96ytfsZOFMoF4CVnjfR4gHgp36MoZTbmgHGfoJ6lrzfuFbkJcI55vnpLhGUoJUJrDptNyszjNUiCymBa1a/MartqbD7jegX3FTM2Scn7aMz+eIl3jPAICpqc7lIFc2JCTAXSBkf1E+P1k7hM3Ozey8dUCIsOpC1LPUy1PXIygYZgB/3VLIaYnJCfIrxbV9z+c9M8W+1eYM6VhUb54JugX9w7tF6HpAcbuZh/CpCRwgvT4RsrSDEi0G3BB+irUA7zqH4y8ySlMP9TbXoTrDUHvguM7Tmkgw1CeGqBYP/fABvgBr8plowUoge+642lJLdXFFpNSFiIK0Zi+BDoY9STxKREpP+PRMUUdD9/9PJxiBTLCSURW5Roi0pT62VdSzgHzkH4SX2hQKbi/Ue7OTZAasxDcAPSDj4+FqG1hGQFoEqwfhnOrWDX0H7qCf2fhH00+Oy7eHDco3ySJKUk0UBakFHqOXADKVRcGgDmXB0iF4wc7VI4h7Qktmm1kpAwAA+JmL8IQaTE0JdI4yZgR6fM69cSPklog1ogbOnIIqM65sBVCq9xSLWipGGRkSjJEYjatG20jpAK0sjWhQcfXQ10AiFktHT+fOFLSpyxlJCSxAJpA8loCYXsvTW+PrgOPBaX4ZIR6OyFCDLaOXNuzbjHxYNEpgiO2X8k/CKK8MTR2mPAc4+JuLXMlW5BRuObUpY0rQhzwpRr2s48dAJmIc7KTPmWiwBHB6PMMcMuxlcGZu22icAmQPk0+Zjb58xxWGJcS4nOMoNzNg99LM6FfHNSSM4zDzLa4vpSUz7GZuIhxc2RdTTYNeBQKteyXAs8jkB6kU+5JnEo5rgvs7KvIM0Nc8HoHXvCXYho+45JdnoMWJMDSndKzxVcMZZZQfcjc1O6Y0gWO4wr29sbfeToc4qKRBS1R5n9KdhFFp9tp9mi54M8vjLa3cFdxPd4zNV1scanDK1xjCzJ3FiEtW+KWatcNueYNSXyXs+YZHTr60OE3zSFVYZ6jikvwxGjcwYhxWSTFAmkhR6KQ0YjX/KEpDhiHHmGKRxGAeMDNfdU7l8wJVhNclnI2CDzKkcgGCINc5DOrU06JM6x0ZuMDPQ9cAKkdAulpnAsGA5pepOR09c5k2iuOWZZTP5vxGUx+gGKkLi7NTUHgsjIAPPG1MGrQoqQGj3+upz7XcCRZ8qwNBqJOfi4ifVBZVRVMYUqWkFIbv3vEuxCychBFmEK57wIbi23SmCH/oNxKdf6QR1v+iFKS2aJbPJoBSmAIvu7WP0O5g81ZiKWRwvaI15LLqFzl/OOJdaGYm7a/VCrW1skJM6Pi3mhrzDHoopLdhXVP6gFu5UMw4EegJocNxwfmoQ+SVKBtJxjn4j1FWRPjauUQ+A6JjyHmZf8XjhIlrUeQxpuCyFRP24peaYvWZxrJOLXYvU7wmJKAimslZw2uZODklRY5GbALJHtU7GlCtJjS/VLymE01n+H404h6iaDDYQ6ul2HOJMePCHhuNZEZQqzOB9hAdLn73mFFMaRjsSd60DElN8Id/FI+yRxKtJyj2uUhUc6fxK1wUlISEsByYWMDUyUXkdyI3wFx8r2WENu4yqRnXrxrEkdgDvoJLgKRso/KWXCMSo8hbV4PHySpKQabjvU2G6lFx2qGVddoo0bF5HPjU2zMmBI5UnWLsZnTWwU3kHfHELaNJzbmFIeJulbgKWj7h3cBjUGevFcMn/TjCC3IactZolsrmTL8ftpIkXOIHL+xc5dam3sEidYy5sgpKZB/ahaM9oVgRlSkqyfkGyoyy6Zpbi5PkkUAVCmcZ9AWkoX0ZcOw6gDAsnOml4bVPveDtfHkFP7ENKPcqxYqdPkUnokloKR6ZMkYWXx0fuJ5aUSRoweKSRO0QX1TlMTkvicbgMhUSzbhnzIIcGKvqAmh8+i5vgklbbHMEV3FWllQL3TpJtgClVOV3WkHjReRMAHTJ+kqiMZJR2J5K3ucHzoCKlDGSgJppB0mB7Vx1KRtiNVYbSBkER0Iw3jEHQgvkdbSsdzXhJKwvHHOpaKtE0bVBpVV0jmnDdog5WNoxs5dH1EHVkNRXVtsNxRfiaTgrGXCqS1Qc2BVlTGSQDqnYrmuy7ASSb5pwY9WclnD5A7pXQydKdtzhiEHC+oo9Wb8ABmieyQzYMa3zZIySlAvdPUa4OSkLyNOcdASKl3ARJQ0FJK4JTHNk6KkZDjBUfXMyn5dxFCK9JSfW98DjQEalz6wlkJXFDj7v2u20BIlL6h0gQdA9Se4k52qp8pa3yRwcchjYJofXySpEJFXFAL7ypVVZDECzoKTF1citp63MBpb13hwRMSBj3GBB0EKGxvUOZlxcjvQg3+VYrJzazmEaNEpkjk5XcxSmQHxxxCqqKSpiVZeJoMe/lYx23NUm18kaA2mxTJ5BRzvI+PkABOWgzpxW6/yCtUVdAT865kN+YsthSKV86EC1b6g0Q4G0Iq6ciA+g3iY2sVtuwjj/kPzIHpAUlOHCfWFNI5Nd7bEDVBWwiJM5nFfFuw2xcpZ03M1J/uhGSGXNxIKrexY1MJ/9cCAZac3ECSoSIhfeijWIEIrIIK756DWL+fB0JKnHlftokGAYHMVEqg482pjWMbJbIPJcoeW6WWqrAtUc5yFl0uMTnQBuf3SuSKIsmAcG3wqkhbBJAqZbW5EzxWUYsu+jdJAHo+KllaX2rDxobKCWQOmnfHluT/BgUag2AV2gvK/MhMfarbfoohJY+CgCJJ4ZhkUAWpBHqksybGNoqUcMShJM8mipWWgbM2rmM3bIwr5/j/JTQ0qDWEhIXFsRZ90sX8fMVpMP9KYJFzJod+xibk+IZJwemnElZohk5msUBa5hwwpBSk5MZx5IG4LEn2z1BAUvvCuF1v2E8hR00ch38wNutdjD7vUApFvmKfLc7KvvMsobzDIppX6VA8K5dq/E5ZiyClcSvXPlZVrbXavMSL5vZT+/yIWZ4glf0ZcOtjTBL7gn5wik4aLJH1k1PzbYTx5awFsqglo1BkVEHFguddYKOidDvKyrM9oyQZrI+pB0eQ66MKrSIk9Zc4Te1gLkwVUDOJTBVQTgpQG6zFFVhj3ZT93lh+NwN4244C2hpIR9RrydOjrLIBqyKtZz9858Aa72PlOOtdYow5lTsMuHOgVkJS/hv2az9wz8YamxHGhlO4wkb05tOayrUGWlRmWpds9PEXQ7xr7hFIEwEmJLektrJMy7HYSZWEKsDck5CSBNJiDnArGSuQuQ+hl4E9B5oA4g+nnmQ9FBJIoso5GbQy/QjKEHEqaEohpDy3qYJK+fBIIqpyK+M3cXySbCRT/HpUUZVCcFXkOgHd1m3Nj11Lhe+0Nh8SJiSncmssYspzryD61pExcp2SjCz4KHOTKn4xB+5TPgNoBRkZgJR+r2kzfESJMJGxaXWCNlQq/cjwUQrFfexg63t1G4kXzpeayEh5kMy3OhYw0o6knANfJBdcXYA0OxDK3V2EHRTYol7grc8YCR2FWfBSO4J+iR+Ey17rtn4TniBLKI2ndS0YD5+k2sziiefAweqMKGh3ACjOb4UJ+xEVnMXzkGkr2+yQqjrEWB5g3Zrgz1eJafxl5qkzGsKEb+K/fJO3mX6SrgKpACtX1c74LOly4INDmQMwvFTp0FZ1kx1M+JMAS6kCoc05rgIxOPv161eqthsFFv3IMu8X4Rmm4Kem0qpi4o4sE38RjCvA6ojSvyaHNQcuK5Sujc+BJgArpZl3ZVEDL3MOY5M+TEYp9T9iCFERRUsivwAAAABJRU5ErkJggg==\"","module.exports = __webpack_public_path__ + \"static/media/ocsblended.dc8c9cf2.png\";","module.exports = __webpack_public_path__ + \"static/media/ocs.43d20fa6.png\";","module.exports = __webpack_public_path__ + \"static/media/grs.77ffe8df.png\";","module.exports = __webpack_public_path__ + \"static/media/grsmixed.fec4d1e8.png\";","module.exports = __webpack_public_path__ + \"static/media/grsnylon.e83a390f.png\";","module.exports = \"data:image/jpeg;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/swim.f67e02fa.jpg\";","module.exports = __webpack_public_path__ + \"static/media/main.7dcf1665.jpg\";","module.exports = __webpack_public_path__ + \"static/media/outerwear.4008f9f6.jpg\";","module.exports = __webpack_public_path__ + \"static/media/friendship.b80bab3f.jpg\";","module.exports = __webpack_public_path__ + \"static/media/sport.b541e8b8.jpg\";","module.exports = __webpack_public_path__ + \"static/media/sport.0e6a2d56.jpg\";","module.exports = __webpack_public_path__ + \"static/media/outerwear.3d56fcee.jpg\";","module.exports = __webpack_public_path__ + \"static/media/main.f7d7fe19.jpg\";","module.exports = __webpack_public_path__ + \"static/media/sport.48845bdc.jpg\";","module.exports = __webpack_public_path__ + \"static/media/swim.f2331c4a.jpg\";","module.exports = __webpack_public_path__ + \"static/media/outerwear.8c416020.jpg\";","module.exports = __webpack_public_path__ + \"static/media/main.ebcd625d.jpg\";","module.exports = __webpack_public_path__ + \"static/media/sport.6f5132b7.jpg\";","module.exports = __webpack_public_path__ + \"static/media/outerwear.338869ae.jpg\";","module.exports = __webpack_public_path__ + \"static/media/main.7fdecdf4.jpg\";","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\ntype Config = {\r\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\r\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\r\n};\r\n\r\nexport function register(config?: Config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(\r\n (process as { env: { [key: string]: string } }).env.PUBLIC_URL,\r\n window.location.href\r\n );\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl: string, config?: Config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","const baseUrl = 'https://dev2b.molo.com/';\r\n// \r\n// const baseUrl = 'https://b2b.molo.com/';\r\n\r\nexport const appConfig = {\r\n api: {\r\n baseUrl: process.env.NODE_ENV !== 'production' ? baseUrl + 'api/' : '/api/'\r\n },\r\n media: {\r\n baseUrl: process.env.NODE_ENV !== 'production' ? baseUrl : '/'\r\n }\r\n}","import { ThunkAction, ThunkDispatch } from 'redux-thunk';\r\nimport { AnyAction } from 'redux';\r\nimport {uuid} from 'uuidv4'\r\n\r\nexport interface Isuccess {\r\n type: 'ALERT_SUCCESS',\r\n message: string\r\n}\r\n\r\nexport interface Ierror {\r\n type: 'ALERT_ERROR',\r\n message: string\r\n}\r\n\r\nexport interface ICritical {\r\n type: 'ALERT_CRITICAL',\r\n message: string\r\n}\r\n\r\nexport interface IClearAlert {\r\n type: 'ALERT_CLEAR',\r\n id: string\r\n}\r\n\r\nexport interface IAlertPayload {\r\n message: string,\r\n type: string\r\n id: string\r\n}\r\n\r\nexport interface IAlert {\r\n type: 'ALERT_ERROR' | 'ALERT_SUCCESS' | 'ALERT_CRITICAL'\r\n payload: IAlertPayload\r\n}\r\n\r\nexport type AlertActions = IClearAlert | IAlert | ICritical\r\n\r\nexport const setAlertAction = (message: string, type: string, id: string): IAlert => {\r\n return { type: 'ALERT_SUCCESS', payload: {\r\n message, id, type\r\n }}\r\n}\r\n\r\nexport const removeAlertAction = (id: string): IClearAlert => {\r\n return { type: 'ALERT_CLEAR', id }\r\n}\r\n\r\nexport const setAlert = (message: string, type: string): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n const id = uuid()\r\n \r\n dispatch(setAlertAction(message, type, id))\r\n\r\n setTimeout(() => dispatch(removeAlertAction(id)))\r\n }\r\n}","import { ThunkAction, ThunkDispatch } from 'redux-thunk'\r\nimport { AnyAction } from 'redux'\r\nimport axios from 'axios';\r\nimport { appConfig } from '../../config';\r\n\r\nimport { setAlert } from '../alert/actions';\r\n\r\nconst baseUrl = appConfig.api.baseUrl;\r\n\r\nconst clearLocalStorage = () => {\r\n const keysToRemove = [\r\n 'previousNonDashboardUrl',\r\n 'order',\r\n 'recentClosedOrders',\r\n 'token',\r\n 'search:prevPage'\r\n ];\r\n\r\n for (const key of keysToRemove) {\r\n if (localStorage.getItem(key)) {\r\n localStorage.removeItem(key);\r\n }\r\n }\r\n}\r\n\r\nexport interface ILoginUserToken {\r\n type: 'LOGIN_USER_SUCCESS',\r\n token: string\r\n}\r\n\r\nexport interface ILoginUserError {\r\n type: 'LOGIN_USER_ERROR',\r\n error: string\r\n}\r\n\r\nexport interface ILogoutUser {\r\n type: 'LOGOUT_USER_SUCCESS',\r\n}\r\n\r\nexport interface IIsUserValid {\r\n type: 'USER_IS_VALID_SUCCESS',\r\n user: AuthUser,\r\n}\r\n\r\nexport interface IIsUserValidError {\r\n type: 'USER_IS_VALID_ERROR',\r\n isValid: boolean,\r\n}\r\n\r\nexport type UserActions = ILoginUserToken | IIsUserValid | IIsUserValidError | ILogoutUser | ILoginUserError\r\n\r\nexport interface IUser {\r\n email: string\r\n password: string\r\n}\r\n\r\nexport interface AuthUser {\r\n currencyCode: string\r\n customerData: any\r\n email: string,\r\n disallowedTypes: string[]\r\n}\r\n\r\n// Action Creators\r\nexport const loginUserSuccess = (token: string): ILoginUserToken => {\r\n return { type: 'LOGIN_USER_SUCCESS', token }\r\n}\r\n\r\nexport const loginUserError = (error: string): ILoginUserError => {\r\n return { type: 'LOGIN_USER_ERROR', error }\r\n}\r\n\r\nexport const logoutUserSuccess = (): ILogoutUser => {\r\n return { type: 'LOGOUT_USER_SUCCESS' }\r\n}\r\n\r\nexport const userIsvalidSucces = (user: AuthUser): IIsUserValid => {\r\n return { type: 'USER_IS_VALID_SUCCESS', user }\r\n}\r\n\r\nexport const userIsvalidError = (): IIsUserValidError => {\r\n return { type: 'USER_IS_VALID_ERROR', isValid: false }\r\n}\r\n\r\nexport const loginUser = (email: string, password: string): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n // dispatch(alertClear());\r\n try {\r\n const response = await UserApi.loginUser(email, password);\r\n \r\n if (process.env.NODE_ENV !== 'production') {\r\n localStorage.setItem('token',response.data.token);\r\n }\r\n dispatch(loginUserSuccess(response.data.token))\r\n } catch (error) {\r\n dispatch(setAlert('The user name or password provided is incorrect.', 'error'))\r\n // dispatch(setAlert(error.response.data.message, 'error'));\r\n }\r\n }\r\n}\r\n\r\nexport const isUserValid = (): ThunkAction, {}, {}, AnyAction> => {\r\n // Invoke API\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n let devToken = undefined;\r\n\r\n if (process.env.NODE_ENV !== 'production') {\r\n devToken = localStorage.getItem('token');\r\n\r\n if(!devToken) {\r\n dispatch(userIsvalidError());\r\n localStorage.removeItem('user');\r\n clearLocalStorage();\r\n return;\r\n }\r\n }\r\n \r\n try {\r\n const response = await UserApi.isUserValid(devToken);\r\n\r\n let disallowedTypes: string[] = [];\r\n\r\n if (response.data && response.data.disallowTypes) {\r\n const types = JSON.parse(response.data.disallowTypes);\r\n disallowedTypes = types.map((type: any) => type.OrdertypeType.toLowerCase())\r\n }\r\n\r\n const authUser: AuthUser = {\r\n currencyCode: response.data.currencyCode,\r\n customerData: JSON.parse(response.data.customer),\r\n email: response.data.login,\r\n disallowedTypes\r\n }\r\n dispatch(userIsvalidSucces(authUser))\r\n \r\n } catch(e) {\r\n console.log(e, 'error')\r\n if (process.env.NODE_ENV !== 'production') {\r\n localStorage.removeItem('user');\r\n clearLocalStorage();\r\n }\r\n dispatch(userIsvalidError());\r\n }\r\n }\r\n }\r\n\r\nexport const logoutUser = (): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => { \r\n try {\r\n console.log('logout called')\r\n await UserApi.logoutUser();\r\n clearLocalStorage();\r\n dispatch(logoutUserSuccess())\r\n } catch (e) {\r\n\r\n }\r\n }\r\n}\r\n\r\nexport const updatePassword = (email: string, oldPassword: string, newPassword: string): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => { \r\n try {\r\n const update = await UserApi.updatePassword(email, oldPassword, newPassword);\r\n\r\n if (update) {\r\n dispatch(setAlert('Your password has been updated!', 'success'))\r\n dispatch(isUserValid())\r\n } \r\n } catch (e) {}\r\n }\r\n}\r\n\r\n// API.\r\nexport class UserApi {\r\n static loginUser = async (email: string, password: string) => {\r\n const url = baseUrl + 'Users/authenticate';\r\n return await axios.post(url, {email, password});\r\n }\r\n\r\n static isUserValid = async (devToken?: string) => {\r\n const url = baseUrl + 'Users/Me';\r\n \r\n if (devToken) {\r\n axios.defaults.headers.common['Authorization'] = 'bearer ' + devToken;\r\n }\r\n \r\n return await axios.post(url);\r\n }\r\n\r\n static logoutUser = async () => {\r\n const url = baseUrl + 'Users/Logout';\r\n return await axios.post(url);\r\n }\r\n\r\n static resetPassword = async (email: string) => {\r\n const url = baseUrl + 'Users/ResetPassword';\r\n return await axios.post(url, null, {params: { Email: email }});\r\n }\r\n\r\n static updatePassword = async (email: string, oldPassword: string, newPassword: string) => {\r\n const url = baseUrl + 'Users/UpdatePassword';\r\n return await axios.post(url, null, {params: {\r\n email,\r\n oldPassword,\r\n newPassword,\r\n }})\r\n }\r\n}","var _style, _g;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from \"react\";\nconst SvgMoloLogoBlackWs = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_1\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 1054.07 597.35\",\n style: {\n enableBackground: \"new 0 0 1054.07 597.35\"\n },\n xmlSpace: \"preserve\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _style || (_style = /*#__PURE__*/React.createElement(\"style\", {\n type: \"text/css\"\n }, \"\\r\\n\\t.st0{stroke:#000000;stroke-width:0.25;stroke-miterlimit:10;}\\r\\n\")), _g || (_g = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"polygon\", {\n className: \"st0\",\n points: \"392.53,410.71 381.06,279.58 341.01,415.22 309.93,417.94 245.41,291.73 256.86,422.58 219.11,425.88 201.76,227.53 249.57,223.34 321.33,362.36 365.26,213.22 413.12,209.03 430.48,407.39 \"\n }), /*#__PURE__*/React.createElement(\"rect\", {\n x: 623.62,\n y: 189.34,\n transform: \"matrix(0.9962 -0.0872 0.0872 0.9962 -22.7333 57.1069)\",\n className: \"st0\",\n width: 38,\n height: 199.11\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M562.21,322.41c-2.45-28.03-21.48-40.91-41.46-39.16c-19.71,1.72-36.48,17.73-34.03,45.77 c2.45,28.03,21.8,41.44,41.51,39.72C548.21,366.98,564.69,350.72,562.21,322.41 M600.08,319.07c3.92,44.83-25.21,80.2-68.84,84.02 c-43.34,3.79-78.16-25.99-82.09-70.82c-3.9-44.53,25.23-79.9,68.57-83.69C561.35,244.76,596.18,274.54,600.08,319.07\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M802.51,301.38c-2.45-28.03-21.48-40.91-41.46-39.16c-19.71,1.72-36.48,17.73-34.03,45.77 c2.45,28.03,21.8,41.44,41.51,39.72C788.52,345.96,804.99,329.69,802.51,301.38 M840.38,298.05c3.92,44.83-25.21,80.2-68.84,84.02 c-43.34,3.79-78.16-25.99-82.09-70.82c-3.9-44.53,25.23-79.9,68.57-83.69C801.65,223.74,836.48,253.52,840.38,298.05\"\n }))));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgMoloLogoBlackWs, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/Molo_Logo_Black_WS.6a092b58.svg\";\nexport { ForwardRef as ReactComponent };","import * as React from \"react\";\r\n\r\nimport BarLoader from 'react-spinners/BarLoader'\r\n\r\nimport { ReactComponent as Logo } from '../../images/svg/Molo_Logo_Black_WS.svg';\r\n\r\nconst MoloRingloader: React.FC = () => (\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n)\r\n\r\nexport default MoloRingloader;","export interface Filter {\r\n // term: string,\r\n seasons: string[],\r\n productGroups: string[],\r\n productCategories: string[],\r\n deliveryWindows: string[],\r\n sustainability: string[],\r\n collections?: string[],\r\n activeFilters: {\r\n seasons: string[],\r\n collections: string[],\r\n productGroups: string[],\r\n productCategories: string[],\r\n deliveryWindows: string[],\r\n sustainability?: string[],\r\n }\r\n}\r\n\r\nexport const initialFilter: Filter = {\r\n // term: '',\r\n seasons: [],\r\n productGroups: [],\r\n productCategories: [],\r\n deliveryWindows: [],\r\n collections: [],\r\n sustainability: [\r\n // 'gots',\r\n // 'oekoTex',\r\n // 'recycled',\r\n // 'organic',\r\n ],\r\n activeFilters: {\r\n seasons: [],\r\n collections: [],\r\n productGroups: [],\r\n productCategories: [],\r\n deliveryWindows: [],\r\n sustainability: []\r\n }\r\n};\r\n\r\n\r\n\r\n// use typescript enum rather than action constants\r\nexport enum FilterActionTypes {\r\n GET_FILTER = \"GET_FILTER\",\r\n APPLY_FILTER = \"APPLY_FILTER\"\r\n}","import { combineReducers } from 'redux'\r\nimport { Action } from './actions'\r\n\r\nimport { Filter, initialFilter } from '../../models/Filter';\r\n\r\n// States' definition\r\nexport interface IFilterState {\r\n isFetching: boolean\r\n filter?: Filter,\r\n data?: any\r\n}\r\n\r\nexport interface State {\r\n filter: IFilterState\r\n}\r\n\r\nconst filter = (state: IFilterState = { isFetching: false, filter: initialFilter}, action: Action): IFilterState => {\r\n switch (action.type) {\r\n case 'GET_FILTER':\r\n return { ...state }\r\n case 'SET_FETCHING':\r\n return { ...state, isFetching: action.isFetching } \r\n case 'APPLY_FILTER':\r\n return { ...state, filter: action.filter }\r\n case 'RESET_FILTER_SELECTED':\r\n let newFilter = { ...action.filter }\r\n newFilter.activeFilters = { ...initialFilter.activeFilters }\r\n newFilter.sustainability = initialFilter.sustainability;\r\n return { ...state, filter: newFilter}\r\n }\r\n \r\n return state\r\n}\r\n\r\nexport default combineReducers({\r\n filter\r\n})","import Order from '../models/Order';\r\n// import { initialFilter } from './Filter';\r\n\r\nimport {cloneDeep} from 'lodash';\r\n\r\nexport interface basketLine {[id: string]: number}\r\n\r\nexport interface Basket {\r\n total: number\r\n currency: string\r\n items: any[]\r\n numberOfItems: number,\r\n basketLines: basketLine,\r\n changes: basketLine,\r\n}\r\n\r\nexport const initialBasket = {\r\n total: 0,\r\n currency: '',\r\n items: [],\r\n numberOfItems: 0,\r\n basketLines: {},\r\n changes: {},\r\n}\r\n\r\nexport const compileBasket = (order: Order): Basket => {\r\n let basketLines: basketLine = {};\r\n let changes: basketLine = {};\r\n const orderLines = cloneDeep(order.orderLines);\r\n\r\n for (const key in orderLines) {\r\n const o = orderLines[key];\r\n basketLines[o.itemId] = o.quantity;\r\n }\r\n\r\n return {\r\n total: order.orderTotals.amount,\r\n numberOfItems: order.orderTotals.noOfItems,\r\n currency: order.orderheader.currencyCode,\r\n items: order.orderLines,\r\n basketLines,\r\n changes,\r\n }\r\n};","import { combineReducers } from 'redux'\r\n\r\nimport { initialBasket as basket } from '../../models/Basket';\r\nimport {\r\n IOrderState,\r\n State,\r\n OrderActions,\r\n} from './orderStore';\r\n\r\nimport { uniqBy } from 'lodash'\r\n\r\nconst order = (state: IOrderState = {\r\n isFetching: false,\r\n orders: [],\r\n closedOrders: [],\r\n basket,\r\n isDashboardFetching: false,\r\n dashboardDeliveryWindows: [],\r\n recentClosedOrders: [],\r\n orderIsPending: false,\r\n orderNotFound: false,\r\n allClosedOrders: [],\r\n allOpenOrders: [],\r\n allClosedOrdersPending: false,\r\n allOpenOrdersPending: false,\r\n}, action: OrderActions): IOrderState => {\r\n switch (action.type) {\r\n case 'GET_ORDER_SUCCESS':\r\n case 'SET_ORDER_SUCCESS':\r\n return { ...state, order: action.order }\r\n\r\n case 'GET_BASKET_SUCCESS':\r\n return { ...state, basket: action.basket }\r\n\r\n case 'GET_OPEN_ORDERS_SUCCESS':\r\n return { ...state, orders: action.orders }\r\n \r\n case 'APPLY_BASKET_CHANGES_SUCCESS':\r\n case 'RESET_BASKET_CHANGES_SUCCESS':\r\n const basketChanges = {...state.basket.changes, ...action.changes};\r\n const newBasket = state.basket;\r\n newBasket.changes = basketChanges;\r\n return { ...state, basket: newBasket}\r\n\r\n case 'ORDER_COMPLETED_SUCCESS':\r\n return { ...state }\r\n\r\n case 'ORDER_IS_PENDING':\r\n return { ...state, orderIsPending: action.payload }\r\n\r\n case 'GET_SHOPS_SUCCESS':\r\n return { ...state, shops: action.shops }\r\n\r\n case 'PEAK_NAV_ORDER_SUCCESS':\r\n return { ...state, navOrders: action.navOrders }\r\n\r\n case 'NAV_ORDER_CLOSED_SUCCESS':\r\n return { ...state, allClosedOrders: action.orders }\r\n \r\n case 'NAV_ORDER_OPEN_SUCCESS':\r\n return { ...state, allOpenOrders: action.orders }\r\n \r\n case 'GET_CUSTOMER_SHIPPING_ADDRESSES_SUCCESS':\r\n return { ...state, shippingAddresses: action.shippingAddresses }\r\n\r\n case 'SET_FETCHING_SHIPPING':\r\n return { ...state, isfetchingShippingAdresses: action.isFetching }\r\n \r\n case 'SET_FETCHING_ORDER':\r\n return { ...state, isFetching: action.isFetching }\r\n \r\n case 'SET_ORDER_NOT_FOUND':\r\n return { ...state, orderNotFound: action.payload }\r\n\r\n case 'GET_CLOSED_ORDERS_SUCCESS':\r\n return { ...state, closedOrders: action.closedOrders }\r\n \r\n case 'REMOVE_CLOSED_ORDER_TO_RECENT':\r\n return { ...state, recentClosedOrders: action.closedOrders }\r\n\r\n case 'DASHBOARD_IS_FETCHING':\r\n return { ...state, isDashboardFetching: action.isDashboardFetching }\r\n \r\n case 'GET_DASHBOARD_DATA_SUCCESS':\r\n let recentClosedOrdersLocalStorage = localStorage.getItem('recentClosedOrders')\r\n let localStorageClosedOrders: any[] = [];\r\n\r\n if (recentClosedOrdersLocalStorage) {\r\n localStorageClosedOrders = JSON.parse(recentClosedOrdersLocalStorage);\r\n }\r\n\r\n let recentClosedOrders = uniqBy([...state.recentClosedOrders, ...localStorageClosedOrders], 'appOrderId')\r\n\r\n return { ...state,\r\n dashboardOrder: action.dashboardData.dashboardOrder,\r\n dashboardDeliveryWindows: [],\r\n recentClosedOrders\r\n }\r\n\r\n case 'SET_DASHBOARD_DELIVERY_WINDOWS_SUCCESS':\r\n return { ...state, dashboardDeliveryWindows: action.dashboardDeliveryWindows}\r\n\r\n case 'CLEAR_ACTIVE_ORDER':\r\n delete state.order;\r\n delete state.basket;\r\n delete state.dashboardOrder;\r\n return { ...state }\r\n\r\n case 'ADD_CLOSED_ORDER_TO_RECENT':\r\n recentClosedOrdersLocalStorage = localStorage.getItem('recentClosedOrders')\r\n localStorageClosedOrders = [];\r\n\r\n if (recentClosedOrdersLocalStorage) {\r\n localStorageClosedOrders = JSON.parse(recentClosedOrdersLocalStorage);\r\n }\r\n\r\n recentClosedOrders = uniqBy([...state.recentClosedOrders, ...[action.order], ...localStorageClosedOrders], 'appOrderId')\r\n return { ...state, recentClosedOrders }\r\n \r\n case 'CLEAR_DASHBOARD':\r\n delete state.dashboardOrder;\r\n return { ...state }\r\n \r\n case 'ORDER_USER_IS_INFORMED':\r\n return { ...state, userIsInformed: action.payload }\r\n }\r\n \r\n return state\r\n}\r\n\r\nexport default combineReducers({\r\n order\r\n})","import { combineReducers } from 'redux'\r\nimport { UserActions } from './actions'\r\n\r\n// States' definition\r\nexport interface IUserSate {\r\n isFetching: boolean\r\n user?: any\r\n isValidated: boolean\r\n token?: string\r\n}\r\n\r\nexport interface State {\r\n user: IUserSate\r\n}\r\n\r\nconst userReducer = (state: IUserSate = {\r\n isFetching: false,\r\n isValidated: false\r\n}, action: UserActions): IUserSate => {\r\n switch (action.type) {\r\n case 'LOGIN_USER_SUCCESS':\r\n return { ...state, token: action.token }\r\n case 'USER_IS_VALID_SUCCESS':\r\n return { ...state, user: action.user, isValidated: true }\r\n case 'USER_IS_VALID_ERROR':\r\n return { ...state, isValidated: true, user: null }\r\n case 'LOGOUT_USER_SUCCESS':\r\n return { ...state , user: null}\r\n }\r\n \r\n return state\r\n}\r\n\r\nexport default combineReducers({\r\n user: userReducer\r\n})","import { combineReducers } from 'redux'\r\nimport { ProductsActions } from './actions'\r\n\r\nimport Style, { DeliveryWindow } from 'molo-shared/lib/models/Style';\r\n\r\n// States' definition\r\nexport interface IProductState {\r\n isFetching: boolean,\r\n isFetchingOrderTypes: boolean,\r\n orderTypes?: any[]\r\n moloItems?: Style[]\r\n deliveryWindows?: DeliveryWindow[]\r\n}\r\n\r\nexport interface State {\r\n productStore: IProductState\r\n}\r\n\r\nconst productReducer = (state: IProductState = {\r\n isFetching: false,\r\n isFetchingOrderTypes: false\r\n}, action: ProductsActions): IProductState => {\r\n switch (action.type) {\r\n case 'FETCH_ORDER_TYPES_SUCCESS':\r\n return { ...state, orderTypes: action.orderTypes }\r\n\r\n case 'FETCH_MOLO_ITEM_SUCCESS':\r\n return { ...state, moloItems: action.moloItems }\r\n\r\n case 'SET_FETCHING_ORDER_TYPES':\r\n return { ...state, isFetchingOrderTypes: action.isFetchingOrderTypes }\r\n\r\n case 'SET_DELIVERY_WINDOWS_SUCCESS':\r\n return { ...state, deliveryWindows: action.deliveryWindows }\r\n }\r\n \r\n return state\r\n}\r\n\r\nexport default combineReducers({\r\n productStore: productReducer\r\n})","import { combineReducers } from 'redux'\r\nimport { CollectionsActions } from './actions'\r\nimport Style, { DeliveryWindow } from 'molo-shared/lib/models/Style';\r\n\r\n// States' definition\r\nexport interface ICollectionState {\r\n isFetchingCollectionMasters: boolean\r\n collections?: any[],\r\n styles?: Style[],\r\n deliveryWindows?: DeliveryWindow[],\r\n}\r\n\r\nexport interface State {\r\n collections: ICollectionState\r\n}\r\n\r\nconst collectionReducer = (state: ICollectionState = {isFetchingCollectionMasters: false}, action: CollectionsActions): ICollectionState => {\r\n switch (action.type) {\r\n case 'FETCH_COLLECTIONS_SUCCESS':\r\n return { ...state, collections: action.collections }\r\n case 'FETCH_COLLECTION_MASTER_SUCCESS':\r\n return { ...state, styles: action.styles}\r\n case 'SET_FETCHING_COLLECTION_MASTERS':\r\n return { ...state, isFetchingCollectionMasters: action.isFetching}\r\n case 'SET_DELIVERY_WINDOWS_SUCCESS':\r\n return { ...state, deliveryWindows: action.deliveryWindows}\r\n }\r\n \r\n return state\r\n}\r\n\r\nexport default combineReducers({\r\n collections: collectionReducer\r\n})","import { combineReducers } from 'redux'\r\nimport { AlertActions, IAlertPayload } from './actions'\r\n\r\nexport interface IAlertState {\r\n alertState: IAlertPayload[]\r\n}\r\n\r\nconst alertReducer = (state: IAlertPayload[] = [], action: AlertActions): IAlertPayload[] => {\r\n // console.log(action, 'action :: alertReducer')\r\n switch (action.type) {\r\n case 'ALERT_SUCCESS':\r\n return [...state, ...[action.payload]]\r\n case 'ALERT_CLEAR':\r\n return state.filter(alert => alert.id !== action.id)\r\n }\r\n \r\n return state\r\n}\r\n\r\nexport default combineReducers({\r\n alertState: alertReducer\r\n})\r\n","import { createStore, combineReducers, applyMiddleware } from 'redux'\r\nimport thunk from 'redux-thunk';\r\n\r\nimport session, { State as SessionState } from './session/reducers'\r\nimport { State as OrderState } from './order/orderStore';\r\nimport order from'./order/reducers';\r\nimport user, { State as UserSate } from './user/reducers';\r\nimport productStore, {State as ProductStoreState} from './products/reducers';\r\nimport collections, {State as CollectionsState} from './collections/reducers';\r\nimport alertStore, {IAlertState} from './alert/reducers';\r\n\r\nexport interface RootState {\r\n session: SessionState\r\n order: OrderState\r\n user: UserSate\r\n productStore: ProductStoreState,\r\n collections: CollectionsState,\r\n alertStore: IAlertState,\r\n}\r\n\r\nconst allReducers = combineReducers({\r\n session,\r\n order,\r\n user,\r\n productStore,\r\n collections,\r\n alertStore\r\n});\r\n\r\nconst rootReducer = (state: any, action:any) => {\r\n if (action.type === 'LOGOUT_USER_SUCCESS') {\r\n state = undefined;\r\n }\r\n return allReducers(state, action);\r\n}\r\n\r\nexport default createStore(rootReducer, applyMiddleware(thunk))","// Our data store\r\nimport reduxStore from '../store';\r\nimport axios from 'axios';\r\n// import reduxStore from '../store';\r\nimport { setAlert } from './alert/actions';\r\n\r\nconst {dispatch} = reduxStore;\r\n\r\nconst UNAUTHORIZED = 401;\r\n// const {dispatch} = reduxStore; // direct access to redux store.\r\n\r\n\r\n// Add a response interceptor\r\naxios.interceptors.response.use(function (response) {\r\n // Any status code that lie within the range of 2xx cause this function to trigger\r\n // Do something with response data\r\n if (response.status === UNAUTHORIZED) {\r\n return Promise.reject(response);\r\n }\r\n\r\n if (response.status > 399) {\r\n if (response.status > 499) {\r\n const message = response.data.error || '';\r\n dispatch(setAlert(message, 'critical'))\r\n }\r\n return Promise.reject(response);\r\n }\r\n\r\n return response;\r\n }, function (error) {\r\n // Any status codes that falls outside the range of 2xx cause this function to trigger\r\n // Do something with response error\r\n return Promise.reject(error);\r\n});\r\n\r\naxios.interceptors.request.use(config => {\r\n config['validateStatus'] = function (status) {\r\n return status >= 200 && status < 550; // default\r\n };\r\n return config;\r\n})\r\n\r\nexport default axios; ","import axios from '../globalAxios';\r\nimport { chunk } from 'lodash';\r\nimport { appConfig } from '../../config';\r\n\r\nconst baseUrl = appConfig.api.baseUrl;\r\nconst mediaBaseUrl = appConfig.media.baseUrl;\r\n\r\nexport default class ProductApi {\r\n static search = async (query: string, currencycode: string) => {\r\n const url = baseUrl + 'Items/Search/' + query + '/' + currencycode + '/';\r\n const response = await axios.post(url);\r\n return response.data;\r\n }\r\n\r\n // /api/Items/AutoComplete/{query}\r\n static autoComplete = async (query: string) => {\r\n const url = baseUrl + 'Items/AutoComplete/' + query;\r\n const response = await axios.post(url);\r\n\r\n return response.data;\r\n }\r\n\r\n static autoComplete2 = async (query: string) => {\r\n const url = baseUrl + 'Items/AutoComplete2/' + query;\r\n const response = await axios.post(url);\r\n\r\n return response.data;\r\n }\r\n\r\n static getOrderTypes = async () => {\r\n const url = baseUrl + 'OrderTypes/GetOrderTypes'\r\n return await axios.post(url);\r\n }\r\n\r\n static registerMediaToken = async () => {\r\n const url = baseUrl + 'Authenticate/RegisterToken';\r\n const jwtToken = localStorage.getItem('token');\r\n return await axios.post(url, null, {params: { jwtToken }});\r\n }\r\n\r\n static getImageMap = async (seasonCode: string, master: string, color: string) => {\r\n const url = mediaBaseUrl + 'media/productimage/GetMasterImageMap/' + seasonCode + '/'+ master + '/' + color;\r\n const imageMapResponse = await axios.post(url);\r\n return imageMapResponse.data;\r\n }\r\n\r\n static getMaster = async (master: string, color: string, currencyCode: string, pricegroup: string) => {\r\n // /Items/LookupMaster/{master}/{colorcode}\r\n const url = baseUrl + 'Items/LookupMaster/' + master + '/' + color + '/' + currencyCode + '/' + pricegroup;\r\n\r\n return await axios.post(url);\r\n }\r\n\r\n static getMoloItem = async (master: string, color: string, currencycode: string, pricegroup: string) => {\r\n const url = baseUrl + 'Items/GetMoloItem/' + master + '/' + color + '/' + currencycode + '/' + pricegroup;\r\n console.log('debug GetMOloItem');\r\n return await axios.post(url);\r\n }\r\n\r\n static getMasters = async (moloItems: {master: string, color: string, currencyCode: string}[]) => {\r\n const limit = 5;\r\n let finalResponse:any = [];\r\n const chunky = chunk(moloItems, limit)\r\n\r\n for (const key in chunky) {\r\n const requests: any[] = [];\r\n for (const moloItem of chunky[key]) {\r\n const url = baseUrl + 'Items/LookupMaster/' + moloItem.master + '/' + moloItem.color + '/' + moloItem.currencyCode;\r\n const request = axios.post(url)\r\n requests.push(request);\r\n }\r\n \r\n const responses = await axios.all(requests);\r\n finalResponse = [...finalResponse, ...responses]\r\n }\r\n\r\n return finalResponse\r\n }\r\n\r\n // getProductGroupConfig\r\n static getProductGroupConfig = async () => {\r\n const url = baseUrl + 'Items/GetGroupDisplayOptions'\r\n return await axios.post(url);\r\n }\r\n}\r\n","import { ThunkAction, ThunkDispatch } from 'redux-thunk'\r\nimport { AnyAction } from 'redux'\r\n\r\nimport { appConfig } from '../../config';\r\nimport axios from '../globalAxios';\r\nimport { uniq } from 'lodash';\r\n\r\nimport { OrderType } from '../../models/OrderType';\r\nimport Style, { DeliveryWindow } from 'molo-shared/lib/models/Style';\r\nimport ProdctApi from './ProductApi';\r\n\r\nconst baseUrl = appConfig.api.baseUrl;\r\n\r\nexport interface IGetOrderType {\r\n type: 'FETCH_ORDER_TYPES_SUCCESS',\r\n orderTypes: OrderType[]\r\n}\r\n\r\nexport interface IGetMoloItem {\r\n type: 'FETCH_MOLO_ITEM_SUCCESS',\r\n moloItems: Style[]\r\n}\r\n\r\nexport interface ISetDeliveryWindows {\r\n type: 'SET_DELIVERY_WINDOWS_SUCCESS',\r\n deliveryWindows: DeliveryWindow[]\r\n}\r\n\r\nexport interface ISetFetcingorderTypes {\r\n type: 'SET_FETCHING_ORDER_TYPES'\r\n isFetchingOrderTypes: boolean\r\n}\r\n\r\nexport type ProductsActions = IGetOrderType | IGetMoloItem | ISetFetcingorderTypes | ISetDeliveryWindows\r\n\r\n// Action Creators\r\nexport const getOrderTypesSuccess = (orderTypes: OrderType[]): IGetOrderType => {\r\n return { type: 'FETCH_ORDER_TYPES_SUCCESS', orderTypes }\r\n}\r\n\r\nexport const getMoloItemSuccess = (moloItems: Style[]): IGetMoloItem => {\r\n return { type: 'FETCH_MOLO_ITEM_SUCCESS', moloItems }\r\n}\r\n\r\nexport const setDeliveryWindowsSuccess = (deliveryWindows: DeliveryWindow[]): ISetDeliveryWindows => {\r\n return { type: 'SET_DELIVERY_WINDOWS_SUCCESS', deliveryWindows }\r\n}\r\n\r\nexport const setFetchingOrderTypes = (isFetchingOrderTypes: boolean): ISetFetcingorderTypes => {\r\n return { type: 'SET_FETCHING_ORDER_TYPES', isFetchingOrderTypes }\r\n}\r\n\r\n/**\r\n * OrderTypes/GetOrderTypes\r\n */\r\nexport const getOrderTypes = (disallowedTypes?: string[]): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n try {\r\n dispatch(setFetchingOrderTypes(true))\r\n const response = await ProdctApi.getOrderTypes();\r\n\r\n let types = response.data;\r\n\r\n if (disallowedTypes) {\r\n types = types.filter((type: any) => disallowedTypes.indexOf(type.type.toLowerCase()) === -1)\r\n }\r\n\r\n dispatch(getOrderTypesSuccess(types))\r\n } catch (e) {\r\n\r\n } finally {\r\n dispatch(setFetchingOrderTypes(false))\r\n }\r\n }\r\n}\r\n\r\n /**\r\n * /Items/GetMoloItem/{master}/{currencycode}\r\n * \r\n * @param masterId \r\n * @param currencyCode \r\n */\r\nexport const getMoloItem = (masterId: string, currencyCode: string, pricegroup: string): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n const url = baseUrl + 'Items/GetMoloItem/' + masterId + '/' + currencyCode + '/' + pricegroup;\r\n console.log('GetMoloITem...1 ');\r\n \r\n try {\r\n const response = await axios.post(url);\r\n dispatch(getMoloItemSuccess(response.data))\r\n } catch (e) {\r\n\r\n }\r\n }\r\n}\r\n\r\nexport const setDeliveryWindows = (products: Style[]): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n const allDeliveryWindows = products.map(style => style.deliveryWindow);\r\n const deliveryWindows: DeliveryWindow[] = [];\r\n const uniqueWindows = uniq(allDeliveryWindows.map(window => window.window));\r\n\r\n for (const key of uniqueWindows) {\r\n const window = allDeliveryWindows.find(window => window.window === key);\r\n if (window) {\r\n deliveryWindows.push(window);\r\n }\r\n }\r\n \r\n dispatch(setDeliveryWindowsSuccess(deliveryWindows));\r\n }\r\n}\r\n","import React, { Component , useState } from 'react'\r\nimport { Link } from \"react-router-dom\";\r\nimport { connect } from 'react-redux'\r\nimport { ThunkDispatch } from 'redux-thunk'\r\n\r\nimport MoloRingloader from '../../components/layout/MoloRingloader';\r\n\r\n// Store.\r\nimport { RootState } from '../../store';\r\nimport { IProductState } from '../../store/products/reducers';\r\nimport { getOrderTypes } from '../../store/products/actions';\r\n\r\n// Models.\r\nimport { OrderType } from '../../models/OrderType';\r\n\r\n// Thirs party components.\r\nimport { TweenLite } from \"gsap\";\r\n\r\n\r\n\r\n\r\ninterface State {\r\n imagesIsLoded: boolean,\r\n imagesLoaded: number,\r\n initialized: boolean,\r\n}\r\n \r\ninterface OwnProps {\r\n orderTypes: OrderType[],\r\n}\r\n \r\ninterface DispatchProps {\r\n getOrderTypes: (disallowedTypes?: string[]) => void;\r\n}\r\n \r\ninterface StateProps {\r\n productStore: IProductState\r\n}\r\n \r\ntype Props = StateProps & OwnProps & DispatchProps;\r\n\r\nexport class OrderTypeChooser extends Component {\r\n constructor(props: Props) {\r\n super(props);\r\n \r\n this.box = null;\r\n this.t = null;\r\n this.myTween = null;\r\n }\r\n \r\n box: HTMLLIElement | null;\r\n t: ReturnType | null;\r\n myTween: GSAPTimeline | null;\r\n // tl = React.useRef();\r\n\r\n state: State = {\r\n imagesIsLoded: false,\r\n imagesLoaded: 1,\r\n initialized: false,\r\n }\r\n\r\n componentDidUpdate(prevProps: Props, prevState: State) {\r\n if (this.props.productStore.orderTypes && this.props.productStore.orderTypes.length && !this.state.initialized) {\r\n this.setState({ initialized: true }, () => {\r\n let preOrders: OrderType[] | undefined;\r\n \r\n if (this.props.productStore.orderTypes) {\r\n preOrders = this.props.productStore.orderTypes.filter(type => type.orderType.toLowerCase() !== 'reorder');\r\n }\r\n })\r\n }\r\n }\r\n\r\n imageDoneLoading = () => {\r\n if (!this.props.productStore.orderTypes) return\r\n\r\n let imagesLoaded = this.state.imagesLoaded;\r\n imagesLoaded++;\r\n\r\n this.setState({\r\n imagesIsLoded: this.props.productStore.orderTypes.length <= imagesLoaded,\r\n imagesLoaded\r\n });\r\n }\r\n\r\n render() {\r\n let multiPreorders: boolean = false;\r\n let reOrders: OrderType | undefined;\r\n let preOrders: OrderType[] | undefined\r\n let constructed: OrderType[] = []\r\n\r\n if (this.props.productStore.orderTypes){\r\n \r\n reOrders = this.props.productStore.orderTypes.find(type => type.orderType.toLowerCase() === 'reorder');\r\n preOrders = this.props.productStore.orderTypes.filter(type => type.orderType.toLowerCase() !== 'reorder');\r\n multiPreorders = preOrders.length > 1\r\n\r\n if (preOrders && preOrders.length > 1) {\r\n constructed.push({\r\n delivery: preOrders[0].delivery,\r\n description: preOrders[0].description,\r\n orderType: 'PRE-ORDER',\r\n type: 'PRE-ORDER'\r\n })\r\n }\r\n\r\n if (reOrders) {\r\n constructed = [ ...constructed, reOrders];\r\n }\r\n }\r\n\r\n const orderTypes = !multiPreorders ? this.props.productStore.orderTypes : constructed;\r\n\r\n const basepath = () => { \r\n if (window.location.hostname === \"localhost\" || window.location.hostname === \"127.0.0.1\"){\r\n return \"https://dev2b.molo.com\";\r\n }\r\n return '';\r\n };\r\n \r\n const imageOnErrorHandler = (\r\n event: React.SyntheticEvent\r\n ) => {\r\n event.currentTarget.src = basepath() + \"/media/static/404.gif\";\r\n };\r\n\r\n\r\n return (\r\n <>\r\n {(!this.state.initialized || !this.state.imagesIsLoded) &&
}\r\n \r\n
\r\n
    \r\n {\r\n orderTypes && orderTypes.map((orderType: OrderType, key) => {\r\n return
  • this.box = e}>\r\n \r\n \r\n
    \r\n {orderType.orderType}\r\n
    \r\n \r\n
  • \r\n })\r\n }\r\n
\r\n
\r\n \r\n \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (states: RootState, ownProps: OwnProps): StateProps => {\r\n return {\r\n productStore: states.productStore.productStore\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: ThunkDispatch<{}, {}, any>, ownProps: OwnProps): DispatchProps => {\r\n return {\r\n getOrderTypes: async (disallowedTypes?: string[]) => {\r\n await dispatch(getOrderTypes(disallowedTypes))\r\n console.log('getOrderTypes completed [UI]')\r\n },\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(OrderTypeChooser)","import React, { Component } from 'react'\r\nimport { Link } from \"react-router-dom\";\r\nimport { connect } from 'react-redux'\r\nimport { ThunkDispatch } from 'redux-thunk'\r\n\r\nimport MoloRingloader from '../layout/MoloRingloader';\r\n\r\n// Store.\r\nimport { RootState } from '../../store';\r\nimport { IProductState } from '../../store/products/reducers';\r\nimport { getOrderTypes } from '../../store/products/actions';\r\n\r\n// Models.\r\nimport { OrderType } from '../../models/OrderType';\r\n\r\n// Thirs party components.\r\nimport { TweenLite } from \"gsap\";\r\n\r\n\r\n\r\ninterface State {\r\n imagesIsLoded: boolean,\r\n imagesLoaded: number,\r\n initialized: boolean,\r\n}\r\n \r\ninterface OwnProps {\r\n orderTypes: OrderType[],\r\n}\r\n \r\ninterface DispatchProps {\r\n getOrderTypes: () => void;\r\n}\r\n \r\ninterface StateProps {\r\n productStore: IProductState\r\n}\r\n \r\ntype Props = StateProps & OwnProps & DispatchProps;\r\n\r\nexport class PreOrderTypeChooser extends Component {\r\n constructor(props: Props) {\r\n super(props);\r\n \r\n this.box = null;\r\n this.t = null;\r\n this.myTween = null;\r\n }\r\n \r\n box: HTMLLIElement | null;\r\n t: ReturnType | null;\r\n myTween: GSAPTimeline | null;\r\n // tl = React.useRef();\r\n\r\n state: State = {\r\n imagesIsLoded: false,\r\n imagesLoaded: 1,\r\n initialized: false,\r\n }\r\n\r\n componentDidUpdate(prevProps: Props, prevState: State) {\r\n if (this.props.productStore.orderTypes && this.props.productStore.orderTypes.length && !this.state.initialized) {\r\n this.setState({ initialized: true }, () => {\r\n })\r\n }\r\n }\r\n \r\n basepath = () => { \r\n if (window.location.hostname === \"localhost\" || window.location.hostname === \"127.0.0.1\"){\r\n return \"https://dev2b.molo.com\";\r\n }\r\n return '';\r\n };\r\n\r\n imageOnErrorHandler = (\r\n event: React.SyntheticEvent\r\n ) => {\r\n event.currentTarget.src = this.basepath() + \"/media/static/404.gif\";\r\n };\r\n\r\n getImage = (type: string) => {\r\n\r\n const banner = this.basepath() + \"/media/static/banner/\" + type.replace(' ','_') + \".jpg\";\r\n return \r\n }\r\n\r\n imageDoneLoading = () => {\r\n if (!this.props.productStore.orderTypes) return\r\n let imagesLoaded = this.state.imagesLoaded;\r\n imagesLoaded++;\r\n\r\n this.setState({\r\n imagesIsLoded: this.props.productStore.orderTypes.length <= imagesLoaded,\r\n imagesLoaded\r\n });\r\n }\r\n\r\n render() {\r\n let preOrders: OrderType[] = [];\r\n \r\n if (this.props.productStore.orderTypes && this.props.productStore.orderTypes.length) {\r\n preOrders = this.props.productStore.orderTypes.filter(type => type.orderType.toLowerCase() !== 'reorder')\r\n .sort()\r\n .reverse()\r\n }\r\n \r\n return (\r\n <>\r\n {(!this.state.initialized || !this.state.imagesIsLoded) &&
}\r\n \r\n
\r\n
    \r\n {\r\n preOrders.map((orderType: OrderType, key) => {\r\n return
  • this.box = e}>\r\n \r\n {this.getImage(orderType.orderType)}\r\n
    \r\n {orderType.orderType}\r\n
    \r\n \r\n
  • \r\n })\r\n }\r\n
\r\n
\r\n \r\n \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (states: RootState, ownProps: OwnProps): StateProps => {\r\n return {\r\n productStore: states.productStore.productStore\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: ThunkDispatch<{}, {}, any>, ownProps: OwnProps): DispatchProps => {\r\n return {\r\n getOrderTypes: async () => {\r\n await dispatch(getOrderTypes())\r\n console.log('getOrderTypes completed [UI]')\r\n },\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(PreOrderTypeChooser)","import axios from '../globalAxios';\r\nimport { basketLine } from '../../models/Basket';\r\nimport { appConfig } from '../../config';\r\n\r\nimport { uniqBy } from 'lodash'\r\n\r\nconst baseUrl = appConfig.api.baseUrl;\r\n\r\nexport default class OrderApi {\r\n static getOrder = async (orderId: number) => {\r\n const url = baseUrl + 'Order/GetOrder';\r\n return await axios.post(url, null, {params: { apporderid: orderId }});\r\n }\r\n\r\n static getOrderFromLocalStorage = () => {\r\n const orderId = localStorage.getItem('order');\r\n\r\n if (orderId) {\r\n return +orderId;\r\n }\r\n\r\n return orderId;\r\n }\r\n\r\n static getRecentOrdersFromLocalStorage = () => {\r\n const recentClosedOrdersLocalStorage = localStorage.getItem('recentClosedOrders')\r\n let localStorageClosedOrders = [];\r\n let recentClosedOrders = []\r\n\r\n if (recentClosedOrdersLocalStorage) {\r\n localStorageClosedOrders = JSON.parse(recentClosedOrdersLocalStorage);\r\n }\r\n\r\n recentClosedOrders = uniqBy(localStorageClosedOrders, 'appOrderId')\r\n\r\n return recentClosedOrders;\r\n }\r\n\r\n static removeRecentOrdersFromLocalStorage = (appOrderId: number) => {\r\n const recentClosedOrdersLocalStorage = localStorage.getItem('recentClosedOrders')\r\n let localStorageClosedOrders = [];\r\n let recentClosedOrders = []\r\n\r\n if (recentClosedOrdersLocalStorage) {\r\n localStorageClosedOrders = JSON.parse(recentClosedOrdersLocalStorage).filter((order: any) => order.appOrderId !== appOrderId)\r\n }\r\n\r\n recentClosedOrders = uniqBy(localStorageClosedOrders, 'appOrderId');\r\n\r\n localStorage.setItem('recentClosedOrders', JSON.stringify(recentClosedOrders))\r\n\r\n return recentClosedOrders;\r\n }\r\n\r\n static getOpenOrders = async () => {\r\n const url = baseUrl + 'Order/GetMyOpenOrders';\r\n return await axios.post(url);\r\n }\r\n\r\n static getClosedOrders = async () => {\r\n const url = baseUrl + 'Order/GetMyClosedOrders';\r\n return await axios.post(url);\r\n }\r\n\r\n static getShops = async () => {\r\n const url = baseUrl + 'Order/MyShops';\r\n return await axios.post(url);\r\n }\r\n\r\n static createOrder = async (orderType: string, customerId: number) => {\r\n const url = baseUrl + 'Order/CreateNewOrder';\r\n return await axios.post(url, null, {params: { orderType, customerid: customerId }});\r\n };\r\n\r\n static applyChanges = async (orderId: number, changes: basketLine) => {\r\n const requests: any[] = [];\r\n\r\n for (const itemId in changes) {\r\n const request = axios.post(baseUrl + 'Order/AddItemToOrder', null, {params: {\r\n apporderid: orderId,\r\n itemno: itemId,\r\n quantity: changes[itemId],\r\n }})\r\n requests.push(request);\r\n }\r\n \r\n return axios.all(requests);\r\n }\r\n \r\n static updateOrder = async (data: any) => {\r\n const url = baseUrl + 'Order/UpdateOrder';\r\n return axios.patch(url, data);\r\n }\r\n\r\n static applyOrder = async (orderId: number) => {\r\n const url = baseUrl + 'Order/ApplyOrder';\r\n return axios.post(url, null, {params: { apporderid: orderId }});\r\n }\r\n\r\n static deleteOrder = async (orderId: number) => {\r\n const url = baseUrl + 'Order/DeleteOpenOrder';\r\n return axios.post(url, null, {params: { apporderid: orderId }});\r\n }\r\n\r\n static peakNavOrders = async (customerId: number) => {\r\n const url = baseUrl + 'Order/PeakNavOrders';\r\n return axios.post(url, null, {params: { customerid: customerId }});\r\n }\r\n\r\n static peakNavOrdersNew = async (customerId: number, final: boolean, allshops: boolean = false) => {\r\n const url = baseUrl + 'Order/PeakNavOrders';\r\n\r\n interface IParams {\r\n customerid: number\r\n final?: boolean\r\n allshops: boolean\r\n }\r\n\r\n let params: IParams = {\r\n customerid: customerId,\r\n allshops: allshops,\r\n }\r\n\r\n if (final !== undefined) {\r\n params['final'] = final;\r\n }\r\n\r\n return axios.post(url, null, { params });\r\n }\r\n\r\n static peakNavCustomerShipments = async (customerId: number, allShops: boolean = false) => {\r\n const url = baseUrl + 'Order/PeakNavCustomerShipments';\r\n return axios.post(url, null, {params: { customerid: customerId, allShops: allShops}});\r\n }\r\n\r\n // /api/Order/PeakNavOrderUnshippedShipments\r\n static peakNavOrderUnshippedShipments = async (sonumber: string) => {\r\n const url = baseUrl + 'Order/PeakNavOrderUnshippedShipments';\r\n return axios.post(url, null, {params: { sonumber: sonumber }});\r\n }\r\n\r\n // /api/Order/PeakNavShipmentItems\r\n static peakNavShipmentItems = async (bsl: string) => {\r\n const url = baseUrl + 'Order/PeakNavShipmentItems';\r\n return axios.post(url, null, {params: { bsl: bsl }});\r\n }\r\n\r\n // PeakNavOrderShipments\r\n static peakNavOrderShipments = async (sonumber: string) => {\r\n const url = baseUrl + 'Order/PeakNavOrderShipments';\r\n return axios.post(url, null, {params: { sonumber: sonumber }});\r\n }\r\n\r\n // /api/Order/PeakNavOrderUnshippedItems\r\n static peakNavOrderUnshippedItems = async (sonumber: string, deliverycode: string) => {\r\n const url = baseUrl + 'Order/PeakNavOrderUnshippedItems';\r\n return axios.post(url, null, {params: { SO: sonumber, deliverycode: deliverycode }});\r\n }\r\n\r\n static lookupOrderInNav = async (apporderid: number) => {\r\n const url = baseUrl + 'Order/LookupOrderInNav';\r\n return axios.post(url, null, {params: { apporderid }});\r\n }\r\n\r\n static openNavOrder = async (navOrderId: number) => {\r\n const url = baseUrl + 'Order/ImportNavOrder';\r\n return axios.post(url, null, {params: { navorderid: navOrderId }});\r\n }\r\n\r\n // /api/OrderTypes/GetSeasonOrderTypes/{seasoncode}\r\n static getSeasonOrderTypes = async (seasoncode: string) => {\r\n const url = baseUrl + `OrderTypes/GetSeasonOrderTypes/${seasoncode}`;\r\n return axios.post(url);\r\n }\r\n\r\n // GetItemOrderTypes\r\n static getItemOrderTypes = async (master: string, color: string) => {\r\n const url = baseUrl + `OrderTypes/GetItemOrderTypes/${master}/${color}`;\r\n return axios.post(url);\r\n }\r\n\r\n static getCustomerShippingAddresses = async (customerId: number) => {\r\n const url = baseUrl + 'Order/GetCustomerShippingAddresses';\r\n return axios.post(url, null, {params: { customerid: customerId }});\r\n }\r\n\r\n static moveOrderDelivery = async (orderId: number, deliveryCode: string, newDate: string) => {\r\n const url = baseUrl + 'Order/MoveOrderDelivery';\r\n \r\n return axios.post(url, null, {params: {\r\n apporderid: orderId,\r\n srcDeliveryCode: deliveryCode,\r\n newDate\r\n }})\r\n }\r\n\r\n static getCountryRegionCodes = async () => {\r\n const url = baseUrl + 'Order/AllCountryRegionCodes';\r\n return axios.post(url);\r\n }\r\n\r\n static ensureOrderStockChanges = async (orderId: number, confirmChange: boolean = false) => {\r\n const url = baseUrl + 'Order/EnsureOrderStockChanges';\r\n return axios.post(url, null, {params: {\r\n apporderid: orderId,\r\n changeOrderQuantity: confirmChange\r\n }});\r\n }\r\n\r\n // /api/Order/GetMoloItemsOnOrder\r\n static GetMoloItemsOnOrder = async (apporderid: number) => {\r\n const url = baseUrl + 'Order/GetMoloItemsOnOrder';\r\n return axios.post(url, null, {params: { apporderid }});\r\n }\r\n\r\n static getCustomerDeliveryDownloadInfo = async (customerno: string) => {\r\n const url = baseUrl + 'Order/GetCustomerDeliveryDownloadInfo/' + customerno;\r\n return await axios.post(url);\r\n }\r\n\r\n // /api/Order/GetOrderDeliveries\r\n static getOrderDeliveries = async (appOrderId: number) => {\r\n const url = baseUrl + 'Order/GetOrderDeliveries';\r\n return axios.post(url, null, {params: { appOrderId }});\r\n }\r\n\r\n static getGotIt = () => {\r\n const storageVal = localStorage.getItem('gotIt') || 'false';\r\n\r\n return localStorage.getItem('gotIt') === null ? false : JSON.parse(storageVal)\r\n }\r\n\r\n // GetFilteredOrderLines\r\n static getFilteredOrderLines = async (appOrderId: number, deliverycode: string, seasoncode?: string) => {\r\n const url = baseUrl + 'Order/GetFilteredOrderLines';\r\n // return axios.post(url, null, {params: { appOrderId, deliverycode, seasoncode}});\r\n return axios.post(url, { appOrderId, deliverycode})\r\n }\r\n\r\n static getAllClosedOrders = async (customerId: string | number) => {\r\n const requests: any[] = [\r\n OrderApi.peakNavOrdersNew(+customerId, true),\r\n OrderApi.peakNavCustomerShipments(+customerId, true)\r\n ]\r\n const responses = await axios.all(requests);\r\n \r\n const peakNavordersResponse = responses[0]\r\n const shipmentsResponse = responses[1]\r\n\r\n const allOrders: any[] = [ ...peakNavordersResponse.data , ...shipmentsResponse.data.map((item: any) => {\r\n item.isFullyShipped = true\r\n return item\r\n }) ]\r\n\r\n return allOrders;\r\n }\r\n\r\n static getAllOpenOrders = async (customerId: string | number) => {\r\n const requests: any[] = [\r\n OrderApi.peakNavOrdersNew(+customerId, false, true),\r\n OrderApi.getOpenOrders()\r\n ]\r\n\r\n const responses = await axios.all(requests);\r\n const peakNavordersResponse = responses[0].data.map((res: any) => {\r\n let sellToCustomerName = res.shipttoname || '';\r\n\r\n return {\r\n appOrderId: null,\r\n sellToCustomerNo: res.selltocustomerno,\r\n sellToCustomerName: sellToCustomerName,\r\n sellToAddress: null,\r\n sellToCity: null,\r\n sellToCountry_RegionCode: null,\r\n shipttoname: '',\r\n orderType: res.ordertype,\r\n salespersonnote: res.salespersonnote,\r\n navorderid: res.navorderid,\r\n status: 'Submitted',\r\n }\r\n })\r\n const openOrdersResponse = responses[1]\r\n\r\n const allOrders: any[] = [\r\n ...peakNavordersResponse ,\r\n ...openOrdersResponse.data.map((item: any) => {\r\n item.status = 'Open'\r\n return item\r\n })\r\n ];\r\n\r\n return allOrders;\r\n }\r\n\r\n // PeakShipmentTracking\r\n static PeakShipmentTracking = (bsl: string) => {\r\n const url = baseUrl + 'Order/PeakShipmentTracking'\r\n return axios.post(url, null, {\r\n params: {\r\n bsl\r\n }\r\n })\r\n }\r\n}\r\n","import { ThunkAction, ThunkDispatch } from 'redux-thunk';\r\nimport { AnyAction } from 'redux';\r\n\r\nimport OrderApi from './OrderApi';\r\nimport Order from '../../models/Order';\r\nimport { Basket, compileBasket, basketLine } from '../../models/Basket';\r\nimport { setAlert } from '../alert/actions'\r\n\r\n\r\nimport {\r\n IGetOrder,\r\n ISetOrder,\r\n ICreateOrder,\r\n IGetOpenOrders,\r\n IGetClosedOrders,\r\n IGetBasket,\r\n IApplyChanges,\r\n IApplyBasketChanges,\r\n IResetBasketChanges,\r\n IGetShops,\r\n IPeakNavOrders,\r\n IOpenNavOrder,\r\n IGetCustomerShippingAdresses,\r\n IIsfetchingShippingAdresses,\r\n ISetFetching,\r\n IDashboardIsFetching,\r\n IGetDashboardData,\r\n IDashboardState,\r\n ISetDashboardDeliveryWindows,\r\n ISetOrderDeleted,\r\n IClearOrder,\r\n IAddRecentClosedOrder,\r\n IRemoveClosedOrderFromRecent,\r\n IApplyOrder,\r\n IOrderIsPending,\r\n ISetOrderNotFound,\r\n IClearDashboard,\r\n IUserIsInformed,\r\n INavOrdersOpen,\r\n INavOrdersClosed,\r\n IOrdersFullyShipped,\r\n IAllClosedOrdersIsPending,\r\n IAllOpenOrdersIsPending,\r\n} from './orderStore';\r\n\r\nimport * as helper from '../../components/shared/Dashboard/DashboardHelper';\r\n\r\n// import DeliveryWindows from '../../components/shared/Dashboard/DeliveryWindows';\r\n\r\n// Action Creators\r\nexport const getOrderSucces = (order: Order): IGetOrder => {\r\n return { type: 'GET_ORDER_SUCCESS', order }\r\n}\r\n\r\nexport const getDashboardOrderStateSuccess = (dashboardData: IDashboardState): IGetDashboardData => {\r\n return { type: 'GET_DASHBOARD_DATA_SUCCESS', dashboardData}\r\n}\r\n\r\nexport const clearDashBoard = (): IClearDashboard => {\r\n return { type: 'CLEAR_DASHBOARD'}\r\n}\r\n\r\nexport const getShopsSuccess = (shops: any[]): IGetShops => {\r\n return { type: 'GET_SHOPS_SUCCESS', shops }\r\n}\r\n\r\nexport const setOrderSucces = (order: Order): ISetOrder => {\r\n return { type: 'SET_ORDER_SUCCESS', order }\r\n}\r\n\r\nexport const addClosedOrderToRecent = (order: any): IAddRecentClosedOrder => {\r\n return { type: 'ADD_CLOSED_ORDER_TO_RECENT', order }\r\n}\r\n\r\nexport const removeClosedOrderFromRecentSuccess = (closedOrders: any[]): IRemoveClosedOrderFromRecent => {\r\n return { type: 'REMOVE_CLOSED_ORDER_TO_RECENT', closedOrders }\r\n}\r\n\r\nexport const setDeliveryWindowsSuccess = (dashboardDeliveryWindows: any[]): ISetDashboardDeliveryWindows => {\r\n return { type: 'SET_DASHBOARD_DELIVERY_WINDOWS_SUCCESS', dashboardDeliveryWindows }\r\n}\r\n\r\nexport const getOpenOrdersSuccess = (orders: any[]): IGetOpenOrders => {\r\n return { type: 'GET_OPEN_ORDERS_SUCCESS', orders }\r\n}\r\n\r\nexport const getClosedOrdersSuccess = (closedOrders: any[]): IGetClosedOrders => {\r\n return { type: 'GET_CLOSED_ORDERS_SUCCESS', closedOrders }\r\n}\r\n\r\nexport const peakNavOrdersSuccess = (navOrders: any[]): IPeakNavOrders => {\r\n return { type: 'PEAK_NAV_ORDER_SUCCESS', navOrders }\r\n}\r\n\r\nexport const navOrdersClosedSuccess = (orders: any[]): INavOrdersClosed => {\r\n return { type: 'NAV_ORDER_CLOSED_SUCCESS', orders }\r\n}\r\n\r\nexport const navOrdersOpenSuccess = (orders: any[]): INavOrdersOpen => {\r\n return { type: 'NAV_ORDER_OPEN_SUCCESS', orders }\r\n}\r\n\r\nexport const fullyShippedOrdersSuccess = (orders: any[]): IOrdersFullyShipped => {\r\n return { type: 'ORDERS_FULLY_SHIPPED_SUCCESS', orders }\r\n}\r\n\r\nexport const openNavOrderSuccess = (navOrder: any): IOpenNavOrder => {\r\n return { type: 'OPEN_NAV_ORDER_SUCCESS', navOrder }\r\n}\r\n\r\nexport const createOrderSucces = (order: Order): ICreateOrder => {\r\n return { type: 'CREATE_ORDER_SUCCESS', order }\r\n}\r\n\r\nexport const getBasketSuccess = (basket: Basket): IGetBasket => {\r\n return { type: 'GET_BASKET_SUCCESS', basket }\r\n}\r\n\r\nexport const applyChangesSuccess = (): IApplyChanges => {\r\n return { type: 'APPLY_CHANGES_SUCCESS' }\r\n}\r\n\r\nexport const applyBasketChangesSuccess = (changes: basketLine): IApplyBasketChanges => {\r\n return { type: 'APPLY_BASKET_CHANGES_SUCCESS', changes }\r\n}\r\n\r\nexport const resetBasketChangesSuccess = (): IResetBasketChanges => {\r\n return { type: 'RESET_BASKET_CHANGES_SUCCESS', changes: {} }\r\n}\r\n\r\nexport const getCustomerShippingAddressesSuccess = (addresses: any[]): IGetCustomerShippingAdresses => {\r\n return { type: 'GET_CUSTOMER_SHIPPING_ADDRESSES_SUCCESS', shippingAddresses: addresses }\r\n}\r\n\r\nexport const setIsFetchingShippingAddresses = (isFetching: boolean): IIsfetchingShippingAdresses => {\r\n return { type: 'SET_FETCHING_SHIPPING', isFetching }\r\n}\r\n\r\nexport const setIsDashboardFetching = (isDashboardFetching: boolean): IDashboardIsFetching => {\r\n return { type: 'DASHBOARD_IS_FETCHING', isDashboardFetching }\r\n}\r\n\r\nexport const setFetching = (isFetching: boolean): ISetFetching => {\r\n return { type: 'SET_FETCHING_ORDER', isFetching }\r\n}\r\n\r\n//ISetOrderDeleted\r\nexport const orderDeletedSuccess = (orderId: number): ISetOrderDeleted => {\r\n return { type: 'ORDER_DELETED_SUCCESS', orderId }\r\n}\r\n\r\n//IClearOrder\r\nexport const clearActiveOrder = (): IClearOrder => {\r\n return { type: 'CLEAR_ACTIVE_ORDER' }\r\n}\r\n\r\nexport const applyOrderSuccess = (): IApplyOrder => {\r\n return { type: 'ORDER_COMPLETED_SUCCESS' }\r\n}\r\n\r\nexport const setOrderIsPending = (isPending: boolean): IOrderIsPending => {\r\n return { type: 'ORDER_IS_PENDING', payload: isPending }\r\n}\r\n\r\nexport const setAllOpenOrderIsPending = (isPending: boolean): IAllOpenOrdersIsPending => {\r\n return { type: 'ALL_OPEN_ORDERS_IS_PENDING', payload: isPending }\r\n}\r\n\r\nexport const setAllOpenClosedIsPending = (isPending: boolean): IAllClosedOrdersIsPending => {\r\n return { type: 'ALL_CLOSED_ORDERS_IS_PENDING', payload: isPending }\r\n}\r\n\r\nexport const setOrderNotFound = (notFound: boolean): ISetOrderNotFound => {\r\n return { type: 'SET_ORDER_NOT_FOUND', payload: notFound }\r\n}\r\n\r\nexport const setUserIsInformed = (informed: boolean): IUserIsInformed => {\r\n return { type: 'ORDER_USER_IS_INFORMED', payload: informed }\r\n}\r\n\r\nexport const getOpenOrders = (): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n try {\r\n const response = await OrderApi.getOpenOrders();\r\n dispatch(getOpenOrdersSuccess(response.data))\r\n } catch (e) {}\r\n }\r\n}\r\n\r\nexport const applyOrder = (orderId: number): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n try {\r\n dispatch(setOrderIsPending(true))\r\n await OrderApi.applyOrder(orderId);\r\n localStorage.removeItem('order')\r\n const response = await OrderApi.getOpenOrders();\r\n dispatch(clearActiveOrder())\r\n dispatch(getOpenOrdersSuccess(response.data))\r\n dispatch(setOrderIsPending(false))\r\n } catch (e) {}\r\n }\r\n}\r\n\r\nexport const clearShop = (): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n try {\r\n localStorage.removeItem('order')\r\n const response = await OrderApi.getOpenOrders();\r\n dispatch(clearActiveOrder())\r\n dispatch(getOpenOrdersSuccess(response.data))\r\n } catch (e) {}\r\n }\r\n}\r\n\r\nexport const getClosedOrders = (): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n try {\r\n const response = await OrderApi.getClosedOrders();\r\n dispatch(getClosedOrdersSuccess(response.data))\r\n } catch (e) {}\r\n }\r\n}\r\n\r\nexport const addRecentClosedOrder = (customerId: number): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n try {\r\n const response = await OrderApi.peakNavOrders(customerId);\r\n dispatch(peakNavOrdersSuccess(response.data))\r\n } catch (e) {}\r\n }\r\n}\r\n\r\nexport const peakNavOrders = (customerId: number): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n try {\r\n const response = await OrderApi.peakNavOrders(customerId);\r\n dispatch(peakNavOrdersSuccess(response.data))\r\n } catch (e) {}\r\n }\r\n}\r\n\r\nexport const getAllClosedNavOrders = (customerId: number): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n try {\r\n dispatch(setAllOpenClosedIsPending(true))\r\n const response = await OrderApi.getAllClosedOrders(customerId);\r\n dispatch(navOrdersClosedSuccess(response))\r\n dispatch(setAllOpenClosedIsPending(false))\r\n } catch (e) {}\r\n }\r\n}\r\n\r\nexport const getAllOpenNavOrders = (customerId: number): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n try {\r\n dispatch(setAllOpenOrderIsPending(true))\r\n const response = await OrderApi.getAllOpenOrders(customerId);\r\n dispatch(navOrdersOpenSuccess(response))\r\n dispatch(setAllOpenOrderIsPending(false))\r\n } catch (e) {}\r\n }\r\n}\r\n\r\nexport const getShops = (): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n try {\r\n const response = await OrderApi.getShops();\r\n dispatch(getShopsSuccess(response.data))\r\n } catch (e) {}\r\n }\r\n}\r\n\r\nexport const getOrder = (orderId: number): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n try {\r\n \r\n dispatch(setFetching(true));\r\n dispatch(setOrderNotFound(false))\r\n const response = await OrderApi.getOrder(orderId);\r\n\r\n if (response.data.orderheader.orderState === 1 && !response.data.orderheader.navImportRef) {\r\n clearShop();\r\n } else {\r\n dispatch(getOrderSucces(response.data))\r\n dispatch(getBasket(response.data));\r\n dispatch(setFetching(false));\r\n }\r\n } catch (e) {\r\n dispatch(setAlert('Order is probably shipped', 'error'))\r\n localStorage.removeItem('order')\r\n clearShop();\r\n dispatch(setOrderNotFound(true));\r\n }\r\n }\r\n}\r\n\r\nexport const setOrder = (orderId: number): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n try {\r\n dispatch(setFetching(true));\r\n dispatch(setOrderNotFound(false))\r\n const response = await OrderApi.getOrder(orderId);\r\n\r\n if (response.data.orderheader.orderState === 1 && !response.data.orderheader.navImportRef) {\r\n clearShop();\r\n } else {\r\n localStorage.setItem('order', String(orderId)) \r\n \r\n dispatch(setOrderSucces(response.data))\r\n dispatch(getBasket(response.data));\r\n dispatch(setFetching(false));\r\n }\r\n \r\n } catch (e) {\r\n dispatch(setFetching(false));\r\n dispatch(setAlert('Order is probably shipped', 'error'))\r\n localStorage.removeItem('order')\r\n clearShop();\r\n dispatch(setOrderNotFound(true));\r\n }\r\n dispatch(setFetching(false));\r\n }\r\n}\r\n\r\nexport const setDashboardDeliveryWindows = (appOrderId: number): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n try {\r\n\r\n const response = await OrderApi.getOrderDeliveries(appOrderId);\r\n\r\n // const dashboardDeliveryWindows = helper.getDeliveryWindows(orderlines);\r\n dispatch(setDeliveryWindowsSuccess(response.data));\r\n \r\n } catch (e) {}\r\n }\r\n}\r\n\r\n// addClosedOrderToRecent\r\nexport const addClosedOrderToRecentAction = (order: any): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n \r\n try {\r\n const recentClosedOrders = localStorage.getItem('recentClosedOrders')\r\n let found = [];\r\n let orders = []\r\n\r\n if (recentClosedOrders) {\r\n orders = JSON.parse(recentClosedOrders);\r\n \r\n found = orders.map((item: any) => {\r\n return item.appOrderId === order.orderheader.appOrderId\r\n })[0];\r\n }\r\n\r\n if (!found && order.orderheader.navImportRef && order.orderheader.orderState !== 0 && order.orderheader.orderIsFinal) {\r\n orders.push(order.orderheader)\r\n }\r\n\r\n localStorage.setItem('recentClosedOrders', JSON.stringify(orders))\r\n\r\n dispatch(addClosedOrderToRecent(order.orderheader));\r\n } catch (e) {}\r\n }\r\n}\r\n\r\nexport const removeClosedOrderToRecentAction = (appOrderId: number): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n \r\n try {\r\n const recentClosedOrders = OrderApi.removeRecentOrdersFromLocalStorage(appOrderId)\r\n const activeOrderId = localStorage.getItem('order')\r\n\r\n dispatch(removeClosedOrderFromRecentSuccess(recentClosedOrders));\r\n\r\n if (activeOrderId && appOrderId === +activeOrderId) {\r\n localStorage.removeItem('order')\r\n dispatch(clearActiveOrder())\r\n\r\n dispatch(orderDeletedSuccess(appOrderId))\r\n dispatch(getOpenOrders())\r\n }\r\n\r\n dispatch(setAlert('Order has been closed', 'success'))\r\n \r\n } catch (e) {}\r\n }\r\n}\r\n\r\nexport const createOrder = (orderType: string, customerId: number): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n try {\r\n const response = await OrderApi.createOrder(orderType, customerId);\r\n dispatch(createOrderSucces(response.data));\r\n } catch (e) {}\r\n }\r\n}\r\n\r\nexport const openNavOrderAndSetOrder = (navOrderId: number): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n try {\r\n const response = await OrderApi.openNavOrder(navOrderId);\r\n dispatch(openNavOrderSuccess(response.data));\r\n dispatch(setOrder(response.data.createdapporderid));\r\n } catch (e) {}\r\n }\r\n}\r\n\r\nexport const createAndSetOrder = (orderType: string, customerId: number, salespersonNote?: string): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n try {\r\n const createdOrder = await OrderApi.createOrder(orderType, customerId);\r\n\r\n if (salespersonNote && salespersonNote.trim() !== '') {\r\n await OrderApi.updateOrder({\r\n appOrderId: createdOrder.data.appOrderId,\r\n salespersonNote\r\n });\r\n }\r\n\r\n dispatch(setOrder(createdOrder.data.appOrderId));\r\n dispatch(getOpenOrders());\r\n } catch (e) {}\r\n }\r\n}\r\n\r\nexport const deleteOrder = (orderId: number): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n try {\r\n const activeOrderId = localStorage.getItem('order')\r\n await OrderApi.deleteOrder(orderId);\r\n\r\n if (activeOrderId && +activeOrderId === orderId) {\r\n localStorage.removeItem('order')\r\n dispatch(clearActiveOrder())\r\n }\r\n\r\n dispatch(setAlert('Order has been deleted', 'success'))\r\n\r\n dispatch(orderDeletedSuccess(orderId))\r\n dispatch(getOpenOrders())\r\n \r\n } catch (e) {}\r\n }\r\n}\r\n\r\nexport const getBasket = (order: Order): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n const basket: Basket = compileBasket(order);\r\n dispatch(getBasketSuccess(basket));\r\n }\r\n}\r\n\r\nexport const applyChanges = (orderId: number, changes: basketLine): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n try {\r\n await OrderApi.applyChanges(orderId, changes);\r\n dispatch(setAlert('New items added to basket', 'success'))\r\n \r\n dispatch(getOrder(orderId));\r\n }\r\n catch (e) {\r\n console.log(e, 'ERROR');\r\n }\r\n \r\n }\r\n}\r\n\r\nexport const applyChangesFromDashboard = (orderId: number, changes: basketLine): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n await OrderApi.applyChanges(orderId, changes);\r\n dispatch(setAlert('New items added to basket', 'success'))\r\n dispatch(getDashboardOrderState(orderId));\r\n }\r\n}\r\n\r\nexport const applyBasketChanges = (changes: basketLine): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n dispatch(applyBasketChangesSuccess(changes));\r\n }\r\n}\r\n\r\nexport const resetBasketChanges = (): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n dispatch(resetBasketChangesSuccess());\r\n }\r\n}\r\n\r\nexport const resetDashboard = (): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n dispatch(clearDashBoard());\r\n }\r\n}\r\n\r\nexport const getCustomerShippingAddresses = (customerId: number): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n dispatch(setIsFetchingShippingAddresses(true));\r\n const response = await OrderApi.getCustomerShippingAddresses(customerId);\r\n dispatch(getCustomerShippingAddressesSuccess(response.data));\r\n dispatch(setIsFetchingShippingAddresses(false));\r\n }\r\n}\r\n\r\nexport const getDashboardOrderState = (orderId: number, shouldAddToRecent?: boolean): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n\r\n try {\r\n dispatch(setIsDashboardFetching(true));\r\n dispatch(setFetching(true));\r\n dispatch(setOrderNotFound(false))\r\n \r\n const response = await OrderApi.getOrder(orderId);\r\n \r\n localStorage.setItem('order', String(orderId)) \r\n\r\n if (response.data.orderheader.orderState === 1 && !response.data.orderheader.navImportRef) {\r\n clearShop();\r\n } else {\r\n localStorage.setItem('order', String(orderId)) \r\n\r\n const dashboardOrder = response.data;\r\n \r\n dispatch(getDashboardOrderStateSuccess({\r\n dashboardOrder,\r\n dashboardDeliveryWindows: [],\r\n }))\r\n\r\n dispatch(addClosedOrderToRecentAction(dashboardOrder))\r\n dispatch(setDashboardDeliveryWindows(dashboardOrder.orderheader.appOrderId))\r\n dispatch(setIsDashboardFetching(false));\r\n \r\n dispatch(setOrderSucces(response.data))\r\n dispatch(getBasket(response.data));\r\n dispatch(setFetching(false));\r\n }\r\n \r\n } catch (e) {\r\n clearShop();\r\n dispatch(setOrderNotFound(true));\r\n dispatch(setFetching(false));\r\n }\r\n dispatch(setFetching(false));\r\n }\r\n}\r\n\r\nexport const setUserHasConfirmed = (informed: boolean): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n localStorage.setItem('gotIt', JSON.stringify(informed));\r\n dispatch(setUserIsInformed(informed));\r\n }\r\n}","import React from 'react'\r\nimport { useParams} from \"react-router-dom\";\r\nimport { useSelector } from \"react-redux\";\r\n\r\n// Models.\r\nimport { OrderType } from '../../models/OrderType';\r\n\r\n// Store.\r\nimport { IUserSate } from '../../store/user/reducers';\r\n\r\ninterface Props {\r\n shops: any[]\r\n orderTypes: any[]\r\n applyChanges: Function\r\n orderType?: string\r\n}\r\n\r\ninterface stepLabel {\r\n [id: string]: string\r\n}\r\n\r\ninterface ParamTypes {\r\n orderType: string\r\n}\r\n\r\nconst CreateOrderBody: React.FC = (props) => {\r\n const { shops, orderTypes, applyChanges } = props;\r\n let { orderType } = useParams();\r\n const userState = useSelector((state: IUserSate) => state.user);\r\n let [currentStep, setCurrentStep] = React.useState('');\r\n let [initialized, setInitialized] = React.useState(false);\r\n let [selected, setSelected] = React.useState({\r\n orderType: '',\r\n delivery: '',\r\n description: '',\r\n type: '',\r\n })\r\n let [steps, setSteps] = React.useState([])\r\n let [selectedShop, setShop] = React.useState(null);\r\n let [salespersonNote, setComment] = React.useState('');\r\n const stepLabels: stepLabel = {\r\n orderType: 'Order type',\r\n shop: 'Shop',\r\n final: 'Create'\r\n }\r\n\r\n React.useEffect(() => {\r\n if (!initialized && shops && orderTypes.length) initializeSteps();\r\n return () => {};\r\n });\r\n\r\n const onSelectOrderType = (type: OrderType) => {\r\n setSelected(type);\r\n nextStep()\r\n }\r\n \r\n const onSelectShop = (shop: any) => {\r\n setShop(shop)\r\n nextStep()\r\n }\r\n\r\n const nextStep = () => {\r\n const nextStep = steps[steps.indexOf(currentStep) + 1];\r\n setCurrentStep(nextStep);\r\n }\r\n \r\n const onApplyChanges = (event: any) => {\r\n event.preventDefault();\r\n\r\n if (selected && selected.orderType !== '') {\r\n applyChanges(selected.orderType, selectedShop.customerId, salespersonNote || undefined);\r\n }\r\n }\r\n \r\n const handleCommentChange = (event: any) => {\r\n const { value } = event.currentTarget;\r\n setComment(value);\r\n }\r\n\r\n const renderHeader = () => {\r\n return (\r\n
\r\n
\r\n {\r\n steps.map((step, index) => {\r\n return (\r\n
\r\n {\r\n if (currentStep !== step &&\r\n index < steps.indexOf(currentStep)) {\r\n setCurrentStep(step);\r\n }\r\n }}\r\n className={\r\n \"button button-circle\" + (currentStep === step ? ' button-success' : ' button-default')\r\n + (steps.length === (index + 1) ? ' last' : '')\r\n }\r\n >{index+1\r\n }\r\n \r\n

{stepLabels[step]}

\r\n
\r\n )\r\n })\r\n }\r\n
\r\n
\r\n )\r\n }\r\n\r\n const initializeSteps = () => {\r\n if (props.orderType && orderTypes.length) {\r\n const type = orderTypes.find((t: OrderType) => t.orderType === props.orderType)\r\n\r\n setSelected(type)\r\n }\r\n\r\n if (orderTypes.length === 1) {\r\n setSelected(orderTypes[0]);\r\n }\r\n\r\n if (orderTypes.length > 1 && !orderType && !props.orderType) {\r\n steps.push('orderType')\r\n }\r\n\r\n if (orderTypes.length > 1 && orderType) {\r\n selected = orderTypes.find((type: OrderType) => {\r\n return type.orderType === orderType;\r\n })\r\n setSelected(selected);\r\n }\r\n \r\n if (shops.length > 1) {\r\n steps.push('shop')\r\n } else if (shops.length === 1) {\r\n setShop(shops[0])\r\n } else if (shops.length === 0) {\r\n setShop({\r\n name: userState.user.user.customerData.Name,\r\n customerId: userState.user.user.customerData.CustomerId,\r\n address: '',\r\n city: '',\r\n })\r\n }\r\n\r\n steps.push('final')\r\n\r\n setSteps(steps);\r\n setCurrentStep(steps[0]);\r\n setInitialized(true)\r\n }\r\n\r\n return (\r\n
\r\n {steps.length > 1 && renderHeader()}\r\n {\r\n currentStep === 'orderType' &&\r\n \r\n \r\n {\r\n orderTypes && \r\n orderTypes.map((type, key) => {\r\n return (\r\n onSelectOrderType(type)} key={key} >\r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n
\r\n { type.orderType }\r\n
\r\n }\r\n {\r\n currentStep === 'shop' && \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n shops.map((shop, key) => {\r\n return (\r\n onSelectShop(shop)} key={key} >\r\n \r\n \r\n \r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n
NameCustomer IDAddressCity
{ shop.name }{ shop.customerId }{ shop.address }{ shop.city }
\r\n }\r\n {\r\n currentStep === 'final' &&\r\n
\r\n
\r\n

Order information

\r\n
\r\n \r\n Order type: { selected && selected.orderType }\r\n
\r\n \r\n Shop: { selectedShop.name }\r\n
\r\n
\r\n
\r\n

Order comment

\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n }\r\n
\r\n )\r\n}\r\n\r\nexport default CreateOrderBody;","import React, { Component } from 'react'\r\nimport { ThunkDispatch } from 'redux-thunk'\r\nimport { RootState } from '../../store';\r\nimport { connect } from 'react-redux'\r\nimport {RouteComponentProps, withRouter} from \"react-router-dom\";\r\n\r\n// Store.\r\nimport { IOrderState } from '../../store/order/orderStore';\r\nimport { setOrder, createAndSetOrder } from '../../store/order/actions';\r\nimport OrderApi from '../../store/order/OrderApi';\r\nimport ProductApi from '../../store/products/ProductApi';\r\nimport { IUserSate } from '../../store/user/reducers';\r\n\r\n// Components.\r\nimport CreateOrderBody from '../../components/b2b/CreateOrderBody';\r\n\r\n// Models.\r\nimport { OrderType } from '../../models/OrderType';\r\n\r\ninterface State {\r\n createNeworder: boolean\r\n orderTypes: OrderType[]\r\n shops: any[]\r\n orderType?: string | undefined\r\n}\r\n \r\ninterface OwnProps {\r\n orderFlowDone: Function\r\n match?: {params: {collection: string, orderType: string}},\r\n orderType?: string\r\n multiOrderTypes?: string[]\r\n}\r\n \r\ninterface DispatchProps {\r\n setOrder: (orderId: number) => void\r\n createAndSetOrder: (orderType: string, customerId: number, salespersonNote?: string) => void\r\n}\r\n \r\ninterface StateProps {\r\n orderState: IOrderState\r\n userState: IUserSate\r\n}\r\n \r\ntype Props = StateProps & OwnProps & DispatchProps;\r\n\r\ntype ComponentProps = Props & RouteComponentProps;\r\n\r\nexport class OrderFlow extends Component {\r\n\r\n state: State = {\r\n createNeworder: false,\r\n shops: [],\r\n orderTypes: []\r\n }\r\n\r\n async componentDidMount() {\r\n const orderTypeResponse = await ProductApi.getOrderTypes();\r\n const disallowedTypes = this.props.userState.user && this.props.userState.user.disallowedTypes ? this.props.userState.user.disallowedTypes : []; \r\n let types = orderTypeResponse.data;\r\n\r\n if (disallowedTypes) {\r\n types = types.filter((type: any) => disallowedTypes.indexOf(type.type.toLowerCase()) === -1)\r\n }\r\n\r\n const shopsResponse = await OrderApi.getShops()\r\n const { orderType } = this.props.match.params;\r\n\r\n this.setState({\r\n orderTypes: types,\r\n shops: shopsResponse.data,\r\n orderType\r\n });\r\n }\r\n\r\n public static getDerivedStateFromProps(props: Props, state: State) {\r\n \r\n if (props.orderType && !state.orderType) {\r\n return {\r\n orderType: props.orderType\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n componentDidUpdate() {\r\n const localStorageOrder = localStorage.getItem('order');\r\n if ((this.props.orderState.orders\r\n && this.props.orderState.orders.length\r\n && (this.state.orderType || this.props.orderType)\r\n && !this.state.createNeworder)\r\n || (!this.props.orderState.orders.length && !this.state.createNeworder)\r\n || (!localStorageOrder && !this.state.createNeworder)) {\r\n let ordersForCurrentOrderType = [];\r\n\r\n if (this.props.orderType) {\r\n ordersForCurrentOrderType = this.props.orderState.orders.filter(o => o.orderType === this.props.orderType);\r\n } else {\r\n ordersForCurrentOrderType = this.props.orderState.orders.filter(o => o.orderType === this.state.orderType);\r\n }\r\n\r\n\r\n if (!ordersForCurrentOrderType.length) {\r\n this.setState({ createNeworder: true })\r\n }\r\n }\r\n }\r\n\r\n onClickSelectOrder = (order: any) => {\r\n this.props.setOrder(order.appOrderId)\r\n this.props.orderFlowDone()\r\n }\r\n\r\n applyChanges = (orderType: string, customerId: number, salespersonNote: string | undefined) => {\r\n this.props.createAndSetOrder(orderType, customerId, salespersonNote || undefined);\r\n this.props.orderFlowDone()\r\n }\r\n\r\n render() {\r\n if (this.state.createNeworder) {\r\n return (\r\n
\r\n \r\n {\r\n this.props.orderState.order && this.state.orderType\r\n && this.props.orderState.order.orderheader.orderType !== this.state.orderType &&\r\n \r\n {\r\n this.state.orderType && this.state.orderType.toLowerCase() === 'reorder' ?\r\n Please create a new REORDER as it is not possible to add a reorder items to your current PRE-ORDER.\r\n :\r\n Please create a new PRE-ORDER as it is not possible to add pre-order items to your current REORDER.\r\n }\r\n \r\n }\r\n \r\n \r\n \r\n
\r\n )\r\n }\r\n\r\n const onClickOrderType = (type: any) => {\r\n this.setState({ orderType: type.orderType }, () => {\r\n this.setState({ createNeworder: true })\r\n })\r\n }\r\n\r\n return (\r\n \r\n \r\n {\r\n this.props.orderState.order && this.state.orderType\r\n && this.props.orderState.order.orderheader.orderType !== this.state.orderType ?\r\n \r\n {\r\n this.state.orderType && this.state.orderType.toLowerCase() === 'reorder' ?\r\n Please create a new REORDER as it is not possible to add a reorder items to your current PRE-ORDER.\r\n :\r\n Please create a new PRE-ORDER as it is not possible to add pre-order items to your current REORDER.\r\n }\r\n \r\n :\r\n \r\n {\r\n this.props.orderState.orders && this.state.orderType && this.props.multiOrderTypes\r\n && this.props.orderState.orders.filter(o => o.orderType === this.state.orderType ).length &&\r\n Choose an existing order or create a new.\r\n \r\n }\r\n \r\n }\r\n \r\n \r\n {\r\n this.props.orderState.orders && this.state.orderType &&\r\n
\r\n {\r\n this.props.orderState.orders &&\r\n this.props.orderState.orders.filter(order => {\r\n if (!this.props.multiOrderTypes || (this.props.multiOrderTypes && this.props.multiOrderTypes.length <= 1)) {\r\n return order.orderType === this.state.orderType\r\n }\r\n return true\r\n }).length ?\r\n
\r\n

Existing orders:

\r\n
\r\n {\r\n this.props.orderState.orders &&\r\n this.props.orderState.orders\r\n .filter(order => {\r\n if (!this.props.multiOrderTypes || (this.props.multiOrderTypes && this.props.multiOrderTypes.length <= 1)) {\r\n return order.orderType === this.state.orderType\r\n }\r\n return true\r\n })\r\n .map((order, key) => {\r\n return (\r\n
this.onClickSelectOrder(order)} className=\"options__item\">\r\n \r\n { order.appOrderId } : { order.orderType }\r\n \r\n \r\n { order.sellToCustomerName }
{ order.salespersonNote }\r\n
\r\n
\r\n )\r\n })\r\n }\r\n
\r\n
: null\r\n }\r\n\r\n
\r\n {\r\n (!this.props.multiOrderTypes || (this.props.multiOrderTypes && this.props.multiOrderTypes.length <= 1)) &&\r\n \r\n }\r\n {\r\n (this.props.multiOrderTypes && this.props.multiOrderTypes && this.props.multiOrderTypes.length > 1) &&\r\n <>\r\n {\r\n this.props.multiOrderTypes.map((type: any, key: number) => {\r\n return (\r\n onClickOrderType(type)}>\r\n Create new { type.orderType }\r\n \r\n )\r\n })\r\n }\r\n \r\n }\r\n
\r\n
\r\n }\r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (states: RootState, ownProps: OwnProps): StateProps => {\r\n return {\r\n orderState: states.order.order, \r\n userState: states.user.user,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: ThunkDispatch<{}, {}, any>, ownProps: OwnProps): DispatchProps => {\r\n return {\r\n setOrder: async (orderId: number) => {\r\n await dispatch(setOrder(orderId))\r\n },\r\n createAndSetOrder: async (orderType: string, customerId: number, salespersonNote?: string) => {\r\n await dispatch(createAndSetOrder(orderType, customerId, salespersonNote))\r\n }\r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(OrderFlow));\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\n\r\nimport { FaTimes } from 'react-icons/fa';\r\n\r\ntype ModalSizes = 'lg' | 'md' | 'sm' | 'special'\r\n\r\ninterface IProps {\r\n isShowing: boolean,\r\n hide: any,\r\n children?: any,\r\n header?: any,\r\n footer?: any,\r\n size?: ModalSizes\r\n hideFooter?: boolean\r\n hideHeader?: boolean\r\n hideClose?: boolean\r\n bodyClasses?: string | null\r\n}\r\n\r\nconst Modal: React.FC = (props) => {\r\n const { isShowing, hide, children, footer, size, hideFooter, hideHeader, bodyClasses, header, hideClose } = props;\r\n const modalSize: ModalSizes = size || 'lg';\r\n const [hideIsTriggered, setHideIsTriggered] = React.useState(false);\r\n const node = React.useRef(null);\r\n\r\n const onKeyPressed = (e: any) => {\r\n if (e.key === 'Escape' && props.hide && !hideIsTriggered) {\r\n e.preventDefault();\r\n setHideIsTriggered(true)\r\n document.addEventListener('keydown', onKeyPressed);\r\n props.hide();\r\n }\r\n }\r\n\r\n const handleClickOutside = (e: any) => {\r\n \r\n if(node && node.current && node.current.contains(e.target)) {\r\n return;\r\n }\r\n\r\n if(node && node.current && e.target.classList.contains('ignore-clickoutside')) {\r\n return;\r\n }\r\n \r\n // outside click \r\n props.hide && props.hide();\r\n };\r\n\r\n React.useEffect(() => {\r\n // add when mounted\r\n document.addEventListener('keydown', onKeyPressed);\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n\r\n // return function to be called when unmounted\r\n return () => {\r\n document.removeEventListener('keydown', onKeyPressed);\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n };\r\n });\r\n\r\n if (isShowing) {\r\n return ReactDOM.createPortal(\r\n \r\n
\r\n
\r\n {\r\n !hideHeader &&\r\n
\r\n {header}\r\n {\r\n !hideClose &&\r\n
\r\n \r\n
\r\n }\r\n
\r\n }\r\n {\r\n hideHeader && !hideClose &&\r\n
\r\n \r\n
\r\n }\r\n
\r\n { children && children }\r\n
\r\n {\r\n !hideFooter &&\r\n
\r\n { footer && footer}\r\n
\r\n }\r\n
\r\n
\r\n
, document.getElementById('root') as HTMLElement\r\n )\r\n }\r\n \r\n return null;\r\n}\r\n\r\nexport default Modal;","import React, { useState } from 'react';\r\n\r\ninterface Iprops {\r\n quantity: number | ''\r\n available: number\r\n itemId: string\r\n blocked: boolean\r\n idx: number\r\n handleKeyUp?: any\r\n handleKeyDown?: any\r\n handleOnFocus?: any\r\n handeClick?: any\r\n updateChanges: Function\r\n soldOut?: boolean\r\n regularDiv?: boolean\r\n}\r\n\r\nconst QuantityInput: React.SFC = (props) => {\r\n\r\n const { quantity, available, itemId, blocked, idx, handleKeyDown, handleOnFocus, handeClick,soldOut } = props;\r\n const [value, setValue] = useState(quantity);\r\n\r\n const handleChange = (event: any) => {\r\n const quantity = event.target.value > available ? available : event.target.value;\r\n props.updateChanges(itemId, quantity);\r\n setValue(quantity);\r\n };\r\n\r\n const convertAvailable = (available: number, quantity: number | string) => {\r\n let availability = 0;\r\n const realAvailable: number = +available;\r\n\r\n if (realAvailable > 0) {\r\n availability = realAvailable - +quantity;\r\n }\r\n\r\n return availability;\r\n }\r\n\r\n const renderInput = () => {\r\n return \r\n {!blocked && !soldOut &&\r\n \r\n }\r\n {/* {!blocked && !soldOut && convertAvailable(available, value) !== 9999 &&\r\n ({convertAvailable(available, value)})\r\n } */}\r\n {!blocked && !soldOut && convertAvailable(available, value) > -1 && convertAvailable(available, value) < 6 &&\r\n <>\r\n \r\n ({convertAvailable(available, value)})\r\n
\r\n
\r\n \r\n \r\n }\r\n {!blocked && !soldOut && convertAvailable(available, value) > 5 && convertAvailable(available, value) < 16 &&\r\n \r\n
\r\n
\r\n }\r\n {!blocked && !soldOut && convertAvailable(available, value) > 15 &&\r\n \r\n
\r\n
\r\n }\r\n {blocked &&\r\n Blocked\r\n }\r\n\r\n {soldOut && !blocked &&\r\n Sold Out\r\n }\r\n
\r\n }\r\n\r\n if (props.regularDiv) {\r\n return (\r\n
\r\n { renderInput() }\r\n
\r\n )\r\n }\r\n\r\n return (\r\n \r\n { renderInput() }\r\n \r\n );\r\n};\r\n\r\nexport default QuantityInput;","import React, { Component } from 'react'\r\n\r\nimport { appConfig } from '../../config';\r\n\r\nimport QuantityInput from './QuantityInput';\r\nimport { Basket } from '../../models/Basket';\r\nimport { IgroupedItems } from '../../models/MoloItem';\r\nimport { StyleBean } from '../../models/Beans';\r\n\r\nimport { clone } from 'lodash'\r\nimport { IOrderState } from '../../store/order/orderStore';\r\n\r\nconst baseUrl = appConfig.media.baseUrl;\r\n\r\ninterface IProps {\r\n sizes: any[],\r\n moloItems: IgroupedItems\r\n selectedProduct: StyleBean\r\n updateChanges: Function\r\n basket: Basket\r\n orderState:IOrderState \r\n}\r\n\r\ninterface State {\r\n currentCellIndex: number\r\n realCellIndex: number\r\n inputsRendered: boolean\r\n orderState: IOrderState\r\n}\r\n\r\n// const QuantityGrid: React.SFC = (props) => {\r\nexport class QuantityGrid extends Component {\r\n tableRef = React.createRef();\r\n currentRowIndex = 1;\r\n cellLength = 0;\r\n tableLength = 0;\r\n\r\n state: State = {\r\n currentCellIndex: 0,\r\n realCellIndex: 2,\r\n inputsRendered: false,\r\n orderState: this.props.orderState\r\n }\r\n\r\n componentDidUpdate(prevProps: IProps) {\r\n if (prevProps.moloItems !== this.props.moloItems\r\n || Object.keys(prevProps.moloItems).length !== Object.keys(this.props.moloItems).length\r\n || this.props.selectedProduct.colorCode !== prevProps.selectedProduct.colorCode) {\r\n this.setState({ inputsRendered: false })\r\n }\r\n\r\n if (this.tableRef.current !== null) {\r\n const rows: HTMLTableElement | null = document.querySelector('#quantity-grid-table');\r\n\r\n if (rows) {\r\n const inputs = rows.querySelectorAll('input')\r\n\r\n if (!this.state.inputsRendered) {\r\n this.setState({ inputsRendered: true }, () => {\r\n this.initialCheck()\r\n })\r\n }\r\n }\r\n }\r\n }\r\n \r\n initialCheck = () => {\r\n if (this.tableRef.current !== null) {\r\n this.tableLength = this.tableRef.current.rows.length;\r\n this.cellLength = this.tableRef.current.rows[0].cells.length\r\n this.initialFocus()\r\n }\r\n }\r\n\r\n handleKeyUp = (e: any) => {\r\n // e.preventDefault()\r\n // console.log('handlekeyup');\r\n };\r\n\r\n handleKeyDown = (e: any) => {\r\n const isRight = e.key === 'ArrowRight' || e.key === 'Tab';\r\n const isLeft = e.key === 'ArrowLeft';\r\n const isUp = e.key === 'ArrowUp';\r\n const isDown = e.key === 'ArrowDown';\r\n\r\n if (isRight || isLeft || isUp || isDown) {\r\n e.preventDefault()\r\n this.handleNextInput(isRight, isLeft, isDown, isUp);\r\n }\r\n };\r\n\r\n handleNextInput(isRight: boolean = false, isLeft?: boolean, isDown?: boolean, isUp?: boolean, isClick?: boolean) {\r\n let currentCellIndex = clone(this.state.realCellIndex);\r\n\r\n if (this.tableRef.current !== null) {\r\n if ((currentCellIndex) === (this.cellLength - 1) && isRight && (!isUp && !isDown)) {\r\n currentCellIndex = 0;\r\n\r\n this.currentRowIndex++;\r\n \r\n if (this.currentRowIndex === this.tableLength) {\r\n this.currentRowIndex = 1;\r\n }\r\n }\r\n \r\n else if (isRight && (!isUp && !isDown)) {\r\n currentCellIndex++\r\n }\r\n \r\n else if (isLeft && (!isUp && !isDown)) {\r\n currentCellIndex--\r\n \r\n // Triggered when left arrow key is pressed\r\n // and cell is the first cell.\r\n if (currentCellIndex < 0) {\r\n currentCellIndex = this.cellLength - 1;\r\n\r\n // When this done in the first row.\r\n if (this.currentRowIndex === 1) {\r\n this.currentRowIndex = this.tableLength - 1;\r\n } else {\r\n this.currentRowIndex--;\r\n }\r\n }\r\n }\r\n \r\n else if (isUp) {\r\n this.currentRowIndex--\r\n\r\n if (this.currentRowIndex <= 0) {\r\n this.currentRowIndex = this.tableLength-1;\r\n }\r\n }\r\n\r\n else if (isDown) {\r\n this.currentRowIndex++\r\n\r\n if (this.currentRowIndex === this.tableLength) {\r\n this.currentRowIndex = 1;\r\n }\r\n }\r\n\r\n const tds = this.tableRef.current.rows[this.currentRowIndex].getElementsByTagName('td');\r\n const input = tds[currentCellIndex].getElementsByTagName('input')\r\n let realCellIndex = 0;\r\n\r\n if (input[0]) {\r\n const closest: any = input[0].closest('td');\r\n \r\n if (closest) {\r\n realCellIndex = closest.cellIndex;\r\n }\r\n } else {\r\n realCellIndex = currentCellIndex;\r\n }\r\n\r\n this.setState({ currentCellIndex, realCellIndex }, () => {\r\n if (input[0]) {\r\n input[0].focus();\r\n\r\n } else {\r\n this.handleNextInput(isRight, isLeft, isDown, isUp);\r\n }\r\n })\r\n }\r\n }\r\n\r\n initialFocus() {\r\n if (this.tableRef.current) {\r\n const rows = this.tableRef.current.rows;\r\n\r\n if (rows) {\r\n for (let i = 0; i < rows.length; i++) {\r\n const row = rows[i].classList.contains(('active-row'));\r\n\r\n if (row) {\r\n const inputs = rows[i].getElementsByTagName('input')\r\n this.currentRowIndex = i;\r\n\r\n if (inputs.length) {\r\n const el = inputs[0] as HTMLElement;\r\n el.focus();\r\n \r\n const closest: any = el.closest('td');\r\n if (closest) {\r\n const realCellIndex = closest.cellIndex;\r\n\r\n\r\n this.setState({ realCellIndex }, () => {\r\n closest.scrollIntoView(true); \r\n })\r\n }\r\n } else {\r\n // If no inputs where found, scroll to row.\r\n const cells = rows[i].getElementsByTagName('td')\r\n\r\n const closest = cells[0] as HTMLElement;\r\n\r\n closest.scrollIntoView(true);\r\n }\r\n \r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n handleOnFocus = (e: any) => {\r\n e.preventDefault()\r\n const currentInput = e.target\r\n\r\n if (this.tableRef.current) {\r\n currentInput.select();\r\n\r\n if (currentInput) {\r\n const closest = currentInput.closest('td');\r\n\r\n if (closest) {\r\n closest.classList.add('cell-is-active');\r\n }\r\n\r\n const allCells = this.tableRef.current.getElementsByTagName('td')\r\n\r\n for (const i in allCells) {\r\n if (allCells[i] && allCells[i] !== closest) {\r\n if (allCells[i].classList) {\r\n allCells[i].classList.remove('cell-is-active');\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n handleOnClick = (e: any) => {\r\n const field = e.target;\r\n this.currentRowIndex = field.closest('tr').rowIndex;\r\n\r\n if (this.tableRef.current) {\r\n const inputs = this.tableRef.current.rows[this.currentRowIndex].getElementsByTagName('input');\r\n\r\n for (const key in inputs) {\r\n const input = inputs[key];\r\n\r\n if (input === field) {\r\n const closest: any = input.closest('td');\r\n if (closest) {\r\n this.setState({ realCellIndex: closest.cellIndex}, () => {\r\n input.focus();\r\n })\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n const { sizes, moloItems, selectedProduct } = this.props;\r\n let indexCounter = 0;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {\r\n sizes.map((size, index) => {\r\n return (\r\n \r\n )\r\n }\r\n )}\r\n \r\n \r\n \r\n \r\n {Object.keys(moloItems).map((itemKey, key) => { \r\n const myComponentClass = itemKey === (this.props.selectedProduct.masterId + this.props.selectedProduct.colorCode) ? 'active-row' : '';\r\n const imgUrl = baseUrl + 'media/productimage/' + moloItems[itemKey][0].seasonCode + '/' + moloItems[itemKey][0].masterId + '/' + moloItems[itemKey][0].colorCode + '/small';\r\n return (\r\n \r\n \r\n \r\n { \r\n moloItems[itemKey].map((item, key) => {\r\n return (\r\n this.props.basket &&\r\n \r\n )\r\n })\r\n }\r\n \r\n )\r\n })}\r\n \r\n
{ selectedProduct.description }Color name\r\n
{size.name}
\r\n
\r\n {\r\n \r\n { moloItems[itemKey][0].colorName }\r\n
\r\n ); \r\n }\r\n\r\n};\r\n\r\nexport default QuantityGrid","\r\nimport Style, { DeliveryWindow } from 'molo-shared/lib/models/Style';\r\nimport { MoloItem } from './MoloItem';\r\nimport { orderLine as OrderLine } from './Order';\r\n\r\ntype styleBeanTypes = 'style' | 'moloItem' | 'orderLine';\r\n\r\nexport class StyleBean {\r\n masterId: string = '';\r\n colorCode: string = '';\r\n description: string = '';\r\n colorName: string = '';\r\n seasonCode: string = '';\r\n colorBlocked: number = 0;\r\n currencyCode: string = 'EUR';\r\n deliveryWindow?: DeliveryWindow;\r\n discontinued:boolean = false;\r\n fabricComposition?: string;\r\n styleNote?: string;\r\n gots: string = '';\r\n oekotex: string = '';\r\n organic: boolean = false;\r\n ecovero:boolean = false;\r\n colorComment?: string;\r\n styleComment?: string;\r\n whp: number = 0;\r\n msrp: number = 0;\r\n totalDisp: number = 0;\r\n collectionName: string = '';\r\n navCollection: string = '';\r\n orderType: string = '';\r\n recycled: boolean = false;\r\n b2BColorComment: string = '';\r\n b2BMasterComment: string = '';\r\n priceType = 'NoDiff';\r\n ocsno: string = '';\r\n ocsblended:string ='';\r\n grsno:string = '';\r\n\r\n getWHPWithDiscount(discount?: number) {\r\n discount = discount || 0;\r\n return this.whp - (this.whp * (discount/100))\r\n }\r\n\r\n static build(data: any, type: styleBeanTypes) {\r\n let bean = new StyleBean();\r\n console.log('debug here');\r\n switch(type) {\r\n case 'moloItem':\r\n const moloItem: MoloItem = data;\r\n \r\n bean.masterId = moloItem.masterId;\r\n bean.colorCode = moloItem.colorCode;\r\n bean.description = moloItem.description;\r\n bean.colorName = moloItem.colorName;\r\n bean.seasonCode = moloItem.seasonCode;\r\n bean.colorBlocked = moloItem.colorBlocked;\r\n bean.gots = moloItem.gots || '';\r\n bean.oekotex = moloItem.oekoTex || '';\r\n bean.whp = moloItem.whp;\r\n bean.msrp = moloItem.msrp;\r\n bean.priceType = moloItem.priceType;\r\n bean.discontinued = moloItem.discontinued || false;\r\n bean.ocsblended = moloItem.ocsblended ||'';\r\n bean.grsno = moloItem.grsno || '';\r\n \r\n // this.currencyCode = moloItem.cu;\r\n break;\r\n case 'style':\r\n // const randomNumber = Math.floor(Math.random() * 11); \r\n const style: Style = data;\r\n\r\n if (!style) {\r\n return bean;\r\n }\r\n\r\n bean.masterId = style.masterId;\r\n bean.colorCode = style.colorCode;\r\n bean.description = style.description;\r\n bean.colorName = style.colorName;\r\n bean.seasonCode = style.seasonCode;\r\n bean.colorBlocked = style.colorBlocked;\r\n bean.currencyCode = style.currencyCode;\r\n bean.deliveryWindow = style.deliveryWindow;\r\n bean.fabricComposition = style.fabricComposition;\r\n bean.styleNote = style.styleNote;\r\n bean.gots = style.gots || '';\r\n bean.ocsno = style.ocsno || '';\r\n bean.ocsblended = style.ocsblended ||'';\r\n bean.grsno = style.grsno || '';\r\n bean.discontinued = style.discontinued || false;\r\n bean.priceType = style.priceType\r\n bean.organic = style.organic;\r\n bean.ecovero = style.ecovero;\r\n bean.oekotex = style.oekotex || '';\r\n bean.styleComment = style.styleComment || '';\r\n bean.colorComment = style.colorComment || '';\r\n bean.whp = style.whp;\r\n bean.msrp = style.msrp;\r\n bean.totalDisp = style.totalDisp;\r\n bean.collectionName = style.collectionName;\r\n bean.navCollection = style.navCollection;\r\n bean.orderType = style.orderType;\r\n bean.recycled = style.recycled;\r\n bean.b2BColorComment = style.b2BColorComment;\r\n bean.b2BMasterComment = style.b2BMasterComment;\r\n break;\r\n case 'orderLine':\r\n \r\n const orderLine: OrderLine = data;\r\n bean.masterId = orderLine.masterid;\r\n bean.colorCode = orderLine.colorcode;\r\n bean.description = orderLine.description;\r\n bean.colorName = orderLine.colorname;\r\n bean.seasonCode = orderLine.seasoncode;\r\n bean.colorBlocked = orderLine.colorBlocked ? 1 : 0;\r\n bean.whp = orderLine.unitPrice;\r\n bean.ocsno = orderLine.ocsno;\r\n bean.grsno = orderLine.grsno;\r\n\r\n break;\r\n default:\r\n // code block\r\n }\r\n\r\n return bean;\r\n }\r\n}","import { __values } from \"tslib\";\r\nvar Style = /** @class */ (function () {\r\n function Style() {\r\n this.masterId = '';\r\n this.colorCode = '';\r\n this.description = '';\r\n this.colorName = '';\r\n this.collectionName = '';\r\n this.collectionSortCode = 0;\r\n this.discontinued = false;\r\n this.seasonCode = '';\r\n this.oekotex = '';\r\n this.gots = '';\r\n this.productGroup = '';\r\n this.productGroupSort = 0;\r\n this.productCategory = '';\r\n this.styleComment = '';\r\n this.colorComment = '';\r\n this.styleNote = '';\r\n this.colorNote = '';\r\n this.fabricComposition = '';\r\n this.qualityCategory = '';\r\n this.totalDisp = 0;\r\n this.colorBlocked = 0;\r\n this.masterColor = '';\r\n this.whp = 0;\r\n this.msrp = 0;\r\n this.currencyCode = '';\r\n this.navCollection = '';\r\n this.orderType = '';\r\n this.recycled = false;\r\n this.b2BColorComment = '';\r\n this.b2BMasterComment = '';\r\n this.priceType = '';\r\n this.organic = false;\r\n this.ecovero = false;\r\n this.subCategories = [];\r\n this.junior = false;\r\n this.baby = false;\r\n this.youth = false;\r\n this.ocsno = '';\r\n this.grsno = '';\r\n this.ocsblended = '';\r\n this.totalcolorsold = 0;\r\n this.totalmastersold = 0;\r\n this.qtysbbaskets = 0;\r\n this.qtyb2bbaskets = 0;\r\n }\r\n Style.prototype.getWHPWithDiscount = function (discount) {\r\n return this.whp - (this.whp * (discount / 100));\r\n };\r\n return Style;\r\n}());\r\nexport function createStyle(data) {\r\n var style = new Style();\r\n // console.log('bo-larsen Creating the style from data');\r\n style.masterId = data.masterid;\r\n style.colorCode = data.colorcode;\r\n style.description = data.description;\r\n style.discontinued = data.discontinued || false;\r\n style.colorName = data.colorname;\r\n style.collectionName = data.collectionname;\r\n style.collectionSortCode = data.collectionsortcode;\r\n // style.deliveryWindow = data.deliverywindow;\r\n // style data.deliveryprint,\r\n // data.deliverysort,\r\n style.seasonCode = data.seasoncode;\r\n style.oekotex = data.oekoTex;\r\n style.gots = data.gots;\r\n style.ocsno = data.ocsno || '';\r\n style.grsno = data.grsno || '';\r\n style.ocsblended = data.ocsblended || '';\r\n style.productGroup = data.productgroup;\r\n style.productGroupSort = data.productgroupsort;\r\n style.productCategory = data.productcategory;\r\n style.styleComment = data.styleComment;\r\n style.colorComment = data.colorComment;\r\n style.styleNote = data.styleNote;\r\n style.colorNote = data.colorNote;\r\n style.fabricComposition = data.fabricComposition;\r\n style.qualityCategory = data.qualityCategory;\r\n style.totalDisp = data.totalDisp;\r\n style.colorBlocked = data.colorBlocked;\r\n style.masterColor = data.mastercolor;\r\n style.whp = data.whp;\r\n style.msrp = data.msrp;\r\n style.currencyCode = data.currencyCode;\r\n // style.deldata .deliveryshipmentdate,\r\n style.navCollection = data.navcollection;\r\n style.orderType = data.orderType,\r\n style.recycled = data.recycled;\r\n style.b2BColorComment = data.b2BColorComment;\r\n style.b2BMasterComment = data.b2BMasterComment;\r\n style.priceType = data.hasDifferentialPrice === 1 ? 'Diff' : 'NoDiff';\r\n style.organic = data.organic;\r\n style.ecovero = data.ecovero;\r\n style.junior = data.junior;\r\n style.baby = data.baby;\r\n style.youth = data.youth;\r\n // style.deliveryWindow = {\r\n // print: data.deliveryprint,\r\n // sort: 0,\r\n // window: data.deliverywindow,\r\n // shipmentDate: new Date(),\r\n // label: data.deliveryprint,\r\n // originalWindow: data.deliverywindow\r\n // }\r\n var deliveryShipmentDate = data.deliveryshipmentdate;\r\n var shipmentDate = new Date(deliveryShipmentDate);\r\n // if (Math.floor(Math.random() * 10) < 7) {\r\n // shipmentDate = new Date('2020-10-10')\r\n // }\r\n var today = new Date();\r\n style.deliveryWindow = {\r\n print: data.deliveryPrint,\r\n sort: shipmentDate > today ? data.deliverysort : 0,\r\n window: shipmentDate <= today ? 'available now' : data.deliverywindow,\r\n shipmentDate: shipmentDate,\r\n label: shipmentDate > today ? data.deliveryprint : 'available now',\r\n originalWindow: data.deliverywindow\r\n };\r\n return style;\r\n}\r\nexport function createStyleFromSalesbookMoloMaster(data) {\r\n var style = new Style();\r\n // console.log('bo-larsen Creating the style from createStyleFromSalesbookMoloMaster');\r\n style.masterId = data.masterid;\r\n style.colorCode = data.colorcode;\r\n style.description = data.description;\r\n style.discontinued = data.discontinued || false;\r\n style.colorName = data.colorname;\r\n style.collectionName = data.collectionname;\r\n style.collectionSortCode = data.collectionsortcode;\r\n // style.deliveryWindow = data.deliverywindow;\r\n // style data.deliveryprint,\r\n // data.deliverysort,\r\n style.seasonCode = data.seasoncode;\r\n style.oekotex = data.OekoTex;\r\n style.gots = data.GOTS;\r\n style.grsno = data.GRSno;\r\n style.ocsno = data.OCSno;\r\n style.ocsblended = data.ocsblended || '';\r\n style.productGroup = data.productgroup;\r\n style.productGroupSort = data.productgroupsort;\r\n style.productCategory = data.productcategory;\r\n // style.styleComment = data.StyleComment;\r\n // style.colorComment = data.ColorComment;\r\n style.styleComment = data.StyleComment ? data.StyleComment.split(\",\").join(\"
\") : '';\r\n style.colorComment = data.ColorComment ? data.ColorComment.split(\",\").join(\"
\") : '';\r\n style.styleNote = data.StyleNote;\r\n style.colorNote = data.ColorNote;\r\n style.fabricComposition = data.FabricComposition;\r\n style.qualityCategory = data.QualityCategory;\r\n style.totalDisp = data.totalDisp;\r\n style.colorBlocked = data.ColorBlocked;\r\n style.masterColor = data.mastercolor;\r\n style.deliveryWindow = {\r\n print: data.deliveryprint,\r\n sort: 0,\r\n window: data.deliverywindow,\r\n shipmentDate: new Date(),\r\n label: data.deliveryprint,\r\n originalWindow: data.deliverywindow\r\n };\r\n // style.whp = data.whp;\r\n // style.msrp = data.msrp;\r\n // style.currencyCode = data.currencyCode;\r\n // style.deldata .deliveryshipmentdate,\r\n // style.navCollection = data.navcollection;\r\n // style.orderType = data.orderType,\r\n style.recycled = data.recycled;\r\n // style.b2BColorComment = data.b2BColorComment;\r\n // style.b2BMasterComment = data.b2BMasterComment;\r\n // style.has data.hasDifferentialPrice === 1 ? 'Diff' : 'NoDiff',\r\n style.organic = data.organic;\r\n style.ecovero = data.ecovero;\r\n style.junior = data.junior;\r\n style.baby = data.baby;\r\n style.youth = data.youth;\r\n return style;\r\n}\r\nexport var createStyleFromSalesbbok = function (data) {\r\n var style = new Style();\r\n console.log(data, 'new style created');\r\n style.masterId = data.masterid;\r\n style.colorCode = data.colorcode;\r\n style.description = data.description;\r\n style.discontinued = data.discontinued || false;\r\n style.colorName = data.colorname;\r\n style.collectionName = data.collectionname;\r\n style.collectionSortCode = data.collectionsortcode;\r\n style.totalcolorsold = data.totalcolorsold;\r\n style.totalmastersold = data.totalmastersold;\r\n style.qtyb2bbaskets = data.qtyb2bbaskets;\r\n style.qtysbbaskets = data.qtysbbaskets;\r\n // style.deliveryWindow = data.deliverywindow;\r\n // style data.deliveryprint,\r\n style.seasonCode = data.seasoncode;\r\n style.oekotex = data.OekoTex;\r\n style.gots = data.GOTS;\r\n style.ocsno = data.ocsno;\r\n style.grsno = data.grsno;\r\n style.ocsblended = data.ocsblended;\r\n style.productGroup = data.productgroup;\r\n style.productGroupSort = data.productgroupsort;\r\n style.productCategory = data.productcategory;\r\n // style.styleComment = data.StyleComment;\r\n // style.colorComment = data.ColorComment;\r\n style.styleComment = data.StyleComment ? data.StyleComment.split(\",\").join(\"
\") : '';\r\n style.colorComment = data.ColorComment ? data.ColorComment.split(\",\").join(\"
\") : '';\r\n style.styleNote = data.StyleNote;\r\n style.colorNote = data.ColorNote;\r\n style.fabricComposition = data.FabricComposition;\r\n style.qualityCategory = data.QualityCategory;\r\n style.totalDisp = data.totalDisp;\r\n style.colorBlocked = data.ColorBlocked;\r\n style.masterColor = data.mastercolor;\r\n style.deliveryWindow = {\r\n print: data.deliveryprint,\r\n sort: data.deliverysort,\r\n window: data.deliverywindow,\r\n shipmentDate: new Date(),\r\n label: data.deliveryprint,\r\n originalWindow: data.deliverywindow\r\n };\r\n // style.whp = data.whp;\r\n // style.msrp = data.msrp;\r\n // style.currencyCode = data.currencyCode;\r\n // style.deldata .deliveryshipmentdate,\r\n // style.navCollection = data.navcollection;\r\n // style.orderType = data.orderType,\r\n style.recycled = data.recycled;\r\n // style.b2BColorComment = data.b2BColorComment;\r\n // style.b2BMasterComment = data.b2BMasterComment;\r\n // style.has data.hasDifferentialPrice === 1 ? 'Diff' : 'NoDiff',\r\n style.organic = data.organic === 1;\r\n style.ecovero = data.ecovero === 1;\r\n style.junior = data.junior === 1;\r\n style.baby = data.baby === 1;\r\n style.youth = data.youth === 1;\r\n return style;\r\n};\r\nexport function mapStyles(data) {\r\n var e_1, _a;\r\n var mapped = [];\r\n try {\r\n for (var data_1 = __values(data), data_1_1 = data_1.next(); !data_1_1.done; data_1_1 = data_1.next()) {\r\n var style = data_1_1.value;\r\n var newStyle = createStyle(style);\r\n mapped.push(newStyle);\r\n }\r\n }\r\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n finally {\r\n try {\r\n if (data_1_1 && !data_1_1.done && (_a = data_1.return)) _a.call(data_1);\r\n }\r\n finally { if (e_1) throw e_1.error; }\r\n }\r\n return mapped;\r\n}\r\nexport function mapStylesFromSalesBook(data) {\r\n var e_2, _a;\r\n var mapped = [];\r\n try {\r\n for (var data_2 = __values(data), data_2_1 = data_2.next(); !data_2_1.done; data_2_1 = data_2.next()) {\r\n var style = data_2_1.value;\r\n var newStyle = createStyleFromSalesbbok(style);\r\n mapped.push(newStyle);\r\n }\r\n }\r\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\r\n finally {\r\n try {\r\n if (data_2_1 && !data_2_1.done && (_a = data_2.return)) _a.call(data_2);\r\n }\r\n finally { if (e_2) throw e_2.error; }\r\n }\r\n return mapped;\r\n}\r\nexport default Style;\r\n//# sourceMappingURL=Style.js.map","export interface IgroupedItems {[id: string]: IMoloItem[]}\r\n\r\nexport interface IMoloItem {\r\n available: number\r\n availablenos : number\r\n blocked: number\r\n discontinued:boolean\r\n colorBlocked: number\r\n colorCode: string\r\n colorName: string\r\n deliveryWindow: string\r\n deliveryWindowLabel: string\r\n deliveryShipmentDate: Date\r\n description: string\r\n description2: string\r\n ean: string\r\n fabric: string\r\n gots: string | null\r\n itemId: string\r\n masterId: string\r\n msrp: number\r\n oekoTex: string | null\r\n ocsblended:string | null\r\n grsno:string | null\r\n priceType: string\r\n refill: string\r\n seasonSort: number\r\n seasonCode: string\r\n shelfNo: string\r\n sizeCode: string\r\n sizeName: string\r\n whp: number\r\n}\r\n\r\nexport class MoloItem implements IMoloItem {\r\n public available: number = 0;\r\n public availablenos = 0;\r\n public blocked: number = 0;\r\n public discontinued: boolean = false;\r\n public colorBlocked: number = 0;\r\n public colorCode: string = '';\r\n public colorName: string = '';\r\n public deliveryWindow: string = '';\r\n public description: string = '';\r\n public description2: string = '';\r\n public ean: string = '';\r\n public fabric: string = '';\r\n public gots: string | null = null;\r\n public ocsblended:string | null = null;\r\n public grsno:string | null = null;\r\n public itemId: string = '';\r\n public masterId: string = '';\r\n public msrp: number = 0;\r\n public oekoTex: string | null = null;\r\n public priceType: string = '';\r\n public refill: string = '';\r\n public seasonSort: number = 0;\r\n public seasonCode: string = '';\r\n public shelfNo: string = '';\r\n public sizeCode: string = '';\r\n public sizeName: string = '';\r\n public whp: number = 0;\r\n public deliveryShipmentDate: Date = new Date()\r\n deliveryWindowLabel: string = '';\r\n \r\n public build(data: any) {\r\n console.log(\"Build the data here\");\r\n this.available = data.available || 0;\r\n this.availablenos = data.availablenos || 0;\r\n this.blocked = data.blocked || 0;\r\n this.discontinued = data.discontinued || false;\r\n this.colorBlocked = data.colorblocked || 0;\r\n this.colorCode = data.colorcode;\r\n this.colorName = data.colorname;\r\n this.deliveryWindow = data.deliveryWindow;\r\n this.description = data.description;\r\n this.description2 = data.description2;\r\n this.ocsblended = data.ocsblended || null;\r\n this.grsno = data.grsno || null;\r\n this.discontinued = data.discontinued || false;\r\n this.ean = data.ean;\r\n this.fabric = data.fabric;\r\n this.gots = data.gots;\r\n this.itemId = data.itemid;\r\n this.masterId = data.masterno;\r\n this.msrp = data.msrp;\r\n this.oekoTex = data.oekoTex;\r\n this.ocsblended = data.ocsblended || '';\r\n this.priceType = data.pricetype;\r\n this.refill = data.refill;\r\n this.seasonSort = data.seasonSort;\r\n this.seasonCode = data.seasoncode;\r\n this.shelfNo = data.shelfNo;\r\n this.sizeCode = data.sizecode;\r\n this.sizeName = data.sizename;\r\n this.whp = data.whp;\r\n \r\n \r\n \r\n\r\n let shipmentDate = new Date(data.shipmentdate);\r\n const today = new Date();\r\n\r\n this.deliveryShipmentDate = new Date(shipmentDate);\r\n this.deliveryWindowLabel = shipmentDate > today ? data.deliveryWindow : 'available now';\r\n\r\n return this;\r\n }\r\n}\r\n\r\nexport function mapMoloItems(data:any[]): MoloItem[] {\r\n let mapped: MoloItem[] = [];\r\n\r\n for (const item of data) {\r\n\r\n const newStyle = new MoloItem().build(item);\r\n mapped.push(newStyle);\r\n }\r\n\r\n return mapped;\r\n}","import { orderLine } from '../Models/Order';\r\n\r\ninterface IUnique {\r\n [id: string]: any\r\n}\r\n\r\nexport function totalDiscountAmount(orderlines: any[], discount = false) {\r\n var totalDiscount = 0;\r\n\r\n for (const i in orderlines) {\r\n const orderline = orderlines[i];\r\n if (orderline.linediscountAmount) {\r\n totalDiscount = + totalDiscount + parseFloat(orderline.linediscountAmount);\r\n }\r\n \r\n if (orderline.linediscountAmount && discount === false) {\r\n discount = true;\r\n }\r\n }\r\n\r\n return totalDiscount;\r\n}\r\n\r\nexport function humanReadableLineUnitPrices(masterId: string, colorCode: string, orderlines: orderLine[]) {\r\n\r\n var prices = [];\r\n\r\n var line = orderlines.filter(function(item) {\r\n return item.masterid === masterId && item.colorcode === colorCode;\r\n });\r\n\r\n for (var i in line) {\r\n prices.push(roundAmount(orderlines[i].unitPrice));\r\n }\r\n\r\n var unique: IUnique = {};\r\n\r\n prices.forEach(function(i) {\r\n if(!unique[i]) {\r\n unique[i] = true;\r\n }\r\n });\r\n\r\n return Object.keys(unique).join(\" / \");\r\n}\r\n\r\nexport function totalLineDiscountAmount(masterId: string, colorCode: string, orderlines: orderLine[]) {\r\n var totalDiscountAmount = 0;\r\n\r\n var line = orderlines.filter(function(item) {\r\n return item.masterid === masterId && item.colorcode === colorCode;\r\n });\r\n\r\n for (var i in line) {\r\n totalDiscountAmount = totalDiscountAmount + line[i].linediscountAmount;\r\n }\r\n\r\n return totalDiscountAmount;\r\n}\r\n\r\nexport function totalLineAmount(masterId: string, colorCode: string, orderlines: orderLine[]) {\r\n var totalDiscountAmount = 0;\r\n\r\n var line = orderlines.filter(function(item) {\r\n return item.masterid === masterId && item.colorcode === colorCode;\r\n });\r\n\r\n for (var i in line) {\r\n totalDiscountAmount = totalDiscountAmount + line[i].amount;\r\n }\r\n\r\n return totalDiscountAmount;\r\n}\r\n\r\nexport function getWHPWithDiscount(whp: number, discount?: number) {\r\n discount = discount || 0;\r\n return whp - (whp * (discount / 100))\r\n}\r\n\r\nexport const roundAmount = (amount: number) => {\r\n return amount.toLocaleString(navigator.language, {minimumFractionDigits: 2})\r\n};","import React, { Component } from 'react'\r\nimport ReactDOM from 'react-dom';\r\nimport { ThunkDispatch } from 'redux-thunk'\r\nimport { connect } from 'react-redux'\r\nimport { Link } from \"react-router-dom\";\r\nimport {RouteComponentProps, withRouter} from \"react-router-dom\";\r\n\r\n// Thris party.\r\nimport DetectableOverflow from 'react-detectable-overflow';\r\n\r\n// Components.\r\nimport OrderFlow from '../../components/shared/OrderFlow';\r\nimport { filter } from 'lodash';\r\nimport Modal from '../layout/Modal/Modal';\r\nimport QuantityGrid from '../layout/QuantityGrid';\r\n// import MobileQuantity from '../layout/MobileQuantity';\r\n\r\n// Models.\r\nimport { StyleBean } from '../../models/Beans';\r\nimport Order from '../../models/Order';\r\nimport { basketLine } from '../../models/Basket';\r\nimport { DeliveryWindow } from '../../models/Style'\r\n\r\nimport { createStyle } from 'molo-shared/lib/models/Style';\r\n\r\n// Utils.\r\nimport { mapMoloItems, MoloItem, IgroupedItems, IMoloItem } from '../../models/MoloItem';\r\nimport { sortBy, uniqBy } from 'lodash';\r\nimport { FaExclamation, FaExternalLinkAlt } from 'react-icons/fa';\r\nimport queryString from 'query-string'\r\nimport { roundAmount } from '../../utils/priceHelper';\r\nimport { getWHPWithDiscount } from '../../utils/priceHelper';\r\nimport PropagateLoader from 'react-spinners/PropagateLoader'\r\nimport { appConfig } from '../../config';\r\n\r\n// Images.\r\nimport OekotexImage from '../../images/sustainability/oekotex.png'\r\nimport GotsImage from '../../images/sustainability/gots.png'\r\nimport RecycleImage from '../../images/sustainability/recycled.png';\r\nimport OrganicImage from '../../images/sustainability/organic.png';\r\nimport EcoveroImage from '../../images/sustainability/ecovero.png';\r\nimport OcsBlendedImage from '../../images/sustainability/ocsblended.png';\r\n\r\nimport OCSnoImage from 'molo-shared/lib/images/sustainability/ocs.png';\r\nimport GRSnoImage from 'molo-shared/lib/images/sustainability/grs.png';\r\nimport GRSMixedImage from 'molo-shared/lib/images/sustainability/grsmixed.png';\r\nimport GRSNylonImage from 'molo-shared/lib/images/sustainability/grsnylon.png';\r\n\r\n// Store.\r\nimport { IProductState } from '../../store/products/reducers';\r\nimport { IOrderState } from '../../store/order/orderStore';\r\nimport { RootState } from '../../store';\r\nimport { getMoloItem } from '../../store/products/actions';\r\nimport ProductApi from '../../store/products/ProductApi';\r\nimport { IUserSate } from '../../store/user/reducers';\r\n\r\nimport {\r\n Tooltip,\r\n Position\r\n} from \"@blueprintjs/core\";\r\nimport OrderApi from '../../store/order/OrderApi';\r\nimport { register } from '../../serviceWorker';\r\n\r\nconst baseUrl = appConfig.media.baseUrl;\r\n\r\ninterface ISize {\r\n code: string,\r\n name: string,\r\n}\r\n\r\ninterface imageMapInterface {\r\n imageurl: string\r\n}\r\ninterface IPrice {\r\n whp: number\r\n msrp: number\r\n}\r\n\r\ninterface IPrices {\r\n [id: string] : IPrice[]\r\n}\r\n\r\ninterface State {\r\n moloItems: IgroupedItems,\r\n sizes: ISize[],\r\n changes: basketLine,\r\n itemsLoading: boolean\r\n imageDoneLoading: boolean\r\n currentStep: string\r\n infoOpen: boolean,\r\n imageMap: imageMapInterface[],\r\n imageMapCurrentIndex: number,\r\n currencyCode: string,\r\n isOverflowed: boolean,\r\n imageIsExpanded: boolean,\r\n moloMaster: StyleBean | null,\r\n orderType?: string | undefined\r\n prices: IPrices\r\n orderTypes: any[]\r\n initialLoadDone: boolean\r\n}\r\n \r\ninterface OwnProps {\r\n product: StyleBean\r\n hide: Function\r\n showModal: boolean\r\n order?: Order\r\n deliveryWindows?: DeliveryWindow[]\r\n applyBasketChanges: Function\r\n applyChanges: Function\r\n changeProduct: Function\r\n lazyLoadMaster?: boolean\r\n match?: {params: {collection: string, orderType: string}}\r\n orderType?: string\r\n checkOrderType?: boolean\r\n}\r\n \r\ninterface DispatchProps {\r\n getMoloItem: (masterId: string, currencyCode: string, pricegroup: string) => void\r\n}\r\n \r\ninterface StateProps {\r\n productState: IProductState\r\n orderState: IOrderState\r\n userState: IUserSate\r\n}\r\n \r\ntype Props = StateProps & OwnProps & DispatchProps & RouteComponentProps;\r\n\r\nexport class ProductOverlay extends Component {\r\n\r\n initialChanges: basketLine = {};\r\n initialMoloItems: IgroupedItems = {};\r\n initialSizes: ISize[] = [];\r\n \r\n state: State = {\r\n moloItems: this.initialMoloItems,\r\n sizes: this.initialSizes,\r\n changes: this.initialChanges,\r\n itemsLoading: false,\r\n imageDoneLoading: false,\r\n currentStep: 'product',\r\n infoOpen: false,\r\n imageMap: [],\r\n imageMapCurrentIndex: 0,\r\n currencyCode: 'EUR',\r\n isOverflowed: false,\r\n imageIsExpanded: false,\r\n moloMaster: null,\r\n prices: {},\r\n orderTypes: [],\r\n initialLoadDone: false\r\n };\r\n\r\n async componentDidMount() {\r\n const { product } = this.props;\r\n const currencyCode = this.props.userState.user ? this.props.userState.user.currencyCode : 'EUR';\r\n const pricegroup = this.props.userState.user ? this.props.userState.user.customerData.pricegroup : 'ALL';\r\n\r\n let { orderType } = product;\r\n\r\n this.props.getMoloItem(product.masterId, currencyCode, pricegroup);\r\n this.getImageMap()\r\n this.setState({ currencyCode, orderType })\r\n \r\n if (this.props.lazyLoadMaster) {\r\n const moloMaster = await ProductApi.getMaster(product.masterId, product.colorCode, currencyCode, pricegroup)\r\n console.log('loadstuff');\r\n orderType = moloMaster.data.orderType;\r\n this.setState({ moloMaster: StyleBean.build(createStyle(moloMaster.data), 'style'), orderType })\r\n }\r\n\r\n if (this.props.checkOrderType) {\r\n // Check the order type.\r\n const response = await OrderApi.getItemOrderTypes(product.masterId, product.colorCode)\r\n this.setState({ orderTypes: response.data })\r\n }\r\n\r\n this.setState({ initialLoadDone: true })\r\n }\r\n\r\n componentDidUpdate(prevProps: Props) {\r\n if (prevProps.productState.moloItems !== this.props.productState.moloItems && this.props.productState.moloItems && this.props.productState.moloItems.length) {\r\n const items: MoloItem[] = filter(mapMoloItems(this.props.productState.moloItems), (item) => {\r\n return item.colorBlocked !== 1;\r\n });\r\n\r\n let grouped: IgroupedItems = {};\r\n const prices: IPrices = {};\r\n\r\n for (const item of items) {\r\n const key: string = String(item.masterId + item.colorCode);\r\n\r\n if (!grouped[key]) {\r\n grouped[key] = [];\r\n }\r\n\r\n grouped[key].push(item);\r\n }\r\n\r\n let groupedSorted: IgroupedItems = {};\r\n\r\n for (const groupKey in grouped) {\r\n if (!groupedSorted[groupKey]) {\r\n groupedSorted[groupKey] = grouped[groupKey];// sortBy(grouped[groupKey], ['sizeCode']);\r\n }\r\n }\r\n\r\n const sizes: ISize[] = [];\r\n\r\n for (const item of groupedSorted[Object.keys(groupedSorted)[0]]) {\r\n sizes.push({\r\n code: item.sizeCode,\r\n name: item.sizeName,\r\n });\r\n }\r\n\r\n \r\n\r\n for (const key in groupedSorted) {\r\n const items = groupedSorted[key];\r\n const diffPrices: IPrice[] = uniqBy(items.map((item: any) => {\r\n return {\r\n whp: item.whp,\r\n msrp: item.msrp\r\n }\r\n }), 'whp')\r\n\r\n prices[key] = diffPrices;\r\n }\r\n \r\n this.setState({\r\n moloItems: groupedSorted,\r\n sizes: sizes,\r\n itemsLoading: false,\r\n prices\r\n });\r\n }\r\n\r\n \r\n\r\n if (prevProps.product.colorCode !== this.props.product.colorCode) {\r\n this.getImageMap()\r\n }\r\n }\r\n\r\n getImageMap = async () => {\r\n let imageMap = []\r\n imageMap = await ProductApi.getImageMap(this.props.product.seasonCode, this.props.product.masterId, this.props.product.colorCode);\r\n this.setState({ imageMap, itemsLoading: false })\r\n }\r\n\r\n renderOrderGrid = () => (\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
Full stock
\r\n
\r\n
\r\n
\r\n
Limited stock
\r\n
\r\n
\r\n
\r\n
Low stock
\r\n
\r\n
\r\n {/*
\r\n \r\n
*/}\r\n
\r\n )\r\n\r\n updateChanges = (itemId: number, quantity: number) => {\r\n // const changes = this.props.orderState.basket.changes;\r\n const changes = {[itemId]: +quantity};\r\n this.props.applyBasketChanges(changes);\r\n }\r\n\r\n handleOverFlow = (isOverflowed: boolean) => {\r\n this.setState({ isOverflowed })\r\n }\r\n\r\n renderColors = (product: StyleBean) => (\r\n \r\n
\r\n \r\n
\r\n {\r\n Object.keys(this.state.moloItems).map((itemKey, key) => {\r\n const item = this.state.moloItems[itemKey][0];\r\n const isSoldOut = !this.state.moloItems[itemKey].filter(item => item.available > 0).length\r\n if (itemKey === (product.masterId + product.colorCode)) {\r\n return null;\r\n }\r\n\r\n const imgUrl = baseUrl + 'media/productimage/' + item.seasonCode + '/' + item.masterId + '/' + item.colorCode + '/small';\r\n \r\n return (\r\n
{\r\n this.setState({\r\n itemsLoading: true\r\n }, () => {\r\n this.props.changeProduct(item)\r\n })\r\n }}>\r\n {\r\n isSoldOut ?\r\n
Sold Out
: null\r\n }\r\n
\r\n
{ item.colorName }
\r\n
{ item.deliveryWindowLabel }
\r\n
\r\n {\r\n
\r\n )\r\n })\r\n }\r\n
\r\n {\r\n this.state.itemsLoading ?\r\n \r\n \r\n
: null\r\n }\r\n \r\n \r\n \r\n );\r\n\r\n renderSizes = (selectedMoloItem: IMoloItem[]) => (\r\n
\r\n {\r\n this.state.sizes.map((size, key) => (\r\n
{ size.name }
\r\n ))\r\n }\r\n
\r\n );\r\n\r\n renderHeader = (product: StyleBean) => (\r\n
\r\n {\r\n product.deliveryWindow &&\r\n

\r\n {product.orderType && product.orderType.toLowerCase() !== 'reorder' ? product.seasonCode + ' / ' : ''}{ product.deliveryWindow.label }\r\n

\r\n }\r\n

\r\n { product.description } \r\n Click for products in same color

}\r\n position={Position.RIGHT}\r\n >\r\n \r\n { product.colorName } \r\n \r\n \r\n

\r\n\r\n

{ product.masterId } { product.colorCode }

\r\n \r\n {(product.b2BColorComment || product.b2BMasterComment) &&\r\n
\r\n \r\n

{ product.b2BMasterComment }

\r\n

{ product.b2BColorComment }

\r\n
\r\n }\r\n {(product.discontinued) &&\r\n
\r\n \r\n

This product is discontinued

\r\n
\r\n }\r\n
\r\n
\r\n {product.fabricComposition &&\r\n

\r\n { product.fabricComposition }\r\n

\r\n }\r\n\r\n {product.styleComment &&\r\n

\r\n }\r\n\r\n {product.colorComment &&\r\n

\r\n }\r\n
\r\n
\r\n \r\n );\r\n\r\n onKeyPressed = (e: any) => {\r\n if (e.key === 'Enter') {\r\n this.props.applyChanges();\r\n }\r\n }\r\n\r\n imageDoneLoading = () => {\r\n this.setState({imageDoneLoading: true})\r\n }\r\n\r\n onHandleOpenOrderFlow = () => {\r\n this.setState({ currentStep: 'orderFlow' })\r\n }\r\n\r\n renderOrderFlow = () => {\r\n return (\r\n this.setState({ currentStep: 'product' })}\r\n orderType={this.props.orderType}\r\n multiOrderTypes={this.state.orderTypes}\r\n />\r\n )\r\n }\r\n\r\n hasOrderType = () => {\r\n if (this.state.orderTypes && this.state.orderTypes.length && this.props.orderState.order) { \r\n const types = this.state.orderTypes.map(t => t.orderType)\r\n\r\n if (types.indexOf(this.props.orderState.order.orderheader.orderType) !== -1) {\r\n return true\r\n }\r\n }\r\n\r\n return this.props.orderState.order && this.props.orderState.order.isCurrentOrderType &&\r\n this.props.orderState.order.orderheader.orderType === this.state.orderType\r\n }\r\n\r\n getOrderType = () => {\r\n\r\n if (this.state.orderTypes && this.state.orderTypes.length && this.props.orderState.order) {\r\n const types = this.state.orderTypes.map(t => t.orderType)\r\n\r\n if (types.indexOf(this.props.orderState.order.orderheader.orderType) !== -1) {\r\n return this.props.orderState.order.orderheader.orderType\r\n }\r\n \r\n\r\n }\r\n\r\n return this.props.orderState.order && this.props.orderState.order.isCurrentOrderType ?\r\n this.props.orderState.order.orderheader.orderType : 'REORDER'\r\n }\r\n\r\n renderModalContent = () => {\r\n if (!this.state.initialLoadDone) {\r\n return (\r\n
\r\n \r\n
\r\n )\r\n }\r\n\r\n const product = this.props.lazyLoadMaster && this.state.moloMaster ? this.state.moloMaster : this.props.product;\r\n const selectedMoloItem = this.state.moloItems[product.masterId + product.colorCode];\r\n\r\n let imgUrl = baseUrl + 'media/productimage/' + product.seasonCode + '/' + product.masterId + '/' + product.colorCode + '/large';\r\n // let imgUrl = 'https://picsum.photos/200/300'\r\n\r\n if (this.state.imageMap.length > 0 && selectedMoloItem && selectedMoloItem.length) {\r\n const imgStr = this.state.imageMap[this.state.imageMapCurrentIndex].imageurl;\r\n const item = selectedMoloItem[0];\r\n imgUrl = baseUrl + 'media/productimage/' + item.seasonCode + '/' + imgStr + '/large';\r\n // imgUrl = 'https://picsum.photos/200/300'\r\n }\r\n\r\n if (this.state.currentStep === 'orderFlow') {\r\n return this.renderOrderFlow()\r\n }\r\n\r\n return (\r\n
\r\n {this.state.imageIsExpanded && this.imageOverlay(imgUrl)}\r\n
\r\n
\r\n this.setState({ imageIsExpanded: !this.state.imageIsExpanded })}\r\n onLoad={this.imageDoneLoading}\r\n />\r\n {\r\n product.oekotex && product.oekotex !== '' &&\r\n
\r\n \"OekotexImage\"\r\n \r\n {product.oekotex}\r\n \r\n
\r\n }\r\n { console.dir(\"look at sustainability\", product ) }\r\n {\r\n product.gots && product.gots !== '' &&\r\n
\r\n \"GotsImage\"\r\n
\r\n }\r\n {\r\n product.ocsno && product.ocsno !== '' &&\r\n
\r\n \"GotsImage\"\r\n
\r\n }\r\n {\r\n product.ocsblended && product.ocsblended !== '' &&\r\n
\r\n \"ocsblended\r\n
\r\n }\r\n {\r\n product.grsno && product.grsno !== '' && product.grsno.startsWith('N:') &&\r\n
\r\n \"grs\r\n
\r\n }\r\n {\r\n product.grsno && product.grsno !== '' && product.grsno.startsWith('M:') &&\r\n
\r\n \"grs\r\n
\r\n }\r\n {\r\n product.grsno && product.grsno !== '' && !product.grsno.startsWith('N:') && !product.grsno.startsWith('M:') &&\r\n
\r\n \"grs\r\n
\r\n }\r\n {\r\n !!product.organic &&\r\n
\r\n \"OrganicImage\"\r\n
\r\n }\r\n {\r\n !!product.ecovero &&\r\n
\r\n \"OrganicImage\"\r\n
\r\n }\r\n {\r\n product.recycled &&\r\n
\r\n \"Recycled\"\r\n
\r\n }\r\n {\r\n this.state.imageMap.length > 1 &&\r\n
\r\n {\r\n this.state.imageMap.map((map, index) => {\r\n let imgUrl = baseUrl + 'media/productimage/' + this.props.product.seasonCode + '/' + map.imageurl + '/small';\r\n // imgUrl = 'https://picsum.photos/200/300'\r\n return (\r\n this.setState({ imageMapCurrentIndex: index })}\r\n />\r\n )\r\n })\r\n }\r\n
\r\n }\r\n
\r\n
\r\n { this.renderHeader(product) }\r\n
\r\n { Object.keys(this.state.moloItems).length > 1 && this.renderColors(product) }\r\n
\r\n {\r\n this.state.prices[product.masterId + product.colorCode]\r\n &&\r\n

\r\n {\r\n this.state.prices[product.masterId + product.colorCode].map((price: IPrice, key: number) => {\r\n return (\r\n \r\n { roundAmount(getWHPWithDiscount(price.whp, +this.props.userState.user.customerData.linediscount)) } / { roundAmount(price.msrp) }\r\n {\r\n key + 1 !== this.state.prices[product.masterId + product.colorCode].length && - \r\n }\r\n \r\n )\r\n })\r\n }\r\n {' ' + this.state.currencyCode}\r\n

\r\n \r\n }\r\n { !this.props.orderState.order && this.renderSizes(selectedMoloItem)}\r\n {\r\n (!this.props.orderState.order || (!this.hasOrderType() && !this.props.orderState.order.orderheader.orderIsFinal))\r\n &&\r\n \r\n }\r\n\r\n {\r\n (this.props.orderState.order && this.props.orderState.order.orderheader.orderIsFinal)\r\n &&\r\n
\r\n
\r\n It is not possible to add products to an already approved order.
Please create a new order.\r\n
\r\n \r\n
\r\n }\r\n
\r\n
\r\n { (this.props.orderState.order && this.hasOrderType()) && !this.props.orderState.order.orderheader.orderIsFinal &&
Add to order:
}\r\n { (this.props.orderState.order && this.hasOrderType()) && !this.props.orderState.order.orderheader.orderIsFinal && this.imageDoneLoading && this.renderOrderGrid() }\r\n {/* { (this.props.orderState.order && this.state.orderTypes && this.state.orderTypes.length && this.hasOrderType()) && !this.props.orderState.order.orderheader.orderIsFinal && this.imageDoneLoading && this.renderOrderGrid() } */}\r\n {/*
\r\n\r\n
*/}\r\n
\r\n )\r\n }\r\n\r\n renderFooter = () => {\r\n if (!this.props.orderState.order ||\r\n (this.props.orderState.order && this.props.orderState.order.orderheader.orderIsFinal)\r\n ||\r\n (this.props.orderState.order && !this.hasOrderType())) {\r\n return null\r\n }\r\n \r\n return (\r\n this.props.applyChanges()}>\r\n Add to order\r\n \r\n );\r\n }\r\n\r\n imageOverlay = (image: string) => {\r\n return ReactDOM.createPortal(\r\n \r\n
{\r\n this.setState({ imageIsExpanded: false })\r\n } }>\r\n \"zoom\"\r\n
\r\n
, document.getElementById('root') as HTMLElement\r\n )\r\n }\r\n\r\n onHideModal = () => {\r\n this.setState({\r\n moloItems: this.initialMoloItems,\r\n sizes: this.initialSizes,\r\n changes: this.initialChanges,\r\n itemsLoading: false,\r\n imageDoneLoading: false,\r\n currentStep: 'product',\r\n infoOpen: false,\r\n imageMap: [],\r\n imageMapCurrentIndex: 0,\r\n currencyCode: 'EUR',\r\n isOverflowed: false,\r\n imageIsExpanded: false,\r\n }, () => {\r\n this.props.hide()\r\n })\r\n }\r\n\r\n render() {\r\n\r\n return (\r\n \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (states: RootState, ownProps: OwnProps): StateProps => {\r\n return {\r\n productState: states.productStore.productStore,\r\n orderState: states.order.order,\r\n userState: states.user.user,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: ThunkDispatch<{}, {}, any>, ownProps: OwnProps): DispatchProps => {\r\n return {\r\n getMoloItem: async (masterId: string, currencyCode: string, pricegroup: string) => {\r\n await dispatch(getMoloItem(masterId, currencyCode,pricegroup))\r\n console.log('getMoloItem completed [UI]')\r\n },\r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(ProductOverlay))","import React from 'react'\r\nimport { useSelector } from \"react-redux\";\r\n\r\nimport 'intersection-observer';\r\nimport { LazyLoadImage } from 'react-lazy-load-image-component';\r\n\r\n// Store.\r\nimport { RootState } from '../../store/';\r\n\r\n// Models.\r\nimport { StyleBean } from '../../models/Beans'\r\n\r\n// utils.\r\nimport { roundAmount, getWHPWithDiscount } from '../../utils/priceHelper';\r\nimport { appConfig } from '../../config';\r\nimport shirtImg from '../../images/silhouette/shirt.jpg';\r\n\r\n// Icons.\r\nimport { FaComment } from 'react-icons/fa';\r\n\r\nconst baseUrl = appConfig.media.baseUrl;\r\n\r\nconst ProductListItem: React.FC<\r\n {\r\n product:StyleBean,\r\n discount?: number,\r\n inBasket?: boolean,\r\n lazyLoadMoloMaster?: boolean\r\n quantityOveride?: number\r\n quantityLabel?: string\r\n scrollPosition?: any\r\n hidePrice?: boolean\r\n }> = (props) => {\r\n const { product, hidePrice } = props;\r\n\r\n const user = useSelector((state: RootState) => state.user.user);\r\n const { seasonCode, masterId, colorCode } = product;\r\n const imageUrl = baseUrl + 'media/productimage/' + seasonCode + '/' + masterId + '/' + colorCode + '/small?cache=?10052021';\r\n // const imageUrl = 'https://picsum.photos/200/300';\r\n // const [moloMaster, setMoloMaster] = React.useState(null);\r\n // const quantityLabel = props.quantityLabel || 'Quantity';\r\n\r\n const getPriceString = () => {\r\n // const master = props.lazyLoadMoloMaster && moloMaster ? moloMaster : product;\r\n const master = product;\r\n const currencyCode = master.currencyCode || user.user.currencyCode;\r\n const discount = props.discount || 0;\r\n const whp = master.whp || 0;\r\n const msrp = master.msrp || 0;\r\n const prefix = master.priceType === 'Diff' ? 'From ' : '';\r\n\r\n return prefix + (roundAmount(getWHPWithDiscount(whp, discount)) + (msrp !== 0 ? '/' + roundAmount(msrp) + ' ' + currencyCode : ''))\r\n }\r\n\r\n // const getQuantity = () => {\r\n // const master = props.lazyLoadMoloMaster && moloMaster ? moloMaster : product;\r\n // const totalDisp = master.totalDisp || 0;\r\n\r\n // if (props.quantityOveride) {\r\n // return props.quantityOveride;\r\n // }\r\n\r\n // return totalDisp !== 9999 ? totalDisp : ()\r\n // }\r\n\r\n return (\r\n
\r\n {\r\n (product.b2BMasterComment || product.b2BColorComment) && \r\n }\r\n\r\n {/* {product.description} */}\r\n\r\n
}\r\n className=\"pl-item__image fade-in-up\"\r\n src={imageUrl} // use normal attributes as props\r\n visibleByDefault={true}\r\n scrollPosition={props.scrollPosition}\r\n placeholderSrc={shirtImg}\r\n />\r\n\r\n

\r\n { product.description } { product.colorName }\r\n

\r\n

\r\n { product.masterId } { product.colorCode }\r\n

\r\n {!!!hidePrice &&

\r\n { getPriceString() }\r\n

}\r\n {/*

\r\n {quantityLabel}: { getQuantity() }\r\n

*/}\r\n \r\n )\r\n}\r\n \r\n\r\nexport default ProductListItem;","import { ThunkAction, ThunkDispatch } from 'redux-thunk'\r\nimport { AnyAction } from 'redux'\r\n\r\nimport { Filter } from '../../models/Filter';\r\n\r\n// Action Definition\r\nexport interface GetFilterAction {\r\n type: 'GET_FILTER'\r\n}\r\nexport interface SetFetcing {\r\n type: 'SET_FETCHING'\r\n isFetching: boolean\r\n}\r\n\r\nexport interface ApplyFilterAction {\r\n type: 'APPLY_FILTER'\r\n filter: Filter\r\n}\r\n\r\nexport interface ResetFilterSelectedAction {\r\n type: 'RESET_FILTER_SELECTED'\r\n filter: Filter\r\n}\r\n\r\n// Union Action Types\r\nexport type Action = GetFilterAction | SetFetcing | ApplyFilterAction | ResetFilterSelectedAction\r\n\r\n// Action Creators\r\nexport const get = (): GetFilterAction => {\r\n return { type: 'GET_FILTER' }\r\n}\r\nexport const isFetching = (isFetching: boolean): SetFetcing => {\r\n return { type: 'SET_FETCHING', isFetching }\r\n}\r\nexport const apply = (filter: Filter): ApplyFilterAction => {\r\n return { type: 'APPLY_FILTER', filter }\r\n}\r\n\r\nexport const reset = (filter: Filter): ResetFilterSelectedAction => {\r\n return { type: 'RESET_FILTER_SELECTED', filter }\r\n}\r\n\r\n// thunk action\r\nexport const getFilter = (): ThunkAction, {}, {}, AnyAction> => {\r\n // Invoke API\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n dispatch(get())\r\n }\r\n}\r\n\r\nexport const applyFilter = (filter: Filter): ThunkAction, {}, {}, AnyAction> => {\r\n // Invoke API\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n dispatch(apply(filter))\r\n }\r\n}\r\n\r\nexport const resetFilter = (filter: Filter): ThunkAction, {}, {}, AnyAction> => {\r\n // Invoke API\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n console.log('filter action triggred')\r\n dispatch(reset(filter))\r\n }\r\n}\r\n","export interface IproductListCategorySort {\r\n [id: string]: string[]\r\n}\r\n\r\nexport const productListCategorySort: IproductListCategorySort = {\r\n 'main': [\r\n 'T-shirts & Tops',\r\n 'Shirts',\r\n 'Sweaters',\r\n 'Jumpers & Cardigans',\r\n 'Collection Jackets',\r\n 'Dresses',\r\n 'Skirts',\r\n 'Shorts',\r\n 'Pants',\r\n 'Leggings',\r\n 'Tights & Socks',\r\n 'Underwear',\r\n 'Nightwear',\r\n 'Babysuits',\r\n 'Acc. Collection',\r\n 'Bags & Containers',\r\n 'Marketing',\r\n ],\r\n 'outerwear': [\r\n 'Jackets & Coats',\r\n 'Pants',\r\n 'Snowsuits',\r\n 'Rainwear',\r\n 'Fleece & Soft Shells',\r\n 'Collection Jackets',\r\n 'Acc .Outerwear',\r\n 'Acc. Outerwear',\r\n 'Acc Collection',\r\n 'Acc. Collection',\r\n 'Marketing',\r\n ],\r\n 'ow': [\r\n 'Jackets & Coats',\r\n 'Pants',\r\n 'Snowsuits',\r\n 'Rainwear',\r\n 'Fleece & Soft Shells',\r\n 'Collection Jackets',\r\n 'Acc .Outerwear',\r\n 'Acc. Outerwear',\r\n 'Acc Collection',\r\n 'Acc. Collection',\r\n 'Marketing',\r\n ],\r\n 'sport': [\r\n 'T-shirts & Tops',\r\n 'Sweaters',\r\n 'Collection Jackets',\r\n 'Shorts',\r\n 'Skirts',\r\n 'Pants',\r\n 'Leggings',\r\n 'Bodysuits',\r\n 'Bags & Containers',\r\n 'Acc Collection',\r\n 'Acc. Collection',\r\n ],\r\n 'swim': [\r\n 'Swimwear',\r\n 'Acc Swimwear',\r\n 'Acc. Swimwear',\r\n 'Acc. Collection',\r\n 'Acc Collection',\r\n 'Footwear',\r\n 'T-shirts & Tops',\r\n 'Dresses',\r\n 'Shorts',\r\n 'Pants',\r\n 'Marketing',\r\n ],\r\n}\r\n","import { cloneDeep, sortBy, uniq } from 'lodash';\r\nimport { Filter } from '../models/Filter';\r\nimport Style, { IStyle } from 'molo-shared/lib/models/Style';\r\nimport { productListCategorySort } from '../constants/productSort';\r\n\r\ninterface sustainabilityItems {\r\n gots: Style[]\r\n oekoTex: Style[]\r\n recycled: Style[]\r\n organic: Style[]\r\n ecovero: Style[]\r\n ocs_100: Style[]\r\n ocs_blended: Style []\r\n grs: Style[]\r\n}\r\n\r\nconst productGroupSortArray = [\r\n 'Boy',\r\n 'Girl',\r\n 'Baby Boy',\r\n 'Baby Girl',\r\n 'Outerwear',\r\n 'Unisex',\r\n 'Accessories',\r\n 'Swimwear',\r\n 'Marketing',\r\n]\r\n\r\nexport const FilterHelper = {\r\n isInitialFilterReady,\r\n filterIsEmpty,\r\n resultByFilter,\r\n hydrateSeasons,\r\n hydrateProductGroups,\r\n hydrateDeliveryWindows,\r\n hydrateProductCategories,\r\n hydrateSustainability,\r\n hydrateProductCategoriesByCollectionSort,\r\n};\r\n\r\nfunction hydrateSeasons (styles: any[]) { \r\n return uniq(styles.map(style => style.seasonCode));\r\n}\r\n\r\nfunction hydrateProductGroups (styles: Style[]) {\r\n let productGroups = uniq(styles.map(style => style.productGroup))\r\n\r\n return sortBy(productGroups, function(item){\r\n return productGroupSortArray.indexOf(item)\r\n });\r\n}\r\n\r\nfunction hydrateDeliveryWindows (styles: Style[]) { \r\n return uniq(styles.map(style => style.deliveryWindow.label));\r\n}\r\n\r\nfunction hydrateProductCategories (styles: Style[]) {\r\n return uniq(styles.map(style => style.productCategory)).sort();\r\n}\r\n\r\nfunction hydrateProductCategoriesByCollectionSort (styles: IStyle[], collectionName: string) {\r\n collectionName = collectionName.toLowerCase()\r\n const categories = uniq(styles.map(style => style.productCategory));\r\n \r\n if (!productListCategorySort[collectionName]) {\r\n return categories\r\n }\r\n \r\n let sorted: string[] = [];\r\n const keysNotInSort = categories.filter(cat => productListCategorySort[collectionName].indexOf(cat) === -1 && cat.toLowerCase() !== 'marketing');\r\n let keysInSort = categories.filter(cat => productListCategorySort[collectionName].indexOf(cat) !== -1 && cat.toLowerCase() !== 'marketing');\r\n \r\n keysInSort = sortBy(keysInSort, (item) => {\r\n return productListCategorySort[collectionName].indexOf(item)\r\n });\r\n \r\n sorted = [ ...keysInSort, ...keysNotInSort];\r\n \r\n if (categories.indexOf('Marketing') !== 1) {\r\n sorted.push('Marketing')\r\n }\r\n \r\n return sorted;\r\n }\r\n\r\nfunction hydrateSustainability (styles: Style[]) {\r\n let sustainabilityFilters = [];\r\n \r\n if (styles.filter(style => style.gots !== '').length) {\r\n sustainabilityFilters.push('gots');\r\n }\r\n\r\n if (styles.filter(style => style.ocsno !== '').length) {\r\n sustainabilityFilters.push('ocs_100');\r\n }\r\n\r\n if (styles.filter(style => style.oekotex !== '').length) {\r\n sustainabilityFilters.push('oekoTex');\r\n }\r\n\r\n if (styles.filter(style => !!style.recycled).length) {\r\n sustainabilityFilters.push('recycled');\r\n }\r\n\r\n if (styles.filter(style => !!style.organic).length) {\r\n sustainabilityFilters.push('organic');\r\n }\r\n if (styles.filter(style => !!style.ecovero).length) {\r\n sustainabilityFilters.push('ecovero');\r\n }\r\n if(styles.filter(style => style.ocsblended !== '' ).length){\r\n sustainabilityFilters.push('ocs_blended');\r\n }\r\n if(styles.filter(style => style.grsno !== '' ).length){\r\n sustainabilityFilters.push('grs');\r\n }\r\n return sustainabilityFilters;\r\n }\r\n\r\nfunction isInitialFilterReady(filter:Filter) { \r\n return filter && filter.activeFilters && (\r\n filter.activeFilters.seasons.length || \r\n filter.activeFilters.collections.length || \r\n filter.activeFilters.productGroups.length || \r\n filter.activeFilters.deliveryWindows.length ||\r\n filter.activeFilters.productCategories.length ||\r\n (filter.activeFilters.sustainability && filter.activeFilters.sustainability.length)\r\n );\r\n}\r\n\r\nfunction filterIsEmpty(filter:Filter) {\r\n return filter.activeFilters.collections.length === 0 &&\r\n filter.activeFilters.deliveryWindows.length === 0 &&\r\n filter.activeFilters.productGroups.length === 0 &&\r\n filter.activeFilters.productCategories.length === 0 &&\r\n filter.activeFilters.seasons.length === 0;\r\n}\r\n\r\nfunction resultByFilter(filter:Filter, styles:Style[]) {\r\n let newStyles = cloneDeep(styles);\r\n\r\n // if everything is empty, the initial filter isn't ready yet\r\n if (!isInitialFilterReady(filter)) {\r\n return styles;\r\n }\r\n\r\n // seasons\r\n if (filter.activeFilters.seasons.length) {\r\n newStyles = newStyles.filter(style => filter.activeFilters.seasons.indexOf(style.seasonCode) !== -1);\r\n }\r\n\r\n // collections \r\n if (filter.activeFilters.collections.length) {\r\n newStyles = newStyles.filter(style => filter.activeFilters.collections.indexOf(style.collectionName) !== -1);\r\n }\r\n\r\n // deliveryWindows \r\n if (filter.activeFilters.deliveryWindows.length) {\r\n newStyles = newStyles.filter(style => filter.activeFilters.deliveryWindows.indexOf(style.deliveryWindow.label) !== -1);\r\n }\r\n\r\n // productGroups\r\n if (filter.activeFilters.productGroups.length) {\r\n let chunks: Style[] = [];\r\n\r\n for (const group of filter.activeFilters.productGroups) {\r\n const chunk = newStyles.filter(\r\n style => style.subCategories\r\n .map(name => name.toLowerCase())\r\n .indexOf(group.toLowerCase()) !== -1)\r\n chunks = [ ...chunks, ...chunk]\r\n }\r\n\r\n const original = newStyles.filter(\r\n style => filter.activeFilters.productGroups.indexOf(style.productGroup) !== -1);\r\n\r\n newStyles = uniq([ ...original, ...chunks]);\r\n }\r\n\r\n // productCategories\r\n if (filter.activeFilters.productCategories.length) {\r\n newStyles = newStyles.filter(style => filter.activeFilters.productCategories.indexOf(style.productCategory) !== -1);\r\n }\r\n\r\n // Sustainabilty.\r\n if (filter.activeFilters.sustainability && filter.activeFilters.sustainability.length) {\r\n const cloned = [ ...newStyles ];\r\n\r\n let sustainabilityItems:sustainabilityItems = {\r\n gots: [],\r\n oekoTex: [],\r\n recycled: [],\r\n organic: [],\r\n ecovero: [],\r\n ocs_100: [],\r\n ocs_blended:[],\r\n grs:[]\r\n }\r\n\r\n for (const item of filter.activeFilters.sustainability) {\r\n switch(item) {\r\n case 'gots':\r\n const gots = cloned.filter(style => style.gots !== '');\r\n sustainabilityItems.gots = gots;\r\n break;\r\n case 'oekoTex':\r\n const oekoTex = cloned.filter(style => style.oekotex !== '');\r\n sustainabilityItems.oekoTex = oekoTex;\r\n break;\r\n case 'recycled':\r\n const recycled = cloned.filter(style => !!style.recycled);\r\n sustainabilityItems.recycled = recycled;\r\n break;\r\n case 'organic':\r\n const organic = cloned.filter(style => !!style.organic);\r\n sustainabilityItems.organic = organic;\r\n break;\r\n case 'ecovero':\r\n const ecovero = cloned.filter(style => !!style.ecovero);\r\n sustainabilityItems.ecovero = ecovero;\r\n break;\r\n case 'ocs_100':\r\n const ocs_100 = cloned.filter(style => style.ocsno !== '');\r\n sustainabilityItems.ocs_100 = ocs_100;\r\n break;\r\n case 'ocs_blended':\r\n const ocs_blended = cloned.filter(style => style.ocsblended !== '');\r\n sustainabilityItems.ocs_blended= ocs_blended;\r\n break;\r\n case 'grs':\r\n const grs = cloned.filter(style => style.grsno !== '');\r\n sustainabilityItems.grs = grs;\r\n break;\r\n }\r\n\r\n newStyles = [\r\n ...sustainabilityItems.gots,\r\n ...sustainabilityItems.oekoTex,\r\n ...sustainabilityItems.recycled,\r\n ...sustainabilityItems.organic,\r\n ...sustainabilityItems.ecovero,\r\n ...sustainabilityItems.ocs_100,\r\n ...sustainabilityItems.ocs_blended,\r\n ...sustainabilityItems.grs\r\n ]\r\n }\r\n }\r\n \r\n return newStyles;\r\n}\r\n","import React from 'react';\r\n\r\ninterface IProps {\r\n name: string\r\n title: string\r\n value: any,\r\n handleChange: any,\r\n checked: boolean,\r\n}\r\n\r\nexport const CheckboxInput: React.FC = ({\r\n name,\r\n title,\r\n value,\r\n handleChange,\r\n checked,\r\n}) => {\r\n\t//console.log(props.value);\r\n\treturn ( \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n )\r\n}","import React from 'react';\r\n\r\nimport { FaChevronDown } from 'react-icons/fa';\r\n\r\ninterface Props {\r\n heading: any\r\n children: any\r\n};\r\n\r\ninterface State {\r\n open: boolean,\r\n stateClass: string,\r\n accordionStyle: {\r\n height: number\r\n }\r\n}\r\n\r\nexport class AccordionPanel extends React.Component {\r\n accordionPanelRef = React.createRef();\r\n\r\n state: State = {\r\n open: true,\r\n stateClass: '',\r\n accordionStyle: {\r\n height: 0\r\n }\r\n };\r\n\r\n componentDidUpdate(prevProps: Props) {\r\n this.updateHeight(prevProps.children);\r\n }\r\n\r\n updateHeight (children: any) {\r\n if (children !== this.props.children && this.state.open && this.accordionPanelRef.current) {\r\n this.setState({\r\n accordionStyle: {\r\n height: this.accordionPanelRef.current.scrollHeight\r\n }\r\n });\r\n }\r\n }\r\n\r\n handleClick = () => {\r\n let height = 0;\r\n\r\n if (this.accordionPanelRef.current) {\r\n height = this.accordionPanelRef.current.scrollHeight;\r\n console.log(height, 'height :: handleClick :: accordionPanelRef')\r\n }\r\n //height = height > 280 ? 280 : height;\r\n\r\n if (this.state.open) {\r\n this.setState({\r\n open: false,\r\n stateClass: '',\r\n accordionStyle: {\r\n height: 0\r\n }\r\n });\r\n } else {\r\n this.setState({\r\n open: true,\r\n stateClass: 'm-accordion-panel--open',\r\n accordionStyle: {\r\n height\r\n }\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n
{this.props.heading}
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {this.props.children}\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default AccordionPanel;","import React, { Component } from 'react'\r\nimport { RootState } from '../../store';\r\nimport { connect } from 'react-redux'\r\nimport { getFilter, applyFilter } from '../../store/session/actions'\r\nimport { IFilterState } from '../../store/session/reducers'\r\nimport { ThunkDispatch } from 'redux-thunk'\r\n\r\nimport { cloneDeep, uniq } from 'lodash';\r\n\r\nimport Style from 'molo-shared/lib/models/Style';\r\nimport { Filter } from '../../models/Filter';\r\nimport { FilterHelper } from '../../utils/FilterHelper';\r\nimport { CheckboxInput } from '../form/CheckboxInput';\r\nimport { AccordionPanel } from '../layout/AccordionPanel';\r\n\r\nimport ProductApi from '../../store/products/ProductApi';\r\n\r\ninterface State {\r\n initialized?: boolean;\r\n styles?: Style[],\r\n searchTerm: string,\r\n productGroupConfig?: any,\r\n}\r\n\r\ninterface OwnProps {\r\n styles: Style[];\r\n showFilter: boolean;\r\n collectionName?: string\r\n}\r\n\r\ninterface DispatchProps {\r\n getFilter: () => void;\r\n applyFilter: (filter: Filter) => void;\r\n}\r\n\r\ninterface StateProps {\r\n filterState: IFilterState\r\n}\r\n\r\ntype Props = StateProps & OwnProps & DispatchProps\r\n\r\nclass FilterComponent extends Component {\r\n\r\n state: State = {initialized: false, searchTerm: '', styles: []}\r\n\r\n async componentDidMount () {\r\n this.props.getFilter();\r\n const productGroupConfig = await ProductApi.getProductGroupConfig();\r\n\r\n this.setState({ productGroupConfig })\r\n }\r\n componentDidUpdate(prevProps: Props, prevState: State) {\r\n if (!this.state.initialized && this.props.filterState.filter) {\r\n this.initFilters(this.props.filterState.filter, this.props.styles);\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n this.setState({initialized: false})\r\n }\r\n\r\n public static getDerivedStateFromProps(props: Props, state: State) {\r\n if (props.styles !== state.styles) {\r\n return {\r\n styles: props.styles,\r\n }\r\n }\r\n \r\n return null;\r\n }\r\n\r\n async initFilters (filter:Filter, styles: Style[]) {\r\n const newFilter = cloneDeep(filter);\r\n\r\n let productGroupConfig = this.state.productGroupConfig;\r\n\r\n const response = await ProductApi.getProductGroupConfig();\r\n productGroupConfig = response.data;\r\n this.setState({ productGroupConfig }, () => {\r\n if (productGroupConfig) {\r\n for (const groupName in productGroupConfig) {\r\n if (!productGroupConfig[groupName]) {\r\n continue;\r\n }\r\n \r\n for (const rule of productGroupConfig[groupName]) {\r\n let includeStyles = styles.filter(style => style.productGroup.toLowerCase() === rule.include.group.toLowerCase());\r\n \r\n for (const delta in rule.include.ORproperties) {\r\n const ORpropety = rule.include.ORproperties[delta];\r\n // @ts-ignore\r\n const local = includeStyles.filter(style => style[Object.keys(ORpropety)[0]] === true);\r\n \r\n for (const i in local) {\r\n let index = styles.findIndex(style => style.masterId === local[i].masterId && style.colorCode === local[i].colorCode)\r\n \r\n if (styles[index]) {\r\n let cloned = styles[index].subCategories;\r\n cloned.push(groupName)\r\n styles[index].subCategories = uniq(cloned)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n \r\n newFilter.seasons = FilterHelper.hydrateSeasons(styles);\r\n newFilter.productGroups = FilterHelper.hydrateProductGroups(styles);\r\n newFilter.deliveryWindows = FilterHelper.hydrateDeliveryWindows(styles);\r\n // newFilter.productCategories = FilterHelper.hydrateProductCategories(styles);\r\n newFilter.sustainability = FilterHelper.hydrateSustainability(styles);\r\n\r\n if (!this.props.collectionName) {\r\n newFilter.productCategories = FilterHelper.hydrateProductCategories(styles);\r\n } else {\r\n newFilter.productCategories = FilterHelper.hydrateProductCategoriesByCollectionSort(styles, this.props.collectionName);\r\n }\r\n \r\n this.props.applyFilter(newFilter);\r\n \r\n this.setState({\r\n initialized: true\r\n });\r\n })\r\n\r\n \r\n }\r\n\r\n onFilterSelectionSeason (event: any) { \r\n const selectedSeason = event.currentTarget.value;\r\n const selectedSeasonIsActive = event.currentTarget.checked;\r\n this.changeActiveFilters('seasons', selectedSeason, selectedSeasonIsActive);\r\n }\r\n\r\n onFilterSelectionProductGroup (event: any) {\r\n const selectedProductGroup = event.currentTarget.value;\r\n const selectedProductGroupIsActive = event.currentTarget.checked;\r\n this.changeActiveFilters('productGroups', selectedProductGroup, selectedProductGroupIsActive);\r\n }\r\n\r\n onFilterSelectionSustainability (event: any) {\r\n const selected = event.currentTarget.value;\r\n const selectedIsActive = event.currentTarget.checked;\r\n this.changeActiveFilters('sustainability', selected, selectedIsActive);\r\n }\r\n\r\n onFilterSelectionDeliveryWindow (event: any) {\r\n const selectedDeliveryWindow = event.currentTarget.value;\r\n const selectedDeliveryWindowIsActive = event.currentTarget.checked;\r\n this.changeActiveFilters('deliveryWindows', selectedDeliveryWindow, selectedDeliveryWindowIsActive);\r\n }\r\n\r\n onFilterSelectionProductCategory (event: any) {\r\n const selectedProdoctCategory = event.currentTarget.value;\r\n const selectedProdoctCategoryWindowIsActive = event.currentTarget.checked;\r\n this.changeActiveFilters('productCategories', selectedProdoctCategory, selectedProdoctCategoryWindowIsActive);\r\n }\r\n\r\n changeActiveFilters (filterType: any, filterValue: string, isActive: boolean) {\r\n const newFilter = Object.assign({}, this.props.filterState.filter);\r\n\r\n if (!newFilter) return\r\n\r\n let tempResult;\r\n\r\n switch (filterType) {\r\n case 'seasons':\r\n if (isActive) {\r\n newFilter.activeFilters.seasons.push(filterValue);\r\n } else {\r\n const filterTypeIndex = newFilter.activeFilters.seasons.indexOf(filterValue);\r\n newFilter.activeFilters.seasons.splice(filterTypeIndex, 1);\r\n }\r\n break;\r\n case 'deliveryWindows':\r\n if (isActive) { \r\n newFilter.activeFilters.deliveryWindows.push(filterValue);\r\n } else {\r\n const filterTypeIndex = newFilter.activeFilters.deliveryWindows.indexOf(filterValue);\r\n newFilter.activeFilters.deliveryWindows.splice(filterTypeIndex, 1);\r\n }\r\n break;\r\n case 'sustainability':\r\n if (isActive && newFilter.activeFilters.sustainability) {\r\n newFilter.activeFilters.sustainability.push(filterValue);\r\n } else {\r\n if (newFilter.activeFilters.sustainability) {\r\n const filterTypeIndex = newFilter.activeFilters.sustainability.indexOf(filterValue);\r\n newFilter.activeFilters.sustainability.splice(filterTypeIndex, 1); \r\n }\r\n }\r\n break;\r\n case 'productGroups':\r\n if (isActive) {\r\n newFilter.activeFilters.productGroups.push(filterValue);\r\n } else {\r\n const filterTypeIndex = newFilter.activeFilters.productGroups.indexOf(filterValue);\r\n newFilter.activeFilters.productGroups.splice(filterTypeIndex, 1);\r\n }\r\n\r\n let cloned = cloneDeep(newFilter);\r\n cloned.activeFilters.productCategories = [];\r\n \r\n tempResult = FilterHelper.resultByFilter(cloned, this.props.styles);\r\n\r\n if (!this.props.collectionName) {\r\n newFilter.productCategories = FilterHelper.hydrateProductCategories(tempResult);\r\n } else {\r\n newFilter.productCategories = FilterHelper.hydrateProductCategoriesByCollectionSort(tempResult, this.props.collectionName);\r\n }\r\n\r\n break;\r\n case 'productCategories':\r\n if (isActive) {\r\n newFilter.activeFilters.productCategories.push(filterValue);\r\n } else {\r\n const filterTypeIndex = newFilter.activeFilters.productCategories.indexOf(filterValue);\r\n newFilter.activeFilters.productCategories.splice(filterTypeIndex, 1);\r\n }\r\n \r\n break;\r\n }\r\n\r\n this.props.applyFilter(newFilter);\r\n }\r\n\r\n \r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n {(this.props.filterState.filter && this.props.filterState.filter.deliveryWindows\r\n && this.props.filterState.filter.deliveryWindows.map(name => \r\n this.props.filterState.filter && !!name && (\r\n
\r\n \r\n
\r\n )\r\n ))}\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n {(this.props.filterState.filter && this.props.filterState.filter.sustainability\r\n && this.props.filterState.filter.sustainability.map(sustainabilityName => \r\n this.props.filterState.filter && !!sustainabilityName && (\r\n
\r\n \r\n
\r\n )\r\n ))}\r\n
\r\n
\r\n
\r\n \r\n
\r\n {(this.props.filterState.filter && this.props.filterState.filter.productGroups\r\n && this.props.filterState.filter.productGroups.map(productGroupName => \r\n this.props.filterState.filter && !!productGroupName && (\r\n
\r\n \r\n
\r\n )\r\n ))}\r\n
\r\n
\r\n \r\n
\r\n {(this.props.filterState.filter && this.props.filterState.filter.productCategories\r\n && this.props.filterState.filter.productCategories.map(productCategoryName => \r\n this.props.filterState.filter && !!productCategoryName && (\r\n
\r\n \r\n
\r\n )\r\n ))}\r\n
\r\n
\r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (states: RootState, ownProps: OwnProps): StateProps => {\r\n return {\r\n filterState: states.session.filter\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: ThunkDispatch<{}, {}, any>, ownProps: OwnProps): DispatchProps => {\r\n return {\r\n getFilter: async () => {\r\n \r\n await dispatch(getFilter())\r\n console.log('getFIlter completed [UI]')\r\n },\r\n applyFilter: async (filter: Filter) => {\r\n await dispatch(applyFilter(filter))\r\n console.log('apply filter completed [UI]')\r\n },\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(FilterComponent)","import React, { useState, useEffect, createRef } from 'react';\r\n\r\nimport { FaChevronLeft } from 'react-icons/fa';\r\n\r\nimport { throttle } from 'lodash';\r\n\r\ninterface IProps {\r\n showGoBack?: boolean\r\n goBack?: Function\r\n title: string\r\n onSticky?: Function\r\n onUnSticky?: Function\r\n}\r\n\r\nconst StickyHeader: React.FC = (props) => {\r\n const { showGoBack, goBack, title, onSticky, onUnSticky } = props;\r\n let ref = createRef();\r\n const [isSticky, setSticky] = useState(false);\r\n const top = window.innerWidth > 1000 ? 78 : 110;\r\n\r\n useEffect(() => {\r\n const container = document.getElementById('sticky-container');\r\n // Add scroll event when the component is loaded\r\n container && container.addEventListener('scroll', throttle(handleScroll, 100));\r\n\r\n return () => {\r\n // Remove scroll event after the component is unmount,\r\n // like componentWillUnmount()\r\n container && container.removeEventListener('scroll', () => handleScroll);\r\n };\r\n // Here, we set useEffect() arguments as empty array.\r\n // This means useEffect() will only run once after component loaded\r\n });\r\n\r\n const handleScroll = () => {\r\n // Make sure ref has current attibute and getBoundingClientRect function\r\n // otherwise, it could cause getBoundingClientRect undefined error.\r\n if (ref && ref.current && ref.current.getBoundingClientRect()) {\r\n // Then, we compare the distance of the ref component to the top\r\n // with top value we set. If less than, we set isStick ture.\r\n if (onSticky && ref && ref.current && ref.current.getBoundingClientRect().top <= top) {\r\n if (!ref.current.classList.contains('is-sticky')) {\r\n setSticky(true);\r\n onSticky(title)\r\n }\r\n } else {\r\n if (ref.current.classList.contains('is-sticky') && onUnSticky) {\r\n setSticky(false);\r\n onUnSticky(title)\r\n }\r\n }\r\n }\r\n };\r\n\r\n return (\r\n

\r\n { showGoBack && goBack}>}\r\n \r\n { title }\r\n \r\n

\r\n )\r\n}\r\n\r\nexport default StickyHeader;","import React from 'react';\r\nimport { trackWindowScroll } from 'react-lazy-load-image-component';\r\nimport StickyHeader from './StickyHeader';\r\nimport ProductListItem from './ProductListItem';\r\nimport { StyleBean } from '../../models/Beans';\r\nimport ClipLoader from 'react-spinners/ClipLoader';\r\nimport InfiniteScroll from 'react-infinite-scroller';\r\n \r\nconst InfinityList = (props: any) => {\r\n const {\r\n elements,\r\n onSticky,\r\n onUnSticky,\r\n handleOnProductClick,\r\n lineDiscount,\r\n isInBasket,\r\n lazyLoadMoloMaster,\r\n loadItems,\r\n hasMore,\r\n scrollPosition\r\n } = props;\r\n\r\n const loader =
\r\n\r\n let items: any = [];\r\n elements.map((element: any, i: number) => {\r\n let rendered =
\r\n\r\n if (element.type === 'iheader' && element.header) {\r\n rendered = \r\n }\r\n\r\n if (element.type === 'style' && element.style) {\r\n const style = element.style;\r\n\r\n if (style) {\r\n rendered = handleOnProductClick(style) }\r\n key={style.masterColor + style.colorCode + style.description}>\r\n \r\n \r\n }\r\n }\r\n\r\n return items.push(\r\n rendered\r\n );\r\n });\r\n \r\n return (\r\n
\r\n \r\n
\r\n { items }\r\n
\r\n \r\n
\r\n );\r\n}\r\n \r\nexport default trackWindowScroll(InfinityList);","import { ThunkAction, ThunkDispatch } from 'redux-thunk'\r\nimport { AnyAction } from 'redux'\r\n\r\n// import axios from 'axios';\r\nimport axios from '../globalAxios';\r\nimport { uniq, sortBy } from 'lodash';\r\nimport { appConfig } from '../../config';\r\n\r\nimport Style, { DeliveryWindow, mapStyles } from 'molo-shared/lib/models/Style';\r\nimport { FaConnectdevelop } from 'react-icons/fa';\r\n\r\nconst baseUrl = appConfig.api.baseUrl;\r\n\r\nexport interface IGetCollections {\r\n type: 'FETCH_COLLECTIONS_SUCCESS',\r\n collections: any[]\r\n}\r\n\r\nexport interface IGetCollectionMaster {\r\n type: 'FETCH_COLLECTION_MASTER_SUCCESS',\r\n styles: any[]\r\n}\r\n\r\nexport interface SetFetcingCollectionMasters {\r\n type: 'SET_FETCHING_COLLECTION_MASTERS'\r\n isFetching: boolean\r\n}\r\n\r\nexport interface ISetDeliveryWindows {\r\n type: 'SET_DELIVERY_WINDOWS_SUCCESS',\r\n deliveryWindows: DeliveryWindow[]\r\n}\r\n\r\nexport type CollectionsActions = IGetCollections | IGetCollectionMaster | SetFetcingCollectionMasters | ISetDeliveryWindows\r\n\r\n// Action Creators\r\nexport const getCollectionsSuccess = (collections: any[]): IGetCollections => {\r\n return { type: 'FETCH_COLLECTIONS_SUCCESS', collections }\r\n}\r\n\r\nexport const getCollectionMasterSuccess = (styles: Style[]): IGetCollectionMaster => {\r\n return { type: 'FETCH_COLLECTION_MASTER_SUCCESS', styles }\r\n}\r\n\r\nexport const setFetcingCollectionMasters = (isFetching: boolean) => {\r\n return { type: 'SET_FETCHING_COLLECTION_MASTERS', isFetching }\r\n}\r\n\r\nexport const setDeliveryWindowsSuccess = (deliveryWindows: DeliveryWindow[]): ISetDeliveryWindows => {\r\n return { type: 'SET_DELIVERY_WINDOWS_SUCCESS', deliveryWindows }\r\n}\r\n\r\nexport const getCollections = (orderType: string): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n const url = baseUrl + 'OrderTypes/GetOrderTypeCollections'\r\n dispatch(setFetcingCollectionMasters(true))\r\n \r\n try {\r\n const response = await axios.post(url, null, {params: { orderTypeName: orderType }});\r\n let collections = response.data;\r\n dispatch(setFetcingCollectionMasters(false))\r\n dispatch(getCollectionsSuccess(collections))\r\n } catch (e) {\r\n\r\n }\r\n }\r\n}\r\n\r\nexport const getCollectionMasters = (orderType: string, collectionName: string, currencyCode: string, pricegroup: string): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n const url = baseUrl + 'Items/GetCollectionMasters'\r\nconsole.log('GetCollectionMasters1');\r\n dispatch(setFetcingCollectionMasters(true));\r\n \r\n try {\r\n const response = await axios.post(url, null, {params: { orderType, collectionName, currencyCode, pricegroup }});\r\n let styles = mapStyles(response.data);\r\n\r\n // Hack - should be removed(TS)\r\n if (orderType === 'PRE-ORDER S22') {\r\n // styles = styles.filter(style => style.navCollection.includes('22'))\r\n }\r\n\r\n dispatch(getCollectionMasterSuccess(styles))\r\n dispatch(setDeliveryWindows(styles));\r\n } catch (e) {\r\n console.log(e, '**ERROR**');\r\n } finally {\r\n dispatch(setFetcingCollectionMasters(false));\r\n }\r\n }\r\n}\r\n\r\nexport const setDeliveryWindows = (products: Style[]): ThunkAction, {}, {}, AnyAction> => {\r\n return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise => {\r\n const allDeliveryWindows = products.map(style => style.deliveryWindow);\r\n const deliveryWindows: DeliveryWindow[] = [];\r\n const uniqueWindows = uniq(allDeliveryWindows.map(window => window.window));\r\n\r\n for (const key of uniqueWindows) {\r\n const window = allDeliveryWindows.find(window => window.window === key);\r\n if (window) {\r\n deliveryWindows.push(window);\r\n }\r\n }\r\n\r\n const windows = sortBy(deliveryWindows, 'sort')\r\n\r\n dispatch(setDeliveryWindowsSuccess(windows));\r\n }\r\n}\r\n\r\nexport class CollectionApi {\r\n static getCollectionMasters = async (orderType: string, collectionName: string, currencyCode: string, pricegroup: string) => {\r\n const url = baseUrl + 'Items/GetCollectionMasters'\r\n console.log('getCollectionMasters');\r\n return await axios.post(url, null, {params: { orderType, collectionName, currencyCode, pricegroup }});\r\n }\r\n\r\n static getCollections = async (orderTypeName: string) => {\r\n const url = baseUrl + 'OrderTypes/GetOrderTypeCollections'\r\n return await axios.post(url, null, {params: { orderTypeName }});\r\n }\r\n}\r\n","var _g, _g2;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from \"react\";\nconst SvgFilterIconBlack = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 100 125\",\n enableBackground: \"new 0 0 100 100\",\n xmlSpace: \"preserve\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n display: \"none\"\n }, /*#__PURE__*/React.createElement(\"circle\", {\n display: \"inline\",\n fill: \"#000000\",\n cx: 50,\n cy: 50,\n r: 40\n }), /*#__PURE__*/React.createElement(\"circle\", {\n display: \"inline\",\n fill: \"#000000\",\n cx: 50,\n cy: 50,\n r: 40\n }))), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M29.5,40.7c4.4,0,8.1-3,9.2-7h40.7v-5H38.7c-1.1-4-4.8-7-9.2-7c-5.2,0-9.5,4.3-9.5,9.5C20,36.5,24.3,40.7,29.5,40.7z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M70.8,56.5c-4.4,0-8.1,3-9.2,7h-41v5h41c1.1,4,4.8,7,9.2,7c5.2,0,9.5-4.3,9.5-9.5S76,56.5,70.8,56.5z\"\n })))));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgFilterIconBlack, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/filter_icon_black.48fbcc3a.svg\";\nexport { ForwardRef as ReactComponent };","import React, { Component } from 'react'\r\nimport { ThunkDispatch } from 'redux-thunk'\r\nimport CSS from 'csstype';\r\nimport { RootState } from '../../store';\r\nimport { connect } from 'react-redux'\r\nimport {RouteComponentProps, withRouter} from \"react-router-dom\";\r\n\r\n// Components.\r\nimport ProductOverlay from '../shared/ProductOverlay';\r\nimport ProductListItem from '../shared/ProductListItem';\r\nimport FilterComponent from './FilterComponent';\r\nimport StickyHeader from './StickyHeader';\r\nimport InfinityList from './InfinityList';\r\n\r\n// Store.\r\nimport { IOrderState } from '../../store/order/orderStore';\r\nimport { IFilterState } from '../../store/session/reducers';\r\nimport { getOrder, applyChanges } from '../../store/order/actions';\r\nimport { setDeliveryWindows } from '../../store/collections/actions';\r\nimport { IProductState } from '../../store/products/reducers';\r\nimport ProductApi from '../../store/products/ProductApi';\r\nimport { IUserSate } from '../../store/user/reducers';\r\n\r\n// Utils.\r\nimport { ReactComponent as FilterIcon } from '../../images/svg/filter_icon_black.svg';\r\nimport { FilterHelper } from '../../utils/FilterHelper';\r\nimport { uniq, clone, orderBy, sortBy } from 'lodash';\r\nimport { productListCategorySort } from '../../constants/productSort';\r\n\r\n// import { TransitionGroup, CSSTransition } from 'react-transition-group';\r\n// import InfiniteScroll from 'react-infinite-scroller';\r\n\r\n// Models.\r\nimport Order from '../../models/Order';\r\n// import Style, { createStyle } from '../../models/Style'\r\nimport Style, { createStyle } from 'molo-shared/lib/models/Style';\r\nimport { basketLine } from '../../models/Basket';\r\nimport { MoloItem } from '../../models/MoloItem';\r\nimport { StyleBean } from '../../models/Beans';\r\n\r\n// Third party.\r\nimport { TweenLite } from \"gsap\";\r\nimport { Console } from 'console';\r\n// import ClipLoader from 'react-spinners/ClipLoader';\r\n\r\ninterface IHeader {\r\n description: string\r\n}\r\n\r\ninterface IElements {\r\n type: 'style' | 'iheader'\r\n style?: Style | undefined,\r\n header?: IHeader\r\n}\r\n\r\ninterface ICategory { [id: string]: Style[]; }\r\n\r\ninterface State {\r\n order: Order | null,\r\n productOverlayComponent: JSX.Element | null,\r\n showModal: boolean,\r\n filteredStyles: Style[],\r\n productSortedByCategory: ICategory,\r\n productSortedByCategoryAsMap: Map,\r\n changes: basketLine,\r\n showFilter: boolean,\r\n selectedDeliveryWindow: string | undefined\r\n selectedSustainability: string[] | undefined\r\n selectedProduct?: StyleBean\r\n stickies: string[]\r\n listIndex: number,\r\n products: Style[],\r\n chunked: Style[][]\r\n infiniteLoaderCurrentIndex: number,\r\n currentCategory: string,\r\n elements: IElements[],\r\n hasMore: boolean,\r\n showInSeasonOnly: boolean,\r\n}\r\n \r\ninterface OwnProps {\r\n products: Style[],\r\n lineDiscount?: number,\r\n ignoreFilter?: boolean\r\n showGoBack?: boolean\r\n lazyLoadMoloMaster?: boolean\r\n orderType?: string\r\n useProductOrderType?: boolean,\r\n useInfiniteScroll?: boolean,\r\n simple?: boolean\r\n match: {params: {orderType: string, collection: string}},\r\n hidePrice?: boolean\r\n checkOrderType?: boolean\r\n}\r\n \r\ninterface DispatchProps {\r\n getOrder: (appOrderId: number) => void\r\n applyChanges: (orderId: number, changes: basketLine) => void\r\n setDeliveryWindows: (styles: Style[]) => void\r\n}\r\n \r\ninterface StateProps {\r\n orderState: IOrderState\r\n filterState: IFilterState\r\n productState: IProductState\r\n userState: IUserSate\r\n}\r\n \r\ntype Props = StateProps & OwnProps & DispatchProps & RouteComponentProps;\r\n\r\nexport const groupBy = (key: any) => (array: any[]) =>\r\narray.reduce((objectsByKeyValue: { [x: string]: any; }, obj: { [x: string]: any; }) => {\r\n const value = obj[key];\r\n objectsByKeyValue[value] = (objectsByKeyValue[value] || []).concat(obj);\r\n return objectsByKeyValue;\r\n}, {});\r\n\r\nexport class ProductList extends Component {\r\n constructor(props: Props) {\r\n super(props);\r\n \r\n this.box = null;\r\n this.t = null;\r\n }\r\n\r\n box: HTMLDivElement | null;\r\n t: ReturnType | null;\r\n\r\n private productSortedByCategory: ICategory = {};\r\n private initialChanges: basketLine = {};\r\n private tempProductListStyle: CSS.Properties = {\r\n position: 'relative',\r\n rowGap: '30px',\r\n cursor: 'pointer',\r\n display: 'grid',\r\n gridTemplateColumns: 'repeat(auto-fill, minmax(250px, 1fr))',\r\n gridColumnGap: '30px',\r\n listStyle: 'none',\r\n margin: 0,\r\n padding: 0,\r\n }\r\n\r\n state: State = {\r\n order: null,\r\n productOverlayComponent: null,\r\n showModal: false,\r\n filteredStyles: [],\r\n productSortedByCategory: this.productSortedByCategory,\r\n changes: this.initialChanges,\r\n showFilter: false,\r\n selectedDeliveryWindow: undefined,\r\n selectedSustainability: [],\r\n stickies: [],\r\n listIndex: 0,\r\n products: [],\r\n infiniteLoaderCurrentIndex: 0,\r\n chunked: [[]],\r\n currentCategory: '',\r\n elements: [],\r\n hasMore: true,\r\n showInSeasonOnly: false,\r\n productSortedByCategoryAsMap: new Map(),\r\n }\r\n\r\n componentDidMount() {\r\n // console.log(this.props, 'PROPS :: mount')\r\n }\r\n\r\n componentDidUpdate(prevProps: Props, prevState: State) {\r\n let filterHasChanged = prevProps.filterState.filter !== this.props.filterState.filter;\r\n let { collection } = this.props.match.params;\r\n let prevCollection = prevProps.match.params.collection;\r\n\r\n if (prevState.showInSeasonOnly !== this.state.showInSeasonOnly) {\r\n filterHasChanged = true;\r\n }\r\n\r\n let products = [ ...this.props.products ];\r\n \r\n if ((filterHasChanged && this.props.filterState.filter)) {\r\n let withOutNOS = products.filter(style => style.seasonCode !== 'NOS');\r\n let seasons = uniq(withOutNOS.map(style => style.seasonCode));\r\n let years = uniq(seasons.map(seasonCode => seasonCode.substring(1))).sort().reverse();\r\n \r\n const latestYear = years[0];\r\n let inSeason = '';\r\n\r\n if (seasons.indexOf(`S${latestYear}`) !== -1) {\r\n inSeason = `S${latestYear}`;\r\n }\r\n\r\n if (seasons.indexOf(`W${latestYear}`) !== -1) {\r\n inSeason = `W${latestYear}`;\r\n }\r\n\r\n if (this.state.showInSeasonOnly) {\r\n products = products.filter(product => product.seasonCode === inSeason)\r\n }\r\n\r\n const filteredStyles = FilterHelper.resultByFilter(this.props.filterState.filter, products);\r\n\r\n \r\n // const productSortedByCategory = this.getProductCategories(filteredStyles);\r\n\r\n const productSortedByCategoryAsMap = this.getProductCategoriesAsMap(filteredStyles)\r\n\r\n // console.log(productSortedByCategoryAsMap, 'new map :: productSortedByCategoryAsMap')\r\n const iterator1 = productSortedByCategoryAsMap.keys();\r\n // console.log(iterator1.next().value, 'iterator1.next().value')\r\n\r\n // const currentCategory = this.state.currentCategory !== '' ? this.state.currentCategory : \r\n // Object.keys(productSortedByCategory).sort().reverse()[0]\r\n\r\n const currentCategory = iterator1.next().value;\r\n\r\n this.props.setDeliveryWindows(products);\r\n \r\n this.setState({\r\n filteredStyles,\r\n // productSortedByCategory,\r\n currentCategory,\r\n productSortedByCategoryAsMap,\r\n }, () => {\r\n this.updateItems()\r\n });\r\n }\r\n\r\n if (this.props.ignoreFilter && this.props.products !== prevProps.products) {\r\n const productSortedByCategory = this.getProductCategories(products);\r\n this.setState({ filteredStyles: { ...products }, productSortedByCategory });\r\n }\r\n }\r\n\r\n sortBySeasonMaster = (categories: Style[]) => {\r\n const groupBySeasonCode = groupBy(['seasonCode']);\r\n const gbs = groupBySeasonCode(categories);\r\n let sortKeys: string[] = [];\r\n let years = uniq(Object.keys(gbs).map(seasonCode => seasonCode.substring(1)));\r\n \r\n \r\n for (const year of years.sort().reverse()) {\r\n if (Object.keys(gbs).indexOf('W' + year) !== -1) {\r\n sortKeys.push('W' + year) \r\n }\r\n\r\n if (Object.keys(gbs).indexOf('S' + year) !== -1) {\r\n sortKeys.push('S' + year)\r\n }\r\n }\r\n\r\n let mappedInSeasonOrder: Map = new Map();\r\n\r\n for (const delta of sortKeys) {\r\n mappedInSeasonOrder.set(delta, orderBy(gbs[delta], ['masterId'],['asc']));\r\n }\r\n\r\n let newSort: Style[] = [];\r\n\r\n mappedInSeasonOrder.forEach((value: Style[], key: string) => {\r\n for (const i in value) {\r\n newSort.push(value[i])\r\n }\r\n });\r\n\r\n if (gbs['NOS'] && gbs['NOS'].length) {\r\n newSort = [ ...newSort, ...gbs['NOS']]\r\n }\r\n\r\n return newSort;\r\n }\r\n\r\n getProductCategoriesAsMap(styles: Style[]): Map {\r\n let categories: ICategory = {};\r\n let { collection } = this.props.match.params;\r\n let collectionName = collection;\r\n\r\n if (!styles.length) return new Map();\r\n\r\n for (const style of styles) {\r\n if (!categories[style.productCategory] && style.productCategory.trim() !== '') {\r\n categories[style.productCategory] = [];\r\n }\r\n\r\n if (style.productCategory.trim() !== '') {\r\n categories[style.productCategory].push(style);\r\n }\r\n }\r\n\r\n for (const i in categories) {\r\n categories[i] = orderBy(categories[i], ['masterId'],['asc']);\r\n }\r\n\r\n let keysNotInSort: string[] = [];\r\n let keysInSort: string[] = [];\r\n let inCat: ICategory = {};\r\n let productMap = new Map();\r\n // let notInCat: ICategory = {};\r\n const allowedCollections = ['ow', 'main', 'sport', 'swim', 'outerwear']\r\n if (allowedCollections.indexOf(collectionName.toLowerCase()) === -1) {\r\n collectionName = 'no-collection';\r\n }\r\n\r\n if (collectionName === 'no-collection') {\r\n // return categories\r\n\r\n for (const categoryName in categories) {\r\n productMap.set(categoryName, categories[categoryName]);\r\n }\r\n\r\n return productMap;\r\n }\r\n\r\n if (productListCategorySort[collectionName.toLowerCase()]) {\r\n keysNotInSort = Object.keys(categories)\r\n .filter(key => productListCategorySort[collectionName.toLowerCase()].indexOf(key) === -1 && key.toLowerCase() !== 'marketing')\r\n\r\n keysInSort = Object.keys(categories)\r\n .filter(key => productListCategorySort[collectionName.toLowerCase()].indexOf(key) !== -1 && key.toLowerCase() !== 'marketing')\r\n\r\n keysInSort = sortBy(keysInSort, (item) => {\r\n return productListCategorySort[collectionName.toLowerCase()].indexOf(item)\r\n });\r\n }\r\n\r\n // orderBy(categories[i], ['masterId'],['asc']);\r\n for (const categoryName of keysInSort) {\r\n inCat[categoryName] = categories[categoryName];\r\n let newSort = this.sortBySeasonMaster(categories[categoryName])\r\n\r\n productMap.set(categoryName, newSort);\r\n }\r\n\r\n for (const categoryName of keysNotInSort) {\r\n let newSort = this.sortBySeasonMaster(categories[categoryName])\r\n productMap.set(categoryName, newSort);\r\n }\r\n \r\n if (categories['Marketing']) {\r\n let newSort = this.sortBySeasonMaster(categories['Marketing'])\r\n productMap.set('Marketing', newSort);\r\n }\r\n\r\n return productMap;\r\n }\r\n\r\n getProductCategories(styles: Style[]): ICategory {\r\n let categories: ICategory = {};\r\n let masterIds = uniq(styles.map(style => style.masterId.substring(1)));\r\n masterIds = uniq(masterIds.map(masterId => masterId.substring(0, masterId.length - 4)));\r\n masterIds = masterIds.filter(masterId => masterId.startsWith('W') || masterId.startsWith('S'))\r\n let years = uniq(masterIds.map(masterId => masterId.substring(1)));\r\n let sortKeys: string[] = [];\r\n\r\n for (const year of years.sort().reverse()) {\r\n sortKeys.push('W' + year)\r\n sortKeys.push('S' + year)\r\n }\r\n\r\n for (const style of styles) {\r\n if (!categories[style.productCategory]) {\r\n categories[style.productCategory] = [];\r\n }\r\n\r\n categories[style.productCategory].push(style);\r\n }\r\n\r\n // for (const key in categories) {\r\n // const category = clone(categories[key]);\r\n\r\n // const sorted = category.sort((cat1, cat2) => {\r\n // let m1 = cat1.masterId.substring(1);\r\n // m1 = m1.substring(0, m1.length - 4);\r\n // let m2 = cat2.masterId.substring(1);\r\n // m2 = m2.substring(0, m2.length - 4);\r\n \r\n // const index1 = sortKeys.indexOf(m1);\r\n // const index2 = sortKeys.indexOf(m2);\r\n \r\n // if (index1 === -1 && index2 === -1) {\r\n // return -1;\r\n // }\r\n\r\n // if (index1 === -1 && index2 !== -1) {\r\n // return 1\r\n // }\r\n\r\n // if (index2 === -1 && index1 !== -1) {\r\n // return -1\r\n // }\r\n\r\n // if (index1 > index2) {\r\n // return 1;\r\n // }\r\n\r\n // if (index1 < index2) {\r\n // return -1;\r\n // }\r\n\r\n // return -1;\r\n // })\r\n \r\n // categories[key] = sorted;\r\n // }\r\n\r\n for (const i in categories) {\r\n categories[i] = orderBy(categories[i], ['masterId'],['asc']);\r\n }\r\n\r\n return categories;\r\n }\r\n\r\n public static getDerivedStateFromProps(props: Props, state: State) {\r\n if (props.orderState.order && props.orderState.order !== state.order) {\r\n return {\r\n order: props.orderState.order,\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n handleOnChangeProduct = async (item: MoloItem) => {\r\n const currencyCode = this.props.userState.user.currencyCode || 'EUR';\r\n const pricegroup = this.props.userState.user ? this.props.userState.user.customerData.pricegroup : 'ALL';\r\n const response = await ProductApi.getMaster(item.masterId, item.colorCode, currencyCode,pricegroup);\r\n const product = response.data;\r\n \r\n this.handleOnProductClick(createStyle(product));\r\n }\r\n\r\n handleOnProductClick = (product: Style) => {\r\n // this.t = TweenLite.to(this.box, 1, {duration: 1, opacity: 1, y: 0, stagger: 0.25});\r\n // this.t = TweenLite.to(this.box, .2, {y: -200, opacity: 0})\r\n\r\n setTimeout(() => {\r\n this.setState({\r\n \r\n selectedProduct: StyleBean.build(product, 'style'),\r\n showModal: true,\r\n });\r\n }, 200)\r\n \r\n }\r\n\r\n hide = () => {\r\n this.setState({showModal: false, productOverlayComponent: null})\r\n }\r\n\r\n applyBasketChanges = (changes: basketLine) => {\r\n const newChanges = { ...this.state.changes, ...changes}\r\n this.setState({changes: newChanges})\r\n }\r\n\r\n applyChanges = () => {\r\n if (this.props.orderState.order) {\r\n this.props.applyChanges(this.props.orderState.order.orderheader.appOrderId, this.state.changes);\r\n this.setState({changes: {}}, () => {\r\n this.hide();\r\n })\r\n }\r\n }\r\n\r\n goBack = () => {\r\n if (this.props.history) {\r\n this.props.history.goBack();\r\n } \r\n }\r\n\r\n isInBasket = (product: Style) => {\r\n return this.props.orderState.order && !!this.props.orderState.order.orderLines.find((line) => {\r\n return line.masterid === product.masterId && line.colorcode === product.colorCode;\r\n })\r\n }\r\n\r\n onSticky = (categoryName: string) => {\r\n const stickies = this.state.stickies;\r\n stickies.push(categoryName)\r\n this.setState({ stickies })\r\n }\r\n\r\n onUnSticky = (categoryName: string) => {\r\n const stickies = this.state.stickies;\r\n const index = stickies.indexOf(categoryName);\r\n if (index > -1) {\r\n stickies.splice(index, 1);\r\n }\r\n\r\n this.setState({ stickies })\r\n }\r\n\r\n renderCategory(styles: Style[], categoryName: string) {\r\n if (!styles.length) {\r\n return null\r\n }\r\n\r\n return (\r\n \r\n \r\n
    \r\n {\r\n styles && styles.map((product:Style, index:number) =>\r\n
  • this.handleOnProductClick(product) } className=\"pl-item__wrapper ripple\">\r\n \r\n
  • \r\n )\r\n }\r\n
\r\n
\r\n )\r\n }\r\n\r\n renderOverlay() {\r\n\r\n if (!this.state.selectedProduct) {\r\n return null;\r\n }\r\n console.log('open product');\r\n\r\n console.dir(this.state.selectedProduct);\r\n return (\r\n \r\n )\r\n }\r\n\r\n updateItems = () => {\r\n this.setState({\r\n hasMore: true,\r\n elements: [],\r\n currentCategory: this.state.currentCategory,\r\n infiniteLoaderCurrentIndex: 0\r\n }, () => {\r\n this.loadItems()\r\n })\r\n }\r\n\r\n loadItems = () => {\r\n\r\n if (this.state.currentCategory !== '') {\r\n let elements: IElements[] = []\r\n\r\n // let productSortedByCategory = this.getProductCategories(this.state.filteredStyles);\r\n let currentCategory = this.state.currentCategory;\r\n let infiniteLoaderCurrentIndex = this.state.infiniteLoaderCurrentIndex;\r\n let counter = 0;\r\n let hasMore = true;\r\n console.log('loadItems infinity list'); \r\n\r\n while (counter < 100) {\r\n if (!this.state.productSortedByCategoryAsMap.has(currentCategory)) {\r\n counter = 100;\r\n hasMore = false;\r\n break;\r\n }\r\n\r\n const styles = this.state.productSortedByCategoryAsMap.get(currentCategory);\r\n const nextElement = styles && styles[infiniteLoaderCurrentIndex] ? styles[infiniteLoaderCurrentIndex] : undefined\r\n\r\n if (nextElement) {\r\n\r\n if (infiniteLoaderCurrentIndex === 0) {\r\n const header: IHeader = {description: currentCategory}\r\n elements.push(\r\n {\r\n type: 'iheader',\r\n header: header,\r\n }\r\n )\r\n }\r\n\r\n const product = nextElement;\r\n elements.push(\r\n {\r\n type: \"style\",\r\n style: product\r\n }\r\n )\r\n counter++\r\n infiniteLoaderCurrentIndex++;\r\n } else {\r\n infiniteLoaderCurrentIndex = 0;\r\n const keys = [ ...this.state.productSortedByCategoryAsMap.keys() ] \r\n currentCategory = keys[(keys.indexOf(currentCategory) + 1)]; \r\n }\r\n }\r\n \r\n\r\n this.setState({\r\n hasMore,\r\n elements: [...this.state.elements, ...elements],\r\n currentCategory,\r\n infiniteLoaderCurrentIndex\r\n })\r\n }\r\n }\r\n\r\n // loadItems = () => {\r\n // if (this.state.currentCategory !== '') {\r\n // let elements: IElements[] = []\r\n\r\n \r\n\r\n // // let productSortedByCategory = this.getProductCategories(this.state.filteredStyles);\r\n // let currentCategory = this.state.currentCategory;\r\n // let infiniteLoaderCurrentIndex = this.state.infiniteLoaderCurrentIndex;\r\n // let counter = 0;\r\n // let hasMore = true;\r\n \r\n\r\n // while (counter < 100) {\r\n // if (!this.state.productSortedByCategory[currentCategory]) {\r\n // counter = 100;\r\n // hasMore = false;\r\n // break;\r\n // }\r\n\r\n // if (this.state.productSortedByCategory[currentCategory][infiniteLoaderCurrentIndex]) {\r\n\r\n // if (infiniteLoaderCurrentIndex === 0) {\r\n // const header: IHeader = {description: currentCategory}\r\n // elements.push(\r\n // {\r\n // type: 'iheader',\r\n // header: header,\r\n // }\r\n // )\r\n // }\r\n\r\n // const product = this.state.productSortedByCategory[currentCategory][infiniteLoaderCurrentIndex];\r\n // elements.push(\r\n // {\r\n // type: \"style\",\r\n // style: product\r\n // }\r\n // )\r\n // counter++\r\n // infiniteLoaderCurrentIndex++;\r\n // } else {\r\n // infiniteLoaderCurrentIndex = 0;\r\n // const keys = Object.keys(this.state.productSortedByCategory).sort().reverse();\r\n // currentCategory = keys[(keys.indexOf(currentCategory) + 1)]; \r\n // }\r\n // }\r\n\r\n // console.log(elements, 'elements :: on first load')\r\n \r\n\r\n // this.setState({\r\n // hasMore,\r\n // elements: [...this.state.elements, ...elements],\r\n // currentCategory,\r\n // infiniteLoaderCurrentIndex\r\n // })\r\n // }\r\n // }\r\n\r\n render() {\r\n let { collection } = this.props.match.params;\r\n\r\n if (this.props.simple) {\r\n return (\r\n
\r\n { this.state.showModal && this.renderOverlay() }\r\n
\r\n
\r\n
\r\n {\r\n
    \r\n {\r\n this.props.products && this.props.products.map((product:Style, index:number) =>\r\n
  • this.handleOnProductClick(product) } className=\"pl-item__wrapper ripple\">\r\n \r\n
  • \r\n )\r\n }\r\n
\r\n }\r\n
\r\n
\r\n
\r\n
\r\n )\r\n }\r\n\r\n return (\r\n
this.box = e}>\r\n
\r\n \r\n {this.state.stickies[this.state.stickies.length - 1]}\r\n \r\n
\r\n\r\n
\r\n {\r\n !this.props.ignoreFilter &&\r\n \r\n }\r\n {\r\n !this.props.useInfiniteScroll &&\r\n
\r\n {\r\n Object.keys(this.state.productSortedByCategory).sort().reverse().map((key, index) => {\r\n return (\r\n this.renderCategory(this.state.productSortedByCategory[key], key)\r\n )\r\n })\r\n }\r\n
\r\n }\r\n {\r\n this.props.useInfiniteScroll &&\r\n \r\n }\r\n
\r\n\r\n {!this.props.ignoreFilter &&
\r\n this.setState({showFilter: !this.state.showFilter})}\r\n >\r\n \r\n {!this.state.showFilter ? 'Show filter' : 'Hide filter'}\r\n \r\n \r\n
\r\n
}\r\n {this.props.match && this.props.match.params && this.props.match.params.orderType && this.props.match.params.orderType === 'REORDER' &&\r\n
\r\n
\r\n
\r\n {this.setState({ showInSeasonOnly: !this.state.showInSeasonOnly })}}\r\n type=\"checkbox\"/>\r\n
\r\n \r\n
\r\n
\r\n
\r\n
}\r\n { this.state.showModal && this.renderOverlay() }\r\n \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (states: RootState, ownProps: OwnProps): StateProps => {\r\n return {\r\n orderState: states.order.order,\r\n filterState: states.session.filter,\r\n productState: states.productStore.productStore,\r\n userState: states.user.user,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: ThunkDispatch<{}, {}, any>, ownProps: OwnProps): DispatchProps => {\r\n return {\r\n getOrder: async (orderId: number) => {\r\n await dispatch(getOrder(orderId))\r\n // console.log('getOrder completed [UI]')\r\n },\r\n applyChanges: async (orderId: number, changes: basketLine) => {\r\n await dispatch(applyChanges(orderId, changes))\r\n // console.log('applyChanges completed [UI]')\r\n },\r\n setDeliveryWindows: async (styles: Style[]) => {\r\n await dispatch(setDeliveryWindows(styles))\r\n // console.log('setDeliveryWindows completed [UI]')\r\n }\r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(ProductList))\r\n","import React, { Component } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { ThunkDispatch } from 'redux-thunk'\r\n\r\nimport ProductList from '../shared/ProductList';\r\nimport MoloRingloader from '../layout/MoloRingloader';\r\n// import Style from '../../models/Style';\r\nimport Style, { createStyle } from 'molo-shared/lib/models/Style';\r\n\r\n// Store.\r\nimport { RootState } from '../../store';\r\nimport { IUserSate } from '../../store/user/reducers';\r\nimport { getCollectionMasters } from '../../store/collections/actions';\r\nimport { ICollectionState } from '../../store/collections/reducers';\r\nimport { IFilterState } from '../../store/session/reducers';\r\nimport { Filter } from '../../models/Filter';\r\nimport { resetFilter } from '../../store/session/actions';\r\n\r\ninterface State {\r\n products: Style[],\r\n loading: boolean,\r\n orderType: string\r\n collectionName: string\r\n}\r\n \r\ninterface OwnProps {\r\n match: {params: {collection: string, orderType: string}},\r\n}\r\n \r\ninterface DispatchProps {\r\n getCollectionMasters: (orderType: string, collectionName: string, currencyCode: string, pricegroup: string) => void;\r\n resetFilter: (filter: Filter) => void\r\n}\r\n \r\ninterface StateProps {\r\n userState: IUserSate,\r\n collectionState: ICollectionState,\r\n isFetchingCollectionMasters: boolean\r\n filterState: IFilterState\r\n}\r\n \r\ntype Props = StateProps & OwnProps & DispatchProps;\r\n\r\nexport class ProductListContainer extends Component {\r\n\r\n state = { products: [], loading: true, collectionName: '', orderType: '' }\r\n\r\n componentDidMount() {\r\n this.init(this.state);\r\n }\r\n\r\n componentDidUpdate(prevProps: Props, prevState: State) {\r\n this.init(prevState);\r\n }\r\n\r\n componentWillUnmount = () => {\r\n console.log('unmount :: ProductListContainer')\r\n }\r\n\r\n public static getDerivedStateFromProps(props: Props, state: State) {\r\n \r\n if (props.collectionState.styles && props.collectionState.styles.length) {\r\n return {\r\n loading: false,\r\n products: props.collectionState.styles\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n init(state: State) {\r\n const collectionName = this.props.match.params.collection;\r\n const orderType = this.props.match.params.orderType;\r\n const currencyCode = this.props.userState.user.currencyCode;\r\n const pricegroup = this.props.userState.user.customerData.pricegroup;\r\n \r\n if (state.collectionName !== collectionName && !this.props.isFetchingCollectionMasters) {\r\n this.props.getCollectionMasters(orderType, collectionName, currencyCode, pricegroup);\r\n if (this.props.filterState.filter) {\r\n this.props.resetFilter(this.props.filterState.filter)\r\n }\r\n\r\n setTimeout(() => {\r\n this.setState({\r\n collectionName,\r\n orderType,\r\n });\r\n })\r\n }\r\n }\r\n\r\n render() {\r\n const { products, loading } = this.state;\r\n\r\n return (\r\n
\r\n {(loading || this.props.isFetchingCollectionMasters) &&
}\r\n {\r\n (!loading && !this.props.isFetchingCollectionMasters) &&\r\n \r\n }\r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (states: RootState, ownProps: OwnProps): StateProps => {\r\n return {\r\n userState: states.user.user,\r\n collectionState: states.collections.collections,\r\n isFetchingCollectionMasters: states.collections.collections.isFetchingCollectionMasters,\r\n filterState: states.session.filter,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: ThunkDispatch<{}, {}, any>, ownProps: OwnProps): DispatchProps => {\r\n return {\r\n getCollectionMasters: async (orderType: string, collectionName: string, currencyCode: string, pricegroup: string) => {\r\n await dispatch(getCollectionMasters(orderType, collectionName, currencyCode, pricegroup))\r\n console.log('getCollectionMasters completed [UI]')\r\n },\r\n resetFilter: async (filter: Filter) => {\r\n await dispatch(resetFilter(filter))\r\n }\r\n }\r\n}\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ProductListContainer)","import React, { Component } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { ThunkDispatch } from 'redux-thunk'\r\nimport {RouteComponentProps, withRouter} from \"react-router-dom\";\r\n\r\nimport ProductList from '../shared/ProductList';\r\nimport MoloRingloader from '../layout/MoloRingloader';\r\nimport Style from 'molo-shared/lib/models/Style';\r\n\r\n// Models.\r\nimport Order from '../../models/Order';\r\n\r\n// Store.\r\nimport { RootState } from '../../store';\r\nimport { IUserSate } from '../../store/user/reducers';\r\nimport { getCollectionMasters, CollectionApi } from '../../store/collections/actions';\r\nimport { ICollectionState } from '../../store/collections/reducers';\r\nimport { IFilterState } from '../../store/session/reducers';\r\nimport { Filter } from '../../models/Filter';\r\nimport { resetFilter } from '../../store/session/actions';\r\nimport { IOrderState } from '../../store/order/orderStore';\r\nimport { IProductState } from '../../store/products/reducers';\r\nimport { getCollectionsSuccess } from '../../store/collections/actions';\r\n\r\ninterface State {\r\n products: Style[],\r\n loading: boolean,\r\n orderType: string\r\n collectionName: string\r\n}\r\n \r\ninterface OwnProps {\r\n match: {params: {collection: string, orderType: string}},\r\n}\r\n \r\ninterface DispatchProps {\r\n getCollectionMasters: (orderType: string, collectionName: string, currencyCode: string, pricegroup: string) => void;\r\n resetFilter: (filter: Filter) => void\r\n getCollectionsSuccess: (collections: any[]) => void\r\n}\r\n \r\ninterface StateProps {\r\n userState: IUserSate,\r\n collectionState: ICollectionState,\r\n isFetchingCollectionMasters: boolean\r\n filterState: IFilterState\r\n orderState: IOrderState\r\n productState: IProductState\r\n}\r\n \r\ntype Props = StateProps & OwnProps & DispatchProps & RouteComponentProps;\r\n\r\nexport class EditNavOrderContainer extends Component {\r\n\r\n state = { products: [], loading: true, collectionName: '', orderType: '' }\r\n\r\n componentDidMount() {\r\n const { order } = this.props.orderState;\r\n\r\n if (order) {\r\n const allowedTypes = this.props.productState.orderTypes ? this.props.productState.orderTypes.map((orderType: any) => orderType.orderType) : []\r\n const orderType = allowedTypes.indexOf(order.orderheader.orderType) !== -1 ? order.orderheader.orderType : 'REORDER'\r\n this.init(this.state, order, orderType);\r\n }\r\n }\r\n\r\n async componentDidUpdate(prevProps: Props, prevState: State) {\r\n const { order } = this.props.orderState;\r\n let collectionName = this.props.match.params.collection;\r\n const currencyCode = this.props.userState.user.currencyCode;\r\n const pricegroup = this.props.userState.user.customerData.pricegroup;\r\n\r\n if (!order) {\r\n this.props.history.push('/')\r\n }\r\n\r\n if (prevProps.orderState.order !== order && order) {\r\n this.init(this.state, order, this.state.orderType);\r\n }\r\n\r\n if (order) {\r\n let orderType = this.state.orderType\r\n\r\n if (orderType === '') {\r\n const allowedTypes = this.props.productState.orderTypes ? this.props.productState.orderTypes.map((orderType: any) => orderType.orderType) : []\r\n orderType = allowedTypes.indexOf(order.orderheader.orderType) !== -1 ? order.orderheader.orderType : 'REORDER'\r\n }\r\n\r\n if (orderType && prevState.collectionName !== collectionName && !this.props.isFetchingCollectionMasters) {\r\n this.props.getCollectionMasters(orderType, collectionName, currencyCode, pricegroup);\r\n if (this.props.filterState.filter) {\r\n this.props.resetFilter(this.props.filterState.filter)\r\n }\r\n\r\n setTimeout(() => {\r\n this.setState({\r\n collectionName,\r\n orderType,\r\n });\r\n })\r\n }\r\n }\r\n }\r\n\r\n public static getDerivedStateFromProps(props: Props, state: State) {\r\n \r\n if (props.collectionState.styles && props.collectionState.styles.length) {\r\n return {\r\n loading: false,\r\n products: props.collectionState.styles\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n async init(state: State, order: Order, orderType: string) {\r\n const allowedTypes = this.props.productState.orderTypes ? this.props.productState.orderTypes.map((orderType: any) => orderType.orderType) : []\r\n const t = allowedTypes.indexOf(order.orderheader.orderType) !== -1 ? order.orderheader.orderType : 'REORDER'\r\n let collectionName = this.props.match.params.collection;\r\n const response = await CollectionApi.getCollections(t)\r\n const collections = response.data.filter((col: any) => col.collectionName !== '');\r\n \r\n this.props.getCollectionsSuccess(collections)\r\n\r\n if (!collectionName) {\r\n if (response.data.length) {\r\n const hasMainCollection = collections.find((c: any) => c.collectionName.toLowerCase() === 'main')\r\n collectionName = hasMainCollection ? 'main' : collections[0].collectionName;\r\n this.props.history.push('/edit/' + collectionName)\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n const { products, loading } = this.state;\r\n\r\n return (\r\n
\r\n {(loading || this.props.isFetchingCollectionMasters) &&
}\r\n {\r\n (!loading&& !this.props.isFetchingCollectionMasters) &&\r\n \r\n }\r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (states: RootState, ownProps: OwnProps): StateProps => {\r\n return {\r\n userState: states.user.user,\r\n collectionState: states.collections.collections,\r\n isFetchingCollectionMasters: states.collections.collections.isFetchingCollectionMasters,\r\n filterState: states.session.filter,\r\n orderState: states.order.order,\r\n productState: states.productStore.productStore\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: ThunkDispatch<{}, {}, any>, ownProps: OwnProps): DispatchProps => {\r\n return {\r\n getCollectionMasters: async (orderType: string, collectionName: string, currencyCode: string, pricegroup: string) => {\r\n await dispatch(getCollectionMasters(orderType, collectionName, currencyCode, pricegroup))\r\n console.log('getCollectionMasters completed [UI]')\r\n },\r\n resetFilter: async (filter: Filter) => {\r\n await dispatch(resetFilter(filter))\r\n },\r\n getCollectionsSuccess: async (collections: any[]) => {\r\n await dispatch(getCollectionsSuccess(collections))\r\n }\r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(EditNavOrderContainer))","import React, { Component } from 'react'\r\nimport { Link } from 'react-router-dom';\r\n\r\nimport MoloRingloader from '../../components/layout/MoloRingloader';\r\nimport { ICollectionState } from '../../store/collections/reducers'\r\n\r\ninterface State {\r\n imagesLoaded: number\r\n imagesIsLoded: boolean\r\n initialized: boolean\r\n sortedCollections?: any[]\r\n}\r\n\r\ninterface Props {\r\n collections: any[],\r\n orderType: string,\r\n isFetching: boolean\r\n};\r\n\r\nexport class CollectionChooser extends Component {\r\n\r\n state: State = {\r\n imagesIsLoded: false,\r\n imagesLoaded: 1,\r\n initialized: false,\r\n sortedCollections: []\r\n }\r\n\r\n imageDoneLoading = () => {\r\n if (!this.props.collections) return\r\n\r\n let imagesLoaded = this.state.imagesLoaded;\r\n imagesLoaded++;\r\n\r\n this.setState({\r\n imagesIsLoded: this.props.collections.length <= imagesLoaded,\r\n imagesLoaded\r\n });\r\n }\r\n\r\n isOdd(num: number) { return num % 2;}\r\n\r\n render() {\r\n const { orderType } = this.props;\r\n const basepath = () => { \r\n if (window.location.hostname === \"localhost\" || window.location.hostname === \"127.0.0.1\"){\r\n return \"https://dev2b.molo.com\";\r\n }\r\n return '';\r\n };\r\n \r\n const imageOnErrorHandler = (\r\n event: React.SyntheticEvent\r\n ) => {\r\n event.currentTarget.src = basepath() + \"/media/static/404.gif\";\r\n };\r\n\r\n const getImage = (type: string, name: string) => {\r\n const banner = basepath() + \"/media/static/banner/\" + type.replaceAll(' ','_') + \"@\" + name.replaceAll(' ','_') + \".jpg\";\r\n return (\r\n \r\n )\r\n }\r\n\r\n if ((this.props.isFetching)) {\r\n return
\r\n \r\n
\r\n }\r\n\r\n return (\r\n <>\r\n \r\n
    2) ? ' card-list--small' : '')}>\r\n {\r\n this.props.collections && this.props.collections.map((collection, key) => {\r\n return collection.collectionName &&
  • \r\n \r\n \r\n { getImage(orderType, collection.collectionName) }\r\n \r\n
    \r\n {collection.collectionName || '?!?'}\r\n
    \r\n \r\n
  • \r\n }\r\n )\r\n }\r\n {/* {\r\n this.props.collections && this.isOdd(this.props.collections.length) ?\r\n
  • \r\n
    \r\n \r\n
    \r\n
  • \r\n :\r\n null\r\n } */}\r\n
\r\n \r\n \r\n )\r\n }\r\n}\r\n\r\nexport default CollectionChooser\r\n","import React, { Component } from 'react'\r\nimport { ThunkDispatch } from 'redux-thunk'\r\nimport { connect } from 'react-redux'\r\n\r\n// Store.\r\nimport { ICollectionState } from '../../store/collections/reducers';\r\nimport { RootState } from '../../store';\r\n\r\n// Components.\r\nimport CollectionChooser from '../../components/b2b/CollectionChooser';\r\n\r\ninterface State {\r\n collections: any[],\r\n}\r\n \r\ninterface OwnProps {\r\n match: {params: {orderType: string}},\r\n}\r\n \r\ninterface DispatchProps {}\r\n \r\ninterface StateProps {\r\n collectionStore: ICollectionState,\r\n collections?: any[],\r\n}\r\n \r\ntype Props = StateProps & OwnProps & DispatchProps;\r\n\r\nexport class CollectionListContainer extends Component {\r\n state: State = {\r\n collections: []\r\n }\r\n\r\n componentDidUpdate = (prevProps: Props, prevState: State) => {\r\n if (prevProps.collections !== this.props.collections && this.props.collections) {\r\n this.setState(\r\n {\r\n collections: this.props.collections.sort((a, b) => (a.sort > b.sort) ? 1 : -1)\r\n })\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (states: RootState, ownProps: OwnProps): StateProps => {\r\n return {\r\n collectionStore: states.collections.collections,\r\n collections: states.collections.collections.collections\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: ThunkDispatch<{}, {}, any>, ownProps: OwnProps): DispatchProps => {\r\n return {}\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(CollectionListContainer)","import React, { Component } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { ThunkDispatch } from 'redux-thunk'\r\n\r\n// Store.\r\nimport { RootState } from '../../store';\r\nimport { IProductState } from '../../store/products/reducers'\r\nimport ProductApi from '../../store/products/ProductApi';\r\nimport { createAndSetOrder, getShops } from '../../store/order/actions';\r\nimport { IOrderState } from '../../store/order/orderStore';\r\nimport OrderApi from '../../store/order/OrderApi';\r\nimport { IUserSate } from '../../store/user/reducers';\r\n\r\n// Components.\r\nimport Modal from '../layout/Modal/Modal';\r\n// import MoloRingloader from '../layout/MoloRingloader';\r\nimport CreateOrderBody from './CreateOrderBody';\r\n\r\n// Models.\r\nimport { OrderType } from '../../models/OrderType';\r\nimport Order from '../../models/Order';\r\n\r\ninterface State {\r\n showOverlay: boolean\r\n initialized: boolean\r\n selected: OrderType\r\n currentStep: string\r\n selectedShop: any\r\n salespersonNote: string | null\r\n currentOrder?: Order\r\n forceReset: boolean,\r\n steps: string[],\r\n orderTypes: OrderType[],\r\n shops: any[]\r\n}\r\n \r\ninterface OwnProps {\r\n hide?: Function\r\n isShowing: boolean\r\n orderTypeName?: string\r\n modal?: boolean\r\n}\r\n \r\ninterface DispatchProps {\r\n // getOrderTypes: () => void\r\n createAndSetOrder: (orderType: string, customerId: number, salespersonNote?: string) => void\r\n getShops: () => void\r\n}\r\n \r\ninterface StateProps {\r\n productStore: IProductState\r\n orderState: IOrderState\r\n userState: IUserSate\r\n}\r\n \r\ntype Props = StateProps & OwnProps & DispatchProps;\r\n\r\ninterface stepLabel {\r\n [id: string]: string\r\n}\r\n\r\nexport class CreateOrderModal extends Component {\r\n\r\n private initialState: State = {\r\n showOverlay: true,\r\n initialized: false,\r\n selected: {\r\n orderType: '',\r\n delivery: '',\r\n description: '',\r\n type: '',\r\n },\r\n selectedShop: null,\r\n currentStep: '',\r\n salespersonNote: null,\r\n forceReset: false,\r\n steps: [],\r\n shops: [],\r\n orderTypes: []\r\n }\r\n\r\n state: State = { ...this.initialState }\r\n\r\n async componentDidMount() {\r\n const orderTypeResponse = await ProductApi.getOrderTypes();\r\n const disallowedTypes = this.props.userState.user && this.props.userState.user.disallowedTypes ? this.props.userState.user.disallowedTypes : []; \r\n let types = orderTypeResponse.data;\r\n\r\n if (disallowedTypes) {\r\n types = types.filter((type: any) => disallowedTypes.indexOf(type.type.toLowerCase()) === -1)\r\n }\r\n\r\n const shopsResponse = await OrderApi.getShops()\r\n\r\n this.setState({\r\n orderTypes: types,\r\n shops: shopsResponse.data,\r\n initialized: true,\r\n });\r\n }\r\n\r\n private handleCommentChange = (e: React.FormEvent) => {\r\n const { value } = e.currentTarget;\r\n this.setState({ salespersonNote: value })\r\n };\r\n\r\n applyChanges = (orderType: string, customerId: number, salespersonNote: string | undefined) => {\r\n this.props.createAndSetOrder(orderType, customerId, salespersonNote || undefined);\r\n this.hide();\r\n }\r\n\r\n hide = () => {\r\n this.props.hide && this.props.hide();\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n }\r\n size={'md'}\r\n hide={this.hide}\r\n hideHeader={true}\r\n hideFooter={true}\r\n isShowing={this.props.isShowing}\r\n />\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (states: RootState, ownProps: OwnProps): StateProps => {\r\n return {\r\n productStore: states.productStore.productStore,\r\n orderState: states.order.order,\r\n userState: states.user.user,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: ThunkDispatch<{}, {}, any>, ownProps: OwnProps): DispatchProps => {\r\n return {\r\n createAndSetOrder: async (orderType: string, customerId: number, salespersonNote?: string) => {\r\n await dispatch(createAndSetOrder(orderType, customerId, salespersonNote))\r\n console.log('createOrder completed [UI]')\r\n },\r\n getShops: async () => {\r\n await dispatch(getShops())\r\n console.log('getShops completed [UI]')\r\n },\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(CreateOrderModal)","import React, { Component } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { ThunkDispatch } from 'redux-thunk'\r\n\r\nimport { Tab, Tabs, TabList, TabPanel } from 'react-tabs';\r\nimport 'react-tabs/style/react-tabs.css';\r\nimport PropagateLoader from 'react-spinners/PropagateLoader'\r\nimport ClipLoader from 'react-spinners/ClipLoader';\r\n\r\n// Store.\r\nimport { RootState } from '../../store';\r\nimport { getClosedOrders, getOpenOrders, getDashboardOrderState, addClosedOrderToRecent } from '../../store/order/actions';\r\nimport { IOrderState } from '../../store/order/orderStore';\r\nimport { updatePassword } from '../../store/user/actions';\r\nimport { IUserSate } from '../../store/user/reducers';\r\nimport OrderApi from '../../store/order/OrderApi';\r\nimport ProductApi from '../../store/products/ProductApi';\r\n\r\n// Models.\r\n\r\n// Components.\r\n\r\ninterface IErrors {\r\n oldPassword?: string | null,\r\n newPassword?: string | null,\r\n newPassword2?: string | null,\r\n}\r\n\r\ninterface IFormData {\r\n oldPassword: string;\r\n newPassword: string;\r\n newPassword2: string;\r\n}\r\n\r\ninterface State {\r\n formData: IFormData,\r\n errors: IErrors,\r\n showErrors: boolean,\r\n currentShop?: any,\r\n shops?: any[],\r\n shopNavOrders?: any[]\r\n editableNavOrders: any[],\r\n loadingNavOrder: boolean\r\n loadingShopOrders: boolean,\r\n tabIndex: number,\r\n orderTypes: string[]\r\n}\r\n \r\ninterface OwnProps {\r\n shouldHide?: Function\r\n history: any\r\n isProfile?: boolean\r\n}\r\n \r\ninterface DispatchProps {\r\n getClosedOrders: () => void\r\n getOpenOrders: () => void\r\n updatePassword: (email: string, oldPassword: string, newPassword: string) => void\r\n getDashboardOrderState: (orderId: number, should?: boolean) => void\r\n addClosedOrderToRecent: (order: any, should?: boolean) => any\r\n}\r\n \r\ninterface StateProps {\r\n orderState: IOrderState\r\n userState: IUserSate\r\n}\r\n \r\n\r\ntype Props = StateProps & OwnProps & DispatchProps;\r\n\r\nexport class MyMolo extends Component {\r\n\r\n state: State = {\r\n formData: {\r\n oldPassword: '',\r\n newPassword: '',\r\n newPassword2: '',\r\n },\r\n errors: {},\r\n showErrors: false,\r\n shopNavOrders: [],\r\n editableNavOrders: [],\r\n loadingNavOrder: false,\r\n tabIndex: 0,\r\n loadingShopOrders: false,\r\n orderTypes: []\r\n };\r\n\r\n async componentDidMount() {\r\n\r\n // const shopsResponse = await OrderApi.getShops()\r\n\r\n // let currentShop = shopsResponse.data[0];\r\n\r\n // if (!currentShop) {\r\n // currentShop = {\r\n // customerId: this.props.userState.user.customerData.CustomerId,\r\n // name: this.props.userState.user.customerData.Name,\r\n // }\r\n // }\r\n\r\n // const response = await ProductApi.getOrderTypes();\r\n // const orderTypes = response.data.map((type: any) => type.orderType)\r\n\r\n // this.setState({ shops: shopsResponse.data, currentShop, orderTypes }, () => {\r\n // if (currentShop) {\r\n // this.onChangeShop(currentShop);\r\n // }\r\n // })\r\n\r\n // this.props.getClosedOrders();\r\n // this.props.getOpenOrders();\r\n\r\n // if (this.props.isProfile) {\r\n // this.setState({ tabIndex : 2 })\r\n // }\r\n }\r\n\r\n handleSubmit = async (event: any) => {\r\n event.preventDefault()\r\n const formData = new FormData(event.target);\r\n const data: IFormData = {\r\n // @ts-ignore\r\n oldPassword: formData.get('oldPassword'),\r\n // @ts-ignore\r\n newPassword: formData.get('newPassword'),\r\n // @ts-ignore\r\n newPassword2: formData.get('newPassword2'),\r\n }\r\n \r\n if (this.checkErrors(data)) {\r\n const email = this.props.userState.user.email;\r\n // @ts-ignore\r\n this.props.updatePassword(email, data.oldPassword, data.newPassword)\r\n }\r\n }\r\n\r\n checkErrors = (data: IFormData) => {\r\n const errors:IErrors = {};\r\n\r\n if (!data.oldPassword || data.oldPassword === '') {\r\n errors.oldPassword = 'Required';\r\n }\r\n\r\n if (!data.newPassword || data.newPassword === '') {\r\n errors.newPassword = 'Required';\r\n }\r\n\r\n if (!data.newPassword2 || data.newPassword2 === '') {\r\n errors.newPassword2 = 'Required';\r\n }\r\n\r\n if (data.newPassword2 && data.newPassword2 !== '' &&\r\n data.newPassword && data.newPassword !== '' &&\r\n data.newPassword !== data.newPassword2) {\r\n errors.newPassword2 = 'Both passwords need to be the same';\r\n }\r\n\r\n this.setState({\r\n showErrors: !!Object.keys(errors).length,\r\n errors\r\n })\r\n\r\n return !Object.keys(errors).length;\r\n }\r\n\r\n handleOrderClick = async (orderId: number, isNavOrder: boolean = false) => {\r\n if (!isNavOrder) {\r\n this.props.history.push('/dashboard/' + orderId);\r\n this.props.getDashboardOrderState(orderId)\r\n } else {\r\n\r\n this.setState({loadingNavOrder: true})\r\n\r\n const navOrderResponse = await OrderApi.openNavOrder(orderId)\r\n const createdapporderid = navOrderResponse.data.createdapporderid\r\n\r\n if (navOrderResponse) {\r\n this.props.history.push('/dashboard/' + createdapporderid);\r\n this.setState({loadingNavOrder: false})\r\n this.props.getDashboardOrderState(createdapporderid, true)\r\n }\r\n }\r\n\r\n this.props.shouldHide && this.props.shouldHide()\r\n }\r\n\r\n onChangeShop = (shop: any) => {\r\n this.setState({ currentShop: shop, loadingShopOrders: true }, async () => {\r\n // Peak closed orders.\r\n const response = await OrderApi.peakNavOrders(shop.customerId)\r\n\r\n this.setState({\r\n shopNavOrders: response.data,\r\n loadingShopOrders: false,\r\n // editableNavOrders\r\n })\r\n })\r\n }\r\n\r\n isAlreadyOpen = (order: any) => {\r\n var existing = this.props.orderState.orders.find(function(item) {\r\n return item.navorderid === order.navorderid;\r\n });\r\n\r\n return existing;\r\n }\r\n\r\n renderNavOrderTable = (orders: any) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n \r\n orders.map((order: any, key: any) => {\r\n return (\r\n {\r\n if (order.beingmodifiedby === '') {\r\n this.handleOrderClick(order.navorderid, true)\r\n }\r\n }}>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n
Order numberLatest order numberReference order numberCustomerTypeExternal Doc NoOrder Comment
{order.orderidcreated}{order.orderidmodified}{order.navorderid}\r\n {order.selltocustomerno}
\r\n {order.shipttoname}\r\n {order.shiptoaddress}, {order.shiptocity}, {order.shiptocounty}\r\n
{order.ordertype}\r\n {\r\n order.inscanner && !this.isAlreadyOpen(order) &&\r\n \r\n In scanner\r\n \r\n }\r\n {\r\n '' !== order.beingmodifiedby && !this.isAlreadyOpen(order) &&\r\n \r\n Being modified by : { order.beingmodifiedby }\r\n \r\n }\r\n {\r\n this.isAlreadyOpen(order) &&\r\n \r\n Already open!\r\n \r\n }\r\n {\r\n !order.orderisfinal\r\n && order.beingmodifiedby === ''\r\n && !order.inscanner\r\n && !this.isAlreadyOpen(order) &&\r\n \r\n Access to edit\r\n \r\n }\r\n \r\n {order.externaldocumentno}\r\n {order.salespersonnote}
\r\n )\r\n }\r\n\r\n render() {\r\n const { showErrors, errors, shops, loadingNavOrder } = this.state;\r\n\r\n \r\n\r\n // if (loadingNavOrder) {\r\n // return (\r\n //
\r\n //
\r\n //

Loading Order

\r\n // \r\n //
\r\n //
\r\n // )\r\n // }\r\n\r\n return (\r\n
\r\n this.setState({ tabIndex })}>\r\n \r\n Profile\r\n \r\n\r\n {/* \r\n
Orders ( { this.props.orderState.orders.length } ) \r\n
\r\n \r\n Click on an order to open it.\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n \r\n this.props.orderState.orders.map((order, key) => {\r\n return (\r\n this.handleOrderClick(order.appOrderId)}>\r\n \r\n \r\n \r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n
Order#CustomerTypeOrder Comment
B2B{order.appOrderId}\r\n {order.sellToCustomerNo}
\r\n {order.sellToCustomerName}\r\n {order.sellToAddress}, {order.sellToCity}, {order.sellToCountry_RegionCode}\r\n
{order.orderType}{order.salespersonnote}
\r\n
*/}\r\n\r\n {/* \r\n {shops &&\r\n
\r\n {\r\n shops.length > 1 &&\r\n <>\r\n
\r\n Change shop \r\n
\r\n \r\n Choose the shop you want to see orders for.\r\n \r\n
\r\n
\r\n {\r\n const selectedShop = shops[event.target.value];\r\n this.onChangeShop(selectedShop)\r\n }}\r\n placeholder=\"select shop\">\r\n {\r\n shops.length &&\r\n shops.map((shop, index) => {\r\n return (\r\n \r\n ) \r\n })\r\n }\r\n \r\n {\r\n this.state.loadingShopOrders &&\r\n
\r\n \r\n
\r\n }\r\n
\r\n \r\n }\r\n
\r\n }\r\n
\r\n Orders ( { this.state.shopNavOrders && this.state.shopNavOrders.length } ) \r\n
\r\n \r\n Click on an order to preview it.\r\n \r\n
\r\n\r\n {this.state.shopNavOrders && this.renderNavOrderTable(this.state.shopNavOrders)}\r\n
*/}\r\n \r\n \r\n
\r\n \r\n \r\n { showErrors && errors.oldPassword &&
{ errors.oldPassword }
}\r\n \r\n { showErrors && errors.newPassword &&
{ errors.newPassword }
}\r\n \r\n { showErrors && errors.newPassword2 &&
{ errors.newPassword2 }
}\r\n \r\n
\r\n
\r\n
\r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (states: RootState, ownProps: OwnProps): StateProps => {\r\n return {\r\n orderState: states.order.order,\r\n userState: states.user.user\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: ThunkDispatch<{}, {}, any>, ownProps: OwnProps): DispatchProps => {\r\n return {\r\n getClosedOrders: async () => {\r\n await dispatch(getClosedOrders())\r\n },\r\n getOpenOrders: async () => {\r\n await dispatch(getOpenOrders())\r\n },\r\n updatePassword: async (email: string, oldPassword: string, newPassword: string) => {\r\n await dispatch(updatePassword(email, oldPassword, newPassword))\r\n },\r\n getDashboardOrderState: async (orderId: number, should?: boolean) => {\r\n await dispatch(getDashboardOrderState(orderId, should))\r\n },\r\n addClosedOrderToRecent: async (order: any) => {\r\n await dispatch(addClosedOrderToRecent(order))\r\n }\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(MyMolo)","import React from 'react'\r\nimport ReactDOM from 'react-dom';\r\n\r\nimport {RouteComponentProps, withRouter} from \"react-router-dom\";\r\n\r\n// Components.\r\nimport MyMolo from './MyMolo';\r\n\r\n// Icons.\r\nimport { FaTimes } from 'react-icons/fa';\r\n\r\ninterface Props {\r\n show: boolean\r\n shouldHide?: Function\r\n isProfile?: boolean\r\n}\r\n\r\ntype SomeComponentProps = Props & RouteComponentProps;\r\n\r\nconst MyMoloOverlay: React.FC = (props) => {\r\n const {\r\n show,\r\n shouldHide,\r\n history,\r\n isProfile,\r\n } = props;\r\n const node = React.useRef(null);\r\n\r\n React.useEffect(() => {\r\n // add when mounted\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n document.addEventListener('keydown', onKeyPressed);\r\n // return function to be called when unmounted\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n document.removeEventListener('keydown', onKeyPressed);\r\n };\r\n });\r\n\r\n const handleClickOutside = (e: any) => {\r\n\r\n // @ts-ignore\r\n if(node.current.contains(e.target)) {\r\n return;\r\n }\r\n \r\n // outside click \r\n shouldHide && shouldHide();\r\n };\r\n\r\n const onKeyPressed = (e: any) => {\r\n if (e.key === 'Escape' && shouldHide) {\r\n shouldHide()\r\n }\r\n }\r\n\r\n return ReactDOM.createPortal(\r\n \r\n {\r\n if (event.target === node.current) {\r\n shouldHide && shouldHide();\r\n }\r\n }}\r\n ref={node}\r\n >\r\n
shouldHide && shouldHide()}>\r\n \r\n
\r\n {!!show && shouldHide && shouldHide()} history={history} isProfile={isProfile} />}\r\n \r\n
, document.getElementById('root') as HTMLElement\r\n )\r\n}\r\n\r\nexport default withRouter(MyMoloOverlay);","import axios from '../globalAxios';\r\nimport { appConfig } from '../../config';\r\n\r\nconst baseUrl = appConfig.api.baseUrl;\r\n\r\nexport default class FileApi {\r\n static createOrderImageZip = async (orderId: number) => {\r\n const url = baseUrl + 'Order/CreateOrderImageZip/' + orderId;\r\n return await axios.post(url);\r\n }\r\n\r\n // https://dev2b.molo.com/media/productimage/DownloadZipFile/B2B13_210\r\n static downloadZipFile = async (location: string) => {\r\n // const url = baseUrl + 'Order/CreateOrderImageZip/' + orderId;\r\n return await axios.get(location);\r\n }\r\n\r\n // /api/Order/CreateCustomerDropZip\r\n static createCustomerDropZip = async (customerno: string, deliverycode: string, seasoncode: string) => {\r\n const url = baseUrl + `Order/CreateCustomerDropZip/${customerno}/${deliverycode}/${seasoncode}`;\r\n return await axios.post(url, );\r\n }\r\n\r\n static createCustomerUnshippedItemsZip = async (sonumber: string, deliverycode: string) => {\r\n const url = baseUrl + `Order/CreateNavOrderUnshippedItemsZip/${sonumber}?deliverycode=${deliverycode}`;\r\n return await axios.post(url, );\r\n }\r\n static createCustomerBSLItemsZip = async (bsl: string ) => {\r\n const url = baseUrl + `Order/CreateNavOrderBSLZip/${bsl}`;\r\n return await axios.post(url, );\r\n }\r\n\r\n // /api/Order/CreateCustomerMultipleDropZip\r\n static createCustomerMultipleDropZip = async (customerno: string, data: any[]) => {\r\n console.log(data, 'DATA')\r\n const url = baseUrl + 'Order/CreateCustomerMultipleDropZip';\r\n // const d = [{'deliverycode': \"SS HOLIDAY\", 'seasoncode': \"S17\"}, {'deliverycode': \"AW20 HOL\", 'seasoncode': \"W20\"}]\r\n return await axios.post(url, data, {params: {\r\n customerno\r\n }});\r\n }\r\n}\r\n\r\n","import React, { Component } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { ThunkDispatch } from 'redux-thunk'\r\n\r\nimport { Tab, Tabs, TabList, TabPanel } from 'react-tabs';\r\n\r\n// import { Tab, Tabs, TabList, TabPanel } from 'react-tabs';\r\nimport 'react-tabs/style/react-tabs.css';\r\nimport PropagateLoader from 'react-spinners/PropagateLoader'\r\nimport ClipLoader from 'react-spinners/ClipLoader';\r\n\r\n// Store.\r\nimport { RootState } from '../../store';\r\nimport { getClosedOrders, getOpenOrders, getDashboardOrderState, addClosedOrderToRecent } from '../../store/order/actions';\r\nimport { IOrderState } from '../../store/order/orderStore';\r\nimport { updatePassword } from '../../store/user/actions';\r\nimport { IUserSate } from '../../store/user/reducers';\r\nimport OrderApi from '../../store/order/OrderApi';\r\nimport ProductApi from '../../store/products/ProductApi';\r\nimport FileApi from '../../store/files/FileApi';\r\n\r\n// Models.\r\n\r\n// Components.\r\n\r\ninterface State {\r\n currentShop?: any,\r\n shops?: any[],\r\n shopNavOrders?: any[]\r\n shopDeliveryInfo?: any[],\r\n editableNavOrders: any[],\r\n loadingNavOrder: boolean\r\n loadingShopOrders: boolean,\r\n generatingFile: boolean,\r\n tabIndex: number,\r\n orderTypes: string[],\r\n futureDrops: any[],\r\n previousDrops: any[],\r\n futureDropsGroupedBySeason: any,\r\n activeSection: string\r\n}\r\n \r\ninterface OwnProps {\r\n shouldHide?: Function\r\n history: any\r\n isProfile?: boolean\r\n}\r\n \r\ninterface DispatchProps {\r\n getClosedOrders: () => void\r\n getOpenOrders: () => void\r\n updatePassword: (email: string, oldPassword: string, newPassword: string) => void\r\n getDashboardOrderState: (orderId: number, should?: boolean) => void\r\n addClosedOrderToRecent: (order: any, should?: boolean) => any\r\n}\r\n \r\ninterface StateProps {\r\n orderState: IOrderState\r\n userState: IUserSate\r\n}\r\n \r\n\r\ntype Props = StateProps & OwnProps & DispatchProps;\r\n\r\nexport class ProductDownloadModalContent extends Component {\r\n\r\n state: State = {\r\n generatingFile: false,\r\n shopNavOrders: [],\r\n shopDeliveryInfo: [],\r\n editableNavOrders: [],\r\n loadingNavOrder: false,\r\n tabIndex: 0,\r\n loadingShopOrders: false,\r\n orderTypes: [],\r\n futureDrops: [],\r\n previousDrops: [],\r\n futureDropsGroupedBySeason: {},\r\n activeSection: 'previous-drops'\r\n };\r\n\r\n async componentDidMount() {\r\n\r\n const shopsResponse = await OrderApi.getShops()\r\n\r\n console.log(shopsResponse, 'shopsResponse')\r\n\r\n let currentShop = shopsResponse.data[0];\r\n\r\n if (!currentShop) {\r\n currentShop = {\r\n customerId: this.props.userState.user.customerData.CustomerId,\r\n name: this.props.userState.user.customerData.Name,\r\n }\r\n }\r\n\r\n const response = await ProductApi.getOrderTypes();\r\n const orderTypes = response.data.map((type: any) => type.orderType)\r\n\r\n this.setState({ shops: shopsResponse.data, currentShop, orderTypes }, () => {\r\n if (currentShop) {\r\n this.onChangeShop(currentShop);\r\n }\r\n })\r\n\r\n this.props.getClosedOrders();\r\n this.props.getOpenOrders();\r\n\r\n if (this.props.isProfile) {\r\n this.setState({ tabIndex : 2 })\r\n }\r\n }\r\n\r\n groupBy = (key: any) => (array: any[]) =>\r\n array.reduce((objectsByKeyValue: { [x: string]: any; }, obj: { [x: string]: any; }) => {\r\n const value = obj[key];\r\n objectsByKeyValue[value] = (objectsByKeyValue[value] || []).concat(obj);\r\n return objectsByKeyValue;\r\n }, {});\r\n\r\n handleOrderClick = async (orderId: number, isNavOrder: boolean = false) => {\r\n if (!isNavOrder) {\r\n this.props.history.push('/dashboard/' + orderId);\r\n this.props.getDashboardOrderState(orderId)\r\n } else {\r\n\r\n this.setState({loadingNavOrder: true})\r\n\r\n const navOrderResponse = await OrderApi.openNavOrder(orderId)\r\n const createdapporderid = navOrderResponse.data.createdapporderid\r\n\r\n if (navOrderResponse) {\r\n this.props.history.push('/dashboard/' + createdapporderid);\r\n this.setState({loadingNavOrder: false})\r\n this.props.getDashboardOrderState(createdapporderid, true)\r\n }\r\n }\r\n\r\n this.props.shouldHide && this.props.shouldHide()\r\n }\r\n\r\n onChangeShop = (shop: any) => {\r\n console.log(shop, 'changed shop')\r\n this.setState({ currentShop: shop, loadingShopOrders: true }, async () => {\r\n\r\n // const dummuyDataSeason = [\r\n // {\r\n // \"customerno\": \"12025\",\r\n // \"deliverycode\": \"SS TEST\",\r\n // \"daysfromtoday\": -31,\r\n // \"seasoncode\": \"S22TEST\",\r\n // \"deliveryshipment\": \"2017-11-15T00:00:00Z\",\r\n // \"daystoseasonstartshipping\": 60\r\n // },\r\n // {\r\n // \"customerno\": \"12025\",\r\n // \"deliverycode\": \"SS PRE\",\r\n // \"daysfromtoday\": -1015,\r\n // \"seasoncode\": \"S22TEST\",\r\n // \"deliveryshipment\": \"2017-11-15T00:00:00Z\",\r\n // \"daystoseasonstartshipping\": 60\r\n // },\r\n // {\r\n // \"customerno\": \"12025\",\r\n // \"deliverycode\": \"AW 01A\",\r\n // \"daysfromtoday\": -1169,\r\n // \"seasoncode\": \"S22TEST\",\r\n // \"deliveryshipment\": \"2017-06-14T00:00:00Z\",\r\n // \"daystoseasonstartshipping\": 60\r\n // },\r\n // {\r\n // \"customerno\": \"12025\",\r\n // \"deliverycode\": \"AW 01\",\r\n // \"daysfromtoday\": -97757,\r\n // \"seasoncode\": \"OW22TEST\",\r\n // \"deliveryshipment\": \"1753-01-01T00:00:00Z\",\r\n // \"daystoseasonstartshipping\": 60\r\n // },\r\n // {\r\n // \"customerno\": \"12025\",\r\n // \"deliverycode\": \"SS TEST\",\r\n // \"daysfromtoday\": -31,\r\n // \"seasoncode\": \"OW22TEST\",\r\n // \"deliveryshipment\": \"2017-11-15T00:00:00Z\",\r\n // \"daystoseasonstartshipping\": 60\r\n // },\r\n // {\r\n // \"customerno\": \"12025\",\r\n // \"deliverycode\": \"SS PRE\",\r\n // \"daysfromtoday\": -1015,\r\n // \"seasoncode\": \"OW22TEST\",\r\n // \"deliveryshipment\": \"2017-11-15T00:00:00Z\",\r\n // \"daystoseasonstartshipping\": 60\r\n // },\r\n // {\r\n // \"customerno\": \"12025\",\r\n // \"deliverycode\": \"AW 01A\",\r\n // \"daysfromtoday\": -1169,\r\n // \"seasoncode\": \"OW22TEST\",\r\n // \"deliveryshipment\": \"2017-06-14T00:00:00Z\",\r\n // \"daystoseasonstartshipping\": 60\r\n // },\r\n // {\r\n // \"customerno\": \"12025\",\r\n // \"deliverycode\": \"AW 01\",\r\n // \"daysfromtoday\": -97757,\r\n // \"seasoncode\": \"OW22TEST\",\r\n // \"deliveryshipment\": \"1753-01-01T00:00:00Z\",\r\n // \"daystoseasonstartshipping\": 60\r\n // },\r\n // ];\r\n\r\n // Peak closed orders.\r\n const response = await OrderApi.getCustomerDeliveryDownloadInfo(shop.customerId)\r\n\r\n console.log(response, 'response :: getCustomerDeliveryDownloadInfo ')\r\n\r\n let dummyResponse = response.data;\r\n // let dummyResponse = [...response.data, ...dummuyDataSeason];\r\n let previousDrops = [];\r\n let futureDrops = [];\r\n let futureDropsGroupedBySeason = {};\r\n\r\n for (const res of dummyResponse) {\r\n if (res.daystoseasonstartshipping <= 60) {\r\n if (res.daystoseasonstartshipping > 0) {\r\n futureDrops.push(res);\r\n } else {\r\n previousDrops.push(res);\r\n }\r\n } else {\r\n futureDrops.push(res);\r\n }\r\n }\r\n\r\n \r\n console.log(previousDrops, 'previousDrops')\r\n console.log(futureDrops, 'futureDrops')\r\n\r\n if (futureDrops.length) {\r\n const groupBySeason = this.groupBy(['seasoncode']);\r\n futureDropsGroupedBySeason = groupBySeason(futureDrops);\r\n console.log(futureDropsGroupedBySeason, 'futureDropsGroupedBySeason')\r\n }\r\n\r\n console.log(Object.keys(futureDropsGroupedBySeason), 'Object.keys(futureDropsGroupedBySeason)')\r\n\r\n let activeSection = previousDrops.length ?\r\n 'previous-drops' : (!previousDrops.length && futureDrops.length ? Object.keys(futureDropsGroupedBySeason)[0] : '')\r\n\r\n console.log(activeSection, 'activeSectionactiveSectionactiveSection')\r\n\r\n this.setState({\r\n shopDeliveryInfo: response.data,\r\n futureDrops,\r\n previousDrops,\r\n loadingShopOrders: false,\r\n futureDropsGroupedBySeason,\r\n activeSection,\r\n // editableNavOrders\r\n })\r\n })\r\n }\r\n\r\n isAlreadyOpen = (order: any) => {\r\n var existing = this.props.orderState.orders.find(function(item) {\r\n return item.navorderid === order.navorderid;\r\n });\r\n\r\n return existing;\r\n }\r\n\r\n handleDropClick = (deliverycode: string, seasoncode: string) => {\r\n if (this.state.currentShop) {\r\n this.setState({ generatingFile: true }, async () => {\r\n const response = await FileApi.createCustomerDropZip(this.state.currentShop.customerId, deliverycode, seasoncode);\r\n\r\n this.setState({ generatingFile: false })\r\n\r\n window.location.href = response.data.location;\r\n\r\n console.log(response, 'RESPONS :: createCustomerDropZip')\r\n })\r\n }\r\n }\r\n\r\n onClickPreviousDrops = () => {\r\n this.setState({ generatingFile: true }, async () => {\r\n\r\n let data: any[] = [];\r\n\r\n for (const drop of this.state.previousDrops) {\r\n data.push({\r\n deliverycode: drop.deliverycode,\r\n seasoncode: drop.seasoncode,\r\n })\r\n }\r\n\r\n const response = await FileApi.createCustomerMultipleDropZip(this.state.currentShop.customerId, data);\r\n\r\n console.log(response, 'response :: createCustomerMultipleDropZip')\r\n\r\n this.setState({ generatingFile: false })\r\n\r\n window.location.href = response.data.location;\r\n })\r\n }\r\n\r\n renderDrops = () => {\r\n const {\r\n loadingShopOrders,\r\n generatingFile,\r\n previousDrops,\r\n futureDropsGroupedBySeason,\r\n activeSection,\r\n futureDrops,\r\n currentShop,\r\n } = this.state;\r\n\r\n if (generatingFile || loadingShopOrders) {\r\n return (\r\n
\r\n
\r\n

{generatingFile ? 'Generating file' : ''}

\r\n \r\n
\r\n
\r\n )\r\n }\r\n\r\n if (!previousDrops.length && !futureDrops.length && currentShop) {\r\n return

No Drops for { currentShop.name}

\r\n }\r\n\r\n return (\r\n this.setState({ tabIndex })}>\r\n \r\n Previous Drops\r\n Current Drops\r\n Future Drops\r\n \r\n \r\n
\r\n
\r\n
    \r\n {\r\n previousDrops.length ?\r\n this.setState({ activeSection: 'previous-drops' })}>\r\n Previous drops\r\n : null\r\n }\r\n {\r\n Object.keys(futureDropsGroupedBySeason).map((key) => {\r\n return (\r\n this.setState({ activeSection: key })}>\r\n {key}\r\n \r\n )\r\n })\r\n }\r\n
\r\n
\r\n
\r\n {\r\n this.state.activeSection === 'previous-drops' &&\r\n // \r\n \r\n }\r\n {\r\n Object.keys(futureDropsGroupedBySeason).map((key) => {\r\n const drops = futureDropsGroupedBySeason[key];\r\n\r\n if (this.state.activeSection !== key) {\r\n return null\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n \r\n drops.map((info: any, key: number) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n
Delivery codeSeason codeShipment date
{info.deliverycode}{info.seasoncode}{new Date(info.deliveryshipment).toLocaleDateString()}\r\n {\r\n info.daystoseasonstartshipping <= 60 && this.handleDropClick(info.deliverycode, info.seasoncode)}\r\n className=\"details__remove\">\r\n Download\r\n \r\n }\r\n {\r\n info.daystoseasonstartshipping > 60 &&\r\n Not available\r\n }\r\n
\r\n )\r\n })\r\n }\r\n
\r\n\r\n
\r\n
\r\n
\r\n )\r\n }\r\n\r\n render() {\r\n const { shops } = this.state;\r\n\r\n return (\r\n
\r\n
Download product images
\r\n {shops &&\r\n
\r\n {\r\n shops.length > 1 &&\r\n <>\r\n

Choose the shop you want to see drops for.

\r\n
\r\n {\r\n const selectedShop = shops[event.target.value];\r\n this.onChangeShop(selectedShop)\r\n }}\r\n placeholder=\"select shop\">\r\n {\r\n shops.length &&\r\n shops.map((shop, index) => {\r\n return (\r\n \r\n ) \r\n })\r\n }\r\n \r\n {\r\n this.state.loadingShopOrders &&\r\n
\r\n \r\n
\r\n }\r\n
\r\n \r\n }\r\n
\r\n }\r\n {this.renderDrops()}\r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (states: RootState, ownProps: OwnProps): StateProps => {\r\n return {\r\n orderState: states.order.order,\r\n userState: states.user.user\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: ThunkDispatch<{}, {}, any>, ownProps: OwnProps): DispatchProps => {\r\n return {\r\n getClosedOrders: async () => {\r\n await dispatch(getClosedOrders())\r\n },\r\n getOpenOrders: async () => {\r\n await dispatch(getOpenOrders())\r\n },\r\n updatePassword: async (email: string, oldPassword: string, newPassword: string) => {\r\n await dispatch(updatePassword(email, oldPassword, newPassword))\r\n },\r\n getDashboardOrderState: async (orderId: number, should?: boolean) => {\r\n await dispatch(getDashboardOrderState(orderId, should))\r\n },\r\n addClosedOrderToRecent: async (order: any) => {\r\n await dispatch(addClosedOrderToRecent(order))\r\n }\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ProductDownloadModalContent)","import React from 'react'\r\nimport ReactDOM from 'react-dom';\r\n\r\nimport {RouteComponentProps, withRouter} from \"react-router-dom\";\r\n\r\n// Components.\r\nimport ProductDownloadModalContent from './ProductDownloadModalContent';\r\n\r\n// Icons.\r\nimport { FaTimes } from 'react-icons/fa';\r\n\r\ninterface Props {\r\n show: boolean\r\n shouldHide?: Function\r\n isProfile?: boolean\r\n}\r\n\r\ntype SomeComponentProps = Props & RouteComponentProps;\r\n\r\nconst ProductDownloadModal: React.FC = (props) => {\r\n const {\r\n show,\r\n shouldHide,\r\n history,\r\n isProfile,\r\n } = props;\r\n const node = React.useRef(null);\r\n\r\n React.useEffect(() => {\r\n // add when mounted\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n document.addEventListener('keydown', onKeyPressed);\r\n // return function to be called when unmounted\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n document.removeEventListener('keydown', onKeyPressed);\r\n };\r\n });\r\n\r\n const handleClickOutside = (e: any) => {\r\n\r\n // @ts-ignore\r\n if(node.current.contains(e.target)) {\r\n return;\r\n }\r\n \r\n // outside click \r\n shouldHide && shouldHide();\r\n };\r\n\r\n const onKeyPressed = (e: any) => {\r\n if (e.key === 'Escape' && shouldHide) {\r\n shouldHide()\r\n }\r\n }\r\n\r\n return ReactDOM.createPortal(\r\n \r\n {\r\n if (event.target === node.current) {\r\n shouldHide && shouldHide();\r\n }\r\n }}\r\n ref={node}\r\n >\r\n
shouldHide && shouldHide()}>\r\n \r\n
\r\n {!!show && shouldHide && shouldHide()} history={history} isProfile={isProfile} />}\r\n \r\n
, document.getElementById('root') as HTMLElement\r\n )\r\n}\r\n\r\nexport default withRouter(ProductDownloadModal);","import React, { useState, useRef, useEffect } from 'react'\r\nimport ReactDOM from 'react-dom';\r\nimport { useHistory } from 'react-router-dom';\r\n\r\n// Utils.\r\nimport { FaSearch } from 'react-icons/fa';\r\nimport ProductApi from '../../store/products/ProductApi';\r\nimport { useDebounce } from '../../utils/use-debounce';\r\nimport PulseLoader from 'react-spinners/PulseLoader';\r\nimport { uniq } from 'lodash';\r\n\r\ninterface Props {\r\n show: boolean\r\n shouldHide?: Function\r\n}\r\n\r\nconst SearchBox: React.FC = (props) => {\r\n let { show, shouldHide } = props;\r\n let [query, setValue] = useState('');\r\n const [isSearching, setIsSearching] = useState(false);\r\n let [currentIndex, setCurrentIndex] = React.useState(-1);\r\n let [filteredSuggestions, setFilteredSuggestions] = useState([]);\r\n // let [showSuggestions, setShowSuggestions] = React.useState(false);\r\n\r\n const debouncedSearchTerm = useDebounce(query, 500);\r\n\r\n let history = useHistory();\r\n const node = useRef(null);\r\n let inputField = useRef(null);\r\n\r\n // Here's where the API call happens\r\n // We use useEffect since this is an asynchronous action\r\n useEffect(\r\n () => {\r\n // Make sure we have a value (user has entered something in input)\r\n if (debouncedSearchTerm && debouncedSearchTerm.length > 1) {\r\n // Set isSearching state\r\n setIsSearching(true);\r\n // // Fire off our API call\r\n ProductApi.autoComplete2(debouncedSearchTerm).then((response) => {\r\n setIsSearching(false);\r\n setCurrentIndex(-1);\r\n\r\n // Sort by relevance.\r\n const sorted = response.sort((a: any, b: any) => {\r\n // Sort results by matching name with keyword position in name\r\n if(a.complete.toLowerCase().indexOf(debouncedSearchTerm.toLowerCase()) > b.complete.toLowerCase().indexOf(debouncedSearchTerm.toLowerCase())) {\r\n return 1;\r\n } else if (a.complete.toLowerCase().indexOf(debouncedSearchTerm.toLowerCase()) < b.complete.toLowerCase().indexOf(debouncedSearchTerm.toLowerCase())) {\r\n return -1;\r\n } else {\r\n if(a.complete > b.complete)\r\n return 1;\r\n else\r\n return -1;\r\n }\r\n });\r\n\r\n const simpliFied = uniq(sorted.map((s: any) => s.complete))\r\n\r\n setFilteredSuggestions(simpliFied);\r\n })\r\n } else {\r\n setIsSearching(false);\r\n setFilteredSuggestions([]);\r\n }\r\n },\r\n // This is the useEffect input array\r\n // Our useEffect function will only execute if this value changes ...\r\n // ... and thanks to our hook it will only change if the original ...\r\n // value (searchTerm) hasn't changed for more than 500ms.\r\n [debouncedSearchTerm]\r\n );\r\n\r\n useEffect(() => {\r\n if (!props.show) {\r\n setValue('')\r\n setCurrentIndex(-1);\r\n setFilteredSuggestions([]);\r\n }\r\n }, [props.show]);\r\n\r\n useEffect(() => {\r\n // add when mounted\r\n document.addEventListener(\"keydown\", handlekeyDown);\r\n\r\n // return function to be called when unmounted\r\n return () => {\r\n document.removeEventListener(\"keydown\", handlekeyDown);\r\n };\r\n });\r\n\r\n const handlekeyDown = (e: any) => {\r\n const direction = e.key;\r\n if (!filteredSuggestions.length || (direction !== 'ArrowDown' && direction !== 'ArrowUp')) return\r\n\r\n const isDown = e.key === 'ArrowDown';\r\n const items = document.querySelectorAll('.js-autocomplete-item');\r\n let index = currentIndex;\r\n\r\n isDown ? index++ : index--;\r\n \r\n if (items.length <= index) {\r\n index = items.length -1;\r\n }\r\n\r\n if (index < 0) {\r\n index = -1;\r\n if (inputField && inputField.current !== null && !!show) {\r\n inputField.current.focus();\r\n }\r\n }\r\n\r\n setCurrentIndex(index);\r\n };\r\n\r\n const onChangeHandler = (event: any) => {\r\n /* signal to React not to nullify the event object */\r\n event.persist();\r\n\r\n const query = event.target.value;\r\n\r\n setValue(query);\r\n }\r\n\r\n const handleQuery = async () => {\r\n const clonedQuery = query;\r\n setValue('');\r\n\r\n history.push(\"/search/\" + clonedQuery);\r\n\r\n close()\r\n }\r\n\r\n const close = () => {\r\n if (shouldHide) {\r\n shouldHide();\r\n }\r\n setValue('')\r\n setCurrentIndex(-1);\r\n setFilteredSuggestions([]);\r\n }\r\n\r\n const handleKeyDown = (event: any) => {\r\n if (event.key === 'Enter' && query !== '') {\r\n\r\n if (currentIndex === filteredSuggestions.length) {\r\n handleQuery();\r\n } else \r\n\r\n if (currentIndex > -1) {\r\n if (filteredSuggestions[currentIndex]) {\r\n // @ts-ignore\r\n handleAutoCompleteClick(filteredSuggestions[currentIndex])\r\n }\r\n } else {\r\n handleQuery();\r\n }\r\n }\r\n }\r\n\r\n const onKeyPressed = (e: any) => {\r\n if (e.key === 'Escape') {\r\n close()\r\n }\r\n }\r\n\r\n const handleAutoCompleteClick = (suggestion: string) => {\r\n close()\r\n setValue('');\r\n\r\n history.push({\r\n pathname: '/search/' + query,\r\n search: '?suggestion=' + suggestion,\r\n })\r\n }\r\n\r\n useEffect(() => {\r\n // add when mounted\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n document.addEventListener('keydown', onKeyPressed);\r\n \r\n setTimeout(() => {\r\n if (inputField && inputField.current !== null && !!show) {\r\n inputField.current.focus();\r\n }\r\n })\r\n // return function to be called when unmounted\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n document.removeEventListener('keydown', onKeyPressed);\r\n };\r\n });\r\n\r\n const formatStringByRelevance = (name: string) => {\r\n const highligted = name.replace(new RegExp(query, \"gi\"), (match) => `${match}`);\r\n return \r\n }\r\n\r\n const handleClickOutside = (e: any) => {\r\n // // @ts-ignore\r\n // if(node.current.contains(e.target) ||\r\n // (e.target.parentElement && e.target.parentElement.classList.contains(\"search-trigger\"))\r\n // || (e.target.parentElement && e.target.classList.contains(\"search-trigger\"))) {\r\n // return;\r\n // }\r\n \r\n // // outside click\r\n // setValue('')\r\n // shouldHide && shouldHide();\r\n };\r\n\r\n return ReactDOM.createPortal(\r\n \r\n {\r\n if (event.target === node.current) {\r\n // shouldHide && shouldHide();\r\n }\r\n }}\r\n ref={node}\r\n >\r\n
\r\n onChangeHandler(event)}\r\n placeholder=\"Search\"\r\n value={query}\r\n ref={inputField}\r\n />\r\n \r\n {\r\n filteredSuggestions && filteredSuggestions.length ?\r\n
\r\n
    \r\n {\r\n filteredSuggestions.map((suggestion: any, key: any) => {\r\n // complete: \"Hopla Fur - Polar Bear\"\r\n return (\r\n handleAutoCompleteClick(suggestion)}\r\n >\r\n {formatStringByRelevance(suggestion)}\r\n \r\n ) \r\n })\r\n }\r\n
  • \r\n \r\n See all results for \"{ query }\"\r\n \r\n
  • \r\n
\r\n
: null\r\n }\r\n
\r\n \r\n
, document.getElementById('root') as HTMLElement\r\n )\r\n}\r\n\r\nexport default SearchBox;\r\n","import React, { useState, useEffect } from 'react';\r\n\r\n// Our hook\r\nexport function useDebounce(value: string, delay: number) {\r\n // State and setters for debounced value\r\n const [debouncedValue, setDebouncedValue] = useState(value);\r\n\r\n useEffect(\r\n () => {\r\n // Set debouncedValue to value (passed in) after the specified delay\r\n const handler = setTimeout(() => {\r\n setDebouncedValue(value);\r\n }, delay);\r\n\r\n // Return a cleanup function that will be called every time ...\r\n // ... useEffect is re-called. useEffect will only be re-called ...\r\n // ... if value changes (see the inputs array below). \r\n // This is how we prevent debouncedValue from changing if value is ...\r\n // ... changed within the delay period. Timeout gets cleared and restarted.\r\n // To put it in context, if the user is typing within our app's ...\r\n // ... search box, we don't want the debouncedValue to update until ...\r\n // ... they've stopped typing for more than 500ms.\r\n return () => {\r\n clearTimeout(handler);\r\n };\r\n },\r\n // Only re-call effect if value changes\r\n // You could also add the \"delay\" var to inputs array if you ...\r\n // ... need to be able to change that dynamically.\r\n [value] \r\n );\r\n\r\n return debouncedValue;\r\n}","import React from 'react'\r\n\r\nimport { FaUserCircle } from 'react-icons/fa';\r\n\r\ninterface Props {\r\n shouldHide?: Function\r\n onClickCreateOrder: Function\r\n onClickDeleteOrder: Function\r\n onClickMyMolo: Function\r\n onClickProfile: Function\r\n onClickProductDownload: Function\r\n logoutUser: Function\r\n hideDelete?: boolean\r\n editMode?: boolean\r\n deleteOrderText?: string\r\n showProductDownload?: boolean\r\n}\r\n\r\nconst ShopDropDown: React.FC = (props) => {\r\n const {\r\n onClickCreateOrder,\r\n onClickDeleteOrder,\r\n shouldHide,\r\n hideDelete,\r\n logoutUser,\r\n onClickMyMolo,\r\n onClickProfile,\r\n onClickProductDownload,\r\n showProductDownload,\r\n } = props;\r\n const node = React.useRef(null);\r\n const [open, setValue] = React.useState(false);\r\n\r\n const handleOnClickCreateOrder = () => {\r\n if (shouldHide) {\r\n shouldHide();\r\n }\r\n\r\n onClickCreateOrder();\r\n }\r\n\r\n React.useEffect(() => {\r\n // add when mounted\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n // return function to be called when unmounted\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n };\r\n });\r\n\r\n const handleClickOutside = (e: any) => {\r\n // @ts-ignore\r\n if(node.current.contains(e.target)) {\r\n return;\r\n }\r\n \r\n // outside click \r\n setValue(false)\r\n };\r\n\r\n const handleToggle = () => {\r\n setValue(!open)\r\n }\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n My Molo\r\n \r\n \r\n
\r\n
\r\n {\r\n setValue(false)\r\n handleOnClickCreateOrder()}\r\n }\r\n >\r\n Create new order\r\n
\r\n {\r\n !hideDelete &&\r\n {\r\n setValue(false)\r\n onClickDeleteOrder()}\r\n }\r\n >\r\n { props.deleteOrderText ? props.deleteOrderText : 'Delete current order'} \r\n
\r\n }\r\n {\r\n setValue(false)\r\n onClickMyMolo()}\r\n }\r\n >\r\n My orders\r\n \r\n {showProductDownload && {\r\n setValue(false)\r\n onClickProductDownload()}\r\n }\r\n >\r\n Image download\r\n }\r\n {\r\n setValue(false)\r\n onClickProfile()}\r\n }\r\n >\r\n My profile\r\n \r\n {\r\n setValue(false)\r\n logoutUser()\r\n }}\r\n >\r\n Logout\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default ShopDropDown;","import * as React from \"react\";\r\n\r\nimport {isFunction, isString} from 'lodash';\r\n\r\nimport { FaCheck, FaCaretDown } from 'react-icons/fa';\r\n\r\ninterface Props {\r\n items: any[],\r\n identifier: string,\r\n multi?: boolean,\r\n value: any,\r\n selected?: any\r\n onSelect?: Function\r\n allOption?: boolean\r\n allLabel?: string\r\n extraLabel?: string | Function | boolean\r\n placeholder?: string\r\n trigger?: Function\r\n valueRender?: Function\r\n}\r\n\r\nconst Dropdown: React.FC = (props) => {\r\n const { items, identifier, value, onSelect, multi, allOption, allLabel, placeholder, extraLabel } = props;\r\n const [open, setValue] = React.useState(false);\r\n const node = React.useRef(null);\r\n const DEFAULT_PLACEHOLDER_STRING = placeholder || 'Select...';\r\n\r\n const handleToggle = (event: any) => {\r\n event.stopPropagation();\r\n setValue(!open)\r\n }\r\n\r\n const onClickSelected = (selected: any) => {\r\n if (onSelect) {\r\n onSelect(selected);\r\n\r\n if (!multi) {\r\n setValue(false)\r\n }\r\n }\r\n }\r\n\r\n const handleClickOutside = (e: any) => {\r\n\r\n // @ts-ignore\r\n if(node.current.contains(e.target)) {\r\n return;\r\n }\r\n \r\n // outside click \r\n setValue(false)\r\n };\r\n\r\n const isItemSelected = (item: any) => { \r\n if (multi) {\r\n if (identifier === '$index') {\r\n return Array.isArray(value) ? value.indexOf(item) !== -1 : item === value;\r\n } else {\r\n if (Array.isArray(value)) {\r\n return value.map(val => val[identifier]).indexOf(item[identifier]) !== -1;\r\n }\r\n }\r\n }\r\n\r\n return identifier !== '$index' && value? item[identifier] === value[identifier] : item === value;\r\n }\r\n\r\n const renderExtraLabel = (item?: any) => {\r\n if (isFunction(extraLabel)) {\r\n return extraLabel(item)\r\n }\r\n\r\n if (isString(extraLabel)) {\r\n return - upcoming;\r\n }\r\n\r\n return null\r\n }\r\n\r\n React.useEffect(() => {\r\n // add when mounted\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n // return function to be called when unmounted\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n };\r\n }, []);\r\n\r\n let printValue = identifier !== '$index' && value && value[identifier] ? (value[identifier] || DEFAULT_PLACEHOLDER_STRING) : (value || DEFAULT_PLACEHOLDER_STRING);\r\n\r\n if (multi) {\r\n if (identifier !== '$index') {\r\n printValue = \"\";\r\n } else {\r\n if (Array.isArray(value)) {\r\n if (value.length) {\r\n printValue = value.map(v => `${v}`).join(' | '); \r\n } else {\r\n printValue = DEFAULT_PLACEHOLDER_STRING;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return (\r\n
\r\n
\r\n \r\n { !props.trigger && printValue.replaceAll('_',' ') }\r\n {\r\n props.trigger && props.trigger()\r\n }\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n {\r\n allOption &&\r\n {\r\n event.stopPropagation();\r\n onClickSelected('all')\r\n setValue(false);\r\n }}>\r\n { allLabel || 'All'}\r\n
\r\n }\r\n {\r\n items.map((item, key) => {\r\n return (\r\n {\r\n event.stopPropagation();\r\n onClickSelected(item)}\r\n }\r\n >\r\n { !props.valueRender && (identifier !== '$index' ? item[identifier].replaceAll('_',' ') : item.replaceAll('_',' ')) }\r\n { props.valueRender ? props.valueRender(item) : null }\r\n {extraLabel && renderExtraLabel(item)}\r\n {\r\n isItemSelected(item) &&\r\n \r\n }\r\n
\r\n )\r\n })\r\n }\r\n \r\n \r\n\r\n )\r\n}\r\n\r\nexport default Dropdown;","import React from 'react'\r\nimport { useDispatch } from \"react-redux\";\r\n\r\nimport Modal from '../layout/Modal/Modal';\r\n\r\n// Store.\r\nimport { deleteOrder, removeClosedOrderToRecentAction } from '../../store/order/actions';\r\n\r\ninterface Props {\r\n show: boolean\r\n shouldHide: Function\r\n orderId: number\r\n order: any\r\n onClickConfirmDelete?: Function\r\n}\r\n\r\nconst ShopOverlay: React.FC = (props) => {\r\n const { shouldHide, show, order, onClickConfirmDelete } = props;\r\n const dispatch = useDispatch();\r\n\r\n const onClickDeleteOrderConfirm = () => {\r\n if (order.orderState === 1) {\r\n dispatch(removeClosedOrderToRecentAction(order.appOrderId))\r\n shouldHide();\r\n } else {\r\n dispatch(deleteOrder(order.appOrderId))\r\n shouldHide();\r\n }\r\n\r\n if (onClickConfirmDelete) {\r\n onClickConfirmDelete(order);\r\n }\r\n }\r\n\r\n const renderModal = () => (\r\n
\r\n
\r\n

{order && order.navImportRef ? 'Close order' : 'Delete order'}

\r\n {\r\n order && order.orderState === 1 &&\r\n

\r\n Dont worry, you're able to import this order again at anytime. \r\n

\r\n }\r\n {\r\n order && order.orderState === 0 && !order.navImportRef &&\r\n

Are you sure you want to delete this order?

\r\n }\r\n {\r\n order && order.orderState === 0 && order.navImportRef &&\r\n

The order will be closed and your latest changes will be lost. If you want to submit your latest changes please push cancel and check out the order.

\r\n }\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n );\r\n\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport default ShopOverlay;","import React, { useEffect, useState } from 'react'\r\n\r\ninterface Props {\r\n from: number,\r\n dateFrom: Date\r\n limit: number\r\n}\r\n\r\nconst CountDown2: React.FC = (props) => {\r\n const [intervalId, setIntervalId] = useState(null)\r\n const [counter, setCounter] = useState(0);\r\n const [dateFromCurrent, setDateFromCurrent] = useState(null);\r\n\r\n React.useEffect(() => {\r\n counter > 0 && setTimeout(() => setCounter(counter - 1000), 1000);\r\n }, [counter]);\r\n\r\n useEffect(() => {\r\n const { dateFrom } = props;\r\n\r\n if (dateFromCurrent !== dateFrom) {\r\n setDateFromCurrent(dateFrom)\r\n const iid = setInterval(() => {\r\n const diff = new Date(new Date().toISOString()).getTime() - new Date(dateFrom).getTime()\r\n const timeLeft = (3600000 * 24) - diff;\r\n\r\n setCounter(timeLeft)\r\n\r\n if (timeLeft <= 0) {\r\n clearInterval(iid)\r\n }\r\n }, 1000)\r\n\r\n setIntervalId(intervalId)\r\n\r\n \r\n }\r\n }, [props, dateFromCurrent, intervalId]);\r\n\r\n const convertMillisToTime = (ms: number, delim = \" : \") => {\r\n const showWith0 = (value: any) => (value < 10 ? `0${value}` : value);\r\n const hours = showWith0(Math.floor((ms / (1000 * 60 * 60)) % 60));\r\n const minutes = showWith0(Math.floor((ms / (1000 * 60)) % 60));\r\n // const seconds = showWith0(Math.floor((ms / 1000) % 60));\r\n return `${parseInt(hours) ? `${hours}${delim}` : \"\"}${minutes}`;\r\n }\r\n \r\n return
\r\n Time left:\r\n {counter > 0 ? convertMillisToTime(counter) : '00 : 00'}\r\n
\r\n \r\n}\r\n\r\nexport default CountDown2;","import { clone } from 'lodash';\r\n\r\nexport function checkMonthGaps(months:any[], data: any, monthNames:any[], deliveryWindows:any[]) {\r\n const newMonths = [];\r\n\r\n deliveryWindows.sort(function compare(a, b) {\r\n const dateA: any = new Date(a.shippingDate);\r\n const dateB: any = new Date(b.shippingDate);\r\n return dateA - dateB;\r\n });\r\n\r\n for (const i in months) {\r\n const month = months[i];\r\n const currentMonth = data[month];\r\n const nextMonth = data[months[+i + 1]];\r\n let diff = 0;\r\n\r\n if (typeof nextMonth !== 'undefined') {\r\n diff = monthDiff(new Date(currentMonth.shippingDate), new Date(nextMonth.shippingDate));\r\n }\r\n\r\n newMonths.push(month);\r\n\r\n const newMonthDate = new Date(currentMonth.shippingDate);\r\n let newMonthYear = newMonthDate.getFullYear();\r\n for (let y = 0; y < diff; y++) {\r\n const monthNumber = newMonthDate.getMonth() + y + 1;\r\n const newMonth = monthNames[monthNumber % 12];\r\n\r\n if (monthNumber % 12 === 0) {\r\n newMonthYear = newMonthYear + 1;\r\n }\r\n\r\n const label = newMonth + ' ' + newMonthYear;\r\n\r\n newMonths.push(label);\r\n }\r\n }\r\n\r\n return newMonths;\r\n}\r\n\r\nexport function addMinmumMonths(months: any[], data: any[], monthNames: any[], deliveryWindows:any) {\r\n\r\n if (!deliveryWindows.length) return []\r\n \r\n const minMonths = 6;\r\n\r\n deliveryWindows.sort(function compare(a:any, b:any) {\r\n const dateA:any = new Date(a.shippingDate);\r\n const dateB:any = new Date(b.shippingDate);\r\n return dateA - dateB;\r\n });\r\n\r\n const firstMonth = deliveryWindows[0].shippingDate;\r\n const lastMonth = deliveryWindows[deliveryWindows.length - 1].shippingDate;\r\n let reneDiff = monthDiff(new Date(firstMonth), new Date(lastMonth))\r\n\r\n if (months.length === 1) {\r\n // Add at least the minimum amount of months\r\n // to the calendar.\r\n if (months.length < minMonths) {\r\n const monthsToAdd = minMonths - months.length;\r\n const newMonthDate = new Date(deliveryWindows[deliveryWindows.length - 1].shippingDate);\r\n // @ts-ignore\r\n let nmy = newMonthDate.getFullYear();\r\n\r\n for (let y = 0; y < monthsToAdd; y++) {\r\n const monthNumber = newMonthDate.getMonth() + y + 1;\r\n const newMonth = monthNames[monthNumber % 12];\r\n\r\n if (monthNumber % 12 === 0) {\r\n nmy = nmy + 1;\r\n }\r\n\r\n const label = newMonth + ' ' + nmy;\r\n\r\n if (months.indexOf(label) === -1) {\r\n months.push(label);\r\n }\r\n }\r\n }\r\n } else {\r\n let newMonths: any[] = [];\r\n const start = new Date(deliveryWindows[0].shippingDate);\r\n let nextMonth: Date = start;\r\n\r\n if (reneDiff < minMonths) {\r\n reneDiff = minMonths;\r\n }\r\n\r\n for (let y = 0; y < reneDiff; y++) {\r\n \r\n const otherClone = clone(nextMonth)\r\n let nmy = otherClone.getFullYear();\r\n const monthNumber = clone(otherClone).getMonth();\r\n const newMonth = monthNames[monthNumber % 12];\r\n\r\n const label = newMonth + ' ' + nmy;\r\n\r\n if (newMonths.indexOf(label) === -1) {\r\n newMonths.push(label);\r\n }\r\n\r\n // Add it.\r\n nextMonth = new Date(otherClone.setMonth(clone(otherClone).getMonth() + 1, 1));\r\n }\r\n\r\n months = newMonths;\r\n }\r\n\r\n return months;\r\n}\r\n\r\nexport function monthDiff(d1:any, d2:any) {\r\n let months = null;\r\n months = (d2.getFullYear() - d1.getFullYear()) * 12;\r\n months -= d1.getMonth() + 1;\r\n months += d2.getMonth();\r\n return months <= 0 ? 0 : months;\r\n}\r\n\r\nexport function positionDrops(orderDrops:any, months:any) {\r\n const drops = { ...orderDrops };\r\n interface IDropByPostition {\r\n [id: string]: any[],\r\n };\r\n\r\n let dropsSorted: {[id: string]: IDropByPostition} = {};\r\n\r\n for (const i in months) {\r\n const month = months[i];\r\n let dropsSortedByPosition: IDropByPostition = {1: [], 2: [], 3: [], 4: [], 5: []};\r\n dropsSorted[month] = dropsSortedByPosition;\r\n\r\n if (drops[month]) {\r\n const dropsForMonth = drops[month];\r\n const y = new Date(dropsForMonth[0].shippingDate).getFullYear().toString();\r\n const m = new Date(dropsForMonth[0].shippingDate).getMonth();\r\n const weekcount = getWeekCount(y, m);\r\n const weeksInMonth = getWeeksInMonth(y, m);\r\n // const numberOfWeeks = weekcount[1] - weekcount[0];\r\n\r\n for (const key in dropsForMonth) {\r\n \r\n const drop = dropsForMonth[key];\r\n let weekNumber = getWeekNumber(new Date(drop.shippingDate));\r\n\r\n \r\n \r\n // Total edge case.\r\n if (weekNumber === 1 && weekcount[1] === 53) {\r\n weekNumber = 53;\r\n }\r\n\r\n const position = weeksInMonth - (weekcount[1] - weekNumber);\r\n\r\n drop.position = position;\r\n\r\n if (dropsSortedByPosition && !dropsSortedByPosition[drop.position]) {\r\n dropsSortedByPosition[drop.position] = [];\r\n }\r\n dropsSortedByPosition[drop.position].push(drop);\r\n }\r\n\r\n dropsSorted[month] = dropsSortedByPosition;\r\n }\r\n }\r\n\r\n return dropsSorted;\r\n}\r\n\r\nexport function getWeekCount(year:any, month:any) {\r\n // // month_number is in the range 1..\r\n year = year || new Date().getFullYear();\r\n const yearStart:any = new Date(year,0,1); // 1st Jan of the Year\r\n\r\n const first_day_of_month:any = new Date(year, month, 1);\r\n const first_week_number = Math.ceil(( ( (first_day_of_month - yearStart) / 86400000) +yearStart.getDay()+ 1)/7);\r\n\r\n const last_day_of_month:any = new Date(year, month+1, 0); // Last date of the Month\r\n const last_week_number = Math.ceil(( ( (last_day_of_month - yearStart) / 86400000) +yearStart.getDay()+ 1)/7);\r\n\r\n return [first_week_number, last_week_number];\r\n}\r\n\r\n\r\nfunction getWeeksInMonth(year: any, month_number: any) {\r\n\r\n // month_number is in the range 1..12\r\n\r\n var firstOfMonth = new Date(year, month_number-1, 1);\r\n var lastOfMonth = new Date(year, month_number, 0);\r\n\r\n var used = firstOfMonth.getDay() + 6 + lastOfMonth.getDate();\r\n\r\n return Math.ceil( used / 7);\r\n}\r\n\r\nexport function getWeekNumber(d:any) {\r\n // Copy date so don't modify original\r\n d = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));\r\n // Set to nearest Thursday: current date + 4 - current day number\r\n // Make Sunday's day number 7\r\n d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay()||7));\r\n // Get first day of year\r\n const yearStart:any = new Date(Date.UTC(d.getUTCFullYear(),0,1));\r\n // Calculate full weeks to nearest Thursday\r\n const weekNo = Math.ceil(( ( (d - yearStart) / 86400000) + 1)/7);\r\n\r\n return weekNo;\r\n}\r\n\r\nexport function formatDate(dateObj:any, format?:string) {\r\n if (!isValidDate(dateObj)) { return 'Invalid Date'; }\r\n\r\n const day = pad(dateObj.getDate().toString());\r\n const month = pad((dateObj.getMonth() + 1).toString());\r\n const year = dateObj.getFullYear().toString();\r\n\r\n switch (format) {\r\n case 'YYYY-MM-DD':\r\n return year + '-' + month + '-' + day;\r\n case 'DD.MM.YYYY':\r\n return day + '.' + month + '.' + year;\r\n default:\r\n return day + '/' + month + ' - ' + year;\r\n }\r\n}\r\n\r\nexport function isValidDate(dateObj: any) {\r\n return dateObj instanceof Date && !isNaN(dateObj.getTime()) && new Date().getFullYear().toString().length === 4;\r\n}\r\n\r\nexport function pad(n: any) {\r\n return n < 10 ? '0' + n : n;\r\n}","import React, { Component } from 'react'\r\nimport { FaPen, FaThumbsUp, FaExternalLinkAlt } from 'react-icons/fa';\r\nimport { cloneDeep } from 'lodash';\r\nimport { checkMonthGaps, positionDrops, formatDate, addMinmumMonths } from '../../../utils/deliveryWindowsHelper';\r\nimport { ContextMenu, Icon, Menu, MenuItem } from \"@blueprintjs/core\";\r\nimport { TweenLite } from \"gsap\";\r\nimport OrderApi from '../../../store/order/OrderApi';\r\n \r\ninterface Props {\r\n deliveryWindows: any[]\r\n onClickDrop: Function\r\n hideEditLink?: boolean\r\n onClickFilterGroup: Function\r\n userIsInformed: boolean\r\n setUserHasConfirmed: Function\r\n onClickViewTracking?: Function\r\n}\r\n\r\nexport class ShippedOrdersCalendar extends Component {\r\n constructor(props: Props) {\r\n super(props);\r\n\r\n this.box = null;\r\n this.t = null;\r\n this.myTween = null;\r\n }\r\n\r\n state = {\r\n months: [],\r\n data: {},\r\n drops: {},\r\n deliveryWindows: [],\r\n showLeftArrow: false,\r\n showRightArrow: true,\r\n showArrows: false,\r\n arrowsInitialized: false,\r\n monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\r\n gotIt: false,\r\n };\r\n\r\n box: HTMLDivElement | null;\r\n t: ReturnType | null;\r\n myTween: GSAPTimeline | null;\r\n \r\n container = React.createRef();\r\n\r\n componentDidMount() {\r\n const gotIt = OrderApi.getGotIt();\r\n\r\n this.setState({ gotIt: gotIt})\r\n this.props.setUserHasConfirmed(gotIt);\r\n \r\n if (this.props.deliveryWindows) {\r\n this.setupMonths(this.props.deliveryWindows);\r\n }\r\n\r\n if (this.container.current) {\r\n if (+this.container.current.scrollWidth > +this.container.current.clientWidth) {\r\n this.setState({ showArrows: true, arrowsInitialized: true })\r\n }\r\n }\r\n\r\n window.addEventListener('resize', this.handleResize)\r\n }\r\n\r\n componentDidUpdate(prevProps: Props) {\r\n if (prevProps.deliveryWindows !== this.props.deliveryWindows) {\r\n // this.setupMonths(this.props.deliveryWindows);\r\n }\r\n\r\n if (!this.state.arrowsInitialized && this.container.current) {\r\n if (+this.container.current.scrollWidth > +this.container.current.clientWidth) {\r\n this.t = TweenLite.to(this.box, 1, {duration: 1, opacity: 1, y: 0, stagger: 0.25});\r\n this.setState({ showArrows: true, arrowsInitialized: true })\r\n }\r\n }\r\n }\r\n\r\n handleResize = () => {\r\n if (this.container.current) {\r\n if (+this.container.current.scrollWidth > +this.container.current.clientWidth && !this.state.showArrows) {\r\n this.setState({ showArrows: true })\r\n } else {\r\n if (this.state.showArrows &&\r\n +this.container.current.scrollWidth === +this.container.current.clientWidth) {\r\n this.setState({ showArrows: false })\r\n }\r\n }\r\n }\r\n }\r\n\r\n setupMonths(deliveryWindows: any) {\r\n deliveryWindows.sort(function compare(a:any, b:any) {\r\n const dateA:any = new Date(a.shippingDate);\r\n const dateB:any = new Date(b.shippingDate);\r\n return dateA - dateB;\r\n });\r\n\r\n // let months = this.state.months;\r\n let months = [];\r\n const data:any = {};\r\n\r\n for (const i in deliveryWindows) {\r\n const delivery = deliveryWindows[i];\r\n\r\n const date = new Date(delivery.shippingDate);\r\n const year = date.getFullYear();\r\n const month = this.state.monthNames[date.getMonth()];\r\n const label = month + ' ' + year;\r\n\r\n if (months.indexOf(label) === -1) {\r\n months.push(label);\r\n data[label] = [delivery];\r\n }\r\n };\r\n\r\n const newMonths = checkMonthGaps(months, data, this.state.monthNames, deliveryWindows);\r\n const newMonthsWithMinimumMonths = addMinmumMonths(cloneDeep(newMonths), data, this.state.monthNames, deliveryWindows);\r\n\r\n this.setState({\r\n months: newMonthsWithMinimumMonths,\r\n data,\r\n }, () => {\r\n this.setupDrops();\r\n });\r\n }\r\n\r\n setupDrops() {\r\n let dr: any = {};\r\n\r\n console.log(this.props.deliveryWindows, 'this.props.deliveryWindows')\r\n\r\n for (const i in this.props.deliveryWindows) {\r\n const delivery = this.props.deliveryWindows[i];\r\n\r\n const date = new Date(delivery.shippingDate);\r\n const year = date.getFullYear();\r\n const month = this.state.monthNames[date.getMonth()];\r\n const label = month + ' ' + year;\r\n\r\n if (!dr[label]) {\r\n dr[label] = [];\r\n }\r\n\r\n dr[label].push({\r\n date: date,\r\n shippingDate: new Date(delivery.shippingDate),\r\n shippingFrom: new Date(delivery.shippingFrom),\r\n shippingdateVisual: formatDate(new Date(delivery.shippingDate)),\r\n deliveryCode: delivery.deliveryCode,\r\n delivreryShortdescription: delivery.deliveryPrintdescription,\r\n bsl: delivery.bsl || '',\r\n items: delivery || 0,\r\n nooftrackingcodes: delivery.nooftrackingcodes || 0\r\n });\r\n }\r\n\r\n const postioned = positionDrops({ ...dr }, this.state.months);\r\n this.setState({drops: postioned});\r\n }\r\n\r\n onClickGotIt = () => {\r\n this.setState({ gotIt: true });\r\n this.props.setUserHasConfirmed(true)\r\n }\r\n\r\n onClickDrop(drop: any) {\r\n this.props.onClickDrop(drop);\r\n }\r\n\r\n onClickViewTracking(drop: any) {\r\n this.props.onClickViewTracking && this.props.onClickViewTracking(drop)\r\n }\r\n\r\n onClickFilterGroup = (drop: any) => {\r\n this.props.onClickFilterGroup('deliverywindows', {\r\n value: drop.deliveryCode\r\n })\r\n }\r\n\r\n renderDrops(month: any) {\r\n // @ts-ignore\r\n if (!this.state.drops[month]) {\r\n return null;\r\n }\r\n\r\n // @ts-ignore\r\n const dropsForMonth = this.state.drops[month];\r\n\r\n return Object.keys(dropsForMonth).map((key: any, $index:number) => {\r\n const drops = dropsForMonth[key];\r\n if (!drops.length) {\r\n return null;\r\n }\r\n\r\n return
\r\n {\r\n drops.length &&\r\n drops.map((drop: any, index: number) => {\r\n return this.showContextMenu(e, drop)}\r\n style={{gridRow: drop.position}} key={`${drop.deliveryCode}/${index}`}>\r\n

\r\n {drop.deliveryCode === 'specdate' ? 'Shipping Date' : drop.deliveryCode}
\r\n {drop.bsl !== '' && drop.bsl}\r\n

\r\n

\r\n {drop.shippingdateVisual}\r\n

\r\n {\r\n drop.bsl !== '' &&\r\n \r\n Shipped\r\n \r\n }\r\n
\r\n {drop.nooftrackingcodes && drop.nooftrackingcodes > 0 ?

this.onClickViewTracking(drop)}>\r\n View tracking\r\n \r\n

: null}\r\n \r\n

this.onClickDrop(drop)}>\r\n View Items\r\n \r\n

\r\n
\r\n
\r\n })\r\n }\r\n \r\n })\r\n }\r\n\r\n renderMonths() {\r\n return this.state.months.map((month, $index) => {\r\n return (\r\n
\r\n
\r\n

{month}

\r\n
\r\n this.box = e}\r\n className=\"delivery-windows__month-days\"\r\n style={{gridTemplateRows: 'repeat(5, minmax(75px, auto))'}}>\r\n {this.renderDrops(month)}\r\n
\r\n \r\n );\r\n });\r\n }\r\n\r\n private scrollLeftRight = (direction: 'left' | 'right') => {\r\n if (this.container.current) {\r\n if (direction === 'left') {\r\n this.container.current.scrollLeft -= this.container.current.scrollWidth;\r\n }\r\n\r\n if (direction === 'right') {\r\n this.container.current.scrollLeft += this.container.current.scrollWidth;\r\n }\r\n }\r\n }\r\n\r\n handleScroll = (e: any) => {\r\n const scrollLeft = e.target.scrollLeft;\r\n\r\n if (scrollLeft > 0) {\r\n this.setState({ showLeftArrow: true })\r\n }\r\n\r\n if (scrollLeft === 0) {\r\n this.setState({ showLeftArrow: false })\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n
\r\n {this.renderMonths()}\r\n {\r\n !this.props.userIsInformed &&\r\n \r\n
\r\n
\r\n

Change shipping dates

\r\n

\r\n Click on a drop on the timeline and change it to\r\n your need.\r\n

\r\n

\r\n Got it\r\n \r\n

\r\n
\r\n
\r\n }\r\n
\r\n {\r\n this.state.showLeftArrow && this.state.showArrows &&\r\n
this.scrollLeftRight('left')}>\r\n \r\n
\r\n }\r\n {\r\n this.state.showRightArrow && this.state.showArrows &&\r\n
this.scrollLeftRight('right')}>\r\n \r\n
\r\n }\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default ShippedOrdersCalendar","import { __extends } from \"tslib\";\r\nimport React from 'react';\r\nimport { FaChevronDown } from 'react-icons/fa';\r\n;\r\nvar AccordionPanel = /** @class */ (function (_super) {\r\n __extends(AccordionPanel, _super);\r\n function AccordionPanel() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.accordionPanelRef = React.createRef();\r\n _this.state = {\r\n open: true,\r\n stateClass: '',\r\n accordionStyle: {\r\n height: 0\r\n }\r\n };\r\n _this.handleClick = function () {\r\n var height = 0;\r\n if (_this.accordionPanelRef.current) {\r\n height = _this.accordionPanelRef.current.scrollHeight;\r\n }\r\n //height = height > 280 ? 280 : height;\r\n if (_this.state.open) {\r\n _this.setState({\r\n open: false,\r\n stateClass: '',\r\n accordionStyle: {\r\n height: 0\r\n }\r\n });\r\n }\r\n else {\r\n _this.setState({\r\n open: true,\r\n stateClass: 'm-accordion-panel--open',\r\n accordionStyle: {\r\n height: height\r\n }\r\n });\r\n }\r\n };\r\n return _this;\r\n }\r\n AccordionPanel.prototype.componentDidMount = function () {\r\n this.setState({ open: this.props.defaultClosed });\r\n };\r\n AccordionPanel.prototype.componentDidUpdate = function (prevProps) {\r\n var _this = this;\r\n this.updateHeight(prevProps.children);\r\n if (prevProps.defaultClosed !== this.props.defaultClosed) {\r\n // console.log(this.props.defaultClosed, this.props.heading, 'change it')\r\n this.setState({ open: this.props.defaultClosed }, function () {\r\n if (!_this.props.defaultClosed) {\r\n _this.setState({\r\n accordionStyle: {\r\n height: 0\r\n }\r\n });\r\n }\r\n else {\r\n _this.updateHeight(prevProps.children);\r\n }\r\n });\r\n }\r\n else {\r\n if (!this.state.open && this.state.accordionStyle.height !== 0) {\r\n this.setState({\r\n accordionStyle: {\r\n height: 0\r\n }\r\n });\r\n }\r\n }\r\n };\r\n AccordionPanel.prototype.updateHeight = function (children) {\r\n if (children !== this.props.children && this.state.open && this.accordionPanelRef.current) {\r\n this.setState({\r\n accordionStyle: {\r\n height: this.accordionPanelRef.current.scrollHeight\r\n }\r\n });\r\n }\r\n };\r\n AccordionPanel.prototype.render = function () {\r\n return (React.createElement(\"div\", { className: \"m-accordion-panel\" + (this.state.open ? \" m-accordion-panel--open\" : \"\") },\r\n React.createElement(\"div\", { className: \"m-accordion-panel__header\", onClick: this.handleClick },\r\n React.createElement(\"div\", { className: \"m-accordion-panel__heading\" }, this.props.heading),\r\n React.createElement(\"div\", { className: \"m-accordion-panel__state-indicator\" },\r\n React.createElement(FaChevronDown, null))),\r\n React.createElement(\"div\", { ref: this.accordionPanelRef, className: \"m-accordion-panel__content\", style: this.state.accordionStyle }, this.props.children)));\r\n };\r\n return AccordionPanel;\r\n}(React.Component));\r\nexport { AccordionPanel };\r\n//# sourceMappingURL=AccordionPanel.js.map","import React from 'react';\r\nexport var CheckboxInput = function (_a) {\r\n var name = _a.name, title = _a.title, value = _a.value, handleChange = _a.handleChange, checked = _a.checked;\r\n //console.log(props.value);\r\n return (React.createElement(\"div\", { className: \"pretty p-default form-group\" },\r\n React.createElement(\"input\", { onChange: handleChange, value: value, className: \"a-form-control a-form-control--checkbox\", type: \"checkbox\", name: name, id: \"\".concat(value, \"_id\"), checked: checked }),\r\n React.createElement(\"div\", { className: \"state\" },\r\n React.createElement(\"label\", { htmlFor: \"\".concat(value, \"_id\") }, title))));\r\n};\r\n//# sourceMappingURL=CheckboxInput.js.map","import * as React from \"react\";\r\nimport BarLoader from 'react-spinners/BarLoader';\r\n// import { ReactComponent as Logo } from 'molo-shared/src/images/svg/Molo_Logo_Black_WS.svg';\r\n// import Logo from '../images/svg/Molo_Logo_Black_WS.svg';\r\n// const logo = require('../images/svg/Molo_Logo_Black_WS.svg');\r\n// import * as logo from '../images/svg/Molo_Logo_Black_WS.svg'\r\nexport var MoloRingloader = function () { return (React.createElement(\"div\", { style: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n height: '100%',\r\n width: '100%',\r\n flexDirection: 'column',\r\n } },\r\n React.createElement(\"div\", { style: { flexGrow: 1, display: 'flex', alignItems: 'center' }, className: \"logo-fade-in\" },\r\n React.createElement(\"svg\", { version: \"1.1\", id: \"Layer_1\", xmlns: \"http://www.w3.org/2000/svg\", xmlnsXlink: \"http://www.w3.org/1999/xlink\", x: \"0px\", y: \"0px\", viewBox: \"0 0 1054.07 597.35\", xmlSpace: \"preserve\", style: { height: '100px' } },\r\n React.createElement(\"style\", { type: \"text/css\" }),\r\n React.createElement(\"g\", null,\r\n React.createElement(\"polygon\", { className: \"st0\", points: \"392.53,410.71 381.06,279.58 341.01,415.22 309.93,417.94 245.41,291.73 256.86,422.58 219.11,425.88 \\r\\n 201.76,227.53 249.57,223.34 321.33,362.36 365.26,213.22 413.12,209.03 430.48,407.39 \\t\" }),\r\n React.createElement(\"rect\", { x: \"623.62\", y: \"189.34\", transform: \"matrix(0.9962 -0.0872 0.0872 0.9962 -22.7333 57.1069)\", className: \"st0\", width: \"38\", height: \"199.11\" }),\r\n React.createElement(\"path\", { className: \"st0\", d: \"M562.21,322.41c-2.45-28.03-21.48-40.91-41.46-39.16c-19.71,1.72-36.48,17.73-34.03,45.77\\r\\n c2.45,28.03,21.8,41.44,41.51,39.72C548.21,366.98,564.69,350.72,562.21,322.41 M600.08,319.07c3.92,44.83-25.21,80.2-68.84,84.02\\r\\n c-43.34,3.79-78.16-25.99-82.09-70.82c-3.9-44.53,25.23-79.9,68.57-83.69C561.35,244.76,596.18,274.54,600.08,319.07\" }),\r\n React.createElement(\"path\", { className: \"st0\", d: \"M802.51,301.38c-2.45-28.03-21.48-40.91-41.46-39.16c-19.71,1.72-36.48,17.73-34.03,45.77\\r\\n c2.45,28.03,21.8,41.44,41.51,39.72C788.52,345.96,804.99,329.69,802.51,301.38 M840.38,298.05c3.92,44.83-25.21,80.2-68.84,84.02\\r\\n c-43.34,3.79-78.16-25.99-82.09-70.82c-3.9-44.53,25.23-79.9,68.57-83.69C801.65,223.74,836.48,253.52,840.38,298.05\" })))),\r\n React.createElement(\"div\", { style: { marginBottom: '150px' } },\r\n React.createElement(BarLoader, { width: 500 })))); };\r\n//# sourceMappingURL=MoloRingloader.js.map","export var productListCategorySort = {\r\n 'main': [\r\n 'T-shirts & Tops',\r\n 'Shirts',\r\n 'Sweaters',\r\n 'Jumpers & Cardigans',\r\n 'Collection Jackets',\r\n 'Dresses',\r\n 'Skirts',\r\n 'Shorts',\r\n 'Pants',\r\n 'Leggings',\r\n 'Tights & Socks',\r\n 'Underwear',\r\n 'Nightwear',\r\n 'Babysuits',\r\n 'Acc. Collection',\r\n 'Bags & Containers',\r\n 'Marketing',\r\n ],\r\n 'ow': [\r\n 'Jackets & Coats',\r\n 'Pants',\r\n 'Snowsuits',\r\n 'Rainwear',\r\n 'Fleece & Soft Shells',\r\n 'Collection Jackets',\r\n 'Acc .Outerwear',\r\n 'Acc. Outerwear',\r\n 'Acc Collection',\r\n 'Acc. Collection',\r\n 'Marketing',\r\n ],\r\n 'sport': [\r\n 'T-shirts & Tops',\r\n 'Sweaters',\r\n 'Collection Jackets',\r\n 'Shorts',\r\n 'Skirts',\r\n 'Pants',\r\n 'Leggings',\r\n 'Bodysuits',\r\n 'Bags & Containers',\r\n 'Acc Collection',\r\n 'Acc. Collection',\r\n ],\r\n 'swim': [\r\n 'Swimwear',\r\n 'Acc Swimwear',\r\n 'Acc. Swimwear',\r\n 'Acc. Collection',\r\n 'Acc Collection',\r\n 'Footwear',\r\n 'T-shirts & Tops',\r\n 'Dresses',\r\n 'Shorts',\r\n 'Pants',\r\n 'Marketing',\r\n ],\r\n};\r\n//# sourceMappingURL=productSort.js.map","import { __extends } from \"tslib\";\r\nimport React, { Component } from 'react';\r\nimport { MoloRingloader } from './layout/MoloRingloader';\r\n// Images.\r\nimport ReorderSwim from './images/collections/reorder/swim.jpg';\r\nimport ReorderMain from './images/collections/reorder/main.jpg';\r\nimport ReorderOuterWear from './images/collections/reorder/outerwear.jpg';\r\nimport ReorderFriendship from './images/collections/reorder/friendship.jpg';\r\nimport ReorderSport from './images/collections/reorder/sport.jpg';\r\nimport w20PreorderSport from './images/collections/preorder/w20/sport.jpg';\r\nimport w20PreorderOuterWear from './images/collections/preorder/w20/outerwear.jpg';\r\nimport w20PreorderMain from './images/collections/preorder/w20/main.jpg';\r\nimport s21PreorderSport from './images/collections/preorder/s21/sport.jpg';\r\nimport s21PreorderSwim from './images/collections/preorder/s21/swim.jpg';\r\nimport s21PreorderOuterWear from './images/collections/preorder/s21/outerwear.jpg';\r\nimport s21PreorderMain from './images/collections/preorder/s21/main.jpg';\r\nimport w21PreorderSport from './images/collections/preorder/w21/sport.jpg';\r\nimport w21PreorderOuterWear from './images/collections/preorder/w21/outerwear.jpg';\r\nimport w21PreorderMain from './images/collections/preorder/w21/main.jpg';\r\nimport MissingBanner from './images/logobanner.jpg';\r\n;\r\nvar CollectionChooser = /** @class */ (function (_super) {\r\n __extends(CollectionChooser, _super);\r\n function CollectionChooser() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.state = {\r\n imagesIsLoded: false,\r\n imagesLoaded: 1,\r\n initialized: true,\r\n sortedCollections: []\r\n };\r\n _this.imageDoneLoading = function () {\r\n if (!_this.props.collections)\r\n return;\r\n var imagesLoaded = _this.state.imagesLoaded;\r\n imagesLoaded++;\r\n _this.setState({\r\n imagesIsLoded: _this.props.collections.length <= imagesLoaded,\r\n imagesLoaded: imagesLoaded\r\n });\r\n };\r\n return _this;\r\n }\r\n CollectionChooser.prototype.componentDidMount = function () {\r\n // if (this.props.collections && this.props.collections.length && !this.state.initialized) {\r\n // let sortedCollections = [];\r\n // if (this.props.collections) {\r\n // sortedCollections = this.props.collections.sort((a, b) => (a.sort > b.sort) ? 1 : -1)\r\n // this.setState({ initialized: true, sortedCollections }) \r\n // }\r\n // }\r\n };\r\n CollectionChooser.prototype.componentDidUpdate = function (prevProps, prevState) {\r\n // if (\r\n // (this.props.collections && this.props.collections.length && !this.state.initialized)\r\n // || (this.props.collections && prevProps.collections &&\r\n // this.props.collections.length !== prevProps.collections.length\r\n // && this.props.collections && this.state.initialized)\r\n // ) {\r\n // let sortedCollections = [];\r\n // if (this.props.collections) {\r\n // sortedCollections = this.props.collections.sort((a, b) => (a.sort > b.sort) ? 1 : -1)\r\n // this.setState({ initialized: true, sortedCollections }) \r\n // }\r\n // }\r\n };\r\n CollectionChooser.prototype.isOdd = function (num) { return num % 2; };\r\n CollectionChooser.prototype.render = function () {\r\n var _this = this;\r\n var orderType = this.props.orderType;\r\n var sortedCollections = this.state.sortedCollections;\r\n var reOrderBackgroundImages = {\r\n 'swim': ReorderSwim,\r\n 'main': ReorderMain,\r\n 'outerwear': ReorderOuterWear,\r\n 'sport': ReorderSport,\r\n 'friendship': ReorderFriendship\r\n };\r\n var w20preOrderBackgroundImages = {\r\n 'main': w20PreorderMain,\r\n 'outerwear': w20PreorderOuterWear,\r\n 'sport': w20PreorderSport,\r\n };\r\n var s21preOrderBackgroundImages = {\r\n 'swim': s21PreorderSwim,\r\n 'main': s21PreorderMain,\r\n 'outerwear': s21PreorderOuterWear,\r\n 'sport': s21PreorderSport,\r\n };\r\n var w21preOrderBackgroundImages = {\r\n 'main': w21PreorderMain,\r\n 'outerwear': w21PreorderOuterWear,\r\n 'sport': w21PreorderSport,\r\n };\r\n var getImage = function (imgUrl) {\r\n return (React.createElement(\"img\", { src: _this.props.loadImage && _this.props.loadImage(imgUrl), className: \"card-list__item__image\", onError: function (el) {\r\n el.target.src = MissingBanner;\r\n el.target.classList.add('missing');\r\n }, onLoad: _this.imageDoneLoading }));\r\n };\r\n return (React.createElement(React.Fragment, null,\r\n (!this.state.initialized || !this.state.imagesIsLoded) &&\r\n React.createElement(\"div\", { style: { height: '100vh', width: '100vw', position: 'fixed' } },\r\n React.createElement(MoloRingloader, null)),\r\n React.createElement(\"div\", { className: \"card-list__wrapper \" + ((!this.state.initialized || !this.state.imagesIsLoded) ? \"\" : \"fade-in\"), style: { visibility: (!this.state.initialized || !this.state.imagesIsLoded) ? 'hidden' : 'visible' } },\r\n React.createElement(\"ul\", { className: \"card-list\" + ((this.props.collections && this.props.collections.length > 2) ? ' card-list--small' : '') },\r\n this.props.collections && this.props.collections.map(function (collection, key) {\r\n return collection.collectionName && React.createElement(\"li\", { key: collection.collectionName, className: \"card-list__item\" },\r\n React.createElement(\"div\", { onClick: function () { return _this.props.handleOnClick && _this.props.handleOnClick(collection.collectionName); }, className: \"card-list__item__link\" },\r\n getImage(collection.imgUrl),\r\n React.createElement(\"div\", { className: \"card-list__item__title\" }, collection.collectionName || '?!?')));\r\n }),\r\n this.props.collections && this.isOdd(this.props.collections.length) ?\r\n React.createElement(\"li\", { className: \"card-list__item\" },\r\n React.createElement(\"div\", { className: \"card-list__item__link --not-active\" },\r\n React.createElement(\"img\", { src: MissingBanner, alt: 'missing placeholder', className: \"card-list__item__image --no-hover --placeholder missing\" })))\r\n :\r\n null))));\r\n };\r\n return CollectionChooser;\r\n}(Component));\r\nexport { CollectionChooser };\r\nexport default CollectionChooser;\r\n//# sourceMappingURL=CollectionsChooser.js.map","import * as React from \"react\";\r\nexport var FilterIcon = function () {\r\n return (React.createElement(\"svg\", { version: \"1.1\", x: \"0px\", y: \"0px\", viewBox: \"0 0 100 125\", enableBackground: \"new 0 0 100 100\", xmlSpace: \"preserve\" },\r\n React.createElement(\"g\", { display: \"none\" },\r\n React.createElement(\"circle\", { display: \"inline\", fill: \"#000000\", cx: \"50\", cy: \"50\", r: \"40\" }),\r\n React.createElement(\"circle\", { display: \"inline\", fill: \"#000000\", cx: \"50\", cy: \"50\", r: \"40\" })),\r\n React.createElement(\"g\", null,\r\n React.createElement(\"g\", null,\r\n React.createElement(\"path\", { d: \"M29.5,40.7c4.4,0,8.1-3,9.2-7h40.7v-5H38.7c-1.1-4-4.8-7-9.2-7c-5.2,0-9.5,4.3-9.5,9.5C20,36.5,24.3,40.7,29.5,40.7z\" }),\r\n React.createElement(\"path\", { d: \"M70.8,56.5c-4.4,0-8.1,3-9.2,7h-41v5h41c1.1,4,4.8,7,9.2,7c5.2,0,9.5-4.3,9.5-9.5S76,56.5,70.8,56.5z\" })))));\r\n};\r\n//# sourceMappingURL=FilterIcon.js.map","import { __read } from \"tslib\";\r\nimport React, { useState, useEffect, createRef } from 'react';\r\nimport { FaChevronLeft } from 'react-icons/fa';\r\nimport { throttle } from 'lodash';\r\nvar StickyHeader = function (props) {\r\n var showGoBack = props.showGoBack, goBack = props.goBack, title = props.title, onSticky = props.onSticky, onUnSticky = props.onUnSticky;\r\n var ref = createRef();\r\n var _a = __read(useState(false), 2), isSticky = _a[0], setSticky = _a[1];\r\n var top = window.innerWidth > 1000 ? 78 : 110;\r\n useEffect(function () {\r\n var container = document.getElementById('sticky-container');\r\n // Add scroll event when the component is loaded\r\n container && container.addEventListener('scroll', throttle(handleScroll, 100));\r\n return function () {\r\n // Remove scroll event after the component is unmount,\r\n // like componentWillUnmount()\r\n container && container.removeEventListener('scroll', function () { return handleScroll; });\r\n };\r\n // Here, we set useEffect() arguments as empty array.\r\n // This means useEffect() will only run once after component loaded\r\n });\r\n var handleScroll = function () {\r\n // Make sure ref has current attibute and getBoundingClientRect function\r\n // otherwise, it could cause getBoundingClientRect undefined error.\r\n if (ref && ref.current && ref.current.getBoundingClientRect()) {\r\n // Then, we compare the distance of the ref component to the top\r\n // with top value we set. If less than, we set isStick ture.\r\n if (onSticky && ref && ref.current && ref.current.getBoundingClientRect().top <= top) {\r\n if (!ref.current.classList.contains('is-sticky')) {\r\n setSticky(true);\r\n onSticky(title);\r\n }\r\n }\r\n else {\r\n if (ref.current.classList.contains('is-sticky') && onUnSticky) {\r\n setSticky(false);\r\n onUnSticky(title);\r\n }\r\n }\r\n }\r\n };\r\n return (React.createElement(\"h2\", { className: \"category-name sticky__wrapper \".concat(isSticky && 'is-sticky'), ref: ref },\r\n showGoBack && React.createElement(\"span\", { className: \"category-name__go-back\", onClick: function () { return goBack; } },\r\n React.createElement(FaChevronLeft, null)),\r\n React.createElement(\"span\", { className: \"category-name__text\" }, title)));\r\n};\r\nexport default StickyHeader;\r\n//# sourceMappingURL=StickyHeader.js.map","import * as React from \"react\";\r\nimport { useBarcode } from '@createnextapp/react-barcode';\r\nexport var Barcode = function (props) {\r\n var value = props.value;\r\n var inputRef = useBarcode({\r\n value: value,\r\n options: {\r\n background: '#fff',\r\n format: \"CODE128B\",\r\n height: 20,\r\n width: 1,\r\n fontSize: 12,\r\n },\r\n }).inputRef;\r\n return React.createElement(\"svg\", { ref: inputRef });\r\n};\r\n//# sourceMappingURL=Barcode.js.map","import React from 'react';\r\nimport 'intersection-observer';\r\nimport { Barcode } from './layout/Barcode';\r\nimport { LazyLoadImage } from 'react-lazy-load-image-component';\r\n// import { appConfig } from '../../config';\r\n// import shirtImg from '../../images/silhouette/shirt.jpg';\r\n// Icons.\r\nimport { FaComment, FaSearch } from 'react-icons/fa';\r\n// const baseUrl = process.env.NODE_ENV === 'production' ? '/' : 'http://aws.molohub.com/';\r\n// const baseUrl = process.env.NODE_ENV === 'production' ? '/' : 'http://b2b.molo.com/media/';\r\nvar ProductListItem = function (props) {\r\n var product = props.product, quantityLabel = props.quantityLabel, showQuantity = props.showQuantity, showSoldQuantity = props.showSoldQuantity, showBarcode = props.showBarcode, baseUrl = props.baseUrl, handleShowStyleOrders = props.handleShowStyleOrders;\r\n var seasonCode = product.seasonCode, masterId = product.masterId, colorCode = product.colorCode;\r\n var imageUrl = baseUrl + 'productimage/' + seasonCode + '/' + masterId + '/' + colorCode + '/small?cache=10052021';\r\n quantityLabel = quantityLabel || 'Quantity';\r\n var getQuantity = function () {\r\n var master = product;\r\n var totalDisp = master.totalDisp || 0;\r\n if (props.quantityOveride) {\r\n return props.quantityOveride;\r\n }\r\n return totalDisp !== 9999 ? (totalDisp <= 0 ? 'Sold Out' : totalDisp) : (React.createElement(\"span\", { className: \"infiniteAvailability\" }));\r\n };\r\n return (React.createElement(\"div\", { className: \"pl-item\" + (props.inBasket && product.discontinued ? \" in-basketdiscontinued\" : (props.inBasket ? \" in-basket\" : \"\") + (product.discontinued ? \" discontinued\" : \"\")) },\r\n (product.b2BMasterComment || product.b2BColorComment || product.styleNote || product.colorNote) && React.createElement(\"span\", { className: \"pl-item__comment-icon\" },\r\n React.createElement(FaComment, null)),\r\n React.createElement(LazyLoadImage, { alt: product.description, placeholder: React.createElement(\"div\", { className: \"pl-item__image fade-in-up\" }), className: \"pl-item__image fade-in-up\", src: imageUrl, visibleByDefault: false, placeholderSrc: '' }),\r\n React.createElement(\"p\", { className: \"pl-item__text\" },\r\n React.createElement(\"span\", { className: \"--highlighted\" }, product.description),\r\n \" \",\r\n product.colorName),\r\n React.createElement(\"p\", { className: \"pl-item__text\" },\r\n product.masterId,\r\n \" \",\r\n product.colorCode),\r\n props.getPrice && React.createElement(\"p\", { className: \"pl-item__text --italic\" }, props.getPrice(product)),\r\n showBarcode && React.createElement(Barcode, { value: product.masterId }),\r\n showQuantity && product.colorBlocked !== 1 &&\r\n React.createElement(\"p\", { className: \"pl-item__text\" },\r\n React.createElement(\"strong\", null,\r\n quantityLabel,\r\n \": \",\r\n getQuantity())),\r\n showSoldQuantity &&\r\n React.createElement(\"p\", { className: \"pl-item__text\" },\r\n React.createElement(\"strong\", { style: { color: \"green\" }, onClick: function (e) { return props.handleShowStyleOrders && props.handleShowStyleOrders(e, product); } },\r\n React.createElement(FaSearch, null),\r\n \" \",\r\n product.totalcolorsold),\r\n \"/\",\r\n product.qtysbbaskets + product.qtyb2bbaskets,\r\n \" \",\r\n product.totalmastersold),\r\n showQuantity && product.colorBlocked === 1 &&\r\n React.createElement(\"p\", { className: \"pl-item__text\" },\r\n React.createElement(\"strong\", null, \"Blocked\"))));\r\n};\r\nexport default ProductListItem;\r\n//# sourceMappingURL=ProductListItem.js.map","var StyleBean = /** @class */ (function () {\r\n function StyleBean() {\r\n this.masterId = '';\r\n this.colorCode = '';\r\n this.description = '';\r\n this.colorName = '';\r\n this.seasonCode = '';\r\n this.colorBlocked = 0;\r\n this.currencyCode = 'EUR';\r\n this.gots = '';\r\n this.oekotex = '';\r\n this.organic = false;\r\n this.ecovero = false;\r\n this.whp = 0;\r\n this.msrp = 0;\r\n this.totalDisp = 0;\r\n this.collectionName = '';\r\n this.navCollection = '';\r\n this.orderType = '';\r\n this.recycled = false;\r\n this.b2BColorComment = '';\r\n this.b2BMasterComment = '';\r\n this.priceType = 'NoDiff';\r\n this.colorNote = '';\r\n this.customerPrice = 0;\r\n this.ocsno = '';\r\n this.grsno = '';\r\n this.ocsblended = '';\r\n this.totalcolorsold = 0;\r\n this.totalmastersold = 0;\r\n this.qtysbbaskets = 0;\r\n this.qtyb2bbaskets = 0;\r\n }\r\n StyleBean.prototype.getWHPWithDiscount = function (discount) {\r\n discount = discount || 0;\r\n return this.whp - (this.whp * (discount / 100));\r\n };\r\n StyleBean.build = function (data, type) {\r\n var bean = new StyleBean();\r\n switch (type) {\r\n case 'moloItem':\r\n var moloItem = data;\r\n bean.masterId = moloItem.masterId;\r\n bean.colorCode = moloItem.colorCode;\r\n bean.description = moloItem.description;\r\n bean.colorName = moloItem.colorName;\r\n bean.seasonCode = moloItem.seasonCode;\r\n bean.colorBlocked = moloItem.colorBlocked;\r\n bean.gots = moloItem.gots || '';\r\n bean.oekotex = moloItem.oekoTex || '';\r\n bean.whp = moloItem.whp;\r\n bean.msrp = moloItem.msrp;\r\n bean.priceType = moloItem.priceType;\r\n bean.customerPrice = moloItem.customerPrice;\r\n bean.ocsblended = moloItem.ocsblended;\r\n bean.discontinued = moloItem.discontinued;\r\n break;\r\n case 'style':\r\n // const randomNumber = Math.floor(Math.random() * 11); \r\n var style = data;\r\n if (!style) {\r\n return bean;\r\n }\r\n bean.totalcolorsold = style.totalcolorsold;\r\n bean.totalmastersold = style.totalmastersold;\r\n bean.qtysbbaskets = style.qtysbbaskets;\r\n bean.qtyb2bbaskets = style.qtyb2bbaskets;\r\n bean.masterId = style.masterId;\r\n bean.colorCode = style.colorCode;\r\n bean.description = style.description;\r\n bean.colorName = style.colorName;\r\n bean.seasonCode = style.seasonCode;\r\n bean.colorBlocked = style.colorBlocked;\r\n bean.currencyCode = style.currencyCode;\r\n bean.deliveryWindow = style.deliveryWindow;\r\n bean.fabricComposition = style.fabricComposition;\r\n bean.styleNote = style.styleNote;\r\n bean.gots = style.gots || '';\r\n bean.priceType = style.priceType;\r\n bean.organic = style.organic;\r\n bean.ecovero = style.ecovero;\r\n bean.oekotex = style.oekotex || '';\r\n bean.styleComment = style.styleComment || '';\r\n bean.colorComment = style.colorComment || '';\r\n bean.whp = style.whp;\r\n bean.msrp = style.msrp;\r\n bean.totalDisp = style.totalDisp;\r\n bean.collectionName = style.collectionName;\r\n bean.navCollection = style.navCollection;\r\n bean.orderType = style.orderType;\r\n bean.recycled = style.recycled;\r\n bean.b2BColorComment = style.b2BColorComment;\r\n bean.b2BMasterComment = style.b2BMasterComment;\r\n bean.colorNote = style.colorNote;\r\n bean.ocsno = style.ocsno || '';\r\n bean.grsno = style.grsno || '';\r\n bean.discontinued = style.discontinued;\r\n break;\r\n case 'orderLine':\r\n var orderLine = data;\r\n bean.masterId = orderLine.masterId;\r\n bean.colorCode = orderLine.colorCode;\r\n bean.description = orderLine.description;\r\n bean.colorName = orderLine.colorName;\r\n bean.seasonCode = orderLine.seasonCode;\r\n bean.colorBlocked = orderLine.colorBlocked ? 1 : 0;\r\n bean.whp = orderLine.unitPrice;\r\n bean.gots = orderLine.gots;\r\n bean.recycled = orderLine.recycled;\r\n bean.organic = orderLine.organic;\r\n bean.ecovero = orderLine.ecovero;\r\n bean.oekotex = orderLine.oekotex;\r\n bean.ocsno = orderLine.ocsno || '';\r\n bean.grsno = orderLine.grsno || '';\r\n break;\r\n default:\r\n // code block\r\n }\r\n return bean;\r\n };\r\n return StyleBean;\r\n}());\r\nexport { StyleBean };\r\n//# sourceMappingURL=Beans.js.map","import React from 'react';\r\nimport { trackWindowScroll } from 'react-lazy-load-image-component';\r\nimport StickyHeader from './StickyHeader';\r\nimport ProductListItem from './ProductListItem';\r\nimport { StyleBean } from './models/Beans';\r\nimport ClipLoader from 'react-spinners/ClipLoader';\r\nimport InfiniteScroll from 'react-infinite-scroller';\r\nvar InfinityList = function (props) {\r\n var elements = props.elements, onSticky = props.onSticky, onUnSticky = props.onUnSticky, handleOnProductClick = props.handleOnProductClick, lineDiscount = props.lineDiscount, isInBasket = props.isInBasket, lazyLoadMoloMaster = props.lazyLoadMoloMaster, loadItems = props.loadItems, hasMore = props.hasMore, scrollPosition = props.scrollPosition, showQuantity = props.showQuantity, showBarcode = props.showBarcode, showSoldQuantity = props.showSoldQuantity, baseUrl = props.baseUrl, handleShowStyleOrders = props.handleShowStyleOrders;\r\n var loader = React.createElement(\"div\", { style: { display: 'flex', justifyContent: 'center' }, key: 0 },\r\n React.createElement(ClipLoader, { size: 30 }));\r\n var items = [];\r\n elements.map(function (element, i) {\r\n var rendered = React.createElement(\"div\", null);\r\n if (element.type === 'iheader' && element.header) {\r\n rendered = React.createElement(StickyHeader, { key: element.header.description, title: element.header.description, onSticky: onSticky, onUnSticky: onUnSticky });\r\n }\r\n if (element.type === 'style' && element.style) {\r\n var style_1 = element.style;\r\n if (style_1) {\r\n rendered = React.createElement(\"div\", { className: \"pl-item__wrapper ripple\", onClick: function () { return handleOnProductClick(style_1); }, key: style_1.masterColor + style_1.colorCode + style_1.description },\r\n React.createElement(ProductListItem, { product: StyleBean.build(style_1, 'style'), discount: lineDiscount, inBasket: isInBasket(style_1), lazyLoadMoloMaster: lazyLoadMoloMaster, quantityLabel: 'Available', scrollPosition: scrollPosition, getPrice: props.getPrice, showQuantity: showQuantity, showSoldQuantity: showSoldQuantity, showBarcode: showBarcode, baseUrl: baseUrl, handleShowStyleOrders: handleShowStyleOrders }));\r\n }\r\n }\r\n return items.push(rendered);\r\n });\r\n return (React.createElement(\"div\", { className: \"product-list__list\", id: \"sticky-container\" },\r\n React.createElement(InfiniteScroll, { pageStart: 0, threshold: 800, loadMore: loadItems, hasMore: hasMore, loader: loader, useWindow: false },\r\n React.createElement(\"div\", { className: \"pl\" }, items))));\r\n};\r\nexport default trackWindowScroll(InfinityList);\r\n//# sourceMappingURL=InfinityList.js.map","import { __assign, __awaiter, __extends, __generator, __read, __spreadArray, __values } from \"tslib\";\r\nimport React, { Component } from 'react';\r\n// Utils.\r\nimport { orderBy, sortBy } from 'lodash';\r\nimport { productListCategorySort } from './constants/productSort';\r\nimport { FilterIcon } from './images/svg/FilterIcon';\r\n// Components.\r\nimport InfinityList from './InfinityList';\r\nimport { StyleBean } from './models/Beans';\r\nimport ProductListItem from './ProductListItem';\r\nimport StickyHeader from './StickyHeader';\r\nimport { uniq } from 'lodash';\r\n// import { groupBy } from '../src/utils/UtilHelper';\r\nvar groupBy = function (key) { return function (array) {\r\n return array.reduce(function (objectsByKeyValue, obj) {\r\n var value = obj[key];\r\n objectsByKeyValue[value] = (objectsByKeyValue[value] || []).concat(obj);\r\n return objectsByKeyValue;\r\n }, {});\r\n}; };\r\nvar ProductList = /** @class */ (function (_super) {\r\n __extends(ProductList, _super);\r\n function ProductList() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.state = {\r\n order: null,\r\n productOverlayComponent: null,\r\n showModal: false,\r\n filteredStyles: [],\r\n productSortedByCategory: new Map(),\r\n groupedBySeason: new Map,\r\n showFilter: false,\r\n selectedDeliveryWindow: undefined,\r\n selectedSustainability: [],\r\n stickies: [],\r\n listIndex: 0,\r\n products: [],\r\n infiniteLoaderCurrentIndex: 0,\r\n chunked: [[]],\r\n currentCategory: '',\r\n elements: [],\r\n hasMore: true,\r\n firstInitialized: false,\r\n };\r\n _this.handleOnChangeProduct = function (item) { return __awaiter(_this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n this.props.handleOnChangeProduct && this.props.handleOnChangeProduct(item);\r\n return [2 /*return*/];\r\n });\r\n }); };\r\n _this.handleOnProductClick = function (product) {\r\n if (_this.props.handleOnProductClick) {\r\n _this.props.handleOnProductClick(product);\r\n }\r\n };\r\n _this.hide = function () { };\r\n _this.applyBasketChanges = function (changes) { };\r\n _this.applyChanges = function () { };\r\n _this.goBack = function () { };\r\n _this.isInBasket = function (product) {\r\n if (!_this.props.isInBasket)\r\n return false;\r\n return _this.props.isInBasket(product);\r\n };\r\n _this.onSticky = function (categoryName) {\r\n var stickies = _this.state.stickies;\r\n stickies.push(categoryName);\r\n _this.setState({ stickies: stickies });\r\n };\r\n _this.onUnSticky = function (categoryName) {\r\n var stickies = _this.state.stickies;\r\n var index = stickies.indexOf(categoryName);\r\n if (index > -1) {\r\n stickies.splice(index, 1);\r\n }\r\n _this.setState({ stickies: stickies });\r\n };\r\n _this.updateItems = function () {\r\n var iterator1 = _this.state.productSortedByCategory.keys();\r\n _this.setState({\r\n hasMore: true,\r\n elements: [],\r\n currentCategory: iterator1.next().value,\r\n // currentCategory: Object.keys(this.state.productSortedByCategory).sort().reverse()[0],\r\n infiniteLoaderCurrentIndex: 0\r\n }, function () {\r\n _this.loadItems();\r\n });\r\n };\r\n _this.loadItems = function () {\r\n if (_this.state.currentCategory !== '') {\r\n var elements = [];\r\n // let productSortedByCategory = this.getProductCategories(this.state.filteredStyles);\r\n var currentCategory = _this.state.currentCategory;\r\n var infiniteLoaderCurrentIndex = _this.state.infiniteLoaderCurrentIndex;\r\n var counter = 0;\r\n var hasMore = true;\r\n while (counter < 100) {\r\n if (!_this.state.productSortedByCategory.has(currentCategory)) {\r\n counter = 100;\r\n hasMore = false;\r\n break;\r\n }\r\n var styles = _this.state.productSortedByCategory.get(currentCategory);\r\n var nextElement = styles && styles[infiniteLoaderCurrentIndex] ? styles[infiniteLoaderCurrentIndex] : undefined;\r\n if (nextElement) {\r\n if (infiniteLoaderCurrentIndex === 0) {\r\n var header = { description: currentCategory };\r\n elements.push({\r\n type: 'iheader',\r\n header: header,\r\n });\r\n }\r\n var product = nextElement;\r\n elements.push({\r\n type: \"style\",\r\n style: product\r\n });\r\n counter++;\r\n infiniteLoaderCurrentIndex++;\r\n }\r\n else {\r\n infiniteLoaderCurrentIndex = 0;\r\n var keys = __spreadArray([], __read(_this.state.productSortedByCategory.keys()), false);\r\n currentCategory = keys[(keys.indexOf(currentCategory) + 1)];\r\n }\r\n }\r\n _this.setState({\r\n hasMore: hasMore,\r\n elements: __spreadArray(__spreadArray([], __read(_this.state.elements), false), __read(elements), false),\r\n currentCategory: currentCategory,\r\n infiniteLoaderCurrentIndex: infiniteLoaderCurrentIndex\r\n });\r\n }\r\n };\r\n return _this;\r\n }\r\n ProductList.prototype.componentDidUpdate = function (prevProps) {\r\n var e_1, _a, e_2, _b, e_3, _c;\r\n var _this = this;\r\n if (this.props.products) {\r\n var products = __spreadArray([], __read(this.props.products), false);\r\n if ((this.props.products && this.props.products.length !== prevProps.products.length\r\n ||\r\n (!this.state.firstInitialized && this.props.products.length))) {\r\n var productSortedByCategory = this.getProductCategories(products);\r\n var groupedBySeason = new Map();\r\n try {\r\n for (var productSortedByCategory_1 = __values(productSortedByCategory), productSortedByCategory_1_1 = productSortedByCategory_1.next(); !productSortedByCategory_1_1.done; productSortedByCategory_1_1 = productSortedByCategory_1.next()) {\r\n var _d = __read(productSortedByCategory_1_1.value, 2), key = _d[0], value = _d[1];\r\n var groupBySeasonCode = groupBy(['seasonCode']);\r\n var gbs = groupBySeasonCode(value);\r\n var sortKeys = [];\r\n var years = uniq(Object.keys(gbs).map(function (seasonCode) { return seasonCode.substring(1); }));\r\n try {\r\n for (var _e = (e_2 = void 0, __values(years.sort().reverse())), _f = _e.next(); !_f.done; _f = _e.next()) {\r\n var year = _f.value;\r\n if (Object.keys(gbs).indexOf('W' + year) !== -1) {\r\n sortKeys.push('W' + year);\r\n }\r\n if (Object.keys(gbs).indexOf('S' + year) !== -1) {\r\n sortKeys.push('S' + year);\r\n }\r\n if (Object.keys(gbs).indexOf('N' + year) !== -1) {\r\n sortKeys.push('N' + year);\r\n }\r\n }\r\n }\r\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\r\n finally {\r\n try {\r\n if (_f && !_f.done && (_b = _e.return)) _b.call(_e);\r\n }\r\n finally { if (e_2) throw e_2.error; }\r\n }\r\n var mappedInSeasonOrder = new Map();\r\n try {\r\n for (var sortKeys_1 = (e_3 = void 0, __values(sortKeys)), sortKeys_1_1 = sortKeys_1.next(); !sortKeys_1_1.done; sortKeys_1_1 = sortKeys_1.next()) {\r\n var delta = sortKeys_1_1.value;\r\n mappedInSeasonOrder.set(delta, orderBy(gbs[delta], ['masterId'], ['asc']));\r\n }\r\n }\r\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\r\n finally {\r\n try {\r\n if (sortKeys_1_1 && !sortKeys_1_1.done && (_c = sortKeys_1.return)) _c.call(sortKeys_1);\r\n }\r\n finally { if (e_3) throw e_3.error; }\r\n }\r\n groupedBySeason.set(key, mappedInSeasonOrder);\r\n }\r\n }\r\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n finally {\r\n try {\r\n if (productSortedByCategory_1_1 && !productSortedByCategory_1_1.done && (_a = productSortedByCategory_1.return)) _a.call(productSortedByCategory_1);\r\n }\r\n finally { if (e_1) throw e_1.error; }\r\n }\r\n this.setState({\r\n filteredStyles: __assign({}, products),\r\n productSortedByCategory: productSortedByCategory,\r\n groupedBySeason: groupedBySeason,\r\n firstInitialized: true\r\n }, function () {\r\n _this.updateItems();\r\n });\r\n }\r\n }\r\n };\r\n ProductList.prototype.getProductCategories = function (styles) {\r\n var e_4, _a, e_5, _b, e_6, _c;\r\n var categories = {};\r\n var collectionName = this.props.collectionName;\r\n if (!styles.length)\r\n return new Map();\r\n try {\r\n for (var styles_1 = __values(styles), styles_1_1 = styles_1.next(); !styles_1_1.done; styles_1_1 = styles_1.next()) {\r\n var style = styles_1_1.value;\r\n if (!categories[style.productCategory] && style.productCategory.trim() !== '') {\r\n categories[style.productCategory] = [];\r\n }\r\n if (style.productCategory.trim() !== '') {\r\n categories[style.productCategory].push(style);\r\n }\r\n }\r\n }\r\n catch (e_4_1) { e_4 = { error: e_4_1 }; }\r\n finally {\r\n try {\r\n if (styles_1_1 && !styles_1_1.done && (_a = styles_1.return)) _a.call(styles_1);\r\n }\r\n finally { if (e_4) throw e_4.error; }\r\n }\r\n for (var i in categories) {\r\n categories[i] = orderBy(categories[i], ['masterId'], ['asc']);\r\n }\r\n var keysNotInSort = [];\r\n var keysInSort = [];\r\n var inCat = {};\r\n var productMap = new Map();\r\n // let notInCat: ICategory = {};\r\n var allowedCollections = ['ow', 'main', 'sport', 'swim'];\r\n if (allowedCollections.indexOf(collectionName.toLowerCase()) === -1) {\r\n collectionName = 'no-collection';\r\n }\r\n if (collectionName === 'no-collection') {\r\n // return categories\r\n for (var categoryName in categories) {\r\n productMap.set(categoryName, categories[categoryName]);\r\n }\r\n return productMap;\r\n }\r\n if (productListCategorySort[collectionName.toLowerCase()]) {\r\n keysNotInSort = Object.keys(categories)\r\n .filter(function (key) { return productListCategorySort[collectionName.toLowerCase()].indexOf(key) === -1 && key.toLowerCase() !== 'marketing'; });\r\n keysInSort = Object.keys(categories)\r\n .filter(function (key) { return productListCategorySort[collectionName.toLowerCase()].indexOf(key) !== -1 && key.toLowerCase() !== 'marketing'; });\r\n keysInSort = sortBy(keysInSort, function (item) {\r\n return productListCategorySort[collectionName.toLowerCase()].indexOf(item);\r\n });\r\n }\r\n try {\r\n for (var keysInSort_1 = __values(keysInSort), keysInSort_1_1 = keysInSort_1.next(); !keysInSort_1_1.done; keysInSort_1_1 = keysInSort_1.next()) {\r\n var categoryName = keysInSort_1_1.value;\r\n inCat[categoryName] = categories[categoryName];\r\n productMap.set(categoryName, categories[categoryName]);\r\n }\r\n }\r\n catch (e_5_1) { e_5 = { error: e_5_1 }; }\r\n finally {\r\n try {\r\n if (keysInSort_1_1 && !keysInSort_1_1.done && (_b = keysInSort_1.return)) _b.call(keysInSort_1);\r\n }\r\n finally { if (e_5) throw e_5.error; }\r\n }\r\n try {\r\n for (var keysNotInSort_1 = __values(keysNotInSort), keysNotInSort_1_1 = keysNotInSort_1.next(); !keysNotInSort_1_1.done; keysNotInSort_1_1 = keysNotInSort_1.next()) {\r\n var categoryName = keysNotInSort_1_1.value;\r\n productMap.set(categoryName, categories[categoryName]);\r\n }\r\n }\r\n catch (e_6_1) { e_6 = { error: e_6_1 }; }\r\n finally {\r\n try {\r\n if (keysNotInSort_1_1 && !keysNotInSort_1_1.done && (_c = keysNotInSort_1.return)) _c.call(keysNotInSort_1);\r\n }\r\n finally { if (e_6) throw e_6.error; }\r\n }\r\n if (categories['Marketing']) {\r\n productMap.set('Marketing', categories['Marketing']);\r\n }\r\n return productMap;\r\n };\r\n ProductList.prototype.renderCategory = function (styles, categoryName) {\r\n var _this = this;\r\n if (!styles.length) {\r\n return null;\r\n }\r\n return (React.createElement(React.Fragment, { key: categoryName },\r\n React.createElement(StickyHeader, { title: categoryName, onSticky: this.onSticky, onUnSticky: this.onUnSticky }),\r\n React.createElement(\"ul\", { className: \"pl\" }, styles && styles.map(function (product, index) {\r\n return React.createElement(\"li\", { key: index, onClick: function () { return _this.handleOnProductClick(product); }, className: \"pl-item__wrapper ripple\" },\r\n React.createElement(ProductListItem, { product: StyleBean.build(product, 'style'), discount: _this.props.lineDiscount, inBasket: _this.isInBasket(product), lazyLoadMoloMaster: _this.props.lazyLoadMoloMaster, quantityLabel: 'Available', getPrice: _this.props.getPrice, showQuantity: !!_this.props.showQuantity, showSoldQuantity: _this.props.showSoldQuantity, baseUrl: _this.props.baseUrl, handleShowStyleOrders: _this.props.handleOnShowStyleOrdersClick }));\r\n }))));\r\n };\r\n ProductList.prototype.renderCategoryBySeasonCodes = function (seasons, categoryName) {\r\n var _this = this;\r\n return (React.createElement(React.Fragment, { key: categoryName },\r\n React.createElement(StickyHeader, { title: categoryName, onSticky: this.onSticky, onUnSticky: this.onUnSticky }),\r\n React.createElement(\"ul\", { className: \"pl\" }, __spreadArray([], __read(seasons.keys()), false).map(function (key) {\r\n var styles = seasons.get(key);\r\n return styles && styles.map(function (product, index) {\r\n return React.createElement(\"li\", { key: index, onClick: function () { return _this.handleOnProductClick(product); }, className: \"pl-item__wrapper ripple\" },\r\n React.createElement(ProductListItem, { product: StyleBean.build(product, 'style'), discount: _this.props.lineDiscount, inBasket: _this.isInBasket(product), lazyLoadMoloMaster: _this.props.lazyLoadMoloMaster, quantityLabel: 'Available', getPrice: _this.props.getPrice, showQuantity: !!_this.props.showQuantity, showSoldQuantity: _this.props.showSoldQuantity, baseUrl: _this.props.baseUrl, handleShowStyleOrders: _this.props.handleOnShowStyleOrdersClick }));\r\n });\r\n }))));\r\n };\r\n ProductList.prototype.render = function () {\r\n var _this = this;\r\n if (this.props.simple) {\r\n return (React.createElement(\"div\", { className: \"product-list--simple\" },\r\n React.createElement(\"div\", { className: \"product-list__content\" },\r\n React.createElement(\"div\", { className: \"product-list__list\" },\r\n React.createElement(\"div\", { className: \"product-list__list\", id: \"sticky-container\" }, React.createElement(\"ul\", { className: \"pl\" }, this.props.products && this.props.products.map(function (product, index) {\r\n return React.createElement(\"li\", { key: index, onClick: function () { return _this.handleOnProductClick(product); }, className: \"pl-item__wrapper ripple\" },\r\n React.createElement(ProductListItem, { product: StyleBean.build(product, 'style'), discount: _this.props.lineDiscount, inBasket: _this.isInBasket(product), lazyLoadMoloMaster: _this.props.lazyLoadMoloMaster, quantityLabel: 'Available', showBarcode: _this.props.showBarcode, showSoldQuantity: _this.props.showSoldQuantity, baseUrl: _this.props.baseUrl, handleShowStyleOrders: _this.props.handleOnShowStyleOrdersClick }));\r\n })))))));\r\n }\r\n return (React.createElement(\"div\", { className: \"product-list\" + (!!this.props.showFilter ? \" filter-is-active\" : \"\") },\r\n React.createElement(\"div\", { className: \"product-list__header\" },\r\n React.createElement(\"span\", { className: \"product-list__header__text\" }, this.state.stickies[this.state.stickies.length - 1])),\r\n React.createElement(\"div\", { className: \"product-list__content\" },\r\n !this.props.ignoreFilter && this.props.filterComponent,\r\n !this.props.useInfiniteScroll && !this.props.simple &&\r\n React.createElement(\"div\", { className: \"product-list__list\", id: \"sticky-container\" },\r\n !productListCategorySort[this.props.collectionName.toLowerCase()] &&\r\n Object.keys(this.state.productSortedByCategory)\r\n .map(function (key, index) {\r\n if (!_this.state.productSortedByCategory[key] || key.toLowerCase() === 'marketing') {\r\n return null;\r\n }\r\n return (_this.renderCategory(_this.state.productSortedByCategory[key], key));\r\n }),\r\n __spreadArray([], __read(this.state.groupedBySeason.keys()), false).map(function (category) {\r\n var seasons = _this.state.groupedBySeason.get(category);\r\n if (seasons) {\r\n return _this.renderCategoryBySeasonCodes(seasons, category);\r\n }\r\n return null;\r\n }\r\n // jobsForDate.map(job => (\r\n // \r\n // ))\r\n ),\r\n this.state.productSortedByCategory['Marketing'] && this.renderCategory(this.state.productSortedByCategory['Marketing'], 'Marketing')),\r\n this.props.useInfiniteScroll &&\r\n React.createElement(InfinityList, { elements: this.state.elements, onSticky: this.onSticky, onUnSticky: this.onUnSticky, handleOnProductClick: this.handleOnProductClick, lineDiscount: this.props.lineDiscount, isInBasket: this.isInBasket, lazyLoadMoloMaster: this.props.lazyLoadMoloMaster, loadItems: this.loadItems, hasMore: this.state.hasMore, getPrice: this.props.getPrice, showQuantity: this.props.showQuantity, showSoldQuantity: this.props.showSoldQuantity, showBarcode: this.props.showBarcode, handleShowStyleOrders: this.props.handleOnShowStyleOrdersClick, baseUrl: this.props.baseUrl })),\r\n !this.props.ignoreFilter &&\r\n React.createElement(\"div\", { className: \"filter-dropdown__toggler__wrapper\" },\r\n React.createElement(\"div\", { className: \"filter-dropdown__toggler\" + (this.props.showFilter ? \" open\" : \"\"), onClick: function () { _this.props.onClickShowFilter && _this.props.onClickShowFilter(); } },\r\n React.createElement(\"span\", { className: \"filter-dropdown__toggler__title desktop-only\" }, !this.props.showFilter ? 'Show filter' : 'Hide filter'),\r\n React.createElement(FilterIcon, null)))));\r\n };\r\n return ProductList;\r\n}(Component));\r\nexport { ProductList };\r\n//# sourceMappingURL=ProductList.js.map","import { __read, __spreadArray, __values } from \"tslib\";\r\nimport { cloneDeep, uniq, sortBy } from 'lodash';\r\nimport { productListCategorySort } from '../constants/productSort';\r\nvar productGroupSortArray = [\r\n 'Boy',\r\n 'Girl',\r\n 'Baby Boy',\r\n 'Baby Girl',\r\n 'Outerwear',\r\n 'Unisex',\r\n 'Basic',\r\n 'Accessories',\r\n 'Swimwear',\r\n 'Marketing',\r\n];\r\nexport var FilterHelper = {\r\n isInitialFilterReady: isInitialFilterReady,\r\n filterIsEmpty: filterIsEmpty,\r\n resultByFilter: resultByFilter,\r\n hydrateSeasons: hydrateSeasons,\r\n hydrateProductGroups: hydrateProductGroups,\r\n hydrateDeliveryWindows: hydrateDeliveryWindows,\r\n hydrateProductCategories: hydrateProductCategories,\r\n hydrateSustainability: hydrateSustainability,\r\n hydrateCollections: hydrateCollections,\r\n changeActiveFilters: changeActiveFilters,\r\n hydrateProductCategoriesByCollectionSort: hydrateProductCategoriesByCollectionSort,\r\n};\r\nfunction hydrateSeasons(styles) {\r\n return uniq(styles.map(function (style) { return style.seasonCode; }));\r\n}\r\nfunction hydrateProductGroups(styles) {\r\n var productGroups = uniq(styles.map(function (style) { return style.productGroup; }));\r\n return sortBy(productGroups, function (item) {\r\n return productGroupSortArray.indexOf(item);\r\n });\r\n}\r\nfunction hydrateDeliveryWindows(styles) {\r\n return uniq(styles.map(function (style) { return style.deliveryWindow.originalWindow; }));\r\n}\r\nfunction hydrateProductCategories(styles) {\r\n return uniq(styles.map(function (style) { return style.productCategory; })).sort();\r\n}\r\nfunction hydrateProductCategoriesByCollectionSort(styles, collectionName) {\r\n var categories = uniq(styles.map(function (style) { return style.productCategory; }));\r\n if (!productListCategorySort[collectionName]) {\r\n return categories;\r\n }\r\n var sorted = [];\r\n var keysNotInSort = categories.filter(function (cat) { return productListCategorySort[collectionName].indexOf(cat) === -1 && cat.toLowerCase() !== 'marketing'; });\r\n var keysInSort = categories.filter(function (cat) { return productListCategorySort[collectionName].indexOf(cat) !== -1 && cat.toLowerCase() !== 'marketing'; });\r\n keysInSort = sortBy(keysInSort, function (item) {\r\n return productListCategorySort[collectionName].indexOf(item);\r\n });\r\n sorted = __spreadArray(__spreadArray([], __read(keysInSort), false), __read(keysNotInSort), false);\r\n if (categories.indexOf('Marketing') !== 1) {\r\n sorted.push('Marketing');\r\n }\r\n return sorted;\r\n}\r\nfunction hydrateCollections(styles) {\r\n return uniq(styles.map(function (style) { return style.collectionName; }));\r\n}\r\nfunction hydrateSustainability(styles) {\r\n var sustainabilityFilters = [];\r\n if (styles.filter(function (style) { return style.gots !== ''; }).length) {\r\n sustainabilityFilters.push('gots');\r\n }\r\n if (styles.filter(function (style) { return style.ocsno !== ''; }).length) {\r\n sustainabilityFilters.push('ocs_100');\r\n }\r\n if (styles.filter(function (style) { return style.grsno !== ''; }).length) {\r\n sustainabilityFilters.push('grs');\r\n }\r\n if (styles.filter(function (style) { return style.ocsblended !== ''; }).length) {\r\n sustainabilityFilters.push('ocs_blended');\r\n }\r\n if (styles.filter(function (style) { return style.oekotex !== ''; }).length) {\r\n sustainabilityFilters.push('oekoTex');\r\n }\r\n if (styles.filter(function (style) { return !!style.recycled; }).length) {\r\n sustainabilityFilters.push('recycled');\r\n }\r\n if (styles.filter(function (style) { return !!style.organic; }).length) {\r\n sustainabilityFilters.push('organic');\r\n }\r\n if (styles.filter(function (style) { return !!style.ecovero; }).length) {\r\n sustainabilityFilters.push('ecovero');\r\n }\r\n return sustainabilityFilters;\r\n}\r\nfunction isInitialFilterReady(filter) {\r\n return filter && filter.activeFilters && (filter.activeFilters.seasons.length ||\r\n filter.activeFilters.collections.length ||\r\n filter.activeFilters.productGroups.length ||\r\n filter.activeFilters.deliveryWindows.length ||\r\n filter.activeFilters.productCategories.length ||\r\n filter.activeFilters.minimumAvailable ||\r\n (filter.activeFilters.visiblePrices && filter.activeFilters.visiblePrices.length) ||\r\n (filter.activeFilters.sustainability && filter.activeFilters.sustainability.length));\r\n}\r\nfunction filterIsEmpty(filter) {\r\n return filter.activeFilters.collections.length === 0 &&\r\n filter.activeFilters.deliveryWindows.length === 0 &&\r\n filter.activeFilters.productGroups.length === 0 &&\r\n filter.activeFilters.productCategories.length === 0 &&\r\n filter.activeFilters.seasons.length === 0;\r\n}\r\nfunction resultByFilter(filter, styles) {\r\n var e_1, _a, e_2, _b, e_3, _c;\r\n var newStyles = cloneDeep(styles);\r\n // if everything is empty, the initial filter isn't ready yet\r\n if (!isInitialFilterReady(filter)) {\r\n return styles;\r\n }\r\n // seasons\r\n if (filter.activeFilters.seasons.length) {\r\n newStyles = newStyles.filter(function (style) { return filter.activeFilters.seasons.indexOf(style.seasonCode) !== -1; });\r\n }\r\n // collections \r\n if (filter.activeFilters.collections.length) {\r\n newStyles = newStyles.filter(function (style) { return filter.activeFilters.collections.indexOf(style.collectionName) !== -1; });\r\n }\r\n // deliveryWindows \r\n if (filter.activeFilters.deliveryWindows.length) {\r\n newStyles = newStyles.filter(function (style) { return style.deliveryWindow &&\r\n filter.activeFilters.deliveryWindows.indexOf(style.deliveryWindow.originalWindow) !== -1; });\r\n }\r\n // productGroups\r\n if (filter.activeFilters.productGroups.length) {\r\n var chunks = [];\r\n var _loop_1 = function (group) {\r\n var chunk = newStyles.filter(function (style) { return style.subCategories\r\n .map(function (name) { return name.toLowerCase(); })\r\n .indexOf(group.toLowerCase()) !== -1; });\r\n chunks = __spreadArray(__spreadArray([], __read(chunks), false), __read(chunk), false);\r\n };\r\n try {\r\n for (var _d = __values(filter.activeFilters.productGroups), _e = _d.next(); !_e.done; _e = _d.next()) {\r\n var group = _e.value;\r\n _loop_1(group);\r\n }\r\n }\r\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n finally {\r\n try {\r\n if (_e && !_e.done && (_a = _d.return)) _a.call(_d);\r\n }\r\n finally { if (e_1) throw e_1.error; }\r\n }\r\n var original = newStyles.filter(function (style) { return filter.activeFilters.productGroups.indexOf(style.productGroup) !== -1; });\r\n newStyles = uniq(__spreadArray(__spreadArray([], __read(original), false), __read(chunks), false));\r\n }\r\n // productCategories\r\n if (filter.activeFilters.productCategories.length) {\r\n newStyles = newStyles.filter(function (style) { return filter.activeFilters.productCategories.indexOf(style.productCategory) !== -1; });\r\n }\r\n // Sustainabilty.\r\n if (filter.activeFilters.sustainability && filter.activeFilters.sustainability.length) {\r\n var cloned = __spreadArray([], __read(newStyles), false);\r\n var sustainabilityItems = {\r\n gots: [],\r\n ocs_100: [],\r\n grs: [],\r\n ocs_blended: [],\r\n oekoTex: [],\r\n recycled: [],\r\n organic: [],\r\n ecovero: []\r\n };\r\n try {\r\n for (var _f = __values(filter.activeFilters.sustainability), _g = _f.next(); !_g.done; _g = _f.next()) {\r\n var item = _g.value;\r\n switch (item) {\r\n case 'gots':\r\n var gots = cloned.filter(function (style) { return style.gots !== ''; });\r\n sustainabilityItems.gots = gots;\r\n break;\r\n case 'oekoTex':\r\n var oekoTex = cloned.filter(function (style) { return style.oekotex !== ''; });\r\n sustainabilityItems.oekoTex = oekoTex;\r\n break;\r\n case 'recycled':\r\n var recycled = cloned.filter(function (style) { return !!style.recycled; });\r\n sustainabilityItems.recycled = recycled;\r\n break;\r\n case 'ocs_100':\r\n console.log('hydrate ocs_100');\r\n var ocs_100 = cloned.filter(function (style) { return style.ocsno !== ''; });\r\n sustainabilityItems.ocs_100 = ocs_100;\r\n break;\r\n case 'grs':\r\n console.log('hydrate grs');\r\n var grs = cloned.filter(function (style) { return style.grsno !== ''; });\r\n sustainabilityItems.grs = grs;\r\n break;\r\n case 'ocs_blended':\r\n var ocs_blended = cloned.filter(function (style) { return style.ocsblended !== ''; });\r\n sustainabilityItems.ocs_blended = ocs_blended;\r\n break;\r\n case 'organic':\r\n var organic = cloned.filter(function (style) { return !!style.organic; });\r\n sustainabilityItems.organic = organic;\r\n break;\r\n case 'ecovero':\r\n var ecovero = cloned.filter(function (style) { return !!style.ecovero; });\r\n sustainabilityItems.ecovero = ecovero;\r\n break;\r\n }\r\n newStyles = __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], __read(sustainabilityItems.gots), false), __read(sustainabilityItems.oekoTex), false), __read(sustainabilityItems.recycled), false), __read(sustainabilityItems.organic), false), __read(sustainabilityItems.ecovero), false), __read(sustainabilityItems.ocs_100), false), __read(sustainabilityItems.ocs_blended), false), __read(sustainabilityItems.grs), false);\r\n }\r\n }\r\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\r\n finally {\r\n try {\r\n if (_g && !_g.done && (_b = _f.return)) _b.call(_f);\r\n }\r\n finally { if (e_2) throw e_2.error; }\r\n }\r\n console.dir(sustainabilityItems);\r\n }\r\n if (filter.activeFilters.visiblePrices && filter.activeFilters.visiblePrices.length) {\r\n var cloned = __spreadArray([], __read(newStyles), false);\r\n var priceItems = {\r\n 'Show missing WS': [],\r\n 'Show missing RRP': [],\r\n };\r\n try {\r\n for (var _h = __values(filter.activeFilters.visiblePrices), _j = _h.next(); !_j.done; _j = _h.next()) {\r\n var item = _j.value;\r\n switch (item) {\r\n case 'Show missing WS':\r\n // whp\r\n var missingWhp = cloned.filter(function (style) { return style.whp === 0; });\r\n priceItems['Show missing WS'] = missingWhp;\r\n break;\r\n case 'Show missing RRP':\r\n // whp\r\n var missingRRP = cloned.filter(function (style) { return style.whp === 0; });\r\n priceItems['Show missing RRP'] = missingRRP;\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\r\n finally {\r\n try {\r\n if (_j && !_j.done && (_c = _h.return)) _c.call(_h);\r\n }\r\n finally { if (e_3) throw e_3.error; }\r\n }\r\n newStyles = __spreadArray(__spreadArray([], __read(priceItems['Show missing WS']), false), __read(priceItems['Show missing RRP']), false);\r\n }\r\n newStyles = newStyles.filter(function (style) { return style.totalDisp >= filter.activeFilters.minimumAvailable; });\r\n return newStyles;\r\n}\r\nfunction changeActiveFilters(filter, filterType, filterValue, isActive) {\r\n var newFilter = cloneDeep(filter);\r\n if (!newFilter)\r\n return newFilter;\r\n switch (filterType) {\r\n case 'deliveryWindows':\r\n if (isActive) {\r\n newFilter.activeFilters.deliveryWindows.push(filterValue);\r\n }\r\n else {\r\n var filterTypeIndex = newFilter.activeFilters.deliveryWindows.indexOf(filterValue);\r\n newFilter.activeFilters.deliveryWindows.splice(filterTypeIndex, 1);\r\n }\r\n break;\r\n case 'productGroups':\r\n if (isActive) {\r\n newFilter.activeFilters.productGroups.push(filterValue);\r\n }\r\n else {\r\n var filterTypeIndex = newFilter.activeFilters.productGroups.indexOf(filterValue);\r\n newFilter.activeFilters.productGroups.splice(filterTypeIndex, 1);\r\n }\r\n break;\r\n case 'productCategories':\r\n if (isActive) {\r\n newFilter.activeFilters.productCategories.push(filterValue);\r\n }\r\n else {\r\n var filterTypeIndex = newFilter.activeFilters.productCategories.indexOf(filterValue);\r\n newFilter.activeFilters.productCategories.splice(filterTypeIndex, 1);\r\n }\r\n break;\r\n case 'topCollections':\r\n if (isActive) {\r\n newFilter.activeFilters.collections.push(filterValue);\r\n }\r\n else {\r\n var filterTypeIndex = newFilter.activeFilters.collections.indexOf(filterValue);\r\n newFilter.activeFilters.collections.splice(filterTypeIndex, 1);\r\n }\r\n break;\r\n case 'sustainability':\r\n if (isActive && newFilter.activeFilters.sustainability) {\r\n newFilter.activeFilters.sustainability.push(filterValue);\r\n }\r\n else {\r\n if (newFilter.activeFilters.sustainability) {\r\n var filterTypeIndex = newFilter.activeFilters.sustainability.indexOf(filterValue);\r\n newFilter.activeFilters.sustainability.splice(filterTypeIndex, 1);\r\n }\r\n }\r\n break;\r\n case 'visiblePrices':\r\n if (isActive && newFilter.activeFilters.visiblePrices) {\r\n newFilter.activeFilters.visiblePrices.push(filterValue);\r\n }\r\n else {\r\n if (newFilter.activeFilters.visiblePrices) {\r\n var filterTypeIndex = newFilter.activeFilters.visiblePrices.indexOf(filterValue);\r\n newFilter.activeFilters.visiblePrices.splice(filterTypeIndex, 1);\r\n }\r\n }\r\n break;\r\n }\r\n return newFilter;\r\n}\r\n//# sourceMappingURL=FilterHelper.js.map","import { __read } from \"tslib\";\r\nimport React, { useState } from 'react';\r\nexport var AmountFilter = function (props) {\r\n var apply = props.apply;\r\n var _a = __read(useState(0), 2), value = _a[0], setValue = _a[1];\r\n var changeValue = function (event) {\r\n var newValue = event.target.value;\r\n setValue(newValue);\r\n };\r\n var onClickApply = function () {\r\n apply(value);\r\n };\r\n return React.createElement(React.Fragment, null,\r\n React.createElement(\"div\", { className: \"minimum-filter\" },\r\n React.createElement(\"input\", { type: 'number', name: 'minimumAvailable', title: 'minimumAvailable', value: value, onChange: changeValue }),\r\n React.createElement(\"button\", { onClick: onClickApply }, \"Apply\")));\r\n};\r\n//# sourceMappingURL=AmountFilter.js.map","import { __read } from \"tslib\";\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { FaTimes } from 'react-icons/fa';\r\nexport var Modal = function (props) {\r\n var isShowing = props.isShowing, hide = props.hide, children = props.children, footer = props.footer, size = props.size, hideFooter = props.hideFooter, hideHeader = props.hideHeader, bodyClasses = props.bodyClasses, header = props.header, hideClose = props.hideClose;\r\n var modalSize = size || 'lg';\r\n var _a = __read(React.useState(false), 2), hideIsTriggered = _a[0], setHideIsTriggered = _a[1];\r\n var node = React.useRef(null);\r\n var onKeyPressed = function (e) {\r\n if (e.key === 'Escape' && props.hide && !hideIsTriggered) {\r\n e.preventDefault();\r\n setHideIsTriggered(true);\r\n document.addEventListener('keydown', onKeyPressed);\r\n props.hide();\r\n }\r\n };\r\n var handleClickOutside = function (e) {\r\n if (node && node.current && node.current.contains(e.target)) {\r\n return;\r\n }\r\n if (node && node.current && e.target.classList.contains('ignore-clickoutside')) {\r\n return;\r\n }\r\n // outside click \r\n props.hide && props.hide();\r\n };\r\n React.useEffect(function () {\r\n // add when mounted\r\n document.addEventListener('keydown', onKeyPressed);\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n // return function to be called when unmounted\r\n return function () {\r\n document.removeEventListener('keydown', onKeyPressed);\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n };\r\n });\r\n if (isShowing) {\r\n return ReactDOM.createPortal(React.createElement(React.Fragment, null,\r\n React.createElement(\"div\", { className: \"modal-wrapper \" + modalSize + (isShowing ? ' showModal' : ' hideModal') },\r\n React.createElement(\"div\", { className: \"modal \" + (isShowing ? \"showModal\" : \"hideModal\"), ref: node },\r\n !hideHeader &&\r\n React.createElement(\"div\", { className: \"modal-header\" },\r\n header,\r\n !hideClose &&\r\n React.createElement(\"div\", { className: \"modal-header__close\", onClick: hide },\r\n React.createElement(FaTimes, null))),\r\n hideHeader && !hideClose &&\r\n React.createElement(\"div\", { className: \"modal-header__close\", onClick: hide },\r\n React.createElement(FaTimes, null)),\r\n React.createElement(\"div\", { className: \"modal-body\" + (bodyClasses ? ' ' + bodyClasses : '') }, children && children),\r\n !hideFooter &&\r\n React.createElement(\"div\", { className: \"modal-footer\" }, footer && footer)))), document.getElementById('root'));\r\n }\r\n return null;\r\n};\r\n//# sourceMappingURL=Modal.js.map","import { __extends, __values } from \"tslib\";\r\nimport React, { Component } from 'react';\r\nimport { cloneDeep, uniq } from 'lodash';\r\nimport { FilterHelper } from './utils/FilterHelper';\r\nimport { CheckboxInput } from './form/CheckboxInput';\r\nimport { AccordionPanel } from './AccordionPanel';\r\nimport { AmountFilter } from './AmountFilter';\r\nvar FilterComponent = /** @class */ (function (_super) {\r\n __extends(FilterComponent, _super);\r\n function FilterComponent() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.state = { initialized: false, searchTerm: '', styles: [] };\r\n return _this;\r\n }\r\n FilterComponent.prototype.componentDidMount = function () {\r\n if (!this.state.initialized && this.props.filter) {\r\n this.initFilters(this.props.filter, this.props.styles);\r\n }\r\n };\r\n FilterComponent.prototype.componentDidUpdate = function (prevProps, prevState) {\r\n if ((!this.state.initialized || this.props.styles.length !== prevProps.styles.length) && this.props.filter) {\r\n this.initFilters(this.props.filter, this.props.styles);\r\n }\r\n };\r\n FilterComponent.prototype.componentWillUnmount = function () {\r\n this.setState({ initialized: false });\r\n };\r\n FilterComponent.getDerivedStateFromProps = function (props, state) {\r\n if (props.styles !== state.styles) {\r\n return {\r\n styles: props.styles,\r\n };\r\n }\r\n return null;\r\n };\r\n FilterComponent.prototype.initFilters = function (filter, styles) {\r\n var e_1, _a;\r\n var newFilter = cloneDeep(filter);\r\n if (this.props.productGroupConfig) {\r\n for (var groupName in this.props.productGroupConfig) {\r\n var _loop_1 = function (rule) {\r\n var includeStyles = styles.filter(function (style) { return style.productGroup.toLowerCase() === rule.include.group.toLowerCase(); });\r\n var _loop_2 = function (delta) {\r\n var ORpropety = rule.include.ORproperties[delta];\r\n // @ts-ignore\r\n var local = includeStyles.filter(function (style) { return style[Object.keys(ORpropety)[0]] === true; });\r\n var _loop_3 = function (i) {\r\n var index = styles.findIndex(function (style) { return style.masterId === local[i].masterId && style.colorCode === local[i].colorCode; });\r\n if (styles[index]) {\r\n var cloned = styles[index].subCategories;\r\n cloned.push(groupName);\r\n styles[index].subCategories = uniq(cloned);\r\n }\r\n };\r\n for (var i in local) {\r\n _loop_3(i);\r\n }\r\n };\r\n // console.log(rule.include.ORproperties, 'rule.include.ORproperties')\r\n for (var delta in rule.include.ORproperties) {\r\n _loop_2(delta);\r\n }\r\n };\r\n try {\r\n for (var _b = (e_1 = void 0, __values(this.props.productGroupConfig[groupName])), _c = _b.next(); !_c.done; _c = _b.next()) {\r\n var rule = _c.value;\r\n _loop_1(rule);\r\n }\r\n }\r\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n finally {\r\n try {\r\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\r\n }\r\n finally { if (e_1) throw e_1.error; }\r\n }\r\n }\r\n }\r\n newFilter.collections = FilterHelper.hydrateCollections(styles);\r\n newFilter.seasons = FilterHelper.hydrateSeasons(styles);\r\n newFilter.productGroups = FilterHelper.hydrateProductGroups(styles);\r\n newFilter.deliveryWindows = FilterHelper.hydrateDeliveryWindows(styles);\r\n if (!this.props.collectionName) {\r\n newFilter.productCategories = FilterHelper.hydrateProductCategories(styles);\r\n }\r\n else {\r\n newFilter.productCategories = FilterHelper.hydrateProductCategoriesByCollectionSort(styles, this.props.collectionName);\r\n }\r\n newFilter.sustainability = FilterHelper.hydrateSustainability(styles);\r\n this.props.applyFilter(newFilter);\r\n this.setState({\r\n initialized: true\r\n });\r\n };\r\n FilterComponent.prototype.onFilterSelectionSeason = function (event) {\r\n var selectedSeason = event.currentTarget.value;\r\n var selectedSeasonIsActive = event.currentTarget.checked;\r\n this.changeActiveFilters('seasons', selectedSeason, selectedSeasonIsActive);\r\n };\r\n FilterComponent.prototype.onFilterSelectionProductGroup = function (event) {\r\n var selectedProductGroup = event.currentTarget.value;\r\n var selectedProductGroupIsActive = event.currentTarget.checked;\r\n this.changeActiveFilters('productGroups', selectedProductGroup, selectedProductGroupIsActive);\r\n };\r\n FilterComponent.prototype.onFilterSelectionVisiblePrices = function (event) {\r\n var visiblePrice = event.currentTarget.value;\r\n var selectedPriceVisible = event.currentTarget.checked;\r\n this.changeActiveFilters('visiblePrices', visiblePrice, selectedPriceVisible);\r\n };\r\n FilterComponent.prototype.onChangeMinimumAvailable = function (value) {\r\n this.changeActiveFilters('mimimumAvailable', value, true);\r\n };\r\n FilterComponent.prototype.onFilterSelectionSustainability = function (event) {\r\n var selected = event.currentTarget.value;\r\n var selectedIsActive = event.currentTarget.checked;\r\n this.changeActiveFilters('sustainability', selected, selectedIsActive);\r\n };\r\n FilterComponent.prototype.onFilterSelectionDeliveryWindow = function (event) {\r\n var selectedDeliveryWindow = event.currentTarget.value;\r\n var selectedDeliveryWindowIsActive = event.currentTarget.checked;\r\n this.changeActiveFilters('deliveryWindows', selectedDeliveryWindow, selectedDeliveryWindowIsActive);\r\n };\r\n FilterComponent.prototype.onFilterSelectionProductCategory = function (event) {\r\n var selectedProdoctCategory = event.currentTarget.value;\r\n var selectedProdoctCategoryWindowIsActive = event.currentTarget.checked;\r\n this.changeActiveFilters('productCategories', selectedProdoctCategory, selectedProdoctCategoryWindowIsActive);\r\n };\r\n FilterComponent.prototype.onFilterSelectionCollection = function (event) {\r\n var selectedCollection = event.currentTarget.value;\r\n var selectedCollectionIsActive = event.currentTarget.checked;\r\n this.changeActiveFilters('collections', selectedCollection, selectedCollectionIsActive);\r\n };\r\n FilterComponent.prototype.changeActiveFilters = function (filterType, filterValue, isActive) {\r\n var newFilter = Object.assign({}, this.props.filter);\r\n if (!newFilter)\r\n return;\r\n var tempResult;\r\n switch (filterType) {\r\n case 'collections':\r\n if (isActive) {\r\n newFilter.activeFilters.collections.push(filterValue);\r\n }\r\n else {\r\n var filterTypeIndex = newFilter.activeFilters.collections.indexOf(filterValue);\r\n newFilter.activeFilters.collections.splice(filterTypeIndex, 1);\r\n }\r\n break;\r\n case 'seasons':\r\n if (isActive) {\r\n newFilter.activeFilters.seasons.push(filterValue);\r\n }\r\n else {\r\n var filterTypeIndex = newFilter.activeFilters.seasons.indexOf(filterValue);\r\n newFilter.activeFilters.seasons.splice(filterTypeIndex, 1);\r\n }\r\n break;\r\n case 'deliveryWindows':\r\n if (isActive) {\r\n newFilter.activeFilters.deliveryWindows.push(filterValue);\r\n }\r\n else {\r\n var filterTypeIndex = newFilter.activeFilters.deliveryWindows.indexOf(filterValue);\r\n newFilter.activeFilters.deliveryWindows.splice(filterTypeIndex, 1);\r\n }\r\n break;\r\n case 'sustainability':\r\n if (isActive && newFilter.activeFilters.sustainability) {\r\n newFilter.activeFilters.sustainability.push(filterValue);\r\n }\r\n else {\r\n if (newFilter.activeFilters.sustainability) {\r\n var filterTypeIndex = newFilter.activeFilters.sustainability.indexOf(filterValue);\r\n newFilter.activeFilters.sustainability.splice(filterTypeIndex, 1);\r\n }\r\n }\r\n break;\r\n case 'productGroups':\r\n if (isActive) {\r\n newFilter.activeFilters.productGroups.push(filterValue);\r\n }\r\n else {\r\n var filterTypeIndex = newFilter.activeFilters.productGroups.indexOf(filterValue);\r\n newFilter.activeFilters.productGroups.splice(filterTypeIndex, 1);\r\n }\r\n var cloned = cloneDeep(newFilter);\r\n cloned.activeFilters.productCategories = [];\r\n tempResult = FilterHelper.resultByFilter(cloned, this.props.styles);\r\n if (!this.props.collectionName) {\r\n newFilter.productCategories = FilterHelper.hydrateProductCategories(tempResult);\r\n }\r\n else {\r\n newFilter.productCategories = FilterHelper.hydrateProductCategoriesByCollectionSort(tempResult, this.props.collectionName);\r\n }\r\n break;\r\n case 'productCategories':\r\n if (isActive) {\r\n newFilter.activeFilters.productCategories.push(filterValue);\r\n }\r\n else {\r\n var filterTypeIndex = newFilter.activeFilters.productCategories.indexOf(filterValue);\r\n newFilter.activeFilters.productCategories.splice(filterTypeIndex, 1);\r\n }\r\n break;\r\n case 'mimimumAvailable':\r\n newFilter.activeFilters.minimumAvailable = +filterValue;\r\n break;\r\n case 'visiblePrices':\r\n if (isActive && newFilter.activeFilters.visiblePrices) {\r\n newFilter.activeFilters.visiblePrices.push(filterValue);\r\n }\r\n else {\r\n if (newFilter.activeFilters.visiblePrices) {\r\n var filterTypeIndex = newFilter.activeFilters.visiblePrices.indexOf(filterValue);\r\n newFilter.activeFilters.visiblePrices.splice(filterTypeIndex, 1);\r\n }\r\n }\r\n break;\r\n }\r\n this.props.applyFilter(newFilter);\r\n };\r\n FilterComponent.prototype.render = function () {\r\n var _this = this;\r\n return (React.createElement(\"div\", { className: \"filter-sidebar \" + (this.props.showFilter ? \"--is-active\" : \"--is-hidden\") },\r\n this.props.showGoBack && React.createElement(\"div\", { className: \"filter-sidebar__go-back\", onClick: function () { return _this.props.onClickBack && _this.props.onClickBack(); } }, \"Back to Dashboard\"),\r\n this.props.filters.indexOf('collections') !== -1 && React.createElement(AccordionPanel, { heading: \"Collections\", defaultClosed: this.props.useDefaultOpen && this.props.defaults ? this.props.defaults.indexOf('collections') !== -1 : true },\r\n React.createElement(\"div\", { className: \"a-filter-facet-group\" }, (this.props.filter && this.props.filter.collections\r\n && this.props.filter.collections.map(function (collection) {\r\n return _this.props.filter && !!collection && (React.createElement(\"div\", { className: \"a-filter-facet\", key: collection },\r\n React.createElement(CheckboxInput, { name: collection, title: collection, handleChange: _this.onFilterSelectionCollection.bind(_this), value: collection, checked: _this.props.filter.activeFilters.collections.indexOf(collection) !== -1 })));\r\n })))),\r\n this.props.filters.indexOf('product_groups') !== -1 &&\r\n React.createElement(AccordionPanel, { heading: \"Product Groups\", defaultClosed: this.props.useDefaultOpen && this.props.defaults ? this.props.defaults.indexOf('productGroups') !== -1 : true },\r\n React.createElement(\"div\", { className: \"a-filter-facet-group\" }, (this.props.filter && this.props.filter.productGroups\r\n && this.props.filter.productGroups.map(function (productGroupName) {\r\n return _this.props.filter && !!productGroupName && (React.createElement(\"div\", { className: \"a-filter-facet\", key: productGroupName },\r\n React.createElement(CheckboxInput, { name: productGroupName, title: productGroupName, handleChange: _this.onFilterSelectionProductGroup.bind(_this), value: productGroupName, checked: _this.props.filter.activeFilters.productGroups.indexOf(productGroupName) !== -1 })));\r\n })))),\r\n this.props.filters.indexOf('product_categories') !== -1 &&\r\n React.createElement(AccordionPanel, { heading: \"Product Categories\", defaultClosed: this.props.useDefaultOpen && this.props.defaults ? this.props.defaults.indexOf('productCategories') !== -1 : true },\r\n React.createElement(\"div\", { className: \"a-filter-facet-group\" }, (this.props.filter && this.props.filter.productCategories\r\n && this.props.filter.productCategories.map(function (productCategoryName) {\r\n return _this.props.filter && !!productCategoryName && (React.createElement(\"div\", { className: \"a-filter-facet\", key: productCategoryName },\r\n React.createElement(CheckboxInput, { name: productCategoryName, title: productCategoryName, handleChange: _this.onFilterSelectionProductCategory.bind(_this), value: productCategoryName, checked: _this.props.filter.activeFilters.productCategories.indexOf(productCategoryName) !== -1 })));\r\n })))),\r\n this.props.filters.indexOf('delivery_windows') !== -1 &&\r\n React.createElement(AccordionPanel, { heading: \"Delivery Windows\", defaultClosed: this.props.useDefaultOpen && this.props.defaults ? this.props.defaults.indexOf('deliveryWindows') !== -1 : true },\r\n React.createElement(\"div\", { className: \"a-filter-facet-group\" }, (this.props.filter && this.props.filter.deliveryWindows\r\n && this.props.filter.deliveryWindows.map(function (deliveryWindowName) {\r\n return _this.props.filter && !!deliveryWindowName && (React.createElement(\"div\", { className: \"a-filter-facet\", key: deliveryWindowName },\r\n React.createElement(CheckboxInput, { name: deliveryWindowName, title: deliveryWindowName, handleChange: _this.onFilterSelectionDeliveryWindow.bind(_this), value: deliveryWindowName, checked: _this.props.filter.activeFilters.deliveryWindows.indexOf(deliveryWindowName) !== -1 })));\r\n })))),\r\n this.props.filters.indexOf('sustainability') !== -1 &&\r\n React.createElement(AccordionPanel, { heading: \"Sustainability\", defaultClosed: this.props.useDefaultOpen && this.props.defaults ? this.props.defaults.indexOf('sustainability') !== -1 : true },\r\n React.createElement(\"div\", { className: \"a-filter-facet-group\" }, (this.props.filter && this.props.filter.sustainability\r\n && this.props.filter.sustainability.map(function (type) {\r\n return _this.props.filter && !!type && (React.createElement(\"div\", { className: \"a-filter-facet\", key: type },\r\n React.createElement(CheckboxInput, { name: type, title: type.toUpperCase().replace('_', ' '), handleChange: _this.onFilterSelectionSustainability.bind(_this), value: type, checked: !!_this.props.filter.activeFilters.sustainability &&\r\n _this.props.filter.activeFilters.sustainability.indexOf(type) !== -1 })));\r\n })))),\r\n this.props.filters.indexOf('minimum_available') !== -1 && React.createElement(AccordionPanel, { heading: \"Minimum available\", defaultClosed: true },\r\n React.createElement(\"div\", { className: \"a-filter-facet-group\" },\r\n React.createElement(AmountFilter, { apply: this.onChangeMinimumAvailable.bind(this) }))),\r\n this.props.filters.indexOf('visible_prices') !== -1 &&\r\n React.createElement(AccordionPanel, { heading: \"Price Filter\", defaultClosed: true },\r\n React.createElement(\"div\", { className: \"a-filter-facet-group\" }, (this.props.filter && this.props.filter.visiblePrices\r\n && this.props.filter.visiblePrices.map(function (name) {\r\n return _this.props.filter && !!name && (React.createElement(\"div\", { className: \"a-filter-facet\", key: name },\r\n React.createElement(CheckboxInput, { name: name, title: name, handleChange: _this.onFilterSelectionVisiblePrices.bind(_this), value: name.replace('_', ' '), checked: !!_this.props.filter.activeFilters.visiblePrices && _this.props.filter.activeFilters.visiblePrices.indexOf(name) !== -1 })));\r\n }))))));\r\n };\r\n return FilterComponent;\r\n}(Component));\r\nexport { FilterComponent };\r\n//# sourceMappingURL=FilterComponent.js.map","import { __read } from \"tslib\";\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { FaTimes } from 'react-icons/fa';\r\nvar overlayWrapperStyle = {\r\n position: 'fixed',\r\n width: '95vw',\r\n height: '100vh',\r\n background: 'white',\r\n top: 0,\r\n right: 0,\r\n boxShadow: '-7px -2px 6px -3px rgba(209,209,209,1)',\r\n overflowX: 'auto',\r\n zIndex: 9,\r\n maxWidth: '1200px',\r\n};\r\nexport var Overlay = function (props) {\r\n var isShowing = props.isShowing, hide = props.hide, children = props.children, hideHeader = props.hideHeader;\r\n var node = React.useRef(null);\r\n var _a = __read(React.useState(false), 2), hideIsTriggered = _a[0], setHideIsTriggered = _a[1];\r\n React.useEffect(function () {\r\n // add when mounted\r\n document.addEventListener('keydown', onKeyPressed);\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n // return function to be called when unmounted\r\n return function () {\r\n document.removeEventListener('keydown', onKeyPressed);\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n };\r\n });\r\n var handleClickOutside = function (e) {\r\n if (node && node.current && node.current.contains(e.target)) {\r\n return;\r\n }\r\n if (node && node.current && e.target.classList.contains('ignore-clickoutside')) {\r\n return;\r\n }\r\n // outside click\r\n if (props.isShowing) {\r\n props.hide && props.hide();\r\n }\r\n };\r\n var onKeyPressed = function (e) {\r\n if (e.key === 'Escape' && props.hide && props.isShowing) {\r\n e.preventDefault();\r\n props.hide();\r\n }\r\n };\r\n var level = props.level || 1;\r\n return ReactDOM.createPortal(React.createElement(React.Fragment, null,\r\n React.createElement(\"div\", { className: \"take-over\" + (isShowing ? ' is-showing' : '') + (hideHeader ? ' hide-header' : '') + ' level-' + level, ref: node },\r\n React.createElement(\"div\", { onClick: hide, className: \"take-over__close\" },\r\n React.createElement(FaTimes, null)),\r\n React.createElement(React.Fragment, null, children && children))), document.getElementById('root'));\r\n};\r\n//# sourceMappingURL=Overlay.js.map","import { __extends } from \"tslib\";\r\nimport React, { Component } from 'react';\r\nimport { FaTimes } from 'react-icons/fa';\r\nvar SendMailBody = /** @class */ (function (_super) {\r\n __extends(SendMailBody, _super);\r\n function SendMailBody() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.state = {\r\n emails: [],\r\n currentMail: '',\r\n error: null\r\n };\r\n _this.onAdd = function () {\r\n var emails = _this.state.emails;\r\n if (_this._validateEmail(_this.state.currentMail)) {\r\n emails.push(_this.state.currentMail);\r\n _this.setState({ currentMail: '', emails: emails, error: null });\r\n }\r\n else {\r\n _this.setState({ error: 'Please type a valid email' });\r\n }\r\n };\r\n _this.onRemove = function (index) {\r\n var emails = _this.state.emails;\r\n emails.splice(index, 1);\r\n _this.setState({ currentMail: '', emails: emails });\r\n };\r\n _this.onSend = function () {\r\n if (_this.props.sendEmails) {\r\n _this.props.sendEmails(_this.props.appOrderId, _this.state.emails);\r\n _this.setState({\r\n emails: [],\r\n currentMail: '',\r\n error: null\r\n });\r\n }\r\n };\r\n _this._handleKeyDown = function (e) {\r\n if (e.key === 'Enter') {\r\n _this.onAdd();\r\n }\r\n };\r\n return _this;\r\n }\r\n SendMailBody.prototype.componentDidMount = function () {\r\n if (this.props.sellToContactEMail) {\r\n this.setState({\r\n emails: [this.props.sellToContactEMail]\r\n });\r\n }\r\n };\r\n SendMailBody.prototype._validateEmail = function (mail) {\r\n if (/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/.test(mail)) {\r\n return (true);\r\n }\r\n return (false);\r\n };\r\n SendMailBody.prototype.render = function () {\r\n var _this = this;\r\n return (React.createElement(\"div\", { className: \"send-email\" },\r\n React.createElement(\"h2\", null, \"Send order review links to the following\"),\r\n React.createElement(\"h3\", null),\r\n React.createElement(\"div\", null,\r\n React.createElement(\"div\", { className: \"form-control\" },\r\n React.createElement(\"label\", null, \"Email:\"),\r\n React.createElement(\"input\", { type: \"email\", name: \"email\", placeholder: 'Insert email here', value: this.state.currentMail, onKeyDown: this._handleKeyDown, onChange: function (event) {\r\n var value = event.target.value;\r\n _this.setState({ currentMail: value });\r\n } }),\r\n this.state.error && React.createElement(\"div\", { className: \"error-message\" }, this.state.error)),\r\n React.createElement(\"div\", { className: \"form-control\", style: { display: 'flex', justifyContent: 'flex-end' } },\r\n React.createElement(\"button\", { className: \"send-email__button\", onClick: this.onAdd }, \"Add\"))),\r\n React.createElement(\"div\", { className: \"form-control\" }, this.state.emails.map(function (mail, key) {\r\n return (React.createElement(\"div\", { className: \"options\", key: key },\r\n React.createElement(\"div\", { className: \"options__item --large-text\" },\r\n React.createElement(\"span\", null, mail),\r\n React.createElement(\"span\", { className: \"options__item__icon\", onClick: function () { return _this.onRemove(key); } },\r\n React.createElement(FaTimes, null)))));\r\n })),\r\n this.state.emails.length ?\r\n React.createElement(\"div\", { className: \"form-control\", style: { display: 'flex', justifyContent: 'flex-end', marginTop: '40px' } },\r\n React.createElement(\"button\", { className: \"send-email__button\", onClick: this.onSend }, \"Send mails\")) : null));\r\n };\r\n return SendMailBody;\r\n}(Component));\r\nexport { SendMailBody };\r\n//# sourceMappingURL=SendMailBody.js.map","import { __read } from \"tslib\";\r\nimport React, { useState } from 'react';\r\nexport var QuantityInput = function (props) {\r\n var quantity = props.quantity, available = props.available, itemId = props.itemId, blocked = props.blocked, idx = props.idx, handleKeyDown = props.handleKeyDown, handleOnFocus = props.handleOnFocus, handeClick = props.handeClick, soldOut = props.soldOut, showQuantity = props.showQuantity, orderHeader = props.orderHeader;\r\n var _a = __read(useState(quantity), 2), value = _a[0], setValue = _a[1];\r\n var handleChange = function (event) {\r\n if (Number(event.target.value) || event.target.value === '' || !event.target.value || +event.target.value === 0) {\r\n var quantity_1 = event.target.value > available ? available : event.target.value;\r\n props.updateChanges(itemId, quantity_1);\r\n setValue(quantity_1);\r\n }\r\n };\r\n var convertAvailable = function (available, quantity) {\r\n var availability = 0;\r\n var realAvailable = +available;\r\n if (realAvailable > 0) {\r\n availability = realAvailable - +quantity;\r\n }\r\n return availability;\r\n };\r\n var showAvailable = function (available, quantity) {\r\n if (available === 9999) {\r\n return (React.createElement(\"span\", { className: \"quantity-grid__availability\" },\r\n React.createElement(\"div\", { className: \"infiniteAvailability\" })));\r\n }\r\n if (!showQuantity && !blocked && !soldOut && convertAvailable(available, value) !== 9999) {\r\n return (React.createElement(\"span\", { className: 'quantity-grid__availability' + (convertAvailable(available, value) <= 0 ? ' zero' : '') },\r\n \"(\",\r\n convertAvailable(available, value),\r\n \")\"));\r\n }\r\n return React.createElement(React.Fragment, null,\r\n !blocked && !soldOut && convertAvailable(available, value) > -1 && convertAvailable(available, value) < 6 &&\r\n React.createElement(React.Fragment, null,\r\n React.createElement(\"span\", { className: \"quantity-grid__availability\" },\r\n \"(\",\r\n convertAvailable(available, value),\r\n \")\",\r\n React.createElement(\"div\", { className: \"lowAvailability\" }))),\r\n !blocked && !soldOut && convertAvailable(available, value) > 5 && convertAvailable(available, value) < 16 &&\r\n React.createElement(\"span\", { className: \"quantity-grid__availability\" },\r\n React.createElement(\"div\", { className: \"mediumAvailability\" })),\r\n !blocked && !soldOut && convertAvailable(available, value) > 15 &&\r\n React.createElement(\"span\", { className: \"quantity-grid__availability\" },\r\n React.createElement(\"div\", { className: \"infiniteAvailability\" })));\r\n };\r\n var renderInput = function () {\r\n return React.createElement(React.Fragment, null,\r\n !blocked && !soldOut &&\r\n React.createElement(\"input\", { className: \"quantity-input__input\", type: \"text\", id: 'size_' + itemId, name: 'size_' + itemId, value: value, onChange: handleChange, \r\n // onKeyUp={handleKeyUp}\r\n onKeyDown: handleKeyDown, onFocus: handleOnFocus, onClick: handeClick }),\r\n showAvailable(available, value),\r\n blocked &&\r\n React.createElement(\"span\", { className: \"quantity-input__label\" }, \"Blocked\"),\r\n soldOut && !blocked &&\r\n React.createElement(\"span\", { className: \"quantity-input__label\" }, \"Sold Out\"));\r\n };\r\n if (props.regularDiv) {\r\n return (React.createElement(\"div\", { className: \"quantity-grid__cell quantity-grid__item\" }, renderInput()));\r\n }\r\n return (React.createElement(\"td\", { className: \"quantity-grid__cell quantity-grid__item\", tabIndex: idx }, renderInput()));\r\n};\r\n//# sourceMappingURL=QuantityInput.js.map","import { __extends } from \"tslib\";\r\nimport React, { Component } from 'react';\r\nimport { Overlay } from './layout/Overlay';\r\nimport { SendMailBody } from './SendMailBody';\r\nvar SendMailModal = /** @class */ (function (_super) {\r\n __extends(SendMailModal, _super);\r\n function SendMailModal() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.state = {\r\n emails: [],\r\n currentMail: '',\r\n error: null\r\n };\r\n _this.onAdd = function () {\r\n var emails = _this.state.emails;\r\n if (_this._validateEmail(_this.state.currentMail)) {\r\n emails.push(_this.state.currentMail);\r\n _this.setState({ currentMail: '', emails: emails, error: null });\r\n }\r\n else {\r\n _this.setState({ error: 'Please type a valid email' });\r\n }\r\n };\r\n _this.onRemove = function (index) {\r\n var emails = _this.state.emails;\r\n emails.splice(index, 1);\r\n _this.setState({ currentMail: '', emails: emails });\r\n };\r\n _this.onSend = function () {\r\n if (_this.props.sendEmails) {\r\n _this.props.sendEmails(_this.props.order.appOrderId, _this.state.emails);\r\n _this.setState({\r\n emails: [],\r\n currentMail: '',\r\n error: null\r\n });\r\n _this.props.hide();\r\n }\r\n };\r\n _this._handleKeyDown = function (e) {\r\n if (e.key === 'Enter') {\r\n _this.onAdd();\r\n }\r\n };\r\n return _this;\r\n }\r\n SendMailModal.prototype.componentDidMount = function () {\r\n if (this.props.order.sellToContactEMail) {\r\n this.setState({\r\n emails: [this.props.order.sellToContactEMail]\r\n });\r\n }\r\n };\r\n SendMailModal.prototype._validateEmail = function (mail) {\r\n if (/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/.test(mail)) {\r\n return (true);\r\n }\r\n return (false);\r\n };\r\n SendMailModal.prototype.render = function () {\r\n var _this = this;\r\n return (React.createElement(Overlay, { children: React.createElement(\"div\", { className: \"take-over__body\" },\r\n React.createElement(SendMailBody, { sendEmails: function (appOrderId, emails) { return _this.props.sendEmails && _this.props.sendEmails(appOrderId, emails); }, appOrderId: this.props.order.appOrderId, sellToContactEMail: this.props.order.sellToContactEMail || undefined })), hide: this.props.hide, isShowing: this.props.show }));\r\n };\r\n return SendMailModal;\r\n}(Component));\r\nexport { SendMailModal };\r\n//# sourceMappingURL=SendMailModal.js.map","import { __read } from \"tslib\";\r\nimport React, { useState, useEffect } from 'react';\r\nimport { useDispatch } from \"react-redux\";\r\nimport { Modal } from './Modal';\r\nexport var EditLineDiscountModal = function (props) {\r\n var shouldHide = props.shouldHide, show = props.show, order = props.order, onChangeDiscount = props.onChangeDiscount;\r\n var dispatch = useDispatch();\r\n var _a = __read(useState(0), 2), lineDiscount = _a[0], setLineDiscount = _a[1];\r\n var textInput = React.createRef();\r\n useEffect(function () {\r\n props.line && setLineDiscount(props.line.linediscountpct);\r\n textInput.current && textInput.current.focus();\r\n textInput.current && textInput.current.select();\r\n }, []);\r\n var onClickConfirm = function () {\r\n if (onChangeDiscount) {\r\n onChangeDiscount(props.line, lineDiscount);\r\n shouldHide();\r\n }\r\n };\r\n var onChangeValue = function (e) {\r\n console.log(e, 'EVENT');\r\n setLineDiscount(e.target.value);\r\n };\r\n var renderModal = function () { return (React.createElement(\"div\", { className: \"delete-order-modal\" },\r\n React.createElement(\"div\", { style: { padding: '20px' } },\r\n React.createElement(\"h2\", null, \"Set line discount for item\"),\r\n React.createElement(\"div\", { className: \"form-control\" },\r\n React.createElement(\"input\", { ref: textInput, type: \"number\", name: \"salespersonNote\", value: lineDiscount, onChange: onChangeValue, placeholder: 'Line discount', max: 100, min: 0, onKeyDown: function (event) { return event.key === 'Enter' && onClickConfirm(); } }))),\r\n React.createElement(\"div\", { className: \"delete-order-modal__footer\" },\r\n React.createElement(\"button\", { className: \"btn\", onClick: function () { return onClickConfirm(); } }, \"Update discount\"),\r\n React.createElement(\"button\", { className: \"btn\", onClick: function () { return shouldHide(); } }, \"Cancel\")))); };\r\n return (React.createElement(Modal, { children: renderModal(), size: 'sm', hide: shouldHide, isShowing: show, bodyClasses: 'confirm-modal', hideFooter: true }));\r\n};\r\n//# sourceMappingURL=EditLineDiscountModal.js.map","import { __extends } from \"tslib\";\r\nimport React, { Component } from 'react';\r\n// import { appConfig } from '../../config';\r\nimport { QuantityInput } from './QuantityInput';\r\nimport { clone } from 'lodash';\r\nvar baseUrl = process.env.NODE_ENV === 'production' ? '/' : 'http://aws.molohub.com/';\r\n// const QuantityGrid: React.SFC = (props) => {\r\nvar QuantityGrid = /** @class */ (function (_super) {\r\n __extends(QuantityGrid, _super);\r\n function QuantityGrid() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.tableRef = React.createRef();\r\n _this.currentRowIndex = 1;\r\n _this.cellLength = 0;\r\n _this.tableLength = 0;\r\n _this.state = {\r\n currentCellIndex: 0,\r\n realCellIndex: 2,\r\n inputsRendered: false\r\n };\r\n _this.initialCheck = function () {\r\n if (_this.tableRef.current !== null) {\r\n _this.tableLength = _this.tableRef.current.rows.length;\r\n _this.cellLength = _this.tableRef.current.rows[0].cells.length;\r\n _this.initialFocus();\r\n }\r\n };\r\n _this.handleKeyUp = function (e) {\r\n // e.preventDefault()\r\n // console.log('handlekeyup');\r\n };\r\n _this.handleKeyDown = function (e) {\r\n var isRight = e.key === 'ArrowRight' || e.key === 'Tab';\r\n var isLeft = e.key === 'ArrowLeft';\r\n var isUp = e.key === 'ArrowUp';\r\n var isDown = e.key === 'ArrowDown';\r\n if (isRight || isLeft || isUp || isDown) {\r\n e.preventDefault();\r\n _this.handleNextInput(isRight, isLeft, isDown, isUp);\r\n }\r\n };\r\n _this.handleOnFocus = function (e) {\r\n e.preventDefault();\r\n var currentInput = e.target;\r\n if (_this.tableRef.current) {\r\n currentInput.select();\r\n if (currentInput) {\r\n var closest = currentInput.closest('td');\r\n if (closest) {\r\n closest.classList.add('cell-is-active');\r\n }\r\n var allCells = _this.tableRef.current.getElementsByTagName('td');\r\n for (var i in allCells) {\r\n if (allCells[i] && allCells[i] !== closest) {\r\n if (allCells[i].classList) {\r\n allCells[i].classList.remove('cell-is-active');\r\n }\r\n }\r\n }\r\n }\r\n }\r\n };\r\n _this.handleOnClick = function (e) {\r\n var field = e.target;\r\n _this.currentRowIndex = field.closest('tr').rowIndex;\r\n if (_this.tableRef.current) {\r\n var inputs = _this.tableRef.current.rows[_this.currentRowIndex].getElementsByTagName('input');\r\n var _loop_1 = function (key) {\r\n var input = inputs[key];\r\n if (input === field) {\r\n var closest = input.closest('td');\r\n if (closest) {\r\n _this.setState({ realCellIndex: closest.cellIndex }, function () {\r\n input.focus();\r\n });\r\n }\r\n }\r\n };\r\n for (var key in inputs) {\r\n _loop_1(key);\r\n }\r\n }\r\n };\r\n return _this;\r\n }\r\n QuantityGrid.prototype.componentDidUpdate = function (prevProps) {\r\n var _this = this;\r\n if (prevProps.moloItems !== this.props.moloItems\r\n || Object.keys(prevProps.moloItems).length !== Object.keys(this.props.moloItems).length\r\n || this.props.selectedProduct.colorCode !== prevProps.selectedProduct.colorCode) {\r\n this.setState({ inputsRendered: false });\r\n }\r\n if (this.tableRef.current !== null) {\r\n var rows = document.querySelector('#quantity-grid-table');\r\n if (rows) {\r\n var inputs = rows.querySelectorAll('input');\r\n if (!this.state.inputsRendered) {\r\n this.setState({ inputsRendered: true }, function () {\r\n _this.initialCheck();\r\n });\r\n }\r\n }\r\n }\r\n };\r\n QuantityGrid.prototype.handleNextInput = function (isRight, isLeft, isDown, isUp, isClick) {\r\n var _this = this;\r\n if (isRight === void 0) { isRight = false; }\r\n var currentCellIndex = clone(this.state.realCellIndex);\r\n if (this.tableRef.current !== null) {\r\n if ((currentCellIndex) === (this.cellLength - 1) && isRight && (!isUp && !isDown)) {\r\n currentCellIndex = 0;\r\n this.currentRowIndex++;\r\n if (this.currentRowIndex === this.tableLength) {\r\n this.currentRowIndex = 1;\r\n }\r\n }\r\n else if (isRight && (!isUp && !isDown)) {\r\n currentCellIndex++;\r\n }\r\n else if (isLeft && (!isUp && !isDown)) {\r\n currentCellIndex--;\r\n // Triggered when left arrow key is pressed\r\n // and cell is the first cell.\r\n if (currentCellIndex < 0) {\r\n currentCellIndex = this.cellLength - 1;\r\n // When this done in the first row.\r\n if (this.currentRowIndex === 1) {\r\n this.currentRowIndex = this.tableLength - 1;\r\n }\r\n else {\r\n this.currentRowIndex--;\r\n }\r\n }\r\n }\r\n else if (isUp) {\r\n this.currentRowIndex--;\r\n if (this.currentRowIndex <= 0) {\r\n this.currentRowIndex = this.tableLength - 1;\r\n }\r\n }\r\n else if (isDown) {\r\n this.currentRowIndex++;\r\n if (this.currentRowIndex === this.tableLength) {\r\n this.currentRowIndex = 1;\r\n }\r\n }\r\n var tds = this.tableRef.current.rows[this.currentRowIndex].getElementsByTagName('td');\r\n var input_1 = tds[currentCellIndex].getElementsByTagName('input');\r\n var realCellIndex = 0;\r\n if (input_1[0]) {\r\n var closest = input_1[0].closest('td');\r\n if (closest) {\r\n realCellIndex = closest.cellIndex;\r\n }\r\n }\r\n else {\r\n realCellIndex = currentCellIndex;\r\n }\r\n this.setState({ currentCellIndex: currentCellIndex, realCellIndex: realCellIndex }, function () {\r\n if (input_1[0]) {\r\n input_1[0].focus();\r\n }\r\n else {\r\n _this.handleNextInput(isRight, isLeft, isDown, isUp);\r\n }\r\n });\r\n }\r\n };\r\n QuantityGrid.prototype.initialFocus = function () {\r\n if (this.tableRef.current) {\r\n var rows = this.tableRef.current.rows;\r\n if (rows) {\r\n var _loop_2 = function (i) {\r\n var row = rows[i].classList.contains(('active-row'));\r\n if (row) {\r\n var inputs = rows[i].getElementsByTagName('input');\r\n this_1.currentRowIndex = i;\r\n if (inputs.length) {\r\n var el = inputs[0];\r\n el.focus();\r\n var closest_1 = el.closest('td');\r\n if (closest_1) {\r\n var realCellIndex = closest_1.cellIndex;\r\n this_1.setState({ realCellIndex: realCellIndex }, function () {\r\n closest_1.scrollIntoView(true);\r\n });\r\n }\r\n }\r\n else {\r\n // If no inputs where found, scroll to row.\r\n var cells = rows[i].getElementsByTagName('td');\r\n var closest = cells[0];\r\n closest.scrollIntoView(true);\r\n }\r\n return \"break\";\r\n }\r\n };\r\n var this_1 = this;\r\n for (var i = 0; i < rows.length; i++) {\r\n var state_1 = _loop_2(i);\r\n if (state_1 === \"break\")\r\n break;\r\n }\r\n }\r\n }\r\n };\r\n QuantityGrid.prototype.render = function () {\r\n var _this = this;\r\n var _a = this.props, sizes = _a.sizes, moloItems = _a.moloItems, selectedProduct = _a.selectedProduct;\r\n var indexCounter = 0;\r\n return (React.createElement(\"table\", { className: \"quantity-grid\", id: \"quantity-grid-table\", ref: this.tableRef },\r\n React.createElement(\"thead\", null,\r\n React.createElement(\"tr\", { className: \"quantity-grid__header\" },\r\n React.createElement(\"th\", { className: \"quantity-grid__cell\" }, selectedProduct.description),\r\n React.createElement(\"th\", { className: \"quantity-grid__cell\" }, \"Color name\"),\r\n sizes.map(function (size, index) {\r\n return (React.createElement(\"th\", { key: (size.code), className: 'quantity-grid__cell' + ((index + 2) === _this.state.realCellIndex ? ' cell-is-active' : '') },\r\n React.createElement(\"div\", null, size.name)));\r\n }))),\r\n React.createElement(\"tbody\", { className: \"quantity-grid__body\" }, Object.keys(moloItems).map(function (itemKey, key) {\r\n var myComponentClass = itemKey === (_this.props.selectedProduct.masterId + _this.props.selectedProduct.colorCode) ? 'active-row' : '';\r\n var imgUrl = baseUrl + 'productimage/' + moloItems[itemKey][0].seasonCode + '/' + moloItems[itemKey][0].masterId + '/' + moloItems[itemKey][0].colorCode + '/small';\r\n return (React.createElement(\"tr\", { className: \"quantity-grid__row \".concat(myComponentClass), key: (moloItems[itemKey][0].itemId + myComponentClass + key) },\r\n React.createElement(\"td\", { className: \"quantity-grid__cell\" },\r\n React.createElement(\"img\", { src: imgUrl, alt: moloItems[itemKey][0].colorName })),\r\n React.createElement(\"td\", { className: \"quantity-grid__cell\" }, moloItems[itemKey][0].colorName),\r\n moloItems[itemKey].map(function (item, key) {\r\n var realAvailable = item.available;\r\n if ((_this.props.orderHeader != null) && (_this.props.orderHeader.orderType.toLocaleLowerCase() != 'reorder')) {\r\n realAvailable += item.dispnos;\r\n }\r\n return (_this.props.basket &&\r\n React.createElement(QuantityInput, { idx: indexCounter, key: (item.itemId + item.sizeCode + item.sizeName), quantity: +_this.props.basket.basketLines[item.itemId] || '', available: realAvailable, itemId: item.itemId, updateChanges: _this.props.updateChanges, handleKeyDown: _this.handleKeyDown, handleOnFocus: _this.handleOnFocus, handleKeyUp: _this.handleKeyUp, blocked: item.blocked === 1, handeClick: _this.handleOnClick, soldOut: (!+_this.props.basket.basketLines[item.itemId] || +_this.props.basket.basketLines[item.itemId] < 1) && item.available < 1, orderHeader: _this.props.orderHeader }));\r\n })));\r\n }))));\r\n };\r\n return QuantityGrid;\r\n}(Component));\r\nexport { QuantityGrid };\r\n;\r\n//# sourceMappingURL=QuantityGrid.js.map","import { __extends } from \"tslib\";\r\nimport React from \"react\";\r\nimport * as dateFns from \"date-fns\";\r\nvar Calendar = /** @class */ (function (_super) {\r\n __extends(Calendar, _super);\r\n function Calendar() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.state = {\r\n currentMonth: _this.props.defaultDate || new Date(),\r\n selectedDate: _this.props.defaultDate || new Date()\r\n };\r\n _this.onDateClick = function (day) {\r\n _this.setState({\r\n selectedDate: day\r\n }, function () {\r\n if (_this.props.dateClick) {\r\n _this.props.dateClick(day);\r\n }\r\n });\r\n };\r\n _this.nextMonth = function () {\r\n _this.setState({\r\n currentMonth: dateFns.addMonths(_this.state.currentMonth, 1)\r\n });\r\n };\r\n _this.prevMonth = function () {\r\n _this.setState({\r\n currentMonth: dateFns.subMonths(_this.state.currentMonth, 1)\r\n });\r\n };\r\n return _this;\r\n }\r\n Calendar.prototype.renderHeader = function () {\r\n var dateFormat = \"MMMM yyyy\";\r\n return (React.createElement(\"div\", { className: \"calendar__header row flex-middle\" },\r\n React.createElement(\"div\", { className: \"col col-start\" },\r\n React.createElement(\"div\", { className: \"icon\", onClick: this.prevMonth }, \"chevron_left\")),\r\n React.createElement(\"div\", { className: \"col col-center\" },\r\n React.createElement(\"span\", null, dateFns.format(this.state.currentMonth, dateFormat))),\r\n React.createElement(\"div\", { className: \"col col-end\", onClick: this.nextMonth },\r\n React.createElement(\"div\", { className: \"icon\" }, \"chevron_right\"))));\r\n };\r\n Calendar.prototype.renderDays = function () {\r\n var dateFormat = \"EEE\";\r\n var days = [];\r\n var startDate = dateFns.startOfWeek(this.state.currentMonth, { weekStartsOn: 1 });\r\n for (var i = 0; i < 7; i++) {\r\n days.push(React.createElement(\"div\", { className: \"col col-center\", key: i }, dateFns.format(dateFns.addDays(startDate, i), dateFormat)));\r\n }\r\n return React.createElement(\"div\", { className: \"days row\" }, days);\r\n };\r\n Calendar.prototype.renderCells = function () {\r\n var _this = this;\r\n var _a = this.state, currentMonth = _a.currentMonth, selectedDate = _a.selectedDate;\r\n var monthStart = dateFns.startOfMonth(currentMonth);\r\n var monthEnd = dateFns.endOfMonth(monthStart);\r\n var startDate = dateFns.startOfWeek(monthStart, { weekStartsOn: 1 });\r\n var endDate = dateFns.endOfWeek(monthEnd, { weekStartsOn: 1 });\r\n var dateFormat = \"d\";\r\n var rows = [];\r\n var days = [];\r\n var day = startDate;\r\n var formattedDate = \"\";\r\n var notBefore = this.props.startDate || new Date();\r\n if (dateFns.isBefore(notBefore, new Date())) {\r\n notBefore = new Date();\r\n }\r\n while (day <= endDate) {\r\n var _loop_1 = function (i) {\r\n formattedDate = dateFns.format(day, dateFormat);\r\n var cloneDay = day;\r\n days.push(React.createElement(\"div\", { className: \"col cell \".concat(!dateFns.isSameMonth(day, monthStart)\r\n || (dateFns.isAfter(notBefore, day) && !dateFns.isSameDay(notBefore, day))\r\n ? \"disabled\"\r\n : dateFns.isSameDay(day, selectedDate) ? \"selected\" : \"\"), key: day.toDateString(), onClick: function () { return _this.onDateClick(cloneDay); } },\r\n React.createElement(\"span\", { className: \"number\" }, formattedDate),\r\n React.createElement(\"span\", { className: \"bg\" }, formattedDate),\r\n dateFns.isSameDay(day, selectedDate) && this_1.props.selectedText ?\r\n React.createElement(\"span\", { className: \"selected-text\" }, this_1.props.selectedText)\r\n : null));\r\n day = dateFns.addDays(day, 1);\r\n };\r\n var this_1 = this;\r\n for (var i = 0; i < 7; i++) {\r\n _loop_1(i);\r\n }\r\n rows.push(React.createElement(\"div\", { className: \"row\", key: day.toDateString() }, days));\r\n days = [];\r\n }\r\n return React.createElement(\"div\", { className: \"body\" }, rows);\r\n };\r\n Calendar.prototype.render = function () {\r\n return (React.createElement(\"div\", { className: \"calendar\" },\r\n this.renderHeader(),\r\n this.renderDays(),\r\n this.renderCells()));\r\n };\r\n return Calendar;\r\n}(React.Component));\r\nexport { Calendar };\r\n//# sourceMappingURL=Calendar.js.map","import { __values } from \"tslib\";\r\nvar MoloItem = /** @class */ (function () {\r\n function MoloItem() {\r\n this.available = 0;\r\n this.blocked = 0;\r\n this.colorBlocked = 0;\r\n this.colorCode = '';\r\n this.colorName = '';\r\n this.deliveryWindow = '';\r\n this.description = '';\r\n this.description2 = '';\r\n this.dispnos = 0;\r\n this.ean = '';\r\n this.fabric = '';\r\n this.gots = null;\r\n this.ecovero = null;\r\n this.itemId = '';\r\n this.masterId = '';\r\n this.msrp = 0;\r\n this.ocsno = '';\r\n this.oekoTex = null;\r\n this.priceType = '';\r\n this.refill = '';\r\n this.seasonSort = 0;\r\n this.seasonCode = '';\r\n this.shelfNo = '';\r\n this.sizeCode = '';\r\n this.sizeName = '';\r\n this.whp = 0;\r\n this.deliveryShipmentDate = new Date();\r\n this.customerPrice = 0;\r\n this.ocsblended = '';\r\n this.discontinued = false;\r\n this.deliveryWindowLabel = '';\r\n }\r\n MoloItem.prototype.build = function (data) {\r\n // console.log(data, 'build :: moloItem')\r\n this.available = data.available || 0;\r\n this.blocked = data.blocked || 0;\r\n this.colorBlocked = data.colorblocked || 0;\r\n this.colorCode = data.colorcode;\r\n this.colorName = data.colorname;\r\n this.deliveryWindow = data.deliveryWindow;\r\n this.description = data.description;\r\n this.description2 = data.description2;\r\n this.dispnos = data.dispnos;\r\n this.ean = data.ean;\r\n this.fabric = data.fabric;\r\n this.gots = data.gots;\r\n this.ecovero = data.ecovero;\r\n this.itemId = data.itemid;\r\n this.masterId = data.masterno;\r\n this.msrp = data.msrp;\r\n this.ocsno = data.ocsno;\r\n this.oekoTex = data.oekoTex;\r\n this.priceType = data.pricetype;\r\n this.refill = data.refill;\r\n this.seasonSort = data.seasonSort;\r\n this.seasonCode = data.seasoncode;\r\n this.shelfNo = data.shelfNo;\r\n this.sizeCode = data.sizecode;\r\n this.sizeName = data.sizename;\r\n this.whp = data.whp;\r\n this.ocsblended = data.ocsblended;\r\n this.customerPrice = data.customerprice || 0;\r\n var shipmentDate = new Date(data.shipmentdate);\r\n var today = new Date();\r\n this.deliveryShipmentDate = new Date(shipmentDate);\r\n this.deliveryWindowLabel = shipmentDate > today ? data.deliveryWindow : 'available now';\r\n return this;\r\n };\r\n MoloItem.prototype.buildFromSalesBook = function (data) {\r\n // console.log(data, 'build :: moloItem for salesbook')\r\n this.available = data.Available || 0;\r\n this.blocked = data.blocked || 0;\r\n this.colorBlocked = data.colorblocked || 0;\r\n this.colorCode = data.colorcode;\r\n this.colorName = data.colorname;\r\n this.deliveryWindow = data.DeliveryWindow;\r\n this.description = data.description;\r\n this.description2 = data.description2;\r\n this.dispnos = data.dispnos || 0;\r\n this.ean = data.ean;\r\n this.fabric = data.Fabric;\r\n this.gots = data.GOTS;\r\n this.ecovero = data.ecovero;\r\n this.itemId = data.ItemId;\r\n this.masterId = data.masterno;\r\n this.msrp = data.MSRP;\r\n this.ocsno = data.ocsno;\r\n this.oekoTex = data.OekoTex;\r\n this.priceType = data.pricetype;\r\n this.refill = data.Refill;\r\n this.seasonSort = data.SeasonSort;\r\n this.seasonCode = data.seasoncode;\r\n this.shelfNo = data.shelfNo;\r\n this.sizeCode = data.sizecode;\r\n this.sizeName = data.sizename;\r\n this.whp = data.WHP;\r\n this.ocsblended = data.ocsblended;\r\n this.customerPrice = data.customerprice || 0;\r\n var shipmentDate = new Date(data.shipmentdate);\r\n var today = new Date();\r\n this.deliveryShipmentDate = new Date(shipmentDate);\r\n // console.log(data, 'data :: build from salesbook')\r\n this.deliveryWindowLabel = data.DeliveryWindow;\r\n return this;\r\n };\r\n MoloItem.prototype.buildFromB2B = function (data) {\r\n //console.log(data, 'build :: moloItem')\r\n this.available = data.available || 0;\r\n this.dispnos = data.dispnos || 0;\r\n this.blocked = data.blocked || 0;\r\n this.colorBlocked = data.colorblocked || 0;\r\n this.colorCode = data.colorcode;\r\n this.colorName = data.colorname;\r\n this.deliveryWindow = data.deliveryWindow;\r\n this.description = data.description;\r\n this.description2 = data.description2;\r\n this.ean = data.ean;\r\n this.fabric = data.fabric;\r\n this.gots = data.gots;\r\n this.itemId = data.itemid;\r\n this.masterId = data.masterno;\r\n this.msrp = data.msrp;\r\n this.ocsno = data.ocsno;\r\n this.oekoTex = data.oekoTex;\r\n this.priceType = data.pricetype;\r\n this.refill = data.refill;\r\n this.seasonSort = data.seasonSort;\r\n this.seasonCode = data.seasoncode;\r\n this.shelfNo = data.shelfNo;\r\n this.sizeCode = data.sizecode;\r\n this.sizeName = data.sizename;\r\n this.whp = data.whp;\r\n this.customerPrice = data.customerprice || 0;\r\n this.ocsblended = data.ocsblended;\r\n var shipmentDate = new Date(data.shipmentdate);\r\n var today = new Date();\r\n this.deliveryShipmentDate = new Date(shipmentDate);\r\n // console.log(data, 'data :: build from salesbook')\r\n this.deliveryWindowLabel = data.deliveryWindow;\r\n return this;\r\n };\r\n return MoloItem;\r\n}());\r\nexport { MoloItem };\r\nexport function mapMoloItems(data) {\r\n var e_1, _a;\r\n var mapped = [];\r\n try {\r\n for (var data_1 = __values(data), data_1_1 = data_1.next(); !data_1_1.done; data_1_1 = data_1.next()) {\r\n var item = data_1_1.value;\r\n var newStyle = new MoloItem().build(item);\r\n mapped.push(newStyle);\r\n }\r\n }\r\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n finally {\r\n try {\r\n if (data_1_1 && !data_1_1.done && (_a = data_1.return)) _a.call(data_1);\r\n }\r\n finally { if (e_1) throw e_1.error; }\r\n }\r\n return mapped;\r\n}\r\nexport function mapMoloItemsFromSalesbook(data) {\r\n var e_2, _a;\r\n var mapped = [];\r\n try {\r\n for (var data_2 = __values(data), data_2_1 = data_2.next(); !data_2_1.done; data_2_1 = data_2.next()) {\r\n var item = data_2_1.value;\r\n var newStyle = new MoloItem().buildFromSalesBook(item);\r\n mapped.push(newStyle);\r\n }\r\n }\r\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\r\n finally {\r\n try {\r\n if (data_2_1 && !data_2_1.done && (_a = data_2.return)) _a.call(data_2);\r\n }\r\n finally { if (e_2) throw e_2.error; }\r\n }\r\n return mapped;\r\n}\r\n//# sourceMappingURL=MoloItem.js.map","import { __extends } from \"tslib\";\r\nimport React, { Component } from 'react';\r\nimport * as Highcharts from 'highcharts';\r\nimport HighchartsReact from 'highcharts-react-official';\r\nvar ChartSummaryHighcharts = /** @class */ (function (_super) {\r\n __extends(ChartSummaryHighcharts, _super);\r\n function ChartSummaryHighcharts() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.state = {\r\n chartQuantifier: 'quantity',\r\n chartOptions: {},\r\n chartOptionsDesktop: {},\r\n initialized: false,\r\n };\r\n _this.drawChart = function () {\r\n var data = [];\r\n for (var key in _this.props.productSortedByCategory[_this.props.selectedCategory]) {\r\n var subGroup = _this.props.productSortedByCategory[_this.props.selectedCategory][key];\r\n data.push({ name: subGroup.title, y: +subGroup[_this.state.chartQuantifier].toFixed(2) });\r\n }\r\n var ref = _this;\r\n var chartOptions = {\r\n chart: {\r\n type: 'pie',\r\n backgroundColor: '#000',\r\n className: 'highchart-container',\r\n style: {\r\n fontColor: '#fff'\r\n }\r\n },\r\n credits: {\r\n enabled: false\r\n },\r\n plotOptions: {\r\n pie: {\r\n animation: {\r\n duration: 750,\r\n easing: 'easeOutQuad'\r\n },\r\n shadow: false,\r\n borderWidth: 0,\r\n center: ['50%', '50%'],\r\n cursor: 'pointer',\r\n showInLegend: true,\r\n dataLabels: {\r\n enabled: true,\r\n // inside: true,\r\n align: 'center',\r\n distance: -15,\r\n crop: false,\r\n borderWidth: 0,\r\n style: {\r\n color: 'white',\r\n fontSize: '10px',\r\n },\r\n formatter: function () {\r\n var self = this;\r\n if (ref.state.chartQuantifier === 'revenue') {\r\n return self.point.y + ' ' + ref.props.currencyCode;\r\n }\r\n return self.point.y;\r\n }\r\n },\r\n colors: [\r\n '#FF1529',\r\n '#FF961B',\r\n '#F4CE00',\r\n '#7CB43C',\r\n '#708739',\r\n '#5B3716',\r\n '#FF961B',\r\n '#8A29EA',\r\n '#18D43F',\r\n '#FDFD15',\r\n '#DDA300',\r\n '#1A82DE',\r\n ]\r\n }\r\n },\r\n legend: {\r\n align: 'left',\r\n layout: 'vertical',\r\n verticalAlign: 'top',\r\n x: 0,\r\n y: 0,\r\n margin: 0,\r\n itemStyle: {\r\n color: '#fff',\r\n fontSize: '11px',\r\n },\r\n itemMarginBottom: 5,\r\n },\r\n title: {\r\n text: '',\r\n style: {\r\n color: '#fff'\r\n }\r\n },\r\n series: [{\r\n animation: {\r\n duration: 750,\r\n easing: 'easeOutQuad'\r\n },\r\n name: '',\r\n size: '100%',\r\n // innerSize: '55%',\r\n data: data\r\n }]\r\n };\r\n var chartOptionsDesktop = {\r\n chart: {\r\n type: 'pie',\r\n backgroundColor: '#000',\r\n className: 'highchart-container',\r\n style: {\r\n fontColor: '#fff'\r\n }\r\n },\r\n credits: {\r\n enabled: false\r\n },\r\n plotOptions: {\r\n pie: {\r\n animation: {\r\n duration: 750,\r\n easing: 'easeOutQuad'\r\n },\r\n shadow: false,\r\n borderWidth: 0,\r\n center: ['50%', '50%'],\r\n cursor: 'pointer',\r\n showInLegend: true,\r\n dataLabels: {\r\n enabled: true,\r\n inside: true,\r\n softConnector: false,\r\n borderWidth: 0,\r\n shadow: false,\r\n style: {\r\n color: '#fff'\r\n },\r\n formatter: function () {\r\n var self = this;\r\n if (ref.state.chartQuantifier === 'revenue') {\r\n return self.point.y + ' ' + ref.props.currencyCode;\r\n }\r\n return self.point.y;\r\n }\r\n },\r\n colors: [\r\n '#FF1529',\r\n '#FF961B',\r\n '#F4CE00',\r\n '#7CB43C',\r\n '#708739',\r\n '#5B3716',\r\n '#FF961B',\r\n '#8A29EA',\r\n '#18D43F',\r\n '#FDFD15',\r\n '#DDA300',\r\n '#1A82DE',\r\n ]\r\n }\r\n },\r\n legend: {\r\n align: 'left',\r\n layout: 'vertical',\r\n verticalAlign: 'top',\r\n x: 0,\r\n y: 0,\r\n itemStyle: {\r\n color: '#fff',\r\n fontSize: '12px',\r\n paddingBottom: '5px',\r\n }\r\n },\r\n title: {\r\n text: '',\r\n style: {\r\n color: '#fff'\r\n }\r\n },\r\n series: [{\r\n animation: {\r\n duration: 750,\r\n easing: 'easeOutQuad'\r\n },\r\n name: '',\r\n size: '85%',\r\n innerSize: '55%',\r\n data: data\r\n }]\r\n };\r\n _this.setState({\r\n chartOptions: chartOptions,\r\n chartOptionsDesktop: chartOptionsDesktop,\r\n initialized: true\r\n });\r\n };\r\n return _this;\r\n }\r\n ChartSummaryHighcharts.prototype.componentDidMount = function () {\r\n var _this = this;\r\n if ((!this.state.initialized && this.props.selectedCategory) && Object.keys(this.props.productSortedByCategory).length) {\r\n setTimeout(function () { return _this.drawChart(); }, 200);\r\n }\r\n };\r\n ChartSummaryHighcharts.prototype.componentDidUpdate = function (prevProps) {\r\n var _this = this;\r\n if ((this.props.selectedCategory !== prevProps.selectedCategory)) {\r\n setTimeout(function () { return _this.drawChart(); }, 200);\r\n }\r\n else if (this.props.orderId !== prevProps.orderId) {\r\n setTimeout(function () { return _this.drawChart(); }, 200);\r\n }\r\n };\r\n ChartSummaryHighcharts.prototype.toggleQuantitfier = function () {\r\n var _this = this;\r\n var chartQuantifier = this.state.chartQuantifier === 'quantity' ? 'revenue' : 'quantity';\r\n this.setState({ chartQuantifier: chartQuantifier }, function () {\r\n _this.drawChart();\r\n });\r\n };\r\n ChartSummaryHighcharts.prototype.render = function () {\r\n var _this = this;\r\n return (React.createElement(React.Fragment, null,\r\n React.createElement(\"div\", { className: \"mobile-only\", style: { width: '100%', height: '100%' } },\r\n React.createElement(HighchartsReact, { highcharts: Highcharts, options: this.state.chartOptions, className: 'dkjsdekjs' })),\r\n React.createElement(\"div\", { className: \"desktop-only\", style: { width: '100%', height: '100%' } },\r\n React.createElement(HighchartsReact, { highcharts: Highcharts, options: this.state.chartOptionsDesktop, className: 'dkjsdekjs' })),\r\n React.createElement(\"div\", { className: \"dashboard-chart__toggler\" },\r\n React.createElement(\"div\", { className: \"a-form-control a-form-control-toggle\" },\r\n React.createElement(\"div\", { className: \"a-form-control-toggle__option a-form-control-toggle__option--left\" }, \"Quantity\"),\r\n React.createElement(\"div\", { className: \"a-form-control-toggle__control\" },\r\n React.createElement(\"input\", { type: \"checkbox\", checked: this.state.chartQuantifier === 'revenue', className: \"a-form-control-toggle__checkbox\", onChange: function () { return _this.toggleQuantitfier(); } }),\r\n React.createElement(\"label\", { className: \"a-form-control-toggle__knob\" })),\r\n React.createElement(\"div\", { className: \"a-form-control-toggle__option a-form-control-toggle__option--right\" }, \"Amount\")))));\r\n };\r\n return ChartSummaryHighcharts;\r\n}(Component));\r\nexport { ChartSummaryHighcharts };\r\nexport default ChartSummaryHighcharts;\r\n//# sourceMappingURL=ChartSummaryHighcharts.js.map","import { __assign, __values } from \"tslib\";\r\nimport { mapMoloItems } from '../models/MoloItem';\r\nimport { uniq } from 'lodash';\r\nexport function getProductCategories(orderlines, dividers) {\r\n var e_1, _a;\r\n var groupings = {};\r\n if (!orderlines.length) {\r\n return {};\r\n }\r\n var _loop_1 = function (i) {\r\n var divider = dividers[i];\r\n var _loop_2 = function (key_1) {\r\n var orderline = orderlines[key_1];\r\n if (!groupings[divider.id]) {\r\n groupings[divider.id] = {};\r\n }\r\n if (divider.id !== 'sustainability') {\r\n var linesWith = orderlines.filter(function (line) {\r\n return line[divider.valueKey] === orderline[divider.valueKey];\r\n });\r\n if (linesWith.length) {\r\n groupings[divider.id][orderline[divider.valueKey]] = {\r\n orderLines: linesWith,\r\n title: divider.id === 'collection' ? orderline[divider.labelKey].toUpperCase() : orderline[divider.labelKey],\r\n value: orderline[divider.valueKey],\r\n colorBlocked: orderline.colorBlocked || false,\r\n quantity: ((groupings[divider.id][orderline[divider.valueKey]] && groupings[divider.id][orderline[divider.valueKey]].quantity) || 0) + orderline.quantity,\r\n revenue: ((groupings[divider.id][orderline[divider.valueKey]] && groupings[divider.id][orderline[divider.valueKey]].revenue) || 0) + orderline.amount,\r\n salesOptions: 0,\r\n };\r\n }\r\n }\r\n else {\r\n var valueKey_1 = null;\r\n console.log('bolaresen valueKey ' + valueKey_1);\r\n if (orderline.organic == true)\r\n valueKey_1 = 'organic';\r\n if (orderline.ecovero == true)\r\n valueKey_1 = 'ecovero';\r\n if (orderline.recycled == true)\r\n valueKey_1 = 'recycled';\r\n if (orderline.oekotex !== '')\r\n valueKey_1 = 'oekoTex';\r\n if (orderline.ocsno !== '')\r\n valueKey_1 = 'ocs_100';\r\n if (orderline.grsno !== '')\r\n valueKey_1 = 'grs';\r\n if (orderline.gots !== '')\r\n valueKey_1 = 'gots';\r\n if (valueKey_1 == null) {\r\n console.log('bolaresen valueKey nothing', orderline);\r\n }\r\n else {\r\n console.log('bolaresen valueKey 2 ' + valueKey_1, orderline);\r\n }\r\n if (valueKey_1) {\r\n var linesWith = orderlines.filter(function (line) {\r\n if (valueKey_1 === 'gots') {\r\n if (line.gots !== '')\r\n return true;\r\n }\r\n if (valueKey_1 === 'oekoTex') {\r\n if (line.oekotex !== '')\r\n return true;\r\n }\r\n if (valueKey_1 === 'recycled') {\r\n if (line.recycled)\r\n return true;\r\n }\r\n if (valueKey_1 === 'organic') {\r\n if (line.organic)\r\n return true;\r\n }\r\n if (valueKey_1 === 'ecovero') {\r\n if (line.ecovero)\r\n return true;\r\n }\r\n if (valueKey_1 === 'ocs_100') {\r\n if (line.OCSno !== '')\r\n return true;\r\n }\r\n if (valueKey_1 === 'grs') {\r\n if (line.grsno)\r\n return true;\r\n }\r\n return false;\r\n });\r\n if (linesWith.length) {\r\n groupings[divider.id][valueKey_1] = {\r\n orderLines: linesWith,\r\n title: valueKey_1.toUpperCase(),\r\n value: valueKey_1,\r\n colorBlocked: orderline.colorBlocked || false,\r\n quantity: ((groupings[divider.id][valueKey_1] && groupings[divider.id][valueKey_1].quantity) || 0) + orderline.quantity,\r\n revenue: ((groupings[divider.id][valueKey_1] && groupings[divider.id][valueKey_1].revenue) || 0) + orderline.amount,\r\n salesOptions: 0,\r\n };\r\n }\r\n }\r\n }\r\n };\r\n for (var key_1 in orderlines) {\r\n _loop_2(key_1);\r\n }\r\n };\r\n for (var i in dividers) {\r\n _loop_1(i);\r\n }\r\n for (var groupKey in groupings) {\r\n for (var key in groupings[groupKey]) {\r\n var grouped = {};\r\n var orderLines = groupings[groupKey][key].orderLines;\r\n try {\r\n for (var orderLines_1 = (e_1 = void 0, __values(orderLines)), orderLines_1_1 = orderLines_1.next(); !orderLines_1_1.done; orderLines_1_1 = orderLines_1.next()) {\r\n var orderLine = orderLines_1_1.value;\r\n var key_2 = String(orderLine.masterId + orderLine.colorCode);\r\n if (!grouped[key_2]) {\r\n grouped[key_2] = [];\r\n }\r\n grouped[key_2].push(orderLine);\r\n }\r\n }\r\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n finally {\r\n try {\r\n if (orderLines_1_1 && !orderLines_1_1.done && (_a = orderLines_1.return)) _a.call(orderLines_1);\r\n }\r\n finally { if (e_1) throw e_1.error; }\r\n }\r\n groupings[groupKey][key]['salesOptions'] = Object.keys(grouped).length;\r\n }\r\n }\r\n return groupings;\r\n}\r\nexport function getDeliveryWindows(orderLines) {\r\n var deliveryWindows = [];\r\n var windows = {};\r\n for (var i in orderLines) {\r\n windows[orderLines[i].deliveryCode] = {\r\n shippingDate: orderLines[i].deliveryshiptmentdate,\r\n deliveryCode: orderLines[i].deliveryCode,\r\n delivreryShortdescription: orderLines[i].delivreryshortdescription,\r\n };\r\n }\r\n for (var i in windows) {\r\n deliveryWindows.push(windows[i]);\r\n }\r\n return deliveryWindows;\r\n}\r\nexport function groupSimilarColors(orderLines) {\r\n var grouped = {};\r\n var sizes = {};\r\n for (var i in orderLines) {\r\n var orderline = orderLines[i];\r\n var masterid = orderline.masterid;\r\n var colorcode = orderline.colorcode;\r\n if (grouped[masterid + colorcode]) {\r\n var q = +grouped[masterid + colorcode].quantity + +orderline.quantity;\r\n grouped[masterid + colorcode].quantity = q;\r\n grouped[masterid + colorcode]['orderLines'].push(__assign({}, orderline));\r\n }\r\n else {\r\n grouped[masterid + colorcode] = orderline;\r\n grouped[masterid + colorcode]['orderLines'] = [__assign({}, orderline)];\r\n }\r\n if (!sizes[masterid + colorcode]) {\r\n sizes[masterid + colorcode] = [];\r\n }\r\n sizes[masterid + colorcode].push({\r\n sizename: orderline.sizename,\r\n quantity: orderline.quantity,\r\n price: orderline.whp,\r\n });\r\n }\r\n var g = [];\r\n for (var key in grouped) {\r\n var line = grouped[key];\r\n var q = 0;\r\n for (var delta in line['orderLines']) {\r\n q = q + line['orderLines'][delta].quantity;\r\n }\r\n line.quantity = q;\r\n g.push(line);\r\n }\r\n var sorted = g.sort(function (a, b) { return (a.masterid > b.masterid) ? 1 : -1; });\r\n return sorted;\r\n}\r\nexport function getSizes(orderLines) {\r\n var grouped = {};\r\n var sizes = {};\r\n for (var i in orderLines) {\r\n var orderline = orderLines[i];\r\n var masterid = orderline.masterid;\r\n var colorcode = orderline.colorcode;\r\n if (!sizes[masterid + colorcode]) {\r\n sizes[masterid + colorcode] = [];\r\n }\r\n sizes[masterid + colorcode].push({\r\n sizename: orderline.sizename,\r\n quantity: orderline.quantity,\r\n price: orderline.whp,\r\n });\r\n }\r\n return sizes;\r\n}\r\nexport function getRRPMap(moloItems) {\r\n var rrpMap = {};\r\n for (var key in moloItems) {\r\n var items = mapMoloItems(moloItems[key]);\r\n rrpMap[items[0].masterId + items[0].colorCode] = uniq(items.map(function (item) { return item.msrp; }));\r\n }\r\n return rrpMap;\r\n}\r\nexport function getAllSizes(moloItems, sizes) {\r\n var allSizes = {};\r\n for (var key in moloItems) {\r\n var items = mapMoloItems(moloItems[key]);\r\n if (!allSizes[items[0].masterId + items[0].colorCode]) {\r\n allSizes[items[0].masterId + items[0].colorCode] = [];\r\n }\r\n var _loop_3 = function (i) {\r\n var item = items[i];\r\n var quantity = 0;\r\n if (sizes[items[0].masterId + items[0].colorCode]) {\r\n var found = sizes[items[0].masterId + items[0].colorCode].find(function (i) {\r\n return i.sizename === item.sizeName;\r\n });\r\n if (!!found) {\r\n quantity = found.quantity;\r\n }\r\n }\r\n allSizes[items[0].masterId + items[0].colorCode].push({\r\n sizename: item.sizeName,\r\n quantity: quantity,\r\n price: item.whp,\r\n });\r\n };\r\n for (var i in items) {\r\n _loop_3(i);\r\n }\r\n }\r\n return allSizes;\r\n}\r\nexport function getGroupedMoloItems(data) {\r\n // IgroupedItems\r\n var moloItems = {};\r\n for (var key in data) {\r\n var item = data[key];\r\n if (!moloItems[item.masterno + item.colorcode]) {\r\n moloItems[item.masterno + item.colorcode] = [];\r\n }\r\n moloItems[item.masterno + item.colorcode].push(item);\r\n }\r\n return moloItems;\r\n}\r\n//# sourceMappingURL=DashboardHelper.js.map","import { clone } from 'lodash';\r\n;\r\nexport function checkMonthGaps(months, data, monthNames, deliveryWindows) {\r\n var newMonths = [];\r\n deliveryWindows.sort(function compare(a, b) {\r\n var dateA = new Date(a.shippingDate);\r\n var dateB = new Date(b.shippingDate);\r\n return dateA - dateB;\r\n });\r\n for (var i in months) {\r\n var month = months[i];\r\n var currentMonth = data[month];\r\n var nextMonth = data[months[+i + 1]];\r\n var diff = 0;\r\n if (typeof nextMonth !== 'undefined') {\r\n diff = monthsDiff(new Date(currentMonth.shippingDate), new Date(nextMonth.shippingDate));\r\n }\r\n newMonths.push(month);\r\n var newMonthDate = new Date(currentMonth.shippingDate);\r\n var newMonthYear = newMonthDate.getFullYear();\r\n for (var y = 0; y < diff; y++) {\r\n var monthNumber = newMonthDate.getMonth() + y + 1;\r\n var newMonth = monthNames[monthNumber % 12];\r\n if (monthNumber % 12 === 0) {\r\n newMonthYear = newMonthYear + 1;\r\n }\r\n var label = newMonth + ' ' + newMonthYear;\r\n newMonths.push(label);\r\n }\r\n }\r\n return newMonths;\r\n}\r\nexport function addMinmumMonths(months, data, monthNames, deliveryWindows) {\r\n var minMonths = 6;\r\n deliveryWindows.sort(function compare(a, b) {\r\n var dateA = new Date(a.shippingDate);\r\n var dateB = new Date(b.shippingDate);\r\n return dateA - dateB;\r\n });\r\n var firstMonth = deliveryWindows[0].shippingDate;\r\n var lastMonth = deliveryWindows[deliveryWindows.length - 1].shippingDate;\r\n var reneDiff = (monthsDiff(new Date(firstMonth), new Date(lastMonth)) + 1);\r\n if (months.length === 1) {\r\n // Add at least the minimum amount of months\r\n // to the calendar.\r\n if (months.length < minMonths) {\r\n var monthsToAdd = minMonths - months.length;\r\n var newMonthDate = new Date(deliveryWindows[deliveryWindows.length - 1].shippingDate);\r\n // @ts-ignore\r\n var nmy = newMonthDate.getFullYear();\r\n for (var y = 0; y < monthsToAdd; y++) {\r\n var monthNumber = newMonthDate.getMonth() + y + 1;\r\n var newMonth = monthNames[monthNumber % 12];\r\n if (monthNumber % 12 === 0) {\r\n nmy = nmy + 1;\r\n }\r\n var label = newMonth + ' ' + nmy;\r\n if (months.indexOf(label) === -1) {\r\n months.push(label);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n var newMonths = [];\r\n var start = new Date(deliveryWindows[0].shippingDate);\r\n var nextMonth = start;\r\n if (reneDiff < minMonths) {\r\n reneDiff = minMonths;\r\n }\r\n for (var y = 0; y < reneDiff; y++) {\r\n var otherClone = clone(nextMonth);\r\n var nmy = otherClone.getFullYear();\r\n var monthNumber = clone(otherClone).getMonth();\r\n var newMonth = monthNames[monthNumber % 12];\r\n var label = newMonth + ' ' + nmy;\r\n if (newMonths.indexOf(label) === -1) {\r\n newMonths.push(label);\r\n }\r\n // Add it.\r\n nextMonth = new Date(otherClone.setMonth(clone(otherClone).getMonth() + 1, 1));\r\n }\r\n months = newMonths;\r\n }\r\n return months;\r\n}\r\nexport function monthsDiff(d1, d2) {\r\n var date1 = new Date(d1);\r\n var date2 = new Date(d2);\r\n var years = yearsDiff(d1, d2);\r\n var months = (years * 12) + (date2.getMonth() - date1.getMonth());\r\n return months;\r\n}\r\nexport function yearsDiff(d1, d2) {\r\n var date1 = new Date(d1);\r\n var date2 = new Date(d2);\r\n var yearsDiff = date2.getFullYear() - date1.getFullYear();\r\n return yearsDiff;\r\n}\r\nexport function positionDrops(orderDrops, months) {\r\n var drops = orderDrops;\r\n var dropsSorted = {};\r\n for (var i in months) {\r\n var month = months[i];\r\n var dropsSortedByPosition = { 1: [], 2: [], 3: [], 4: [], 5: [] };\r\n dropsSorted[month] = dropsSortedByPosition;\r\n if (drops[month]) {\r\n var dropsForMonth = drops[month];\r\n var y = new Date(dropsForMonth[0].shippingDate).getFullYear().toString();\r\n var m = new Date(dropsForMonth[0].shippingDate).getMonth();\r\n var weekcount = getWeekCount(y, m);\r\n var weeksInMonth = getWeeksInMonth(y, m);\r\n // const numberOfWeeks = weekcount[1] - weekcount[0];\r\n for (var key in dropsForMonth) {\r\n var drop = dropsForMonth[key];\r\n var weekNumber = getWeekNumber(new Date(drop.shippingDate));\r\n // Total edge case.\r\n if (weekNumber === 1 && weekcount[1] === 53) {\r\n weekNumber = 53;\r\n }\r\n var position = weeksInMonth - (weekcount[1] - weekNumber) + 1;\r\n drop.position = position;\r\n if (dropsSortedByPosition && !dropsSortedByPosition[drop.position]) {\r\n dropsSortedByPosition[drop.position] = [];\r\n }\r\n dropsSortedByPosition[drop.position].push(drop);\r\n }\r\n dropsSorted[month] = dropsSortedByPosition;\r\n }\r\n }\r\n return dropsSorted;\r\n}\r\nexport function getWeekCount(year, month) {\r\n // // month_number is in the range 1..\r\n year = year || new Date().getFullYear();\r\n var yearStart = new Date(year, 0, 1); // 1st Jan of the Year\r\n var first_day_of_month = new Date(year, month, 1);\r\n var first_week_number = Math.ceil((((first_day_of_month - yearStart) / 86400000) + yearStart.getDay() + 1) / 7);\r\n var last_day_of_month = new Date(year, month + 1, 0); // Last date of the Month\r\n var last_week_number = Math.ceil((((last_day_of_month - yearStart) / 86400000) + yearStart.getDay() + 1) / 7);\r\n return [first_week_number, last_week_number];\r\n}\r\nfunction getWeeksInMonth(year, month_number) {\r\n // month_number is in the range 1..12\r\n var firstOfMonth = new Date(year, month_number - 1, 1);\r\n var lastOfMonth = new Date(year, month_number, 0);\r\n var used = firstOfMonth.getDay() + 6 + lastOfMonth.getDate();\r\n return Math.ceil(used / 7);\r\n}\r\nexport function getWeekNumber(d) {\r\n // Copy date so don't modify original\r\n d = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));\r\n // Set to nearest Thursday: current date + 4 - current day number\r\n // Make Sunday's day number 7\r\n d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay() || 7));\r\n // Get first day of year\r\n var yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));\r\n // Calculate full weeks to nearest Thursday\r\n var weekNo = Math.ceil((((d - yearStart) / 86400000) + 1) / 7);\r\n return weekNo;\r\n}\r\nexport function formatDate(dateObj, format) {\r\n if (!isValidDate(dateObj)) {\r\n return 'Invalid Date';\r\n }\r\n var day = pad(dateObj.getDate().toString());\r\n var month = pad((dateObj.getMonth() + 1).toString());\r\n var year = dateObj.getFullYear().toString();\r\n switch (format) {\r\n case 'YYYY-MM-DD':\r\n return year + '-' + month + '-' + day;\r\n case 'DD.MM.YYYY':\r\n return day + '.' + month + '.' + year;\r\n default:\r\n return day + '/' + month + ' - ' + year;\r\n }\r\n}\r\nexport function isValidDate(dateObj) {\r\n return dateObj instanceof Date && !isNaN(dateObj.getTime()) && new Date().getFullYear().toString().length === 4;\r\n}\r\nexport function pad(n) {\r\n return n < 10 ? '0' + n : n;\r\n}\r\n//# sourceMappingURL=deliveryWindowsHelper.js.map","import { __extends } from \"tslib\";\r\nimport React, { Component } from 'react';\r\nimport { FaPen } from 'react-icons/fa';\r\nimport { cloneDeep } from 'lodash';\r\nimport { checkMonthGaps, positionDrops, formatDate, addMinmumMonths } from '../utils/deliveryWindowsHelper';\r\nimport { ContextMenu, Icon, Menu, MenuItem } from \"@blueprintjs/core\";\r\nimport { TweenLite } from \"gsap\";\r\nvar DeliveryWindows = /** @class */ (function (_super) {\r\n __extends(DeliveryWindows, _super);\r\n function DeliveryWindows(props) {\r\n var _this = _super.call(this, props) || this;\r\n _this.state = {\r\n months: [],\r\n data: {},\r\n drops: {},\r\n deliveryWindows: [],\r\n showLeftArrow: false,\r\n showRightArrow: true,\r\n showArrows: false,\r\n arrowsInitialized: false,\r\n monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\r\n };\r\n _this.container = React.createRef();\r\n _this.handleResize = function () {\r\n if (_this.container.current) {\r\n if (+_this.container.current.scrollWidth > +_this.container.current.clientWidth && !_this.state.showArrows) {\r\n _this.setState({ showArrows: true });\r\n }\r\n else {\r\n if (_this.state.showArrows &&\r\n +_this.container.current.scrollWidth === +_this.container.current.clientWidth) {\r\n _this.setState({ showArrows: false });\r\n }\r\n }\r\n }\r\n };\r\n _this.onClickFilterGroup = function (drop) {\r\n _this.props.onClickFilterGroup('deliverywindows', {\r\n value: drop.deliveryCode\r\n });\r\n };\r\n _this.showContextMenu = function (e, drop) {\r\n // must prevent default to cancel parent's context menu\r\n e.preventDefault();\r\n // invoke static API, getting coordinates from mouse event\r\n ContextMenu.show(React.createElement(Menu, null,\r\n React.createElement(MenuItem, { icon: \"list-detail-view\", text: \"View items\", onClick: function (e) { return _this.onClickFilterGroup(drop); } }),\r\n !_this.props.hideEditLink && !drop.shipped && React.createElement(MenuItem, { className: \"hide-on-mobile\", icon: \"calendar\", text: \"Change shipping date\", onClick: function () { return _this.onClickDrop(drop); } })), { left: e.clientX, top: e.clientY }, function () { return _this.setState({ isContextMenuOpen: false }); });\r\n // indicate that context menu is open so we can add a CSS class to this element\r\n _this.setState({ isContextMenuOpen: true });\r\n };\r\n _this.scrollLeftRight = function (direction) {\r\n if (_this.container.current) {\r\n if (direction === 'left') {\r\n _this.container.current.scrollLeft -= _this.container.current.scrollWidth;\r\n }\r\n if (direction === 'right') {\r\n _this.container.current.scrollLeft += _this.container.current.scrollWidth;\r\n }\r\n }\r\n };\r\n _this.handleScroll = function (e) {\r\n var scrollLeft = e.target.scrollLeft;\r\n if (scrollLeft > 0) {\r\n _this.setState({ showLeftArrow: true });\r\n }\r\n if (scrollLeft === 0) {\r\n _this.setState({ showLeftArrow: false });\r\n }\r\n };\r\n _this.box = null;\r\n _this.t = null;\r\n _this.myTween = null;\r\n return _this;\r\n }\r\n DeliveryWindows.prototype.componentDidMount = function () {\r\n if (this.props.deliveryWindows) {\r\n this.setupMonths(this.props.deliveryWindows);\r\n }\r\n if (this.container.current) {\r\n if (+this.container.current.scrollWidth > +this.container.current.clientWidth) {\r\n this.setState({ showArrows: true, arrowsInitialized: true });\r\n }\r\n }\r\n window.addEventListener('resize', this.handleResize);\r\n };\r\n DeliveryWindows.prototype.componentDidUpdate = function (prevProps) {\r\n if (prevProps.deliveryWindows !== this.props.deliveryWindows) {\r\n this.setupMonths(this.props.deliveryWindows);\r\n }\r\n if (!this.state.arrowsInitialized && this.container.current) {\r\n if (+this.container.current.scrollWidth > +this.container.current.clientWidth) {\r\n this.t = TweenLite.to(this.box, 1, { duration: 1, opacity: 1, y: 0, stagger: 0.25 });\r\n this.setState({ showArrows: true, arrowsInitialized: true });\r\n }\r\n }\r\n };\r\n DeliveryWindows.prototype.setupMonths = function (deliveryWindows) {\r\n var _this = this;\r\n deliveryWindows.sort(function compare(a, b) {\r\n var dateA = new Date(a.shippingDate);\r\n var dateB = new Date(b.shippingDate);\r\n return dateA - dateB;\r\n });\r\n // let months = this.state.months;\r\n var months = [];\r\n var data = {};\r\n for (var i in deliveryWindows) {\r\n var delivery = deliveryWindows[i];\r\n var date = new Date(delivery.shippingDate);\r\n var year = date.getFullYear();\r\n var month = this.state.monthNames[date.getMonth()];\r\n var label = month + ' ' + year;\r\n if (months.indexOf(label) === -1) {\r\n months.push(label);\r\n // @ts-ignore\r\n data[label] = [delivery];\r\n }\r\n }\r\n ;\r\n var newMonths = checkMonthGaps(months, data, this.state.monthNames, deliveryWindows);\r\n var newMonthsWithMinimumMonths = addMinmumMonths(cloneDeep(newMonths), data, this.state.monthNames, deliveryWindows);\r\n this.setState({\r\n months: newMonthsWithMinimumMonths,\r\n data: data,\r\n }, function () {\r\n _this.setupDrops();\r\n });\r\n };\r\n DeliveryWindows.prototype.setupDrops = function () {\r\n var drops = {};\r\n for (var i in this.props.deliveryWindows) {\r\n var delivery = this.props.deliveryWindows[i];\r\n var date = new Date(delivery.shippingDate);\r\n var year = date.getFullYear();\r\n var month = this.state.monthNames[date.getMonth()];\r\n var label = month + ' ' + year;\r\n // @ts-ignore\r\n if (!drops[label]) {\r\n // @ts-ignore\r\n drops[label] = [];\r\n }\r\n // @ts-ignore\r\n drops[label].push({\r\n date: date,\r\n shippingDate: new Date(delivery.shippingDate),\r\n shippingFrom: new Date(delivery.shippingFrom),\r\n shippingdateVisual: formatDate(new Date(delivery.shippingDate)),\r\n deliveryCode: delivery.deliveryCode,\r\n delivreryShortdescription: delivery.delivreryShortdescription,\r\n position: 0,\r\n shipped: delivery.shipped,\r\n });\r\n }\r\n drops = positionDrops(drops, this.state.months);\r\n this.setState({ drops: drops });\r\n };\r\n DeliveryWindows.prototype.onClickDrop = function (drop) {\r\n this.props.onClickDrop(drop);\r\n };\r\n DeliveryWindows.prototype.renderDrops = function (month) {\r\n var _this = this;\r\n // @ts-ignore\r\n if (!this.state.drops[month]) {\r\n return null;\r\n }\r\n // @ts-ignore\r\n var dropsForMonth = this.state.drops[month];\r\n return Object.keys(dropsForMonth).map(function (key, $index) {\r\n var drops = dropsForMonth[key];\r\n if (!drops.length) {\r\n return null;\r\n }\r\n return React.createElement(\"div\", { className: \"delivery-windows__drop clickable\", style: { gridRowStart: $index - 1 }, key: $index }, drops.length &&\r\n drops.map(function (drop, index) {\r\n return React.createElement(\"div\", { className: \"delivery-windows__drop__item\", onClick: function (e) { return _this.showContextMenu(e, drop); }, style: { gridRow: drop.position }, key: \"\".concat(drop.deliveryCode, \"/\").concat(index) },\r\n React.createElement(\"p\", { className: \"delivery-windows__drop-header\" }, drop.deliveryCode === 'specdate' ? 'Shipping Date' : drop.deliveryCode),\r\n React.createElement(\"p\", { className: \"delivery-windows__drop-shippingdate\" }, drop.shippingdateVisual),\r\n !_this.props.hideEditLink &&\r\n React.createElement(\"p\", { className: \"delivery-windows__change-link\" },\r\n React.createElement(\"span\", null, !drop.shipped ? 'Change shipping date' : 'View items'),\r\n !drop.shipped && React.createElement(\"span\", { className: \"icon\" },\r\n React.createElement(FaPen, null))),\r\n drop.shipped &&\r\n React.createElement(\"span\", { className: \"item-blocked\" }, \"Shipped\"));\r\n }));\r\n });\r\n };\r\n DeliveryWindows.prototype.renderMonths = function () {\r\n var _this = this;\r\n return this.state.months.map(function (month, $index) {\r\n return (React.createElement(\"div\", { className: \"delivery-windows__month\", key: $index },\r\n React.createElement(\"div\", { className: \"delivery-windows__month-header\" },\r\n React.createElement(\"h2\", { className: \"delivery-windows__month-name\" }, month)),\r\n React.createElement(\"div\", { ref: function (e) { return _this.box = e; }, className: \"delivery-windows__month-days\", style: { gridTemplateRows: 'repeat(5, 1fr)' } }, _this.renderDrops(month))));\r\n });\r\n };\r\n DeliveryWindows.prototype.render = function () {\r\n var _this = this;\r\n return (React.createElement(React.Fragment, null,\r\n React.createElement(\"div\", { className: \"delivery-windows\", ref: this.container, onScroll: this.handleScroll }, this.renderMonths()),\r\n this.state.showLeftArrow && this.state.showArrows &&\r\n React.createElement(\"div\", { className: \"delivery-windows__scroll-arrow left\", onClick: function () { return _this.scrollLeftRight('left'); } },\r\n React.createElement(Icon, { icon: \"circle-arrow-left\", iconSize: 25 })),\r\n this.state.showRightArrow && this.state.showArrows &&\r\n React.createElement(\"div\", { className: \"delivery-windows__scroll-arrow right\", onClick: function () { return _this.scrollLeftRight('right'); } },\r\n React.createElement(Icon, { icon: \"circle-arrow-right\", iconSize: 25 }))));\r\n };\r\n return DeliveryWindows;\r\n}(Component));\r\nexport { DeliveryWindows };\r\nexport default DeliveryWindows;\r\n//# sourceMappingURL=DeliveryWindows.js.map","import { __read } from \"tslib\";\r\nimport React, { useState, useEffect } from 'react';\r\nimport { Modal } from './Modal';\r\nexport var EditLineDiscountMultipleModal = function (props) {\r\n var shouldHide = props.shouldHide, show = props.show, onChangeDiscountMultiple = props.onChangeDiscountMultiple;\r\n var _a = __read(useState(0), 2), lineDiscount = _a[0], setLineDiscount = _a[1];\r\n var textInput = React.createRef();\r\n var _b = __read(useState('all'), 2), action = _b[0], setAction = _b[1];\r\n useEffect(function () {\r\n textInput.current && textInput.current.focus();\r\n textInput.current && textInput.current.select();\r\n }, []);\r\n var onClickConfirm = function () {\r\n if (onChangeDiscountMultiple) {\r\n onChangeDiscountMultiple(action, lineDiscount);\r\n shouldHide();\r\n }\r\n };\r\n var onChangeValue = function (e) {\r\n setLineDiscount(e.target.value);\r\n };\r\n var renderConfirm = function () { return (React.createElement(React.Fragment, null,\r\n React.createElement(\"div\", { className: \"edit-navorder-confirm\" },\r\n React.createElement(\"h5\", { className: \"text-center\", style: { marginBottom: '40px', marginTop: '10px' } }, \"Please choose how you would like to proceed:\"),\r\n React.createElement(\"div\", { style: { padding: '20px' } },\r\n React.createElement(\"div\", { className: \"form-control\" },\r\n React.createElement(\"div\", { className: \"pretty p-default p-round\" },\r\n React.createElement(\"input\", { type: \"radio\", name: \"editNavOrderOptions\", checked: action === 'all', onChange: function () { setAction('all'); } }),\r\n React.createElement(\"div\", { className: \"state\" },\r\n React.createElement(\"label\", null,\r\n React.createElement(\"strong\", null, \"On all items:\"),\r\n \" Set discount on all items in basket\"))),\r\n React.createElement(\"div\", { className: \"pretty p-default p-round\" },\r\n React.createElement(\"input\", { type: \"radio\", name: \"editNavOrderOptions\", checked: action === 'filtered', onChange: function () { setAction('filtered'); } }),\r\n React.createElement(\"div\", { className: \"state\" },\r\n React.createElement(\"label\", null,\r\n React.createElement(\"strong\", null, \"On filtered items only:\"),\r\n \" Set discount on the filtered items only.\"))),\r\n React.createElement(\"div\", { className: \"form-control\" },\r\n React.createElement(\"label\", null, \"Discount: \"),\r\n React.createElement(\"input\", { ref: textInput, type: \"number\", name: \"salespersonNote\", value: lineDiscount, onChange: onChangeValue, placeholder: 'Line discount', max: 100, min: 0, onKeyDown: function (event) { return event.key === 'Enter' && onClickConfirm(); } }))))),\r\n React.createElement(\"div\", { className: \"delete-order-modal__footer\" },\r\n React.createElement(\"button\", { className: \"btn\", onClick: function () { return onClickConfirm(); } }, \"Update discount\"),\r\n React.createElement(\"button\", { className: \"btn\", onClick: function () { return shouldHide(); } }, \"Cancel\")))); };\r\n return (React.createElement(Modal, { children: renderConfirm(), size: 'sm', hide: shouldHide, isShowing: show, bodyClasses: 'confirm-modal', hideFooter: true }));\r\n};\r\n//# sourceMappingURL=EditLineDiscountMultipleModal.js.map","import { uniq } from 'lodash';\r\nexport function totalDiscountAmount(orderlines, discount) {\r\n if (discount === void 0) { discount = false; }\r\n var totalDiscount = 0;\r\n for (var i in orderlines) {\r\n var orderline = orderlines[i];\r\n if (orderline.linediscountamount) {\r\n totalDiscount = +totalDiscount + parseFloat(orderline.linediscountamount);\r\n }\r\n if (orderline.linediscountamount && discount === false) {\r\n discount = true;\r\n }\r\n }\r\n return totalDiscount;\r\n}\r\nexport function humanReadableLineUnitPrices(masterId, colorCode, orderlines) {\r\n var prices = [];\r\n var line = orderlines.filter(function (item) {\r\n return item.masterId === masterId && item.colorCode === colorCode;\r\n });\r\n for (var i in line) {\r\n prices.push(line[i].unitPrice);\r\n }\r\n var sorted = prices.sort(function (a, b) { return +b - (+a); });\r\n var rounded = uniq(sorted.map(function (p) { return roundAmount(+p); }));\r\n return rounded.reverse().join(\" / \");\r\n}\r\nexport function totalLineDiscountAmount(masterId, colorCode, orderlines) {\r\n var totalDiscountAmount = 0;\r\n var line = orderlines.filter(function (item) {\r\n return item.masterId === masterId && item.colorCode === colorCode;\r\n });\r\n for (var i in line) {\r\n totalDiscountAmount = totalDiscountAmount + line[i].linediscountamount;\r\n }\r\n return totalDiscountAmount;\r\n}\r\nexport function totalLineAmount(masterId, colorCode, orderlines) {\r\n var totalDiscountAmount = 0;\r\n var line = orderlines.filter(function (item) {\r\n return item.masterId === masterId && item.colorCode === colorCode;\r\n });\r\n for (var i in line) {\r\n totalDiscountAmount = totalDiscountAmount + line[i].amount;\r\n }\r\n return totalDiscountAmount;\r\n}\r\nexport function getWHPWithDiscount(whp, discount) {\r\n discount = discount || 0;\r\n return whp - (whp * (discount / 100));\r\n}\r\nexport function getSalesbookPrice(style, prices, currencyName) {\r\n if (currencyName === void 0) { currencyName = 'EUR'; }\r\n var key = style.masterId + style.colorCode;\r\n var activeSeasonPrices = prices;\r\n var output = \"\";\r\n if (key in activeSeasonPrices) {\r\n var element = activeSeasonPrices[key];\r\n if (element[\"HasDifferentialPrice\"] > 0) {\r\n var WSP = \"From \" + addZeroes(element['WHP']) + \"/\", RRP = +addZeroes(element['MSRP']) + \" \" + currencyName;\r\n output = String(WSP + RRP);\r\n }\r\n else {\r\n var WHP = addZeroes(element['WHP']), MSRP = addZeroes(element['MSRP']);\r\n output = String(WHP + '/' + MSRP + \" \" + currencyName);\r\n }\r\n }\r\n return output;\r\n}\r\nfunction addZeroes(num) {\r\n if (num != null) {\r\n num = num.toString();\r\n var value = Number(num);\r\n var res = num.split(\".\");\r\n if (num.indexOf('.') === -1) {\r\n //value = value.toFixed(2);\r\n num = value.toString();\r\n }\r\n else if (res[1].length < 3) {\r\n // value = value.toFixed(2);\r\n num = value.toString();\r\n }\r\n }\r\n return num;\r\n}\r\nexport var roundAmount = function (amount) {\r\n return amount.toLocaleString(navigator.language, { minimumFractionDigits: 2 });\r\n};\r\n//# sourceMappingURL=priceHelper.js.map","export var groupBy = function (key) { return function (array) {\r\n return array.reduce(function (objectsByKeyValue, obj) {\r\n var value = obj[key];\r\n objectsByKeyValue[value] = (objectsByKeyValue[value] || []).concat(obj);\r\n return objectsByKeyValue;\r\n }, {});\r\n}; };\r\n// export const filterByValue = (array: any[], value: string) => {\r\n// return array.filter(o =>\r\n// Object.keys(o).some(k => {\r\n// if (k === 'masterColor') {\r\n// return false;\r\n// }\r\n// if (typeof o[k] === 'string' && o[k].toLowerCase().includes(value.toLowerCase())) {\r\n// return true\r\n// }\r\n// if (typeof o[k] === 'number' && o[k].toString().includes(value)) {\r\n// return true\r\n// }\r\n// return false;\r\n// }));\r\n// }\r\nexport var filterByValue = function (array, value, includes) {\r\n return array.filter(function (o) {\r\n return Object.keys(o).some(function (k) {\r\n if (includes && includes.length && includes.indexOf(k) === -1)\r\n return false;\r\n if (typeof o[k] === 'string' && o[k].toLowerCase().includes(value.toLowerCase())) {\r\n return true;\r\n }\r\n if (typeof o[k] === 'number' && o[k].toString().includes(Math.abs(+value))) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n });\r\n};\r\nexport var sortObjectByPropertyName = function (o) {\r\n var sorted = {}, key, a = [];\r\n for (key in o) {\r\n if (o.hasOwnProperty(key)) {\r\n a.push(key);\r\n }\r\n }\r\n a.sort();\r\n for (key = 0; key < a.length; key++) {\r\n sorted[a[key]] = o[a[key]];\r\n }\r\n return sorted;\r\n};\r\n//# sourceMappingURL=UtilHelper.js.map","var OrderHeader = /** @class */ (function () {\r\n function OrderHeader() {\r\n this.appOrderId = 0;\r\n this.userName = '';\r\n this.orderState = 0;\r\n this.navorderId = '';\r\n this.orderType = '';\r\n this.sellToCustomerNo = null;\r\n this.sellToCustomerName = null;\r\n this.sellToCustomerName2 = null;\r\n this.sellToAddress = null;\r\n this.sellToAddress2 = null;\r\n this.sellToCity = null;\r\n this.sellToContact = null;\r\n this.sellToPostCode = null;\r\n this.sellToCounty = null;\r\n this.sellToCountry_RegionCode = null;\r\n this.sellToPhone = null;\r\n this.sellToContactEMail = null;\r\n this.shipToCode = null;\r\n this.shipToName = null;\r\n this.shipToName2 = null;\r\n this.shipToAddress = null;\r\n this.shipToAddress2 = null;\r\n this.shipToCity = null;\r\n this.shipToContact = null;\r\n this.shipToPostCode = null;\r\n this.shipToCounty = null;\r\n this.shipToCountry_RegionCode = null;\r\n this.shipTo_Firstname = null;\r\n this.shipTo_Lastname = null;\r\n this.shippingComment = null;\r\n this.shipToEMail = null;\r\n this.shipToPhone = null;\r\n this.currencyCode = null;\r\n this.salesPersonCode = null;\r\n this.orderLinediscount = null;\r\n this.orderComment = null;\r\n this.orderAccessId = null;\r\n this.vatRegistrationNo = null;\r\n this.orderIsFinal = false;\r\n this.orderNeedsFollowUp = false;\r\n this.externalDocumentNo = null;\r\n this.salespersonNote = null;\r\n this.poOpen = null;\r\n this.poClosed = null;\r\n this.removeFreigth = false;\r\n this.navImportRef = null;\r\n this.createdUtc = null;\r\n this.removeHandlingFee = false;\r\n }\r\n OrderHeader.buildFromSalesbook = function (data) {\r\n var orderHeader = new OrderHeader();\r\n orderHeader.appOrderId = data.apporderid;\r\n orderHeader.userName = data.salesbookuser;\r\n orderHeader.orderState = data.orderstate;\r\n orderHeader.navorderId = data.navorderid;\r\n orderHeader.orderType = data.ordertype;\r\n orderHeader.sellToCustomerNo = data.selltocustomerno;\r\n orderHeader.sellToCustomerName = data.selltocustomername;\r\n orderHeader.sellToCustomerName2 = data.selltocustomername2;\r\n orderHeader.sellToAddress = data.selltoaddress;\r\n orderHeader.sellToAddress2 = data.selltoaddress2;\r\n orderHeader.sellToCity = data.selltocity;\r\n orderHeader.sellToContact = data.selltocontact;\r\n orderHeader.sellToPostCode = data.selltopostcode;\r\n orderHeader.sellToCounty = data.selltocounty;\r\n orderHeader.sellToCountry_RegionCode = data.selltocountry_regioncode;\r\n orderHeader.sellToPhone = data.selltophone;\r\n orderHeader.sellToPhone = data.selltophone;\r\n orderHeader.sellToContactEMail = data.selltocontactemail;\r\n orderHeader.shipToCode = data.shiptocode;\r\n orderHeader.shipToName = data.shiptoname;\r\n orderHeader.shipToName2 = data.shiptoname2;\r\n orderHeader.shipToAddress = data.shiptoaddress;\r\n orderHeader.shipToAddress2 = data.shiptoaddress2;\r\n orderHeader.shipToCity = data.shiptocity;\r\n orderHeader.shipToContact = data.shiptocontact;\r\n orderHeader.shipToPostCode = data.shipToPostCode;\r\n orderHeader.shipToCounty = data.shiptocounty;\r\n orderHeader.shipToCountry_RegionCode = data.shiptocountry_regioncode;\r\n orderHeader.shipTo_Firstname = data.shipto_firstname;\r\n orderHeader.shipTo_Lastname = data.shipto_lastname;\r\n orderHeader.shippingComment = data.shippingcomment;\r\n orderHeader.shipToEMail = data.shiptoemail;\r\n orderHeader.shipToPhone = data.shiptophone;\r\n orderHeader.currencyCode = data.currencycode;\r\n orderHeader.salesPersonCode = data.salespersoncode;\r\n orderHeader.orderLinediscount = data.orderlinediscount;\r\n orderHeader.orderComment = data.ordercomment;\r\n orderHeader.orderAccessId = data.orderaccessid;\r\n orderHeader.vatRegistrationNo = data.vatregistrationno;\r\n orderHeader.orderIsFinal = data.orderisfinal;\r\n orderHeader.orderNeedsFollowUp = data.orderneedsfollowup;\r\n orderHeader.externalDocumentNo = data.externaldocumentno;\r\n orderHeader.salespersonNote = data.salespersonnote;\r\n orderHeader.poOpen = data.poopen;\r\n orderHeader.poClosed = data.poclosed;\r\n orderHeader.removeFreigth = data.removefreigth;\r\n orderHeader.navImportRef = data.navimportref;\r\n orderHeader.removeHandlingFee = !!data.removehandeligfee;\r\n return orderHeader;\r\n };\r\n OrderHeader.buildFromB2B = function (data) {\r\n var orderHeader = new OrderHeader();\r\n orderHeader.appOrderId = data.appOrderId;\r\n orderHeader.createdUtc = data.createdUtc;\r\n orderHeader.userName = data.salesbookuser || '';\r\n orderHeader.orderState = data.orderState;\r\n orderHeader.navorderId = data.navorderId;\r\n orderHeader.orderType = data.orderType;\r\n orderHeader.sellToCustomerNo = data.sellToCustomerNo;\r\n orderHeader.sellToCustomerName = data.sellToCustomerName;\r\n orderHeader.sellToCustomerName2 = data.sellToCustomerName2;\r\n orderHeader.sellToAddress = data.sellToAddress;\r\n orderHeader.sellToAddress2 = data.sellToAddress2;\r\n orderHeader.sellToCity = data.sellToCity;\r\n orderHeader.sellToContact = data.sellToContact;\r\n orderHeader.sellToPostCode = data.sellToPostCode;\r\n orderHeader.sellToCounty = data.selltocounty;\r\n orderHeader.sellToCountry_RegionCode = data.sellToCounty;\r\n orderHeader.sellToPhone = data.selltophone;\r\n orderHeader.sellToPhone = data.sellToPhone;\r\n orderHeader.sellToContactEMail = data.sellToContactEMail;\r\n orderHeader.shipToCode = data.shipToCode;\r\n orderHeader.shipToName = data.shipToName;\r\n orderHeader.shipToName2 = data.shipToName2;\r\n orderHeader.shipToAddress = data.shipToAddress;\r\n orderHeader.shipToAddress2 = data.shipToAddress2;\r\n orderHeader.shipToCity = data.shipToCity;\r\n orderHeader.shipToContact = data.shipToContact;\r\n orderHeader.shipToPostCode = data.shipToPostCode;\r\n orderHeader.shipToCounty = data.shipToCounty;\r\n orderHeader.shipToCountry_RegionCode = data.shipToCountry_RegionCode;\r\n orderHeader.shipTo_Firstname = data.shipTo_Firstname;\r\n orderHeader.shipTo_Lastname = data.shipTo_Lastname;\r\n orderHeader.shippingComment = data.shippingComment;\r\n orderHeader.shipToEMail = data.shipToEMail;\r\n orderHeader.shipToPhone = data.shipToPhone;\r\n orderHeader.currencyCode = data.shipToPhone;\r\n orderHeader.salesPersonCode = data.salesPersonCode;\r\n orderHeader.orderLinediscount = data.orderLinediscount;\r\n orderHeader.orderComment = data.orderComment;\r\n orderHeader.orderAccessId = data.orderAccessId;\r\n orderHeader.vatRegistrationNo = data.vatRegistrationNo;\r\n orderHeader.orderIsFinal = data.orderIsFinal;\r\n orderHeader.orderNeedsFollowUp = data.orderNeedsFollowUp;\r\n orderHeader.externalDocumentNo = data.externalDocumentNo;\r\n orderHeader.salespersonNote = data.salespersonNote;\r\n orderHeader.poOpen = data.poOpen;\r\n orderHeader.poClosed = data.poClosed;\r\n orderHeader.removeFreigth = data.removeFreigth;\r\n orderHeader.navImportRef = data.navImportRef;\r\n orderHeader.removeHandlingFee = !!data.removeHandlingFee;\r\n return orderHeader;\r\n };\r\n return OrderHeader;\r\n}());\r\nexport { OrderHeader };\r\n//# sourceMappingURL=OrderHeader.js.map","import { __assign, __extends, __values } from \"tslib\";\r\nimport React, { Component } from 'react';\r\nimport ReactToPrint from 'react-to-print';\r\n// Components.\r\nimport ProductListItem from '../ProductListItem';\r\nimport { EditLineDiscountModal } from '../EditLineDiscountModal';\r\nimport { EditLineDiscountMultipleModal } from '../EditLineDiscountMultipleModal';\r\n// Utils.\r\nimport { cloneDeep, spread, union, uniq } from 'lodash';\r\nimport { humanReadableLineUnitPrices, totalLineAmount, roundAmount } from '../utils/priceHelper';\r\nimport { mapMoloItems } from '../models/MoloItem';\r\nimport { FaList, FaTh, FaPrint, FaPercent, FaPencilAlt } from 'react-icons/fa';\r\nimport { filterByValue } from '../utils/UtilHelper';\r\nimport { StyleBean } from '../models/Beans';\r\n// const baseUrl = '/';// process.env.NODE_ENV === 'production' ? '/' : 'http://aws.molohub.com/';\r\nvar Details = /** @class */ (function (_super) {\r\n __extends(Details, _super);\r\n function Details() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.state = {\r\n showDeleteModal: false,\r\n modal: null,\r\n groupedOrderlines: [],\r\n productOverlayComponent: null,\r\n showOverlay: false,\r\n changes: {},\r\n isListView: true,\r\n showSizes: false,\r\n sizes: {},\r\n rrpMap: {},\r\n allSizes: {},\r\n showDiscount: false,\r\n showEditLineDiscountModal: false,\r\n showEditLineMultipleDiscountModal: false,\r\n searchTerm: '',\r\n showPrint: false,\r\n sortedByPriceDiffs: {},\r\n };\r\n _this.componentRef = React.createElement(\"div\", null);\r\n _this.getGroupedPrices = function () {\r\n var e_1, _a;\r\n var sortedByPriceDiffs = {};\r\n for (var i in _this.props.allSizes) {\r\n sortedByPriceDiffs[i] = [];\r\n var allItems = _this.props.allSizes[i];\r\n var allPrices = uniq(allItems.map(function (item) { return item.price; }));\r\n var _loop_1 = function (value) {\r\n var prices = allItems.filter(function (item) { return item.price === value; });\r\n sortedByPriceDiffs[i].push({\r\n currency: 'EUR',\r\n price: value,\r\n items: prices,\r\n });\r\n };\r\n try {\r\n for (var allPrices_1 = (e_1 = void 0, __values(allPrices)), allPrices_1_1 = allPrices_1.next(); !allPrices_1_1.done; allPrices_1_1 = allPrices_1.next()) {\r\n var value = allPrices_1_1.value;\r\n _loop_1(value);\r\n }\r\n }\r\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n finally {\r\n try {\r\n if (allPrices_1_1 && !allPrices_1_1.done && (_a = allPrices_1.return)) _a.call(allPrices_1);\r\n }\r\n finally { if (e_1) throw e_1.error; }\r\n }\r\n _this.setState({ sortedByPriceDiffs: sortedByPriceDiffs });\r\n }\r\n };\r\n _this.openDeleteModal = function (line) {\r\n _this.setState({\r\n showDeleteModal: true\r\n }, function () {\r\n var modal = (\r\n // this.onHide()}\r\n // content={(\r\n //
\r\n //

Remove line

\r\n //

Are you sure you want to remove this order item?

\r\n //
\r\n // \r\n // \r\n //
\r\n //
\r\n // )}\r\n // />\r\n React.createElement(\"div\", null, \"...\"));\r\n _this.setState({ showDeleteModal: true, modal: modal });\r\n });\r\n };\r\n _this.onHide = function () {\r\n _this.setState({ showDeleteModal: false, modal: null });\r\n };\r\n _this.onHideProductOverlay = function () {\r\n _this.setState({ showOverlay: false });\r\n };\r\n _this.onClickDelete = function (line) {\r\n _this.props.onClickDelete(line);\r\n _this.onHide();\r\n };\r\n _this.handleOnProductClick = function (product, line) {\r\n if (line.quantityShipped > 0 || line.colorBlocked === true)\r\n return;\r\n if (_this.props.handleOnProductClick) {\r\n _this.props.handleOnProductClick(product);\r\n }\r\n };\r\n _this.renderTableHeader = function () {\r\n return (React.createElement(\"tr\", null,\r\n React.createElement(\"td\", null),\r\n React.createElement(\"td\", null, \"Sustainability\"),\r\n React.createElement(\"td\", null, \"Quantity\"),\r\n React.createElement(\"td\", null, \"Unit price\"),\r\n _this.state.showDiscount &&\r\n React.createElement(\"td\", null,\r\n React.createElement(\"span\", null, \"Discount\"),\r\n (_this.props.order.orderHeader.orderState === 0) ?\r\n React.createElement(\"span\", { onClick: function () { return _this.setState({ showEditLineMultipleDiscountModal: true }); }, className: \"edit-pencil\" },\r\n React.createElement(FaPencilAlt, null))\r\n : null),\r\n React.createElement(\"td\", null, \"RRP\"),\r\n React.createElement(\"td\", null, \"Total\"),\r\n _this.props.order.orderHeader.orderState === 0 &&\r\n !_this.props.hideRemove &&\r\n React.createElement(\"td\", { className: \"hide-on-mobile\" })));\r\n };\r\n _this.renderTableHeaderPrint = function () {\r\n return (React.createElement(\"tr\", null,\r\n React.createElement(\"td\", null),\r\n React.createElement(\"td\", null, \"Sustainability\"),\r\n React.createElement(\"td\", null, \"Quantity\"),\r\n React.createElement(\"td\", null, \"Unit price\"),\r\n React.createElement(\"td\", null, \"RRP\"),\r\n _this.props.order && _this.props.order.orderHeader.orderLinediscount ?\r\n React.createElement(\"td\", null, \"Discount\") : null,\r\n React.createElement(\"td\", null, \"Total\"),\r\n _this.props.order.orderHeader.orderState === 0 &&\r\n React.createElement(\"td\", { className: \"hide-on-mobile\" })));\r\n };\r\n _this.getSustainability = function (item) {\r\n if (item.gots !== '')\r\n return 'GOTS';\r\n if (item.oekotex !== '')\r\n return 'OEKOTEX';\r\n if (item.ocsno != '')\r\n return 'OCS 100';\r\n if (item.ocsblended != '')\r\n return 'OCS BLENDED';\r\n if (item.recycled)\r\n return 'RECYCLED';\r\n if (item.organic)\r\n return 'ORGANIC';\r\n if (item.ecovero)\r\n return 'ECOVERO';\r\n if (item.grsno != '')\r\n return 'GRS';\r\n return null;\r\n };\r\n _this.renderTableBody = function (orderLines, showSizes, withSubtotal) {\r\n return (React.createElement(React.Fragment, null,\r\n filterByValue(orderLines, _this.state.searchTerm)\r\n .map(function (line, key) {\r\n // const imageUrl = 'https://picsum.photos/200/300';\r\n var imageUrl = _this.props.baseUrl + 'productimage/' + line.seasonCode + '/' + line.masterId + '/' + line.colorCode + '/small';\r\n return (React.createElement(React.Fragment, { key: key },\r\n React.createElement(\"tr\", null,\r\n React.createElement(\"td\", { onClick: function () { return _this.handleOnProductClick(StyleBean.build(line, 'orderLine'), line); } },\r\n React.createElement(\"div\", { className: \"details__info\" },\r\n React.createElement(\"img\", { src: imageUrl, alt: line.description, className: \"details__image\" }),\r\n React.createElement(\"div\", { className: \"details__info__data\" },\r\n React.createElement(\"span\", { className: \"item-list__item__name__id\" },\r\n line.masterId,\r\n \" \",\r\n line.description),\r\n React.createElement(\"span\", { className: \"item-list__item__color\" },\r\n line.colorCode,\r\n \" \",\r\n line.colorName)))),\r\n React.createElement(\"td\", { onClick: function () { return _this.handleOnProductClick(StyleBean.build(line, 'orderLine'), line); } }, _this.getSustainability(line)),\r\n React.createElement(\"td\", { onClick: function () { return _this.handleOnProductClick(StyleBean.build(line, 'orderLine'), line); } }, line.quantity),\r\n React.createElement(\"td\", { onClick: function () { return _this.handleOnProductClick(StyleBean.build(line, 'orderLine'), line); } }, humanReadableLineUnitPrices(line.masterId, line.colorCode, line.orderLines)),\r\n _this.state.showDiscount &&\r\n React.createElement(\"td\", null,\r\n line.linediscountpct > 0 &&\r\n React.createElement(React.Fragment, null,\r\n roundAmount(_this.totalLineDiscountAmount(line.masterId, line.colorCode)),\r\n \" ( \",\r\n line.linediscountpct,\r\n \"% )\"),\r\n (_this.props.order.orderHeader.orderState === 0) ?\r\n React.createElement(\"span\", { className: \"edit-pencil\", onClick: function () { return _this.setState({ showEditLineDiscountModal: true, selectedOrderline: line }); } },\r\n React.createElement(FaPencilAlt, null))\r\n : null),\r\n React.createElement(\"td\", { onClick: function () { return _this.handleOnProductClick(StyleBean.build(line, 'orderLine'), line); } },\r\n React.createElement(\"div\", null, _this.props.rrpMap[line.masterId + line.colorCode] ?\r\n _this.props.rrpMap[line.masterId + line.colorCode].map(function (item, key) {\r\n return (React.createElement(React.Fragment, { key: key },\r\n roundAmount(item),\r\n key + 1 !== _this.props.rrpMap[line.masterId + line.colorCode].length && React.createElement(\"span\", null, \" / \")));\r\n })\r\n : React.createElement(\"span\", { style: { visibility: 'hidden' } }, \"...\"))),\r\n React.createElement(\"td\", null,\r\n roundAmount(totalLineAmount(line.masterId, line.colorCode, line.orderLines)),\r\n \" \"),\r\n _this.props.order.orderHeader.orderState === 0 &&\r\n !_this.props.hideRemove &&\r\n React.createElement(\"td\", { className: \"hide-on-mobile center\" },\r\n line.colorBlocked !== true && line.quantityShipped < 1 && React.createElement(\"button\", { onClick: function () { return _this.props.onClickRemove && _this.props.onClickRemove(line); }, className: \"details__remove\" }, \"Remove\"),\r\n !line.colorBlocked && line.quantityShipped > 0 ?\r\n React.createElement(\"div\", { className: \"item-blocked relative\" }, \"Shipped\") : null,\r\n line.colorBlocked ?\r\n React.createElement(\"span\", { className: \"item-blocked relative\" }, \"Cancelled\") : null)),\r\n showSizes &&\r\n React.createElement(React.Fragment, { key: line.seasonCode + '/' + line.masterId + '/' + line.colorCode },\r\n React.createElement(\"tr\", null,\r\n React.createElement(\"td\", { colSpan: 7 },\r\n React.createElement(\"div\", { className: \"details__sizes\" }, _this.props.allSizes[line.masterId + line.colorCode] &&\r\n _this.props.allSizes[line.masterId + line.colorCode].map(function (size, index) {\r\n return (React.createElement(\"div\", { className: \"details__size\", key: 'allSizes' + line.masterId + line.colorCode + index },\r\n React.createElement(\"div\", { className: \"details__size__name\" }, size.sizename),\r\n React.createElement(\"div\", { className: \"details__size__quantity\" }, size.quantity)));\r\n })))))));\r\n }),\r\n _this.state.showDeleteModal && _this.state.modal));\r\n };\r\n _this.onChangeHandler = function () {\r\n _this.setState({ isListView: !_this.state.isListView });\r\n };\r\n _this.getStyleBean = function (line) {\r\n // Dirty but useful fallback.\r\n if (!_this.props.groupedMoloItems[line.masterId + line.colorCode]) {\r\n return StyleBean.build({}, 'orderLine');\r\n }\r\n var bean = StyleBean.build(mapMoloItems(_this.props.groupedMoloItems[line.masterId + line.colorCode])[0], 'moloItem');\r\n bean.currencyCode = _this.props.order.orderHeader.currencyCode || 'EUR';\r\n return bean;\r\n };\r\n _this.renderGrid = function () {\r\n return (React.createElement(\"ul\", { className: \"pl\" }, _this.props.groupedOrderlines.map(function (line, key) {\r\n return (React.createElement(React.Fragment, { key: key }, React.createElement(\"li\", { onClick: function () { return _this.handleOnProductClick(StyleBean.build(line, 'orderLine'), line); }, className: \"pl-item__wrapper\" },\r\n React.createElement(ProductListItem, { product: _this.getStyleBean(line), lazyLoadMoloMaster: true, quantityOveride: line.quantity, baseUrl: _this.props.baseUrl }),\r\n _this.state.showSizes &&\r\n React.createElement(\"div\", { className: \"details__sizes__overlay\" },\r\n React.createElement(\"div\", { className: \"details__sizes\" }, _this.props.allSizes[line.masterId + line.colorCode] &&\r\n _this.props.allSizes[line.masterId + line.colorCode].map(function (size, index) {\r\n return (React.createElement(\"div\", { className: \"details__size\", key: 'allSizes' + line.masterId + line.colorCode + index },\r\n React.createElement(\"div\", { className: \"details__size__name\" }, size.sizename),\r\n React.createElement(\"div\", { className: \"details__size__quantity\" }, size.quantity)));\r\n }))))));\r\n })));\r\n };\r\n _this.groupBy = function (key) { return function (array) {\r\n return array.reduce(function (objectsByKeyValue, obj) {\r\n var value = obj[key];\r\n objectsByKeyValue[value] = (objectsByKeyValue[value] || []).concat(obj);\r\n return objectsByKeyValue;\r\n }, {});\r\n }; };\r\n _this.totalLineDiscountAmount = function (masterId, colorCode) {\r\n var totalDiscountAmount = 0;\r\n var line = _this.props.order.orderLines.filter(function (item) {\r\n return item.masterId === masterId && item.colorCode === colorCode;\r\n });\r\n for (var i in line) {\r\n totalDiscountAmount = totalDiscountAmount + line[i].linediscountamount;\r\n }\r\n return totalDiscountAmount;\r\n };\r\n _this.renderPrint = function () {\r\n if (!_this.props.deliveryWindows.length)\r\n return null;\r\n var order = _this.props.order.orderHeader;\r\n // Group every thing by delivery windows.\r\n var groupByDeliveryCode = _this.groupBy(['deliveryCode']);\r\n var groupedByDeliveryCode = groupByDeliveryCode(_this.props.orderLines);\r\n var sortedWithGroup = {};\r\n // And then inside every delivery window, group by product group.\r\n for (var key in groupedByDeliveryCode) {\r\n var groupByProductGroup = _this.groupBy(['productGroup']);\r\n var grouped = groupByProductGroup(groupedByDeliveryCode[key]);\r\n sortedWithGroup[key] = grouped;\r\n }\r\n var sorted = _this.props.deliveryWindows.sort(function (a, b) {\r\n return new Date(a.shippingDate).getTime() - new Date(b.shippingDate).getTime();\r\n });\r\n return (React.createElement(React.Fragment, null,\r\n React.createElement(\"div\", { ref: function (el) { return (_this.componentRef = el); }, className: \"print-view\" },\r\n React.createElement(\"div\", { className: \"print-header\" },\r\n React.createElement(\"span\", null, order.sellToCustomerName),\r\n React.createElement(\"span\", null,\r\n \" | SB\",\r\n order.appOrderId),\r\n React.createElement(\"span\", null,\r\n \" | \",\r\n order.orderType),\r\n order.navImportRef &&\r\n React.createElement(\"span\", null,\r\n \"| \",\r\n order.navImportRef),\r\n order.salespersonNote &&\r\n React.createElement(\"span\", null,\r\n \"| \",\r\n order.salespersonNote),\r\n React.createElement(React.Fragment, null,\r\n React.createElement(\"div\", { className: \"grand-total print-fragment__subtotal'\" },\r\n React.createElement(\"h2\", { style: { textAlign: 'right', marginRight: '25px' } }, \"Grand Total\"),\r\n React.createElement(\"div\", { className: 'print-fragment__subtotal' },\r\n React.createElement(\"div\", { className: \"--total --right\" }),\r\n React.createElement(\"div\", { className: \"--right\" },\r\n \"Quantity: \",\r\n _this.props.order.orderTotals.noOfItems),\r\n React.createElement(\"div\", { className: \"--right\" },\r\n \"Total: \",\r\n roundAmount(_this.props.order.orderTotals.amount)))))),\r\n sorted && sorted.length && sorted.map(function (deliveryWindow, key) {\r\n var deliveryGroup = sortedWithGroup[deliveryWindow.deliveryCode];\r\n if (!deliveryGroup)\r\n return null;\r\n var values = Object.values(deliveryGroup);\r\n var isLast = (sorted.length - 1) === key;\r\n var allTheValues = spread(union)(values);\r\n var totalQuantity = allTheValues.map(function (value) { return value.quantity; }).reduce(function (a, b) { return a + b; });\r\n var total = allTheValues.map(function (value) { return value.amount; }).reduce(function (a, b) { return a + b; });\r\n var shipmentDate = deliveryGroup[Object.keys(deliveryGroup)[0]][0].deliveryshiptmentdate;\r\n return (React.createElement(\"div\", { key: key, className: \"print-fragment\" },\r\n React.createElement(\"div\", { className: \"print-fragment__header\" },\r\n React.createElement(\"span\", null, deliveryWindow.deliveryCode === 'specdate' ? 'Shipping date' : deliveryWindow.deliveryCode),\r\n React.createElement(\"span\", { className: \"--date\" }, new Date(shipmentDate).toLocaleDateString())),\r\n Object.keys(deliveryGroup).map(function (key) {\r\n var items = _this.groupSimilarColors(cloneDeep(deliveryGroup[key]));\r\n return (React.createElement(React.Fragment, { key: key },\r\n React.createElement(\"h2\", { className: 'category-name sticky__wrapper' },\r\n React.createElement(\"span\", { className: \"category-name__text\" }, key)),\r\n React.createElement(\"table\", { className: \"details striped-table\" },\r\n React.createElement(\"thead\", null, _this.renderTableHeader()),\r\n React.createElement(\"tbody\", null, _this.renderTableBody(items, true, true)))));\r\n }),\r\n React.createElement(\"div\", { className: 'print-fragment__subtotal' },\r\n React.createElement(\"div\", { className: \"--total\" }, \"Subtotal\"),\r\n React.createElement(\"div\", { className: \"--right\" },\r\n \"Quantity: \",\r\n totalQuantity),\r\n React.createElement(\"div\", { className: \"--right\" },\r\n \"Total: \",\r\n roundAmount(total)))));\r\n }))));\r\n };\r\n return _this;\r\n }\r\n Details.prototype.componentDidMount = function () {\r\n if (this.props.allSizes && Object.keys(this.props.allSizes).length) {\r\n this.getGroupedPrices();\r\n }\r\n };\r\n Details.prototype.componentDidUpdate = function (prevProps) {\r\n if (prevProps.groupedMoloItems !== this.props.groupedMoloItems ||\r\n prevProps.groupedOrderlines !== this.props.groupedOrderlines) {\r\n this.getGroupedPrices();\r\n }\r\n if (this.props.allSizes && Object.keys(this.props.allSizes).length !== Object.keys(prevProps.allSizes).length) {\r\n this.getGroupedPrices();\r\n }\r\n };\r\n Details.prototype.groupSimilarColors = function (orderLines) {\r\n var grouped = {};\r\n var sizes = {};\r\n for (var i in orderLines) {\r\n var orderline = orderLines[i];\r\n var masterid = orderline.masterId;\r\n var colorcode = orderline.colorCode;\r\n if (grouped[masterid + colorcode]) {\r\n var q = +grouped[masterid + colorcode].quantity + +orderline.quantity;\r\n grouped[masterid + colorcode].quantity = q;\r\n grouped[masterid + colorcode]['orderLines'].push(__assign({}, orderline));\r\n }\r\n else {\r\n grouped[masterid + colorcode] = orderline;\r\n grouped[masterid + colorcode]['orderLines'] = [__assign({}, orderline)];\r\n }\r\n if (!sizes[masterid + colorcode]) {\r\n sizes[masterid + colorcode] = [];\r\n }\r\n sizes[masterid + colorcode].push({ sizename: orderline.sizeName, quantity: orderline.quantity, price: orderline.whp });\r\n }\r\n // this.setState({ sizes })\r\n var g = [];\r\n for (var key in grouped) {\r\n var line = grouped[key];\r\n var q = 0;\r\n for (var delta in line['orderLines']) {\r\n q = q + line['orderLines'][delta].quantity;\r\n }\r\n line.quantity = q;\r\n g.push(line);\r\n }\r\n var sorted = g.sort(function (a, b) { return (a.masterId > b.masterId) ? 1 : -1; });\r\n return sorted;\r\n };\r\n Details.prototype.render = function () {\r\n var _this = this;\r\n return (React.createElement(React.Fragment, { key: this.props.order.orderHeader.appOrderId },\r\n React.createElement(\"div\", { className: \"dashboard-details\" },\r\n React.createElement(\"div\", { className: \"dashboard-details__header\" },\r\n React.createElement(\"div\", { onClick: function () { return _this.setState({ isListView: true }); }, className: \"dashboard-details__header__toggler\" + (this.state.isListView ? ' active' : '') },\r\n React.createElement(FaList, null)),\r\n React.createElement(\"div\", { onClick: function () { return _this.setState({ isListView: false }); }, className: \"dashboard-details__header__toggler\" + (!this.state.isListView ? ' active' : '') },\r\n React.createElement(FaTh, null)),\r\n React.createElement(\"div\", { className: \"dashboard-details__header__item dashboard-details__header__show-sizes\" },\r\n React.createElement(\"div\", { className: \"pretty p-default form-group\" },\r\n React.createElement(\"input\", { className: \"a-form-control a-form-control--checkbox\", checked: this.state.showSizes, onChange: function () { _this.setState({ showSizes: !_this.state.showSizes }); }, type: \"checkbox\" }),\r\n React.createElement(\"div\", { className: \"state\" },\r\n React.createElement(\"label\", null, \"Show sizes\")))),\r\n React.createElement(\"div\", { className: \"dashboard-details__header__item dashboard-details__header__show-sizes\" },\r\n React.createElement(\"div\", { className: \"pretty p-default form-group\" },\r\n React.createElement(\"input\", { className: \"a-form-control a-form-control--checkbox\", checked: this.state.showDiscount, onChange: function () { return _this.setState({ showDiscount: !_this.state.showDiscount }); }, type: \"checkbox\" }),\r\n React.createElement(\"div\", { className: \"state\" },\r\n React.createElement(\"label\", null,\r\n React.createElement(\"span\", null, \"Show discount \"),\r\n React.createElement(\"span\", { style: { fontSize: '9px' } },\r\n React.createElement(FaPercent, null)))))),\r\n (Object.keys(this.props.rrpMap).length ||\r\n (this.props.order && this.props.order.orderHeader.navImportRef && this.props.order.orderHeader.orderState === 1)) ?\r\n React.createElement(\"div\", { className: \"dashboard-details__header__item --print clickable\" },\r\n React.createElement(ReactToPrint, { trigger: function () { return React.createElement(\"div\", { className: \"dashboard-details__header__item --print\" },\r\n React.createElement(FaPrint, null),\r\n React.createElement(\"span\", null, \"Print basket\")); }, content: function () { return _this.componentRef; } })) : null,\r\n React.createElement(\"div\", { className: \"dashboard-details__header__item dashboard-search-wrapper\" },\r\n React.createElement(\"input\", { type: \"text\", className: \"--dashboard-search\", placeholder: \"Search in basket\", onChange: function (event) {\r\n var value = event.target.value;\r\n _this.setState({ searchTerm: value });\r\n } }))),\r\n this.state.isListView &&\r\n React.createElement(\"table\", { className: \"details striped-table\" },\r\n React.createElement(\"thead\", null, this.renderTableHeader()),\r\n React.createElement(\"tbody\", null, this.renderTableBody(this.props.groupedOrderlines, this.state.showSizes))),\r\n !this.state.isListView &&\r\n this.renderGrid(),\r\n this.renderPrint(),\r\n this.state.showEditLineDiscountModal &&\r\n React.createElement(EditLineDiscountModal, { order: this.props.order, orderId: this.props.order.orderHeader.appOrderId, line: this.state.selectedOrderline, show: this.state.showEditLineDiscountModal, shouldHide: function () { return _this.setState({ showEditLineDiscountModal: false }); }, onChangeDiscount: this.props.onChangeDiscount }),\r\n this.state.showEditLineMultipleDiscountModal &&\r\n React.createElement(EditLineDiscountMultipleModal, { show: this.state.showEditLineMultipleDiscountModal, shouldHide: function () { return _this.setState({ showEditLineMultipleDiscountModal: false }); }, onChangeDiscountMultiple: this.props.onChangeDiscountMultiple }))));\r\n };\r\n return Details;\r\n}(Component));\r\nexport { Details };\r\n//# sourceMappingURL=Details.js.map","import { __assign, __awaiter, __extends, __generator } from \"tslib\";\r\nimport React, { Component } from 'react';\r\n// Components.\r\nimport { Modal } from '../Modal';\r\nimport { Calendar } from './Calendar';\r\nvar MoveDropModal = /** @class */ (function (_super) {\r\n __extends(MoveDropModal, _super);\r\n function MoveDropModal() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.state = {\r\n deliveryWindows: [],\r\n showDeliveryModal: false,\r\n };\r\n _this.onSelectSlot = function (slot) {\r\n var event = __assign({}, _this.state.currentDrop);\r\n event.start = slot;\r\n event.end = slot;\r\n _this.setState({ currentDrop: event });\r\n };\r\n _this.moveDrop = function () { return __awaiter(_this, void 0, void 0, function () {\r\n var currentDrop, deliveryCode, newDate;\r\n return __generator(this, function (_a) {\r\n currentDrop = this.state.currentDrop;\r\n deliveryCode = currentDrop.resource.deliveryCode;\r\n newDate = currentDrop.start;\r\n if (currentDrop) {\r\n this.props.moveDrop(deliveryCode, newDate);\r\n }\r\n return [2 /*return*/];\r\n });\r\n }); };\r\n _this.renderBody = function (currentDrop) {\r\n return (React.createElement(\"div\", { style: { marginBottom: '30px', minHeight: '500px' } },\r\n React.createElement(Calendar, { defaultDate: currentDrop.start, dateClick: _this.onSelectSlot, selectedText: currentDrop.title, startDate: currentDrop.resource.shippingFrom })));\r\n };\r\n return _this;\r\n }\r\n MoveDropModal.prototype.componentDidMount = function () {\r\n var currentDrop = this.props.currentDrop;\r\n this.setState({ currentDrop: currentDrop });\r\n };\r\n MoveDropModal.prototype.render = function () {\r\n var _this = this;\r\n var showDeliveryModal = this.props.showDeliveryModal;\r\n var currentDrop = this.state.currentDrop;\r\n if (!currentDrop) {\r\n return null;\r\n }\r\n return (React.createElement(Modal, { header: React.createElement(\"h4\", null, \"Move drop\"), size: 'lg', isShowing: showDeliveryModal, hide: function () { return _this.props.hide(); }, children: this.renderBody(currentDrop), footer: (React.createElement(\"button\", { className: \"po__order-btn modal-footer__btn-center\", onClick: this.moveDrop }, \"Move drop\")) }));\r\n };\r\n return MoveDropModal;\r\n}(Component));\r\nexport { MoveDropModal };\r\n//# sourceMappingURL=MoveDropModal.js.map","import { __values } from \"tslib\";\r\nimport { OrderHeader } from './OrderHeader';\r\nvar orderLine = /** @class */ (function () {\r\n function orderLine() {\r\n this.amount = 0;\r\n this.appOrderId = 0;\r\n this.appOrderLineId = 0;\r\n this.blocked = false;\r\n this.collectionName = '';\r\n this.collectionSortCode = 0;\r\n this.colorBlocked = false;\r\n this.colorCode = '';\r\n this.colorName = '';\r\n this.deliveryCode = '';\r\n this.deliveryprintdescription = '';\r\n this.deliveryshiptmentdate = '';\r\n this.deliverysort = 0;\r\n this.delivreryshortdescription = '';\r\n this.description = '';\r\n this.description2 = '';\r\n this.itemId = '';\r\n this.linediscountpct = 0;\r\n this.lineNumber = 0;\r\n this.linediscountamount = 0;\r\n this.masterId = '';\r\n this.productCategory = '';\r\n this.productGroup = '';\r\n this.quantity = 0;\r\n this.quantityShipped = 0;\r\n this.sizeCode = '';\r\n this.sizeName = '';\r\n this.unitPrice = 0;\r\n this.unmodifiedNavQuantity = 0;\r\n this.vatPct = 0;\r\n this.topCollection = '';\r\n this.organic = false;\r\n this.ecovero = false;\r\n this.gots = '';\r\n this.recycled = false;\r\n this.seasonCode = '';\r\n this.oekotex = '';\r\n this.subCategories = [];\r\n this.orderLines = [];\r\n this.whp = 0;\r\n this.msrp = 0;\r\n this.totalDisp = 0;\r\n this.ocsno = '';\r\n this.grsno = '';\r\n this.ocsblended = '';\r\n this.discontinued = false;\r\n }\r\n orderLine.buildFromB2B = function (data) {\r\n var line = new orderLine();\r\n line.amount = data.amount;\r\n line.appOrderId = data.appOrderId;\r\n line.appOrderLineId = data.appOrderLineId;\r\n line.blocked = data.blocked;\r\n line.collectionName = data.collection;\r\n line.collectionSortCode = data.collectionsort;\r\n line.colorBlocked = data.colorBlocked;\r\n line.colorCode = data.colorcode;\r\n line.colorName = data.colorname;\r\n line.deliveryCode = data.deliveryCode;\r\n line.deliveryprintdescription = data.deliveryprintdescription;\r\n line.deliveryshiptmentdate = data.deliveryshiptmentdate;\r\n line.deliverysort = data.deliverysort;\r\n line.delivreryshortdescription = data.delivreryshortdescription;\r\n line.description = data.description;\r\n line.discontinued = data.discontinued || false;\r\n line.gots = data.gots;\r\n line.oekotex = data.oekoTex;\r\n line.organic = data.organic;\r\n line.ecovero = data.ecovero;\r\n line.recycled = data.recycled;\r\n line.description2 = data.description2;\r\n line.itemId = data.itemId;\r\n line.linediscountpct = data.lineDiscountPct;\r\n line.lineNumber = data.lineNumber;\r\n line.linediscountamount = data.linediscountAmount;\r\n line.masterId = data.masterid;\r\n line.productCategory = data.productcategory;\r\n line.productGroup = data.productgroup;\r\n line.quantity = data.quantity;\r\n line.quantityShipped = data.quantityShipped;\r\n line.sizeCode = data.sizecode;\r\n line.sizeName = data.sizename;\r\n line.unitPrice = data.unitPrice;\r\n line.unmodifiedNavQuantity = data.unmodifiedNavQuantity;\r\n line.vatPct = data.vatPct;\r\n line.seasonCode = data.seasoncode;\r\n line.ocsno = data.ocsno || '';\r\n line.grsno = data.grsno || '';\r\n line.ocsblended = data.ocsblended || '';\r\n line.deliveryWindow = {\r\n print: data.deliveryprintdescription,\r\n sort: data.deliverysort,\r\n window: data.deliveryCode,\r\n shipmentDate: data.deliveryshiptmentdate,\r\n label: data.deliveryprintdescription,\r\n originalWindow: data.deliveryCode\r\n };\r\n return line;\r\n };\r\n orderLine.buildFromSalesbook = function (data) {\r\n var line = new orderLine();\r\n line.amount = data.amount;\r\n line.appOrderId = data.apporderid;\r\n line.appOrderLineId = data.apporderlineid;\r\n line.blocked = data.blocked;\r\n line.collectionName = data.collection;\r\n line.collectionSortCode = data.collectionsort;\r\n line.colorBlocked = data.colorblocked;\r\n line.colorCode = data.colorcode;\r\n line.colorName = data.colorname;\r\n line.deliveryCode = data.deliverycode;\r\n line.deliveryprintdescription = data.deliveryprintdescription;\r\n line.deliveryshiptmentdate = data.deliveryshiptmentdate;\r\n line.deliverysort = data.deliverysort;\r\n line.delivreryshortdescription = data.delivreryshortdescription;\r\n line.description = data.description;\r\n line.discontinued = data.discontinued || false;\r\n line.gots = data.gots;\r\n line.oekotex = data.oekotex;\r\n line.organic = data.organic;\r\n line.ecovero = data.ecovero;\r\n line.recycled = data.recycled;\r\n line.description2 = data.description2;\r\n line.itemId = data.itemid;\r\n line.linediscountpct = data.linediscountpct;\r\n line.lineNumber = data.apporderlineid;\r\n line.linediscountamount = data.linediscountamount;\r\n line.masterId = data.masterid;\r\n line.productCategory = data.productcategory;\r\n line.productGroup = data.productgroup;\r\n line.quantity = data.quantity;\r\n line.quantityShipped = data.quantityshipped;\r\n line.sizeCode = data.sizecode;\r\n line.sizeName = data.sizename;\r\n line.unitPrice = data.unitprice;\r\n line.unmodifiedNavQuantity = data.unmodifiedNavQuantity;\r\n line.vatPct = data.vatpct;\r\n line.seasonCode = data.seasoncode;\r\n line.ocsno = data.ocsno || '';\r\n line.grsno = data.grsno || '';\r\n line.ocsblended = data.ocsblended || '';\r\n line.deliveryWindow = {\r\n print: data.deliveryprintdescription,\r\n sort: data.deliverysort,\r\n window: data.deliverycode,\r\n shipmentDate: data.deliveryshiptmentdate,\r\n label: data.deliveryprintdescription,\r\n originalWindow: data.deliverycode\r\n };\r\n return line;\r\n };\r\n return orderLine;\r\n}());\r\nexport { orderLine };\r\nexport function mapOrderlinesFromSalesbook(data) {\r\n var e_1, _a;\r\n var mapped = [];\r\n try {\r\n for (var data_1 = __values(data), data_1_1 = data_1.next(); !data_1_1.done; data_1_1 = data_1.next()) {\r\n var line = data_1_1.value;\r\n var newLine = orderLine.buildFromSalesbook(line);\r\n mapped.push(newLine);\r\n }\r\n }\r\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n finally {\r\n try {\r\n if (data_1_1 && !data_1_1.done && (_a = data_1.return)) _a.call(data_1);\r\n }\r\n finally { if (e_1) throw e_1.error; }\r\n }\r\n return mapped;\r\n}\r\nexport function mapOrderlinesFromB2B(data) {\r\n var e_2, _a;\r\n var mapped = [];\r\n try {\r\n for (var data_2 = __values(data), data_2_1 = data_2.next(); !data_2_1.done; data_2_1 = data_2.next()) {\r\n var line = data_2_1.value;\r\n var newLine = orderLine.buildFromB2B(line);\r\n mapped.push(newLine);\r\n }\r\n }\r\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\r\n finally {\r\n try {\r\n if (data_2_1 && !data_2_1.done && (_a = data_2.return)) _a.call(data_2);\r\n }\r\n finally { if (e_2) throw e_2.error; }\r\n }\r\n return mapped;\r\n}\r\nvar Order = /** @class */ (function () {\r\n function Order() {\r\n this.orderLines = [];\r\n this.orderTotals = { amount: 0, noOfItems: 0 };\r\n this.isCurrentOrderType = false;\r\n }\r\n Order.buildFromB2B = function (data) {\r\n var order = new Order();\r\n order.orderLines = mapOrderlinesFromB2B(data.orderLines);\r\n order.orderTotals = {\r\n amount: data.orderTotals.amount,\r\n noOfItems: data.orderTotals.noOfItems,\r\n };\r\n order.orderHeader = OrderHeader.buildFromB2B(data.orderheader);\r\n return order;\r\n };\r\n Order.buildFromSalesbook = function (data) {\r\n var order = new Order();\r\n order.orderLines = mapOrderlinesFromSalesbook(data.orderlines);\r\n order.orderTotals = {\r\n amount: data.ordertotals.amount,\r\n noOfItems: data.ordertotals.noofitems,\r\n };\r\n order.orderHeader = OrderHeader.buildFromSalesbook(data.order);\r\n return order;\r\n };\r\n return Order;\r\n}());\r\nexport { Order };\r\n//# sourceMappingURL=Order.js.map","import React from 'react';\r\nexport var StepWizard = function (props) {\r\n var steps = props.steps, currentStep = props.currentStep, setCurrentStep = props.setCurrentStep, stepLabelsOverride = props.stepLabelsOverride;\r\n var stepLabels = stepLabelsOverride || {\r\n orderType: 'Order type',\r\n shop: 'Shop',\r\n final: 'Create order',\r\n customer: 'Create customer',\r\n navOrder: 'Nav order',\r\n openOrder: 'Open order',\r\n };\r\n return (React.createElement(\"div\", { className: \"stepwizard\" },\r\n React.createElement(\"div\", { className: \"stepwizard-row setup-panel\" }, steps.map(function (step, index) {\r\n return (React.createElement(\"div\", { className: \"stepwizard-step col-xs-3\", key: index },\r\n React.createElement(\"button\", { onClick: function () {\r\n setCurrentStep(index);\r\n }, className: \"button button-circle\" + (currentStep === steps.indexOf(step) ? ' button-success' : ' button-default')\r\n + (steps.length === (index + 1) ? ' last' : '') }, index + 1),\r\n React.createElement(\"p\", null,\r\n React.createElement(\"small\", null, stepLabels[steps[index]]))));\r\n }))));\r\n};\r\n//# sourceMappingURL=StepWizard.js.map","import React, { useEffect, useState } from 'react'\r\n\r\nimport { Modal } from 'molo-shared';\r\nimport OrderApi from '../../store/order/OrderApi';\r\nimport { Spinner } from \"@blueprintjs/core\";\r\n\r\nimport List from '@mui/material/List';\r\nimport ListItem from '@mui/material/ListItem';\r\nimport ListItemText from '@mui/material/ListItemText';\r\nimport Divider from '@mui/material/Divider';\r\n\r\ninterface ITrackingLink {\r\n bsl: string\r\n links: any[]\r\n}\r\n\r\n// Store.\r\n\r\ninterface Props {\r\n show: boolean\r\n shouldHide: Function\r\n trackingBsl?: string\r\n}\r\n\r\nconst style = {\r\n width: '100%',\r\n maxWidth: '100%',\r\n bgcolor: 'background.paper',\r\n};\r\n\r\nconst TrackingModal: React.FC = (props) => {\r\n const { shouldHide, show, trackingBsl } = props;\r\n const [trackingLinks, setTrackingLinks ] = useState({bsl: '', links: []});\r\n const [isFecthing, setIsFetching] = useState(true)\r\n\r\n useEffect(() => {\r\n if (show && trackingBsl && trackingBsl !== trackingLinks.bsl) {\r\n getTrackingLink(trackingBsl)\r\n }\r\n return () => {}\r\n }, [show, trackingBsl])\r\n\r\n const getTrackingLink = async (trackingBsl: string) => {\r\n setIsFetching(true)\r\n\r\n const response = await OrderApi.PeakShipmentTracking(trackingBsl)\r\n\r\n setTrackingLinks({\r\n bsl: trackingBsl,\r\n links: response.data\r\n })\r\n\r\n setIsFetching(false)\r\n }\r\n\r\n const renderModal = () => (\r\n
\r\n
\r\n

Tracking Links

\r\n

Click on one the links below to follow your tracking

\r\n {\r\n trackingLinks.bsl && trackingLinks.links.length ?\r\n \r\n {trackingLinks.links.map((link: any, key: number) => {\r\n return (\r\n <>\r\n \r\n \r\n Parcel {(key + 1)}: {link.parcelno}\r\n \r\n {/* { link.trackinglink } */}\r\n \r\n \r\n \r\n )\r\n })}\r\n \r\n : null\r\n }\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n\r\n const renderSpinner = () =>
\r\n\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport default TrackingModal","import axios from 'axios';\r\nimport React, { useEffect, useState } from 'react';\r\nimport Order from '../../Models/Order';\r\nimport OrderApi from '../../store/order/OrderApi';\r\nimport ShippedOrdersCalendar from '../shared/Dashboard/ShippedOrdercalendar';\r\nimport RingLoader from 'react-spinners/RingLoader'\r\nimport TrackingModal from '../shared/TrackingModal'\r\n\r\ninterface IProps {\r\n order: any,\r\n onClose?: Function,\r\n onHandleClickBSL: Function\r\n}\r\n\r\nexport const ShippedCalendar: React.FC = (props) => {\r\n const { order } = props\r\n const [deliveryWindows, setDeliveryWindows] = useState([])\r\n const [isFetching, setIsFetching] = useState(false);\r\n const [showTrackingModal, setShowTrackingModal] = useState(false)\r\n const [trackingBsl, setTrackingBsl] = useState(undefined)\r\n\r\n useEffect(() => {\r\n let navorderid = null;\r\n\r\n if (order.navorderid) {\r\n navorderid = order.navorderid;\r\n }\r\n\r\n if (order && navorderid && !isFetching) {\r\n if (order.anyunshipped || order.outstandingQuantity !== 0 ) {\r\n allShipments(navorderid)\r\n } else {\r\n getShipments(navorderid)\r\n }\r\n } else if (order && order.appOrderId){\r\n getDeliveryWindows(order.appOrderId)\r\n }\r\n }, [order])\r\n\r\n const allShipments = async (sonumber: string) => {\r\n setIsFetching(true)\r\n const requests: any[] = [\r\n OrderApi.peakNavOrderShipments(sonumber),\r\n OrderApi.peakNavOrderUnshippedShipments(sonumber)\r\n ]\r\n\r\n const responses = await axios.all(requests);\r\n const data: any = [ ...responses[0].data, ...responses[1].data ]\r\n\r\n setDeliveryWindows(data.map((window: any) => {\r\n return {\r\n appOrderId: order.navorderid,\r\n deliveryCode: window.bsl ? window.deliverywindows : window.deliverycode,\r\n deliveryPrintdescription: window.deliverycode,\r\n shipped: true,\r\n shippingDate: window.shipmentdate,\r\n shippingFrom: window.shipmentdate,\r\n bsl: window.bsl || '',\r\n items: window.items,\r\n nooftrackingcodes: window.nooftrackingcodes || 0\r\n }\r\n }))\r\n\r\n setIsFetching(false)\r\n }\r\n\r\n const getDeliveryWindows = async (orderId: string) => {\r\n setIsFetching(true);\r\n const response = await OrderApi.getOrderDeliveries(+orderId)\r\n if (response) {\r\n \r\n setDeliveryWindows(response.data.map((window: any) => {\r\n return {\r\n appOrderId: window.appOrderId,\r\n deliveryCode: window.bsl ? window.deliverywindows : window.deliverycode,\r\n deliveryPrintdescription: window.deliveryPrintdescription,\r\n shipped: window.deliveryPrintdescription,\r\n shippingDate: window.shippingDate,\r\n shippingFrom: window.shippingFrom,\r\n bsl: '',\r\n items: [],\r\n nooftrackingcodes: window.nooftrackingcodes || 0\r\n }\r\n }\r\n ))\r\n }\r\n setIsFetching(false)\r\n }\r\n\r\n const getShipments = async (sonumber: string) => {\r\n setIsFetching(true)\r\n const response = await OrderApi.peakNavOrderShipments(sonumber)\r\n \r\n if (response) {\r\n setDeliveryWindows(response.data.map((window: any) => {\r\n return {\r\n appOrderId: order.navorderid,\r\n deliveryCode: window.bsl ? window.deliverywindows : window.deliverycode,\r\n deliveryPrintdescription: window.bsl || window.deliverycode,\r\n shipped: true,\r\n shippingDate: window.shipmentdate,\r\n shippingFrom: window.shipmentdate,\r\n bsl: window.bsl || '',\r\n items: window.items,\r\n nooftrackingcodes: window.nooftrackingcodes || 0\r\n }\r\n }\r\n ))\r\n }\r\n\r\n setIsFetching(false)\r\n }\r\n\r\n const onClickDrop = async (drop: any) => {\r\n props.onHandleClickBSL(order, drop)\r\n }\r\n\r\n const onClickViewTracking = async (drop: any) => {\r\n setTrackingBsl(drop.bsl)\r\n setShowTrackingModal(true)\r\n }\r\n\r\n if (isFetching) {\r\n return (\r\n
\r\n \r\n
\r\n )\r\n }\r\n\r\n if (!isFetching && !deliveryWindows.length) {\r\n return (\r\n
\r\n

No shipments on this order!

\r\n
\r\n )\r\n }\r\n\r\n return (\r\n <>\r\n {}}\r\n onClickDrop={onClickDrop}\r\n userIsInformed={true}\r\n hideEditLink={true}\r\n setUserHasConfirmed={() => {}}\r\n onClickViewTracking={onClickViewTracking}\r\n />\r\n setShowTrackingModal(false) }\r\n trackingBsl={ trackingBsl }\r\n />\r\n \r\n )\r\n\r\n}","import React, { Component } from 'react'\r\nimport Burger from './Burger';\r\nimport { FaTimes } from 'react-icons/fa'\r\n\r\ninterface IProps {\r\n isShowing?: boolean,\r\n onClose?: Function\r\n}\r\n\r\n// const SidebarMenu: React.FC = (props) => {\r\nexport class SidebarMenu extends Component {\r\n state = {\r\n showSidebar: false,\r\n }\r\n // const { isShowing } = props;\r\n childRef = React.createRef();\r\n node = React.createRef();\r\n // const [showSidebar, setValue] = React.useState(false);\r\n\r\n componentDidMount() {\r\n document.addEventListener(\"mousedown\", this.handleClickOutside);\r\n }\r\n\r\n componentWillUnmount() {\r\n document.removeEventListener(\"mousedown\", this.handleClickOutside);\r\n }\r\n\r\n handleClickOutside = (e: any) => {\r\n if(this.node && this.node.current && this.node.current.contains(e.target)) {\r\n return;\r\n }\r\n\r\n if(this.node && this.node.current && e.target.classList.contains('ignore-clickoutside')) {\r\n return;\r\n }\r\n \r\n // outside click \r\n if (this.props.isShowing) {\r\n console.log('close the sidebar')\r\n this.props.onClose && this.props.onClose()\r\n this.setState({showSidebar: !this.state.showSidebar})\r\n }\r\n };\r\n\r\n // toggle = () => {\r\n // this.setState({showSidebar: !this.state.showSidebar}, () => {\r\n // if (this.childRef.current) {\r\n // this.childRef.current.toggle();\r\n // }\r\n // })\r\n // }\r\n\r\n render() {\r\n return (\r\n
\r\n
this.props.onClose && this.props.onClose() }>\r\n \r\n
\r\n
\r\n { this.props.children }\r\n
\r\n
\r\n )\r\n }\r\n \r\n \r\n}\r\n\r\nexport default SidebarMenu;","import React, { useEffect, useState } from 'react';\r\n// fileapi \r\nimport FileApi from '../../../store/files/FileApi';\r\n// Utils.\r\nimport { totalDiscountAmount, roundAmount } from '../../../utils/priceHelper';\r\n\r\n// Models\r\nimport Order from '../../../models/Order';\r\n\r\nimport { FaDownload } from 'react-icons/fa';\r\n\r\nimport {\r\n IGrouping,\r\n} from './dashboard.d';\r\n\r\ninterface IProps {\r\n productSortedByCategory: IGrouping,\r\n order: Order,\r\n categoryChanged?: Function\r\n onClickFilterGroup?: Function\r\n hidePrices?: boolean\r\n showDownloadLink?:boolean\r\n} \r\n\r\nconst OrderSummary: React.FC = (props) => {\r\n const [selectedCategory, setValue] = React.useState('categories');\r\n const { productSortedByCategory, order, categoryChanged, onClickFilterGroup, showDownloadLink } = props;\r\n const scrollableElement = React.createRef();\r\n const [hasOverflow, setHasOverflow] = useState(false)\r\n\r\n useEffect(() => {\r\n handleResize()\r\n window.addEventListener('resize', handleResize)\r\n return () => {\r\n window.removeEventListener('resize', handleResize)\r\n };\r\n })\r\n\r\n const handleResize = () => {\r\n if (scrollableElement.current) {\r\n if (+scrollableElement.current.scrollHeight > +scrollableElement.current.clientHeight) {\r\n setHasOverflow(true)\r\n } else {\r\n if (+scrollableElement.current.scrollHeight === +scrollableElement.current.clientHeight) {\r\n setHasOverflow(false)\r\n }\r\n }\r\n }\r\n }\r\n\r\n const onChangeSelect = (event: any) => {\r\n setValue(event.currentTarget.value);\r\n\r\n if (categoryChanged) {\r\n categoryChanged(event.currentTarget.value);\r\n }\r\n }\r\n\r\n const onClickHandler = (selectedCategory: string, item: any) => {\r\n if (onClickFilterGroup) {\r\n onClickFilterGroup(selectedCategory, item);\r\n }\r\n } \r\n const onDownloadProductImages = async () => {\r\n if(order.orderLines[0].bsl ){\r\n const response = await FileApi.createCustomerBSLItemsZip( order.orderLines[0].bsl );\r\n if (response.data && response.data.location) {\r\n window.location.href = response.data.location;\r\n }\r\n\r\n } else {\r\n const response = await FileApi.createCustomerUnshippedItemsZip( order.orderLines[0].navorderid, order.orderLines[0].deliveryCode );\r\n if (response.data && response.data.location) {\r\n window.location.href = response.data.location;\r\n }\r\n }\r\n }\r\n // const getFile = async () => {\r\n // const response = await FileApi.createOrderImageZip(props.orderId)\r\n\r\n // setDownloadURL(response.data.location)\r\n // window.location.href = response.data.location;\r\n // setDownloading(false)\r\n\r\n // setTimeout(() => {\r\n // props.shouldHide();\r\n // }, 1000);\r\n // }\r\n\r\n\r\n const renderTableBody = () => {\r\n console.log(\"bo-larsen ... renderTableBody\");\r\n return (\r\n Object.keys(productSortedByCategory[selectedCategory]).map((category, key) => {\r\n const item = productSortedByCategory[selectedCategory][category];\r\n \r\n return (\r\n onClickHandler(selectedCategory, item)}>\r\n \r\n \r\n { item.title.replaceAll('_',' ') }\r\n \r\n \r\n \r\n { item.salesOptions }\r\n \r\n \r\n { item.quantity }\r\n \r\n {!props.hidePrices && \r\n { roundAmount(item.revenue) }\r\n }\r\n \r\n )\r\n })\r\n )\r\n }\r\n\r\n const getSalesOptionsTotal = () => {\r\n let total = 0;\r\n for (const i in productSortedByCategory[selectedCategory]) {\r\n total = total + productSortedByCategory[selectedCategory][i].salesOptions;\r\n }\r\n \r\n return total;\r\n }\r\n\r\n return (\r\n
\r\n \r\n {\r\n Object.keys(productSortedByCategory).length &&\r\n Object.keys(productSortedByCategory).map((category, key) => {\r\n return (\r\n \r\n ) \r\n })\r\n }\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {!props.hidePrices && }\r\n \r\n \r\n
OptionsItemsTotal
\r\n
\r\n
\r\n \r\n {Object.keys(productSortedByCategory).length ? renderTableBody() : null}\r\n
\r\n
\r\n
\r\n \r\n \r\n {\r\n order && order.orderheader && order.orderheader.orderLinediscount ?\r\n \r\n \r\n \r\n \r\n \r\n : null\r\n }\r\n \r\n \r\n \r\n \r\n {!props.hidePrices && }\r\n \r\n \r\n { console.dir(order) }\r\n { showDownloadLink\r\n && (order && order.orderLines && order.orderLines[0] && order.orderLines[0].navorderid) || (order && order.orderLines && order.orderLines[0] && order.orderLines[0].bsl)?\r\n \r\n :\r\n \r\n
Discount ( { order.orderheader.currencyCode } { order.orderheader.orderLinediscount }% ){ roundAmount(totalDiscountAmount(order.orderLines)) }
Grand total{ getSalesOptionsTotal() }{order && order.orderTotals.noOfItems}{ order && order.orderheader.currencyCode } {order && roundAmount(order.orderTotals.amount)}
onDownloadProductImages()}>\r\n }\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default OrderSummary;","// Models.\r\nimport { orderLine as OrderLine, orderLine } from '../../../models/Order';\r\n\r\nimport {\r\n IKeyValue,\r\n IDivider,\r\n IGrouping,\r\n} from './dashboard.d';\r\n\r\ninterface ISize {\r\n sizename: string,\r\n quantity: number\r\n}\r\n\r\ninterface ISizes {\r\n [id: string]: ISize[],\r\n}\r\n\r\ninterface IGroupedOrderLine {\r\n [id: string]: any,\r\n}\r\n\r\n// import DeliveryWindows from './DeliveryWindows';\r\n\r\ninterface IWindows {\r\n [id: string]: any\r\n}\r\n\r\nexport function getProductCategories(orderlines: OrderLine[], dividers: IDivider[]): IGrouping {\r\n let groupings: IGrouping = {};\r\n\r\n if (!orderlines.length) {\r\n return {};\r\n }\r\n \r\n for (const i in dividers) {\r\n const divider = dividers[i];\r\n \r\n for (const key in orderlines) {\r\n const orderline = orderlines[key];\r\n \r\n if (!groupings[divider.id]) {\r\n groupings[divider.id] = {};\r\n }\r\n\r\n if (divider.id !== 'sustainability') {\r\n const linesWith = orderlines.filter(function(line) {\r\n return line[divider.valueKey] === orderline[divider.valueKey];\r\n });\r\n \r\n if (linesWith.length) {\r\n groupings[divider.id][orderline[divider.valueKey]] = {\r\n orderLines: linesWith,\r\n title: divider.id === 'collection' ? orderline[divider.labelKey].toUpperCase() : orderline[divider.labelKey],\r\n value: orderline[divider.valueKey],\r\n colorBlocked: orderline.colorBlocked || false,\r\n quantity: ((groupings[divider.id][orderline[divider.valueKey]] && groupings[divider.id][orderline[divider.valueKey]].quantity) || 0) + orderline.quantity,\r\n revenue: ((groupings[divider.id][orderline[divider.valueKey]] && groupings[divider.id][orderline[divider.valueKey]].revenue) || 0) + orderline.amount,\r\n salesOptions: 0,\r\n };\r\n }\r\n } else {\r\n let valueKey: string | null = null;\r\n if (orderline.organic) valueKey = 'organic';\r\n if( orderline.ecovero) valueKey = 'ecovero';\r\n if (orderline.recycled) valueKey = 'recycled';\r\n if (orderline.oekoTex !== '') valueKey = 'oekoTex';\r\n if (orderline.gots !== '') valueKey = 'gots';\r\n if (orderline.ocsno !== '') valueKey = 'ocs_100';\r\n if (orderline.ocsblended !== '') valueKey = 'ocs_blended';\r\n console.log('b2b?!?');\r\nif(valueKey == null){\r\n console.log('bolarsen novalue ', orderline);\r\n} else {\r\nconsole.log('bolarsen hasvalue ' + valueKey , orderline);\r\n}\r\n if (valueKey) {\r\n const linesWith = orderlines.filter(function(line) {\r\n if (valueKey === 'gots') {\r\n if (line.gots !== '') return true;\r\n }\r\n\r\n if (valueKey === 'oekoTex') {\r\n if (line.oekoTex !== '') return true;\r\n }\r\n\r\n if (valueKey === 'recycled') {\r\n if (line.recycled) return true;\r\n }\r\n\r\n if (valueKey === 'organic') {\r\n if (line.organic) return true;\r\n }\r\n if (valueKey === 'ecovero') {\r\n if (line.ecovero) return true;\r\n }\r\n if (valueKey === 'ocs_100') {\r\n if (line.ocsno) return true;\r\n }\r\n if (valueKey === 'ocs_blended') {\r\n if (line.ocsblended) return true;\r\n }\r\n\r\n return false;\r\n });\r\n\r\n if (linesWith.length) {\r\n groupings[divider.id][valueKey] = {\r\n orderLines: linesWith,\r\n title: valueKey.toUpperCase(),\r\n value: valueKey,\r\n colorBlocked: orderline.colorBlocked || false,\r\n quantity: ((groupings[divider.id][valueKey] && groupings[divider.id][valueKey].quantity) || 0) + orderline.quantity,\r\n revenue: ((groupings[divider.id][valueKey] && groupings[divider.id][valueKey].revenue) || 0) + orderline.amount,\r\n salesOptions: 0,\r\n };\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (var groupKey in groupings) {\r\n for (var key in groupings[groupKey]) {\r\n let grouped: IKeyValue = {};\r\n var orderLines = groupings[groupKey][key].orderLines;\r\n \r\n for (var orderLine of orderLines) {\r\n const key: string = String(orderLine.masterid + orderLine.colorcode);\r\n\r\n if (!grouped[key]) {\r\n grouped[key] = [];\r\n }\r\n\r\n grouped[key].push(orderLine);\r\n \r\n }\r\n \r\n groupings[groupKey][key]['salesOptions'] = Object.keys(grouped).length;\r\n }\r\n }\r\n\r\n return groupings;\r\n}\r\n\r\nexport function getDeliveryWindows(orderLines: orderLine[]) {\r\n \r\n const deliveryWindows = [];\r\n const windows: IWindows = {}\r\n\r\n for (const i in orderLines) {\r\n windows[orderLines[i].deliveryCode] = {\r\n shippingDate: orderLines[i].deliveryshiptmentdate,\r\n deliveryCode: orderLines[i].deliveryCode,\r\n delivreryShortdescription: orderLines[i].delivreryshortdescription,\r\n };\r\n } \r\n\r\n for (const i in windows) {\r\n deliveryWindows.push(windows[i]);\r\n }\r\n\r\n return deliveryWindows;\r\n}\r\n\r\nexport function getHest() {\r\n return [];\r\n}\r\n\r\nexport function groupSimilarColors (orderLines: any[]) {\r\n const grouped: IGroupedOrderLine = {}\r\n const sizes: ISizes = {};\r\n\r\n for (const i in orderLines) {\r\n const orderline = orderLines[i];\r\n const masterid = orderline.masterid;\r\n const colorcode = orderline.colorcode;\r\n\r\n if (grouped[masterid + colorcode]) {\r\n const q = +grouped[masterid + colorcode].quantity + +orderline.quantity;\r\n grouped[masterid + colorcode].quantity = q;\r\n grouped[masterid + colorcode]['orderLines'].push({...orderline})\r\n } else {\r\n grouped[masterid + colorcode] = orderline\r\n grouped[masterid + colorcode]['orderLines'] = [{...orderline}]\r\n }\r\n\r\n if (!sizes[masterid + colorcode]) {\r\n sizes[masterid + colorcode] = [];\r\n }\r\n\r\n sizes[masterid + colorcode].push({ sizename: orderline.sizename, quantity: orderline.quantity });\r\n }\r\n\r\n // this.setState({ sizes })\r\n\r\n let g: orderLine[] = []\r\n\r\n for (const key in grouped) {\r\n let line = grouped[key];\r\n let q = 0;\r\n\r\n for (const delta in line['orderLines']) {\r\n q = q + line['orderLines'][delta].quantity;\r\n }\r\n\r\n line.quantity = q;\r\n\r\n g.push(line);\r\n }\r\n\r\n const sorted = g.sort((a, b) => (a.masterid > b.masterid) ? 1 : -1)\r\n\r\n return sorted;\r\n}","import { orderLine as OrderLine} from '../../../models/Order';\r\n\r\nexport interface IKeyValue { [id: string]: OrderLine[]; }\r\nexport type tvalueKey = 'collection' | 'productcategory' | 'deliveryCode' | 'productgroup'\r\nexport type tcategories = 'collection' | 'categories' | 'deliverywindows' | 'groups'\r\n\r\nexport interface IDivider {\r\n id: string,\r\n title: string,\r\n singularTitle: string,\r\n valueKey: tvalueKey,\r\n labelKey: tvalueKey,\r\n isCalendarView: boolean,\r\n}\r\n\r\nexport interface ISubGrouping {\r\n [id: string]: {\r\n orderLines: OrderLine[],\r\n title: string,\r\n quantity: number,\r\n revenue: number,\r\n value: string,\r\n colorBlocked: boolean,\r\n salesOptions: number,\r\n }\r\n}\r\n\r\nexport interface IGrouping {\r\n [id: string]: ISubGrouping\r\n}\r\n\r\nexport const DIVIDERS: IDivider[] = [\r\n // {\r\n // id: 'collection',\r\n // title: 'Collection',\r\n // singularTitle: 'Collection',\r\n // valueKey: 'topCollection',\r\n // labelKey: 'topCollection',\r\n // isCalendarView: false,\r\n // },\r\n {\r\n id: 'groups',\r\n title: 'Groups',\r\n singularTitle: 'Group',\r\n valueKey: 'productgroup',\r\n labelKey: 'productgroup',\r\n isCalendarView: false,\r\n },\r\n {\r\n id: 'categories',\r\n title: 'Categories',\r\n singularTitle: 'Category',\r\n valueKey: 'productcategory',\r\n labelKey: 'productcategory',\r\n isCalendarView: false,\r\n },\r\n {\r\n id: 'deliverywindows',\r\n title: 'Delivery Windows',\r\n singularTitle: 'Delivery Window',\r\n valueKey: 'deliveryCode',\r\n labelKey: 'deliveryCode',\r\n isCalendarView: false, // set to true when calendar view is ready\r\n },\r\n {\r\n id: 'sustainability',\r\n title: 'Sustainability',\r\n singularTitle: 'Sustainability',\r\n valueKey: 'sustainability',\r\n labelKey: 'sustainability',\r\n isCalendarView: false, // set to true when calendar view is ready\r\n },\r\n];","import React, { useEffect, useState } from 'react'\r\nimport OrderSummary from '../shared/Dashboard/OrderSummary'\r\n\r\nimport * as helper from '../shared/Dashboard/DashboardHelper';\r\nimport { FaTimes, FaArrowLeft } from 'react-icons/fa'\r\n\r\nimport { appConfig } from '../../config';\r\n\r\nimport { cloneDeep } from 'lodash';\r\n\r\nimport {\r\n tcategories,\r\n IDivider,\r\n IGrouping,\r\n DIVIDERS\r\n} from '../shared/Dashboard/dashboard.d';\r\n\r\ninterface ISize {\r\n sizename: string,\r\n quantity: number\r\n}\r\n\r\ninterface ISustainabilityMap {\r\n [id: string]: string | null | undefined\r\n}\r\n\r\ninterface ISizes {\r\n [id: string]: ISize[],\r\n}\r\n\r\nconst baseUrl = appConfig.media.baseUrl;\r\n\r\ninterface IProps {\r\n orderLines: any[],\r\n order: any\r\n}\r\n\r\nexport const ShippedItemsOverview: React.FC = (props) => {\r\n const { orderLines, order } = props\r\n\r\n const [sidebarOpen, setSidebarOpen] = useState(false)\r\n const [activeItems, setActiveItems] = useState([])\r\n const [productSortedByCategory, setproductSortedByCategory] = useState<{[id: string]: {}}>({})\r\n\r\n const onChangeCategory = () => {}\r\n\r\n const onClickFilterGroup = (group: string, item: any) => {\r\n console.log(group, item, 'group clicked')\r\n\r\n if (productSortedByCategory[group]) {\r\n const groupedOrderlines = helper.groupSimilarColors(cloneDeep(item.orderLines));\r\n console.log(groupedOrderlines, 'groupedOrderlines')\r\n setActiveItems(groupedOrderlines)\r\n setSidebarOpen(true)\r\n }\r\n }\r\n\r\n const getSizes = (item: any) => {\r\n const sizes: {[id: string] : ISize} = {}\r\n\r\n for (const i in item.orderLines) {\r\n const orderline = item.orderLines[i];\r\n\r\n if (!sizes[orderline.sizename]) {\r\n sizes[orderline.sizename] = {\r\n sizename: orderline.sizename,\r\n quantity: orderline.quantity,\r\n }\r\n } else {\r\n sizes[orderline.sizename].quantity = sizes[orderline.sizename].quantity + orderline.quantity\r\n }\r\n }\r\n\r\n return (\r\n
    \r\n {\r\n Object.keys(sizes).map((key, index: number) => {\r\n const size = sizes[key]\r\n\r\n return (\r\n
  • \r\n { size.sizename } : { size.quantity }\r\n
  • \r\n )\r\n })\r\n }\r\n
\r\n )\r\n }\r\n\r\n const renderItemsTable = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {activeItems.map((item: any, key: number) => {\r\n const imageUrl = baseUrl + 'media/productimage/' + item.seasoncode + '/' + item.masterid + '/' + item.color + '/small';\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n })}\r\n \r\n \r\n
QuantitySizes / quantity
\r\n
\r\n {item.description}\r\n
\r\n {item.masterid} {item.description}\r\n {item.color} {item.colorname}\r\n
\r\n
\r\n
{ item.quantity }{ getSizes(item) }
\r\n )\r\n }\r\n\r\n useEffect(() => {\r\n let productSortedByCategory = helper.getProductCategories(orderLines, DIVIDERS);\r\n\r\n setproductSortedByCategory(productSortedByCategory)\r\n\r\n }, [orderLines])\r\n\r\n return (\r\n <>\r\n \r\n
\r\n
{ setSidebarOpen(false) } }>\r\n \r\n
\r\n
\r\n { sidebarOpen && renderItemsTable() }\r\n
\r\n
\r\n \r\n )\r\n}","import { cloneDeep, uniq } from 'lodash';\r\nimport { Filter } from '../models/Filter';\r\nimport { orderLine } from '../models/Order';\r\n\r\ninterface sustainabilityItems {\r\n gots: orderLine[]\r\n oekoTex: orderLine[]\r\n recycled: orderLine[]\r\n organic: orderLine[]\r\n ecovero: orderLine[]\r\n ocs_100: orderLine[]\r\n ocs_blended:orderLine[]\r\n grs: orderLine[]\r\n}\r\n\r\ninterface ISustainabilityMap {\r\n [id: string]: string | null | undefined\r\n}\r\n\r\nexport const DashboardFilterHelper = {\r\n isInitialFilterReady,\r\n filterIsEmpty,\r\n resultByFilter,\r\n hydrateSeasons,\r\n hydrateProductGroups,\r\n hydrateDeliveryWindows,\r\n hydrateProductCategories,\r\n hydrateCollections,\r\n hydrateSustainability,\r\n changeActiveFilters\r\n};\r\n\r\nfunction hydrateCollections (styles: orderLine[]) { \r\n return uniq(styles.map(style => style.topCollection ));\r\n}\r\n\r\nfunction hydrateSeasons (styles: orderLine[]) { \r\n return uniq(styles.map(style => style.seasoncode ));\r\n}\r\n\r\nfunction hydrateProductGroups (styles: orderLine[]) { \r\n return uniq(styles.map(style => style.productgroup));\r\n}\r\n\r\nfunction hydrateDeliveryWindows (styles: orderLine[]) { \r\n return uniq(styles.map(style => style.deliveryCode));\r\n}\r\n\r\nfunction hydrateProductCategories (styles: orderLine[]) { \r\n return uniq(styles.map(style => style.productcategory));\r\n}\r\n\r\nfunction hydrateSustainability (styles: orderLine[]) {\r\n let sustainabilityFilters = [];\r\n console.log('hyradte heloper bo larsen');\r\n if (styles.filter(style => style.gots !== '').length) {\r\n sustainabilityFilters.push('gots');\r\n }\r\n if (styles.filter(style => style.oekoTex !== '').length) {\r\n sustainabilityFilters.push('oekoTex');\r\n }\r\n if (styles.filter(style => !!style.recycled).length) {\r\n sustainabilityFilters.push('recycled');\r\n }\r\n if (styles.filter(style => !!style.organic).length) {\r\n sustainabilityFilters.push('organic');\r\n }\r\n if (styles.filter(style => !!style.ecovero).length) {\r\n sustainabilityFilters.push('ecovero');\r\n }\r\n if (styles.filter(style => style.ocsno !== '').length) {\r\n sustainabilityFilters.push('ocs_100');\r\n }\r\n if (styles.filter(style => style.ocsblended !== '').length) {\r\n sustainabilityFilters.push('ocs_blended');\r\n }\r\n if (styles.filter(style => style.grsno !== '').length) {\r\n sustainabilityFilters.push('grs');\r\n }\r\n if (styles.filter(style => style.ecovero !== false).length) {\r\n sustainabilityFilters.push('ecovero');\r\n }\r\n return sustainabilityFilters;\r\n}\r\n\r\nfunction isInitialFilterReady(filter:Filter) {\r\n return filter && filter.activeFilters && (\r\n filter.activeFilters.seasons.length || \r\n filter.activeFilters.collections.length || \r\n filter.activeFilters.productGroups.length || \r\n filter.activeFilters.deliveryWindows.length ||\r\n filter.activeFilters.productCategories.length ||\r\n (filter.activeFilters.sustainability && filter.activeFilters.sustainability.length)\r\n );\r\n}\r\n\r\nfunction filterIsEmpty(filter:Filter) {\r\n return filter.activeFilters.collections.length === 0 &&\r\n filter.activeFilters.deliveryWindows.length === 0 &&\r\n filter.activeFilters.collections.length &&\r\n filter.activeFilters.productGroups.length === 0 &&\r\n filter.activeFilters.productCategories.length === 0 &&\r\n filter.activeFilters.seasons.length === 0;\r\n}\r\n\r\nfunction resultByFilter(filter:Filter, styles: orderLine[]) {\r\n let newStyles = cloneDeep(styles);\r\n\r\n // if everything is empty, the initial filter isn't ready yet\r\n if (!isInitialFilterReady(filter)) {\r\n return styles;\r\n }\r\n\r\n // deliveryWindows \r\n if (filter.activeFilters.collections.length) {\r\n newStyles = newStyles.filter(style => filter.activeFilters.collections.indexOf(style.topCollection) !== -1);\r\n }\r\n\r\n // deliveryWindows \r\n if (filter.activeFilters.deliveryWindows.length) {\r\n newStyles = newStyles.filter(style => filter.activeFilters.deliveryWindows.indexOf(style.deliveryCode) !== -1);\r\n }\r\n\r\n // productGroups\r\n if (filter.activeFilters.productGroups.length) {\r\n newStyles = newStyles.filter(style => filter.activeFilters.productGroups.indexOf(style.productgroup) !== -1);\r\n }\r\n\r\n // productCategories\r\n if (filter.activeFilters.productCategories.length) {\r\n newStyles = newStyles.filter(style => filter.activeFilters.productCategories.indexOf(style.productcategory) !== -1);\r\n }\r\n\r\n // Sustainabilty.\r\n if (filter.activeFilters.sustainability && filter.activeFilters.sustainability.length) {\r\n const cloned = [ ...newStyles ];\r\n\r\n let sustainabilityItems:sustainabilityItems = {\r\n gots: [],\r\n oekoTex: [],\r\n recycled: [],\r\n organic: [],\r\n ecovero: [],\r\n ocs_100: [],\r\n ocs_blended:[],\r\n grs:[]\r\n }\r\n\r\n for (const item of filter.activeFilters.sustainability) {\r\n switch(item) {\r\n case 'gots':\r\n const gots = cloned.filter(style => style.gots !== '');\r\n sustainabilityItems.gots = gots;\r\n break;\r\n case 'oekoTex':\r\n const oekoTex = cloned.filter(style => style.oekoTex !== '');\r\n sustainabilityItems.oekoTex = oekoTex;\r\n break;\r\n case 'recycled':\r\n const recycled = cloned.filter(style => !!style.recycled);\r\n sustainabilityItems.recycled = recycled;\r\n break;\r\n case 'organic':\r\n const organic = cloned.filter(style => !!style.organic);\r\n sustainabilityItems.recycled = organic;\r\n break;\r\n case 'ecovero':\r\n const ecovery = cloned.filter(style => !!style.ecovero);\r\n sustainabilityItems.recycled = ecovery;\r\n break;\r\n case 'ocs_100':\r\n const ocs_100 = cloned.filter(style => style.ocsno !== '');\r\n sustainabilityItems.ocs_100 = ocs_100;\r\n break;\r\n case 'ocs_blended':\r\n const ocs_blended = cloned.filter(style => style.ocsblended !== '');\r\n sustainabilityItems.ocs_blended = ocs_blended;\r\n break;\r\n case 'grs':\r\n const grs = cloned.filter(style => style.grsno !== '');\r\n sustainabilityItems.grs = grs;\r\n break;\r\n }\r\n\r\n newStyles = [\r\n ...sustainabilityItems.gots,\r\n ...sustainabilityItems.oekoTex,\r\n ...sustainabilityItems.recycled,\r\n ...sustainabilityItems.organic,\r\n ...sustainabilityItems.ecovero,\r\n ...sustainabilityItems.ocs_100,\r\n ...sustainabilityItems.ocs_blended,\r\n ...sustainabilityItems.grs\r\n ]\r\n }\r\n }\r\n return newStyles;\r\n}\r\n\r\nfunction changeActiveFilters (filter: Filter, filterType: any, filterValue: string, isActive?: boolean) {\r\n const newFilter = cloneDeep(filter);\r\n\r\n if (!newFilter) return newFilter;\r\n\r\n switch (filterType) {\r\n case 'deliveryWindows':\r\n if (isActive) {\r\n newFilter.activeFilters.deliveryWindows.push(filterValue);\r\n } else {\r\n const filterTypeIndex = newFilter.activeFilters.deliveryWindows.indexOf(filterValue);\r\n newFilter.activeFilters.deliveryWindows.splice(filterTypeIndex, 1);\r\n }\r\n break;\r\n case 'productGroups':\r\n if (isActive) {\r\n newFilter.activeFilters.productGroups.push(filterValue);\r\n } else {\r\n const filterTypeIndex = newFilter.activeFilters.productGroups.indexOf(filterValue);\r\n newFilter.activeFilters.productGroups.splice(filterTypeIndex, 1);\r\n }\r\n break;\r\n case 'productCategories':\r\n if (isActive) {\r\n newFilter.activeFilters.productCategories.push(filterValue);\r\n } else {\r\n const filterTypeIndex = newFilter.activeFilters.productCategories.indexOf(filterValue);\r\n newFilter.activeFilters.productCategories.splice(filterTypeIndex, 1);\r\n }\r\n break;\r\n case 'topCollections':\r\n if (isActive) {\r\n newFilter.activeFilters.collections.push(filterValue);\r\n } else {\r\n const filterTypeIndex = newFilter.activeFilters.collections.indexOf(filterValue);\r\n newFilter.activeFilters.collections.splice(filterTypeIndex, 1);\r\n }\r\n break;\r\n case 'sustainability':\r\n if (isActive && newFilter.activeFilters.sustainability) {\r\n newFilter.activeFilters.sustainability.push(filterValue);\r\n } else {\r\n if (newFilter.activeFilters.sustainability) {\r\n const filterTypeIndex = newFilter.activeFilters.sustainability.indexOf(filterValue);\r\n newFilter.activeFilters.sustainability.splice(filterTypeIndex, 1); \r\n }\r\n }\r\n break;\r\n }\r\n\r\n return newFilter;\r\n}\r\n","import React, { Component } from 'react'\r\n\r\nimport { FaPen, FaThumbsUp } from 'react-icons/fa';\r\n\r\nimport { cloneDeep } from 'lodash';\r\n\r\nimport { checkMonthGaps, positionDrops, formatDate, addMinmumMonths } from '../../../utils/deliveryWindowsHelper';\r\n\r\nimport { ContextMenu, Icon, Menu, MenuItem } from \"@blueprintjs/core\";\r\n\r\nimport { TweenLite } from \"gsap\";\r\nimport OrderApi from '../../../store/order/OrderApi';\r\n \r\ninterface Props {\r\n deliveryWindows: any[]\r\n onClickDrop: Function\r\n hideEditLink?: boolean\r\n onClickFilterGroup: Function\r\n userIsInformed: boolean\r\n setUserHasConfirmed: Function\r\n}\r\n\r\nexport class DeliveryWindows extends Component {\r\n constructor(props: Props) {\r\n super(props);\r\n\r\n this.box = null;\r\n this.t = null;\r\n this.myTween = null;\r\n }\r\n\r\n state = {\r\n months: [],\r\n data: {},\r\n drops: {},\r\n deliveryWindows: [],\r\n showLeftArrow: false,\r\n showRightArrow: true,\r\n showArrows: false,\r\n arrowsInitialized: false,\r\n monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\r\n gotIt: false,\r\n };\r\n\r\n box: HTMLDivElement | null;\r\n t: ReturnType | null;\r\n myTween: GSAPTimeline | null;\r\n \r\n container = React.createRef();\r\n\r\n componentDidMount() {\r\n const gotIt = OrderApi.getGotIt();\r\n\r\n console.log(gotIt, 'gotit from localstorage')\r\n\r\n console.log(this.props.deliveryWindows, 'deliveryWindows')\r\n\r\n this.setState({ gotIt: gotIt})\r\n this.props.setUserHasConfirmed(gotIt);\r\n \r\n if (this.props.deliveryWindows) {\r\n this.setupMonths(this.props.deliveryWindows);\r\n }\r\n\r\n if (this.container.current) {\r\n if (+this.container.current.scrollWidth > +this.container.current.clientWidth) {\r\n this.setState({ showArrows: true, arrowsInitialized: true })\r\n }\r\n }\r\n\r\n window.addEventListener('resize', this.handleResize)\r\n }\r\n\r\n componentDidUpdate(prevProps: Props) {\r\n if (prevProps.deliveryWindows !== this.props.deliveryWindows) {\r\n this.setupMonths(this.props.deliveryWindows);\r\n }\r\n\r\n if (!this.state.arrowsInitialized && this.container.current) {\r\n if (+this.container.current.scrollWidth > +this.container.current.clientWidth) {\r\n this.t = TweenLite.to(this.box, 1, {duration: 1, opacity: 1, y: 0, stagger: 0.25});\r\n this.setState({ showArrows: true, arrowsInitialized: true })\r\n }\r\n }\r\n }\r\n\r\n handleResize = () => {\r\n if (this.container.current) {\r\n if (+this.container.current.scrollWidth > +this.container.current.clientWidth && !this.state.showArrows) {\r\n this.setState({ showArrows: true })\r\n } else {\r\n if (this.state.showArrows &&\r\n +this.container.current.scrollWidth === +this.container.current.clientWidth) {\r\n this.setState({ showArrows: false })\r\n }\r\n }\r\n }\r\n }\r\n\r\n setupMonths(deliveryWindows: any) {\r\n deliveryWindows.sort(function compare(a:any, b:any) {\r\n const dateA:any = new Date(a.shippingDate);\r\n const dateB:any = new Date(b.shippingDate);\r\n return dateA - dateB;\r\n });\r\n\r\n // let months = this.state.months;\r\n let months = [];\r\n const data:any = {};\r\n\r\n for (const i in deliveryWindows) {\r\n const delivery = deliveryWindows[i];\r\n\r\n const date = new Date(delivery.shippingDate);\r\n const year = date.getFullYear();\r\n const month = this.state.monthNames[date.getMonth()];\r\n const label = month + ' ' + year;\r\n\r\n if (months.indexOf(label) === -1) {\r\n months.push(label);\r\n // @ts-ignore\r\n data[label] = [delivery];\r\n }\r\n };\r\n\r\n const newMonths = checkMonthGaps(months, data, this.state.monthNames, deliveryWindows);\r\n const newMonthsWithMinimumMonths = addMinmumMonths(cloneDeep(newMonths), data, this.state.monthNames, deliveryWindows);\r\n\r\n this.setState({\r\n months: newMonthsWithMinimumMonths,\r\n data,\r\n }, () => {\r\n this.setupDrops();\r\n });\r\n }\r\n\r\n setupDrops() {\r\n let drops = {};\r\n\r\n for (const i in this.props.deliveryWindows) {\r\n const delivery = this.props.deliveryWindows[i];\r\n\r\n const date = new Date(delivery.shippingDate);\r\n const year = date.getFullYear();\r\n const month = this.state.monthNames[date.getMonth()];\r\n const label = month + ' ' + year;\r\n\r\n // @ts-ignore\r\n if (!drops[label]) {\r\n // @ts-ignore\r\n drops[label] = [];\r\n }\r\n\r\n // @ts-ignore\r\n drops[label].push({\r\n date: date,\r\n shippingDate: new Date(delivery.shippingDate),\r\n shippingFrom: new Date(delivery.shippingFrom),\r\n shippingdateVisual: formatDate(new Date(delivery.shippingDate)),\r\n deliveryCode: delivery.deliveryCode,\r\n delivreryShortdescription: delivery.deliveryPrintdescription,\r\n position: 0\r\n });\r\n }\r\n\r\n let postioned = positionDrops(drops, this.state.months);\r\n this.setState({drops: postioned});\r\n }\r\n\r\n onClickGotIt = () => {\r\n this.setState({ gotIt: true });\r\n this.props.setUserHasConfirmed(true)\r\n }\r\n\r\n onClickDrop(drop: any) {\r\n this.props.onClickDrop(drop);\r\n }\r\n\r\n onClickFilterGroup = (drop: any) => {\r\n this.props.onClickFilterGroup('deliverywindows', {\r\n value: drop.deliveryCode\r\n })\r\n }\r\n\r\n renderDrops(month: any) {\r\n // @ts-ignore\r\n if (!this.state.drops[month]) {\r\n return null;\r\n }\r\n\r\n // @ts-ignore\r\n const dropsForMonth = this.state.drops[month];\r\n\r\n return Object.keys(dropsForMonth).map((key: any, $index:number) => {\r\n const drops = dropsForMonth[key];\r\n if (!drops.length) {\r\n return null;\r\n }\r\n\r\n return
\r\n {\r\n drops.length &&\r\n drops.map((drop: any, index: number) => {\r\n return this.showContextMenu(e, drop)}\r\n style={{gridRow: drop.position}} key={`${drop.deliveryCode}/${index}`}>\r\n

\r\n {drop.deliveryCode === 'specdate' ? 'Shipping Date' : drop.deliveryCode}\r\n

\r\n

\r\n {drop.shippingdateVisual}\r\n

\r\n {\r\n !this.props.hideEditLink &&\r\n

\r\n Change shipping date\r\n \r\n

\r\n }\r\n
\r\n })\r\n }\r\n \r\n })\r\n }\r\n\r\n renderMonths() {\r\n return this.state.months.map((month, $index) => {\r\n return (\r\n
\r\n
\r\n

{month}

\r\n
\r\n this.box = e}\r\n className=\"delivery-windows__month-days\"\r\n style={{gridTemplateRows: 'repeat(5, 1fr)'}}>\r\n {this.renderDrops(month)}\r\n
\r\n \r\n );\r\n });\r\n }\r\n\r\n private showContextMenu = (e: React.MouseEvent, drop: any) => {\r\n // must prevent default to cancel parent's context menu\r\n e.preventDefault();\r\n // invoke static API, getting coordinates from mouse event\r\n ContextMenu.show(\r\n \r\n this.onClickFilterGroup(drop) } />\r\n {!this.props.hideEditLink && this.onClickDrop(drop)}/>}\r\n ,\r\n { left: e.clientX, top: e.clientY },\r\n () => this.setState({ isContextMenuOpen: false }),\r\n );\r\n // indicate that context menu is open so we can add a CSS class to this element\r\n this.setState({ isContextMenuOpen: true });\r\n };\r\n\r\n private scrollLeftRight = (direction: 'left' | 'right') => {\r\n if (this.container.current) {\r\n if (direction === 'left') {\r\n this.container.current.scrollLeft -= this.container.current.scrollWidth;\r\n }\r\n\r\n if (direction === 'right') {\r\n this.container.current.scrollLeft += this.container.current.scrollWidth;\r\n }\r\n }\r\n }\r\n\r\n handleScroll = (e: any) => {\r\n const scrollLeft = e.target.scrollLeft;\r\n\r\n if (scrollLeft > 0) {\r\n this.setState({ showLeftArrow: true })\r\n }\r\n\r\n if (scrollLeft === 0) {\r\n this.setState({ showLeftArrow: false })\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n
\r\n {this.renderMonths()}\r\n {\r\n !this.props.userIsInformed &&\r\n \r\n
\r\n
\r\n

Change shipping dates

\r\n

\r\n Click on a drop on the timeline and change it to\r\n your need.\r\n

\r\n

\r\n Got it\r\n \r\n

\r\n
\r\n
\r\n }\r\n
\r\n {\r\n this.state.showLeftArrow && this.state.showArrows &&\r\n
this.scrollLeftRight('left')}>\r\n \r\n
\r\n }\r\n {\r\n this.state.showRightArrow && this.state.showArrows &&\r\n
this.scrollLeftRight('right')}>\r\n \r\n
\r\n }\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default DeliveryWindows;","import React from 'react';\r\n\r\ninterface IProps {\r\n slides: string[],\r\n}\r\n\r\nconst StyleCarousel: React.FC = (props) => {\r\n const { slides } = props;\r\n const [currentIndex, setValue] = React.useState(0);\r\n\r\n React.useEffect(() => {\r\n const interval = setInterval(() => {\r\n let index = currentIndex;\r\n index++;\r\n \r\n if (index >= slides.length) {\r\n index = 0;\r\n }\r\n \r\n setValue(index);\r\n }, 4000);\r\n return () => clearInterval(interval);\r\n });\r\n \r\n return (\r\n
\r\n {\r\n slides.map((slide, key) => {\r\n let slideClassName = 'slide ' + (currentIndex === key ? 'active' : '');\r\n \r\n if (currentIndex + 1 === slides.length && key === 0) {\r\n slideClassName = slideClassName + ' next';\r\n } else if (currentIndex === 0 && key + 1 === slides.length ) {\r\n slideClassName = slideClassName + ' previous';\r\n } else if (currentIndex + 1 === key) {\r\n slideClassName = slideClassName + (currentIndex + 1 === key ? ' next' : '');\r\n } else if (currentIndex - 1 === key) {\r\n slideClassName = slideClassName + (currentIndex - 1 === key ? ' previous' : '');\r\n }\r\n\r\n if (slides.length === 1) {\r\n slideClassName = 'slide active'\r\n }\r\n \r\n return (\r\n \r\n {slide}\r\n
\r\n )\r\n })\r\n }\r\n \r\n );\r\n}\r\n\r\nexport default StyleCarousel;","import React, { Component } from 'react'\r\n\r\nimport * as Highcharts from 'highcharts';\r\nimport HighchartsReact from 'highcharts-react-official';\r\n\r\nimport {\r\n IGrouping,\r\n} from './dashboard.d';\r\n\r\ninterface chartData {\r\n name: string,\r\n y: number,\r\n}\r\n\r\ninterface State {\r\n chartQuantifier: 'quantity' | 'revenue',\r\n chartOptions: any,\r\n chartOptionsDesktop: any,\r\n initialized: boolean\r\n}\r\n \r\ninterface OwnProps {\r\n data: any[],\r\n orderId: number,\r\n selectedCategory: string,\r\n productSortedByCategory: IGrouping,\r\n currencyCode: string\r\n}\r\n \r\ninterface DispatchProps {}\r\n \r\ninterface StateProps {\r\n}\r\n\r\ntype Props = StateProps & OwnProps & DispatchProps;\r\n\r\nexport class ChartSummaryHighcharts extends Component {\r\n state: State = {\r\n chartQuantifier: 'quantity',\r\n chartOptions: {},\r\n chartOptionsDesktop: {},\r\n initialized: false,\r\n }\r\n\r\n componentDidMount() {\r\n if ((!this.state.initialized && this.props.selectedCategory) && Object.keys(this.props.productSortedByCategory).length) {\r\n setTimeout(() => this.drawChart(), 200)\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps: Props) {\r\n if ((this.props.selectedCategory !== prevProps.selectedCategory)) {\r\n setTimeout(() => this.drawChart(), 200)\r\n } else if (this.props.orderId !== prevProps.orderId) {\r\n setTimeout(() => this.drawChart(), 200)\r\n }\r\n }\r\n\r\n drawChart = () => {\r\n let data: chartData[] = [];\r\n \r\n for (const key in this.props.productSortedByCategory[this.props.selectedCategory]) {\r\n const subGroup = this.props.productSortedByCategory[this.props.selectedCategory][key];\r\n data.push({name: subGroup.title, y: +subGroup[this.state.chartQuantifier].toFixed(2)});\r\n }\r\n\r\n const ref = this;\r\n\r\n const chartOptions = {\r\n chart: {\r\n type: 'pie',\r\n backgroundColor: '#000',\r\n className: 'highchart-container',\r\n style: {\r\n fontColor: '#fff'\r\n }\r\n },\r\n credits: {\r\n enabled: false\r\n },\r\n plotOptions: {\r\n pie: {\r\n animation: {\r\n duration: 750,\r\n easing: 'easeOutQuad'\r\n },\r\n shadow: false,\r\n borderWidth: 0,\r\n center: ['50%', '50%'],\r\n cursor: 'pointer',\r\n showInLegend: true,\r\n dataLabels: {\r\n enabled: true,\r\n // inside: true,\r\n align: 'center',\r\n distance: -15,\r\n crop: false,\r\n borderWidth: 0,\r\n style: {\r\n color: 'white',\r\n fontSize: '10px',\r\n },\r\n formatter: function() {\r\n var self: any = this;\r\n if (ref.state.chartQuantifier === 'revenue') {\r\n return self.point.y + ' ' + ref.props.currencyCode;\r\n }\r\n return self.point.y;\r\n }\r\n },\r\n colors: [\r\n '#FF1529',\r\n '#FF961B',\r\n '#F4CE00',\r\n '#7CB43C',\r\n '#708739',\r\n '#5B3716',\r\n '#FF961B',\r\n '#8A29EA',\r\n '#18D43F',\r\n '#FDFD15',\r\n '#DDA300',\r\n '#1A82DE',\r\n ]\r\n }\r\n },\r\n legend: {\r\n align: 'left', \r\n layout: 'vertical',\r\n verticalAlign: 'top',\r\n x: 0,\r\n y: 0,\r\n margin:0,\r\n itemStyle: {\r\n color: '#fff',\r\n fontSize: '11px',\r\n },\r\n itemMarginBottom: 5,\r\n },\r\n title: {\r\n text: '',\r\n style: {\r\n color: '#fff'\r\n }\r\n },\r\n series: [{\r\n animation: {\r\n duration: 750,\r\n easing: 'easeOutQuad'\r\n },\r\n name: '',\r\n size: '100%',\r\n // innerSize: '55%',\r\n data\r\n }]\r\n };\r\n\r\n const chartOptionsDesktop = {\r\n chart: {\r\n type: 'pie',\r\n backgroundColor: '#000',\r\n className: 'highchart-container',\r\n style: {\r\n fontColor: '#fff'\r\n }\r\n },\r\n credits: {\r\n enabled: false\r\n },\r\n plotOptions: {\r\n pie: {\r\n animation: {\r\n duration: 750,\r\n easing: 'easeOutQuad'\r\n },\r\n shadow: false,\r\n borderWidth: 0,\r\n center: ['50%', '50%'],\r\n cursor: 'pointer',\r\n showInLegend: true,\r\n dataLabels: {\r\n enabled: true,\r\n inside: true,\r\n softConnector: false,\r\n borderWidth: 0,\r\n shadow: false,\r\n style: {\r\n color: '#fff'\r\n },\r\n formatter: function() {\r\n var self: any = this;\r\n if (ref.state.chartQuantifier === 'revenue') {\r\n return self.point.y + ' ' + ref.props.currencyCode;\r\n }\r\n return self.point.y;\r\n }\r\n },\r\n colors: [\r\n '#FF1529',\r\n '#FF961B',\r\n '#F4CE00',\r\n '#7CB43C',\r\n '#708739',\r\n '#5B3716',\r\n '#FF961B',\r\n '#8A29EA',\r\n '#18D43F',\r\n '#FDFD15',\r\n '#DDA300',\r\n '#1A82DE',\r\n ]\r\n }\r\n },\r\n legend: {\r\n align: 'left',\r\n layout: 'vertical',\r\n verticalAlign: 'top',\r\n x: 0,\r\n y: 0,\r\n itemStyle: {\r\n color: '#fff',\r\n fontSize: '14px'\r\n }\r\n },\r\n title: {\r\n text: '',\r\n style: {\r\n color: '#fff'\r\n }\r\n },\r\n series: [{\r\n animation: {\r\n duration: 750,\r\n easing: 'easeOutQuad'\r\n },\r\n name: '',\r\n size: '85%',\r\n innerSize: '55%',\r\n data\r\n }]\r\n };\r\n\r\n this.setState({\r\n chartOptions,\r\n chartOptionsDesktop,\r\n initialized: true\r\n })\r\n }\r\n\r\n toggleQuantitfier() {\r\n const chartQuantifier = this.state.chartQuantifier === 'quantity' ? 'revenue' : 'quantity';\r\n\r\n this.setState({chartQuantifier}, () => {\r\n this.drawChart();\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n <>\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n Quantity\r\n
\r\n
\r\n this.toggleQuantitfier()}\r\n />\r\n \r\n
\r\n
\r\n Amount\r\n
\r\n
\r\n
\r\n \r\n )\r\n }\r\n}\r\n\r\nexport default ChartSummaryHighcharts;","import React from 'react';\r\nimport Modal from './Modal';\r\n\r\ninterface IProps {\r\n isShowing: boolean,\r\n hide: any,\r\n content: any,\r\n footer?: any\r\n}\r\n\r\nconst ConfirmModal: React.FC = (props) => {\r\n const { isShowing, hide, content } = props;\r\n\r\n if (isShowing) {\r\n return (\r\n \r\n )\r\n }\r\n \r\n return null;\r\n}\r\n\r\nexport default ConfirmModal;","import React, { Component } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { ThunkDispatch } from 'redux-thunk'\r\n\r\n// Store.\r\nimport { RootState } from '../../../store';\r\nimport { IFilterState } from '../../../store/session/reducers';\r\nimport { IUserSate } from '../../../store/user/reducers'\r\nimport { applyChanges, applyChangesFromDashboard } from '../../../store/order/actions';\r\n\r\n// Components.\r\nimport ConfirmModal from '../../layout/Modal/ConfirmModal';\r\nimport ProductOverlay from '../ProductOverlay';\r\nimport ProductListItem from '../../shared/ProductListItem';\r\n\r\nimport ReactToPrint from 'react-to-print';\r\n\r\n// API.\r\nimport ProductApi from '../../../store/products/ProductApi';\r\n\r\n// Models,\r\nimport Order, { orderLine } from '../../../models/Order';\r\nimport { basketLine } from '../../../models/Basket';\r\nimport Style, { createStyle } from 'molo-shared/lib/models/Style';\r\n\r\n// Utils.\r\nimport { cloneDeep, spread, union } from 'lodash';\r\nimport {\r\n humanReadableLineUnitPrices,\r\n totalLineDiscountAmount,\r\n totalLineAmount,\r\n roundAmount\r\n} from '../../../utils/priceHelper';\r\nimport { mapMoloItems } from '../../../models/MoloItem';\r\nimport { appConfig } from '../../../config';\r\nimport { FaList, FaTh, FaPrint, FaCircle } from 'react-icons/fa';\r\nimport { filterByValue } from 'molo-shared'\r\nimport {\r\n IGrouping,\r\n} from './dashboard.d';\r\nimport { StyleBean } from '../../../models/Beans';\r\n\r\ninterface ISize {\r\n sizename: string,\r\n quantity: number\r\n}\r\n\r\ninterface masterColorKey {\r\n [id: string]: any,\r\n}\r\n\r\ninterface ISizes {\r\n [id: string]: ISize[],\r\n}\r\n\r\ninterface IGroupedOrderLine {\r\n [id: string]: any,\r\n}\r\n\r\ninterface IGroupedDeliveryWindows {\r\n [id: string]: {\r\n label: string,\r\n\r\n orderLines: orderLine[],\r\n }\r\n}\r\n\r\ninterface IRRPMap {\r\n [id: string]: number[]\r\n}\r\n\r\ninterface ISustainabilityMap {\r\n [id: string]: string | null | undefined\r\n}\r\n\r\ninterface State {\r\n showDeleteModal: boolean,\r\n modal: any,\r\n groupedOrderlines: orderLine[],\r\n productOverlayComponent: JSX.Element | null,\r\n showOverlay: boolean,\r\n changes: basketLine,\r\n selectedProduct?: StyleBean,\r\n isListView: boolean,\r\n showSizes: boolean,\r\n sizes: ISizes,\r\n rrpMap: IRRPMap\r\n allSizes: ISizes\r\n searchTerm : '',\r\n}\r\n \r\ninterface OwnProps {\r\n productSortedByCategory: IGrouping,\r\n selectedCategory: string,\r\n orderLines: orderLine[],\r\n onClickDelete: Function,\r\n order: Order,\r\n styles: Style[]\r\n groupedOrderlines: orderLine[]\r\n sizes: ISizes,\r\n masters: any\r\n groupedMoloItems: {[id: string]: any[]}\r\n rrpMap: IRRPMap,\r\n allSizes: ISizes,\r\n disableActions?: boolean\r\n}\r\n \r\ninterface DispatchProps {\r\n applyChanges: (orderId: number, changes: basketLine) => void\r\n applyChangesFromDashboard: (orderId: number, changes: basketLine) => void\r\n}\r\n \r\ninterface StateProps {\r\n filterState: IFilterState,\r\n userState: IUserSate,\r\n}\r\n \r\ntype Props = StateProps & OwnProps & DispatchProps;\r\n\r\nconst baseUrl = appConfig.media.baseUrl;\r\n\r\nexport class Details extends Component {\r\n state: State = {\r\n showDeleteModal: false,\r\n modal: null,\r\n groupedOrderlines: [],\r\n productOverlayComponent: null,\r\n showOverlay: false,\r\n changes: {},\r\n isListView: true,\r\n showSizes: false,\r\n sizes: {},\r\n rrpMap: {},\r\n allSizes: {},\r\n searchTerm: '',\r\n }\r\n\r\n componentRef: any = null;\r\n\r\n groupSimilarColors(orderLines: orderLine[]) {\r\n const grouped: IGroupedOrderLine = {}\r\n const sizes: ISizes = {};\r\n \r\n for (const i in orderLines) {\r\n const orderline = orderLines[i];\r\n const masterid = orderline.masterid;\r\n const colorcode = orderline.colorcode;\r\n\r\n if (grouped[masterid + colorcode]) {\r\n const q = +grouped[masterid + colorcode].quantity + +orderline.quantity;\r\n grouped[masterid + colorcode].quantity = q;\r\n grouped[masterid + colorcode]['orderLines'].push({...orderline})\r\n } else {\r\n grouped[masterid + colorcode] = orderline\r\n grouped[masterid + colorcode]['orderLines'] = [{...orderline}]\r\n }\r\n \r\n if (!sizes[masterid + colorcode]) {\r\n sizes[masterid + colorcode] = [];\r\n }\r\n \r\n sizes[masterid + colorcode].push({ sizename: orderline.sizename, quantity: orderline.quantity });\r\n }\r\n\r\n // this.setState({ sizes })\r\n\r\n let g: orderLine[] = []\r\n\r\n for (const key in grouped) {\r\n let line = grouped[key];\r\n let q = 0;\r\n\r\n for (const delta in line['orderLines']) {\r\n q = q + line['orderLines'][delta].quantity;\r\n }\r\n\r\n line.quantity = q;\r\n\r\n g.push(line);\r\n }\r\n\r\n const sorted = g.sort((a, b) => (a.masterid > b.masterid) ? 1 : -1)\r\n\r\n return sorted;\r\n }\r\n\r\n openDeleteModal = (line: orderLine) => {\r\n this.setState({\r\n showDeleteModal: true\r\n }, () => {\r\n const modal = (\r\n this.onHide()}\r\n content={(\r\n
\r\n

Remove line

\r\n

Are you sure you want to remove this order item?

\r\n
\r\n \r\n \r\n
\r\n
\r\n )}\r\n />\r\n )\r\n\r\n this.setState({showDeleteModal: true, modal})\r\n });\r\n }\r\n\r\n onHide = () => {\r\n this.setState({ showDeleteModal: false, modal: null })\r\n }\r\n\r\n onHideProductOverlay = () => {\r\n this.setState({ showOverlay: false })\r\n }\r\n\r\n applyBasketChanges = (changes: basketLine) => {\r\n const newChanges = { ...this.state.changes, ...changes }\r\n this.setState({changes: newChanges})\r\n }\r\n\r\n applyChanges = () => {\r\n if (this.props.order) {\r\n this.props.applyChangesFromDashboard(this.props.order.orderheader.appOrderId, this.state.changes);\r\n this.setState({changes: {}}, () => {\r\n this.onHideProductOverlay();\r\n })\r\n }\r\n }\r\n\r\n handleOnChangeProduct = async (item: any) => {\r\n const currencyCode = this.props.userState.user.currencyCode || 'EUR';\r\n const response = await ProductApi.getMaster(item.masterId, item.colorCode, currencyCode)\r\n const product = response.data;\r\n const style = createStyle(product); \r\n const bean = StyleBean.build(style, 'style')\r\n\r\n this.handleOnProductClick(bean)\r\n }\r\n\r\n onClickDelete = (line: orderLine) => {\r\n this.props.onClickDelete(line);\r\n this.onHide()\r\n }\r\n\r\n handleOnProductClick = (product: StyleBean) => {\r\n if (window.innerWidth < 901 || this.props.disableActions) {\r\n return;\r\n }\r\n\r\n if (this.props.order && this.props.order.orderheader.navImportRef\r\n && this.props.order.orderheader.orderState !== 0) {\r\n return;\r\n }\r\n\r\n setTimeout(() => {\r\n this.setState({\r\n selectedProduct: product,\r\n showOverlay: true,\r\n });\r\n }, 200)\r\n \r\n }\r\n\r\n renderTableHeader = () => {\r\n return (\r\n \r\n \r\n Sustainability\r\n Quantity\r\n Unit price\r\n RRP\r\n {\r\n this.props.order && this.props.order.orderheader.orderLinediscount ?\r\n Discount : null\r\n }\r\n Total\r\n {\r\n this.props.order.orderheader.orderState === 0 &&\r\n \r\n }\r\n \r\n )\r\n }\r\n\r\n renderTableHeaderPrint = () => {\r\n return (\r\n \r\n \r\n Sustainability\r\n Quantity\r\n Unit price\r\n RRP\r\n {\r\n this.props.order && this.props.order.orderheader.orderLinediscount ?\r\n Discount : null\r\n }\r\n Total\r\n {\r\n this.props.order.orderheader.orderState === 0 && !this.props.disableActions &&\r\n \r\n }\r\n \r\n )\r\n }\r\n\r\n getSustainability = (item: any) => {\r\n \r\n console.log('Sustainability check');\r\n console.dir(item);\r\n\r\n if (item.gots !== '') return 'GOTS';\r\n if (item.oekoTex !== '') return 'OEKOTEX';\r\n if (item.ocsno != '') return 'OCS 100';\r\n if(item.ocsblended != '') return 'OCS BLENDED';\r\n if (item.recycled) return 'RECYCLED';\r\n if (item.organic) return 'ORGANIC';\r\n if(item.ecovero) return 'ECOVERO';\r\n if (item.grsno) return 'GRS';\r\n \r\n\r\n return '';\r\n }\r\n\r\n renderTableBody = (orderLines: orderLine[], showSizes: boolean, withSubtotal?: boolean) => {\r\n\r\n return (\r\n \r\n {\r\n filterByValue(orderLines, this.state.searchTerm).map((line, key) => {\r\n // const imageUrl = 'https://picsum.photos/200/300';\r\n const imageUrl = baseUrl + 'media/productimage/' + line.seasoncode + '/' + line.masterid + '/' + line.colorcode + '/small';\r\n \r\n return (\r\n \r\n \r\n this.handleOnProductClick(StyleBean.build(line, 'orderLine'))}>\r\n
\r\n {line.description}\r\n
\r\n {line.masterid} {line.description}\r\n {line.colorcode} {line.colorname}\r\n
\r\n
\r\n \r\n this.handleOnProductClick(StyleBean.build(line, 'orderLine'))}>\r\n { this.getSustainability(line)}\r\n \r\n this.handleOnProductClick(StyleBean.build(line, 'orderLine'))}>\r\n {\r\n !line.colorBlocked && line.quantityShipped ?\r\n \r\n Quantity shipped\r\n : null\r\n }\r\n {\r\n line.colorBlocked ?\r\n \r\n Blocked\r\n : null\r\n }\r\n {line.quantity}\r\n \r\n this.handleOnProductClick(StyleBean.build(line, 'orderLine'))}>\r\n { humanReadableLineUnitPrices(line.masterid, line.colorcode, line.orderLines) }\r\n \r\n this.handleOnProductClick(StyleBean.build(line, 'orderLine'))}>\r\n
\r\n {\r\n this.props.rrpMap[line.masterid + line.colorcode] ?\r\n this.props.rrpMap[line.masterid + line.colorcode].map((item: number, key) => {\r\n return (\r\n \r\n {roundAmount(item)}\r\n {\r\n key + 1 !== this.props.rrpMap[line.masterid + line.colorcode].length && / \r\n }\r\n \r\n )\r\n })\r\n : ...\r\n }\r\n
\r\n \r\n {\r\n this.props.order && this.props.order.orderheader.orderLinediscount ?\r\n this.handleOnProductClick(StyleBean.build(line, 'orderLine'))}>{ roundAmount(totalLineDiscountAmount(line.masterid, line.colorcode, line.orderLines)) } ({ line.lineDiscountPct }%) : null\r\n }\r\n { roundAmount(totalLineAmount(line.masterid, line.colorcode, line.orderLines)) } \r\n {\r\n this.props.order.orderheader.orderState === 0 && !this.props.disableActions &&\r\n \r\n }\r\n \r\n {\r\n showSizes &&\r\n \r\n \r\n \r\n
\r\n {\r\n this.props.allSizes[line.masterid + line.colorcode] &&\r\n this.props.allSizes[line.masterid + line.colorcode].map((size, index) => {\r\n return (\r\n
\r\n
\r\n {size.sizename}\r\n
\r\n
\r\n {size.quantity}\r\n
\r\n
\r\n )\r\n })\r\n }\r\n
\r\n \r\n \r\n
\r\n }\r\n
\r\n )\r\n })\r\n }\r\n { this.state.showDeleteModal && this.state.modal }\r\n
\r\n )\r\n }\r\n\r\n renderOverlay = () => {\r\n\r\n if (!this.state.selectedProduct) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n )\r\n }\r\n\r\n onChangeHandler = () => {\r\n this.setState({ isListView: !this.state.isListView })\r\n }\r\n\r\n getStyleBean = (line: any) => {\r\n // if (this.props.order.orderheader.orderIsFinal) {\r\n // let bean = StyleBean.build(line, 'orderLine');\r\n // bean.currencyCode = this.props.order.orderheader.currencyCode;\r\n // return bean;\r\n // }\r\n\r\n // Dirty but useful fallback.\r\n if (!this.props.groupedMoloItems[line.masterid + line.colorcode]) {\r\n return StyleBean.build({}, 'orderLine')\r\n }\r\n\r\n let bean = StyleBean.build(mapMoloItems(this.props.groupedMoloItems[line.masterid + line.colorcode])[0], 'moloItem');\r\n bean.currencyCode = this.props.order.orderheader.currencyCode;\r\n return bean;\r\n }\r\n\r\n renderGrid = () => {\r\n return (\r\n
    \r\n {\r\n this.props.groupedOrderlines.map((line, key) =>\r\n {\r\n return (\r\n \r\n {\r\n
  • this.handleOnProductClick(this.getStyleBean(line)) } className=\"pl-item__wrapper\">\r\n \r\n {\r\n this.state.showSizes &&\r\n
    \r\n
    \r\n {\r\n this.props.sizes[line.masterid + line.colorcode].map((size, index) => {\r\n return (\r\n
    \r\n
    \r\n {size.sizename}\r\n
    \r\n
    \r\n {size.quantity}\r\n
    \r\n
    \r\n )\r\n })\r\n }\r\n
    \r\n
    \r\n }\r\n
  • \r\n }\r\n
    \r\n )\r\n }\r\n )\r\n }\r\n
\r\n )\r\n }\r\n\r\n groupBy = (key: any) => (array: any[]) =>\r\n array.reduce((objectsByKeyValue: { [x: string]: any; }, obj: { [x: string]: any; }) => {\r\n const value = obj[key];\r\n objectsByKeyValue[value] = (objectsByKeyValue[value] || []).concat(obj);\r\n return objectsByKeyValue;\r\n }, {});\r\n\r\n renderPrint = () => {\r\n const order = this.props.order.orderheader;\r\n // Group every thing by delivery windows.\r\n const groupByDeliveryCode = this.groupBy(['deliveryCode']);\r\n const groupedByDeliveryCode = groupByDeliveryCode(this.props.orderLines);\r\n let sortedWithGroup: IGroupedOrderLine = {};\r\n // And then inside every delivery window, group by product group.\r\n for (const key in groupedByDeliveryCode) {\r\n const groupByProductGroup = this.groupBy(['productgroup']);\r\n const grouped = groupByProductGroup(groupedByDeliveryCode[key]);\r\n sortedWithGroup[key] = grouped;\r\n }\r\n\r\n return (\r\n \r\n
(this.componentRef = el)} className=\"print-view\">\r\n
\r\n { order.sellToCustomerName }\r\n b2b{order.appOrderId}\r\n {order.orderType}\r\n {\r\n order.navImportRef &&\r\n \r\n {order.navImportRef}\r\n \r\n }\r\n {\r\n order.salespersonNote &&\r\n \r\n { order.salespersonNote }\r\n \r\n }\r\n
\r\n {Object.keys(sortedWithGroup).map((key: string) => {\r\n const deliveryGroup = sortedWithGroup[key];\r\n const values = Object.values(deliveryGroup);\r\n const isLast = Object.keys(sortedWithGroup)[Object.keys(sortedWithGroup).length - 1] === key;\r\n const allTheValues = spread(union)(values);\r\n let totalQuantity = allTheValues.map((value: any) => value.quantity).reduce((a, b) => a + b);\r\n let total = allTheValues.map((value: any) => value.amount).reduce((a, b) => a + b);\r\n const shipmentDate = deliveryGroup[Object.keys(deliveryGroup)[0]][0].deliveryshiptmentdate;\r\n \r\n return (\r\n
\r\n
\r\n { key === 'specdate' ? 'Shipping date' : key }\r\n { new Date(shipmentDate).toLocaleDateString() }\r\n
\r\n {\r\n Object.keys(deliveryGroup).map((key) => {\r\n const items = this.groupSimilarColors(cloneDeep(deliveryGroup[key]));\r\n\r\n return (\r\n \r\n

\r\n \r\n { key }\r\n \r\n

\r\n {\r\n \r\n { this.renderTableHeader() }\r\n { this.renderTableBody(items, true, true) }\r\n
\r\n }\r\n
\r\n )\r\n })\r\n }\r\n
\r\n
Subtotal
\r\n
Quantity: { totalQuantity }
\r\n
Total: { roundAmount(total) }
\r\n
\r\n {\r\n isLast &&\r\n \r\n
\r\n

Grand Total

\r\n
\r\n
\r\n
Quantity: { this.props.order.orderTotals.noOfItems }
\r\n
Total: { roundAmount(this.props.order.orderTotals.amount) }
\r\n
\r\n
\r\n
\r\n }\r\n
\r\n )\r\n })}\r\n
\r\n
\r\n );\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n
\r\n
\r\n this.setState({ isListView: true })}\r\n className={\"dashboard-details__header__toggler desktop-only\" + (this.state.isListView ? ' active' : '')}>\r\n \r\n
\r\n this.setState({ isListView: false })}\r\n className={\"dashboard-details__header__toggler desktop-only\" + (!this.state.isListView ? ' active' : '')}>\r\n \r\n
\r\n
\r\n
\r\n {this.setState({ showSizes: !this.state.showSizes })}}\r\n type=\"checkbox\"/>\r\n
\r\n \r\n
\r\n
\r\n
\r\n {(Object.keys(this.props.rrpMap).length ||\r\n (this.props.order && this.props.order.orderheader.navImportRef && this.props.order.orderheader.orderState === 1)) ? \r\n
\r\n
Print basket
}\r\n content={() => this.componentRef}\r\n />\r\n
: null}\r\n
\r\n {\r\n const value = event.target.value;\r\n this.setState({ searchTerm: value })\r\n }}\r\n />\r\n
\r\n \r\n {\r\n this.state.isListView &&\r\n \r\n { this.renderTableHeader() }\r\n { this.renderTableBody(this.props.groupedOrderlines, this.state.showSizes) }\r\n
\r\n }\r\n {\r\n !this.state.isListView &&\r\n this.renderGrid()\r\n }\r\n { this.renderPrint() }\r\n \r\n { this.state.showOverlay && this.renderOverlay() }\r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (states: RootState, ownProps: OwnProps): StateProps => {\r\n return {\r\n filterState: states.session.filter,\r\n userState: states.user.user,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: ThunkDispatch<{}, {}, any>, ownProps: OwnProps): DispatchProps => {\r\n return {\r\n applyChanges: async (orderId: number, changes: basketLine) => {\r\n await dispatch(applyChanges(orderId, changes))\r\n // console.log('applyChanges completed [UI]')\r\n },\r\n applyChangesFromDashboard: async (orderId: number, changes: basketLine) => {\r\n await dispatch(applyChangesFromDashboard(orderId, changes))\r\n // console.log('applyChanges completed [UI]')\r\n },\r\n }\r\n}\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Details)","import React, { Component } from 'react'\r\nimport { RootState } from '../../store';\r\nimport { connect } from 'react-redux'\r\nimport { getFilter, applyFilter } from '../../store/session/actions'\r\nimport { IFilterState } from '../../store/session/reducers'\r\nimport { ThunkDispatch } from 'redux-thunk'\r\n\r\nimport { FaChevronLeft, FaTimes } from 'react-icons/fa';\r\n\r\nimport { cloneDeep } from 'lodash';\r\n\r\nimport { orderLine } from '../../models/Order';\r\nimport { Filter } from '../../models/Filter';\r\nimport { DashboardFilterHelper as FilterHelper } from '../../utils/DashboardFilterHelper';\r\nimport { CheckboxInput } from '../form/CheckboxInput';\r\nimport AccordionPanel from '../layout/AccordionPanel';\r\n\r\ninterface State {\r\n initialized?: boolean;\r\n styles?: orderLine[],\r\n searchTerm: string,\r\n}\r\n\r\ninterface OwnProps {\r\n styles: orderLine[];\r\n showFilter: boolean;\r\n onClickGoBack?: Function;\r\n onClickCloseFilter?: Function;\r\n hideGoBack?: boolean;\r\n}\r\n\r\ninterface DispatchProps {\r\n getFilter: () => void;\r\n applyFilter: (filter: Filter) => void;\r\n}\r\n\r\ninterface StateProps {\r\n filterState: IFilterState\r\n}\r\n\r\ntype Props = StateProps & OwnProps & DispatchProps\r\n\r\nclass DashboardFilterComponent extends Component {\r\n\r\n state = {initialized: false, searchTerm: '', styles: []}\r\n\r\n componentDidMount() {\r\n this.props.getFilter();\r\n }\r\n\r\n componentDidUpdate(prevProps: Props, prevState: State) {\r\n if ((!this.state.initialized && this.props.filterState.filter) || (prevProps.styles !== this.props.styles && this.props.filterState.filter)) {\r\n this.initFilters(this.props.filterState.filter, this.props.styles);\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n this.setState({initialized: false})\r\n }\r\n\r\n public static getDerivedStateFromProps(props: Props, state: State) {\r\n if (props.styles !== state.styles) {\r\n return {\r\n styles: props.styles,\r\n }\r\n }\r\n \r\n return null;\r\n }\r\n\r\n initFilters (filter:Filter, styles: orderLine[]) {\r\n const newFilter = cloneDeep(filter);\r\n \r\n newFilter.productGroups = FilterHelper.hydrateProductGroups(styles);\r\n newFilter.deliveryWindows = FilterHelper.hydrateDeliveryWindows(styles);\r\n newFilter.productCategories = FilterHelper.hydrateProductCategories(styles);\r\n newFilter.collections = FilterHelper.hydrateCollections(styles);\r\n newFilter.sustainability = FilterHelper.hydrateSustainability(styles);\r\n this.props.applyFilter(newFilter);\r\n\r\n this.setState({\r\n initialized: true\r\n });\r\n }\r\n \r\n onFilterSelectionProductCategory (event: any) { \r\n const selectedCategory = event.currentTarget.value;\r\n const selectedCategoryIsActive = event.currentTarget.checked;\r\n this.changeActiveFilters('productCategories', selectedCategory, selectedCategoryIsActive);\r\n }\r\n\r\n onFilterSelectionProductGroup (event: any) {\r\n const selectedProductGroup = event.currentTarget.value;\r\n const selectedProductGroupIsActive = event.currentTarget.checked;\r\n this.changeActiveFilters('productGroups', selectedProductGroup, selectedProductGroupIsActive);\r\n }\r\n\r\n onFilterSelectionDeliveryWindow (event: any) {\r\n const selectedDeliveryWindow = event.currentTarget.value;\r\n const selectedDeliveryWindowIsActive = event.currentTarget.checked;\r\n this.changeActiveFilters('deliveryWindows', selectedDeliveryWindow, selectedDeliveryWindowIsActive);\r\n }\r\n\r\n onFilterSelectionCollection (event: any) {\r\n const selectedCollection = event.currentTarget.value;\r\n const selectedCollectionIsActive = event.currentTarget.checked;\r\n this.changeActiveFilters('topCollections', selectedCollection, selectedCollectionIsActive);\r\n }\r\n\r\n onFilterSelectionSustainability (event: any) {\r\n const selected = event.currentTarget.value;\r\n const selectedIsActive = event.currentTarget.checked;\r\n this.changeActiveFilters('sustainability', selected, selectedIsActive);\r\n }\r\n\r\n changeActiveFilters =(filterType: any, filterValue: string, isActive: boolean) => {\r\n const newFilter = cloneDeep(this.props.filterState.filter);\r\n\r\n if (!newFilter) return\r\n\r\n const filter = FilterHelper.changeActiveFilters(newFilter, filterType, filterValue, isActive);\r\n\r\n this.props.applyFilter(filter);\r\n }\r\n\r\n onClickGoBack = () => {\r\n if (this.props.onClickGoBack) {\r\n this.props.onClickGoBack()\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n {!this.props.hideGoBack &&
\r\n \r\n \r\n \r\n Go back\r\n
}\r\n
{\r\n this.props.onClickCloseFilter && this.props.onClickCloseFilter();\r\n }}>\r\n \r\n
\r\n \r\n
\r\n {(this.props.filterState.filter && this.props.filterState.filter.collections\r\n && this.props.filterState.filter.collections.map(collection => \r\n this.props.filterState.filter && !!collection && (\r\n
\r\n \r\n
\r\n )\r\n ))}\r\n
\r\n
\r\n \r\n
\r\n {(this.props.filterState.filter && this.props.filterState.filter.productGroups\r\n && this.props.filterState.filter.productGroups.map(productGroupName => \r\n this.props.filterState.filter && !!productGroupName && (\r\n
\r\n \r\n
\r\n )\r\n ))}\r\n
\r\n
\r\n \r\n
\r\n {(this.props.filterState.filter && this.props.filterState.filter.productCategories.map(categoryName => \r\n !!categoryName && this.props.filterState.filter && (\r\n
\r\n \r\n
\r\n )\r\n ))}\r\n
\r\n
\r\n \r\n
\r\n {(this.props.filterState.filter && this.props.filterState.filter.deliveryWindows\r\n && this.props.filterState.filter.deliveryWindows.map(deliveryWindowName => \r\n this.props.filterState.filter && !!deliveryWindowName && (\r\n
\r\n \r\n
\r\n )\r\n ))}\r\n
\r\n
\r\n \r\n
\r\n {(this.props.filterState.filter && this.props.filterState.filter.sustainability\r\n && this.props.filterState.filter.sustainability.map(type => \r\n this.props.filterState.filter && !!type && (\r\n
\r\n \r\n
\r\n )\r\n ))}\r\n
\r\n
\r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (states: RootState, ownProps: OwnProps): StateProps => {\r\n return {\r\n filterState: states.session.filter\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: ThunkDispatch<{}, {}, any>, ownProps: OwnProps): DispatchProps => {\r\n return {\r\n getFilter: async () => {\r\n await dispatch(getFilter())\r\n console.log('getFIlter completed [UI]')\r\n },\r\n applyFilter: async (filter: Filter) => {\r\n await dispatch(applyFilter(filter))\r\n console.log('apply filter completed [UI]')\r\n },\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DashboardFilterComponent)","import React, { Component } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { ThunkDispatch } from 'redux-thunk'\r\nimport {RouteComponentProps, withRouter} from \"react-router-dom\";\r\n\r\n// Components.\r\nimport DeliveryWindows from '../shared/Dashboard/DeliveryWindows';\r\nimport StyleCarousel from '../shared/Dashboard/StyleCarousel';\r\nimport OrderSummary from '../shared/Dashboard/OrderSummary';\r\nimport ChartSummaryHighcharts from '../shared/Dashboard/ChartSummaryHighcharts';\r\nimport Details from '../shared/Dashboard/Details';\r\nimport DashboardFilterComponent from '../shared/DashboardFilterComponent';\r\nimport { DashboardFilterHelper } from '../../utils/DashboardFilterHelper';\r\nimport MoloRingloader from '../layout/MoloRingloader';\r\n\r\n// Store.\r\nimport { RootState } from '../../store';\r\nimport { IOrderState } from '../../store/order/orderStore';\r\nimport { IUserSate } from '../../store/user/reducers';\r\nimport {\r\n getOrder,\r\n applyChanges,\r\n applyChangesFromDashboard,\r\n getDashboardOrderState,\r\n setOrder,\r\n addClosedOrderToRecentAction,\r\n resetDashboard,\r\n setUserHasConfirmed\r\n} from '../../store/order/actions';\r\nimport { ICollectionState } from '../../store/collections/reducers';\r\nimport { getCollectionMasters } from '../../store/collections/actions'\r\nimport { IFilterState } from '../../store/session/reducers';\r\nimport { resetFilter, applyFilter } from '../../store/session/actions';\r\nimport { setAlert } from '../../store/alert/actions';\r\n\r\n// Models.\r\nimport { orderLine } from '../../models/Order';\r\nimport { Filter } from '../../models/Filter';\r\nimport { basketLine } from '../../models/Basket';\r\nimport Style from 'molo-shared/lib/models/Style';\r\n \r\n// Utils.\r\nimport * as helper from '../shared/Dashboard/DashboardHelper';\r\nimport queryString from 'query-string'\r\nimport {\r\n tcategories,\r\n IDivider,\r\n IGrouping,\r\n DIVIDERS\r\n} from '../shared/Dashboard/dashboard.d';\r\nimport { uniq, cloneDeep } from 'lodash';\r\nimport ProductApi from '../../store/products/ProductApi';\r\nimport OrderApi from '../../store/order/OrderApi';\r\nimport { ReactComponent as FilterIcon } from '../../images/svg/filter_icon_black.svg';\r\nimport { appConfig } from '../../config';\r\nimport { FaCaretLeft } from 'react-icons/fa';\r\nimport { mapMoloItems, IgroupedItems } from '../../models/MoloItem';\r\n\r\nconst baseUrl = appConfig.media.baseUrl;\r\n\r\ninterface ISize {\r\n sizename: string,\r\n quantity: number\r\n}\r\n\r\ninterface ISizes {\r\n [id: string]: ISize[],\r\n}\r\n\r\ninterface IMasters {\r\n [id: string]: Style,\r\n}\r\n\r\ninterface IRRPMap {\r\n [id: string]: number[]\r\n}\r\n\r\ninterface State {\r\n productSortedByCategory: IGrouping,\r\n selectedCategory: tcategories,\r\n data: any[],\r\n salesOptionsTotal: number,\r\n slides: string[],\r\n deliveryWindows: any[],\r\n showDeliveryModal: boolean\r\n currentDrop?: any,\r\n basketIsEmpty: boolean,\r\n step: string,\r\n filteredOrderLines: orderLine[],\r\n filterInitialized: boolean\r\n dashboardLoading: boolean\r\n initialized: boolean,\r\n sizes: ISizes,\r\n groupedOrderlines: orderLine[],\r\n masters: IMasters,\r\n loadingMasters: boolean\r\n groupedMoloItems: {[id: string]: any[]}\r\n showFilter: boolean\r\n hideGoBack?: boolean\r\n rrpMap: IRRPMap\r\n allSizes: ISizes\r\n}\r\n \r\ninterface OwnProps {\r\n order: any\r\n filteredOrderLines: orderLine[]\r\n groupedOrderlines: orderLine[]\r\n allSizes: ISizes\r\n rrpMap: IRRPMap\r\n sizes: ISizes\r\n groupedMoloItems: {[id: string]: any[]}\r\n deliveryWindows: any[]\r\n slides: string[]\r\n productSortedByCategory: IGrouping\r\n}\r\n \r\ninterface DispatchProps {\r\n getOrder: (orderId: number) => void\r\n resetFilter: (filter: Filter) => void\r\n applyFilter: (filter: Filter) => void\r\n applyChanges: (orderId: number, changes: basketLine) => void\r\n applyChangesFromDashboard: (orderId: number, changes: basketLine) => void\r\n getDashboardOrderState: (orderId: number) => void\r\n setOrder: (orderId: number) => void\r\n getCollectionMasters: (orderType: string, collectionName: string, currencyCode: string, pricegroup: string) => void\r\n setAlert: (message: string, type: string) => void\r\n addClosedOrderToRecent: (order: any) => void\r\n resetDashboard: () => void\r\n setUserHasConfirmed: (confirmed: boolean) => void\r\n}\r\n \r\ninterface StateProps {\r\n orderState: IOrderState\r\n userState: IUserSate\r\n collectionState: ICollectionState\r\n filterState: IFilterState\r\n}\r\n\r\ninterface chartData {\r\n name: string,\r\n y: number,\r\n}\r\n \r\ntype Props = StateProps & OwnProps & DispatchProps & RouteComponentProps;\r\n\r\nexport class Dashboard extends Component {\r\n private data: chartData[] = [];\r\n\r\n state: State = {\r\n productSortedByCategory: {},\r\n selectedCategory: 'categories',\r\n data: [],\r\n salesOptionsTotal: 0,\r\n slides: [],\r\n deliveryWindows: [],\r\n showDeliveryModal: false,\r\n basketIsEmpty: false,\r\n step: 'dashboard',\r\n filteredOrderLines: [],\r\n filterInitialized: false,\r\n dashboardLoading: true,\r\n initialized: false,\r\n sizes: {},\r\n groupedOrderlines: [],\r\n masters: {},\r\n loadingMasters: false,\r\n groupedMoloItems: {},\r\n showFilter: false,\r\n rrpMap: {},\r\n allSizes: {},\r\n } \r\n \r\n readonly dividers: IDivider[] = DIVIDERS;\r\n\r\n onChangeCategory = (selectedCategory: tcategories) => {\r\n this.setState({ selectedCategory })\r\n }\r\n\r\n onClickFilterGroup = (selectedCategory: string, item: any) => {\r\n if (!this.props.filterState.filter) return;\r\n\r\n let type = '';\r\n\r\n switch(selectedCategory) {\r\n case 'deliverywindows':\r\n type = 'deliveryWindows';\r\n break;\r\n case 'groups':\r\n type = 'productGroups';\r\n break;\r\n case 'categories':\r\n type = 'productCategories';\r\n break;\r\n case 'collection':\r\n type = 'topCollections';\r\n break;\r\n default:\r\n type = selectedCategory;\r\n break;\r\n }\r\n\r\n const changedFilter = DashboardFilterHelper.changeActiveFilters({ ...this.props.filterState.filter }, type, item.value, true);\r\n this.props.applyFilter(changedFilter);\r\n \r\n this.setState({step: 'details'})\r\n }\r\n\r\n goBack = () => {\r\n if (this.props.filterState.filter) {\r\n this.props.resetFilter(this.props.filterState.filter)\r\n }\r\n this.props.orderState.dashboardOrder && this.props.history.push('/dashboard/' + this.props.orderState.dashboardOrder.orderheader.appOrderId)\r\n this.setState({step: 'dashboard'})\r\n }\r\n\r\n render() {\r\n const { data } = this.state;\r\n\r\n const {\r\n order,\r\n productSortedByCategory,\r\n slides,\r\n deliveryWindows,\r\n groupedOrderlines,\r\n filteredOrderLines,\r\n sizes,\r\n groupedMoloItems,\r\n allSizes,\r\n rrpMap,\r\n } = this.props;\r\n\r\n return (\r\n <>\r\n {\r\n this.props.orderState.isFetching && !this.state.initialized ?
: null\r\n }\r\n
\r\n
\r\n
\r\n {\r\n order &&\r\n }\r\n
\r\n
\r\n {\r\n order && Object.keys(productSortedByCategory).length &&\r\n \r\n }\r\n
\r\n
this.setState({step: 'details'})\r\n }>\r\n
\r\n \r\n

View basket

\r\n
\r\n
\r\n
\r\n
\r\n {order\r\n && order.orderheader.navImportRef\r\n && order.orderheader.orderState !== 0\r\n ? 'Shipping dates' : 'Change shipping dates'}\r\n
\r\n {deliveryWindows.length ?\r\n {}}\r\n userIsInformed={true}\r\n setUserHasConfirmed={() => {}}\r\n hideEditLink={true}\r\n /> : null }\r\n
\r\n
\r\n
\r\n {order &&\r\n
\r\n this.setState({showFilter: !this.state.showFilter})}\r\n >\r\n \r\n \r\n \r\n
\r\n
{\r\n order && this.props.history.push('/dashboard/' + order.orderheader.appOrderId)\r\n this.setState({ step: 'dashboard' })\r\n }}>\r\n \r\n
\r\n {}}\r\n order={order}\r\n styles={this.props.collectionState.collections || []}\r\n sizes={sizes}\r\n groupedMoloItems={groupedMoloItems}\r\n allSizes={allSizes}\r\n rrpMap={rrpMap}\r\n disableActions={true}\r\n />\r\n this.setState({showFilter: false })}\r\n hideGoBack={this.state.hideGoBack}\r\n />\r\n }\r\n \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (states: RootState, ownProps: OwnProps): StateProps => {\r\n return {\r\n orderState: states.order.order,\r\n userState: states.user.user,\r\n collectionState: states.collections.collections,\r\n filterState: states.session.filter\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: ThunkDispatch<{}, {}, any>, ownProps: OwnProps): DispatchProps => {\r\n return {\r\n getOrder: async (orderId: number) => {\r\n await dispatch(getOrder(orderId));\r\n },\r\n resetFilter: async (filter: Filter) => {\r\n await dispatch(resetFilter(filter));\r\n },\r\n applyFilter: async (filter: Filter) => {\r\n await dispatch(applyFilter(filter));\r\n },\r\n applyChanges: async (orderId: number, changes: basketLine) => {\r\n await dispatch(applyChanges(orderId, changes))\r\n },\r\n applyChangesFromDashboard: async (orderId: number, changes: basketLine) => {\r\n await dispatch(applyChangesFromDashboard(orderId, changes))\r\n },\r\n getDashboardOrderState: async (orderId: number) => {\r\n await dispatch(getDashboardOrderState(orderId))\r\n },\r\n setOrder: async (orderId: number) => {\r\n await dispatch(setOrder(orderId))\r\n },\r\n getCollectionMasters: async (orderType: string, collectionName: string, currencyCode: string, pricegroup: string) => {\r\n await dispatch(getCollectionMasters(orderType, collectionName, currencyCode, pricegroup))\r\n },\r\n setAlert: async (message: string, type: string) => {\r\n await dispatch(setAlert(message, type))\r\n },\r\n addClosedOrderToRecent: async (order: any) => {\r\n await dispatch(addClosedOrderToRecentAction(order))\r\n },\r\n resetDashboard: async () => {\r\n await dispatch(resetDashboard())\r\n },\r\n setUserHasConfirmed: async (confirmed: boolean) => {\r\n await dispatch(setUserHasConfirmed(confirmed))\r\n },\r\n }\r\n}\r\n\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(Dashboard))","import React, { useEffect, useState } from 'react'\r\nimport {\r\n Overlay,\r\n getSizes,\r\n getRRPMap,\r\n getAllSizes,\r\n getGroupedMoloItems,\r\n ISizes,\r\n IRRPMap,\r\n StyleBean,\r\n} from 'molo-shared'\r\nimport { groupSimilarColors } from '../shared/Dashboard/DashboardHelper'\r\nimport { useSelector } from \"react-redux\";\r\nimport { RootState } from '../../store';\r\nimport * as helper from '../shared/Dashboard/DashboardHelper';\r\nimport { DashboardFilterHelper } from '../../utils/DashboardFilterHelper';\r\nimport {\r\n IGrouping,\r\n DIVIDERS\r\n} from '../shared/Dashboard/dashboard.d';\r\nimport { cloneDeep } from 'lodash'\r\nimport { Spinner } from \"@blueprintjs/core\";\r\nimport { orderLine } from '../../models/Order';\r\n\r\n// import { Dashboard } from './dashboard/Dashboard';\r\nimport OrderPreview from './OrderPreview';\r\nimport OrderApi from '../../store/order/OrderApi';\r\nimport { appConfig } from '../../config';\r\nimport { uniq } from 'lodash';\r\nimport { FaCircle } from 'react-icons/fa';\r\n\r\ninterface IProps {\r\n isShowing: boolean\r\n onHide?: Function\r\n order?: any\r\n}\r\n\r\ninterface IState {\r\n productSortedByCategory: IGrouping\r\n loadingSeasons: boolean\r\n loadingCollections: boolean\r\n slides: string[]\r\n deliveryWindows: any[]\r\n groupedMoloItems: {[id: string]: any[]}\r\n sizes: ISizes\r\n rrpMap: IRRPMap\r\n allSizes: ISizes\r\n groupedOrderlines: orderLine[]\r\n filteredOrderLines: orderLine[]\r\n filterInitialized: boolean\r\n showDeliveryModal: boolean\r\n currentDrop?: any,\r\n showProductOverlay: boolean\r\n selectedProduct?: StyleBean\r\n initialized: boolean\r\n}\r\n\r\nconst baseUrl = appConfig.media.baseUrl;\r\n\r\nconst DashboardOverlay: React.FC = (props) => {\r\n const { isShowing, onHide, order } = props\r\n const filter = useSelector((state: RootState) => state.session.filter.filter);\r\n const user = useSelector((state: RootState) => state.user.user.user);\r\n const [isFetching, setIsFetching] = useState(false)\r\n const [activeOrder, setActiveOrder] = useState(undefined)\r\n const [state, setGlobalState] = useState(\r\n {\r\n productSortedByCategory: {},\r\n loadingSeasons: false,\r\n loadingCollections: false,\r\n slides: [],\r\n deliveryWindows: [],\r\n groupedMoloItems: {},\r\n sizes: {},\r\n rrpMap: {},\r\n allSizes: {},\r\n groupedOrderlines: [],\r\n filteredOrderLines: [],\r\n filterInitialized: false,\r\n showDeliveryModal: false,\r\n showProductOverlay: false,\r\n initialized: false\r\n }\r\n )\r\n\r\n const setState = (changes: any) => {\r\n const newState: IState = { ...state, ...changes}\r\n\r\n setGlobalState(newState)\r\n }\r\n\r\n useEffect(() => {\r\n const init = async () => {\r\n if (isShowing && order) {\r\n setIsFetching(true)\r\n setActiveOrder(order)\r\n const response = await OrderApi.GetMoloItemsOnOrder(order.orderheader.appOrderId)\r\n const deliveryWindows = await OrderApi.getOrderDeliveries(order.orderheader.appOrderId)\r\n const groupedMoloItems = getGroupedMoloItems(response.data)\r\n const sizes = getSizes(order.orderLines)\r\n const slides = uniq(order.orderLines.map(\r\n (line: any) => baseUrl + 'media/productimage/' + line.seasoncode + '/' + line.masterid + '/' + line.colorcode + '/small')\r\n );\r\n\r\n setState({\r\n sizes,\r\n slides,\r\n groupedMoloItems: groupedMoloItems,\r\n rrpMap: getRRPMap(groupedMoloItems),\r\n groupedOrderlines: groupSimilarColors(cloneDeep(order.orderLines)),\r\n allSizes: getAllSizes(groupedMoloItems, sizes),\r\n productSortedByCategory: helper.getProductCategories(cloneDeep(order.orderLines), DIVIDERS),\r\n deliveryWindows: deliveryWindows.data,\r\n })\r\n setIsFetching(false)\r\n }\r\n }\r\n\r\n init()\r\n }, [isShowing, activeOrder])\r\n\r\n useEffect(() => {\r\n if (filter && order) {\r\n \r\n const filtered = DashboardFilterHelper.resultByFilter(\r\n filter,\r\n order.orderLines,\r\n );\r\n \r\n setState({\r\n groupedOrderlines: groupSimilarColors(cloneDeep(filtered)),\r\n filteredOrderLines: filtered,\r\n })\r\n }\r\n }, [filter])\r\n\r\n const renderPreview = (order: any, state: IState) => {\r\n return \r\n }\r\n\r\n const renderSpinner = () => {\r\n return
\r\n }\r\n\r\n const renderHeader = () => {\r\n return
\r\n
\r\n {\r\n user &&\r\n {user.customerData.Name}\r\n }\r\n
\r\n
\r\n {order.orderheader.navImportRef && { order.orderheader.navImportRef } }\r\n {order.orderheader.appOrderId && {`B2B${order.orderheader.appOrderId}`}}\r\n {order.orderheader.orderType}\r\n {order.orderheader.externalDocumentNo && {order.orderheader.externalDocumentNo}}\r\n {\r\n order.orderheader.salespersonNote &&\r\n \r\n { order.orderheader.salespersonNote }\r\n \r\n }\r\n
\r\n
\r\n }\r\n\r\n return (\r\n <>\r\n \r\n
\r\n { order && renderHeader()}\r\n
\r\n
\r\n {order && !isFetching ? renderPreview(order, state) : renderSpinner()}\r\n
\r\n \r\n }\r\n hide={() => {onHide && onHide()}}\r\n isShowing={ isShowing }\r\n level={2}\r\n />\r\n \r\n )\r\n}\r\n\r\nexport default DashboardOverlay","import React, { useEffect, useState } from 'react'\r\nimport { useHistory } from 'react-router-dom';\r\nimport { useSelector } from \"react-redux\";\r\nimport OrderApi from '../../store/order/OrderApi';\r\nimport { RootState } from '../../store/';\r\nimport { ShippedCalendar } from './ShippedCalendar';\r\nimport SidebarMenu from '../layout/SidebarMenu';\r\nimport { appConfig } from '../../config';\r\nimport axios from 'axios';\r\nimport { cloneDeep } from 'lodash';\r\nimport { ShippedItemsOverview } from './ShippedItemsOverview';\r\nimport { filterByValue } from 'molo-shared/lib/utils/UtilHelper';\r\nimport Dropdown from '../layout/Dropdown';\r\nimport { FaTimes } from 'react-icons/fa';\r\nimport DashboardOverlay from '../b2b/DashboardOverlay';\r\nimport { Spinner } from \"@blueprintjs/core\";\r\n\r\ninterface ISize {\r\n sizename: string,\r\n quantity: number\r\n}\r\n\r\ninterface IProps {\r\n show: boolean\r\n}\r\n\r\ninterface IOrderTableRowProps {\r\n order: any\r\n expanded: boolean\r\n onClickOrder?: Function\r\n onHandleClickBSL: Function\r\n onClickViewOrder?: Function\r\n}\r\n\r\nconst OrderTableRow : React.FC = (props) => {\r\n const { order, expanded, onClickOrder, onHandleClickBSL, onClickViewOrder } = props;\r\n const openOrders = useSelector((state: RootState) => state.order.order.orders);\r\n const status = order.status;\r\n\r\n let statusClass = 'status-badge--not-shipped';\r\n\r\n if (status !== 'Not Shipped') {\r\n statusClass = status === 'Fully Shipped' ? 'status-badge--fully' : 'status-badge--partial';\r\n }\r\n\r\n const onClickOrderHandler = () => {\r\n onClickOrder && onClickOrder(order)\r\n }\r\n\r\n const isAlreadyOpen = (order: any) => {\r\n var existing = openOrders.find(function(item: any) {\r\n return item.navorderid === order.navorderid;\r\n });\r\n\r\n return existing;\r\n }\r\n \r\n return (\r\n <>\r\n {\r\n onClickOrderHandler()\r\n }}\r\n className={`${expanded ? 'active' : ''}`}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n {new Date(order.orderdate).toLocaleDateString()}\r\n \r\n {order.orderidcreated}\r\n {order.navorderid}\r\n \r\n {order.shipttoname}\r\n \r\n {order.ordertype}\r\n \r\n {order.externaldocumentno}\r\n \r\n {order.salespersonnote}\r\n \r\n
\r\n { status }\r\n {order.nooftrackingcodes && order.nooftrackingcodes > 0 ?
tracking
: null}\r\n
\r\n \r\n \r\n {\r\n order.inscanner && !isAlreadyOpen(order) &&\r\n \r\n In scanner\r\n
\r\n }\r\n {\r\n '' !== order.beingmodifiedby && !isAlreadyOpen(order) &&\r\n \r\n Being modified by : { order.beingmodifiedby }\r\n \r\n }\r\n {\r\n isAlreadyOpen(order) &&\r\n \r\n Already open!\r\n \r\n }\r\n { \r\n !order.isFullyShipped \r\n &&\r\n { \r\n e.stopPropagation();\r\n onClickViewOrder && onClickViewOrder(order)\r\n }}>\r\n View order\r\n \r\n }\r\n \r\n \r\n {expanded && \r\n \r\n {/*
\r\n

Shipments

\r\n
*/}\r\n \r\n \r\n }\r\n \r\n )\r\n}\r\n\r\nexport const ShippedOrdersOverlay: React.FC = (props) => {\r\n const user = useSelector((state: RootState) => state.user.user);\r\n const [orders, setOrders] = useState([])\r\n const [activeOrder, setActiveOrder] = useState(undefined)\r\n const [selectedBSLItems, setSelectedBSLItems] = useState(undefined)\r\n const [showSidebar, setShowSidebar] = useState(false);\r\n const [isFetching, setIsFetching] = useState(false)\r\n const [selectedShop, setSelectedShop] = useState(undefined)\r\n const [isFetchingItems, setIsFetchingItems] = useState(false)\r\n let [searchString, setSearchString] = React.useState('');\r\n const [initialized, setinitialized] = useState(false)\r\n const [orderTypes, setOrderTypes] = useState(['REORDER', 'PRE-ORDER'])\r\n let [selectedOrderType, setSelectedOrderType] = useState(null)\r\n const [selectedStatus, setSelectedStatus] = useState(null)\r\n const [allStatus, setAllStatus] = useState(['Fully Shipped', 'Partially Shipped', 'Not Shipped'])\r\n const [filteredItems, setFilteredItems] = useState([])\r\n const [activeOrderIds, setActiveOrderIds] = useState([])\r\n const [showDashOverlay, setShowDashOverlay] = useState(false)\r\n const [activeViewOrder, setActiveViewOrder] = useState(undefined)\r\n\r\n const { show } = props;\r\n\r\n useEffect( () => {\r\n if (!isFetching && !initialized && show) {\r\n setinitialized(true)\r\n getInitialShop()\r\n }\r\n }, [])\r\n\r\n useEffect( () => {\r\n filterItems()\r\n }, [selectedOrderType, selectedStatus])\r\n\r\n const init = async (customerid: number, allShops: boolean = false) => {\r\n setActiveOrder(undefined)\r\n setIsFetching(true)\r\n setOrders([])\r\n const requests: any[] = [\r\n OrderApi.peakNavOrdersNew(+customerid, true, allShops),\r\n OrderApi.peakNavCustomerShipments(+customerid, allShops)\r\n ]\r\n\r\n const responses = await axios.all(requests);\r\n\r\n const peakNavordersResponse = responses[0].data.map((item: any) => {\r\n\r\n item.status = 'Not Shipped'\r\n\r\n if (item.orderQuantity === item.outstandingQuantity) {\r\n item.status = 'Not Shipped'\r\n }\r\n\r\n if (item.outstandingQuantity > 0 && item.orderQuantity > item.outstandingQuantity) {\r\n item.status = 'Partially Shipped'\r\n }\r\n\r\n if (item.outstandingQuantity === 0) {\r\n item.status = 'Fully Shipped'\r\n }\r\n\r\n return item\r\n }) \r\n const shipmentsResponse = responses[1]\r\n\r\n const allOrders: any[] = [ ...peakNavordersResponse , ...shipmentsResponse.data.map((item: any) => {\r\n item.status = 'Fully Shipped'\r\n item.isFullyShipped = true;\r\n return item\r\n }) ]\r\n\r\n setIsFetching(false)\r\n setOrders(allOrders)\r\n setFilteredItems( [ ...allOrders ])\r\n }\r\n\r\n const getInitialShop = async () => {\r\n\r\n setSelectedShop({\r\n customerId: user.user.customerData.CustomerId,\r\n name: user.user.customerData.Name,\r\n })\r\n\r\n init(+user.user.customerData.CustomerId, user.user.customerData.InvoiceCustomer)\r\n }\r\n\r\n const filterItems = () => {\r\n let items = [ ...orders ];\r\n\r\n if (selectedOrderType) {\r\n if (selectedOrderType === 'REORDER') {\r\n items = items.filter(order => order.ordertype === 'REORDER')\r\n } else {\r\n items = items.filter(order => order.ordertype !== 'REORDER')\r\n }\r\n \r\n }\r\n\r\n if (selectedStatus) {\r\n if (selectedStatus === 'Fully Shipped') {\r\n items = items.filter(order => order.status === 'Fully Shipped')\r\n } else if (selectedStatus === 'Partially Shipped') {\r\n items = items.filter(order => order.status === 'Partially Shipped')\r\n } else if (selectedStatus === 'Not Shipped') {\r\n items = items.filter(order => order.status === 'Not Shipped')\r\n }\r\n \r\n }\r\n\r\n setFilteredItems(items)\r\n }\r\n\r\n const handleOrderClick = (order: any) => {\r\n if (activeOrderIds.indexOf(order.navorderid) === -1) {\r\n setActiveOrder(activeOrderIds.push(order.navorderid))\r\n } else {\r\n let orders = activeOrderIds;\r\n let indexOf = activeOrderIds.indexOf(order.navorderid);\r\n var spliced = orders.splice(indexOf, 1);\r\n setActiveOrder(spliced)\r\n }\r\n }\r\n\r\n const onClickViewOrder = async (order: any) => {\r\n setIsFetching(true)\r\n\r\n if (!order.appOrderId && order.navorderid) {\r\n const navOrderResponse = await OrderApi.openNavOrder(order.navorderid)\r\n let createdapporderid = navOrderResponse.data.createdapporderid\r\n navOrderResponse.data.appOrderId = navOrderResponse.data.createdapporderid\r\n let response = await OrderApi.getOrder(createdapporderid)\r\n setActiveViewOrder(response.data)\r\n setShowDashOverlay(true)\r\n setIsFetching(false)\r\n }\r\n }\r\n \r\n const onHandleClickBSL = async (order: any, drop: any) => {\r\n\r\n setIsFetchingItems(true)\r\n\r\n setShowSidebar(true)\r\n\r\n if (drop.bsl) {\r\n const response = await OrderApi.peakNavShipmentItems(drop.bsl)\r\n\r\n setSelectedBSLItems(cloneDeep(response.data))\r\n } else {\r\n const response = await OrderApi.peakNavOrderUnshippedItems(order.navorderid, drop.deliveryCode)\r\n\r\n setSelectedBSLItems(cloneDeep(response.data))\r\n }\r\n\r\n setIsFetchingItems(false)\r\n }\r\n\r\n const filterByOrderType = (type: string) => {\r\n setSelectedOrderType(type === 'all' ? null : type)\r\n }\r\n\r\n const filterByOrderStatus = (status: string) => {\r\n setSelectedStatus(status === 'all' ? null : status)\r\n }\r\n\r\n const renderNavOrderTable = (orders: any) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n \r\n filterByValue(filteredItems, searchString, [\r\n 'ordertype',\r\n 'navorderid',\r\n 'shipttoname',\r\n 'externaldocumentno',\r\n 'salespersonnote',\r\n 'orderidcreated',\r\n ]).sort((a: any, b: any) => new Date(b.orderdate).valueOf() - new Date(a.orderdate).valueOf())\r\n .map((order: any, key: any) => {\r\n return (\r\n \r\n )\r\n })\r\n }\r\n \r\n
Order dateOrder numberMolo Ref. NumberShopTypeExt. Doc NoOrder CommentStatus
\r\n )\r\n }\r\n\r\n const renderSidebarMenuContent = () => {\r\n if (!selectedBSLItems) return null\r\n const total = selectedBSLItems.reduce((sum: number, li: any) => sum + li.quantity, 0)\r\n\r\n const orderlines = selectedBSLItems.map((item: any) => {\r\n item.quantity = item.qty\r\n item.deliveryCode = item.deliverycode\r\n return item\r\n })\r\n\r\n if (!isFetchingItems && !orderlines.length) {\r\n return (\r\n
\r\n

No Items on this shipment!

\r\n
\r\n )\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n )\r\n }\r\n\r\n const onCloseSidebar = () => {\r\n setShowSidebar(false)\r\n setSelectedBSLItems([])\r\n }\r\n\r\n const renderContent = () => {\r\n return (\r\n <>\r\n
\r\n {\r\n isFetching ?\r\n
\r\n : null\r\n }\r\n
\r\n
\r\n {\r\n const value = event.target.value\r\n\r\n setSearchString(value || '')\r\n }}\r\n />\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n { renderNavOrderTable(orders) }\r\n
\r\n {\r\n selectedShop && !orders.length && !isFetching &&\r\n

No orders for this customers

\r\n }\r\n
\r\n \r\n { renderSidebarMenuContent() }\r\n \r\n setShowDashOverlay(false)}\r\n order={activeViewOrder}\r\n />\r\n \r\n )\r\n }\r\n\r\n return (\r\n <>\r\n { renderContent() }\r\n \r\n )\r\n}","import React, { useEffect, useState } from 'react'\r\nimport { useHistory } from 'react-router-dom';\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { filterByValue } from 'molo-shared/lib/utils/UtilHelper';\r\nimport { Order, StepWizard } from 'molo-shared';\r\nimport OrderApi from '../../store/order/OrderApi';\r\nimport { RootState } from '../../store/';\r\nimport axios from 'axios';\r\nimport { ShippedCalendar } from '../b2b/ShippedCalendar';\r\nimport { cloneDeep, uniq } from 'lodash';\r\n// import Order from '../../Models/Order'\r\nimport SidebarMenu from '../layout/SidebarMenu';\r\nimport { ShippedItemsOverview } from '../b2b/ShippedItemsOverview';\r\nimport Dropdown from '../layout/Dropdown';\r\nimport { FaTimes, FaChevronDown } from 'react-icons/fa';\r\nimport DashboardOverlay from '../b2b/DashboardOverlay';\r\nimport { Spinner } from \"@blueprintjs/core\";\r\nimport { getOpenOrders } from '../../store/order/actions'\r\nimport { request } from 'http';\r\nimport { Button } from '../form/Button';\r\n\r\ninterface Props {\r\n applyChanges: Function\r\n show: boolean\r\n}\r\n\r\ninterface IOrderTableRowProps {\r\n order: any\r\n expanded: boolean\r\n onClickOrder?: Function\r\n onHandleClickBSL: Function\r\n onClickViewOrder?: Function\r\n onUpdateOrder?: Function\r\n onFetching?: Function\r\n isNavOrderTable?: boolean\r\n updateView?: Function\r\n openOrders: any\r\n}\r\n\r\nconst OrderTableRow : React.FC = (props) => {\r\n const {\r\n order,\r\n expanded,\r\n onClickOrder,\r\n onHandleClickBSL,\r\n onClickViewOrder,\r\n onUpdateOrder,\r\n onFetching,\r\n isNavOrderTable,\r\n openOrders\r\n } = props\r\n\r\n const history = useHistory();\r\n const status = order.status;\r\n let statusClass = 'status-badge--not-shipped';\r\n const onClickOrderHandler = () => {\r\n onClickOrder && onClickOrder(order)\r\n }\r\n\r\n if (status !== 'Not Shipped') {\r\n statusClass = status === 'Fully Shipped' ? 'status-badge--fully' : 'status-badge--partial';\r\n }\r\n\r\n const onClickOption = async (option: string) => {\r\n if (option.toLowerCase() === 'view order') {\r\n if (!order.isImported) {\r\n onFetching && onFetching(true)\r\n const navOrderResponse = await OrderApi.openNavOrder(order.navorderid)\r\n // let createdapporderid = navOrderResponse.data.createdapporderid\r\n navOrderResponse.data.appOrderId = navOrderResponse.data.createdapporderid\r\n onClickViewOrder && onClickViewOrder(navOrderResponse.data)\r\n onFetching && onFetching(false)\r\n onUpdateOrder && onUpdateOrder()\r\n } else if (order.appOrderId) {\r\n onClickViewOrder && onClickViewOrder(order)\r\n }\r\n }\r\n\r\n if (option.toLowerCase() === 'edit order') { \r\n if (!order.isImported) {\r\n onFetching && onFetching(true)\r\n await OrderApi.openNavOrder(order.navorderid)\r\n const navOrderResponse = await OrderApi.openNavOrder(order.navorderid)\r\n onFetching && onFetching(false)\r\n history.push('/dashboard/' + navOrderResponse.data.createdapporderid + '?step=details&origin=shop');\r\n } else { \r\n history.push('/dashboard/' + order.appOrderId + '?step=details&origin=shop');\r\n }\r\n }\r\n }\r\n\r\n const isAlreadyOpen = (order: any) => {\r\n if (!openOrders || !openOrders.length) {\r\n return false\r\n }\r\n var existing = openOrders.find(function(item: any) {\r\n return item.navorderId && item.navorderId === order.navorderId;\r\n });\r\n return existing;\r\n }\r\n\r\n return (\r\n <>\r\n {\r\n onClickOrderHandler()\r\n }}\r\n className={`${expanded ? 'active' : ''}`}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n {order.appOrderId && `B2B${order.appOrderId}`}\r\n \r\n \r\n { isNavOrderTable ? `${order.navorderid || ''}` : `${order.navImportRef || ''}` }\r\n \r\n \r\n {order.sellToCustomerName}\r\n \r\n {order.orderType}\r\n {order.salespersonnote}\r\n \r\n
\r\n { status }\r\n {order.nooftrackingcodes && order.nooftrackingcodes > 0 ?
tracking
: null}\r\n
\r\n \r\n \r\n {\r\n order.inscanner && !isAlreadyOpen(order) && !order.isImported &&\r\n \r\n In scanner\r\n \r\n }\r\n {\r\n order.beingmodifiedby && '' !== order.beingmodifiedby && !isAlreadyOpen(order) && !order.isImported &&\r\n \r\n Being modified by : { order.beingmodifiedby }\r\n \r\n }\r\n {\r\n isAlreadyOpen(order) && !order.isImported &&\r\n \r\n Already open!\r\n \r\n }\r\n
\r\n {\r\n e.stopPropagation();\r\n onClickOption('edit order') \r\n }}>\r\n Edit\r\n \r\n {/* */}\r\n
\r\n \r\n \r\n {expanded && \r\n \r\n {/*
\r\n

Shipments

\r\n
*/}\r\n \r\n \r\n }\r\n \r\n )\r\n}\r\n\r\nconst OpenOrdersBody: React.FC = (props) => {\r\n let [selectedOrderType, setSelectedOrderType] = useState(null)\r\n let [searchString, setSearchString] = React.useState('');\r\n const [orders, setOrders] = useState([])\r\n const [openOrders, setOpenOrders] = useState([])\r\n const [closedOrders, setClosedOrders] = useState([])\r\n const [activeOrder, setActiveOrder] = useState(undefined)\r\n const [activeViewOrder, setActiveViewOrder] = useState(undefined)\r\n const [selectedBSLItems, setSelectedBSLItems] = useState(undefined)\r\n const [showSidebar, setShowSidebar] = useState(false);\r\n const [isFetching, setIsFetching] = useState(false)\r\n // const baseUrl = appConfig.media.baseUrl;\r\n const [initialized, setinitialized] = useState(false)\r\n const [allStatus, setAllStatus] = useState(['Fully Shipped', 'Partially Shipped', 'Not Shipped'])\r\n const [orderTypes, setOrderTypes] = useState([])\r\n const [openFilteredItems, setOpenFilteredItems] = useState([])\r\n const [closedFilteredItems, setClosedFilteredItems] = useState([])\r\n const user = useSelector((state: RootState) => state.user.user);\r\n const dispatch = useDispatch()\r\n const [isFetchingItems, setIsFetchingItems] = useState(false)\r\n const [selectedStatus, setSelectedStatus] = useState(null)\r\n const [activeOrderIds, setActiveOrderIds] = useState([])\r\n const [showDashOverlay, setShowDashOverlay] = useState(false)\r\n \r\n const { show } = props;\r\n\r\n const onClickViewOrder = async (order: any) => {\r\n if (order.appOrderId) {\r\n // Get the order.\r\n let response = await OrderApi.getOrder(order.appOrderId)\r\n setActiveViewOrder(response.data)\r\n setShowDashOverlay(true)\r\n }\r\n }\r\n\r\n const handleOrderClick = (order: any) => {\r\n let orderId = null;\r\n if (order.navorderid) {\r\n orderId = order.navorderid;\r\n } else if (order.appOrderId) {\r\n orderId = order.appOrderId;\r\n }\r\n if (activeOrderIds.indexOf(orderId) === -1) {\r\n let orders = [ ...activeOrderIds ];\r\n orders.push(orderId)\r\n setActiveOrderIds(orders)\r\n } else {\r\n let orders = [ ...activeOrderIds ];\r\n let indexOf = orders.indexOf(+orderId);\r\n orders.splice(indexOf, 1);\r\n setActiveOrderIds(orders)\r\n }\r\n }\r\n\r\n useEffect( () => {\r\n if (show) {\r\n setinitialized(true)\r\n getInitialShop()\r\n }\r\n }, [show])\r\n\r\n useEffect( () => {\r\n filterItems()\r\n }, [selectedOrderType, selectedStatus])\r\n\r\n const getInitialShop = async () => {\r\n init(+user.user.customerData.CustomerId);\r\n }\r\n\r\n const filterItems = () => {\r\n let openItems = [ ...openOrders ];\r\n let closedItems = [ ...closedOrders ];\r\n if (selectedOrderType) {\r\n openItems = openItems.filter(order => order.orderType === selectedOrderType)\r\n closedItems = closedItems.filter(order => order.orderType === selectedOrderType)\r\n }\r\n if (selectedStatus) {\r\n if (selectedStatus === 'Fully Shipped') {\r\n openItems = openItems.filter(order => order.status === 'Fully Shipped')\r\n closedItems = closedItems.filter(order => order.status === 'Fully Shipped')\r\n } else if (selectedStatus === 'Partially Shipped') {\r\n openItems = openItems.filter(order => order.status === 'Partially Shipped')\r\n closedItems = closedItems.filter(order => order.status === 'Partially Shipped')\r\n } else if (selectedStatus === 'Not Shipped') {\r\n openItems = openItems.filter(order => order.status === 'Not Shipped')\r\n closedItems = closedItems.filter(order => order.status === 'Not Shipped')\r\n }\r\n }\r\n setOpenFilteredItems(openItems)\r\n setClosedFilteredItems(closedItems)\r\n }\r\n\r\n const filterByOrderType = (type: string) => {\r\n setSelectedOrderType(type === 'all' ? null : type)\r\n }\r\n\r\n const filterByOrderStatus = (status: string) => {\r\n setSelectedStatus(status === 'all' ? null : status)\r\n }\r\n\r\n const init = async (customerid: number, allShops: boolean = false) => {\r\n setActiveOrder(undefined)\r\n setIsFetching(true)\r\n setOrders([])\r\n const requests: any[] = [\r\n OrderApi.peakNavOrdersNew(+customerid, false, true),\r\n OrderApi.getOpenOrders()\r\n ]\r\n \r\n const responses = await axios.all(requests);\r\n console.log('allorders[1] her');\r\n console.dir(requests);\r\n const openOrdersResponse = responses[1]\r\n const navRefs = uniq(openOrdersResponse.data\r\n .filter((res: any) => res.navImportRef !== null))\r\n .map((ref: any) => ref.navImportRef)\r\n\r\n let res = responses[0].data.filter((res:any) => navRefs.indexOf(res.navorderid) === -1)\r\n \r\n const peakNavordersResponse = res.map((res: any) => {\r\n let sellToCustomerName = res.shipttoname || '';\r\n\r\n let order = {\r\n appOrderId: res.orderidcreated ? res.orderidcreated.toLowerCase().split('sb')[1] : undefined,\r\n sellToCustomerNo: res.selltocustomerno,\r\n sellToCustomerName: sellToCustomerName,\r\n sellToAddress: null,\r\n sellToCity: null,\r\n sellToCountry_RegionCode: null,\r\n shipttoname: '',\r\n orderType: res.ordertype,\r\n salespersonnote: res.salespersonnote,\r\n navorderid: res.navorderid,\r\n status: 'Partially Shipped',\r\n orderQuantity: res.orderQuantity,\r\n isImported: false\r\n }\r\n\r\n if (res.orderQuantity === res.outstandingQuantity) {\r\n order.status = 'Not Shipped'\r\n }\r\n\r\n if (res.outstandingQuantity > 0 && res.orderQuantity > res.outstandingQuantity) {\r\n order.status = 'Partially Shipped'\r\n }\r\n\r\n if (res.outstandingQuantity === 0) {\r\n order.status = 'Fully Shipped'\r\n }\r\n return order;\r\n })\r\n \r\n const openStuff = openOrdersResponse.data.map((item: any) => {\r\n item.isImported = true\r\n\r\n if (item.isImported) {\r\n item.status = 'Not Shipped'\r\n } else {\r\n const navRef = responses[0].data.find((item: any) => item.navImportRef === item.navorderid)\r\n\r\n if (navRef.orderQuantity === navRef.outstandingQuantity) {\r\n item.status = 'Not Shipped'\r\n }\r\n \r\n if (navRef.outstandingQuantity > 0 && navRef.orderQuantity > navRef.outstandingQuantity) {\r\n item.status = 'Partially Shipped'\r\n }\r\n \r\n if (navRef.outstandingQuantity === 0) {\r\n item.status = 'Fully Shipped'\r\n }\r\n }\r\n return item\r\n })\r\n\r\n setIsFetching(false)\r\n const allOrders: any[] = [\r\n ...peakNavordersResponse ,\r\n ...openStuff,\r\n ];\r\n\r\n const ot: any[] = uniq(allOrders.map(item => item.orderType));\r\n\r\n setOrderTypes(ot);\r\n setOrders(allOrders)\r\n setClosedOrders([ ...peakNavordersResponse ])\r\n setOpenOrders([ ...openStuff ] )\r\n // setFilteredItems( [ ...allOrders ])\r\n setOpenFilteredItems( [ ...peakNavordersResponse ] )\r\n setClosedFilteredItems( [ ...openStuff ] )\r\n }\r\n\r\n const onCloseSidebar = () => {\r\n setShowSidebar(false)\r\n setSelectedBSLItems([])\r\n }\r\n\r\n const onHandleClickBSL = async (order: any, drop: any) => {\r\n setShowSidebar(true)\r\n\r\n if (drop.bsl) {\r\n const response = await OrderApi.peakNavShipmentItems(drop.bsl)\r\n setSelectedBSLItems(cloneDeep(response.data))\r\n } else {\r\n if (order.appOrderId) {\r\n const response = await OrderApi.getFilteredOrderLines(order.appOrderId, drop.deliveryCode)\r\n setSelectedBSLItems(cloneDeep(response.data))\r\n } else {\r\n const response = await OrderApi.peakNavOrderUnshippedItems(order.navorderid, drop.deliveryCode)\r\n setSelectedBSLItems(cloneDeep(response.data))\r\n }\r\n }\r\n }\r\n\r\n const renderSidebarMenuContent = () => {\r\n if (!selectedBSLItems) return null\r\n const total = selectedBSLItems.reduce((sum: number, li: any) => sum + li.quantity, 0)\r\n\r\n const orderlines = selectedBSLItems.map((item: any) => {\r\n item.quantity = item.qty || item.quantity\r\n item.deliveryCode = item.deliverycode\r\n return item\r\n })\r\n\r\n if (!isFetchingItems && !orderlines.length) {\r\n return (\r\n
\r\n

No Items on this shipment!

\r\n
\r\n )\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n )\r\n }\r\n\r\n if (!props.show) return null\r\n\r\n return (\r\n <>\r\n {\r\n isFetching ?\r\n
\r\n : null\r\n }\r\n
\r\n
\r\n
\r\n {\r\n const value = event.target.value\r\n\r\n setSearchString(value || '')\r\n }}\r\n />\r\n
\r\n
\r\n {/* */}\r\n
\r\n
\r\n {/* */}\r\n
\r\n
\r\n \r\n {openOrders.length ?\r\n <>\r\n

Not completed orders

\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n filterByValue(closedFilteredItems, searchString, [\r\n 'orderType',\r\n 'salespersonnote',\r\n 'status',\r\n 'appOrderId',\r\n 'sellToCustomerName'\r\n ])\r\n .map((order: any, key: any) => {\r\n if(order.orderQuantity === 0) {\r\n return null\r\n }\r\n\r\n let expanded = false\r\n\r\n if (order.navorderid && order.navorderid !== null && activeOrderIds.indexOf(order.navorderid) !== -1 ) {\r\n expanded = true;\r\n } else if (order.appOrderId && activeOrderIds.indexOf(order.appOrderId) !== -1) {\r\n expanded = true;\r\n }\r\n\r\n return {\r\n dispatch(getOpenOrders()) \r\n getInitialShop()\r\n }}\r\n openOrders={openOrders}\r\n />\r\n })\r\n }\r\n \r\n
Order IDMolo ref. numberShopTypeCommentStatus
: null}\r\n\r\n {closedOrders.length ?\r\n <>\r\n

Editable Completed Orders

\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n filterByValue(openFilteredItems, searchString, [\r\n 'orderType',\r\n 'salespersonnote',\r\n 'status',\r\n 'appOrderId',\r\n 'sellToCustomerName'\r\n ])\r\n .map((order: any, key: any) => {\r\n if(order.orderQuantity === 0) {\r\n return null\r\n }\r\n\r\n let expanded = false\r\n\r\n if (order.navorderid && order.navorderid !== null && activeOrderIds.indexOf(order.navorderid) !== -1 ) {\r\n expanded = true;\r\n } else if (order.appOrderId && activeOrderIds.indexOf(order.appOrderId) !== -1) {\r\n expanded = true;\r\n }\r\n return {\r\n dispatch(getOpenOrders()) \r\n getInitialShop()\r\n }}\r\n openOrders={openOrders}\r\n onFetching={(fetching: boolean) => setIsFetching(fetching)}\r\n />\r\n })\r\n }\r\n \r\n
Order IDMolo ref. numberShopTypeCommentStatus
: null}\r\n \r\n
\r\n \r\n { renderSidebarMenuContent() }\r\n \r\n setShowDashOverlay(false)}\r\n order={activeViewOrder}\r\n />\r\n \r\n )\r\n}\r\n\r\nexport default OpenOrdersBody;","import React, { useState } from 'react'\r\nimport { Tab, Tabs, TabList, TabPanel } from 'react-tabs';\r\nimport 'react-tabs/style/react-tabs.css';\r\nimport '../b2b/ShippedOrdersOverlay';\r\nimport OpenOrdersBody from './OpenOrdersBody';\r\nimport { ShippedOrdersOverlay } from '../b2b/ShippedOrdersOverlay';\r\n\r\n// Components.\r\nimport { Overlay } from 'molo-shared';\r\n\r\ninterface Props {\r\n show: boolean\r\n hide: Function\r\n}\r\n\r\nconst AllOrdersOverlay: React.FC = ({ show, hide }) => {\r\n const [tabIndex, setTabIndex] = useState(0)\r\n\r\n return (\r\n \r\n
\r\n

Orders

\r\n
\r\n setTabIndex(ti) }\r\n >\r\n \r\n Not Completed\r\n Completed\r\n \r\n \r\n {}}\r\n show={ tabIndex === 0 && show }\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n hide={() => {\r\n setTabIndex(0)\r\n hide()\r\n }}\r\n isShowing={show}\r\n />\r\n )\r\n}\r\n\r\nexport default AllOrdersOverlay;","import React, { Component } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { ThunkDispatch } from 'redux-thunk'\r\nimport {RouteComponentProps, withRouter} from \"react-router-dom\";\r\n\r\n// Utils.\r\nimport { cloneDeep, uniqBy } from 'lodash';\r\nimport {\r\n Tooltip,\r\n Position,\r\n} from \"@blueprintjs/core\";\r\n\r\n// Icons.\r\nimport { FaSearch, FaCircle, FaTrash, FaTimes } from 'react-icons/fa';\r\n\r\n// Components.\r\nimport SidebarMenu from './SidebarMenu';\r\nimport CreateOrderModal from '../b2b/CreateOrderModal'\r\nimport MyMoloOverlay from '../b2b/MyMoloOverlay';\r\nimport ProductDownloadModal from '../b2b/ProductDownloadModal';\r\nimport SearchBox from '../shared/SearchBox';\r\nimport ShopDropDown from '../b2b/ShopDropdown';\r\nimport Dropdown from './Dropdown';\r\nimport DeleteOrderModal from '../b2b/DeleteOrderModal';\r\nimport CountDown2 from '../shared/CountDown2';\r\n\r\n// Models.\r\nimport { Filter } from '../../models/Filter';\r\n\r\n// Store.\r\nimport { RootState } from '../../store';\r\nimport { ICollectionState } from '../../store/collections/reducers'\r\nimport { IProductState } from '../../store/products/reducers'\r\nimport { IFilterState } from '../../store/session/reducers'\r\nimport { IUserSate } from '../../store/user/reducers'\r\nimport { IOrderState } from '../../store/order/orderStore';\r\nimport { applyFilter, getFilter } from '../../store/session/actions'\r\nimport { logoutUser } from '../../store/user/actions';\r\nimport { resetFilter } from '../../store/session/actions'\r\n\r\nimport { DeliveryWindow } from '../../models/Style';\r\nimport { getDashboardOrderState } from '../../store/order/actions';\r\nimport AllOrdersOverlay from '../shared/AllOrdersOverlay';\r\n\r\ninterface State {\r\n showSidebar: boolean,\r\n showOrderModal: boolean,\r\n collectionName: string,\r\n orderTypeName: string,\r\n showNavOrderModal: boolean,\r\n selectedCollection: any,\r\n isCheckoutPage: boolean,\r\n showSearch: boolean,\r\n showShopOverlay: boolean,\r\n showProductDownload: boolean\r\n showDeleteOrderModal: boolean,\r\n orderIdToDelete?: number\r\n showMyMolo: boolean\r\n myMoloIsProfile: boolean\r\n showShippedOverlay: boolean\r\n}\r\n \r\ninterface OwnProps {\r\n match?: {params: {collection: string, orderType: string}},\r\n children?: any\r\n history?: any\r\n location?: any\r\n staticContext?: any\r\n isDashboard?: boolean\r\n editMode?: boolean\r\n}\r\n \r\ninterface DispatchProps {\r\n applyFilter: (filter: Filter) => void;\r\n getFilter: () => void;\r\n logoutUser: () => void;\r\n getDashboardOrderState: (orderId: number) => void;\r\n resetFilter: (filter: Filter) => void\r\n}\r\n \r\ninterface StateProps {\r\n productState: IProductState\r\n collectionState: ICollectionState\r\n filterState: IFilterState\r\n userState: IUserState\r\n orderState: IOrderState\r\n}\r\n \r\ntype Props = StateProps & OwnProps & DispatchProps & RouteComponentProps;\r\n\r\nexport class Header extends Component {\r\n state: State = {\r\n showSidebar: false,\r\n showOrderModal: false,\r\n collectionName: '',\r\n orderTypeName: '',\r\n showNavOrderModal: false,\r\n showProductDownload: false,\r\n selectedCollection: null,\r\n isCheckoutPage: false,\r\n showSearch: false,\r\n showShopOverlay: false,\r\n showDeleteOrderModal: false,\r\n showMyMolo: false,\r\n myMoloIsProfile: false,\r\n showShippedOverlay: false\r\n }\r\n\r\n childRef = React.createRef();\r\n\r\n componentDidMount() {\r\n this.setMenuItems();\r\n\r\n if (this.props.location.pathname.includes('/checkout')) {\r\n this.setState({isCheckoutPage: true})\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps: Props) {\r\n if (this.props.location !== prevProps.location) {\r\n this.setMenuItems();\r\n\r\n if (this.props.location && this.props.location.pathname && this.props.location.pathname.includes('/checkout')) {\r\n this.setState({isCheckoutPage: true})\r\n } else {\r\n this.setState({isCheckoutPage: false})\r\n }\r\n }\r\n }\r\n\r\n setMenuItems = () => {\r\n let collectionName = null;\r\n let orderTypeName = null;\r\n\r\n if (this.props.match) {\r\n collectionName = this.props.match.params.collection;\r\n orderTypeName = this.props.match.params.orderType;\r\n\r\n this.setState({\r\n collectionName,\r\n orderTypeName,\r\n }, () => {\r\n\r\n });\r\n }\r\n }\r\n\r\n toggleSidebar = (open: boolean) => {\r\n this.setState({ showSidebar: open })\r\n }\r\n\r\n hide = () => {}\r\n\r\n onClickSetCollectionType = (collection: any) => {\r\n // if (this.props.filterState.filter) {\r\n // this.props.resetFilter(this.props.filterState.filter)\r\n // }\r\n if (this.props.editMode) {\r\n window.location.href = '/edit/' + collection.collectionName\r\n // this.props.history.push('/edit/' + collection.collectionName);\r\n } else {\r\n window.location.href = '/shop/' + this.state.orderTypeName + '/' + collection.collectionName\r\n // this.props.history.push('/shop/' + this.state.orderTypeName + '/' + collection.collectionName);\r\n }\r\n }\r\n\r\n onClickSetOrderType = (orderType: any) => {\r\n this.props.history.push('/shop/' + orderType.orderType);\r\n }\r\n\r\n onClickSetDeliveryType = (deliveryWindow: DeliveryWindow | string) => {\r\n const newFilter = cloneDeep(this.props.filterState.filter);\r\n if (!newFilter) return\r\n\r\n\r\n if (typeof deliveryWindow === 'string') {\r\n newFilter.activeFilters.deliveryWindows = [];\r\n } else {\r\n newFilter.activeFilters.deliveryWindows = [deliveryWindow.label];\r\n }\r\n\r\n this.props.applyFilter(newFilter);\r\n }\r\n\r\n onClickSetSustainability = (sustainability: string) => {\r\n const newFilter = cloneDeep(this.props.filterState.filter);\r\n \r\n if (!newFilter || !newFilter.activeFilters.sustainability) return\r\n\r\n const indexOf = newFilter.activeFilters.sustainability.indexOf(sustainability)\r\n\r\n if (sustainability === 'all') {\r\n newFilter.activeFilters.sustainability = [];\r\n } else {\r\n if (indexOf > -1) {\r\n newFilter.activeFilters.sustainability.splice(indexOf, 1);\r\n } else {\r\n newFilter.activeFilters.sustainability.push(sustainability);\r\n }\r\n }\r\n\r\n this.props.applyFilter(newFilter); \r\n }\r\n\r\n onClickSearchIcon = () => {\r\n this.setState({showSearch: !this.state.showSearch})\r\n }\r\n\r\n onClickShopIcon = () => {\r\n if (this.state.showShopOverlay) {\r\n this.setState({showShopOverlay: false})\r\n }\r\n this.setState({showShopOverlay: true})\r\n }\r\n\r\n showCreateOrderModal = () => {\r\n this.setState({ showOrderModal: true, showShopOverlay: false })\r\n }\r\n\r\n openNavOrderModal = () => {\r\n if (this.childRef.current) {\r\n // this.childRef.current.toggle();\r\n this.setState({ showNavOrderModal: true })\r\n }\r\n }\r\n\r\n showDeleteOrderModal = () => {\r\n this.setState({ showDeleteOrderModal: true })\r\n }\r\n\r\n onClickLinkHandler = () => {\r\n if (this.childRef.current) {\r\n // this.childRef.current.toggle();\r\n }\r\n this.toggleSidebar(false)\r\n }\r\n\r\n onClickMyMolo = () => {\r\n this.setState({ showShippedOverlay: !this.state.showShippedOverlay })\r\n }\r\n\r\n onClickProfile = () => {\r\n this.setState({ showMyMolo: !this.state.showMyMolo })\r\n }\r\n\r\n onClickProductDownload = () => {\r\n this.props.history.push('/download')\r\n }\r\n\r\n logoutUser = () => {\r\n // this.props.history.push('/logout')\r\n // window.history.replaceState(null, '', \"/\");\r\n // this.props.history.replace(null, '', \"/\");\r\n this.props.history.push('/')\r\n this.props.logoutUser();\r\n }\r\n\r\n onCLickChangeDashboardOrder = (orderId: number) => {\r\n this.props.history.push('/dashboard/' + orderId);\r\n this.props.getDashboardOrderState(orderId);\r\n }\r\n\r\n upcomingLabel = (deliveryWindow: DeliveryWindow) => {\r\n if (deliveryWindow.label !== 'available now') {\r\n return - upcoming\r\n }\r\n\r\n return null;\r\n }\r\n\r\n renderLinks = () => {\r\n return (\r\n
    \r\n {\r\n this.props.productState.orderTypes &&\r\n this.state.orderTypeName &&\r\n this.props.productState.orderTypes.length ?\r\n
  • \r\n type.orderType === this.state.orderTypeName)\r\n }\r\n identifier={'orderType'}\r\n onSelect={this.onClickSetOrderType}\r\n />\r\n
  • : null\r\n }\r\n {\r\n this.props.collectionState.collections && this.props.collectionState.collections.length &&\r\n this.state.collectionName ?\r\n
  • \r\n col.collectionName === this.state.collectionName)\r\n }\r\n identifier={'collectionName'}\r\n onSelect={this.onClickSetCollectionType}\r\n />\r\n
  • : null\r\n }\r\n {\r\n this.state.collectionName &&\r\n this.props.filterState.filter && this.props.collectionState.deliveryWindows ?\r\n
  • \r\n {\r\n if (this.props.filterState.filter && this.props.filterState.filter.activeFilters.deliveryWindows[0]) {\r\n return del.label === this.props.filterState.filter.activeFilters.deliveryWindows[0]\r\n }\r\n \r\n return null\r\n })}\r\n identifier={'label'}\r\n onSelect={this.onClickSetDeliveryType}\r\n allLabel='Show All'\r\n allOption={true}\r\n placeholder={'Deliveries All'}\r\n extraLabel={this.state.orderTypeName && this.state.orderTypeName.toLowerCase() === 'reorder' && this.upcomingLabel}\r\n />\r\n
  • : null\r\n }\r\n {\r\n this.state.collectionName &&\r\n this.props.filterState.filter && this.props.filterState.filter.sustainability ?\r\n
  • \r\n \r\n
  • : null\r\n }\r\n
\r\n )\r\n }\r\n\r\n renderOrderDropdownItem = (order: any, useLabel: boolean) => (\r\n
\r\n {useLabel && order.navImportRef && order.orderIsFinal && Approved order}\r\n {useLabel && !order.orderIsFinal && order.navImportRef && Access to edit}\r\n {useLabel && !order.navImportRef && Open order}\r\n { order.sellToCustomerName }\r\n \r\n \r\n b2b{order.appOrderId}\r\n \r\n \r\n {order.orderType}\r\n {order.navImportRef && }\r\n {\r\n order.navImportRef &&\r\n \r\n {order.navImportRef}\r\n \r\n }\r\n {order.salespersonNote && }\r\n {\r\n order.salespersonNote &&\r\n \r\n { order.salespersonNote }\r\n \r\n }\r\n\r\n {!useLabel && order.navImportRef && order.orderIsFinal && Approved order}\r\n {!useLabel && order.navImportRef && !order.orderIsFinal && Access to edit}\r\n {!useLabel && !order.navImportRef && Open order}\r\n
\r\n )\r\n\r\n render() {\r\n const { order, orders } = this.props.orderState;\r\n const dashboardOrder = order;\r\n let dropDownItems: any[] = []\r\n\r\n // console.log(this.props.orderState);\r\n\r\n let hoursLeft = 0;\r\n\r\n if (this.props.editMode && this.props.orderState.order) {\r\n const diff = new Date(new Date().toISOString()).getTime() - new Date(this.props.orderState.order.orderheader.createdUtc).getTime()\r\n hoursLeft = (3600000 * 24) - diff;\r\n }\r\n\r\n if (dashboardOrder) {\r\n dropDownItems = orders.filter(order => order.appOrderId !== dashboardOrder.orderheader.appOrderId) || [];\r\n const recent = this.props.orderState.recentClosedOrders.filter(order => order.navImportRef && order.appOrderId !== dashboardOrder.orderheader.appOrderId) || [];\r\n dropDownItems = [...dropDownItems, ...recent]\r\n }\r\n\r\n dropDownItems = uniqBy(dropDownItems, 'appOrderId');\r\n\r\n return (\r\n
\r\n
\r\n
{\r\n if (window.innerWidth > 900) {\r\n this.props.history.push('/shop')\r\n }\r\n }}>\r\n {\r\n this.props.userState.user &&\r\n {this.props.userState.user.customerData.Name}\r\n }\r\n
\r\n {\r\n this.props.isDashboard && !this.state.isCheckoutPage && dashboardOrder ?\r\n
    \r\n
  • \r\n {\r\n if (dashboardOrder.orderheader.navImportRef && !dashboardOrder.orderheader.orderState) {\r\n return dashboardOrder\r\n }\r\n return orders.find(o => o.appOrderId === dashboardOrder.orderheader.appOrderId)\r\n }\r\n }\r\n trigger={() => this.renderOrderDropdownItem(dashboardOrder.orderheader, true)}\r\n valueRender={(item: any) => this.renderOrderDropdownItem(item, false)}\r\n identifier={'appOrderId'}\r\n onSelect={(item: any) => this.onCLickChangeDashboardOrder(item.appOrderId)}\r\n />\r\n
  • \r\n
  • \r\n
    \r\n \r\n Delete order
    }\r\n position={Position.RIGHT}\r\n >\r\n this.setState({ showDeleteOrderModal: true }) }>\r\n {\r\n dashboardOrder && dashboardOrder.orderheader.orderIsFinal ?\r\n : \r\n }\r\n \r\n \r\n
\r\n \r\n
  • \r\n
    \r\n
    \r\n
    \r\n { dashboardOrder.orderheader.sellToCustomerName }\r\n b2b{dashboardOrder.orderheader.appOrderId}\r\n {dashboardOrder.orderheader.orderType}\r\n {\r\n dashboardOrder.orderheader.navImportRef &&\r\n \r\n {dashboardOrder.orderheader.navImportRef}\r\n \r\n }\r\n {\r\n dashboardOrder.orderheader.salespersonNote &&\r\n \r\n { dashboardOrder.orderheader.salespersonNote }\r\n \r\n }\r\n
    \r\n
    \r\n
    \r\n
  • \r\n \r\n :\r\n null\r\n }\r\n {\r\n this.props.isDashboard && this.state.isCheckoutPage && this.props.orderState.order ?\r\n
      \r\n
    • \r\n
      \r\n
      \r\n {this.renderOrderDropdownItem(this.props.orderState.order.orderheader, true)}\r\n
      \r\n
      \r\n
    • \r\n
    \r\n :\r\n null\r\n }\r\n { !this.state.isCheckoutPage && this.renderLinks() }\r\n
    \r\n {\r\n
    \r\n \r\n
    \r\n }\r\n {\r\n this.props.editMode && this.props.orderState.order && \r\n
    \r\n \r\n
    \r\n }\r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n this.setState({ showOrderModal: false })}\r\n orderTypeName={this.state.orderTypeName}\r\n />\r\n this.setState({ showSearch: false })}\r\n />\r\n \r\n this.setState({ showDeleteOrderModal: false })}\r\n orderId={this.props.orderState.order ? this.props.orderState.order.orderheader.appOrderId : 0}\r\n order={this.props.orderState.order && this.props.orderState.order.orderheader}\r\n onClickConfirmDelete={(deletedOrder: any) => {\r\n if (this.props.orderState.order &&\r\n deletedOrder.appOrderId === this.props.orderState.order.orderheader.appOrderId) {\r\n this.props.history.push('/');\r\n }\r\n }}\r\n />\r\n this.setState({ showMyMolo: false})}\r\n />\r\n\r\n this.setState({ showProductDownload: false})}\r\n isProfile={this.state.myMoloIsProfile}\r\n />\r\n this.setState({ showShippedOverlay: false})}\r\n />\r\n \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (states: RootState, ownProps: OwnProps): StateProps => {\r\n return {\r\n productState: states.productStore.productStore,\r\n collectionState: states.collections.collections,\r\n filterState: states.session.filter,\r\n userState: states.user.user,\r\n orderState: states.order.order\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: ThunkDispatch<{}, {}, any>, ownProps: OwnProps): DispatchProps => {\r\n return {\r\n applyFilter: async (filter: Filter) => {\r\n await dispatch(applyFilter(filter))\r\n // console.log('apply filter completed [UI]')\r\n },\r\n getFilter: async () => {\r\n await dispatch(getFilter())\r\n // console.log('getFIlter completed [UI]')\r\n },\r\n logoutUser: async () => {\r\n await dispatch(logoutUser())\r\n // console.log('user is invalidated')\r\n },\r\n getDashboardOrderState: async (orderId: number) => {\r\n await dispatch(getDashboardOrderState(orderId));\r\n },\r\n resetFilter: async (filter: Filter) => {\r\n await dispatch(resetFilter(filter))\r\n },\r\n }\r\n}\r\n\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(Header)) \r\n","import React from 'react';\r\nimport { FaTrash } from 'react-icons/fa';\r\n\r\nimport DeleteOrderModal from '../b2b/DeleteOrderModal';\r\n\r\ninterface IProps {\r\n order: any,\r\n onClickHandler: Function\r\n hide?: Function\r\n}\r\n\r\nconst BasketDropUpItem: React.FC = (props) => {\r\n \r\n const [showModal, setShowModal] = React.useState(false);\r\n const { onClickHandler, order, hide } = props;\r\n\r\n return (\r\n
    \r\n
    {\r\n onClickHandler(order);\r\n }}>\r\n { order && order.appOrderId && 'B2B' + order.appOrderId}\r\n { order && order.sellToCustomerName && ' ' + order.sellToCustomerName}\r\n { order && order.orderType && ' ' + order.orderType}\r\n { order && order.navImportRef && ' ' + order.navImportRef}\r\n { order && order.salespersonNote && ' ' + order.salespersonNote }\r\n \r\n {order.orderState === 0 && order.navImportRef\r\n && Access to edit}\r\n {order.orderState === 1 && order.navImportRef\r\n && Approved order}\r\n
    \r\n
    {\r\n hide && hide()\r\n setShowModal(true)\r\n }}>\r\n \r\n
    \r\n {\r\n setShowModal(false)\r\n }}\r\n orderId={order.appOrderId}\r\n order={order}\r\n />\r\n
    \r\n )\r\n}\r\n\r\nexport default BasketDropUpItem;","import React from 'react';\r\nimport Order from '../../models/Order';\r\nimport { useSelector } from \"react-redux\";\r\n\r\nimport { RootState } from '../../store/';\r\n\r\nimport { FaAngleUp, FaTrash, FaTimes } from 'react-icons/fa';\r\nimport PropagateLoader from 'react-spinners/PropagateLoader'\r\n\r\nimport BasketDropUpItem from '../b2b/BasketDropUpItem';\r\nimport DeleteOrderModal from '../b2b/DeleteOrderModal';\r\n\r\ninterface IProps {\r\n activeOrder: Order | null,\r\n setOrderHandler: Function,\r\n orders: any[],\r\n onClickCreateModal: Function\r\n}\r\n\r\nconst BasketDropUp: React.FC = (props) => {\r\n const node = React.useRef(null);\r\n const [showDropUp, setValue] = React.useState(false);\r\n const [showDeleteModal, setShowDeleteModal] = React.useState(false);\r\n const { activeOrder, setOrderHandler, orders, onClickCreateModal } = props;\r\n const isFetchingOrder = useSelector((state: RootState) => state.order.order.isFetching);\r\n\r\n React.useEffect(() => {\r\n // add when mounted\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n // return function to be called when unmounted\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n };\r\n }, []);\r\n\r\n const handleClickOutside = (e: any) => {\r\n\r\n // @ts-ignore\r\n if(node.current.contains(e.target)) {\r\n return;\r\n }\r\n \r\n // outside click \r\n setValue(false)\r\n };\r\n\r\n return (\r\n
    \r\n {\r\n !isFetchingOrder && activeOrder &&\r\n \r\n
    \r\n {activeOrder &&\r\n setShowDeleteModal(true) } className=\"dropup__actions__item clickable\">\r\n {\r\n activeOrder && activeOrder.orderheader.orderIsFinal ?\r\n : \r\n }\r\n \r\n }\r\n
    \r\n
    setValue(!showDropUp)}>\r\n { activeOrder && activeOrder.orderheader.orderState === 0 && activeOrder.orderheader.navImportRef\r\n && Access to edit}\r\n { activeOrder && activeOrder.orderheader.orderState === 1 && activeOrder.orderheader.navImportRef\r\n && Approved order}\r\n { activeOrder && activeOrder.orderheader.appOrderId && 'B2B' + activeOrder.orderheader.appOrderId}\r\n { activeOrder && activeOrder.orderheader.sellToCustomerName && ' ' + activeOrder.orderheader.sellToCustomerName}\r\n { activeOrder && activeOrder.orderheader.orderType && ' ' + activeOrder.orderheader.orderType}\r\n { activeOrder && activeOrder.orderheader.navImportRef && ' ' + activeOrder.orderheader.navImportRef}\r\n { activeOrder && activeOrder.orderheader.salespersonNote && ' ' + activeOrder.orderheader.salespersonNote }\r\n {\r\n orders.length > 0 ?\r\n \r\n \r\n : null\r\n }\r\n
    \r\n
    \r\n }\r\n {\r\n !isFetchingOrder && !activeOrder && orders.length ?\r\n
    setValue(!showDropUp)}>\r\n Select order\r\n \r\n \r\n \r\n
    : null\r\n }\r\n {activeOrder && {\r\n setShowDeleteModal(false)\r\n }}\r\n orderId={activeOrder.orderheader.appOrderId}\r\n order={activeOrder.orderheader}\r\n />}\r\n\r\n {\r\n isFetchingOrder &&\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n }\r\n\r\n
    \r\n {\r\n
    \r\n {\r\n orders.map((order, key) => {\r\n if (activeOrder && order.appOrderId === activeOrder.orderheader.appOrderId) {\r\n return null;\r\n }\r\n\r\n return setValue(false)}\r\n onClickHandler={(order: any) => {\r\n setValue(false)\r\n setOrderHandler(order)\r\n }} />\r\n })\r\n }\r\n
    \r\n }\r\n
    \r\n onClickCreateModal()}>\r\n Create new order\r\n \r\n
    \r\n
    \r\n
    \r\n )\r\n}\r\n\r\nexport default BasketDropUp;","import React, { Component } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { ThunkDispatch } from 'redux-thunk'\r\nimport { Link } from \"react-router-dom\";\r\nimport {RouteComponentProps, withRouter} from \"react-router-dom\";\r\n\r\nimport { groupBy } from '../../utils/UtilHelper';\r\n\r\nimport {\r\n FaChevronLeft,\r\n FaChevronRight,\r\n FaExternalLinkAlt,\r\n FaShoppingCart,\r\n} from 'react-icons/fa';\r\n\r\nimport { RootState } from '../../store';\r\nimport { getOrder, getOpenOrders, setOrder, setUserHasConfirmed } from '../../store/order/actions';\r\nimport { IOrderState } from '../../store/order/orderStore';\r\nimport { IUserSate } from '../../store/user/reducers';\r\nimport { Basket } from '../../models/Basket';\r\nimport {\r\n roundAmount\r\n} from '../../utils/priceHelper';\r\nimport OrderApi from '../../store/order/OrderApi';\r\n\r\nimport queryString from 'query-string'\r\n\r\n// Components.\r\nimport BasketDropUp from './BasketDropUp';\r\nimport Order from '../../models/Order'\r\nimport CreateOrderModal from '../b2b/CreateOrderModal'\r\nimport ConfirmModal from '../layout/Modal/ConfirmModal';\r\nimport GatherDeliveryWindowsModal from './GatherDeliveryWindowsModal';\r\n\r\ninterface State {\r\n showOverlay: boolean,\r\n showGotItModal: boolean,\r\n order: Order | undefined | null\r\n showOrderModal: boolean,\r\n orderTypeName: string,\r\n previousNonDashboardUrl: string,\r\n isCheckout: boolean,\r\n isDetailsPage: boolean,\r\n showGatherModal: boolean\r\n}\r\n \r\ninterface OwnProps {\r\n showDropup?: boolean\r\n showContinueShopping?: boolean\r\n showCheckoutLink?: boolean\r\n showDashboardLink?: boolean\r\n match?: {params: {appOrderId: number}},\r\n history: any\r\n editMode?: boolean\r\n}\r\n \r\ninterface DispatchProps {\r\n getOrder: (orderId: number) => void\r\n getOpenOrders: () => void\r\n setOrder: (orderId: number) => void\r\n setUserHasConfirmed: (informed: boolean) => void\r\n}\r\n \r\ninterface StateProps {\r\n orderState: IOrderState\r\n basket?: Basket\r\n userState: IUserSate\r\n}\r\n \r\ntype Props = StateProps & OwnProps & DispatchProps & RouteComponentProps;\r\n\r\nexport class BasketComponent extends Component {\r\n state: State = {\r\n showOverlay: false,\r\n order: null,\r\n showOrderModal: false,\r\n orderTypeName: '',\r\n previousNonDashboardUrl: '/shop',\r\n isCheckout: false,\r\n isDetailsPage: false,\r\n showGotItModal: false,\r\n showGatherModal: false\r\n }\r\n\r\n public static getDerivedStateFromProps(props: Props, state: State) {\r\n if (props.orderState.order && props.orderState.order !== state.order) {\r\n return {\r\n order: props.orderState.order\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n componentDidMount() {\r\n const orderId = localStorage.getItem('order')\r\n \r\n if (!this.props.location.pathname.includes('checkout') && !this.props.location.pathname.includes('dashboard') && !this.props.location.pathname.includes('previeworder') ) {\r\n localStorage.setItem('previousNonDashboardUrl', this.props.location.pathname + this.props.location.search)\r\n\r\n if (orderId) {\r\n this.props.setOrder(+orderId);\r\n }\r\n } else {\r\n if (!this.state.isCheckout) {\r\n this.setState({ isCheckout: true })\r\n }\r\n\r\n if (this.props.location.pathname.includes('dashboard') && this.props.location.search.includes('step=details')) {\r\n this.setState({ isDetailsPage: true })\r\n }\r\n }\r\n \r\n this.props.getOpenOrders();\r\n }\r\n\r\n componentDidUpdate(prevProps: Props, prevState: State) {\r\n if (this.props.location.pathname !== prevProps.location.pathname) {\r\n \r\n if (!this.props.location.pathname.includes('checkout') && !this.props.location.pathname.includes('dashboard') && !this.props.location.pathname.includes('previeworder') && !this.props.location.pathname.includes('search') ) {\r\n localStorage.setItem('previousNonDashboardUrl', this.props.location.pathname + this.props.location.search)\r\n } else {\r\n if (!this.state.isCheckout) {\r\n this.setState({ isCheckout: true })\r\n }\r\n }\r\n }\r\n\r\n if (prevState.order !== this.state.order) {\r\n if (prevState.order && this.state.order &&\r\n prevState.order.orderheader.appOrderId !== this.state.order.orderheader.appOrderId && !this.props.showDashboardLink &&\r\n this.props.history) {\r\n // this.props.history.push('/shop/' + this.state.order.orderheader.orderType);\r\n }\r\n }\r\n\r\n const query = this.props.location && this.props.location.search ? queryString.parse(this.props.location.search) : null;\r\n let isDetailsPage = query && query.step === 'details' ? true : false;\r\n\r\n if (this.state.isDetailsPage !== isDetailsPage) {\r\n this.setState({isDetailsPage})\r\n }\r\n }\r\n\r\n setOrderHandler = (order: any) => {\r\n this.props.setOrder(order.appOrderId);\r\n }\r\n\r\n showCreateOrderModal = () => {\r\n this.setState({ showOrderModal: true })\r\n }\r\n\r\n render() {\r\n let { orders } = this.props.orderState;\r\n let recentClosedOrders = OrderApi.getRecentOrdersFromLocalStorage()\r\n\r\n orders = [...orders.filter(order => order.orderState === 0), ...recentClosedOrders]\r\n\r\n return (\r\n
    \r\n {\r\n this.props.showDropup &&\r\n \r\n }\r\n\r\n {\r\n this.props.showContinueShopping ?\r\n (\r\n
    \r\n
    {\r\n const previousNonDashboardUrl = localStorage.getItem('previousNonDashboardUrl');\r\n\r\n if (previousNonDashboardUrl) {\r\n this.props.history.push(previousNonDashboardUrl)\r\n } else {\r\n this.props.history.push('/shop')\r\n }\r\n }}>\r\n \r\n Continue shopping\r\n
    \r\n
    \r\n ) : null\r\n }\r\n\r\n {\r\n this.props.orderState.order &&\r\n this.props.basket ?\r\n 0)? ' clickable' : '')}\r\n style={{textAlign: 'center'}}\r\n onClick={() => {\r\n if (this.props.orderState.order) {\r\n if (!this.props.showDashboardLink || (this.props.basket && this.props.basket.numberOfItems === 0) ) return;\r\n this.props.history.push('/dashboard/' + this.props.orderState.order.orderheader.appOrderId + '?step=details&origin=shop')\r\n }\r\n }}>\r\n \r\n {/* */}\r\n \r\n {this.props.basket.numberOfItems }\r\n \r\n {\r\n this.props.orderState.order &&\r\n this.props.basket ? \r\n \r\n {/* {this.props.basket.numberOfItems } items, total: */}\r\n TOTAL: { this.props.basket && roundAmount(this.props.basket.total) + ' '} \r\n {this.props.orderState.order && this.props.orderState.order.orderheader.currencyCode}\r\n \r\n :\r\n null\r\n }\r\n {\r\n this.props.showDashboardLink && this.props.basket.numberOfItems > 0 ?\r\n \r\n Go to items\r\n \r\n : null\r\n\r\n }\r\n
    \r\n :\r\n null\r\n }\r\n \r\n
    \r\n {\r\n this.props.orderState.order\r\n && this.props.orderState.order.orderheader.orderState === 0\r\n && this.props.orderState.order.orderLines.length\r\n && !this.state.isDetailsPage\r\n && this.props.showCheckoutLink ?\r\n (\r\n \r\n
    {\r\n\r\n const gotIt = this.props.orderState.userIsInformed;\r\n\r\n const gatherDeliveryWindows = groupBy(['deliveryCode']);\r\n\r\n const grupedDeliveryWindows = gatherDeliveryWindows(this.props.orderState.dashboardDeliveryWindows)\r\n let forceAlert = false;\r\n\r\n for (const i in grupedDeliveryWindows) {\r\n if (grupedDeliveryWindows[i].length > 1) {\r\n forceAlert = true;\r\n }\r\n }\r\n \r\n\r\n if (forceAlert) {\r\n this.setState({ showGatherModal: true })\r\n this.props.setUserHasConfirmed(true)\r\n } else {\r\n if (this.props.orderState.order && gotIt) {\r\n this.props.history.push(`/checkout/` + this.props.orderState.order.orderheader.appOrderId)\r\n } else {\r\n this.setState({ showGotItModal: true })\r\n }\r\n }\r\n\r\n if (this.props.orderState.order && gotIt) {\r\n this.props.history.push(`/checkout/` + this.props.orderState.order.orderheader.appOrderId)\r\n } else {\r\n this.setState({ showGotItModal: true })\r\n }\r\n }} >\r\n Checkout\r\n \r\n
    \r\n ) : null\r\n }\r\n {\r\n this.props.orderState.dashboardOrder\r\n && this.props.orderState.dashboardOrder.orderheader.orderState === 0\r\n && this.props.orderState.dashboardOrder.orderLines.length\r\n && this.state.isDetailsPage\r\n && this.props.showCheckoutLink ?\r\n (\r\n \r\n \r\n Checkout\r\n \r\n \r\n ) : null\r\n }\r\n {\r\n this.props.orderState.order && this.props.orderState.order.orderLines.length && this.props.showDashboardLink?\r\n (\r\n \r\n Checkout\r\n \r\n \r\n ) : null\r\n }\r\n\r\n
    \r\n {\r\n this.state.showOrderModal && this.setState({ showOrderModal: false })}\r\n orderTypeName={this.state.orderTypeName}\r\n />\r\n }\r\n {/* {\r\n this.props.orderState.dashboardOrder &&\r\n {\r\n this.setState({ showGatherModal: false })\r\n if (this.props.orderState.order) {\r\n this.props.history.push(`/checkout/` + this.props.orderState.order.orderheader.appOrderId)\r\n }\r\n }}\r\n />} */}\r\n {\r\n this.setState({showGotItModal: false})\r\n this.props.setUserHasConfirmed(true)\r\n }}\r\n content={(\r\n
    \r\n

    You haven't changed your drops

    \r\n

    \r\n Are you sure you eant to checkout without changing your shipping dates?\r\n

    \r\n
    \r\n {\r\n this.setState({showGotItModal: false})\r\n this.props.setUserHasConfirmed(true)\r\n }}\r\n >\r\n No, edit dates\r\n \r\n {\r\n this.setState({showGotItModal: false})\r\n this.props.setUserHasConfirmed(true)\r\n if (this.props.orderState.order) {\r\n this.props.history.push(`/checkout/` + this.props.orderState.order.orderheader.appOrderId)\r\n }\r\n }}\r\n >\r\n Yes, go to checkout\r\n \r\n
    \r\n
    \r\n )}\r\n />\r\n \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (states: RootState, ownProps: OwnProps): StateProps => {\r\n return {\r\n orderState: states.order.order,\r\n basket: states.order.order.basket,\r\n userState: states.user.user\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: ThunkDispatch<{}, {}, any>, ownProps: OwnProps): DispatchProps => {\r\n return {\r\n getOrder: async (orderId: number) => {\r\n await dispatch(getOrder(orderId))\r\n // console.log('getOrder completed [UI]')\r\n },\r\n setOrder: async (orderId: number) => {\r\n await dispatch(setOrder(orderId))\r\n // console.log('setOrder completed [UI]')\r\n },\r\n getOpenOrders: async () => {\r\n await dispatch(getOpenOrders())\r\n // console.log('getOpenOrders completed [UI]')\r\n },\r\n setUserHasConfirmed: async (informed: boolean) => {\r\n await dispatch(setUserHasConfirmed(informed))\r\n // console.log('getOpenOrders completed [UI]')\r\n },\r\n }\r\n}\r\n\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(BasketComponent)) ","export const groupBy = (key: any) => (array: any[]) =>\r\narray.reduce((objectsByKeyValue: { [x: string]: any; }, obj: { [x: string]: any; }) => {\r\n const value = obj[key];\r\n objectsByKeyValue[value] = (objectsByKeyValue[value] || []).concat(obj);\r\n return objectsByKeyValue;\r\n}, {});","import React, { Component } from 'react'\r\n\r\nimport { connect } from 'react-redux'\r\nimport { ThunkDispatch } from 'redux-thunk'\r\n\r\n\r\n// Components.\r\nimport Header from './Header';\r\nimport BasketComponent from '../b2b/BasketComponent';\r\n\r\n// Store.\r\nimport { RootState } from '../../store';\r\nimport { ICollectionState } from '../../store/collections/reducers'\r\nimport { IProductState } from '../../store/products/reducers'\r\nimport { getCollections } from '../../store/collections/actions';\r\nimport { getOrderTypes } from '../../store/products/actions';\r\nimport { IUserSate } from '../../store/user/reducers';\r\nimport { IOrderState } from '../../store/order/orderStore';\r\nimport { resetFilter } from '../../store/session/actions'\r\nimport { Filter } from '../../models/Filter';\r\n\r\ninterface State {\r\n showSidebar: boolean,\r\n showOrderModal: boolean,\r\n collectionName: string,\r\n orderTypeName: string,\r\n editMode: boolean\r\n}\r\n \r\ninterface OwnProps {\r\n match?: {params: {collection: string, orderType: string}},\r\n children?: any\r\n history?: any\r\n location?: any\r\n staticContext?: any\r\n}\r\n \r\ninterface DispatchProps {\r\n getCollections: (orderType: string) => void\r\n getOrderTypes: (disallowedTypes?: string[]) => void\r\n resetFilter: (filter: Filter) => void\r\n}\r\n \r\ninterface StateProps {\r\n productState: IProductState\r\n collectionState: ICollectionState\r\n userSate: IUserSate\r\n orderState: IOrderState\r\n}\r\n \r\ntype Props = StateProps & OwnProps & DispatchProps;\r\n\r\nclass MainContainer extends Component {\r\n\r\n state = {\r\n showSidebar: false,\r\n showOrderModal: false,\r\n collectionName: '',\r\n orderTypeName: '',\r\n editMode: false\r\n }\r\n\r\n componentDidMount() {\r\n this.setMenuItems();\r\n\r\n const { order } = this.props.orderState;\r\n\r\n if (order) {\r\n\r\n if (this.state.editMode && !order) {\r\n this.setState({ editMode: false })\r\n }\r\n }\r\n\r\n if (!this.props.location.pathname.includes('/search')) {\r\n localStorage.setItem('search:prevPage', this.props.location.pathname);\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps: Props, prevState: State) {\r\n const { productState, collectionState, location } = this.props;\r\n\r\n const { order } = this.props.orderState;\r\n\r\n if (order) {\r\n if (order.orderheader.navImportRef && order.orderheader.orderState === 0 && !this.state.editMode) {\r\n this.setState({ editMode: true }, () => {\r\n if (!this.props.location.pathname.includes('/edit') && !this.props.location.pathname.includes('/search')) {\r\n // this.props.history.push('/edit')\r\n }\r\n })\r\n } else if (order.orderheader.navImportRef && order.orderheader.orderState === 0 && this.state.editMode) {\r\n if (!this.props.location.pathname.includes('/edit') && !this.props.location.pathname.includes('/search')) {\r\n // this.props.history.push('/edit')\r\n }\r\n }\r\n }\r\n\r\n if (this.state.editMode && !order) {\r\n this.setState({ editMode: false })\r\n }\r\n\r\n if (location !== prevProps.location) {\r\n this.setMenuItems();\r\n }\r\n \r\n if ((!productState.orderTypes || !productState.orderTypes.length) && !productState.isFetchingOrderTypes) {\r\n const disallowedTypes = this.props.userSate.user && this.props.userSate.user.disallowedTypes ? this.props.userSate.user.disallowedTypes : []; \r\n this.props.getOrderTypes(disallowedTypes);\r\n }\r\n\r\n if (\r\n (this.state.orderTypeName &&\r\n (this.state.orderTypeName !== prevState.orderTypeName && !collectionState.isFetchingCollectionMasters))\r\n ) {\r\n this.props.getCollections(this.state.orderTypeName);\r\n }\r\n\r\n if (prevProps.orderState.order && this.props.orderState.order &&\r\n prevProps.orderState.order.orderheader.appOrderId !== this.props.orderState.order.orderheader.appOrderId) {\r\n const order = this.props.orderState.order;\r\n\r\n if (order.orderheader.navImportRef && order.orderheader.orderState === 0 && !this.state.editMode) {\r\n this.setState({ editMode: true }, () => {\r\n if (!this.props.location.pathname.includes('/edit') && !this.props.location.pathname.includes('/search')) {\r\n // this.props.history.push('/edit')\r\n }\r\n })\r\n } else {\r\n this.setState({ editMode: false })\r\n\r\n if (this.props.location.pathname.includes('/edit')) {\r\n this.props.history.push('/')\r\n }\r\n }\r\n }\r\n\r\n if (!this.props.location.pathname.includes('/search')) {\r\n localStorage.setItem('search:prevPage', this.props.location.pathname);\r\n }\r\n }\r\n\r\n setMenuItems = () => {\r\n let collectionName: any = null;\r\n let orderTypeName: any = null;\r\n\r\n if (this.props.match) {\r\n collectionName = this.props.match.params.collection;\r\n orderTypeName = this.props.match.params.orderType;\r\n\r\n this.setState({\r\n collectionName,\r\n orderTypeName,\r\n }, () => {\r\n // this.props.getCollections(orderTypeName);\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n const { children } = this.props;\r\n \r\n return (\r\n <>\r\n \r\n
    \r\n { children }\r\n
    \r\n \r\n \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (states: RootState, ownProps: OwnProps): StateProps => {\r\n return {\r\n productState: states.productStore.productStore,\r\n collectionState: states.collections.collections,\r\n userSate: states.user.user,\r\n orderState: states.order.order,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: ThunkDispatch<{}, {}, any>, ownProps: OwnProps): DispatchProps => {\r\n return {\r\n getCollections: async (orderType: string) => {\r\n await dispatch(getCollections(orderType))\r\n },\r\n getOrderTypes: async (disallowedTypes?: string[]) => {\r\n await dispatch(getOrderTypes(disallowedTypes))\r\n },\r\n resetFilter: async (filter: Filter) => {\r\n await dispatch(resetFilter(filter))\r\n }\r\n }\r\n}\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(MainContainer)\r\n","import React, { Component } from 'react'\r\n\r\nimport { connect } from 'react-redux'\r\nimport { ThunkDispatch } from 'redux-thunk'\r\nimport {RouteComponentProps, withRouter} from \"react-router-dom\";\r\n\r\n// Components.\r\nimport Header from './Header';\r\nimport BasketComponent from '../b2b/BasketComponent';\r\n\r\n// Store.\r\nimport { RootState } from '../../store';\r\nimport { ICollectionState } from '../../store/collections/reducers'\r\nimport { IProductState } from '../../store/products/reducers'\r\nimport { getCollections } from '../../store/collections/actions';\r\nimport { getOrderTypes } from '../../store/products/actions';\r\nimport { IUserSate } from '../../store/user/reducers';\r\nimport { IOrderState } from '../../store/order/orderStore';\r\n\r\ninterface State {\r\n showSidebar: boolean,\r\n showOrderModal: boolean,\r\n collectionName: string,\r\n orderTypeName: string,\r\n editMode: boolean\r\n}\r\n \r\ninterface OwnProps {\r\n match?: {params: {collection: string, orderType: string}},\r\n children?: any\r\n history?: any\r\n location?: any\r\n staticContext?: any,\r\n hideBasket?: boolean\r\n}\r\n \r\ninterface DispatchProps {\r\n getCollections: (orderType: string) => void\r\n getOrderTypes: (disallowedTypes?: string[]) => void\r\n}\r\n \r\ninterface StateProps {\r\n productState: IProductState\r\n collectionState: ICollectionState\r\n userSate: IUserSate\r\n orderState: IOrderState\r\n}\r\n \r\ntype Props = StateProps & OwnProps & DispatchProps & RouteComponentProps;\r\n\r\nclass MainContainer extends Component {\r\n\r\n state = {\r\n showSidebar: false,\r\n showOrderModal: false,\r\n collectionName: '',\r\n orderTypeName: '',\r\n editMode: false\r\n }\r\n\r\n componentDidMount() {\r\n const { order } = this.props.orderState;\r\n\r\n if (order) {\r\n if (order.orderheader.navImportRef && !order.orderheader.orderIsFinal && !this.state.editMode) {\r\n this.setState({ editMode: true }, () => {\r\n })\r\n }\r\n }\r\n\r\n if (!this.props.location.pathname.includes('/search')) {\r\n localStorage.setItem('search:prevPage', this.props.location.pathname);\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps: Props, prevState: State) {\r\n if (prevProps.orderState.order && this.props.orderState.order &&\r\n prevProps.orderState.order.orderheader.appOrderId !== this.props.orderState.order.orderheader.appOrderId) {\r\n const order = this.props.orderState.order;\r\n\r\n if (order.orderheader.navImportRef && order.orderheader.orderState === 0 && !this.state.editMode) {\r\n this.setState({ editMode: true }, () => {\r\n \r\n })\r\n } else {\r\n this.setState({ editMode: false })\r\n\r\n \r\n }\r\n }\r\n\r\n if (!this.props.location.pathname.includes('/search')) {\r\n localStorage.setItem('search:prevPage', this.props.location.pathname);\r\n }\r\n }\r\n\r\n render() {\r\n const { children } = this.props;\r\n \r\n return (\r\n <>\r\n \r\n
    \r\n { children }\r\n
    \r\n {\r\n !this.props.hideBasket &&\r\n \r\n }\r\n \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (states: RootState, ownProps: OwnProps): StateProps => {\r\n return {\r\n productState: states.productStore.productStore,\r\n collectionState: states.collections.collections,\r\n userSate: states.user.user,\r\n orderState: states.order.order,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: ThunkDispatch<{}, {}, any>, ownProps: OwnProps): DispatchProps => {\r\n return {\r\n getCollections: async (orderType: string) => {\r\n await dispatch(getCollections(orderType))\r\n console.log('getCollections completed [UI]')\r\n },\r\n getOrderTypes: async (disallowedTypes?: string[]) => {\r\n await dispatch(getOrderTypes(disallowedTypes))\r\n }\r\n }\r\n}\r\n\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(MainContainer))\r\n","import React from 'react'\r\n\r\nimport Modal from '../layout/Modal/Modal';\r\n\r\nimport FileApi from '../../store/files/FileApi';\r\n\r\nimport PropagateLoader from 'react-spinners/PropagateLoader'\r\n\r\ninterface Props {\r\n show: boolean\r\n shouldHide: Function\r\n orderId: number\r\n}\r\n\r\nconst DownloadOrderImagesModal: React.FC = (props) => {\r\n let [downloadURL, setDownloadURL] = React.useState(undefined);\r\n let [downloading, setDownloading] = React.useState(false)\r\n const { shouldHide, show } = props;\r\n\r\n React.useEffect(() => {\r\n if (show && !downloadURL && !downloading) {\r\n setDownloading(true)\r\n\r\n setTimeout(() => {\r\n getFile();\r\n }, 1000);\r\n }\r\n \r\n return () => {};\r\n });\r\n\r\n const getFile = async () => {\r\n const response = await FileApi.createOrderImageZip(props.orderId)\r\n\r\n setDownloadURL(response.data.location)\r\n window.location.href = response.data.location;\r\n setDownloading(false)\r\n\r\n setTimeout(() => {\r\n props.shouldHide();\r\n }, 1000);\r\n }\r\n\r\n const renderModal = () => {\r\n return (
    \r\n
    \r\n

    Downloading your file

    \r\n \r\n
    \r\n
    )\r\n }\r\n\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport default DownloadOrderImagesModal;","import React, { Component } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { ThunkDispatch } from 'redux-thunk'\r\nimport {RouteComponentProps, withRouter} from \"react-router-dom\";\r\n\r\n// Third part.\r\nimport { CSSTransition } from 'react-transition-group';\r\n\r\n// Store.\r\nimport { RootState } from '../../store';\r\nimport { IOrderState } from '../../store/order/orderStore';\r\nimport { IUserSate } from '../../store/user/reducers';\r\nimport {\r\n setOrder,\r\n getCustomerShippingAddresses,\r\n clearShop,\r\n getOpenOrders,\r\n getDashboardOrderState,\r\n applyOrder,\r\n} from '../../store/order/actions';\r\nimport OrderApi from '../../store/order/OrderApi';\r\n\r\n// Icons.\r\nimport { FaCheck, FaTruck, FaChevronLeft } from 'react-icons/fa';\r\nimport { Link } from 'react-router-dom';\r\n\r\n// Components.\r\nimport MoloRingloader from '../../components/layout/MoloRingloader';\r\nimport PropagateLoader from 'react-spinners/PropagateLoader'\r\nimport DownloadOrderImagesModal from '../../components/b2b/DownloadOrderImagesModal';\r\n\r\ninterface countryCode {\r\n code: string,\r\n name: string,\r\n}\r\n\r\ninterface IshipToAddress {\r\n [id: string]: string\r\n}\r\n\r\ninterface State {\r\n selectedAddress: any | null\r\n salespersonNote: string\r\n externalDocumentNo: string\r\n shipToAddress?: IshipToAddress\r\n showNewShipTo: boolean\r\n countryCodes: countryCode[]\r\n defaultCountryCode: string\r\n orderIsProcessed: boolean,\r\n orderIsBeingProcessed: boolean,\r\n initialized: boolean\r\n editMode: boolean\r\n processedOrderId?: number\r\n showDownloadModal: boolean\r\n showDownload: boolean\r\n}\r\n \r\ninterface OwnProps {\r\n match?: {params: {orderId: number}},\r\n history?: any\r\n}\r\n \r\ninterface DispatchProps {\r\n getCustomerShippingAddresses: (customerId: number) => void\r\n setOrder: (orderId: number) => void\r\n clearShop: () => void\r\n getOpenOrders: () => void\r\n getDashboardOrderState: (orderId: number, should?: boolean) => void\r\n applyOrder: (orderId: number) => void\r\n}\r\n \r\ninterface StateProps {\r\n orderState: IOrderState\r\n userState: IUserSate\r\n}\r\n \r\ntype Props = StateProps & OwnProps & DispatchProps & RouteComponentProps\r\n\r\nexport class CheckoutContainer extends Component {\r\n state: State = {\r\n selectedAddress: null,\r\n salespersonNote: '',\r\n externalDocumentNo: '',\r\n showNewShipTo: false,\r\n countryCodes: [],\r\n defaultCountryCode: '',\r\n orderIsProcessed: false,\r\n initialized: false,\r\n orderIsBeingProcessed: false,\r\n editMode: false,\r\n showDownloadModal: false,\r\n showDownload: false,\r\n }\r\n\r\n async componentDidMount() {\r\n const paramOrderId = this.props.match && this.props.match.params.orderId ? this.props.match.params.orderId : null;\r\n let editMode = false;\r\n\r\n if (paramOrderId) {\r\n this.props.setOrder(+paramOrderId);\r\n }\r\n\r\n this.props.getOpenOrders();\r\n\r\n const response = await OrderApi.getCountryRegionCodes()\r\n\r\n this.setState({countryCodes: response.data})\r\n\r\n const { order } = this.props.orderState;\r\n let showDownload = false;\r\n\r\n if (order) {\r\n if (order.orderheader.navImportRef && !order.orderheader.orderIsFinal && !this.state.editMode) {\r\n editMode= true;\r\n }\r\n\r\n showDownload = this.showDownload();\r\n }\r\n \r\n this.setState({ editMode, showDownload }, () => {})\r\n }\r\n\r\n componentDidUpdate(prevProps: Props) {\r\n const { shippingAddresses } = this.props.orderState;\r\n const { order } = this.props.orderState;\r\n\r\n if (order && order !== prevProps.orderState.order) {\r\n const customerId = order.orderheader.sellToCustomerNo;\r\n this.props.getCustomerShippingAddresses(customerId);\r\n\r\n const salespersonNote = order.orderheader.salespersonNote;\r\n const externalDocumentNo = order.orderheader.externalDocumentNo;\r\n\r\n this.setState({ salespersonNote, externalDocumentNo })\r\n }\r\n\r\n if (order && shippingAddresses && shippingAddresses.length && shippingAddresses !== prevProps.orderState.shippingAddresses) {\r\n let selectedAddress = shippingAddresses[0];\r\n const orderSelectedAddressId = order.orderheader.shipToCode;\r\n\r\n if (orderSelectedAddressId) {\r\n const orderSelectedAddress = shippingAddresses.find(address => address.addressid === orderSelectedAddressId);\r\n\r\n if (orderSelectedAddress) {\r\n selectedAddress = orderSelectedAddress;\r\n }\r\n }\r\n this.setState({ selectedAddress, initialized: true })\r\n }\r\n\r\n if (this.props.userState.user && this.state.defaultCountryCode === '') {\r\n if (this.props.userState.user.customerData.CountryCode && this.props.userState.user.customerData.CountryCode !== '') {\r\n this.setState({ defaultCountryCode: this.props.userState.user.customerData.CountryCode})\r\n }\r\n }\r\n\r\n if (order) {\r\n if (order.orderheader.navImportRef && !order.orderheader.orderIsFinal && !this.state.editMode) {\r\n this.setState({ editMode: true }, () => {})\r\n }\r\n }\r\n\r\n if (prevProps.orderState.orderIsPending && !this.props.orderState.orderIsPending && !this.props.orderState.order) {\r\n this.setState({orderIsProcessed: true, orderIsBeingProcessed: false})\r\n }\r\n\r\n \r\n }\r\n\r\n onSelectAddress = (address: any) => {\r\n this.setState({ selectedAddress: address, showNewShipTo: false })\r\n }\r\n\r\n onSelectNewAddressOption = () => {\r\n this.setState({\r\n showNewShipTo: true,\r\n selectedAddress: null,\r\n })\r\n }\r\n\r\n showDownload = () => {\r\n let showDownload = this.props.userState.user &&\r\n (this.props.userState.user.customerData.CustomerId === '12025' || this.props.userState.user.customerData.CustomerId === '11608');\r\n\r\n if (this.props.orderState.order && this.props.orderState.order.isCurrentOrderType) {\r\n return this.props.orderState.order.orderheader.orderType === 'REORDER';\r\n }\r\n\r\n return showDownload;\r\n }\r\n\r\n renderShipping = () => {\r\n if (!this.props.orderState.shippingAddresses || !this.props.orderState.order) {\r\n return null;\r\n }\r\n\r\n return (\r\n
    \r\n {\r\n this.props.orderState.shippingAddresses.map((address, key) => {\r\n return (\r\n
    \r\n this.onSelectAddress(address)}\r\n />\r\n
    \r\n \r\n
    \r\n
    \r\n )\r\n })\r\n }\r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n )\r\n }\r\n\r\n handleOnSubmit = (event: any) => {\r\n event.preventDefault();\r\n\r\n const { order } = this.props.orderState;\r\n\r\n this.setState({\r\n orderIsProcessed: false,\r\n orderIsBeingProcessed: false,\r\n processedOrderId: order ? order.orderheader.appOrderId : 0,\r\n })\r\n\r\n const formData = new FormData(event.target);\r\n const multiAddress = formData.get('multiAddress')\r\n let selectedAddress = this.state.selectedAddress;\r\n\r\n if (multiAddress === '9999') {\r\n selectedAddress = this.getNewAddressValues(formData);\r\n selectedAddress['addressid'] = null;\r\n }\r\n\r\n this.setState({\r\n selectedAddress,\r\n orderIsBeingProcessed: true\r\n }, async () => {\r\n if (order) {\r\n let checkoutData = {};\r\n\r\n if (multiAddress === '9999' || order.orderheader.shipToCode !== this.state.selectedAddress.addressid) {\r\n checkoutData = { ...checkoutData, 'shipToAddress': selectedAddress};\r\n }\r\n\r\n if (order.orderheader.salespersonNote !== formData.get('salespersonNote')) {\r\n checkoutData = { ...checkoutData, 'salespersonNote': formData.get('salespersonNote')};\r\n }\r\n\r\n if (order.orderheader.externalDocumentNo !== formData.get('externalDocumentNo')) {\r\n let externalDocumentNo = formData.get('externalDocumentNo') as string;\r\n checkoutData = { ...checkoutData, 'externalDocumentNo': externalDocumentNo.substring(0, 20)};\r\n }\r\n\r\n checkoutData = { ...checkoutData, 'appOrderId': order.orderheader.appOrderId}\r\n\r\n localStorage.removeItem('order')\r\n\r\n window.addEventListener(\"popstate\", e => {\r\n // Nope, go back to start.\r\n this.props.history.push('/');\r\n });\r\n\r\n const response = await OrderApi.updateOrder(checkoutData);\r\n\r\n if (response) {\r\n // const applied = await OrderApi.applyOrder(order.orderheader.appOrderId);\r\n this.props.applyOrder(order.orderheader.appOrderId)\r\n }\r\n }\r\n })\r\n \r\n }\r\n\r\n getNewAddressValues = (formData: FormData): IshipToAddress => {\r\n const data: IshipToAddress = {};\r\n\r\n for (const entry of Array.from(formData.entries())) {\r\n const id: string = entry[0];\r\n const value: string = !(entry[1] instanceof File) ? entry[1]: '';\r\n\r\n if (id.includes('newAddress.')) {\r\n // var str1 = id;\r\n var pattern = \"newAddress.\";\r\n var newId = id.substr(pattern.length);\r\n data[newId] = value;\r\n }\r\n }\r\n\r\n return data;\r\n\r\n }\r\n\r\n onChangeValue = (event: any) => {\r\n const {name, value } = event.target;\r\n\r\n this.setState({\r\n ...this.state,\r\n [name]: value\r\n } as Pick)\r\n }\r\n\r\n toggleShowShipTo = () => {\r\n this.setState({showNewShipTo: !this.state.showNewShipTo})\r\n }\r\n\r\n renderShipToGroup = (preFill?: boolean) => {\r\n return (\r\n
    \r\n

    New shipping address

    \r\n

    \r\n \r\n Required fields\r\n \r\n

    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n

    \r\n \r\n Optional fields\r\n \r\n

    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n )\r\n }\r\n\r\n handleOrderClick = (orderId: number) => {\r\n this.props.history.push('/dashboard/' + orderId);\r\n this.props.getDashboardOrderState(orderId)\r\n }\r\n\r\n renderMoreOrders = () => {\r\n return (\r\n \r\n

    Please note, below orders are still open and has not been finalised!

    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n \r\n this.props.orderState.orders.map((order, key) => {\r\n return (\r\n this.handleOrderClick(order.appOrderId)}>\r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n
    Order#CustomerTypeOrder Comment
    B2B{order.appOrderId}\r\n {order.sellToCustomerNo}
    \r\n {order.sellToCustomerName}\r\n {order.sellToAddress}, {order.sellToCity}, {order.sellToCountry_RegionCode}\r\n
    \r\n {order.orderType}\r\n {\r\n order.navImportRef && !order.orderIsFinal ?\r\n \r\n Access to edit\r\n : null\r\n }\r\n {order.salespersonnote}
    \r\n
    \r\n
    \r\n )\r\n }\r\n\r\n handleOnClickDownloadImages = () => {\r\n this.setState({ showDownloadModal: true })\r\n }\r\n\r\n renderConfirm = () => (\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n Back to shop\r\n \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n

    Order { this.state.processedOrderId && this.state.processedOrderId} completed successfully!

    \r\n

    Check your email for details.

    \r\n {\r\n this.state.showDownload &&\r\n \r\n }\r\n {\r\n this.props.orderState.orders.length ? this.renderMoreOrders() : null\r\n }\r\n
    \r\n {this.state.processedOrderId && { this.setState({ showDownloadModal: false }) }}\r\n show={this.state.showDownloadModal}\r\n />}\r\n
    \r\n )\r\n\r\n renderCheckoutForm = () => {\r\n if (!this.state.initialized) {\r\n return
    \r\n }\r\n\r\n if (this.state.orderIsBeingProcessed) {\r\n return (\r\n
    \r\n

    Applying your order

    \r\n

    Please wait - it won't be long :-)

    \r\n \r\n
    \r\n )\r\n }\r\n\r\n return (\r\n <>\r\n
    \r\n {\r\n this.props.orderState.order ?\r\n (\r\n
    \r\n \r\n \r\n Back to dashboard\r\n \r\n
    \r\n ) : null\r\n }\r\n
    \r\n
    \r\n

    \r\n Last step\r\n

    \r\n

    We're almost there!

    \r\n
    \r\n
    \r\n {\r\n this.props.orderState.shippingAddresses &&\r\n this.props.orderState.shippingAddresses.length ?\r\n <>\r\n
    \r\n

    Shipping address

    \r\n
    \r\n { this.props.orderState.shippingAddresses && this.renderShipping() }\r\n
    \r\n
    \r\n \r\n \r\n {state => (\r\n this.state.showNewShipTo &&\r\n
    \r\n { this.renderShipToGroup() }\r\n
    \r\n )}\r\n
    \r\n : null\r\n }\r\n\r\n
    \r\n

    Order information

    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n )\r\n }\r\n\r\n render() {\r\n if (this.state.orderIsProcessed) {\r\n return (\r\n this.renderConfirm()\r\n )\r\n }\r\n\r\n return (\r\n
    \r\n {this.renderCheckoutForm()}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (states: RootState, ownProps: OwnProps): StateProps => {\r\n return {\r\n orderState: states.order.order,\r\n userState: states.user.user,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: ThunkDispatch<{}, {}, any>, ownProps: OwnProps): DispatchProps => {\r\n return {\r\n getCustomerShippingAddresses: async (customerId: number) => {\r\n await dispatch(getCustomerShippingAddresses(customerId))\r\n console.log('getCustomerShippingAddresses completed [UI]')\r\n },\r\n setOrder: async (orderId: number) => {\r\n await dispatch(setOrder(orderId))\r\n console.log('setOrder completed [UI]')\r\n },\r\n clearShop: async () => {\r\n await dispatch(clearShop())\r\n },\r\n getOpenOrders: async () => {\r\n await dispatch(getOpenOrders())\r\n },\r\n getDashboardOrderState: async (orderId: number, should?: boolean) => {\r\n await dispatch(getDashboardOrderState(orderId, should))\r\n },\r\n applyOrder: async (orderId: number) => {\r\n await dispatch(applyOrder(orderId))\r\n }\r\n }\r\n}\r\n\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(CheckoutContainer)) ","import React, { Component } from 'react'\r\n\r\n// Third party.\r\nimport moment from 'moment';\r\n\r\n// Components.\r\nimport Modal from '../../layout/Modal/Modal';\r\nimport { Calendar } from 'molo-shared';\r\n\r\n// API.\r\nimport OrderApi from '../../../store/order/OrderApi';\r\n\r\n// Models.\r\nimport Order from '../../../models/Order';\r\n\r\ninterface State {\r\n deliveryWindows: any[],\r\n showDeliveryModal: boolean\r\n currentDrop?: any,\r\n}\r\n \r\ninterface OwnProps {\r\n currentDrop: any,\r\n order: Order,\r\n deliveryChanged?: Function,\r\n showDeliveryModal: boolean,\r\n hide: Function\r\n}\r\n \r\ninterface DispatchProps {\r\n}\r\n \r\ninterface StateProps {}\r\n \r\ntype Props = StateProps & OwnProps & DispatchProps;\r\n\r\nexport class MoveDropModal extends Component {\r\n state: State = {\r\n deliveryWindows: [],\r\n showDeliveryModal: false,\r\n }\r\n\r\n componentDidMount() {\r\n const { currentDrop } = this.props;\r\n this.setState({ currentDrop })\r\n }\r\n\r\n onSelectSlot = (slot: any) => {\r\n const event = { ...this.state.currentDrop };\r\n\r\n event.start = slot;\r\n event.end = slot;\r\n\r\n this.setState({ currentDrop: event })\r\n }\r\n\r\n moveDrop = async () => {\r\n const { order, deliveryChanged } = this.props;\r\n const { currentDrop } = this.state;\r\n\r\n if (currentDrop && order) {\r\n const orderId = order.orderheader.appOrderId;\r\n const deliveryCode = currentDrop.resource.deliveryCode;\r\n const newDate = moment(currentDrop.start).format('YYYY-MM-DD');\r\n\r\n await OrderApi.moveOrderDelivery(\r\n orderId,\r\n deliveryCode,\r\n newDate\r\n );\r\n\r\n if (deliveryChanged) {\r\n deliveryChanged()\r\n }\r\n }\r\n }\r\n\r\n renderBody = (currentDrop: any) => {\r\n return (\r\n
    \r\n \r\n
    \r\n )\r\n }\r\n\r\n render() {\r\n const { showDeliveryModal } = this.props;\r\n const { currentDrop } = this.state;\r\n\r\n if (!currentDrop) {\r\n return null;\r\n }\r\n\r\n return (\r\n Move drop}\r\n size={'lg'}\r\n isShowing={showDeliveryModal}\r\n hide={() => this.props.hide()}\r\n children={this.renderBody(currentDrop)}\r\n footer={()}\r\n />\r\n )\r\n }\r\n}\r\n\r\nexport default MoveDropModal;","import React, { Component } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { ThunkDispatch } from 'redux-thunk'\r\nimport {RouteComponentProps, withRouter} from \"react-router-dom\";\r\n\r\n// Components.\r\nimport DeliveryWindows from './DeliveryWindows';\r\nimport StyleCarousel from './StyleCarousel';\r\nimport OrderSummary from './OrderSummary';\r\nimport MoveDropModal from './MoveDropModal';\r\nimport ChartSummaryHighcharts from './ChartSummaryHighcharts';\r\nimport Details from './Details';\r\nimport DashboardFilterComponent from '../DashboardFilterComponent';\r\nimport { DashboardFilterHelper } from '../../../utils/DashboardFilterHelper';\r\nimport MoloRingloader from '../../layout/MoloRingloader';\r\n\r\n// Store.\r\nimport { RootState } from '../../../store';\r\nimport { IOrderState } from '../../../store/order/orderStore';\r\nimport { IUserSate } from '../../../store/user/reducers';\r\nimport {\r\n getOrder,\r\n applyChanges,\r\n applyChangesFromDashboard,\r\n getDashboardOrderState,\r\n setOrder,\r\n addClosedOrderToRecentAction,\r\n resetDashboard,\r\n setUserHasConfirmed\r\n} from '../../../store/order/actions';\r\nimport { ICollectionState } from '../../../store/collections/reducers';\r\nimport { getCollectionMasters } from '../../../store/collections/actions'\r\nimport { IFilterState } from '../../../store/session/reducers';\r\nimport { resetFilter, applyFilter } from '../../../store/session/actions';\r\nimport { setAlert } from '../../../store/alert/actions';\r\n\r\n// Models.\r\nimport { orderLine } from '../../../models/Order';\r\nimport { Filter } from '../../../models/Filter';\r\nimport { basketLine } from '../../../models/Basket';\r\nimport Style, { createStyle } from 'molo-shared/lib/models/Style';\r\n \r\n// Utils.\r\nimport * as helper from './DashboardHelper';\r\nimport queryString from 'query-string'\r\nimport {\r\n tcategories,\r\n IDivider,\r\n IGrouping,\r\n DIVIDERS\r\n} from './dashboard.d';\r\nimport { uniq, cloneDeep } from 'lodash';\r\nimport ProductApi from '../../../store/products/ProductApi';\r\nimport OrderApi from '../../../store/order/OrderApi';\r\nimport { ReactComponent as FilterIcon } from '../../../images/svg/filter_icon_black.svg';\r\nimport { appConfig } from '../../../config';\r\nimport { FaCaretLeft } from 'react-icons/fa';\r\nimport { mapMoloItems, IgroupedItems } from '../../../models/MoloItem';\r\n\r\nconst baseUrl = appConfig.media.baseUrl;\r\n\r\ninterface ISize {\r\n sizename: string,\r\n quantity: number\r\n}\r\n\r\ninterface ISustainabilityMap {\r\n [id: string]: string | null | undefined\r\n}\r\n\r\ninterface ISizes {\r\n [id: string]: ISize[],\r\n}\r\n\r\ninterface IGroupedOrderLine {\r\n [id: string]: any,\r\n}\r\n\r\ninterface IMasters {\r\n [id: string]: Style,\r\n}\r\n\r\ninterface IRRPMap {\r\n [id: string]: number[]\r\n}\r\n\r\ninterface State {\r\n productSortedByCategory: IGrouping,\r\n selectedCategory: tcategories,\r\n data: any[],\r\n salesOptionsTotal: number,\r\n slides: string[],\r\n deliveryWindows: any[],\r\n showDeliveryModal: boolean\r\n currentDrop?: any,\r\n basketIsEmpty: boolean,\r\n step: string,\r\n filteredOrderLines: orderLine[],\r\n filterInitialized: boolean\r\n dashboardLoading: boolean\r\n initialized: boolean,\r\n sizes: ISizes,\r\n groupedOrderlines: orderLine[],\r\n masters: IMasters,\r\n loadingMasters: boolean\r\n groupedMoloItems: {[id: string]: any[]}\r\n showFilter: boolean\r\n hideGoBack?: boolean\r\n rrpMap: IRRPMap\r\n allSizes: ISizes\r\n}\r\n \r\ninterface OwnProps {\r\n location?: any,\r\n match?: {params: {orderId: number}},\r\n history: any\r\n\r\n}\r\n \r\ninterface DispatchProps {\r\n getOrder: (orderId: number) => void\r\n resetFilter: (filter: Filter) => void\r\n applyFilter: (filter: Filter) => void\r\n applyChanges: (orderId: number, changes: basketLine) => void\r\n applyChangesFromDashboard: (orderId: number, changes: basketLine) => void\r\n getDashboardOrderState: (orderId: number) => void\r\n setOrder: (orderId: number) => void\r\n getCollectionMasters: (orderType: string, collectionName: string, currencyCode: string, pricegroup: string) => void\r\n setAlert: (message: string, type: string) => void\r\n addClosedOrderToRecent: (order: any) => void\r\n resetDashboard: () => void\r\n setUserHasConfirmed: (confirmed: boolean) => void\r\n}\r\n \r\ninterface StateProps {\r\n orderState: IOrderState\r\n userState: IUserSate\r\n collectionState: ICollectionState\r\n filterState: IFilterState\r\n}\r\n\r\ninterface chartData {\r\n name: string,\r\n y: number,\r\n}\r\n \r\ntype Props = StateProps & OwnProps & DispatchProps & RouteComponentProps;\r\n\r\nexport class Dashboard extends Component {\r\n private data: chartData[] = [];\r\n\r\n state: State = {\r\n productSortedByCategory: {},\r\n selectedCategory: 'categories',\r\n data: [],\r\n salesOptionsTotal: 0,\r\n slides: [],\r\n deliveryWindows: [],\r\n showDeliveryModal: false,\r\n basketIsEmpty: false,\r\n step: 'dashboard',\r\n filteredOrderLines: [],\r\n filterInitialized: false,\r\n dashboardLoading: true,\r\n initialized: false,\r\n sizes: {},\r\n groupedOrderlines: [],\r\n masters: {},\r\n loadingMasters: false,\r\n groupedMoloItems: {},\r\n showFilter: false,\r\n rrpMap: {},\r\n allSizes: {},\r\n } \r\n \r\n readonly dividers: IDivider[] = DIVIDERS;\r\n\r\n componentDidMount() {\r\n const query = this.props.location && this.props.location.search ? queryString.parse(this.props.location.search) : null;\r\n\r\n if (query && query.step === 'details') {\r\n this.setState({ step: 'details'})\r\n }\r\n\r\n if (query && query.origin === 'shop') {\r\n // Reset filter.\r\n if (this.props.filterState.filter) {\r\n this.props.resetFilter(this.props.filterState.filter);\r\n }\r\n this.setState({ hideGoBack: true})\r\n }\r\n \r\n const paramOrderId = this.props.match && this.props.match.params.orderId ? this.props.match.params.orderId : null;\r\n\r\n if (this.props.orderState.dashboardOrder && !this.props.orderState.isDashboardFetching &&\r\n this.props.orderState.dashboardOrder.orderheader.appOrderId !== paramOrderId) {\r\n \r\n if (paramOrderId) {\r\n this.props.getDashboardOrderState(paramOrderId);\r\n }\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps: Props, prevState: State) {\r\n let shouldUpdateOrderlines: boolean = false;\r\n let shouldInitDasboard: boolean = false;\r\n\r\n const filterHasChanged = prevProps.filterState.filter !== this.props.filterState.filter;\r\n\r\n if (!this.props.orderState.dashboardOrder && !this.props.orderState.isDashboardFetching) {\r\n const paramOrderId = this.props.match && this.props.match.params.orderId ? this.props.match.params.orderId : null;\r\n if (paramOrderId) {\r\n setTimeout(() => this.props.getDashboardOrderState(paramOrderId), 100)\r\n }\r\n }\r\n\r\n if (this.props.orderState.dashboardOrder && prevProps.orderState.dashboardOrder\r\n && this.props.orderState.dashboardOrder.orderLines !== prevProps.orderState.dashboardOrder.orderLines) {\r\n shouldUpdateOrderlines = true\r\n }\r\n\r\n if (!this.state.initialized && this.props.orderState.dashboardOrder && this.props.filterState.filter) {\r\n shouldUpdateOrderlines = true\r\n }\r\n\r\n if (prevProps.orderState.dashboardOrder !== this.props.orderState.dashboardOrder) {\r\n if (prevProps.orderState.dashboardOrder && this.props.orderState.dashboardOrder &&\r\n prevProps.orderState.dashboardOrder.orderheader.appOrderId !== this.props.orderState.dashboardOrder.orderheader.appOrderId) {\r\n shouldInitDasboard = true;\r\n this.setState({ loadingMasters: true }, () => {\r\n this.getMoloItems()\r\n })\r\n } else if (!prevProps.orderState.dashboardOrder && this.props.orderState.dashboardOrder) {\r\n this.setState({ loadingMasters: true }, () => {\r\n this.getMoloItems()\r\n })\r\n }\r\n }\r\n\r\n if (filterHasChanged) {\r\n shouldUpdateOrderlines = true\r\n }\r\n\r\n if (shouldUpdateOrderlines && this.props.filterState.filter && this.props.orderState.dashboardOrder) {\r\n const filteredOrderLines = DashboardFilterHelper.resultByFilter(\r\n this.props.filterState.filter,\r\n this.props.orderState.dashboardOrder.orderLines,\r\n );\r\n this.setState({ filteredOrderLines, filterInitialized: true }, () => {\r\n this.initDashboard()\r\n });\r\n }\r\n\r\n const query = this.props.location && this.props.location.search ? queryString.parse(this.props.location.search) : null;\r\n let step = query && query.step as string;\r\n\r\n if (step && step === 'reset') {\r\n this.props.orderState.dashboardOrder && this.props.history.push('/dashboard/' + this.props.orderState.dashboardOrder.orderheader.appOrderId)\r\n this.setState({ step: 'dashboard'})\r\n }\r\n\r\n if (shouldInitDasboard) {\r\n this.initDashboard()\r\n }\r\n }\r\n\r\n componentWillUnmount = () => {\r\n this.props.resetDashboard();\r\n }\r\n\r\n initDashboard() {\r\n const order = this.props.orderState.dashboardOrder;\r\n if (order) {\r\n if (!order.orderLines.length) {\r\n this.setState({\r\n basketIsEmpty: true,\r\n initialized: true,\r\n dashboardLoading: false\r\n })\r\n } else {\r\n const groupedOrderlines = this.groupSimilarColors(cloneDeep(this.state.filteredOrderLines));\r\n const productSortedByCategory = helper.getProductCategories(order.orderLines, this.dividers);\r\n const slides = uniq(order.orderLines.map(\r\n line => baseUrl + 'media/productimage/' + line.seasoncode + '/' + line.masterid + '/' + line.colorcode + '/small')\r\n );\r\n\r\n this.setState({\r\n productSortedByCategory,\r\n slides,\r\n basketIsEmpty: false,\r\n initialized: true,\r\n dashboardLoading: false,\r\n groupedOrderlines,\r\n \r\n });\r\n this.reMapAllsizes(groupedOrderlines)\r\n }\r\n }\r\n }\r\n\r\n getMoloItems = async () => {\r\n if (this.props.orderState.dashboardOrder) {\r\n const response = await OrderApi.GetMoloItemsOnOrder(this.props.orderState.dashboardOrder.orderheader.appOrderId)\r\n\r\n if (response) {\r\n const moloItems: {[id: string]: any[]} = {};\r\n\r\n for (const key in response.data) {\r\n const item = response.data[key];\r\n if (!moloItems[item.masterno + item.colorcode]) {\r\n moloItems[item.masterno + item.colorcode] = [];\r\n }\r\n\r\n moloItems[item.masterno + item.colorcode].push(item)\r\n }\r\n\r\n this.setState({ loadingMasters: false, groupedMoloItems: moloItems }, () => {\r\n this.mapAllMoloItems(moloItems)\r\n })\r\n }\r\n }\r\n }\r\n\r\n getMasters = async (orderLines: orderLine[]) => {\r\n let mastersRequest: {master: string, color: string, currencyCode: string}[] = [];\r\n\r\n for (const line of orderLines) {\r\n if (!this.state.masters[line.masterid + line.colorcode]) {\r\n mastersRequest.push({\r\n master: line.masterid,\r\n color: line.colorcode,\r\n currencyCode: 'EUR'\r\n })\r\n }\r\n }\r\n\r\n const masterResponse = await ProductApi.getMasters(mastersRequest)\r\n let masters: IMasters = {};\r\n\r\n for (const response of masterResponse) {\r\n const style: Style = createStyle(response.data);\r\n masters[style.masterId + style.colorCode] = style;\r\n }\r\n \r\n this.setState({ masters, loadingMasters: false }) \r\n }\r\n\r\n groupSimilarColors(orderLines: orderLine[]) {\r\n const grouped: IGroupedOrderLine = {}\r\n const sizes: ISizes = {};\r\n \r\n for (const i in orderLines) {\r\n const orderline = orderLines[i];\r\n const masterid = orderline.masterid;\r\n const colorcode = orderline.colorcode;\r\n\r\n if (grouped[masterid + colorcode]) {\r\n const q = +grouped[masterid + colorcode].quantity + +orderline.quantity;\r\n grouped[masterid + colorcode].quantity = q;\r\n grouped[masterid + colorcode]['orderLines'].push({...orderline})\r\n } else {\r\n grouped[masterid + colorcode] = orderline\r\n grouped[masterid + colorcode]['orderLines'] = [{...orderline}]\r\n }\r\n \r\n if (!sizes[masterid + colorcode]) {\r\n sizes[masterid + colorcode] = [];\r\n }\r\n \r\n sizes[masterid + colorcode].push({ sizename: orderline.sizename, quantity: orderline.quantity });\r\n }\r\n\r\n this.setState({ sizes })\r\n\r\n let g: orderLine[] = []\r\n\r\n for (const key in grouped) {\r\n let line = grouped[key];\r\n let q = 0;\r\n\r\n for (const delta in line['orderLines']) {\r\n q = q + line['orderLines'][delta].quantity;\r\n }\r\n\r\n line.quantity = q;\r\n\r\n g.push(line);\r\n }\r\n\r\n const sorted = g.sort((a, b) => (a.masterid > b.masterid) ? 1 : -1)\r\n\r\n return sorted;\r\n }\r\n\r\n getSustainability = (item: any) => {\r\n if (item.gots !== '') return 'GOTS';\r\n\r\n if (item.oekoTex !== '') return 'OEKOTEX';\r\n\r\n if (item.recycled) return 'RECYCLED';\r\n \r\n if (item.organic) return 'ORGANIC';\r\n if (item.grsno) return 'GRS';\r\n if(item.ecovero) return 'ECOVERO';\r\n\r\n return null;\r\n }\r\n\r\n reMapAllsizes = (groupedOrderlines: IGroupedOrderLine) => {\r\n let allSizes = cloneDeep(this.state.allSizes);\r\n\r\n for (const key in allSizes){ \r\n var theArr = allSizes[key];\r\n for(var zidex = 0;zidex < theArr.length;zidex++) {\r\n theArr[zidex].quantity = 0;\r\n }\r\n }\r\n\r\n for (const i in groupedOrderlines) {\r\n const group = groupedOrderlines[i];\r\n const key = group.masterid + group.colorcode\r\n\r\n let found = allSizes[key]\r\n const orderLinesToUpdate = group.orderLines;\r\n\r\n if (found) {\r\n for (const delta in orderLinesToUpdate) {\r\n // Set the new quantity.\r\n let sizeToUpdate = found.find(item => item.sizename === orderLinesToUpdate[delta].sizename)\r\n if (sizeToUpdate) {\r\n sizeToUpdate.quantity = orderLinesToUpdate[delta].quantity;\r\n }\r\n }\r\n }\r\n }\r\n this.setState({ allSizes })\r\n }\r\n\r\n mapAllMoloItems = (moloItems: IgroupedItems) => {\r\n let rrpMap: IRRPMap = {};\r\n let allSizes: ISizes = {};\r\n\r\n for (const key in moloItems) {\r\n const items = mapMoloItems(moloItems[key]);\r\n rrpMap[items[0].masterId + items[0].colorCode] = uniq(items.map((item: any) => item.msrp));\r\n \r\n if (!allSizes[items[0].masterId + items[0].colorCode]) {\r\n allSizes[items[0].masterId + items[0].colorCode] = [];\r\n }\r\n \r\n for (const i in items) {\r\n const item = items[i];\r\n\r\n let quantity = 0;\r\n\r\n if (this.state.sizes[items[0].masterId + items[0].colorCode]) {\r\n const found = this.state.sizes[item.masterId + item.colorCode].find((i: ISize) => {\r\n return i.sizename === item.sizeName;\r\n })\r\n\r\n if (!!found) {\r\n quantity = found.quantity;\r\n }\r\n }\r\n\r\n allSizes[item.masterId + item.colorCode].push({ sizename: item.sizeName, quantity });\r\n }\r\n }\r\n\r\n this.setState({ rrpMap, allSizes })\r\n }\r\n\r\n onChangeCategory = (selectedCategory: tcategories) => {\r\n this.setState({ selectedCategory })\r\n }\r\n\r\n onClickDrop = (drop: any) => {\r\n const order = this.props.orderState.dashboardOrder;\r\n\r\n\r\n\r\n if (order && order.orderheader.orderState === 0 && order.orderheader.orderState !== 1) {\r\n const event = {\r\n id: 0,\r\n title: drop.deliveryCode,\r\n start: drop.shippingDate,\r\n end: drop.shippingDate,\r\n allDay: true,\r\n resource: drop,\r\n }\r\n \r\n this.setState({ showDeliveryModal: true, currentDrop: event })\r\n }\r\n }\r\n\r\n dropMoved = async () => {\r\n const { order } = this.props.orderState;\r\n\r\n if (order) {\r\n if (this.props.orderState.dashboardOrder) {\r\n this.props.getDashboardOrderState(this.props.orderState.dashboardOrder.orderheader.appOrderId)\r\n }\r\n\r\n this.props.setAlert('Drop moved!', 'success')\r\n \r\n this.setState({ showDeliveryModal: false, currentDrop: null })\r\n }\r\n }\r\n\r\n onClickDelete = (line: orderLine) => {\r\n const order = this.props.orderState.dashboardOrder;\r\n\r\n if (!order) return;\r\n\r\n const sizesToRemove = order.orderLines.filter(function(l) {\r\n return line.masterid === l.masterid && line.colorcode === l.colorcode;\r\n })\r\n\r\n const changes: basketLine = {};\r\n\r\n for (const size of sizesToRemove) {\r\n changes[size.itemId] = 0;\r\n }\r\n\r\n this.props.applyChangesFromDashboard(order.orderheader.appOrderId, changes);\r\n }\r\n\r\n onClickFilterGroup = (selectedCategory: string, item: any) => {\r\n if (!this.props.filterState.filter) return;\r\n\r\n let type = '';\r\n\r\n switch(selectedCategory) {\r\n case 'deliverywindows':\r\n type = 'deliveryWindows';\r\n break;\r\n case 'groups':\r\n type = 'productGroups';\r\n break;\r\n case 'categories':\r\n type = 'productCategories';\r\n break;\r\n case 'collection':\r\n type = 'topCollections';\r\n break;\r\n default:\r\n type = selectedCategory;\r\n break;\r\n }\r\n\r\n const changedFilter = DashboardFilterHelper.changeActiveFilters({ ...this.props.filterState.filter }, type, item.value, true);\r\n this.props.applyFilter(changedFilter);\r\n \r\n this.setState({step: 'details'})\r\n }\r\n\r\n goBack = () => {\r\n if (this.props.filterState.filter) {\r\n this.props.resetFilter(this.props.filterState.filter)\r\n }\r\n this.props.orderState.dashboardOrder && this.props.history.push('/dashboard/' + this.props.orderState.dashboardOrder.orderheader.appOrderId)\r\n this.setState({step: 'dashboard'})\r\n }\r\n\r\n render() {\r\n const order = this.props.orderState.dashboardOrder;\r\n\r\n const { showDeliveryModal, currentDrop, slides, data, productSortedByCategory } = this.state;\r\n\r\n // if (this.props.orderState.isFetching) {\r\n // return
    \r\n // }\r\n\r\n if (!this.props.orderState.isFetching && this.props.orderState.orderNotFound) {\r\n return (\r\n
    \r\n

    Order is probably shipped!

    \r\n

    Click continue shopping to go back

    \r\n
    \r\n )\r\n }\r\n\r\n if (this.state.basketIsEmpty) {\r\n return (\r\n
    \r\n

    Basket is empty!

    \r\n

    Click continue shopping to add items to basket.

    \r\n
    \r\n )\r\n }\r\n\r\n return (\r\n <>\r\n {\r\n this.props.orderState.isFetching && !this.state.initialized ?
    : null\r\n }\r\n
    \r\n
    \r\n
    \r\n {\r\n order &&\r\n }\r\n
    \r\n
    \r\n {\r\n order && Object.keys(productSortedByCategory).length &&\r\n \r\n }\r\n
    \r\n
    this.setState({step: 'details'})\r\n }>\r\n
    \r\n \r\n

    VIEW YOUR BASKET

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n {this.props.orderState.dashboardOrder\r\n && this.props.orderState.dashboardOrder.orderheader.navImportRef\r\n && this.props.orderState.dashboardOrder.orderheader.orderState !== 0\r\n ? 'Shipping dates' : 'Change shipping dates'}\r\n
    \r\n {this.props.orderState.dashboardDeliveryWindows.length &&\r\n }\r\n
    \r\n
    \r\n
    \r\n {\r\n this.state.currentDrop && order &&\r\n this.setState({showDeliveryModal: false, currentDrop: null})}\r\n order={order}\r\n currentDrop={currentDrop}\r\n showDeliveryModal={showDeliveryModal}\r\n deliveryChanged={this.dropMoved}\r\n />\r\n }\r\n {order &&\r\n
    \r\n this.setState({showFilter: !this.state.showFilter})}\r\n >\r\n \r\n \r\n \r\n
    \r\n
    {\r\n this.props.orderState.dashboardOrder && this.props.history.push('/dashboard/' + this.props.orderState.dashboardOrder.orderheader.appOrderId)\r\n this.setState({ step: 'dashboard' })\r\n }}>\r\n \r\n
    \r\n \r\n this.setState({showFilter: false })}\r\n hideGoBack={this.state.hideGoBack}\r\n />\r\n }\r\n \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (states: RootState, ownProps: OwnProps): StateProps => {\r\n return {\r\n orderState: states.order.order,\r\n userState: states.user.user,\r\n collectionState: states.collections.collections,\r\n filterState: states.session.filter\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: ThunkDispatch<{}, {}, any>, ownProps: OwnProps): DispatchProps => {\r\n return {\r\n getOrder: async (orderId: number) => {\r\n await dispatch(getOrder(orderId));\r\n },\r\n resetFilter: async (filter: Filter) => {\r\n await dispatch(resetFilter(filter));\r\n },\r\n applyFilter: async (filter: Filter) => {\r\n await dispatch(applyFilter(filter));\r\n },\r\n applyChanges: async (orderId: number, changes: basketLine) => {\r\n await dispatch(applyChanges(orderId, changes))\r\n },\r\n applyChangesFromDashboard: async (orderId: number, changes: basketLine) => {\r\n await dispatch(applyChangesFromDashboard(orderId, changes))\r\n },\r\n getDashboardOrderState: async (orderId: number) => {\r\n await dispatch(getDashboardOrderState(orderId))\r\n },\r\n setOrder: async (orderId: number) => {\r\n await dispatch(setOrder(orderId))\r\n },\r\n getCollectionMasters: async (orderType: string, collectionName: string, currencyCode: string, pricegroup: string) => {\r\n await dispatch(getCollectionMasters(orderType, collectionName, currencyCode, pricegroup))\r\n },\r\n setAlert: async (message: string, type: string) => {\r\n await dispatch(setAlert(message, type))\r\n },\r\n addClosedOrderToRecent: async (order: any) => {\r\n await dispatch(addClosedOrderToRecentAction(order))\r\n },\r\n resetDashboard: async () => {\r\n await dispatch(resetDashboard())\r\n },\r\n setUserHasConfirmed: async (confirmed: boolean) => {\r\n await dispatch(setUserHasConfirmed(confirmed))\r\n },\r\n }\r\n}\r\n\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(Dashboard))","import React, { Component } from 'react'\r\nimport { ThunkDispatch } from 'redux-thunk'\r\nimport { RootState } from '../../store';\r\nimport { connect } from 'react-redux'\r\n\r\n// Api.\r\nimport ProductApi from '../../store/products/ProductApi';\r\nimport ProductList from '../../components/shared/ProductList';\r\n// import { ProductList } from 'molo-shared';\r\nimport { CollectionApi } from '../../store/collections/actions';\r\nimport BounceLoader from 'react-spinners/BounceLoader';\r\n\r\n// Models.\r\nimport Style from 'molo-shared/lib/models/Style';\r\n\r\n// Store.\r\nimport { mapStyles } from 'molo-shared/lib/models/Style';\r\nimport { IUserSate } from '../../store/user/reducers';\r\nimport { IOrderState } from '../../store/order/orderStore';\r\n\r\n// Utils.\r\nimport MoloRingloader from '../../components/layout/MoloRingloader';\r\nimport queryString from 'query-string'\r\nimport { uniqBy } from 'lodash'\r\nimport { OrderType } from '../../models/OrderType';\r\nimport {\r\n FaChevronLeft,\r\n} from 'react-icons/fa';\r\n\r\ninterface State {\r\n styles: Style[]\r\n suggestions: Style[]\r\n loaded: boolean\r\n noResult: boolean\r\n lineDiscount: number\r\n orderTypes: OrderType[]\r\n prevPage: string\r\n}\r\n \r\ninterface OwnProps {\r\n location?: {search: string}\r\n match?: {params: {query: string}},\r\n history?: any\r\n}\r\n \r\ninterface DispatchProps {\r\n}\r\n \r\ninterface StateProps {\r\n userState: IUserSate,\r\n orderState: IOrderState\r\n}\r\n \r\ntype Props = StateProps & OwnProps & DispatchProps;\r\n\r\nexport class SearchPage extends Component {\r\n\r\n ref = React.createRef();\r\n\r\n state: State = {\r\n styles: [],\r\n suggestions: [],\r\n loaded: false,\r\n noResult: false,\r\n lineDiscount: 0,\r\n orderTypes: [],\r\n prevPage: '',\r\n }\r\n\r\n async componentDidMount() {\r\n const response = await ProductApi.getOrderTypes()\r\n\r\n if (response) {\r\n this.setState({ orderTypes: response.data }, () => {\r\n this.doSearch();\r\n })\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps: Props, prevState: State) {\r\n const { location } = this.props;\r\n \r\n if (location !== prevProps.location) {\r\n this.setState({ loaded: false, styles: [], suggestions: [] }, () => {\r\n this.doSearch();\r\n })\r\n }\r\n }\r\n\r\n doSearch = async () => {\r\n let result: Style[] = [];\r\n let suggestions: Style[] = [];\r\n let suggestion = '';\r\n let query = '';\r\n const currencyCode = this.props.userState.user ? this.props.userState.user.currencyCode : 'EUR';\r\n const pricegroup = this.props.userState.user ? this.props.userState.user.customerData.pricegroup : 'ALL';\r\n const lineDiscount = this.props.userState.user ? this.props.userState.user.customerData.linediscount : 0;\r\n const searchQuery = this.props.location && this.props.location.search ? queryString.parse(this.props.location.search) : '';\r\n // const userAllowOrderTypes = this.props.userState.user && this.props.userState.user.allowOrderTypes ? this.props.userState.user.allowOrderTypes : [];\r\n const disallowedTypes = this.props.userState.user && this.props.userState.user.disallowedTypes ? this.props.userState.user.disallowedTypes : []; \r\n // const allowOrderTypes: string[] = userAllowOrderTypes.map((type: any) => type.OrderType)\r\n const allowedTypes = this.state.orderTypes\r\n .filter(type => disallowedTypes.indexOf(type.type.toLowerCase()) === -1)\r\n .map(type => type.orderType)\r\n\r\n if (searchQuery && searchQuery.collection && searchQuery.color) {\r\n const collection = searchQuery.collection && typeof searchQuery.collection === 'string' ? searchQuery.collection : '';\r\n const color = searchQuery.color && typeof searchQuery.color === 'string' ? searchQuery.color : '';\r\n const orderType = searchQuery.orderType && typeof searchQuery.orderType === 'string' ? searchQuery.orderType : '';\r\n const response = await CollectionApi.getCollectionMasters(orderType, collection, currencyCode, pricegroup);\r\n \r\n result = mapStyles(response.data);\r\n\r\n if (color !== '') {\r\n result = result.filter(item => +item.colorCode === +color);\r\n }\r\n\r\n result = result.filter(style => allowedTypes.indexOf(style.orderType) !== -1)\r\n\r\n this.setState({styles: result, loaded: true, noResult: !result.length, lineDiscount})\r\n } else if (this.props.match && this.props.match.params.query) {\r\n \r\n query = this.props.match.params.query;\r\n\r\n const searchQuery = this.props.location && this.props.location.search ? queryString.parse(this.props.location.search) : '';\r\n\r\n if (searchQuery && searchQuery.suggestion) {\r\n suggestion = searchQuery.suggestion && typeof searchQuery.suggestion === 'string' ? searchQuery.suggestion : '';\r\n const splitted = suggestion.split(' - ');\r\n\r\n \r\n\r\n \r\n\r\n if (splitted.length > 1) {\r\n query = splitted[0].toLowerCase().includes(query) ?\r\n splitted[0].split(' ')[0].trim().toLowerCase() : splitted[1].split(' ')[0].trim().toLowerCase();\r\n }\r\n\r\n ProductApi.search(suggestion, currencyCode).then(response => {\r\n if (response) {\r\n suggestions = uniqBy(mapStyles(response), 'masterColor');\r\n result = uniqBy(mapStyles(response), 'masterColor');\r\n result = result.filter(style => allowedTypes.indexOf(style.orderType) !== -1)\r\n \r\n // Sort by relevance.\r\n const sorted: Style[] = suggestions.sort((a: Style, b: Style) => {\r\n // Sort results by matching name with keyword position in name\r\n const aCompare = a.description + ' ' + a.colorName;\r\n const bCompare = b.description + ' ' + b.colorName;\r\n\r\n if(aCompare.toLowerCase().indexOf(suggestion.toLowerCase()) > bCompare.toLowerCase().indexOf(suggestion.toLowerCase())) {\r\n return 1;\r\n } else if (aCompare.toLowerCase().indexOf(suggestion.toLowerCase()) < bCompare.toLowerCase().indexOf(suggestion.toLowerCase())) {\r\n return -1;\r\n } else {\r\n if(aCompare > bCompare)\r\n return 1;\r\n else\r\n return -1;\r\n }\r\n });\r\n\r\n this.setState({ suggestions: sorted, noResult: !result.length },() => {\r\n setTimeout( async () => {\r\n this.formatAllStringsWithRelevance(suggestion);\r\n\r\n this.setState({styles: result, loaded: true, lineDiscount}, () => {\r\n setTimeout(() => {\r\n this.formatAllStringsWithRelevance(query);\r\n })\r\n })\r\n })\r\n })\r\n }\r\n })\r\n } else {\r\n this.setState({ noResult: false },async () => {\r\n const search = await ProductApi.search(query, currencyCode);\r\n\r\n if (search) {\r\n result = uniqBy(mapStyles(search), 'masterColor');\r\n result = result.filter(style => allowedTypes.indexOf(style.orderType) !== -1)\r\n\r\n \r\n\r\n result = result.filter((style: Style) => {\r\n return !suggestions.find((suggestion: Style) => suggestion.colorCode === style.colorCode && suggestion.masterId === style.masterId)\r\n })\r\n }\r\n\r\n this.setState({styles: result, loaded: true, noResult: !result.length, lineDiscount}, () => {\r\n setTimeout(() => {\r\n this.formatAllStringsWithRelevance(query);\r\n })\r\n })\r\n })\r\n }\r\n }\r\n }\r\n\r\n doQuery = async (query: string) => {\r\n const currencyCode = this.props.userState.user ? this.props.userState.user.currencyCode : 'EUR';\r\n return await ProductApi.search(query, currencyCode);\r\n }\r\n\r\n isInBasket = (product: Style) => {\r\n return this.props.orderState.order && !!this.props.orderState.order.orderLines.find((line) => {\r\n return line.masterid === product.masterId && line.colorcode === product.colorCode;\r\n })\r\n }\r\n\r\n formatAllStringsWithRelevance = (query: string) => {\r\n if (this.ref.current !== null) {\r\n const items = this.ref.current.querySelectorAll('.pl-item__text');\r\n const that = this;\r\n\r\n items.forEach(function(val) {\r\n val.innerHTML = that.formatStringByRelevance(val.innerHTML, query);\r\n })\r\n }\r\n }\r\n\r\n formatStringByRelevance = (name: string, query: string) => {\r\n return name.replace(new RegExp(query, \"gi\"), (match) => `${match}`);\r\n }\r\n\r\n goBack = () => {\r\n const path = localStorage.getItem('search:prevPage') || '/shop';\r\n\r\n this.props.history.push(path);\r\n }\r\n\r\n render() {\r\n const { styles, suggestions } = this.state;\r\n \r\n return (\r\n
    \r\n
    \r\n Go back\r\n
    \r\n {/* {\r\n suggestions.length ?\r\n
    \r\n \r\n
    \r\n : null\r\n } */}\r\n\r\n {\r\n !this.state.loaded && !suggestions.length ?\r\n
    \r\n \r\n
    : null\r\n }\r\n\r\n {\r\n this.state.loaded && this.state.noResult ?\r\n
    \r\n

    Your search gave no results.

    \r\n

    Please try another.

    \r\n
    : null\r\n }\r\n\r\n {/* */}\r\n \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (states: RootState, ownProps: OwnProps): StateProps => {\r\n return {\r\n userState: states.user.user,\r\n orderState: states.order.order,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: ThunkDispatch<{}, {}, any>, ownProps: OwnProps): DispatchProps => {\r\n return {\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SearchPage)\r\n","import React from 'react';\r\n\r\ninterface IProps {\r\n name: string\r\n title: string\r\n inputType: string\r\n value: any,\r\n handleChange: any,\r\n placeholder: string\r\n required?: boolean\r\n}\r\n\r\nexport const Input: React.FC = ({\r\n name,\r\n title,\r\n inputType,\r\n value,\r\n handleChange,\r\n placeholder,\r\n required\r\n}) => {\r\n\t//console.log(props.value);\r\n\treturn ( \r\n
    \r\n \r\n \r\n
    \r\n)\r\n}","import React from 'react';\r\n\r\ninterface IProps {\r\n title: string\r\n handleCLick: any,\r\n}\r\n\r\nexport const Button: React.FC = ({\r\n title,\r\n handleCLick,\r\n}) => {\r\n\treturn ( \r\n
    \r\n \r\n
    \r\n )\r\n}","import React, { Component } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { Link } from \"react-router-dom\";\r\n\r\nimport { Input } from '../form/Input';\r\nimport { Button } from '../form/Button';\r\n\r\nimport { Redirect, RouteComponentProps } from 'react-router-dom'\r\n// import authenticateUser from '../../services/auth/authenticate';\r\n\r\nimport { ThunkDispatch } from 'redux-thunk'\r\nimport { RootState } from '../../store';\r\nimport { IUserSate } from '../../store/user/reducers';\r\nimport { loginUser, isUserValid } from '../../store/user/actions';\r\n\r\ninterface RouteProps extends RouteComponentProps {}\r\n\r\ninterface State {\r\n formValues: {\r\n email: string\r\n password: string,\r\n },\r\n redirectToReferrer: boolean\r\n}\r\n \r\ninterface OwnProps {\r\n location: any\r\n}\r\n \r\ninterface DispatchProps {\r\n loginUser: (email: string, password: string) => void;\r\n isUserValid: () => void;\r\n}\r\n \r\ninterface StateProps {\r\n userState: IUserSate\r\n}\r\n \r\ntype Props = StateProps & OwnProps & DispatchProps & RouteProps;\r\n\r\nexport class Login extends Component {\r\n state = {\r\n formValues: {email: '', password: ''},\r\n redirectToReferrer: false,\r\n }\r\n\r\n componentDidMount() {\r\n if(this.props.userState.isValidated && this.props.userState.user) {\r\n this.setState({ redirectToReferrer: true });\r\n }\r\n }\r\n\r\n UNSAFE_componentWillReceiveProps(nextProps: Props) {\r\n if (nextProps.userState.user) {\r\n this.setState({ redirectToReferrer: true });\r\n }\r\n\r\n if (nextProps.userState.token && !nextProps.userState.user) {\r\n this.props.isUserValid();\r\n }\r\n }\r\n\r\n private handleChange = (e: React.FormEvent) => {\r\n const { name, value } = e.currentTarget;\r\n\r\n if (name === 'email') {\r\n this.setState({formValues: {email: value, password: this.state.formValues.password}})\r\n }\r\n\r\n if (name === 'password') {\r\n this.setState({formValues: {email: this.state.formValues.email, password: value}})\r\n }\r\n };\r\n\r\n handleSubmit() {\r\n this.props.loginUser(this.state.formValues.email, this.state.formValues.password)\r\n }\r\n\r\n render() {\r\n const referer = this.props.location.state.referer || '/';\r\n // console.log(this.props.location, 'this.props.location')\r\n let { redirectToReferrer } = this.state;\r\n\r\n if (redirectToReferrer) {\r\n return ;\r\n }\r\n\r\n return (\r\n
    \r\n e.preventDefault()}\r\n className=\"login-form\"\r\n style={{\r\n width: '100%',\r\n maxWidth: '550px',\r\n background: 'rgba(0,0,0,.3)',\r\n padding: '30px',\r\n borderRadius: '6px',\r\n }}>\r\n \r\n \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (states: RootState, ownProps: OwnProps): StateProps => {\r\n return {\r\n userState: states.user.user\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: ThunkDispatch<{}, {}, any>, ownProps: OwnProps): DispatchProps => {\r\n return {\r\n loginUser: async (email: string, password: string) => {\r\n await dispatch(loginUser(email, password))\r\n // console.log('user login completed [UI]')\r\n },\r\n isUserValid: async () => {\r\n await dispatch(isUserValid())\r\n // console.log('isUserValid completed [UI]')\r\n },\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Login)","import { Component } from 'react'\r\nimport { connect } from 'react-redux'\r\n\r\n// import { RouteComponentProps } from 'react-router-dom'\r\nimport {RouteComponentProps, withRouter} from \"react-router-dom\";\r\n// import authenticateUser from '../../services/auth/authenticate';\r\n\r\nimport { ThunkDispatch } from 'redux-thunk'\r\nimport { RootState } from '../../store';\r\nimport { IUserSate } from '../../store/user/reducers';\r\nimport { logoutUser } from '../../store/user/actions';\r\n\r\ninterface RouteProps extends RouteComponentProps {}\r\n\r\ninterface State {\r\n userIsInvalid: boolean\r\n}\r\n \r\ninterface OwnProps {\r\n history: any\r\n}\r\n \r\ninterface DispatchProps {\r\n logoutUser: () => void;\r\n}\r\n \r\ninterface StateProps {\r\n userState: IUserSate\r\n}\r\n \r\ntype Props = StateProps & OwnProps & DispatchProps & RouteProps;\r\n\r\nexport class Logout extends Component {\r\n\r\n state = { userIsInvalid: false }\r\n\r\n componentDidMount() {\r\n if (this.props.userState.user) {\r\n \r\n let state = { ...this.props.history.location.state };\r\n delete state.referer;\r\n console.log(state)\r\n this.props.history.replace({ ...this.props.history.location.state, state });\r\n\r\n this.props.logoutUser();\r\n }\r\n\r\n }\r\n\r\n componentDidUpdate(prevProps: Props) {\r\n // console.log(this.props.userState.user, 'this.props.userState.user')\r\n if (!this.props.userState.user) {\r\n let state = { ...this.props.history.location.state };\r\n delete state.referer;\r\n console.log(state)\r\n this.props.history.replace({ ...this.props.history.location.state, state });\r\n this.setState({userIsInvalid: true})\r\n }\r\n }\r\n\r\n render() {\r\n if (this.state.userIsInvalid) {\r\n console.log('redirect')\r\n }\r\n return null\r\n }\r\n}\r\n\r\nconst mapStateToProps = (states: RootState, ownProps: OwnProps): StateProps => {\r\n return {\r\n userState: states.user.user\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: ThunkDispatch<{}, {}, any>, ownProps: OwnProps): DispatchProps => {\r\n return {\r\n logoutUser: async () => {\r\n await dispatch(logoutUser())\r\n // console.log('user login completed [UI]')\r\n },\r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(Logout))","import React, { Component } from 'react'\r\nimport { connect } from 'react-redux'\r\n\r\nimport { Button } from '../form/Button';\r\n\r\nimport { Redirect, RouteComponentProps } from 'react-router-dom'\r\n\r\nimport { ThunkDispatch } from 'redux-thunk'\r\nimport { RootState } from '../../store';\r\nimport { IUserSate } from '../../store/user/reducers';\r\nimport { isUserValid } from '../../store/user/actions';\r\nimport { UserApi } from '../../store/user/actions';\r\n\r\ninterface RouteProps extends RouteComponentProps {}\r\n\r\ninterface State {\r\n formValues: {\r\n email: string\r\n },\r\n redirectToReferrer: boolean,\r\n step: number\r\n}\r\n \r\ninterface OwnProps {\r\n}\r\n \r\ninterface DispatchProps {\r\n isUserValid: () => void;\r\n}\r\n \r\ninterface StateProps {\r\n userState: IUserSate\r\n}\r\n \r\ntype Props = StateProps & OwnProps & DispatchProps & RouteProps;\r\n\r\nexport class ForgotPassword extends Component {\r\n state: State = {\r\n formValues: {email: ''},\r\n redirectToReferrer: false,\r\n step: 0\r\n }\r\n\r\n componentDidMount() {\r\n if(this.props.userState.isValidated && this.props.userState.user) {\r\n this.setState({ redirectToReferrer: true });\r\n }\r\n }\r\n\r\n UNSAFE_componentWillReceiveProps(nextProps: Props) {\r\n if (nextProps.userState.user) {\r\n this.setState({ redirectToReferrer: true });\r\n }\r\n\r\n if (nextProps.userState.token && !nextProps.userState.user) {\r\n this.props.isUserValid();\r\n }\r\n }\r\n\r\n private handleChange = (e: React.FormEvent) => {\r\n const { name, value } = e.currentTarget;\r\n\r\n if (name === 'email') {\r\n this.setState({formValues: {email: value}})\r\n }\r\n };\r\n\r\n async handleSubmit() {\r\n // this.props.loginUser(this.state.formValues.email, this.state.formValues.password)\r\n await UserApi.resetPassword(this.state.formValues.email);\r\n\r\n console.log(this.state.formValues.email, 'this.state.formValues.email')\r\n this.setState({step: 1})\r\n \r\n }\r\n\r\n render() {\r\n const referer = '/';\r\n\r\n if (this.state.redirectToReferrer) {\r\n return ;\r\n }\r\n\r\n if (this.state.step === 1) {\r\n return (\r\n
    \r\n e.preventDefault()}\r\n className=\"login-form login-form--forgot-password\"\r\n style={{\r\n width: '100%',\r\n maxWidth: '550px',\r\n background: 'rgba(0,0,0,.3)',\r\n padding: '30px',\r\n borderRadius: '6px',\r\n }}>\r\n

    Check your email

    \r\n

    \r\n We have send your an email with a new password\r\n

    \r\n
    \r\n )\r\n }\r\n\r\n return (\r\n
    \r\n e.preventDefault()}\r\n className=\"login-form login-form--forgot-password\"\r\n style={{\r\n width: '100%',\r\n maxWidth: '550px',\r\n background: 'rgba(0,0,0,.3)',\r\n padding: '30px',\r\n borderRadius: '6px',\r\n }}>\r\n

    Reset Password

    \r\n

    \r\n We’ll send you an email with your new password.\r\n

    \r\n \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (states: RootState, ownProps: OwnProps): StateProps => {\r\n return {\r\n userState: states.user.user\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: ThunkDispatch<{}, {}, any>, ownProps: OwnProps): DispatchProps => {\r\n return {\r\n isUserValid: async () => {\r\n await dispatch(isUserValid())\r\n // console.log('isUserValid completed [UI]')\r\n },\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ForgotPassword)","import React, { Component } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { ThunkDispatch } from 'redux-thunk'\r\nimport {RouteComponentProps, withRouter} from \"react-router-dom\";\r\n\r\n// Store.\r\nimport { RootState } from '../../store';\r\nimport { IOrderState } from '../../store/order/orderStore';\r\nimport OrderApi from '../../store/order/OrderApi';\r\nimport { setOrder, getDashboardOrderState } from '../../store/order/actions'\r\n\r\n// Components.\r\nimport Modal from '../layout/Modal/Modal';\r\nimport PropagateLoader from 'react-spinners/PropagateLoader'\r\n\r\ninterface State {\r\n showOverlay: boolean\r\n items: any[]\r\n isConfirming: boolean\r\n fetchingOrderId?: number\r\n}\r\n \r\ninterface OwnProps {\r\n}\r\n \r\ninterface DispatchProps {\r\n setOrder: (orderId: number) => void\r\n getDashboardOrderState: (orderId: number) => void\r\n}\r\n \r\ninterface StateProps {\r\n orderState: IOrderState\r\n}\r\n \r\ntype Props = StateProps & OwnProps & DispatchProps & RouteComponentProps;\r\n\r\nexport class StockHasChangedModal extends Component {\r\n\r\n state: State = { showOverlay: false, items: [], isConfirming: false }\r\n\r\n async componentDidMount() {\r\n const currentOrder = this.props.orderState.order\r\n\r\n if (currentOrder) {\r\n this.ensureStockHasChanged(currentOrder.orderheader.appOrderId);\r\n }\r\n }\r\n\r\n async componentDidUpdate(prevProps: Props) {\r\n const prevOrder = prevProps.orderState.order;\r\n const currentOrder = this.props.orderState.order\r\n let shouldCheck = false;\r\n \r\n if (prevOrder !== currentOrder && currentOrder) {\r\n if (prevOrder && prevOrder.orderheader.appOrderId !== currentOrder.orderheader.appOrderId) {\r\n shouldCheck = true;\r\n this.setState({ showOverlay: false})\r\n }\r\n\r\n if (!prevOrder && currentOrder) {\r\n shouldCheck = true;\r\n }\r\n }\r\n\r\n if (this.props.location !== prevProps.location) {\r\n if (this.props.location.pathname.includes('/checkout')\r\n || this.props.location.pathname.includes('/dashboard')) {\r\n shouldCheck = true;\r\n }\r\n }\r\n\r\n if (this.props.orderState.order && this.props.orderState.order.orderheader.orderIsFinal) {\r\n shouldCheck = false;\r\n }\r\n\r\n if (shouldCheck && currentOrder) {\r\n this.setState({ showOverlay: false}, () => {\r\n this.ensureStockHasChanged(currentOrder.orderheader.appOrderId);\r\n })\r\n }\r\n }\r\n\r\n ensureStockHasChanged = (orderId: number) => {\r\n this.setState({ fetchingOrderId: orderId }, async () => {\r\n const response = await OrderApi.ensureOrderStockChanges(orderId);\r\n\r\n if (response.data.length\r\n && (this.props.orderState.order && this.props.orderState.order.orderheader.appOrderId === this.state.fetchingOrderId)) {\r\n this.setState({showOverlay: true, items: response.data})\r\n }\r\n })\r\n }\r\n\r\n confirmChanges = async () => {\r\n if (this.props.orderState.order) {\r\n this.setState({ isConfirming: true }, async () => {\r\n if (this.props.orderState.order) {\r\n await OrderApi.ensureOrderStockChanges(this.props.orderState.order.orderheader.appOrderId, true);\r\n this.props.getDashboardOrderState(this.props.orderState.order.orderheader.appOrderId)\r\n this.props.setOrder(this.props.orderState.order.orderheader.appOrderId)\r\n this.setState({showOverlay: false, items: [], isConfirming: false})\r\n } else {\r\n this.setState({ isConfirming: false }) \r\n }\r\n })\r\n }\r\n }\r\n\r\n renderContent = () => {\r\n if (this.state.isConfirming) {\r\n return (\r\n
    \r\n

    Confirming your changes

    \r\n \r\n
    \r\n )\r\n }\r\n\r\n const { order } = this.props.orderState;\r\n\r\n return (\r\n
    \r\n
    \r\n

    Stock has changed

    \r\n {\r\n order &&\r\n \r\n

    \r\n \r\n { order.orderheader.sellToCustomerName } B2B{order.orderheader.appOrderId} {order.orderheader.orderType} {order.orderheader.navImportRef} {order.orderheader.salespersonNote}\r\n \r\n

    \r\n
    \r\n }\r\n

    \r\n Following items has changed stock values.\r\n

    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n this.state.items.map((item, key) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n
    Master IdColornameSizePrevious stockCurrent stock
    \r\n {item.masterid}\r\n \r\n {item.colorname}\r\n {item.sizename}{item.was}{item.isnow}
    \r\n
    \r\n )\r\n }\r\n\r\n render() {\r\n if (!this.state.showOverlay) {\r\n return null;\r\n }\r\n return (\r\n console.log('hide stock has changed modal!')}\r\n footer={!this.state.isConfirming ?\r\n \r\n OK\r\n \r\n :\r\n null \r\n }\r\n isShowing={this.state.showOverlay}\r\n />\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (states: RootState, ownProps: OwnProps): StateProps => {\r\n return {\r\n orderState: states.order.order,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: ThunkDispatch<{}, {}, any>, ownProps: OwnProps): DispatchProps => {\r\n return {\r\n setOrder: async (orderId: number) => {\r\n await dispatch(setOrder(orderId))\r\n },\r\n getDashboardOrderState: async (orderId: number) => {\r\n await dispatch(getDashboardOrderState(orderId))\r\n }\r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(StockHasChangedModal))","import React, { Component } from 'react'\r\nimport { ThunkDispatch } from 'redux-thunk'\r\nimport { RootState } from '../../store';\r\nimport { connect } from 'react-redux'\r\nimport {RouteComponentProps, withRouter} from \"react-router-dom\";\r\n\r\n// Store.\r\nimport OrderApi from '../../store/order/OrderApi';\r\nimport { getDashboardOrderState } from '../../store/order/actions';\r\n\r\n// Utils.\r\nimport PropagateLoader from 'react-spinners/PropagateLoader'\r\n\r\ninterface State {\r\n loadingNavOrder: boolean\r\n orderNotfound: boolean\r\n}\r\n \r\ninterface OwnProps {\r\n match?: {params: {appOrderId: number}},\r\n history: any\r\n}\r\n \r\ninterface DispatchProps {\r\n getDashboardOrderState: (orderId: number) => void\r\n}\r\n \r\ninterface StateProps {\r\n}\r\n \r\ntype Props = StateProps & OwnProps & DispatchProps & RouteComponentProps;\r\n\r\nexport class LookUpNavOrder extends Component {\r\n state: State = {\r\n loadingNavOrder: true,\r\n orderNotfound: false,\r\n }\r\n\r\n async componentDidMount () {\r\n const appOrderId = this.props.match.params.appOrderId;\r\n\r\n if (appOrderId) {\r\n const response = await OrderApi.lookupOrderInNav(appOrderId);\r\n\r\n if (response && response.data.sonumber) {\r\n const navOrderResponse = await OrderApi.openNavOrder(response.data.sonumber)\r\n const createdapporderid = navOrderResponse.data.createdapporderid\r\n\r\n if (navOrderResponse) {\r\n this.props.history.push('/dashboard/' + createdapporderid);\r\n this.setState({loadingNavOrder: false})\r\n } else {\r\n this.setState({loadingNavOrder: false, orderNotfound: true})\r\n }\r\n } else {\r\n this.setState({loadingNavOrder: false, orderNotfound: true})\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n if (this.state.loadingNavOrder) {\r\n return (\r\n
    \r\n

    Loading your order

    \r\n

    Please wait - it won't be long :-)

    \r\n \r\n
    \r\n )\r\n }\r\n\r\n if (this.state.orderNotfound) {\r\n return (\r\n
    \r\n

    Your order is being processed!

    \r\n

    Please try again later.

    \r\n
    \r\n )\r\n }\r\n\r\n return null\r\n }\r\n}\r\n\r\nconst mapStateToProps = (states: RootState, ownProps: OwnProps): StateProps => {\r\n return {\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: ThunkDispatch<{}, {}, any>, ownProps: OwnProps): DispatchProps => {\r\n return {\r\n getDashboardOrderState: async (orderId: number) => {\r\n await dispatch(getDashboardOrderState(orderId))\r\n }\r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(LookUpNavOrder)) \r\n","var _g;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from \"react\";\nconst SvgDownloadIconLarge = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n className: \"downloader__top-icon\",\n viewBox: \"0 0 170 170\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"#d4d7d9\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M145.104 24.896c33.195 33.194 33.195 87.014 0 120.208-33.194 33.195-87.014 33.195-120.208 0C-8.3 111.91-8.3 58.09 24.896 24.896 58.09-8.3 111.91-8.3 145.104 24.896zm-7.071 7.071c-29.29-29.29-76.777-29.29-106.066 0-29.29 29.29-29.29 76.777 0 106.066 29.29 29.29 76.777 29.29 106.066 0 29.29-29.29 29.29-76.777 0-106.066z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M82 100.843V59.007A4.006 4.006 0 0 1 86 55c2.21 0 4 1.794 4 4.007v41.777l15.956-15.956a4.003 4.003 0 0 1 5.657 0 4.004 4.004 0 0 1 0 5.657l-22.628 22.628a3.99 3.99 0 0 1-3.017 1.166 3.992 3.992 0 0 1-3.012-1.166L60.328 90.485a4.003 4.003 0 0 1 0-5.657 4.004 4.004 0 0 1 5.657 0L82 100.843z\"\n }))));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgDownloadIconLarge, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/download_icon_large.4a3453af.svg\";\nexport { ForwardRef as ReactComponent };","var _g;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport React from \"react\";\nconst SvgDownloadSuccess = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n className: \"downloader__image\",\n viewBox: \"304 227 171 171\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"#d4d7d9\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M449.104 251.896c33.195 33.194 33.195 87.014 0 120.208-33.194 33.195-87.014 33.195-120.208 0-33.195-33.194-33.195-87.014 0-120.208 33.194-33.195 87.014-33.195 120.208 0zm-7.07 113.137c-29.29 29.29-76.778 29.29-106.067 0-29.29-29.29-29.29-76.777 0-106.066 29.29-29.29 76.777-29.29 106.066 0 29.29 29.29 29.29 76.777 0 106.066z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M379.686 337.237c2.716 2.672 7.186 2.25 9.353-.882l28.87-41.735c1.928-2.786 1.23-6.605-1.557-8.53-2.788-1.927-6.61-1.23-8.537 1.556l-24.688 35.694-13.687-13.395c-2.413-2.376-6.3-2.346-8.676.067-2.378 2.414-2.348 6.296.067 8.673l18.856 18.552z\"\n }))));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgDownloadSuccess, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/download_success.4bbf49ee.svg\";\nexport { ForwardRef as ReactComponent };"," import React, { Component } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { ThunkDispatch } from 'redux-thunk'\r\nimport {RouteComponentProps, withRouter} from \"react-router-dom\";\r\n\r\n// Store.\r\nimport { IUserSate } from '../../store/user/reducers';\r\n\r\n// API.\r\nimport FileApi from '../../store/files/FileApi';\r\nimport OrderApi from '../../store/order/OrderApi';\r\n\r\n// Utils.\r\nimport { FaDownload, FaChevronRight, FaChevronLeft } from 'react-icons/fa';\r\nimport BounceLoader from 'react-spinners/BounceLoader'\r\n\r\n// Components.\r\nimport { ReactComponent as DownloadIconLarge } from '../../images/svg/download_icon_large.svg';\r\nimport { ReactComponent as DownloadSuccessLarge } from '../../images/svg/download_success.svg';\r\n\r\n// Store.\r\nimport { RootState } from '../../store';\r\n\r\ninterface IGroup {[id: string]: any[]}\r\n\r\ninterface State {\r\n step: string\r\n previousStep: string\r\n isGeneratingFile: boolean\r\n downloadSucceded: boolean\r\n dropStep: string\r\n downloadAction: 'downloadDrop' | 'downloadDropBySeason' | 'downloadPreviousDrops',\r\n selectedDrop: any\r\n currentShop?: any\r\n shops?: any[]\r\n loadingShopOrders: boolean\r\n shopDeliveryInfo?: any[]\r\n futureDrops: any[]\r\n previousDrops: any[]\r\n futureDropsGroupedBySeason: any\r\n currentDropsGroupedBySeason: any\r\n activeSection: string\r\n selectedSeason: string\r\n}\r\n \r\ninterface OwnProps {\r\n match: {params: {collection: string, orderType: string}},\r\n}\r\n \r\ninterface DispatchProps {\r\n}\r\n \r\ninterface StateProps {\r\n userState: IUserSate\r\n}\r\n \r\ntype Props = StateProps & OwnProps & DispatchProps & RouteComponentProps;\r\n\r\nexport class ProductDownloadImagesPage extends Component {\r\n\r\n state: State = {\r\n step: 'initial',\r\n previousStep: 'initial',\r\n isGeneratingFile: false,\r\n downloadSucceded: false,\r\n dropStep: 'initial',\r\n downloadAction: 'downloadDrop',\r\n selectedDrop: null,\r\n loadingShopOrders: false,\r\n shopDeliveryInfo: [],\r\n futureDrops: [],\r\n previousDrops: [],\r\n futureDropsGroupedBySeason: {},\r\n currentDropsGroupedBySeason: {},\r\n activeSection: 'previous-drops',\r\n selectedSeason: 'previous-drops',\r\n }\r\n\r\n componentDidMount = async() => {\r\n const shopsResponse = await OrderApi.getShops()\r\n\r\n let currentShop: any = null;\r\n\r\n this.setState({ shops: shopsResponse.data }, () => {\r\n if (!shopsResponse.data.length) {\r\n currentShop = {\r\n customerId: this.props.userState.user.customerData.CustomerId,\r\n name: this.props.userState.user.customerData.Name,\r\n }\r\n this.onChangeShop(currentShop);\r\n } else {\r\n this.setState({ step: 'chooseShop' });\r\n }\r\n })\r\n }\r\n\r\n groupBy = (key: any) => (array: any[]) =>\r\n array.reduce((objectsByKeyValue: { [x: string]: any; }, obj: { [x: string]: any; }) => {\r\n const value = obj[key];\r\n objectsByKeyValue[value] = (objectsByKeyValue[value] || []).concat(obj);\r\n return objectsByKeyValue;\r\n }, {});\r\n\r\n onChangeShop = (shop: any) => {\r\n this.setState({ currentShop: shop, loadingShopOrders: true }, async () => {\r\n // Peak closed orders.\r\n const response = await OrderApi.getCustomerDeliveryDownloadInfo(shop.customerId)\r\n const groupBySeason = this.groupBy(['seasoncode']);\r\n let previousDrops = [];\r\n let futureDrops = [];\r\n let currentDrops = [];\r\n let futureDropsGroupedBySeason: IGroup = {};\r\n let currentDropsGroupedBySeason: IGroup = {};\r\n\r\n for (const res of response.data) {\r\n if (res.daystoseasonstartshipping < -150) {\r\n previousDrops.push(res);\r\n }\r\n\r\n if (res.daystoseasonstartshipping > -150 && res.daystoseasonstartshipping <= 60 ) {\r\n currentDrops.push(res);\r\n }\r\n\r\n if (res.daystoseasonstartshipping > 60 ) {\r\n futureDrops.push(res);\r\n }\r\n }\r\n\r\n futureDropsGroupedBySeason = this.consolidateGroups(groupBySeason(futureDrops));\r\n currentDropsGroupedBySeason = this.consolidateGroups(groupBySeason(currentDrops));\r\n\r\n let activeSection = previousDrops.length ?\r\n 'previous-drops' : (!previousDrops.length && futureDrops.length ? Object.keys(futureDropsGroupedBySeason)[0] : '');\r\n\r\n this.setState({\r\n shopDeliveryInfo: response.data,\r\n futureDrops,\r\n previousDrops,\r\n loadingShopOrders: false,\r\n futureDropsGroupedBySeason,\r\n currentDropsGroupedBySeason,\r\n activeSection,\r\n })\r\n })\r\n }\r\n\r\n consolidateGroups = (season: IGroup) => {\r\n for (const i in season) {\r\n const group: any = season[i];\r\n\r\n for (const drop of group) {\r\n\r\n if (drop.deliverycode.includes(' DL')) {\r\n const dropKey = drop.deliverycode.split(' DL')[0]\r\n let similar = group.filter((item: any) => item.deliverycode.includes(dropKey))\r\n\r\n if (similar && similar.length < 2) {\r\n continue;\r\n }\r\n\r\n let other = similar.filter((item: any) => !item.deliverycode.includes(' DL'))[0];\r\n\r\n let pseudoGroup = {\r\n customerno: other.customerno,\r\n daysfromtoday: other.daysfromtoday,\r\n daystoseasonstartshipping: other.daystoseasonstartshipping,\r\n deliverycode: dropKey,\r\n deliveryshipment: other.deliveryshipment,\r\n seasoncode: other.seasoncode,\r\n dropsInluded: similar,\r\n };\r\n\r\n // Remove similar items.\r\n season[i] = season[i].filter((item: any) => !item.deliverycode.includes(dropKey));\r\n\r\n // Add new pseudogroup.\r\n season[i].push(pseudoGroup)\r\n }\r\n }\r\n\r\n // Sort by date.\r\n season[i]\r\n .sort((a: any, b: any) => new Date(b.deliveryshipment).getTime() - new Date(a.deliveryshipment).getTime())\r\n .reverse()\r\n }\r\n\r\n return season;\r\n }\r\n\r\n onClickGetFile = () => {\r\n if (this.state.downloadAction === 'downloadDrop' && this.state.currentShop) {\r\n if (this.state.selectedDrop.dropsInluded && this.state.selectedDrop.dropsInluded.length) {\r\n this.setState({ isGeneratingFile: true, downloadSucceded: false, dropStep: 'download', }, async () => {\r\n const dropsToDownload = this.state.selectedDrop.dropsInluded.map((drop: any) => {\r\n return {\r\n deliverycode: drop.deliverycode,\r\n seasoncode: drop.seasoncode,\r\n }});\r\n \r\n const response = await FileApi.createCustomerMultipleDropZip(this.state.currentShop.customerId, dropsToDownload);\r\n \r\n if (response.data && response.data.location) {\r\n window.location.href = response.data.location;\r\n }\r\n \r\n this.setState({\r\n isGeneratingFile: false,\r\n downloadSucceded: true,\r\n previousStep: this.state.step\r\n })\r\n })\r\n } else {\r\n this.setState({ isGeneratingFile: true, downloadSucceded: false, dropStep: 'download', }, async () => {\r\n const response = await FileApi.createCustomerDropZip(this.state.currentShop.customerId, this.state.selectedDrop.deliverycode, this.state.selectedDrop.seasoncode);\r\n \r\n if (response.data && response.data.location) {\r\n window.location.href = response.data.location;\r\n }\r\n \r\n this.setState({\r\n isGeneratingFile: false,\r\n downloadSucceded: true,\r\n previousStep: this.state.step\r\n })\r\n })\r\n }\r\n\r\n \r\n }\r\n\r\n if (this.state.downloadAction === 'downloadDropBySeason' && this.state.currentShop) {\r\n this.setState({ isGeneratingFile: true, downloadSucceded: false, dropStep: 'download', }, async () => {\r\n const dropsToDownload = this.state.currentDropsGroupedBySeason[this.state.selectedSeason].map((drop: any) => {\r\n return {\r\n deliverycode: drop.deliverycode,\r\n seasoncode: drop.seasoncode,\r\n }});\r\n\r\n const response = await FileApi.createCustomerMultipleDropZip(this.state.currentShop.customerId, dropsToDownload);\r\n \r\n if (response.data && response.data.location) {\r\n window.location.href = response.data.location;\r\n }\r\n\r\n this.setState({\r\n isGeneratingFile: false,\r\n downloadSucceded: true,\r\n previousStep: this.state.step\r\n })\r\n })\r\n }\r\n\r\n if (this.state.downloadAction === 'downloadPreviousDrops' && this.state.currentShop) {\r\n this.setState({ isGeneratingFile: true, downloadSucceded: false, dropStep: 'download', }, async () => {\r\n const dropsToDownload = this.state.previousDrops.map((drop: any) => {\r\n return {\r\n deliverycode: drop.deliverycode,\r\n seasoncode: drop.seasoncode,\r\n }});\r\n\r\n const response = await FileApi.createCustomerMultipleDropZip(this.state.currentShop.customerId, dropsToDownload);\r\n \r\n if (response.data && response.data.location) {\r\n window.location.href = response.data.location;\r\n }\r\n\r\n this.setState({\r\n isGeneratingFile: false,\r\n downloadSucceded: true,\r\n previousStep: this.state.step\r\n })\r\n })\r\n }\r\n }\r\n\r\n onClickShop = (shop: any) => {\r\n this.setState({ step: 'initial' }, () => {\r\n this.onChangeShop(shop);\r\n }); \r\n }\r\n\r\n onClickDropType = (dropType: string) => {\r\n this.setState({ step: dropType });\r\n }\r\n\r\n onClickSeason = (seasonName: string) => {\r\n this.setState({ step: 'chooseDrops', selectedSeason: seasonName })\r\n }\r\n\r\n renderLastStep = () => {\r\n return \r\n
    \r\n {\r\n !this.state.isGeneratingFile && !this.state.downloadSucceded &&\r\n \r\n \r\n

    \r\n {this.state.downloadAction === 'downloadPreviousDrops' && 'Generate zip file with images all your previous drops'}\r\n {this.state.downloadAction === 'downloadDrop' && this.state.selectedDrop && 'Generate zip file with images from drop ' + this.state.selectedDrop.deliverycode}\r\n {this.state.downloadAction === 'downloadDropBySeason' && 'Generate zip file with images from all drops on ' + this.state.selectedSeason}\r\n

    \r\n

    \r\n \r\n

    \r\n
    \r\n }\r\n {\r\n !this.state.isGeneratingFile && this.state.downloadSucceded && \r\n \r\n {/* this.setState({ step: 'initial' })}> */}\r\n \r\n

    \r\n Your file has been generated\r\n

    \r\n
    \r\n }\r\n {\r\n this.state.isGeneratingFile &&\r\n
    \r\n \r\n

    \r\n Downloading your file
    \r\n Might take a little while\r\n

    \r\n
    \r\n }\r\n
    \r\n
    \r\n }\r\n\r\n renderSeason = () => {\r\n return \r\n {\r\n !this.state.isGeneratingFile && !this.state.downloadSucceded && this.state.dropStep === 'initial' &&\r\n \r\n
    \r\n {\r\n this.state.currentDropsGroupedBySeason[this.state.selectedSeason]\r\n .map((drop: any, key: number) => {\r\n return (\r\n this.setState({\r\n dropStep: 'initial',\r\n downloadAction: 'downloadDrop',\r\n selectedDrop: drop,\r\n previousStep: this.state.step,\r\n step: 'download',\r\n })}\r\n key={key}\r\n >\r\n { drop.deliverycode }\r\n { new Date(drop.deliveryshipment).toLocaleDateString() }\r\n \r\n
    \r\n );\r\n })\r\n }\r\n this.setState({\r\n dropStep: 'initial',\r\n downloadAction: 'downloadDropBySeason',\r\n selectedDrop: null,\r\n previousStep: this.state.step,\r\n step: 'download',\r\n })}\r\n >\r\n Download all above\r\n \r\n \r\n \r\n
    \r\n }\r\n
    \r\n }\r\n\r\n renderDropTypeChooser = () => {\r\n\r\n if (this.state.loadingShopOrders) {\r\n return
    \r\n \r\n

    \r\n Loading drops...\r\n

    \r\n
    \r\n }\r\n \r\n return (\r\n
    \r\n {this.state.previousDrops.length ?
    this.setState({ step: 'download', previousStep: this.state.step, downloadAction: 'downloadPreviousDrops' })}>\r\n Previous drops\r\n \r\n
    : null}\r\n {\r\n Object.keys(this.state.currentDropsGroupedBySeason).length ? \r\n Object.keys(this.state.currentDropsGroupedBySeason).map((seasonName) => {\r\n return (\r\n
    this.onClickSeason(seasonName)}>\r\n { seasonName }\r\n \r\n
    \r\n )\r\n })\r\n :\r\n null\r\n }\r\n {\r\n Object.keys(this.state.futureDropsGroupedBySeason).length ?\r\n Object.keys(this.state.futureDropsGroupedBySeason).map((seasonName) => {\r\n return (\r\n
    \r\n \r\n { seasonName } \r\n \r\n \r\n Not available yet\r\n \r\n
    \r\n )\r\n })\r\n :\r\n null\r\n }\r\n
    \r\n )\r\n }\r\n\r\n renderShopChooser = () => {\r\n return (\r\n
    \r\n {this.state.shops && this.state.shops.map((shop, key) => {\r\n return (\r\n
    this.onClickShop(shop)}>\r\n { shop.name }\r\n \r\n
    \r\n )\r\n })}\r\n
    \r\n )\r\n }\r\n\r\n render() {\r\n return (\r\n
    \r\n
    this.props.history.goBack()}>\r\n \r\n Go Back\r\n
    \r\n
    \r\n

    \r\n {(this.state.step === 'initial' || this.state.step === 'chooseShop') && }\r\n {this.state.step !== 'initial' && this.state.step !== 'chooseShop' && {\r\n this.setState({ step: this.state.previousStep, previousStep: 'initial', downloadSucceded: false, dropStep: 'initial' })\r\n\r\n }}>}\r\n {(this.state.step === 'initial' || this.state.step === 'chooseShop') && Download images}\r\n {this.state.step === 'previous-drops' && Previous drops}\r\n {this.state.step === 'chooseDrops' && Download drops}\r\n {this.state.step === 'download' && Download}\r\n\r\n {\r\n (this.state.step !== 'chooseShop' && this.state.shops && this.state.shops.length) ?\r\n

    { this.setState({ step: 'chooseShop' })}}>Change shop

    \r\n :\r\n null \r\n }\r\n \r\n Please note - It is only possbile to download product images that match your confirmed orders\r\n \r\n

    \r\n
    \r\n
    \r\n { this.state.step === 'initial' && this.renderDropTypeChooser() }\r\n
    \r\n\r\n
    \r\n { this.state.step === 'chooseShop' && this.renderShopChooser() }\r\n
    \r\n\r\n
    \r\n {this.state.step === 'chooseDrops' && this.renderSeason()}\r\n
    \r\n\r\n
    \r\n { this.state.step === 'download' && this.renderLastStep() }\r\n
    \r\n
    \r\n {\r\n this.state.step === 'download' && !this.state.isGeneratingFile && !this.state.downloadSucceded &&\r\n
    \r\n \r\n Download\r\n \r\n
    \r\n }\r\n\r\n {\r\n this.state.step === 'download' && !this.state.isGeneratingFile && this.state.downloadSucceded &&\r\n
    \r\n this.setState({ step: 'initial', downloadSucceded: false, dropStep: 'initial', downloadAction: 'downloadDrop' })}>\r\n Go back\r\n \r\n
    \r\n }\r\n
    \r\n {/*
    \r\n Please note - It is only possbile to download product images that match your confirmed orders\r\n
    */}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (states: RootState, ownProps: OwnProps): StateProps => {\r\n return {\r\n userState: states.user.user\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: ThunkDispatch<{}, {}, any>, ownProps: OwnProps): DispatchProps => {\r\n return {\r\n \r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(ProductDownloadImagesPage))","import React, { Component } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { ThunkDispatch } from 'redux-thunk'\r\nimport {RouteComponentProps, withRouter} from \"react-router-dom\";\r\n\r\n// Store.\r\nimport { RootState } from '../../store';\r\nimport { IOrderState } from '../../store/order/orderStore';\r\nimport OrderApi from '../../store/order/OrderApi';\r\nimport {\r\n setOrder,\r\n getOpenOrders,\r\n deleteOrder,\r\n applyOrder,\r\n} from '../../store/order/actions';\r\n\r\n// Components.\r\nimport Modal from '../layout/Modal/Modal';\r\n\r\ninterface State {\r\n showOverlay: boolean,\r\n items: any[]\r\n initialized: boolean\r\n continueEdit: boolean\r\n closeOrder: boolean\r\n submitOrder: boolean\r\n editableOrder?: any\r\n intervalId?: any\r\n}\r\n \r\ninterface OwnProps {\r\n}\r\n \r\ninterface DispatchProps {\r\n setOrder: (orderId: number) => void\r\n getOpenOrders: () => void\r\n deleteOrder: (orderId: number) => void\r\n applyOrder: (orderId: number) => void\r\n}\r\n \r\ninterface StateProps {\r\n orderState: IOrderState\r\n}\r\n \r\ntype Props = StateProps & OwnProps & DispatchProps & RouteComponentProps;\r\n\r\nexport class EditOrderHandlerOverlay extends Component {\r\n\r\n state: State = {\r\n showOverlay: false,\r\n items: [],\r\n initialized: false,\r\n continueEdit: true,\r\n closeOrder: false,\r\n submitOrder: false,\r\n }\r\n\r\n componentDidUpdate = (prevProps: Props) => {\r\n const editableOrder = this.props.orderState.orders.find((order: any) => (!order.orderIsFinal && order.navImportRef))\r\n\r\n if (!this.state.editableOrder && editableOrder) {\r\n if (this.state.intervalId) {\r\n clearInterval(this.state.intervalId);\r\n }\r\n\r\n this.setState({ editableOrder, showOverlay: false }, () => {\r\n this.initializeInterval()\r\n })\r\n }\r\n\r\n if (this.state.editableOrder && editableOrder && this.state.editableOrder.appOrderId !== editableOrder.appOrderId) {\r\n clearInterval(this.state.intervalId);\r\n\r\n this.setState({ editableOrder, showOverlay: false }, () => {\r\n this.initializeInterval()\r\n })\r\n }\r\n\r\n if (this.state.editableOrder && !editableOrder) {\r\n clearInterval(this.state.intervalId);\r\n this.setState({\r\n showOverlay: false,\r\n editableOrder: null,\r\n })\r\n }\r\n }\r\n\r\n componentWillUnmount = () => {\r\n // use intervalId from the state to clear the interval\r\n clearInterval(this.state.intervalId);\r\n }\r\n\r\n initializeInterval = () => {\r\n let intervalId = setInterval(this.validate, 1000);\r\n this.setState({intervalId: intervalId});\r\n }\r\n\r\n validate = () => {\r\n let editableOrder:any = null;\r\n let showOverlay:boolean = false;\r\n\r\n editableOrder = this.props.orderState.orders.find((order: any) => (!order.orderIsFinal && order.navImportRef))\r\n\r\n if (editableOrder) {\r\n const presentDate = new Date();\r\n const orderCreated = new Date(editableOrder.createdUtc)\r\n let diff =(presentDate.getTime() - orderCreated.getTime()) / 1000;\r\n diff /= (60 * 60);\r\n\r\n if (diff > 2) {\r\n showOverlay = true;\r\n }\r\n }\r\n\r\n this.setState({\r\n showOverlay,\r\n editableOrder,\r\n })\r\n }\r\n\r\n confirmChanges = async () => {\r\n if (this.state.continueEdit) {\r\n const updateResponse = await OrderApi.updateOrder({\r\n appOrderId: this.state.editableOrder.appOrderId,\r\n createdUtc: new Date()\r\n })\r\n\r\n if (updateResponse) {\r\n this.props.setOrder(this.state.editableOrder.appOrderId)\r\n this.props.getOpenOrders()\r\n this.setState({ showOverlay: false, editableOrder: null })\r\n }\r\n }\r\n\r\n if (this.state.closeOrder) {\r\n this.props.deleteOrder(this.state.editableOrder.appOrderId)\r\n this.setState({ showOverlay: false, editableOrder: null })\r\n }\r\n\r\n if (this.state.submitOrder) {\r\n this.props.applyOrder(this.state.editableOrder.appOrderId)\r\n this.setState({ showOverlay: false, editableOrder: null })\r\n }\r\n }\r\n\r\n onChangeOption = (option: string) => {\r\n let continueEdit = false;\r\n let closeOrder = false;\r\n let submitOrder = false;\r\n\r\n switch(option) {\r\n case 'continueEdit':\r\n continueEdit = true;\r\n break;\r\n case 'closeOrder':\r\n closeOrder = true;\r\n break;\r\n case 'submitOrder':\r\n submitOrder = true;\r\n break;\r\n }\r\n\r\n this.setState({ submitOrder, closeOrder, continueEdit })\r\n }\r\n\r\n renderContent = () => {\r\n const order = this.state.editableOrder;\r\n return (\r\n
    \r\n
    \r\n
    \r\n

    \r\n { order.sellToCustomerName } B2B{order.appOrderId} {order.orderType} {order.navImportRef} {order.salespersonNote}\r\n

    \r\n\r\n
    \r\n You did not finish editing this order you were granted access to edit.\r\n
    \r\n
    \r\n Please choose how you would like to proceed:\r\n
    \r\n
    \r\n
    \r\n this.onChangeOption('continueEdit')}\r\n />\r\n
    \r\n \r\n
    \r\n
    \r\n\r\n
    \r\n this.onChangeOption('closeOrder')}\r\n />\r\n
    \r\n \r\n
    \r\n
    \r\n\r\n {/*
    \r\n this.onChangeOption('submitOrder')}\r\n />\r\n
    \r\n \r\n
    \r\n
    */}\r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n )\r\n }\r\n\r\n render() {\r\n if (!this.state.showOverlay) {\r\n return null;\r\n }\r\n return (\r\n console.log('hide')}\r\n footer={\r\n \r\n }\r\n isShowing={this.state.showOverlay}\r\n />\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (states: RootState, ownProps: OwnProps): StateProps => {\r\n return {\r\n orderState: states.order.order,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: ThunkDispatch<{}, {}, any>, ownProps: OwnProps): DispatchProps => {\r\n return {\r\n setOrder: async (orderId: number) => {\r\n await dispatch(setOrder(orderId))\r\n },\r\n getOpenOrders: async () => {\r\n await dispatch(getOpenOrders())\r\n },\r\n deleteOrder: async (orderId: number) => {\r\n await dispatch(deleteOrder(orderId))\r\n },\r\n applyOrder: async (orderId: number) => {\r\n await dispatch(applyOrder(orderId))\r\n }\r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(EditOrderHandlerOverlay))","import React from 'react';\r\nimport { BrowserRouter as Router, Route, Redirect, Switch } from \"react-router-dom\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { createBrowserHistory } from 'history';\r\nimport axios from 'axios';\r\n\r\nimport { ToastContainer, toast } from 'react-toastify';\r\n\r\nimport 'react-toastify/dist/ReactToastify.css';\r\nimport { FaTimes } from 'react-icons/fa';\r\nimport './App.scss';\r\n\r\n// Store.\r\nimport { RootState } from './store/';\r\nimport { isUserValid } from './store/user/actions';\r\n\r\n// Components.\r\nimport OrderTypeChooser from './components/b2b/OrderTypeChooser';\r\nimport PreOrderChooser from './components/b2b/PreOrderChooser';\r\nimport ProductListContainer from './components/b2b/ProductListContainer';\r\nimport EditNavOrderContainer from './components/b2b/EditNavOrderContainer';\r\nimport CollectionListContainer from './components/b2b/CollectionListContainer';\r\nimport MainContainer from './components/layout/MainContainer';\r\nimport DashboardContainer from './components/layout/DashboardContainer';\r\nimport CheckoutContainer from './components/b2b/CheckoutContainer';\r\nimport Dashboard from './components/shared/Dashboard/Dashboard';\r\nimport SearchPage from './components/shared/SearchPage';\r\nimport Login from './components/auth/Login';\r\nimport Logout from './components/auth/Logout';\r\nimport ForgotPassword from './components/auth/ForgotPassword';\r\nimport MyMolo from './components/b2b/MyMolo';\r\nimport StockHasChangedModal from './components/b2b/StockHasChangedOverlay';\r\nimport LookUpNavOrder from './components/b2b/LookUpNavOrder';\r\nimport ProductDownloadImagesPage from './components/b2b/ProductDownloadImagesPage';\r\nimport EditOrderHandlerOverlay from './components/b2b/EditOrderHandlerOverlay';\r\nimport ConfirmModal from './components/layout/Modal/ConfirmModal';\r\n\r\nexport const isAuthenticated = (user: any) => {\r\n // If there already is a user.\r\n if (user && user.user) {\r\n return true;\r\n }\r\n\r\n // Fallback if all tries fails.\r\n return false;\r\n}\r\n\r\nconst PrivateRoute = ({ containerType, routeComponent, isAuthenticated, desktopOnly, ...rest }: any) => {\r\n const RouteComponent = routeComponent;\r\n\r\n const renderShopContainer = (props: any) => (\r\n \r\n \r\n \r\n )\r\n\r\n if (!isAuthenticated) {\r\n return \r\n }\r\n\r\n if (containerType === 'dashboard') {\r\n return (\r\n {\r\n return (\r\n \r\n \r\n \r\n )\r\n }}\r\n />\r\n )\r\n }\r\n\r\n if (containerType === 'checkout') {\r\n return (\r\n {\r\n return (\r\n \r\n \r\n \r\n )\r\n }}\r\n />\r\n )\r\n }\r\n\r\n return (\r\n {\r\n if (desktopOnly) {\r\n return (\r\n \r\n
    \r\n {renderShopContainer(props)}\r\n
    \r\n
    \r\n
    \r\n

    Desktop only!

    \r\n

    A mobile friendly version will be available soon :-)

    \r\n
    \r\n
    \r\n
    \r\n )\r\n }\r\n\r\n return (\r\n renderShopContainer(props)\r\n )\r\n }}\r\n />)\r\n};\r\n\r\nconst App: React.FC = () => {\r\n\r\n const user = useSelector((state: RootState) => state.user.user);\r\n const alerts = useSelector((state: RootState) => state.alertStore.alertState);\r\n const dispatch = useDispatch();\r\n const appUserHasBeenValidated = useSelector((state: RootState) => state.user.user.isValidated);\r\n const [showCriticalModal, setShowCriticalModal] = React.useState(false);\r\n const [criticalMessage, setCriticalMessage] = React.useState('');\r\n // Create the shared history\r\n const history = createBrowserHistory();\r\n\r\n history.listen((location, action) => {\r\n // clear alert on location change\r\n toast.dismiss()\r\n // dispatch(clearActions());\r\n });\r\n\r\n React.useEffect(() => {\r\n let timer: any;\r\n let timerForBuild: any;\r\n // add when mounted\r\n checkVersion();\r\n\r\n timer = setInterval(()=> dispatch(isUserValid()), 15000);\r\n timerForBuild = setInterval(()=> checkVersion(), 200000);\r\n // return function to be called when unmounted\r\n return () => {\r\n clearInterval(timer)\r\n clearInterval(timerForBuild)\r\n };\r\n }, [dispatch]);\r\n\r\n const checkVersion = async () => {\r\n // if (process.env.NODE_ENV === 'production') {\r\n const buildResponse = await axios.get('/build.json?' + (new Date().getTime()/1000))\r\n const localStorageBuild = localStorage.getItem('build');\r\n const buildVersion = buildResponse.data.buildVersion;\r\n\r\n if ((localStorageBuild && localStorageBuild !== buildVersion) || !localStorageBuild) {\r\n console.log('Refresh application...')\r\n window.location.reload();\r\n }\r\n\r\n localStorage.setItem('build', buildVersion);\r\n // }\r\n }\r\n\r\n const CriticalModal = () => {\r\n return { setShowCriticalModal(false) }}\r\n content={(\r\n
    \r\n

    Something when wrong!

    \r\n

    { criticalMessage }

    \r\n
    \r\n \r\n
    \r\n
    \r\n )}\r\n />\r\n }\r\n\r\n if (alerts.length) {\r\n switch(alerts[0].type) {\r\n case 'success':\r\n toast.error(alerts[0].message); \r\n break;\r\n case 'error':\r\n toast.success(alerts[0].message);\r\n break;\r\n case 'critical':\r\n \r\n setTimeout(() => {\r\n setCriticalMessage(alerts[0].message)\r\n setShowCriticalModal(true)\r\n });\r\n \r\n break;\r\n }\r\n }\r\n \r\n if (!appUserHasBeenValidated) {\r\n dispatch(isUserValid());\r\n return
    \r\n }\r\n\r\n return (\r\n
    \r\n {/*
    */}\r\n }\r\n />\r\n \r\n \r\n \r\n {/* */}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/*
    */}\r\n {/*
    \r\n \r\n
    \r\n

    Desktop only!

    \r\n

    A mobile friendly version will be available soon :-)

    \r\n
    \r\n
    */}\r\n
    \r\n );\r\n}\r\n\r\nexport default App;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { Provider } from 'react-redux';\r\nimport * as serviceWorker from './serviceWorker';\r\n\r\nimport App from './App';\r\nimport store from './store'\r\n\r\nimport './index.scss';\r\n\r\n\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n);\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n","module.exports = __webpack_public_path__ + \"static/media/logobanner.260255f2.jpg\";"],"sourceRoot":""}