{"version":3,"sources":["webpack:///src/modules/business-sign-up/components/sign-up-button.tsx?37a3","webpack:///src/modules/business-sign-up/components/sign-up-error.tsx?fbb9","webpack:///src/modules/business-sign-up/components/sign-up-input.tsx?4011","webpack:///src/modules/business-sign-up/components/sign-up-label.tsx?2025","webpack:///src/modules/business-sign-up/business-sign-up.tsx?df21","webpack:///./src/themes/gardner-theme/views/invoices-list.view.tsx?057a","webpack:///./node_modules/@msdyn365-commerce-modules/chat/node_modules/uuid/dist/esm-browser/rng.js?7d39","webpack:///./node_modules/@msdyn365-commerce-modules/chat/node_modules/uuid/dist/esm-browser/regex.js?255d","webpack:///./node_modules/@msdyn365-commerce-modules/chat/node_modules/uuid/dist/esm-browser/stringify.js?688d","webpack:///./node_modules/@msdyn365-commerce-modules/chat/node_modules/uuid/dist/esm-browser/validate.js?f4cd","webpack:///./node_modules/@msdyn365-commerce-modules/chat/node_modules/uuid/dist/esm-browser/v4.js?0bec","webpack:///src/modules/msdyn365-pva-chat-connector/proactive/triggers/proactive-chat-trigger.ts?53ff","webpack:///src/modules/msdyn365-pva-chat-connector/proactive/triggers/cart-amount-trigger.ts?f249","webpack:///src/modules/msdyn365-pva-chat-connector/proactive/triggers/cart-number-of-items-trigger.ts?6e2a","webpack:///src/modules/msdyn365-pva-chat-connector/proactive/triggers/cart-specific-product-trigger.ts?f770","webpack:///src/modules/msdyn365-pva-chat-connector/helpers/consts.ts?29a6","webpack:///src/modules/msdyn365-pva-chat-connector/proactive/triggers/date-range-trigger.ts?7473","webpack:///src/modules/msdyn365-pva-chat-connector/proactive/triggers/from-specific-page-trigger.ts?c7f8","webpack:///src/modules/msdyn365-pva-chat-connector/proactive/triggers/page-visits-trigger.ts?f742","webpack:///src/modules/msdyn365-pva-chat-connector/proactive/triggers/specific-CountryRegion-trigger.ts?53fd","webpack:///src/modules/msdyn365-pva-chat-connector/proactive/triggers/specific-page-trigger.ts?4028","webpack:///src/modules/msdyn365-pva-chat-connector/proactive/triggers/wait-on-time-trigger.ts?3c0b","webpack:///src/modules/msdyn365-pva-chat-connector/proactive/index.ts?dd07","webpack:///src/modules/msdyn365-pva-chat-connector/helpers/ContextProvider.ts?3993","webpack:///src/modules/msdyn365-pva-chat-connector/helpers/StyleComposers.ts?47f6","webpack:///src/modules/msdyn365-pva-chat-connector/helpers/CommerceChatStore.ts?a21c","webpack:///src/modules/msdyn365-pva-chat-connector/components/ChatCore.tsx?8272","webpack:///src/modules/msdyn365-pva-chat-connector/components/Chat.tsx?d24f","webpack:///src/modules/msdyn365-pva-chat-connector/msdyn365-pva-chat-connector.view.tsx?1da7","webpack:///src/modules/account-customer-balance-tile/components/account-customer-balance-tile-info.tsx?a91f","webpack:///./src/themes/gardner-theme-b2c/views/checkout-order-confirmation.view.tsx?761d","webpack:///src/modules/back-top-footer/back-top-footer.tsx?0e13","webpack:///src/modules/cookie-compliance/components/accept-button.tsx?1709","webpack:///src/modules/cookie-compliance/components/links.tsx?807e","webpack:///src/modules/cookie-compliance/cookie-compliance.tsx?5f7e","webpack:///src/modules/adventureworks/views/components/promocode.component.tsx?6e07","webpack:///./src/themes/gardner-theme/views/media-gallery.view.tsx?70ec","webpack:///src/modules/fabrikam/views/navigation-menu.view.tsx?5991","webpack:///src/modules/loyalty-sign-up/components/loyalty-sign-up-small-components.tsx?d781","webpack:///src/modules/loyalty-sign-up/loyalty-sign-up.tsx?f29d","webpack:///src/modules/account-customer-balance-tile/account-customer-balance-tile.view.tsx?955a","webpack:///./src/themes/gardner-theme/views/components/OrderConfirmationDetail.tsx?6fd7","webpack:///./src/themes/gardner-theme/views/checkout-order-confirmation.view.tsx?de6a","webpack:///src/modules/fabrikam/views/search-result-container.view.tsx?f8ea","webpack:///src/modules/adventureworks/views/content-block.view.tsx?ebaa","webpack:///./src/modules/gdn-invoices-list/gdn-invoices-list.view.tsx?0e62","webpack:///src/modules/account-customer-balance-tile/components/account-customer-balance-tile-links.tsx?5f47","webpack:///src/modules/business-sign-up/business-sign-up.view.tsx?578b","webpack:///./src/themes/gardner-theme-b2c/views/media-gallery.view.tsx?008f","webpack:///./src/themes/gardner-theme-b2c/views/invoices-list.view.tsx?c86d","webpack:///src/modules/account-customer-balance-tile/account-customer-balance-tile.tsx?9383","webpack:///src/modules/loyalty-sign-up/loyalty-sign-up.view.tsx?ed3f","webpack:///./src/themes/gardner-theme/views/order-history.view.tsx?67fe","webpack:///./src/modules/gdn-invoices-list/components/invoice-error-component.tsx?a4eb","webpack:///./src/modules/gdn-invoices-list/components/invoices-filter-component.tsx?1878","webpack:///./src/modules/gdn-invoices-list/components/invoices-table/components/invoices-table-header-component.tsx?c4e8","webpack:///./src/modules/gdn-invoices-list/helpers/invoice-status.ts?5fb3","webpack:///./src/modules/gdn-invoices-list/helpers/pay-invoices.ts?82ea","webpack:///./src/modules/gdn-invoices-list/components/pay-invoice-component.tsx?092b","webpack:///./src/modules/gdn-invoices-list/components/request-invoice-button.tsx?f5e0","webpack:///./src/modules/gdn-invoices-list/components/invoices-table/components/invoices-table-row-component.tsx?bdd9","webpack:///./src/modules/gdn-invoices-list/components/invoices-table/invoices-table-component.tsx?bc76","webpack:///./src/modules/gdn-invoices-list/components/make-payment-component.tsx?4f74","webpack:///./src/modules/gdn-invoices-list/components/request-invoice-modal.tsx?cee8","webpack:///./src/modules/gdn-invoices-list/helpers/invoice-data.ts?32b6","webpack:///./src/modules/gdn-invoices-list/gdn-invoices-list.tsx?431b","webpack:///src/modules/loyalty-terms/components/loyalty-terms-modal.tsx?c84d","webpack:///src/modules/loyalty-terms/loyalty-terms.tsx?0629","webpack:///src/modules/cookie-compliance/cookie-compliance.view.tsx?b30b","webpack:///src/modules/product-comparison-button/product-comparison-button.tsx?934c","webpack:///src/modules/msdyn365-pva-chat-connector/msdyn365-pva-chat-connector.tsx?df0e","webpack:///./src/themes/gardner-theme-b2c/views/order-history.view.tsx?3c72","webpack:///src/modules/loyalty-terms/loyalty-terms.view.tsx?5155","webpack:///src/modules/product-comparison-button/product-comparison-button.view.tsx?68cc","webpack:///./src/themes/gardner-theme/views/checkout-section-container.view.tsx?30c1","webpack:///src/modules/adventureworks/views/footer-item.view.tsx?9747"],"names":["SignUpButton","_ref","id","className","text","ariaLabel","telemetryContent","disabled","link","onClick","payLoad","getPayloadObject","attributes","getTelemetryAttributes","React","Button","Object","assign","role","href","SignUpError","type","message","errorClassName","classnames","GetMaxLength","maxLength","parsedMaxLength","Number","parseInt","isNaN","SignUpInput","value","pattern","isRequired","onChange","fieldReference","InputType","TextArea","name","undefined","ref","SignUpLabel","forId","htmlFor","InputID","renderInputSection","inputs","needToReset","onInputChange","showErrors","addressForm","updateAddress","map","element","index","label","maxChars","customClass","baseSignUpItem","wrapper","errorMessage","Address","isAddressInput","input","updateForm","hasError","resetAddress","splice","BusinessSignUp","constructor","props","_this","super","this","BusinessSignUpDefaultInputs","FirstName","Text","resources","firstNameLabel","LastName","lastNameLabel","Email","emailAddressLabel","EmailRegex","defaultRegex","source","CompanyName","companyLabel","Department","departmentLabel","JobTitle","jobTitleLabel","Size","companySizeLabel","companyAddressLabel","Comment","commentLabel","formChildReference","moduleClassName","needsToReset","handleHeadingChange","event","config","heading","target","_onInputChange","newForm","state","formItems","forEach","item","setState","isReady","_isFormReady","hasSubmitErrors","_onAddressChange","errors","currentAddress","addressItem","find","address","addressHasErrors","showAddressErrors","currentInput","match","_onSubmit","preventDefault","context","firstName","_getItem","lastName","companyName","companyEmail","companyAddress","jobTitle","department","companySize","comments","newPartner","CompanySize","Comments","createProspectAsync","callerContext","actionContext","then","successPageURL","confirmationLink","linkUrl","destinationUrl","getUrlSync","window","location","catch","_onCancel","cleanForm","isAddress","arguments","length","_addedReference","getTelemetryObject","request","telemetryPageName","friendlyName","telemetry","componentDidMount","_this$formChildRefere","current","focus","shouldComponentUpdate","nextProps","nextState","data","render","viewProps","_objectSpread","businessSignUp","moduleProps","ContainerWrapper","editProps","onEdit","requestContext","businessSignUpForm","_renderForm","renderView","slots","signUpButtonArialabel","signUpButtonText","cancelButtonArialabel","cancelButtonText","partialAddressErrorMessage","addressSlot","form","FormWrapper","items","buttons","key","disclaimer","RichTextComponent","newFormFields","InvoiceListView","header","filter","content","invoiceRequestModal","pagination","Module","getRandomValues","rnds8","Uint8Array","rng","crypto","bind","msCrypto","Error","validate","uuid","REGEX","test","byteToHex","i","push","toString","substr","stringify","arr","offset","toLowerCase","TypeError","v4","options","buf","rnds","random","ProactiveChatTrigger","CartAmountTrigger","totalInCart","min","proactiveOnCartAmountMin","max","proactiveOnCartAmountMax","debug","cart","_getCart","isEmpty","TotalAmount","retVal","getContextProvider","eCommerceCustIsProactiveChat","eCommerceCustProactiveType","eCommerceCustProactiveShoppingCartAmount","getMessage","proactiveOnCartAmountMessage","proactiveDefaultMessage","getCartState","CartNumberOfItemsTrigger","numberOfItems","proactiveOnCartNoOfItemsMin","proactiveOnCartNoOfItemsMax","TotalItems","eCommerceCustProactiveShoppingCartNumberOfItems","proactiveOnCartNoOfItemsMessage","CartSpecificProductTrigger","product","isValid","CartLines","_cart$cart$CartLines","_cart$cart$CartLines2","proactiveOnCartSpecificProductList","_this$props$config$pr","j","_this$props$config$pr2","ItemId","eCommerceCustProactiveShoppingCartSpecificProduct","proactiveOnCartSpecificProductMessage","ProactiveChatNames","DateRangeTrigger","start","_toDate","proactiveOnDateRangeStart","end","proactiveOnDateRangeEnd","now","Date","setHours","getTime","DateRange","eCommerceCustProactiveFromDate","toUTCString","eCommerceCustProactiveToDate","proactiveOnDateRangeMessage","date","dateParts","split","FromSpecificPageTrigger","proactiveOnFromSpecificPageList","fromSpecificPageTrimmed","trim","document","referrer","indexOf","FromSpecificPage","eCommerceCustProactiveCameFromPage","proactiveOnFromSpecificPageMessage","PageVisitTrigger","visits","cookieName","cookies","expdate","setTime","isConsentGiven","setConsentCookie","_updateVisitCounter","proactiveOnPageVisitNumber","clear","set","domain","hostname","path","pathname","expires","PageVisits","eCommerceCustProactiveNumberOfVisits","proactiveOnPageVisitMessage","get","SpecificCountryRegionTrigger","customerCountryCode","suggestedMarket","proactiveOnSpecificLocation","eCommerceCustProactiveCountryCode","SpecificLocation","proactiveOnSpecificCountryRegionMessage","SpecificPageTrigger","proactiveOnSpecificPageList","specificPageTrimmed","SpecificPage","proactiveOnSpecificPageMessage","WaitOnTimeTrigger","proactiveOnWaitTimeSeconds","waitTimeInMilliseconds","triggerTime","WaitOnTime","eCommerceCustProactiveTimeOnPage","proactiveOnWaitTimeMessage","ProactiveTriggers","ContextProvider","user","userId","uuidv4","_getContext","enabled","timeout","_proactiveCheck","e","exception","provider","_getProvider","_this$props$context$r","eCommerceOperatingUnitNumber","apiSettings","oun","eCommerceBaseUrl","baseUrl","eCommerceDataAreaId","channel","InventLocationDataAreaId","UserId","AccountNumber","customerAccountNumber","emailAddress","anonymousUserName","Name","eCommerceCustPageURL","eCommerceCustChatType","proactiveChatEnabled","proactive","_isProactive","getChatWrapperStyle","position","top","right","bottom","left","zIndex","display","justifyContent","getMaximizedChatWrapperStyle","isMobileDevice","height","width","padding","chatHeight","chatWidth","getChatButtonStyle","alignItems","backgroundColor","startChatButtonBackgroundColor","color","startChatButtonTextColor","borderColor","startChatButtonBorderColor","borderRadius","startChatButtonBorderRadius","borderStyle","startChatButtonBorderStyle","borderWidth","startChatButtonBorderWidth","storeLogoURL","cursor","outlineStyle","alignSelf","boxShadow","WebkitBoxShadow","MozBoxShadow","getButtonStoreLogoStyle","headerBackgroundColor","headerTextColor","marginRight","boxSizing","getChatStoreLogoStyle","margin","getChatMessagesStyle","minimized","getChatMessageHeader","chatHeaderHeight","backgroundImage","headerBackgroundImageURL","backgroundRepeat","flexDirection","chatBorderStyle","chatBorderWidth","getMinimizeButtonStyle","borderTop","borderLeft","borderRight","borderBottom","marginTop","getCloseButtonStyle","border","getChatMessageContent","chatBorderColor","getProactiveWrapperStyle","getProactiveMessageHeader","getProactiveMessageContent","getProactiveButtonStyle","outline","fontFormat","font","join","CommerceChatStore","setNewMessage","setNewMessageAction","powervaDirectlineTokenURL","botID","tenantID","url","fetch","method","r","json","token","app","pvaChatConnectorPowervaDirectlineTokenURL","pvaChatConnectorBotID","pvaChatConnectorTenantID","dispatch","next","action","payload","language","navigator","_activity$from","activity","from","triggerQuery","ChatCore","ReactWebChat","WebChat","setUserId","useState","useMemo","ctx","directLine","createDirectLine","directLineToken","commerceChatStore","store","createStore","actionHandler","styleOptions","bubbleStyling","bubbleBackground","bubbleTextColor","bubbleBorderColor","bubbleBorderRadius","bubbleBorderStyle","bubbleBorderWidth","bubbleFromUserBackground","bubbleFromUserTextColor","bubbleFromUserBorderColor","bubbleFromUserBorderRadius","bubbleFromUserBorderStyle","bubbleFromUserBorderWidth","getBubbleStyling","avatarStyling","avatarBorderRadius","avatarSize","botAvatarBackgroundColor","botAvatarImage","botAvatarInitials","userAvatarBackgroundColor","userAvatarImage","userAvatarInitials","showAvatarInGroup","getAvatarStyling","suggestedActionStyling","suggestedActionLayout","suggestedActionBackground","suggestedActionTextColor","suggestedActionBorderColor","suggestedActionBorderRadius","suggestedActionBorderStyle","suggestedActionBorderWidth","suggestedActionDisabledBorderStyle","suggestedActionDisabledBorderWidth","suggestedActionDisabledTextColor","suggestedActionHeight","suggestedActionImageHeight","suggestedActionsCarouselFlipperCursor","suggestedActionsCarouselFlipperBoxWidth","suggestedActionsCarouselFlipperSize","suggestedActionsFlowMaxHeight","suggestedActionsStackedHeight","suggestedActionsStackedOverflow","suggestedActionsStackedLayoutButtonMaxHeight","suggestedActionsStackedLayoutButtonTextWrap","getSuggestedActionStyling","otherStyling","groupTimestamp","sendTimeout","sendTimeoutForAttachments","timestampColor","timestampFormat","notificationDebounceTimeout","hideToaster","toasterHeight","toasterMaxHeight","toasterSingularMaxHeight","toastFontSize","toastIconWidth","toastSeparatorColor","toastTextPadding","toastErrorBackgroundColor","toastErrorColor","toastInfoBackgroundColor","toastInfoColor","toastSuccessBackgroundColor","toastSuccessColor","toastWarnBackgroundColor","toastWarnColor","typingAnimationBackgroundImage","typingAnimationDuration","typingAnimationHeight","typingAnimationWidth","videoHeight","markdownExternalLinkIconImage","markdownRespectCRLF","internalLiveRegionFadeAfter","accent","subtle","getOtherStyling","hideUploadButton","primaryFont","getChatStyleOptions","createElement","userID","Chat","loaded","setLoaded","setMinimized","newMessage","setToken","isProactive","setIsProactive","proactiveMessage","setProactiveMessage","closed","setClosed","setProvider","isMobile","variant","VariantType","Browser","Viewport","chatStyle","getChatStyling","ChatWrapperStyle","MaximizedChatWrapperStyle","ChatButtonStyle","ButtonStoreLogoStyle","ChatStoreLogoStyle","ChatMessagesStyle","ChatMessageHeader","MinimizeButtonStyle","CloseButtonStyle","ChatMessageContent","ProactiveWrapperStyle","ProactiveMessageHeader","ProactiveMessageContent","ProactiveButtonStyle","RedDotStyle","background","handleMaximizeButtonClick","useEffect","getDirectLineToken","contextProvider","prov","init","setTimeout","isValidToken","style","src","alt","fontWeight","fontSize","chatButtonHeader","chatButtonText","flexGrow","handleMinimizeButtonClick","handleCloseButtonClick","version","viewBox","xmlSpace","d","fill","unableToLoadChatMessage","p","interval","setInterval","clearInterval","ErrorComponent","error","CreditComponent","_ref2","verbagePrefix","verbagePostfix","OrderConfirmationOrderInfomation","orderInformationProps","Node","OrderConfirmationSalesLine","salesLineProps","salesLine","buyAgainButton","OrderConfirmationGroupDelivery","_ref3","deliveryProps","count","processing","pickupDateTimeslot","trackingInfo","OrderConfirmationGroup","_ref4","groupProps","delivery","salesLinesProps","salesLines","LineId","OrderConfirmationGroups","_ref5","groupsProps","groups","group","OrderConfirmationOrderSummary","_ref6","orderSummaryProps","subtotal","shipping","tax","totalAmount","earnedPoints","OrderConfirmationPayment","_ref7","paymentMethodsProps","title","methods","OrderConfirmationHelp","_ref8","helpProps","needHelpLabel","helpLineNumberLabel","contactNumber","OrderConfirmationView","_ref9","backToShoppingLink","alert","loading","orderSummary","payment","help","BackTopFooter","backtoTopText","destination","BackToTop","CookieComplianceAcceptButton","acceptCookiesButtonText","acceptCookiesButtonAriaLabel","onClose","CookieComplianceLinks","_mapEditableLinks","linkdata","editableLinks","linkText","contentAction","etext","editableLink","openInNewTab","additionalProperties","onTelemetryClick","links","Msdyn365","onTextChange","CookieCompliance","handleLinkTextChange","linkIndex","_this$props$config$ac","actionLinks","handleContentChange","visible","cookieRef","_onDismiss","acceptCookiesAriaLabel","moduleConfig","MsDyn365","isBrowser","onDismiss","CookieComplianceBanner","AlertProps","fade","Content","ArrayExtensions","hasElements","acceptButton","reload","PromoCode","_onInputChangeHandler","promoCodeInputValue","canApply","_applyPromotion","cartState","appliedPromo","addPromoCode","promoCode","result","status","substatus","duplicatePromoCodeErrorText","invalidPromoCodeErrorText","failedToAddPromoCodeErrorText","_onSubmitHandler","applyPromotionHandler","promoPlaceholderText","promoCodeApplyButtonText","onSubmit","placeholder","_removePromotion","_event$currentTarget$","code","currentTarget","getAttribute","removePromoCodes","promoCodes","failedToRemovePromoCodeErrorText","_renderAppliedPromoCode","Coupons","removePromotionHandler","coupon","removePromoAriaLabelFormat","format","removePromoText","Code","TelemetryConstant","ApplyPromoCode","promoCodeHeadingText","renderThumbnailItem","thumbnail","ThumbnailItemContainerProps","Picture","GetEmptyThumbnailItemComponent","imageSettings","_props$config$thumbna2","tag","tabIndex","Image","gridSettings","thumbnailImageSettings","loadFailureBehavior","defaultThumbnailImageSettings","viewports","xs","q","w","h","xl","lazyload","cropFocalRegion","renderThumbnails","thumbnails","ThumbnailsContainerProps","SingleSlideCarouselComponentProps","Thumbnails","mediaGalleryItems","altText","getMediaGalleryItems","lastUpdate","GetThumbnailItemComponent","image","imageId","modifiedActiveIndex","_props$config$thumbna","_props$callbackToggle","_props$callbackThumbn","callbackToggle","call","callbackThumbnailClick","activeIndex","handleKeyDown","keyCode","KeyCodes","Enter","onKeyDown","fullScreenTitleText","mediaGalleryView","CarouselProps","MediaGallery","Modal","NavigationMenuView","currentLevel","_positionInSetOffset","escapeKey","_updateCategoryImage","categoryImageSrc","option","promotionalImage","promotionalContent","imageSrc","promotionalItemImageSettings","categoryImage","categoryImageAltText","_handleDropdownToggle","parentId","isMobileView","activeMenu","parentMenu","showCategoryImage","imageSource","_resetFocus","menuNode","_handleClickOutside","contains","_handleFocusOutside","relatedTarget","_closeSubmenu","_escFunction","navDrawerList","Array","childNodes","navDrawerButton","firstChild","_getCategoryImage","categoryImageUrl","generateImageUrl","defaultImageSettings","sm","md","lg","_categoryImage$imageS","ImageData","categoryImageSettings","_onDrawerChange","drawerState","drawerKeyValue","newPair","buttonText","isOpen","body","addEventListener","componentWillUnmount","removeEventListener","_renderMobileMenu","_renderDesktopMenu","menuItemData","Navigation","menuItem","posinset","_renderDrawerMenu","MenuList","_renderDisplay","setSize","subMenu","_renderDrawer","_renderLinkMenuItem","toggleButtonText","keyValue","keys","isDrawerOpen","colProps","Drawer","toggleButtonProps","openGlyph","onToggle","collapseProps","closeGlyph","glyphPlacement","_renderLinkText","menuSubItem","currentPos","_menuItem$subMenu2","_menuItem$subMenu","_renderDrawerLink","linkURL","_renderSpanMenuItem","ListItem","menuItemList","menuItemDatum","_getFromSubMenu","_createMenuItemList","subMenus","found","_renderSubMenu","_renderButtonMenuItem","IsSubMenu","enableMultiSupportMenu","enableMultilevelMenu","multiLevelSupportedMenu","menuLevelSupport","levelClassName","menuOptions","idx","hasOptions","haveSubmenu","Math","round","_renderMenu","onFocus","hoverEffect","isParent","Link","imagesource","shouldOpenNewTab","onMouseOver","_renderPromotionalLink","Span","level","currentItem","submenu","DivContainer","ImageDivContainer","showPromotionalContent","categoryImageDisplay","promotionalContentDisplay","DivContainerClass","_item$additionalPrope","SignUpText","LoyaltySignUp","handleMemberHeadingChange","memberHeading","_issueLoyalty","isAuthenticated","clicked","IssueLoyaltyInput","issueLoyalty","SignIn","loyaltySignInAttributes","SignUp","loyaltySignUpAttributes","LoyaltyDetailLink","loyaltyDetailsLinkAttributes","LoyaltyTermsLink","loyaltyTermsLinkAttributes","_data$customerInforma","_this$props$context$a","signInUrl","termsUrl","loyaltyJoinUrl","origin","signInurl","completeClass","classname","loyaltyCard","hasLoyaltyAccount","CardTenderTypeValue","customerInformation","invalidAsyncCustomerState","canRenderAsyncCustomerDataAsUnmodifiable","IsAsyncCustomer","infoMessageBar","accountProcessingPendingInfoMessage","params","isEditor","signInLink","joinLoyaltyButtonText","signUpText","loyaltyProgramText","signUpButton","detailsLink","viewLoyaltyPageText","termsLink","loyaltyTermsLinkText","__decorate","observer","AccountCustomerBalanceTileView","AccountCustomerBalanceTile","OrderConfirmationDetail","_salesOrder$ShippingA","_salesOrder$ShippingA2","_salesOrder$SalesLine","salesOrder","cultureFormatter","customer","deliveryMode","orderedProducts","attr","AttributeValues","s","print","TextValue","formatDate","CreatedDateTime","year","month","day","ShippingAddress","FullAddress","SalesLines","so","LineNumber","itemId","_orderedProducts$find","Description","Fragment","formatCurrency","Price","Quantity","_rest$data$checkout$r","_rest$data$checkout$r2","rest","_objectWithoutProperties","_excluded","dlvMode","setDlvMode","checkout","sessionStorage","getItem","removeItem","createSearchResultModal","modalProps","refineMenu","sortByDropDown","isRecoSearchPage","modal","modalHeader","createModalBody","modalFooter","modalBody","renderSort","renderRefiner","refiners","RefineMenuContainer","RefinerSectionContainer","SortingContainer","renderCategoryHierarchy","CategoryHierarchyContainer","categoryHierarchyList","categoryHierarchySeparator","category","renderTitle","TitleContainer","titlePrefix","titleText","titleCount","SearchResultContainerView","_props$context$action","SearchResultContainer","products","ProductsContainer","ProductSectionContainer","choiceSummary","modalToggle","searchResultModal","TitleViewProps","categoryHierarchy","sortByOptions","CategoryNavContainer","RefineAndProductSectionContainer","FeatureSearchContainer","similarLookProduct","query","recommendation","renderAdditionalContent","additionalContent","_additionalContent$ad","additionalContentNode","additionalContentItems","additionalContentItemContainer","additionalContentItemLinks","contentBlockView","contentBlockContainer","imageContainer","detailsContainer","contentBlockAnchorTag","imageLink","imageAriaLabel","imageClass","AccountCustomerBalanceTileLinks","BusinessSignUpItem","BusinesSignUpView","button","linksElements","querySelectorAll","console","log","l","setAttribute","_initState","reaction","apiGenericErrorMessage","customerResult","allowOnAccountPayment","AllowOnAccountPayment","isB2BSite","isChannelTypeB2B","enableCustomerAccountPayment","isCustomerAccountPaymentEnabled","Heading","headingTag","isDetailsLinkDisplayed","LinksComponent","account","Balance","CreditLimit","InvoiceAccountBalance","InvoiceAccountCreditLimit","noCreditErrorMessage","accountCreditVerbagePrefix","accountCreditVerbagePostfix","currencyCode","customerCredit","customerCreditFormatted","toFixed","computed","LoyaltySignUpView","OrderHistoryOrderInfomation","salesId","receiptId","channelName","createdDate","amount","channelReferenceId","OrderHistoryGroupDelivery","OrderHistoryGroup","OrderHistoryGroups","OrderHistoryHeader","headerProps","orderCountLabel","extraActions","OrderHistorySalesOder","salesOrderProps","orderInfomation","orderDetailsLink","expandProductsButton","OrderHistoryList","listProps","salesOrders","OrderHistoryView","orderHistoryProps","emptyMessage","list","table","moreButton","InvoiceErrorComponent","msdyn365Commerce","createComponent","component","messageHeader","otherError","showError","payInvoiceErrorModalOpen","errorDialogHeader","errorDialogBodyErrorTitle","errorDialogBodyErrorDescription","errorDialogFooterGoToCartButtonText","errorDialogFooterCancelButtonText","cartUrl","setPayInvoiceErrorModalClose","errorMessages","Alert","assertive","toggle","ModalHeader","ModalBody","ModalFooter","InvoicesFilterState","getInvoicesFilterStateResources","filterState","ShowAll","invoicesFilterShowAll","Paid","invoiceStatusPaid","PartiallyPaid","invoiceStatusPartiallyPaid","Unpaid","invoiceStatusUnpaid","onClickHandler","onStateClick","InvoicesFilterComponent","popoverRef","createRef","popoverState","setPopoverState","togglePopover","useCallback","setFilterState","currentState","onFilterStateClick","clickedState","onFilterStateChanged","innerRef","Popover","placement","EnumExtensions","getEnumValues","renderFilterStateItem","stateStringRepresentation","InvoicesTableHeaderComponent","rowClassName","switchCheckedState","onSelectAll","isSelectedAll","headerCells","getMobileHeaderCells","invoiceListSelectAllRadioAriaLabelText","checked","invoicesText","invoiceDateMobileText","getDesktopHeaderCells","invoiceNumberText","invoiceDateText","invoiceUsersText","invoiceAmountText","invoiceDueDateText","invoiceAmountDueText","invoiceStatusText","invoiceActionsText","getInvoiceStatusText","invoiceStatus","InvoicePaidStatus","None","invoiceStatusNone","payInvoices","async","invoices","onError","invoicesToAdd","invoice","canBePaid","errorReason","failureReason","addInvoicesToCart","invoiceIds","_result$errorDetails","_result$errorDetails2","errorDetails","LocalizedMessage","errorCode","ErrorResourceId","_window","PayInvoiceComponentActions","_event","setDisabled","errorState","reference","PayInvoiceComponent","payInvoiceButtonAriaLabel","payInvoiceButtonText","RequestInvoiceButton","onClicked","requestInvoiceButtonLabel","innerReference","formatAmount","onRequestSpecificInvoice","requestInvoiceButtonReference","onRequestInvoice","setShowPreviousActions","onClickViewDetails","linkToInvoiceDetails","isShowActions","setShowActions","shouldShowActions","extraActionsPopup","invoiceViewDetailsButtonAriaLabel","invoiceViewDetailsButtonText","invoiceActionsButtonTextAriaLabel","invoiceActionsButtonIsOnBehalfOfTextAriaLabel","showActions","isOnBehalfOfRequest","isOboRequest","getInvoiceDetailsPageUrlSync","actionsContainerClassName","payInvoiceClassName","checkIfCreditNote","typeName","payInvoiceReferences","invoiceReferences","invoiceRequestButtonLabel","InvoicesTableRowComponent","onSelectLine","isSelected","rowCells","getMobileRowCells","invoiceRowArialabel","invoiceListSelectRadioAriaLabelText","customerName","dueDate","getDesktopRowCells","isCurrentUser","StringExtensions","isNullOrWhitespace","invoiceDate","invoiceCurrentUser","amountDue","viewport","device","Type","innerWidth","getViewport","onSelectAllHandler","InvoicesTableComponent","setIsMobile","updateViewport","headerClassName","all","isAdmin","IsB2bAdmin","invoiceButtonReferences","payInvoiceButtonReferences","MakePaymentComponentActions","buttonReferences","MakePaymentComponent","hasInvoices","makePaymentButtonAriaLabel","makePaymentButtonText","onSubmitRequestClick","onClosing","filteredInvoices","onSubmitRequest","checkboxRef","closingFlag","_inputInvoice$current","searchInputChangedHandler","setSearchInput","onCancelHandler","renderInvoiceOptions","setSelectedInvoiceIndex","_invoice","_checkboxRef$current$","onInvoiceSelect","onInvoiceSelectHandler","checkboxId","checkboxName","RequestInvoiceModal","email","isModalOpen","modalHeaderLabel","sendToEmailLabel","submitRequestLabel","cancelLabel","searchPlaceholderLabel","invoicesFoundString","singleInvoiceFoundString","searchButtonAltText","selectedInvoiceIndex","setFilteredInvoices","searchInput","shouldShowSearchResults","setShouldShowSearchResults","invoiceOptionsData","invoiceOptions","setInvoiceOptions","focusElement","_focusElement$current","searchEntered","searchEnteredHandler","updatedInvoices","isNullOrEmpty","toLocaleUpperCase","includes","searchResultString","invoicesFoundReplaceIndex","horizontalPosition","verticalPosition","autoFocus","onOpened","setFilteredInvoicesToSelectedInvoices","selectedInvoices","requestInvoiceDialogAriaLabel","substring","InvoiceModel","Id","InvoiceDate","CustomerAccountNumber","CustomerName","InvoiceDueDate","AmountBalance","InvoicePaidStatusValue","CurrencyCode","InvoicesList","_this$props$config","getInvoiceType","invoiceTypes","_className","buttonChildReference","buttonChildPayButtonReference","_onToggleInvoiceRequestParentModal","selectedButtonElement","payInvoiceRequestReference","_onToggleInvoiceRequestModal","_queryResultSettings","QueryResultSettingsProxy","fromModuleData","QueryResultSettings","makePaymentReference","_updateInvoicesState","_onAddToCartFailed","_handleFilterStateChange","_loadMoreInvoices","_requestInvoice","_requestSpecificInvoice","_setPayInvoiceErrorModalClose","invoicesFilterState","isLoading","isPageLoaded","isInvoiceRequestModalOpen","_customerBalance$resu","_customerBalance$resu2","_heading$text","customerBalance","invoicesListTitle","invoicesListDescTitle","invoicesListDescCount","amountText","OpenInvoiceBalance","Currency","totalCount","OpenInvoiceCount","countText","replace","invoicesListTitleHeading","_renderInvoiceRequestModal","_renderInvoicesFilter","_renderPagination","_renderListContainer","_renderEmptyInvoiceLinesPageContent","invoicesData","_initializeWithInvoices","_this$props$data$b2bU","b2bUserId","b2bUserInformation","B2BUserId","invoiceId","BusinessPartnerUsersDataActions","requestInvoiceCopyAsync","BusinessPartnerOperationDeliveryType","_addInvoices","newInvoices","concat","containerClass","actionsContainerClass","invoiceEmptyInvoiceLinesTitle","invoiceEmptyInvoiceLinesDescription","invoiceEmptyInvoiceLinesContinueShoppingButtonAriaLabel","invoiceEmptyInvoiceLinesContinueShoppingButtonText","containerHeaderClass","containerContentClass","_renderMakePayment","_renderInvoiceRequestButton","_renderInvoiceErrors","_renderInvoicesList","searchCriteria","businessPartner","getCurrentAsync","BusinessPartnerId","getCustomer","GetCustomerInput","CustomerId","InvoicePaidStatusValues","_getInvoicesSearchCriteria","Paging","Skip","getGdnInvoices","GetGdnInvoicesInput","filterClassName","_renderInvoiceInCartPaymentMessage","tableClassName","newErrorState","_newErrorState$errorR","errorHost","invoiceErrorInvoiceIdNotExist","invoiceErrorFailedAddInvoiceToCart","shouldShowAdditionalInfoInPopup","makePaymentResources","_getSelectedInvoices","moduleId","moduleTypeName","navigationUrl","_this$state$selectedB","payInvoiceErrorDialogHeader","payInvoiceErrorDialogBodyErrorTitle","payInvoiceErrorDialogBodyErrorDescription","payInvoiceErrorDialogFooterGoToCartButtonText","payInvoiceErrorDialogFooterCancelButtonText","invoiceErrorMessageHeader","_this$props$data$cart","hasInvoiceLine","invoiceInCartPaymentMessage","_data$invoices","Top","invoicesLoadMore","invoiceRequestModalCancelLabel","invoiceRequestModalSubmitLabel","invoiceRequestModalHeaderLabel","invoiceRequestModalSendToEmailLabel","invoiceRequestModalSearch","invoiceRequestModalInvoiceSearchDisplay","invoiceRequestModalSingleInvoiceSearchDisplay","invoiceRequestModalSearchButton","_this$state$selectedB2","specificInvoice","LoyaltyTermsModal","LoyaltyTermsCancel","loyaltyTermCancelAttributes","LoyaltyTermsSubmit","loyaltyTermSubmitAttributes","LoyaltyTermsAgree","loyaltyTermCheckboxAttributes","applicationNode","returnFocusRef","returnRef","cancelButton","cancelLoyaltyTermsText","submitButton","joinLoyaltyTermsText","loyaltyTermsHeading","terms","agreeSection","checkbox","onCheck","agreeText","loyaltyAgreeToTerms","LoyaltyTerms","_toggle","_submit","_checkboxChecked","toggleRef","search","requestUrl","isJoining","qsps","qsp","splitQsp","hideToggle","serviceTerms","joinLoyaltytermsToggleText","CardNumber","card","redirectToLoyalty","getLoyaltyCardAsync","fullCard","update","GetLoyaltyCardInput","CookieComplianceView","ProductComparisonButton","PureComponent","_addToProductComparison","_this$props$data$acco","ProductComparisonItem","RecordId","catalogId","ProductComparisonState","instance","accountInformation","addItem","_removeFromProductComparison","_this$props$data$acco2","removeItemById","comparisonItemId","_getNewState","_this$props$data$acco3","getItemId","_getProdutComparisonDataByCatalogId","canProductBeAddedToProductComparison","hasItemById","currentProductsCount","_instanceId","Random","Guid","generateGuid","_shouldUsePreview","_productComparisonPreview","_renderProductComparisonPreview","productComparisonPreview","isDisabled","ObjectExtensions","isNullOrUndefined","_this$props$data$acco4","listModifiedEvent","subscribe","instanceId","handler","getSnapshotBeforeUpdate","previousProps","_this$props$data$acco5","unsubscribe","buttonClassName","shouldDisplayText","removeFromComparisonButtonText","productComparisonButton","_renderProductComparisonButton","productsLimit","_getProductsLimit","addToComparisonLimitReachedButtonText","addToComparisonButtonText","productComparisonMobileProductsLimit","productComparisonDesktopProductsLimit","_this$props$data$acco6","_items$filter","getCatalogId","PvaChatConnector","botFrameworkCDNURL","pvaChatConnectorBotFrameworkCDNURL","script","crossOrigin","appendChild","LoyaltyTermsView","ProductComparisonButtonViewFunctionalComponent","ItemComponent","itemProps","CheckoutSectionContainerView","checkoutPlainContainerProps","FooterItemView","FooterItem","_renderElement","HeadingContainer","EditableLink"],"mappings":"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","file":"static/js/10.eeb06e2f63f8e919fc6a.chunk.js","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IBusinessSignUpButtonProps {\n id?: string;\n className: string;\n text: string;\n ariaLabel: string;\n disabled?: boolean;\n link?: string;\n telemetryContent: ITelemetryContent;\n onClick?(event: React.MouseEvent): void;\n}\n\nexport const SignUpButton: React.FC = ({\n id,\n className,\n text,\n ariaLabel,\n telemetryContent,\n disabled,\n link,\n onClick\n}) => {\n const payLoad = getPayloadObject('click', telemetryContent, text);\n const attributes = getTelemetryAttributes(telemetryContent, payLoad);\n return (\n \n {text}\n \n );\n};\n\nexport default SignUpButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nexport interface IBusinessSignUpErrorProps {\n id?: string;\n className: string;\n type?: string;\n message?: string;\n}\n\nexport const SignUpError: React.FC = ({ id, className, type = 'page', message }) => {\n const errorClassName = `${className}__${type}-error`;\n\n return (\n \n

{message}

\n \n );\n};\n\nexport default SignUpError;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { InputType } from '../business-sign-up';\n\nexport interface IBusinessSignUpInputProps {\n id?: string;\n type: InputType;\n value?: string;\n pattern?: string;\n className: string;\n maxLength?: string;\n isRequired: boolean;\n fieldReference?: React.RefObject;\n onChange?(event: React.ChangeEvent): void;\n}\n\nexport interface IBusinessSignUpInput {\n key: string;\n AddressItem: INodeProps;\n label: React.ReactNode;\n alert: React.ReactNode;\n input: React.ReactNode;\n}\n\nconst GetMaxLength = (maxLength?: string): number | undefined => {\n if (maxLength) {\n const parsedMaxLength = Number.parseInt(maxLength, 10);\n if (!isNaN(parsedMaxLength)) {\n return parsedMaxLength;\n }\n }\n\n return undefined;\n};\n\nexport const SignUpInput: React.FC = ({\n id,\n type,\n value,\n pattern,\n className,\n maxLength,\n isRequired,\n onChange,\n fieldReference\n}) => {\n if (type === InputType.TextArea) {\n return (\n \n );\n }\n\n return (\n \n );\n};\n\nexport default SignUpInput;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface IBusinessSignUpLabelProps {\n id: string;\n forId: string;\n className: string;\n text: string;\n}\n\nexport const SignUpLabel: React.FC = ({ id, forId, className, text }) => (\n \n);\n\nexport default SignUpLabel;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ContentEditableEvent, getUrlSync, RichTextComponent, Text } from '@msdyn365-commerce/core';\nimport { Address, BusinessPartnerProspect } from '@msdyn365-commerce/retail-proxy';\nimport { createProspectAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/BusinessPartnersDataActions.g';\nimport { EmailRegex } from '@msdyn365-commerce-modules/retail-actions';\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IBusinessSignUpConfig, IBusinessSignUpProps } from './business-sign-up.props.autogenerated';\nimport { SignUpButton, SignUpError, SignUpInput, SignUpLabel } from './components';\n\nexport interface IBusinessSignUpExtendedProps extends IBusinessSignUpProps {\n formItems?: IFormItem[];\n}\n\nexport interface IBusinessSignUpItem {\n wrapper: INodeProps;\n isAddressInput?: boolean;\n id: string;\n label: React.ReactNode;\n errorMessage: React.ReactNode;\n input?: React.ReactNode;\n}\n\nexport interface IBusinessState {\n isReady: boolean;\n formItems: IFormItem[];\n addressHasErrors: boolean;\n showAddressErrors: boolean;\n hasSubmitErrors: boolean;\n}\n\nexport interface IBusinessSignUpLocalAccount {\n FormWrapper: INodeProps;\n items: IBusinessSignUpItem[];\n buttons: React.ReactNode[];\n errorMessage: React.ReactNode[];\n disclaimer: React.ReactNode;\n}\n\nexport interface IBusinessSignUpViewProps {\n className: string;\n businessSignUp: IModuleProps;\n ContainerWrapper: INodeProps;\n heading: React.ReactNode;\n businessSignUpForm: IBusinessSignUpLocalAccount;\n formItems: IFormItem[];\n}\n\nexport interface IFormItem {\n id: string;\n type: InputType;\n label: string;\n value: string;\n maxChars?: string;\n isRequired: boolean;\n pattern?: string;\n address?: Address;\n customClass?: string;\n fieldReference?: React.RefObject;\n}\n\nexport enum InputType {\n // eslint-disable-next-line @typescript-eslint/no-shadow -- Text enum doesn't override the imported Text\n Text = 'text',\n Address = 'address',\n Email = 'email',\n TextArea = 'textarea'\n}\n\nexport enum InputID {\n FirstName = 'FirstName',\n LastName = 'LastName',\n Email = 'CompanyEmail',\n CompanyName = 'CompanyName',\n Address = 'CompanyAddress',\n JobTitle = 'JobTitle',\n Size = 'CompanySize',\n Department = 'Department',\n Comment = 'Comment'\n}\n\nexport const renderInputSection = (\n inputs: IFormItem[],\n className: string,\n needToReset: boolean,\n onInputChange: (event: React.ChangeEvent) => void,\n showErrors: boolean,\n addressForm?: React.ReactNode,\n updateAddress?: (errors: boolean, currAddress?: Address) => void\n): IBusinessSignUpItem[] => {\n return inputs.map((element, index) => {\n const { id, type, label, maxChars, isRequired, pattern, customClass, value, fieldReference } = element;\n\n const baseSignUpItem: IBusinessSignUpItem = {\n wrapper: {\n className: classnames(className, `${className}-${id}`, customClass)\n },\n id,\n label: ,\n errorMessage: \n };\n\n if (type === InputType.Address) {\n if (addressForm) {\n baseSignUpItem.isAddressInput = true;\n baseSignUpItem.input = (\n <>\n {React.cloneElement(addressForm as React.ReactElement, {\n updateForm: updateAddress,\n hasError: showErrors,\n isRequired: isRequired === undefined ? false : isRequired,\n resetAddress: needToReset\n })}\n \n );\n } else {\n // If the address slot is not filled, remove this input from the form\n inputs.splice(index, 1);\n }\n } else {\n baseSignUpItem.input = (\n \n );\n }\n\n return baseSignUpItem;\n });\n};\n\n/**\n *\n * Business Request Form Modules\n * Form that a business can use to submit a request to become a partner with Microsoft.\n * @extends {React.Component>}\n */\nclass BusinessSignUp extends React.Component {\n // Used as default data\n public BusinessSignUpDefaultInputs: IFormItem[] = [\n {\n id: InputID.FirstName,\n type: InputType.Text,\n label: this.props.resources.firstNameLabel,\n value: '',\n isRequired: true,\n customClass: 'width-25'\n },\n {\n id: InputID.LastName,\n type: InputType.Text,\n label: this.props.resources.lastNameLabel,\n value: '',\n isRequired: true,\n customClass: 'width-25'\n },\n {\n id: InputID.Email,\n type: InputType.Email,\n label: this.props.resources.emailAddressLabel,\n value: '',\n isRequired: true,\n pattern: EmailRegex.defaultRegex.source,\n customClass: 'width-50'\n },\n {\n id: InputID.CompanyName,\n type: InputType.Text,\n label: this.props.resources.companyLabel,\n value: '',\n isRequired: true,\n customClass: 'width-50'\n },\n {\n id: InputID.Department,\n type: InputType.Text,\n label: this.props.resources.departmentLabel,\n value: '',\n isRequired: false,\n customClass: 'width-50'\n },\n {\n id: InputID.JobTitle,\n type: InputType.Text,\n label: this.props.resources.jobTitleLabel,\n value: '',\n isRequired: false,\n customClass: 'width-50'\n },\n {\n id: InputID.Size,\n type: InputType.Text,\n label: this.props.resources.companySizeLabel,\n value: '',\n isRequired: false,\n customClass: 'width-50'\n },\n {\n id: InputID.Address,\n type: InputType.Address,\n label: this.props.resources.companyAddressLabel,\n value: '',\n isRequired: false,\n customClass: 'width-100'\n },\n {\n id: InputID.Comment,\n type: InputType.TextArea,\n label: this.props.resources.commentLabel,\n value: '',\n isRequired: false,\n customClass: 'width-100'\n }\n ];\n\n private readonly formChildReference: React.RefObject = React.createRef();\n\n private readonly moduleClassName: string = 'ms-business-sign-up';\n\n private needsToReset: boolean = false;\n\n private readonly telemetryContent: ITelemetryContent;\n\n constructor(props: IBusinessSignUpExtendedProps) {\n super(props);\n\n this.state = {\n isReady: false,\n formItems: this.props.formItems || this._addedReference(),\n addressHasErrors: false,\n showAddressErrors: false,\n hasSubmitErrors: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public componentDidMount(): void {\n this.formChildReference.current?.focus();\n }\n\n public shouldComponentUpdate(nextProps: IBusinessSignUpExtendedProps, nextState: IBusinessState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const { config } = this.props;\n const { formItems } = this.state;\n const { className, heading } = config;\n\n const viewProps = {\n ...this.props,\n businessSignUp: {\n moduleProps: this.props,\n className: classnames(this.moduleClassName, className)\n },\n ContainerWrapper: {\n className: `${this.moduleClassName}__container`\n },\n heading: (\n \n ),\n businessSignUpForm: this._renderForm(),\n formItems\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Handle the heading change event.\n * @param event - Content Editable Event.\n */\n public handleHeadingChange = (event: ContentEditableEvent): void => {\n this.props.config.heading.text = event.target.value;\n };\n\n private _renderForm(): IBusinessSignUpLocalAccount {\n const { config, resources, slots } = this.props;\n const { showAddressErrors, hasSubmitErrors, isReady, formItems } = this.state;\n const {\n signUpButtonArialabel,\n signUpButtonText,\n cancelButtonArialabel,\n cancelButtonText,\n errorMessage,\n partialAddressErrorMessage\n } = resources;\n const addressForm = (slots && slots.addressSlot && slots.addressSlot.length > 0 && slots.addressSlot[0]) || undefined;\n\n const form = {\n FormWrapper: {\n className: `${this.moduleClassName}__form `\n },\n items: renderInputSection(\n formItems,\n `${this.moduleClassName}__form-item`,\n this.needsToReset,\n this._onInputChange,\n showAddressErrors,\n addressForm,\n this._onAddressChange\n ),\n buttons: [\n ,\n \n ],\n errorMessage: [\n hasSubmitErrors && ,\n showAddressErrors && (\n \n )\n ],\n disclaimer: config.disclaimer && (\n \n )\n };\n\n if (this.needsToReset) {\n this.needsToReset = false;\n }\n\n return form;\n }\n\n private readonly _onInputChange = (event: React.ChangeEvent): void => {\n const newForm = this.state.formItems;\n newForm.forEach(item => {\n if (item.id === event.target.id) {\n item.value = event.target.value;\n }\n });\n\n // Check if form is ready, update state object with latest values, values have changed so reset hasSubmitErrros\n this.setState({\n isReady: this._isFormReady(),\n formItems: newForm,\n hasSubmitErrors: false\n });\n };\n\n private _addedReference(): IFormItem[] {\n const newFormFields = this.BusinessSignUpDefaultInputs;\n newFormFields[0].fieldReference = this.formChildReference;\n return newFormFields;\n }\n\n private readonly _onAddressChange = (errors: boolean, currentAddress?: Address): void => {\n // Find address item\n const newForm = this.state.formItems;\n const addressItem = newForm.find(item => {\n return item.type === InputType.Address;\n });\n\n // If found --> set to currentAddress\n if (addressItem) {\n addressItem.address = currentAddress;\n\n // Update state with new values and set errors to false if address is not required field\n this.setState(\n {\n formItems: newForm,\n addressHasErrors: errors,\n showAddressErrors: false\n },\n () => {\n this.setState({ isReady: this._isFormReady() });\n }\n );\n }\n };\n\n private readonly _isFormReady = (): boolean => {\n const { formItems } = this.state;\n\n for (const currentInput of formItems) {\n // Will return FALSE if:\n // - input field is required\n // IF is address AND addressHasErrors === true\n // ELSE value is undefined OR empty\n // OR\n // - pattern provided and value does not match pattern\n\n if (currentInput.isRequired) {\n if (currentInput.type === InputType.Address) {\n if (this.state.addressHasErrors) {\n return false;\n }\n } else if (currentInput.value === undefined || currentInput.value === '') {\n return false;\n }\n }\n if (currentInput.pattern !== undefined && currentInput.value.match(currentInput.pattern) === null) {\n return false;\n }\n }\n\n return true;\n };\n\n private readonly _onSubmit = (event: React.MouseEvent) => {\n if (this.state.addressHasErrors) {\n this.setState({\n showAddressErrors: true\n });\n\n event.preventDefault();\n return;\n }\n\n const { config, context } = this.props;\n\n // Check for matching id and if not empty\n const firstName = this._getItem(InputID.FirstName);\n const lastName = this._getItem(InputID.LastName);\n const companyName = this._getItem(InputID.CompanyName);\n const companyEmail = this._getItem(InputID.Email);\n const companyAddress = this._getItem(InputID.Address, true);\n const jobTitle = this._getItem(InputID.JobTitle);\n const department = this._getItem(InputID.Department);\n const companySize = this._getItem(InputID.Size);\n const comments = this._getItem(InputID.Comment);\n\n // API gets email as part of the address object, but I do not use the email input from the address component, thus we need to copy it over\n if (companyEmail && companyEmail.value && companyAddress && companyAddress.address) {\n companyAddress.address.Email = companyEmail.value;\n }\n\n const newPartner: BusinessPartnerProspect = {\n FirstName: firstName && firstName.value,\n LastName: lastName && lastName.value,\n CompanyName: companyName && companyName.value,\n Address: companyAddress && companyAddress.address && companyAddress.address,\n JobTitle: jobTitle && jobTitle.value,\n Department: department && department.value,\n CompanySize: (companySize && Number.parseInt(companySize.value, 10)) || 0,\n Comments: comments && comments.value\n };\n\n this.setState({\n isReady: false\n });\n\n // Create business partner request\n createProspectAsync({ callerContext: context.actionContext }, newPartner)\n .then(() => {\n const successPageURL =\n (config.confirmationLink && config.confirmationLink.linkUrl && config.confirmationLink.linkUrl.destinationUrl) ||\n getUrlSync('home', this.props.context.actionContext) ||\n '';\n window.location.href = successPageURL;\n })\n .catch(() => {\n this.setState({\n hasSubmitErrors: true\n });\n });\n };\n\n private readonly _onCancel = () => {\n // Reset values of the form\n const cleanForm = this.state.formItems;\n cleanForm.forEach(input => {\n input.value = '';\n });\n\n // Set reset flag so address input will get reset on next renderInputSection() call\n this.needsToReset = true;\n\n this.setState({\n isReady: false,\n formItems: cleanForm,\n addressHasErrors: true,\n showAddressErrors: false,\n hasSubmitErrors: false\n });\n };\n\n private readonly _getItem = (id: string, isAddress: boolean = false) => {\n if (isAddress) {\n return this.state.formItems.find(item => {\n return item.id === id && item.address;\n });\n }\n return this.state.formItems.find(item => {\n return item.id === id && item.value !== '';\n });\n };\n}\n\nexport default BusinessSignUp;\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { Module } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n// import MsDyn365 from \"@msdyn365-commerce/core\";\r\nimport { IInvoicesListViewProps } from '@msdyn365-commerce-modules/invoice/src/modules/invoices-list/./invoices-list';\r\n\r\nexport const InvoiceListView: React.FC = props => {\r\n const { header, filter, content, invoiceRequestModal, pagination } = props;\r\n // if (MsDyn365.isBrowser) {\r\n // const linksElements = document.querySelectorAll('a.msc-invoices-list__container__content__table__row__open-invoice');\r\n // console.log(linksElements);\r\n // linksElements.forEach(l => l.setAttribute('href', '#'));\r\n // }\r\n return (\r\n \r\n {header}\r\n {invoiceRequestModal}\r\n {filter}\r\n {content}\r\n {pagination}\r\n \r\n );\r\n};\r\n\r\nexport default InvoiceListView;\r\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProactiveChatTrigger } from '../../interfaces';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\n\n/**\n * ProactiveChatTrigger class - checks if Proactive Chat should be triggered, starts the chat and sets context\n */\nabstract class ProactiveChatTrigger implements IProactiveChatTrigger {\n public props: IPvaChatConnectorViewProps;\n public context: IChatContext;\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n this.props = props;\n this.context = context;\n }\n\n /**\n * Generates Chat Context with included properties related to Proactive Chat\n * @returns TContextProvider - Chat Context\n */\n public abstract getContextProvider(): TContextProvider;\n\n /**\n * Generates chat welcome message to be used if Proactive Chat is triggered\n * @returns string - chat welcome message\n */\n public abstract getMessage(): string;\n\n /**\n * Validate specific trigger conditions if Proactive Chat should be initiated\n * @returns boolean (TRUE if Proactive Chat should be triggered)\n */\n public abstract validate(): Promise;\n}\n\nexport default ProactiveChatTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n// @ts-ignore\nimport { getCartState, ICartState } from '@msdyn365-commerce/global-state';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * CartAmountTrigger class - proactive chat is triggered if cArt amount is in preset boundaries (config.proactiveOnCartAmountMin, config.proactiveOnCartAmountMax)\n */\nclass CartAmountTrigger extends ProactiveChatTrigger {\n private min?: number;\n private max?: number;\n private totalInCart: number = 0;\n\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.min = this.props.config.proactiveOnCartAmountMin;\n this.max = this.props.config.proactiveOnCartAmountMax;\n this.props.context.telemetry.debug(\n `[Chat][${CartAmountTrigger.name}] Cart amount proactive chat initialized with min: '${this.min}'; max: '${this.max}'.`\n );\n }\n\n public async validate(): Promise {\n const cart = await this._getCart();\n if (cart.isEmpty) {\n this.props.context.telemetry.debug(`[Chat][${CartAmountTrigger.name}] Cart was empty. Validation returning 'false'.`);\n return false;\n }\n\n this.totalInCart = cart.cart.TotalAmount || 0;\n let retVal = false;\n if (this.min) {\n if (this.max) {\n retVal = this.min <= this.totalInCart && this.totalInCart <= this.max;\n } else {\n retVal = this.min <= this.totalInCart;\n }\n } else {\n if (this.max) {\n retVal = this.totalInCart <= this.max;\n } else {\n retVal = false;\n }\n }\n this.props.context.telemetry.debug(\n `[Chat][${CartAmountTrigger.name}] Validation result: '${retVal}'; Cart total: '${this.totalInCart}'.`\n );\n return retVal;\n }\n\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: 'Cart Amount',\n eCommerceCustProactiveShoppingCartAmount: `${this.totalInCart}`\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnCartAmountMessage || this.props.config.proactiveDefaultMessage;\n }\n\n private async _getCart(): Promise {\n return getCartState(this.props.context.actionContext);\n }\n}\n\nexport default CartAmountTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n// @ts-ignore\nimport { getCartState, ICartState } from '@msdyn365-commerce/global-state';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * CartNumberOfItemsTrigger class - proactive chat is triggered if Cart Number of Items is in preset boundaries (config.proactiveOnCartNoOfItemsMin, config.proactiveOnCartNoOfItemsMax)\n */\nclass CartNumberOfItemsTrigger extends ProactiveChatTrigger {\n private min?: number;\n private max?: number;\n private numberOfItems: number = 0;\n\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.min = this.props.config.proactiveOnCartNoOfItemsMin;\n this.max = this.props.config.proactiveOnCartNoOfItemsMax;\n\n this.props.context.telemetry.debug(\n `[${CartNumberOfItemsTrigger.name}] Cart number of items proactive chat initialized with min: '${this.min}'; max: '${this.max}'.`\n );\n }\n\n public async validate(): Promise {\n const cart = await this._getCart();\n if (cart.isEmpty) {\n this.props.context.telemetry.debug(`[Chat][${CartNumberOfItemsTrigger.name}] Cart was empty. Validation returning 'false'.`);\n return false;\n }\n\n this.numberOfItems = cart.cart.TotalItems || 0;\n\n let retVal = false;\n if (this.min) {\n if (this.max) {\n retVal = this.min <= this.numberOfItems && this.numberOfItems <= this.max;\n } else {\n retVal = this.min <= this.numberOfItems;\n }\n } else {\n if (this.max) {\n retVal = this.numberOfItems <= this.max;\n } else {\n retVal = false;\n }\n }\n this.props.context.telemetry.debug(\n `[${CartNumberOfItemsTrigger.name}] Validation result: '${retVal}'; Number of items in cart: '${this.numberOfItems}'.`\n );\n return retVal;\n }\n\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: 'Cart Number of Items',\n eCommerceCustProactiveShoppingCartNumberOfItems: `${this.numberOfItems}`\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnCartNoOfItemsMessage || this.props.config.proactiveDefaultMessage;\n }\n\n private async _getCart(): Promise {\n return getCartState(this.props.context.actionContext);\n }\n}\n\nexport default CartNumberOfItemsTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n// @ts-ignore\nimport { getCartState, ICartState } from '@msdyn365-commerce/global-state';\nimport { TContextProvider } from '../../../interfaces';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * CartSpecificProductTrigger class - proactive chat is triggered if a Product in the Cart is in preset list of products (config.proactiveOnCartSpecificProductList)\n */\nclass CartSpecificProductTrigger extends ProactiveChatTrigger {\n private product: string = '';\n\n public async validate(): Promise {\n let isValid = false;\n const cart = await this._getCart();\n if (!cart.isEmpty) {\n if (cart.cart.CartLines) {\n this.props.context.telemetry.debug(\n `[${CartSpecificProductTrigger.name}] Number of cart line items was '${cart.cart.CartLines?.length}'`\n );\n for (let i = 0; i < cart.cart.CartLines?.length; i++) {\n if (cart.cart.CartLines[i]) {\n if (this.props.config.proactiveOnCartSpecificProductList) {\n this.props.context.telemetry.debug(\n `[${CartSpecificProductTrigger.name}] Number of cart specific products was configured for proactive chat was '${this.props.config.proactiveOnCartSpecificProductList?.length}'`\n );\n // Find first item, from user-defined list of products, that matches the cart lines' itemId in the cart.\n for (let j = 0; j < (this.props.config.proactiveOnCartSpecificProductList?.length || 0); j++) {\n if (\n this.props.config.proactiveOnCartSpecificProductList &&\n cart.cart.CartLines[i].ItemId &&\n this.props.config.proactiveOnCartSpecificProductList[j] === cart.cart.CartLines[i].ItemId\n ) {\n this.props.context.telemetry.debug(\n `[${CartSpecificProductTrigger.name}] Matched cart line item ID '${cart.cart.CartLines[i].ItemId}' against user-defined list of specific products for proactive chat.`\n );\n isValid = true;\n break;\n }\n }\n }\n } else {\n // Rest of the CartLines are undefined\n break;\n }\n }\n } else {\n this.props.context.telemetry.debug(`[Chat][${CartSpecificProductTrigger.name}] Cart did not contain any cart lines.`);\n }\n } else {\n this.props.context.telemetry.debug(`[Chat][${CartSpecificProductTrigger.name}] Cart was empty.`);\n }\n this.props.context.telemetry.debug(`[Chat][${CartSpecificProductTrigger.name}] Validation returning '${isValid}'.`);\n return isValid;\n }\n\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: 'Cart Specific Product',\n eCommerceCustProactiveShoppingCartSpecificProduct: `${this.product}`\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnCartSpecificProductMessage || this.props.config.proactiveDefaultMessage;\n }\n\n private async _getCart(): Promise {\n return getCartState(this.props.context.actionContext);\n }\n}\n\nexport default CartSpecificProductTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nexport enum ProactiveChatNames {\n DateRange = 'Date Range',\n FromSpecificPage = 'From Specific Page',\n PageVisits = 'Page Visits',\n SpecificLocation = 'Specific Location',\n SpecificPage = 'Specific Page',\n WaitOnTime = 'Wait On Time'\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProactiveChatNames } from '../../helpers/consts';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * DateRangeTrigger class - proactive chat is triggered if current date is in preset date boundaries (config.proactiveOnDateRangeStart, config.proactiveOnDateRangeEnd)\n */\nclass DateRangeTrigger extends ProactiveChatTrigger {\n private start?: Date;\n private end?: Date;\n\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.start = this._toDate(this.props.config.proactiveOnDateRangeStart);\n this.end = this._toDate(this.props.config.proactiveOnDateRangeEnd);\n\n this.props.context.telemetry.debug(\n `[${DateRangeTrigger.name}] Proactive chat initialized with startDate: '${this.start}'; max: '${this.end}'.`\n );\n }\n\n public async validate(): Promise {\n const now = new Date();\n now.setHours(0, 0, 0, 0);\n\n let retVal = false;\n if (this.start) {\n if (this.end) {\n retVal = this.start.getTime() <= now.getTime() && now.getTime() <= this.end.getTime();\n } else {\n retVal = this.start.getTime() <= now.getTime();\n }\n } else if (this.end) {\n retVal = now.getTime() <= this.end.getTime();\n }\n\n this.props.context.telemetry.debug(\n `[${DateRangeTrigger.name}] Validation result: '${retVal}'; Current date used to compare: '${now}'.`\n );\n return retVal;\n }\n\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: ProactiveChatNames.DateRange,\n eCommerceCustProactiveFromDate: this.start ? this.start.toUTCString() : '',\n eCommerceCustProactiveToDate: this.end ? this.end.toUTCString() : ''\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnDateRangeMessage || this.props.config.proactiveDefaultMessage;\n }\n\n /**\n * Converts string(us-en) to date\n * @param date string (mm/dd/yyyy)\n * @returns Date or undefined\n */\n private _toDate(date?: string): Date | undefined {\n if (date) {\n const dateParts = date.split('/');\n return new Date(+dateParts[2], +dateParts[1] - 1, +dateParts[0]);\n } else {\n return undefined;\n }\n }\n}\n\nexport default DateRangeTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProactiveChatNames } from '../../helpers/consts';\nimport { TContextProvider } from '../../../interfaces';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * FromSpecificPageTrigger class - proactive chat is triggered if user has come from specific page (the one listed in config.proactiveOnFromSpecificPageList)\n */\nclass FromSpecificPageTrigger extends ProactiveChatTrigger {\n public async validate(): Promise {\n let isValid = false;\n if (this.props.config.proactiveOnFromSpecificPageList) {\n this.props.context.telemetry.debug(\n `[${FromSpecificPageTrigger.name}] Number of items in user-defined list of 'From Specific Page' was '${this.props.config.proactiveOnFromSpecificPageList?.length}'.`\n );\n for (let i = 0; i < (this.props.config.proactiveOnFromSpecificPageList?.length || 0); i++) {\n const fromSpecificPageTrimmed: string = this.props.config.proactiveOnFromSpecificPageList[i].trim();\n this.props.context.telemetry.debug(\n `[Chat][${FromSpecificPageTrigger.name}] Current page URL: '${window.document.referrer}'.`\n );\n this.props.context.telemetry.debug(\n `[${FromSpecificPageTrigger.name}] Current item from user-defined list of 'From Specific Page': '${fromSpecificPageTrimmed}'.`\n );\n\n if (window.document.referrer.indexOf(fromSpecificPageTrimmed) > -1) {\n isValid = true;\n break;\n }\n }\n } else {\n this.props.context.telemetry.debug(\n `[Chat][${FromSpecificPageTrigger.name}] User-defined 'From Specific Page' list was undefined.`\n );\n }\n this.props.context.telemetry.debug(`[Chat][${FromSpecificPageTrigger.name}] Validation returning '${isValid}'.`);\n return isValid;\n }\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: ProactiveChatNames.FromSpecificPage,\n eCommerceCustProactiveCameFromPage: window.document.referrer\n };\n };\n }\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnFromSpecificPageMessage || this.props.config.proactiveDefaultMessage;\n }\n}\n\nexport default FromSpecificPageTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICookieContext } from '@msdyn365-commerce/core-internal/dist/types/interfaces/context/ICookieContext';\nimport { ProactiveChatNames } from '../../helpers/consts';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * PageVisitTrigger class - proactive chat is triggered if user has visited current page for (config.proactiveOnPageVisitNumber) or more times\n */\nclass PageVisitTrigger extends ProactiveChatTrigger {\n public visits: number = 0;\n private cookieName: string = 'TimesPageVisited';\n private expdate: Date;\n private cookies: ICookieContext;\n\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.cookies = this.props.context.request.cookies;\n this.expdate = new Date();\n // Set expiry date to 365 days.\n this.expdate.setTime(this.expdate.getTime() + 24 * 60 * 60 * 1000 * 365);\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Cookie expiry date set to: '${this.expdate}'.`);\n\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Cookie context is given: '${this.cookies.isConsentGiven()}'.`);\n if (this.cookies.isConsentGiven()) {\n this.cookies.setConsentCookie();\n }\n\n this._updateVisitCounter();\n }\n\n public async validate(): Promise {\n let retVal: boolean = false;\n\n if (this.props.config.proactiveOnPageVisitNumber) {\n retVal = this.visits >= this.props.config.proactiveOnPageVisitNumber;\n }\n\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Validation result: '${retVal}'.`);\n return retVal;\n }\n\n public clear(): void {\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Clearing cookie for page visit counter.`);\n this.cookies.set(this.cookieName, 0, {\n domain: window.location.hostname,\n path: window.location.pathname,\n expires: this.expdate\n });\n }\n\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: ProactiveChatNames.PageVisits,\n eCommerceCustProactiveNumberOfVisits: `${this.visits}`\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnPageVisitMessage || this.props.config.proactiveDefaultMessage;\n }\n\n private _updateVisitCounter(): void {\n this.visits = this.cookies.get(this.cookieName).value || 0;\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Page visit counter BEFORE update: '${this.visits}.`);\n ++this.visits;\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Page visit counter AFTER update: '${this.visits}.`);\n\n this.cookies.set(this.cookieName, this.visits, {\n domain: window.location.hostname,\n path: window.location.pathname,\n expires: this.expdate\n });\n }\n}\n\nexport default PageVisitTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProactiveChatNames } from '../../helpers/consts';\nimport { IExtendedRequest } from '../../interfaces';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * SpecificPageTrigger class - proactive chat is triggered if user geographically uses the website from specific country/regions(config.proactiveOnSpecificCountryRegionCountry)\n */\nclass SpecificCountryRegionTrigger extends ProactiveChatTrigger {\n private customerCountryCode: string;\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n this.customerCountryCode = (this.props.context.request).suggestedMarket || 'n/a';\n this.props.context.telemetry.debug(\n `[${SpecificCountryRegionTrigger.name}] Customer country code set to: '${this.customerCountryCode}.'`\n );\n }\n\n public async validate(): Promise {\n const retVal: boolean = this.props.config.proactiveOnSpecificLocation\n ? this.props.config.proactiveOnSpecificLocation.toLowerCase().indexOf(this.customerCountryCode.toLowerCase()) > -1\n : false;\n this.props.context.telemetry.debug(`[Chat][${SpecificCountryRegionTrigger.name}] Validation returning '${retVal}'.`);\n return retVal;\n }\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveCountryCode: this.props.config.proactiveOnSpecificLocation || '',\n eCommerceCustProactiveType: ProactiveChatNames.SpecificLocation\n };\n };\n }\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnSpecificCountryRegionMessage || this.props.config.proactiveDefaultMessage;\n }\n}\n\nexport default SpecificCountryRegionTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProactiveChatNames } from '../../helpers/consts';\nimport { TContextProvider } from '../../../interfaces';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * SpecificPageTrigger class - proactive chat is triggered if current page is listed in config.proactiveOnSpecificPageList\n */\nclass SpecificPageTrigger extends ProactiveChatTrigger {\n public async validate(): Promise {\n let isValid = false;\n if (this.props.config.proactiveOnSpecificPageList) {\n this.props.context.telemetry.debug(\n `[${SpecificPageTrigger.name}] Number of items in user-defined list of 'Specific Pages' was '${this.props.config.proactiveOnSpecificPageList?.length}'.`\n );\n for (let i = 0; i < (this.props.config.proactiveOnSpecificPageList?.length || 0); i++) {\n const specificPageTrimmed: string = this.props.config.proactiveOnSpecificPageList[i].trim();\n this.props.context.telemetry.debug(`[] Current location URL: ${window.location.href}.`);\n this.props.context.telemetry.debug(`[] Current item from user-defined list of 'Specific Page': ${specificPageTrimmed}.`);\n if (window.location.href.indexOf(specificPageTrimmed) > -1) {\n isValid = true;\n break;\n }\n }\n } else {\n this.props.context.telemetry.debug(`[Chat][${SpecificPageTrigger.name}] User-defined 'Specific Page' list was undefined.`);\n }\n this.props.context.telemetry.debug(`[Chat][${SpecificPageTrigger.name}] Validation returning '${isValid}'.`);\n return isValid;\n }\n\n public getContextProvider(): TContextProvider {\n return () => {\n return {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: ProactiveChatNames.SpecificPage\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnSpecificPageMessage || this.props.config.proactiveDefaultMessage;\n }\n}\n\nexport default SpecificPageTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProactiveChatNames } from '../../helpers/consts';\nimport { IChatContext, TContextProvider } from '../../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../../msdyn365-pva-chat-connector';\nimport ProactiveChatTrigger from './proactive-chat-trigger';\n\n/**\n * WaitOnTimeTrigger - proactive chat is triggered if user stays on current page for more than (config.proactiveOnWaitTimeSeconds) seconds\n */\nclass WaitOnTimeTrigger extends ProactiveChatTrigger {\n private waitTimeInMilliseconds: number | undefined;\n\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\n super(props, context);\n if (this.props.config.proactiveOnWaitTimeSeconds && !isNaN(this.props.config.proactiveOnWaitTimeSeconds)) {\n this.waitTimeInMilliseconds = Number(this.props.config.proactiveOnWaitTimeSeconds) * 1000;\n this.props.context.telemetry.debug(\n `[Chat][${WaitOnTimeTrigger.name}] Wait time (ms) set to: '${this.waitTimeInMilliseconds}'.`\n );\n }\n }\n\n public async validate(): Promise {\n const retVal: boolean = this.waitTimeInMilliseconds !== undefined;\n this.props.context.telemetry.debug(`[Chat][${WaitOnTimeTrigger.name}] Validation returning '${retVal}'.`);\n return retVal;\n }\n\n public getContextProvider(): TContextProvider {\n const triggerTime = Date.now() + (this.waitTimeInMilliseconds || 0);\n return () => {\n return triggerTime > Date.now()\n ? this.context\n : {\n ...this.context,\n eCommerceCustIsProactiveChat: 'True',\n eCommerceCustProactiveType: ProactiveChatNames.WaitOnTime,\n eCommerceCustProactiveTimeOnPage: `${this.waitTimeInMilliseconds ? this.waitTimeInMilliseconds : 0}`\n };\n };\n }\n\n public getMessage(): string {\n // @TODO: Add message processing if needed\n return this.props.config.proactiveOnWaitTimeMessage || this.props.config.proactiveDefaultMessage;\n }\n}\n\nexport default WaitOnTimeTrigger;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport CartAmountTrigger from './triggers/cart-amount-trigger';\nimport CartNumberOfItemsTrigger from './triggers/cart-number-of-items-trigger';\nimport CartSpecificProductTrigger from './triggers/cart-specific-product-trigger';\nimport DateRangeTrigger from './triggers/date-range-trigger';\nimport FromSpecificPageTrigger from './triggers/from-specific-page-trigger';\nimport PageVisitTrigger from './triggers/page-visits-trigger';\nimport SpecificCountryRegionTrigger from './triggers/specific-CountryRegion-trigger';\nimport SpecificPageTrigger from './triggers/specific-page-trigger';\nimport WaitOnTimeTrigger from './triggers/wait-on-time-trigger';\n\ntype ProactiveChat =\n | typeof DateRangeTrigger\n | typeof SpecificPageTrigger\n | typeof FromSpecificPageTrigger\n | typeof PageVisitTrigger\n | typeof SpecificCountryRegionTrigger\n | typeof CartAmountTrigger\n | typeof CartNumberOfItemsTrigger\n | typeof CartSpecificProductTrigger\n | typeof WaitOnTimeTrigger;\n\n/**\n * List of Proactive Chat Validators in order of validation (first proactive chat that pass validation is triggered, the rest are ommited)\n */\nexport const ProactiveTriggers: ProactiveChat[] = [\n DateRangeTrigger,\n SpecificPageTrigger,\n FromSpecificPageTrigger,\n PageVisitTrigger,\n SpecificCountryRegionTrigger,\n CartAmountTrigger,\n CartNumberOfItemsTrigger,\n CartSpecificProductTrigger,\n WaitOnTimeTrigger\n];\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IRequestContextUser } from '@msdyn365-commerce/core-internal/dist/types/interfaces/context/IRequestContext';\nimport { v4 as uuidv4 } from 'uuid';\nimport { ProactiveTriggers } from '../proactive';\nimport ProactiveChatTrigger from '../proactive/triggers/proactive-chat-trigger';\nimport { IPvaChatConnectorViewProps } from '../msdyn365-pva-chat-connector';\nimport { IProactiveData } from './../interfaces';\nimport { IChatContext, TContextProvider } from '../../interfaces';\n\n/**\n *\n * ContextProvider class - generates chat context, and checks for proactive triggers\n */\nclass ContextProvider {\n public data: IProactiveData;\n public props: IPvaChatConnectorViewProps;\n private user: IRequestContextUser;\n private userId: string;\n private context: IChatContext;\n private provider: TContextProvider | undefined;\n\n constructor(props: IPvaChatConnectorViewProps) {\n this.props = props;\n this.user = this.props.context.request.user;\n this.userId = `dl_${uuidv4()}`;\n this.context = this._getContext();\n // Proactive Chat related data\n this.data = {\n enabled: false,\n timeout: this.props.config.proactiveOnWaitTimeSeconds || 0,\n message: this.props.config.proactiveDefaultMessage\n };\n }\n\n /**\n * Executes Proactive Chat validation\n * @returns TContextProvider - a function returning IChatContext object\n */\n public async init(): Promise {\n try {\n await this._proactiveCheck();\n } catch (e) {\n // Use ?debug=true to see telemetry\n // If previous block fails, chat will still be available (no need to display any errors to user)\n this.props.telemetry.exception(e);\n }\n return this.provider || this._getProvider();\n }\n\n /**\n * Returns TContextProvider - a function returning IChatContext object\n */\n private _getProvider(): TContextProvider {\n return () => {\n return {\n eCommerceOperatingUnitNumber: this.props.context.request.apiSettings.oun,\n eCommerceBaseUrl: this.props.context.request.apiSettings.baseUrl,\n eCommerceDataAreaId: this.props.context.request.channel?.InventLocationDataAreaId,\n UserId: this.userId,\n // eCommerceCust...\n AccountNumber: this.user.customerAccountNumber ? this.user.customerAccountNumber : 'N/A',\n Email: this.user.emailAddress ? this.user.emailAddress : 'N/A',\n FirstName: this.user.firstName ? this.user.firstName : this.props.config.anonymousUserName,\n LastName: this.user.lastName ? this.user.lastName : 'N/A',\n Name: this.user.name ? this.user.name : this.props.config.anonymousUserName,\n eCommerceCustPageURL: window.location.href,\n eCommerceCustChatType: 'pva',\n // Proactive chat\n eCommerceCustIsProactiveChat: 'False',\n eCommerceCustProactiveType: 'N/A',\n // Date Range\n eCommerceCustProactiveFromDate: 'N/A',\n eCommerceCustProactiveToDate: 'N/A',\n // From Specific Page\n eCommerceCustProactiveCameFromPage: 'N/A',\n // No. Page Visits\n eCommerceCustProactiveNumberOfVisits: 'N/A',\n // Specific CountryRegion\n eCommerceCustProactiveCountryCode: 'N/A',\n // Specific Page => eCommerceCustPageURL\n // eCommerceCustProactiveSpecificPage: 'N/A',\n // Wait On Time\n eCommerceCustProactiveTimeOnPage: 'N/A',\n // Shopping cart amount\n eCommerceCustProactiveShoppingCartAmount: 'N/A',\n // Shopping cart number of items\n eCommerceCustProactiveShoppingCartNumberOfItems: 'N/A',\n // Shopping cart specific product\n eCommerceCustProactiveShoppingCartSpecificProduct: 'N/A'\n };\n };\n }\n\n /**\n * Returns default IChatContext object\n */\n private _getContext(): IChatContext {\n return this._getProvider()();\n }\n\n /**\n * Validates proactive triggers to check if proactive chat should be initialized\n */\n private async _proactiveCheck(): Promise {\n if (this.props.config.proactiveChatEnabled) {\n for (let i = 0; i < ProactiveTriggers.length; i++) {\n const proactive = new ProactiveTriggers[i](this.props, this.context);\n // Only first detected proactive trigger gets executed\n if (await this._isProactive(proactive)) {\n this.props.context.telemetry.debug(`First detected proactive trigger to be executed: ${proactive}`);\n break;\n }\n }\n }\n }\n\n /**\n * Validates if proactive chat should be triggered for given ProactiveTrigger\n * @param proactive ProactiveChatTrigger\n * @returns boolean\n */\n private async _isProactive(proactive: ProactiveChatTrigger): Promise {\n this.data.enabled = await proactive.validate();\n if (this.data.enabled) {\n this.provider = proactive.getContextProvider();\n this.data.message = proactive.getMessage();\n }\n return this.data.enabled;\n }\n}\n\nexport default ContextProvider;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/**\n * Style generating functions\n */\nimport { IAvatarStyling, IBubbleStyling, IChatCustomStyle, IChatStyling, IOtherStyling, ISuggestedActionStyling } from '../interfaces';\nimport { IMsdyn365PvaChatConnectorConfig } from '../msdyn365-pva-chat-connector.props.autogenerated';\n\nconst getChatWrapperStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n return {\n position: config.position || 'inherit',\n top: config.top ? config.top : 'inherit',\n right: config.right ? config.right : 'inherit',\n bottom: config.bottom ? config.bottom : 'inherit',\n left: config.left ? config.left : 'inherit',\n zIndex: 1000,\n display: 'flex',\n justifyContent: 'flex-end'\n };\n};\n\nconst getMaximizedChatWrapperStyle = (config: IMsdyn365PvaChatConnectorConfig, isMobileDevice: boolean): React.CSSProperties => {\n if (isMobileDevice) {\n return {\n height: '90%',\n width: '100%',\n bottom: '0.5em',\n right: '0',\n padding: '5px'\n };\n }\n return {\n height: config.chatHeight ? config.chatHeight : '80%',\n width: config.chatWidth ? config.chatWidth : 'inherit'\n };\n};\n\nconst getChatButtonStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n return {\n display: 'flex',\n alignItems: 'center',\n backgroundColor: config.startChatButtonBackgroundColor || 'white',\n color: config.startChatButtonTextColor || 'inherit',\n borderColor: config.startChatButtonBorderColor || 'inherit',\n borderRadius: config.startChatButtonBorderRadius || '0px',\n borderStyle: config.startChatButtonBorderStyle || 'solid',\n borderWidth: config.startChatButtonBorderWidth ? config.startChatButtonBorderWidth : '0px',\n padding: config.storeLogoURL ? '2px 20px 2px 2px' : '10px 20px 10px 20px',\n cursor: 'pointer',\n outlineStyle: 'none',\n alignSelf: 'flex-end',\n boxShadow: '0 0 4px rgba(102,102,102,.5)',\n WebkitBoxShadow: '0 0 4px rgba(102,102,102,.5)',\n MozBoxShadow: '0 0 4px rgba(102,102,102,.5)'\n };\n};\n\nconst getButtonStoreLogoStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n return {\n backgroundColor: config.headerBackgroundColor || 'inherit',\n color: config.headerTextColor || 'inherit',\n borderRadius: '50%',\n padding: '11px',\n width: '30px',\n height: '30px',\n marginRight: '12px',\n borderStyle: 'solid',\n borderWidth: '1px',\n boxSizing: 'content-box'\n };\n};\n\nconst getChatStoreLogoStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n return {\n backgroundColor: config.headerBackgroundColor || 'inherit',\n color: config.headerTextColor || 'inherit',\n borderRadius: '50%',\n padding: '11px',\n width: '30px',\n height: '30px',\n margin: '5px 12px 5px 5px',\n alignSelf: 'center',\n borderStyle: 'solid',\n borderWidth: '1px',\n boxSizing: 'content-box'\n };\n};\n\nconst getChatMessagesStyle = (config: IMsdyn365PvaChatConnectorConfig, minimized: boolean): React.CSSProperties => {\n return {\n display: minimized ? 'none' : 'block',\n backgroundColor: config.backgroundColor || 'White',\n height: '100%',\n width: '100%',\n boxSizing: 'border-box',\n position: 'relative'\n };\n};\n\nconst getChatMessageHeader = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n backgroundColor: config.headerBackgroundColor || 'inherit',\n backgroundImage: `url(\"${config.headerBackgroundImageURL}\")` || 'none',\n color: config.headerTextColor || 'inherit',\n backgroundRepeat: 'no-repeat',\n display: 'flex',\n alignItems: 'flex-start',\n flexDirection: 'row',\n width: '100%',\n position: 'absolute',\n top: config.chatHeaderHeight ? `-${config.chatHeaderHeight}` : '',\n height: config.chatHeaderHeight,\n borderColor: config.headerBackgroundColor ? config.headerBackgroundColor : 'inherit',\n borderStyle: config.chatBorderStyle ? config.chatBorderStyle : 'none',\n borderWidth: config.chatBorderWidth ? config.chatBorderWidth : '0px'\n };\n};\n\nconst getMinimizeButtonStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n borderTop: 'none',\n borderLeft: 'none',\n borderRight: 'none',\n borderBottom: `solid 2px ${config.headerTextColor || 'White'}`,\n backgroundColor: 'transparent',\n padding: '5px 10px 3px 10px',\n cursor: 'pointer',\n outlineStyle: 'none',\n marginTop: '7px',\n marginRight: '7px'\n };\n};\n\nconst getCloseButtonStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n border: 'none',\n color: config.headerTextColor || 'White',\n backgroundColor: 'transparent',\n padding: '0px 0px 0px 7px',\n cursor: 'pointer',\n outlineStyle: 'none',\n marginTop: '7px',\n marginRight: '7px'\n };\n};\n\nconst getChatMessageContent = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n height: '100%',\n width: '100%',\n borderColor: config.chatBorderColor ? config.chatBorderColor : 'inherit',\n borderStyle: config.chatBorderStyle ? config.chatBorderStyle : 'none',\n borderWidth: config.chatBorderWidth ? config.chatBorderWidth : '0px'\n };\n};\n\nconst getProactiveWrapperStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n return {\n flexDirection: 'column',\n display: 'flex',\n justifyContent: 'flex-end',\n backgroundColor: config.backgroundColor || 'White'\n };\n};\n\nconst getProactiveMessageHeader = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n backgroundColor: config.headerBackgroundColor || 'inherit',\n backgroundImage: `url(\"${config.headerBackgroundImageURL}\")` || 'none',\n color: config.headerTextColor || 'inherit',\n backgroundRepeat: 'no-repeat',\n display: 'flex',\n alignItems: 'flex-start',\n flexDirection: 'row',\n boxSizing: 'border-box',\n width: '100%',\n height: config.chatHeaderHeight,\n borderColor: config.headerBackgroundColor ? config.headerBackgroundColor : 'inherit',\n borderStyle: config.chatBorderStyle ? config.chatBorderStyle : 'none',\n borderWidth: config.chatBorderWidth ? config.chatBorderWidth : '0px'\n };\n};\n\nconst getProactiveMessageContent = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n width: '100%',\n padding: '10px 20px',\n boxSizing: 'border-box',\n borderColor: config.chatBorderColor ? config.chatBorderColor : 'inherit',\n borderStyle: config.chatBorderStyle ? config.chatBorderStyle : 'none',\n borderWidth: config.chatBorderWidth ? config.chatBorderWidth : '0px'\n };\n};\n\nconst getProactiveButtonStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\n return {\n color: config.headerTextColor || 'inherit',\n cursor: 'pointer',\n padding: '5px 10px',\n outline: 'none',\n border: 'none',\n backgroundColor: config.headerBackgroundColor || 'inherit',\n borderRadius: '25px'\n };\n};\n\nconst getRedDotStyle = (config: IMsdyn365PvaChatConnectorConfig): React.CSSProperties => {\n return {\n background: 'Red',\n borderRadius: '50%',\n height: '5px',\n width: '5px',\n position: 'absolute',\n right: '10px',\n bottom: '33px'\n };\n};\n\n/**\n * Generates styles for the chat wrapper, and proactive chat parts\n * @param config IMsdyn365PvaChatConnectorConfig\n * @param minimized boolean\n * @returns IChatCustomStyle\n */\nexport const getChatStyling = (config: IMsdyn365PvaChatConnectorConfig, minimized: boolean, isMobileDevice: boolean): IChatCustomStyle => {\n return {\n ChatWrapperStyle: getChatWrapperStyle(config),\n MaximizedChatWrapperStyle: getMaximizedChatWrapperStyle(config, isMobileDevice),\n ChatButtonStyle: getChatButtonStyle(config),\n ButtonStoreLogoStyle: getButtonStoreLogoStyle(config),\n ChatStoreLogoStyle: getChatStoreLogoStyle(config),\n ChatMessagesStyle: getChatMessagesStyle(config, minimized),\n ChatMessageHeader: getChatMessageHeader(config),\n MinimizeButtonStyle: getMinimizeButtonStyle(config),\n CloseButtonStyle: getCloseButtonStyle(config),\n ChatMessageContent: getChatMessageContent(config),\n ProactiveWrapperStyle: getProactiveWrapperStyle(config),\n ProactiveMessageHeader: getProactiveMessageHeader(config),\n ProactiveMessageContent: getProactiveMessageContent(config),\n ProactiveButtonStyle: getProactiveButtonStyle(config),\n RedDotStyle: getRedDotStyle(config)\n };\n};\n\nconst fontFormat = (font?: string): string | undefined => {\n if (font && font.length > 0) {\n const arr = font.split(',');\n for (let i = 0; i < arr.length; i++) {\n arr[i] = `'${arr[i].trim()}'`;\n }\n font = arr.join(', ');\n } else {\n font = \"'Calibri', 'Helvetica Neue', 'Arial', 'sans-serif'\";\n }\n\n return font;\n};\n\nconst getBubbleStyling = (config: IMsdyn365PvaChatConnectorConfig): IBubbleStyling => {\n return {\n bubbleBackground: config.bubbleBackground || 'White',\n bubbleTextColor: config.bubbleTextColor || 'Black',\n bubbleBorderColor: config.bubbleBorderColor || '#e6e6e6',\n bubbleBorderRadius: config.bubbleBorderRadius || '2',\n bubbleBorderStyle: config.bubbleBorderStyle || 'solid',\n bubbleBorderWidth: config.bubbleBorderWidth || '1',\n bubbleFromUserBackground: config.bubbleFromUserBackground || 'White',\n bubbleFromUserTextColor: config.bubbleFromUserTextColor || 'Black',\n bubbleFromUserBorderColor: config.bubbleFromUserBorderColor || '#e6e6e6',\n bubbleFromUserBorderRadius: config.bubbleFromUserBorderRadius || '2',\n bubbleFromUserBorderStyle: config.bubbleFromUserBorderStyle || 'solid',\n bubbleFromUserBorderWidth: config.bubbleFromUserBorderWidth || '1'\n };\n};\n\n// eslint-disable-next-line complexity\nconst getOtherStyling = (config: IMsdyn365PvaChatConnectorConfig): IOtherStyling => {\n return {\n groupTimestamp: config.groupTimestamp || true,\n sendTimeout: config.sendTimeout || '20000',\n sendTimeoutForAttachments: config.sendTimeoutForAttachments || '120000',\n timestampColor: config.timestampColor || 'undefined',\n timestampFormat: config.timestampFormat || 'undefined',\n notificationDebounceTimeout: config.notificationDebounceTimeout || '400',\n hideToaster: config.hideToaster || true,\n toasterHeight: config.toasterHeight || '32',\n toasterMaxHeight: config.toasterMaxHeight || '32 * 5',\n toasterSingularMaxHeight: config.toasterSingularMaxHeight || '50',\n toastFontSize: config.toastFontSize || '87.5%',\n toastIconWidth: config.toastIconWidth || '36',\n toastSeparatorColor: config.toastSeparatorColor || '#E8EAEC',\n toastTextPadding: config.toastTextPadding || '6',\n toastErrorBackgroundColor: config.toastErrorBackgroundColor || '#FDE7E9',\n toastErrorColor: config.toastErrorColor || '#A80000',\n toastInfoBackgroundColor: config.toastInfoBackgroundColor || '#CEF1FF',\n toastInfoColor: config.toastInfoColor || '#105E7D',\n toastSuccessBackgroundColor: config.toastSuccessBackgroundColor || '#DFF6DD',\n toastSuccessColor: config.toastSuccessColor || '#107C10',\n toastWarnBackgroundColor: config.toastWarnBackgroundColor || '#FFF4CE',\n toastWarnColor: config.toastWarnColor || '#3B3A39',\n typingAnimationBackgroundImage: config.typingAnimationBackgroundImage || 'undefined',\n typingAnimationDuration: config.typingAnimationDuration || '5000',\n typingAnimationHeight: config.typingAnimationHeight || '20',\n typingAnimationWidth: config.typingAnimationWidth || '64',\n videoHeight: config.videoHeight || '270',\n markdownExternalLinkIconImage:\n config.markdownExternalLinkIconImage ||\n 'url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIzIDMgMTggMTgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTcuMjUwMSA0LjUwMDE3SDEwLjc0OTVDMTEuMTYzNyA0LjUwMDE3IDExLjQ5OTUgNC44MzU5NiAxMS40OTk1IDUuMjUwMTdDMTEuNDk5NSA1LjYyOTg2IDExLjIxNzMgNS45NDM2NiAxMC44NTEzIDUuOTkzMzJMMTAuNzQ5NSA2LjAwMDE3SDcuMjQ5NzRDNi4wNzA3OSA1Ljk5OTYxIDUuMTAzNDkgNi45MDY1NiA1LjAwNzg2IDguMDYxMTJMNS4wMDAyOCA4LjIyMDAzTDUuMDAzMTIgMTYuNzUwN0M1LjAwMzQzIDE3Ljk0MTUgNS45Mjg4NSAxOC45MTYxIDcuMDk5NjYgMTguOTk0OUw3LjI1MzcxIDE5LjAwMDFMMTUuNzUxOCAxOC45ODg0QzE2Ljk0MTUgMTguOTg2OCAxNy45MTQ1IDE4LjA2MiAxNy45OTM1IDE2Ljg5MjNMMTcuOTk4NyAxNi43Mzg0VjEzLjIzMjFDMTcuOTk4NyAxMi44MTc5IDE4LjMzNDUgMTIuNDgyMSAxOC43NDg3IDEyLjQ4MjFDMTkuMTI4NCAxMi40ODIxIDE5LjQ0MjIgMTIuNzY0MyAxOS40OTE4IDEzLjEzMDNMMTkuNDk4NyAxMy4yMzIxVjE2LjczODRDMTkuNDk4NyAxOC43NDA3IDE3LjkyOTMgMjAuMzc2OSAxNS45NTI4IDIwLjQ4MjlMMTUuNzUzOCAyMC40ODg0TDcuMjU4MjcgMjAuNTAwMUw3LjA1NDk1IDIwLjQ5NDlDNS4xNDIzOSAyMC4zOTU0IDMuNjA4OTUgMTguODYyNyAzLjUwODM3IDE2Ljk1MDJMMy41MDMxMiAxNi43NTExTDMuNTAwODkgOC4yNTI3TDMuNTA1MjkgOC4wNTAyQzMuNjA1MzkgNi4xMzc0OSA1LjEzODY3IDQuNjA0NDkgNy4wNTA5NiA0LjUwNTI3TDcuMjUwMSA0LjUwMDE3SDEwLjc0OTVINy4yNTAxWk0xMy43NDgxIDMuMDAxNDZMMjAuMzAxOCAzLjAwMTk3TDIwLjQwMTQgMy4wMTU3NUwyMC41MDIyIDMuMDQzOTNMMjAuNTU5IDMuMDY4MDNDMjAuNjEyMiAzLjA5MTIyIDIwLjY2MzQgMy4xMjE2MyAyMC43MTExIDMuMTU4ODVMMjAuNzgwNCAzLjIyMTU2TDIwLjg2NDEgMy4zMjAxNEwyMC45MTgzIDMuNDEwMjVMMjAuOTU3IDMuNTAwNTdMMjAuOTc2MiAzLjU2NDc2TDIwLjk4OTggMy42Mjg2MkwyMC45OTkyIDMuNzIyODJMMjAuOTk5NyAxMC4yNTU0QzIwLjk5OTcgMTAuNjY5NiAyMC42NjM5IDExLjAwNTQgMjAuMjQ5NyAxMS4wMDU0QzE5Ljg3IDExLjAwNTQgMTkuNTU2MiAxMC43MjMyIDE5LjUwNjUgMTAuMzU3MUwxOS40OTk3IDEwLjI1NTRMMTkuNDk4OSA1LjU2MTQ3TDEyLjI3OTcgMTIuNzg0N0MxMi4wMTM0IDEzLjA1MSAxMS41OTY4IDEzLjA3NTMgMTEuMzAzMSAxMi44NTc1TDExLjIxOSAxMi43ODQ5QzEwLjk1MjcgMTIuNTE4NyAxMC45Mjg0IDEyLjEwMjEgMTEuMTQ2MiAxMS44MDg0TDExLjIxODggMTEuNzI0M0wxOC40MzY5IDQuNTAxNDZIMTMuNzQ4MUMxMy4zNjg0IDQuNTAxNDYgMTMuMDU0NiA0LjIxOTMxIDEzLjAwNSAzLjg1MzI0TDEyLjk5ODEgMy43NTE0NkMxMi45OTgxIDMuMzcxNzcgMTMuMjgwMyAzLjA1Nzk3IDEzLjY0NjQgMy4wMDgzMUwxMy43NDgxIDMuMDAxNDZaIiBmaWxsPSIjMjEyMTIxIiAvPjwvc3ZnPg==)',\n markdownRespectCRLF: config.markdownRespectCRLF || 'true',\n internalLiveRegionFadeAfter: config.internalLiveRegionFadeAfter || '1000',\n accent: config.accent || '#0063B1',\n subtle: config.subtle || '#767676'\n };\n};\n\nconst getAvatarStyling = (config: IMsdyn365PvaChatConnectorConfig): IAvatarStyling => {\n return {\n avatarBorderRadius: config.avatarBorderRadius || '50%',\n avatarSize: config.avatarSize || '40',\n botAvatarBackgroundColor: config.botAvatarBackgroundColor || 'undefined',\n botAvatarImage: config.botAvatarImage || '',\n botAvatarInitials: config.botAvatarInitials || '',\n userAvatarBackgroundColor: config.userAvatarBackgroundColor || 'undefined',\n userAvatarImage: config.userAvatarImage || '',\n userAvatarInitials: config.userAvatarInitials || '',\n showAvatarInGroup: config.showAvatarInGroup || 'status'\n };\n};\n\nconst getSuggestedActionStyling = (config: IMsdyn365PvaChatConnectorConfig): ISuggestedActionStyling => {\n return {\n suggestedActionLayout: config.suggestedActionLayout || 'carousel',\n suggestedActionBackground: config.suggestedActionBackground || 'White',\n suggestedActionTextColor: config.suggestedActionTextColor || '',\n suggestedActionBorderColor: config.suggestedActionBorderColor || '',\n suggestedActionBorderRadius: config.suggestedActionBorderRadius || '0',\n suggestedActionBorderStyle: config.suggestedActionBorderStyle || 'solid',\n suggestedActionBorderWidth: config.suggestedActionBorderWidth || '2',\n suggestedActionDisabledBorderStyle: config.suggestedActionDisabledBorderStyle || 'solid',\n suggestedActionDisabledBorderWidth: config.suggestedActionDisabledBorderWidth || '2',\n suggestedActionDisabledTextColor: config.suggestedActionDisabledTextColor || '',\n suggestedActionHeight: config.suggestedActionHeight || '40',\n suggestedActionImageHeight: config.suggestedActionImageHeight || '20',\n suggestedActionsCarouselFlipperCursor: config.suggestedActionsCarouselFlipperCursor || '',\n suggestedActionsCarouselFlipperBoxWidth: config.suggestedActionsCarouselFlipperBoxWidth || '40',\n suggestedActionsCarouselFlipperSize: config.suggestedActionsCarouselFlipperSize || '20',\n suggestedActionsFlowMaxHeight: config.suggestedActionsFlowMaxHeight || '',\n suggestedActionsStackedHeight: config.suggestedActionsStackedHeight || '',\n suggestedActionsStackedOverflow: config.suggestedActionsStackedOverflow || '2',\n suggestedActionsStackedLayoutButtonMaxHeight: config.suggestedActionsStackedLayoutButtonMaxHeight || '',\n suggestedActionsStackedLayoutButtonTextWrap: config.suggestedActionsStackedLayoutButtonTextWrap || false\n };\n};\n\n/**\n * Generates style options for the Botframework-WebChat widget\n * @param config IMsdyn365PvaChatConnectorConfig\n * @returns IChatStyling\n */\nexport const getChatStyleOptions = (config: IMsdyn365PvaChatConnectorConfig): IChatStyling => {\n const bubbleStyling = getBubbleStyling(config);\n const avatarStyling = getAvatarStyling(config);\n const suggestedActionStyling = getSuggestedActionStyling(config);\n const otherStyling = getOtherStyling(config);\n return {\n hideUploadButton: true,\n primaryFont: fontFormat(config.primaryFont),\n backgroundColor: config.backgroundColor || 'White',\n ...bubbleStyling,\n ...avatarStyling,\n ...suggestedActionStyling,\n ...otherStyling\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport React from 'react';\nimport { IAction, IDispatch, INext } from '../interfaces';\nimport { TContextProvider } from '../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../msdyn365-pva-chat-connector';\n\nexport class CommerceChatStore {\n private props: IPvaChatConnectorViewProps;\n private setNewMessageAction: React.Dispatch>;\n private provider?: TContextProvider;\n\n /**\n * Gets conversation token\n * @param props IPvaChatConnectorViewProps\n */\n public static async getDirectLineToken(props: IPvaChatConnectorViewProps): Promise {\n if (props.config.powervaDirectlineTokenURL && props.config.botID && props.config.tenantID) {\n // use direct line token url, bot id and tenant id from module config to get conversation token\n const url = `${props.config.powervaDirectlineTokenURL}?botId=${props.config.botID}&tenantId=${props.config.tenantID}`;\n const options = { method: 'GET' };\n return fetch(url, options)\n .then(r => r.json())\n .then(r => {\n if (r.token) {\n return r.token;\n } else {\n throw r;\n }\n });\n }\n\n // use direct line token url, bot id and tenant id from app config to get conversation token\n const url = `${props.context.app.config.pvaChatConnectorPowervaDirectlineTokenURL}?botId=${props.context.app.config.pvaChatConnectorBotID}&tenantId=${props.context.app.config.pvaChatConnectorTenantID}`;\n const options = {\n method: 'GET'\n };\n return fetch(url, options)\n .then(r => r.json())\n .then(r => {\n if (r.token) {\n return r.token;\n } else {\n throw r;\n }\n });\n }\n\n /**\n * Creates a new instance of commerce store for WebChat\n * @param props IPvaChatConnectorViewProps\n * @param provider TContextProvider\n * @param setNewMessage React.Dispatch>\n */\n constructor(\n props: IPvaChatConnectorViewProps,\n provider: TContextProvider | undefined,\n setNewMessage: React.Dispatch>\n ) {\n this.props = props;\n this.provider = provider;\n this.setNewMessageAction = setNewMessage;\n }\n\n /**\n * Handles custom chat actions\n * @param param0 {\n * dispatch: IDispatch;\n * next: INext;\n * action: IAction;\n * }\n */\n public async actionHandler({ dispatch, next, action }: { dispatch: IDispatch; next: INext; action: IAction }): Promise {\n const atype = action.type;\n\n switch (atype) {\n case 'DIRECT_LINE/CONNECT_FULFILLED': {\n // sets language\n dispatch({\n type: 'WEB_CHAT/SEND_EVENT',\n payload: {\n name: 'webchat/join',\n value: { language: window.navigator.language }\n }\n });\n break;\n }\n case 'DIRECT_LINE/INCOMING_ACTIVITY': {\n const activity = action.payload.activity;\n if (activity?.from?.role === 'bot') {\n // Sets flag for new message (will be use to indicate new messages from bot when chat is minimized)\n this.setNewMessageAction(true);\n }\n break;\n }\n case 'DIRECT_LINE/POST_ACTIVITY_FULFILLED': {\n switch (action.payload.activity.name) {\n case 'webchat/join':\n {\n if (this.provider !== undefined) {\n // Sets Chat Context\n dispatch({\n type: 'WEB_CHAT/SEND_EVENT',\n payload: {\n name: 'pvaSetContext',\n value: this.provider()\n }\n });\n }\n }\n break;\n case 'pvaSetContext':\n {\n if (this.props.config.triggerQuery) {\n // Initialize chat after Chat Context is set\n dispatch({\n type: 'WEB_CHAT/SEND_MESSAGE_BACK',\n payload: {\n text: this.props.config.triggerQuery\n }\n });\n }\n }\n break;\n default: {\n // default nothing\n }\n }\n break;\n }\n default: {\n // default nothing\n }\n }\n\n return next(action);\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport React, { FunctionComponent, useMemo, useState } from 'react';\nimport { getChatStyleOptions } from '../helpers/StyleComposers';\nimport { IChatCoreProps, IAction, IDispatch } from '../interfaces';\nimport { CommerceChatStore } from '../helpers/CommerceChatStore';\n\n/**\n * Just a core Chat component\n * @param props\n */\n\nconst ChatCore: FunctionComponent = (props: IChatCoreProps) => {\n const { ReactWebChat } = window.WebChat;\n\n const [userId, setUserId] = useState('');\n useMemo(() => {\n if (props.provider) {\n const ctx = props.provider();\n if (ctx.UserId) {\n setUserId(typeof ctx.UserId === 'string' ? ctx.UserId : ctx.UserId.value.toString());\n }\n }\n }, [props.provider]);\n\n const directLine = useMemo(() => {\n return window.WebChat.createDirectLine({ token: props.directLineToken });\n }, [props.directLineToken]);\n\n const commerceChatStore = useMemo(() => {\n if (directLine && props.provider) {\n return new CommerceChatStore(props.config, props.provider, props.setNewMessage);\n }\n return undefined;\n }, [props.provider, directLine]);\n\n const store = useMemo(() => {\n return window.WebChat.createStore(\n {},\n ({ dispatch }: { dispatch: IDispatch }) => (next: (action: IAction) => IDispatch) => (action: IAction) => {\n commerceChatStore?.actionHandler({ dispatch, next, action });\n }\n );\n }, [commerceChatStore]);\n const styleOptions = getChatStyleOptions(props.config.config);\n\n return props.directLineToken !== '' ? (\n \n ) : (\n

Please wait while we are connecting.

\n );\n};\n\nexport default ChatCore;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport React, { FunctionComponent, useEffect, useState } from 'react';\nimport { isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport ContextProvider from '../helpers/ContextProvider';\nimport { getChatStyling } from '../helpers/StyleComposers';\nimport { TContextProvider } from '../../interfaces';\nimport { IPvaChatConnectorViewProps } from '../msdyn365-pva-chat-connector';\nimport { CommerceChatStore } from '../helpers';\nimport ChatCore from './ChatCore';\n\nconst INVALID_TOKEN = 'INVALID_TOKEN';\nconst CLOSE_IMG_DATA =\n 'M443.6,387.1L312.4,255.4l131.5-130c5.4-5.4,5.4-14.2,0-19.6l-37.4-37.6c-2.6-2.6-6.1-4-9.8-4c-3.7,0-7.2,1.5-9.8,4 L256,197.8L124.9,68.3c-2.6-2.6-6.1-4-9.8-4c-3.7,0-7.2,1.5-9.8,4L68,105.9c-5.4,5.4-5.4,14.2,0,19.6l131.5,130L68.4,387.1 c-2.6,2.6-4.1,6.1-4.1,9.8c0,3.7,1.4,7.2,4.1,9.8l37.4,37.6c2.7,2.7,6.2,4.1,9.8,4.1c3.5,0,7.1-1.3,9.8-4.1L256,313.1l130.7,131.1 c2.7,2.7,6.2,4.1,9.8,4.1c3.5,0,7.1-1.3,9.8-4.1l37.4-37.6c2.6-2.6,4.1-6.1,4.1-9.8C447.7,393.2,446.2,389.7,443.6,387.1z';\n\n/**\n * Outer chat component, displays chat button, and proactive chat, and handles custom actions\n * @param props IPvaChatConnectorViewProps\n */\nconst Chat: FunctionComponent = (props: IPvaChatConnectorViewProps) => {\n const [loaded, setLoaded] = useState(false); // loaded & minimized are needed as ChatWidget should not be removed from DOM (it resets chat)\n const [minimized, setMinimized] = useState(true);\n const [newMessage, setNewMessage] = useState(false); // TODO: use this to indicate new message in minimized chat\n const [token, setToken] = useState(''); // holds conversation token for WebChat\n const [isProactive, setIsProactive] = useState(false); // if proactive chat is triggered\n const [proactiveMessage, setProactiveMessage] = useState(props.config.proactiveDefaultMessage);\n const [closed, setClosed] = useState(false);\n const [provider, setProvider] = useState();\n const isMobileDevice =\n isMobile({ variant: VariantType.Browser, context: props.context.request }) === 'xs' ||\n isMobile({ variant: VariantType.Viewport, context: props.context.request }) === 'xs';\n const chatStyle = getChatStyling(props.config, minimized, isMobileDevice); // generates chat style objects based on configuration\n const handleMaximizeButtonClick = () => {\n setLoaded(true);\n setMinimized(false);\n setNewMessage(false);\n };\n const handleMinimizeButtonClick = () => {\n setMinimized(true);\n setNewMessage(false);\n };\n const handleCloseButtonClick = () => {\n setClosed(true);\n setLoaded(false);\n setMinimized(true);\n setNewMessage(false);\n setIsProactive(false);\n };\n useEffect(() => {\n if (loaded) {\n CommerceChatStore.getDirectLineToken(props)\n .then(directLineToken => {\n setToken(directLineToken);\n })\n .catch(e => {\n setToken(INVALID_TOKEN);\n props.telemetry.exception(e);\n });\n }\n }, [loaded]);\n useEffect(() => {\n (async () => {\n const contextProvider = new ContextProvider(props); // Generates context (provider) and checks for proactive chat triggers\n const prov = await contextProvider.init();\n if (contextProvider.data.enabled) {\n props.context.telemetry.debug(`[Chat] Proactive chat was enabled: '${contextProvider.data.enabled}'.`);\n // if proactive chat is triggered\n const timeout = contextProvider.data.timeout * 1000; // timeout is there only for WaitOnTime trigger\n setTimeout(() => {\n if (!loaded) {\n props.context.telemetry.debug(`[Chat] Proactive chat was loaded: ${loaded}.`);\n setProactiveMessage(contextProvider.data.message);\n setIsProactive(true);\n }\n }, timeout);\n }\n setProvider(() => prov);\n })().catch(e => props.telemetry.exception(e));\n }, []);\n useEffect(() => {\n if (closed) {\n setClosed(false);\n }\n }, [token, provider]);\n const isValidToken = (): boolean => {\n return `${token}` !== INVALID_TOKEN;\n };\n return (\n \n {minimized && (!isProactive || (isProactive && loaded)) && (\n \n )}\n {minimized && isProactive && !loaded && (\n
\n
\n {props.config.storeLogoURL && (\n logo\n )}\n
\n
\n
\n

{proactiveMessage}

\n \n
\n
\n )}\n {loaded && isValidToken() && (\n
\n
\n {props.config.storeLogoURL && (\n logo\n )}\n
\n \n
\n
\n \n
\n
\n )}\n {!isValidToken() &&
{props.config.unableToLoadChatMessage}
}\n
\n );\n};\n\nexport default Chat;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\nimport Chat from './components/Chat';\nimport { IPvaChatConnectorViewProps } from './msdyn365-pva-chat-connector';\n\nexport default (props: IPvaChatConnectorViewProps) => {\n // Only for CDN loading check, won't be needed with npm package of Botframework-WebChat\n const [loaded, setLoaded] = React.useState(false);\n const p = {\n ...props\n };\n\n // Just to verify that CDN Chat Widget js lib is loaded\n // Remove this block if moving to npm package of Botframework-WebChat\n const interval = setInterval(() => {\n const t = typeof window;\n if (t !== 'undefined' && window.WebChat) {\n setLoaded(true);\n clearInterval(interval);\n }\n }, 100);\n\n return
{loaded && }
;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\ninterface IAccountCustomerBalanceTileInfo {\n label?: string;\n value?: string;\n verbagePrefix?: string;\n verbagePostfix?: string;\n className?: string;\n error?: string;\n}\n\nexport const ErrorComponent: React.FC = ({ error }) => (\n {error}\n);\n\nexport const CreditComponent: React.FC = ({ verbagePrefix, verbagePostfix, value, className }) => {\n return (\n
\n {verbagePrefix}\n {value}\n {verbagePostfix}\n
\n );\n};\n\nexport const InfoComponent: React.FC = ({ label, value, className }) => (\n
\n {label}\n {value}\n
\n);\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IHelp, IOrderSummary, IPaymentMethods } from '@msdyn365-commerce-modules/order-management/src/modules/checkout-order-confirmation/../../common';\r\nimport { IGroup, IGroupDelivery, IGroups } from '@msdyn365-commerce-modules/order-management/src/modules/checkout-order-confirmation/../../common/get-groups';\r\nimport { IOrderInformation } from '@msdyn365-commerce-modules/order-management/src/modules/checkout-order-confirmation/../../common/get-order-information';\r\nimport { ISalesLine } from '@msdyn365-commerce-modules/order-management/src/modules/checkout-order-confirmation/../../common/get-sales-line';\r\nimport {\r\n ICheckoutOrderConfirmationViewProps\r\n} from '@msdyn365-commerce-modules/order-management/src/modules/checkout-order-confirmation/./checkout-order-confirmation';\r\n\r\nexport const OrderConfirmationOrderInfomation: React.FC = ({\r\n orderInformationProps,\r\n // receiptEmail,\r\n // createdDate,\r\n // channelReferenceId\r\n}) => (\r\n \r\n {/* {channelReferenceId} */}\r\n {/* {receiptEmail} */}\r\n \r\n);\r\n\r\nexport const OrderConfirmationSalesLine: React.FC = ({ salesLineProps, salesLine, buyAgainButton }) => (\r\n \r\n {salesLine}\r\n \r\n);\r\n\r\nexport const OrderConfirmationGroupDelivery: React.FC = ({ deliveryProps, heading, count, processing, address, pickupDateTimeslot, trackingInfo }) => (\r\n \r\n {heading}\r\n {count}\r\n {address}\r\n {pickupDateTimeslot}\r\n \r\n);\r\n\r\nexport const OrderConfirmationGroup: React.FC = ({ groupProps, delivery, salesLinesProps, salesLines }) => (\r\n \r\n {delivery && }\r\n {salesLines && (\r\n \r\n {salesLines.map(salesLine => (\r\n \r\n ))}\r\n \r\n )}\r\n \r\n);\r\n\r\nexport const OrderConfirmationGroups: React.FC = ({ groupsProps, groups }) => (\r\n \r\n {groups.map((group, index) => (\r\n \r\n ))}\r\n \r\n);\r\n\r\nexport const OrderConfirmationOrderSummary: React.FC = ({ orderSummaryProps, heading, subtotal, shipping, tax, totalAmount, earnedPoints }) => (\r\n \r\n {heading}\r\n {subtotal}\r\n {shipping}\r\n {tax}\r\n {totalAmount}\r\n {earnedPoints}\r\n \r\n);\r\n\r\nexport const OrderConfirmationPayment: React.FC = ({ paymentMethodsProps, title, methods }) => (\r\n \r\n {title}\r\n {methods}\r\n \r\n);\r\n\r\nexport const OrderConfirmationHelp: React.FC = ({ helpProps, needHelpLabel, helpLineNumberLabel, contactNumber }) => (\r\n \r\n {needHelpLabel}\r\n {helpLineNumberLabel}\r\n {contactNumber}\r\n \r\n);\r\n\r\nconst OrderConfirmationView: React.FC = ({\r\n moduleProps,\r\n heading,\r\n backToShoppingLink,\r\n alert,\r\n loading,\r\n // orderInfomation,\r\n orderSummary,\r\n payment,\r\n help,\r\n groups\r\n}) => {\r\n return (\r\n \r\n {heading}\r\n {alert}\r\n {loading}\r\n {/* {orderInfomation && } */}\r\n {backToShoppingLink}\r\n {groups && }\r\n {orderSummary && }\r\n {payment && }\r\n {help && }\r\n \r\n );\r\n};\r\n\r\nexport default OrderConfirmationView;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { BackToTop, getTelemetryObject, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IBackTopFooterProps } from './back-top-footer.props.autogenerated';\n\n/**\n *\n * BackTopFooter component.\n * @extends {React.PureComponent>}\n */\nclass BackTopFooter extends React.PureComponent> {\n private readonly editProps: Msdyn365.ITextEditProps = {\n requestContext: this.props.context.request,\n onEdit: (event: Msdyn365.ContentEditableEvent) => (this.props.config.backtoTopText = event.target.value)\n };\n\n private readonly telemetryContent?: ITelemetryContent;\n\n constructor(props: IBackTopFooterProps<{}>) {\n super(props);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public render(): JSX.Element | null {\n if (!this.props.config.destination) {\n this.props.telemetry.error('BackToTop.destination has not been provided, module wont render.');\n return null;\n }\n\n return (\n \n );\n }\n}\n\nexport default BackTopFooter;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ICookieComplianceAcceptButton {\n acceptCookiesButtonText?: string;\n acceptCookiesButtonAriaLabel?: string;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n onClose(): void;\n}\n\nexport const CookieComplianceAcceptButton: React.FC = ({\n acceptCookiesButtonText,\n acceptCookiesButtonAriaLabel,\n telemetryContent,\n onClose\n}) => {\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, 'accept cookies');\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n \n {acceptCookiesButtonText}\n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IActionLinksData } from '../cookie-compliance.props.autogenerated';\n\nexport interface ICookieComplianceLinks {\n links: IActionLinksData[];\n requestContext: Msdyn365.IRequestContext;\n telemetryContent: ITelemetryContent;\n onTextChange?(index: number): (event: Msdyn365.ContentEditableEvent) => void;\n}\n\n/**\n *\n * ContentCardLinks component.\n * @extends {React.PureComponent}\n */\nexport class CookieComplianceLinks extends React.PureComponent {\n public render(): JSX.Element {\n const editableLinks = this._mapEditableLinks(this.props.links);\n return (\n \n {editableLinks && editableLinks.length > 0 ? (\n \n ) : null}\n \n );\n }\n\n private readonly _mapEditableLinks = (linkdata: IActionLinksData[]): Msdyn365.ILinksData[] | null => {\n if (!linkdata || linkdata.length === 0) {\n return null;\n }\n const editableLinks: Msdyn365.ILinksData[] = [];\n linkdata.forEach((link, index) => {\n // Construct telemetry attribute to render\n const payLoad = getPayloadObject('click', this.props.telemetryContent, '', '');\n const linkText = link.linkText ? link.linkText : '';\n payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.props.telemetryContent, payLoad);\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: link.ariaLabel,\n className: 'link',\n linkText: link.linkText,\n linkUrl: link.linkUrl.destinationUrl,\n openInNewTab: link.openInNewTab,\n role: 'link',\n additionalProperties: attributes,\n onClick: onTelemetryClick(this.props.telemetryContent, payLoad, linkText)\n };\n editableLinks.push(editableLink);\n });\n\n return editableLinks;\n };\n}\n\nexport default CookieComplianceLinks;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as MsDyn365 from '@msdyn365-commerce/core';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { getTelemetryObject, IAlertProps, IModuleProps, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { CookieComplianceAcceptButton, CookieComplianceLinks } from './components';\nimport { ICookieComplianceConfig, ICookieComplianceProps } from './cookie-compliance.props.autogenerated';\n\n/**\n * Alert state interface.\n */\nexport interface IAlertState {\n visible: boolean;\n}\n\n/**\n * Cookie compliance view props interface.\n */\nexport interface ICookieComplianceViewProps extends ICookieComplianceProps<{}> {\n CookieComplianceBanner: IModuleProps;\n AlertProps: IAlertProps;\n Content: INodeProps;\n text?: React.ReactNode;\n links?: React.ReactNode;\n acceptButton?: React.ReactNode;\n className: string;\n onDismiss(): void;\n}\n\n/**\n *\n * CookieCompliance component.\n * @extends {React.PureComponent>}\n */\nclass CookieCompliance extends React.PureComponent, IAlertState> {\n private readonly cookieRef: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n public constructor(props: ICookieComplianceProps) {\n super(props);\n this.state = { visible: false };\n this.cookieRef = React.createRef();\n this._onDismiss = this._onDismiss.bind(this);\n }\n\n public componentDidMount(): void {\n const { context } = this.props;\n\n if (context && context.request && context.request.cookies && !context.request.cookies.isConsentGiven()) {\n this.setState({ visible: true });\n }\n }\n\n public render(): JSX.Element | null {\n const { config, context, resources, telemetry } = this.props;\n const { acceptCookiesButtonText, acceptCookiesAriaLabel } = resources;\n const { visible } = this.state;\n\n const isConsentGiven = context && context.request && context.request.cookies && context.request.cookies.isConsentGiven();\n let moduleConfig: ICookieComplianceConfig;\n\n try {\n moduleConfig = config;\n } catch (error) {\n telemetry.error(`Something went wrong while rendering the alert module ------${error}`);\n return
{error}
;\n }\n\n if (isConsentGiven && !visible) {\n this.props.context.telemetry.error('Cookie Compliance content is empty, module wont render.');\n return null;\n }\n\n if (!MsDyn365.msdyn365Commerce.isBrowser) {\n return <>;\n }\n\n const viewProps = {\n ...this.props,\n onDismiss: this._onDismiss,\n CookieComplianceBanner: {\n moduleProps: this.props,\n className: classnames('ms-cookie-compliance', moduleConfig.className),\n ref: this.cookieRef\n },\n AlertProps: {\n className: 'ms-cookie-compliance__container',\n color: 'white',\n fade: false\n },\n Content: {\n className: 'ms-cookie-compliance__content'\n },\n text: moduleConfig.content && (\n \n ),\n links: ArrayExtensions.hasElements(moduleConfig.actionLinks) && (\n \n ),\n acceptButton: (\n \n )\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Handles Link content change event.\n * @param linkIndex - Index of link in linkarray.\n * @returns Void.\n */\n public handleLinkTextChange = (linkIndex: number) => (event: MsDyn365.ContentEditableEvent): void => {\n if (this.props.config.actionLinks?.[linkIndex]) {\n this.props.config.actionLinks[linkIndex].linkText = event.target.value;\n }\n };\n\n /**\n * Handles content change event.\n * @param event - Event.\n */\n public handleContentChange = (event: MsDyn365.ContentEditableEvent): void => {\n this.props.config.content = event.target.value;\n };\n\n private _onDismiss(): void {\n const { context } = this.props;\n\n if (context && context.request && context.request.cookies) {\n context.request.cookies.setConsentCookie();\n location.reload();\n }\n this.setState({ visible: false });\n }\n}\n\nexport default CookieCompliance;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponent, IComponentProps } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { Coupon } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n format,\n getPayloadObject,\n getTelemetryAttributes,\n IPayLoad,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\n/**\n * IPromoCodeProps: Interface for promo code component.\n */\nexport interface IPromoCodeProps extends IComponentProps<{}> {\n cart: ICartState | undefined;\n promoCodeHeadingText: string;\n appliedPromoCodeHeadingText: string;\n removePromoAriaLabelFormat: string;\n promoPlaceholderText: string;\n promoCodeApplyButtonText: string;\n collapseTimeOut: number;\n removePromoText: string;\n invalidPromoCodeErrorText: string;\n failedToAddPromoCodeErrorText: string;\n duplicatePromoCodeErrorText: string;\n failedToRemovePromoCodeErrorText: string;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n promoCodeApplyCallback?(): void;\n}\n\n/**\n * IPromoCodeProps: Interface for promo code component.\n */\nexport interface IPromoCodeComponent extends IComponent {}\n\n/**\n * IPromoCodeProps: Interface for promo code state.\n */\ninterface IPromoCodeState {\n promoCodeInputValue: string;\n error: string;\n canApply: boolean;\n}\n\n/**\n *\n * The PromoCode component renders the promocode section.\n * @extends {React.PureComponent}\n */\nclass PromoCode extends React.PureComponent {\n private readonly payLoad: IPayLoad;\n\n public constructor(props: IPromoCodeProps) {\n super(props);\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, TelemetryConstant.ApplyPromoCode);\n this.state = {\n promoCodeInputValue: '',\n error: '',\n canApply: false\n };\n }\n\n public render(): JSX.Element {\n return (\n
\n
{this.props.promoCodeHeadingText}
\n {this._renderForm(this.props.promoPlaceholderText, this.props.promoCodeApplyButtonText, this.props.cart)}\n

\n {this.state.error}\n

\n {this._renderAppliedPromoCode(this.props)}\n
\n );\n }\n\n /**\n * On input change method.\n * @param event - Change event.\n */\n private readonly _onInputChangeHandler = (event: React.ChangeEvent) => {\n const error = event.target.value === '' ? '' : this.state.error;\n this.setState({\n promoCodeInputValue: event.target.value.trim(),\n error,\n canApply: !!event.target.value\n });\n };\n\n /**\n * Apply promo code method.\n * @param cartState - Cart state interface.\n */\n private readonly _applyPromotion = (cartState: ICartState | undefined) => {\n if (!cartState) {\n return;\n }\n const appliedPromo = this.state.promoCodeInputValue;\n\n cartState\n .addPromoCode({ promoCode: appliedPromo })\n .then(result => {\n if (result.status === 'SUCCESS') {\n // Show success text\n this.setState({ promoCodeInputValue: '', error: '', canApply: false });\n } else if (result.substatus === 'ALREADYADDED') {\n this.setState({ error: this.props.duplicatePromoCodeErrorText });\n } else {\n this.setState({ error: this.props.invalidPromoCodeErrorText });\n }\n })\n .catch(() => {\n this.setState({ error: this.props.failedToAddPromoCodeErrorText });\n });\n };\n\n /**\n * On submit action.\n * @param cartState - Cart state.\n * @returns Apply promotion.\n */\n private readonly _onSubmitHandler = (cartState: ICartState | undefined) => (event: React.FormEvent) => {\n event.preventDefault();\n this._applyPromotion(cartState);\n };\n\n /**\n * On apply promotion.\n * @param cartState - Cart state.\n * @returns Apply promotion.\n */\n private readonly applyPromotionHandler = (cartState: ICartState | undefined) => () => {\n this._applyPromotion(cartState);\n };\n\n /**\n * Renders promo code form.\n * @param promoPlaceholderText - Promo code input box placeholder string.\n * @param promoCodeApplyButtonText - Promo code button text string.\n * @param cartState - Cart state interface.\n * @returns Promo code form.\n */\n private readonly _renderForm = (promoPlaceholderText: string, promoCodeApplyButtonText: string, cartState: ICartState | undefined) => {\n const attributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n\n return (\n
\n
\n \n \n
\n
\n );\n };\n\n /**\n * Remove promo code method.\n * @param cartState - Cart state interface.\n * @param event - Mouse event.\n */\n private readonly _removePromotion = (cartState: ICartState | undefined, event: React.MouseEvent) => {\n if (!cartState) {\n return;\n }\n const code = event.currentTarget.getAttribute('data-value') ?? '';\n cartState\n .removePromoCodes({\n promoCodes: [code]\n })\n .then(result => {\n if (result.status === 'SUCCESS') {\n this.setState({ error: '' });\n }\n })\n .catch(() => {\n this.setState({ error: this.props.failedToRemovePromoCodeErrorText });\n });\n };\n\n /**\n * Renders applied promo code form.\n * @param props - Promo code component props.\n * @returns Applied promo code.\n */\n private readonly _renderAppliedPromoCode = (props: IPromoCodeProps) => {\n if (!props.cart || !props.cart.cart.Coupons || !ArrayExtensions.hasElements(props.cart.cart.Coupons)) {\n return;\n }\n\n /**\n * On remove promotion action.\n * @param event - Mouse event.\n */\n const removePromotionHandler = (event: React.MouseEvent) => {\n this._removePromotion(props.cart, event);\n };\n\n return (\n <>\n {props.cart.cart.Coupons.map((coupon: Coupon) => {\n const ariaLabel = props.removePromoAriaLabelFormat\n ? format(props.removePromoAriaLabelFormat, props.removePromoText, coupon.Code)\n : '';\n\n return (\n
\n
\n {'Code '}\n {coupon.Code}\n {'Applied '}\n
\n \n
\n );\n })}\n \n );\n };\n}\n\nexport default PromoCode;\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport { IMediaGalleryThumbnailItemViewProps,\r\n IMediaGalleryThumbnailsViewProps,\r\n IMediaGalleryViewProps\r\n} from '@msdyn365-commerce-modules/media-gallery';\r\nimport { Button, KeyCodes, Module, Node, NodeTag } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport React from 'react';\r\n\r\n/**\r\n * Render the thumbnail item images.\r\n * @param thumbnail - The carousel thumbnail line props.\r\n * @returns Return HTML having thumnailcontainer props with image.\r\n */\r\nconst renderThumbnailItem = (thumbnail: IMediaGalleryThumbnailItemViewProps): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\r\n const { ThumbnailItemContainerProps, Picture } = thumbnail;\r\n\r\n return (\r\n \r\n {Picture}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Gets the thumbnail item to display media gallery images.\r\n * @param image - The media gallery images.\r\n * @param imageSettings - Image settings for the image gallery items.\r\n * @param imageId - Image id.\r\n * @param modifiedActiveIndex - Modified Index of the images when selection changes.\r\n * @param props - The Media gallery view props from business layer.\r\n * @returns Return thumbnail view props which will be used to render images.\r\n */\r\nconst GetThumbnailItemComponent = (\r\n image: IImageData,\r\n imageSettings: IImageSettings,\r\n imageId: number,\r\n modifiedActiveIndex: number,\r\n props: IMediaGalleryViewProps\r\n): IMediaGalleryThumbnailItemViewProps => {\r\n\r\n /**\r\n * OnClick method of media gallery item.\r\n * */\r\n const onClick = () => {\r\n props.callbackToggle?.();\r\n props.callbackThumbnailClick?.(imageId);\r\n props.state.activeIndex = imageId;\r\n };\r\n\r\n const classes = classnames(\r\n 'ms-media-gallery__thumbnail-item',\r\n modifiedActiveIndex === imageId ? 'ms-media-gallery__thumbnail-item-active' : ''\r\n );\r\n\r\n /**\r\n * Keydown event of media gallery item.\r\n * @param event - React.KeyboardEvent.\r\n * */\r\n const handleKeyDown = (event: React.KeyboardEvent) => {\r\n if (event.keyCode === KeyCodes.Enter) {\r\n event.preventDefault();\r\n onClick();\r\n }\r\n };\r\n\r\n return {\r\n ThumbnailItemContainerProps: {\r\n tag: 'li' as NodeTag,\r\n className: classes,\r\n role: 'presentation',\r\n key: imageId\r\n },\r\n Picture: (\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 * Gets the empty thumbnail item to display media gallery images.\r\n * @param imageSettings - Image settings for the image gallery items.\r\n * @param props - The Media gallery view props from business layer.\r\n * @returns Return thumbnail view props which will be used to render empty images.\r\n */\r\nconst GetEmptyThumbnailItemComponent = (imageSettings: IImageSettings, props: IMediaGalleryViewProps): IMediaGalleryThumbnailItemViewProps => {\r\n return {\r\n ThumbnailItemContainerProps: {\r\n tag: 'li' as NodeTag,\r\n className: 'ms-media-gallery__thumbnail-item',\r\n role: 'tab',\r\n tabIndex: 0,\r\n key: 0,\r\n 'aria-label': '',\r\n 'aria-selected': true\r\n },\r\n Picture: (\r\n \r\n )\r\n };\r\n};\r\n\r\n/**\r\n * Update media gallery items method.\r\n * @param items - The media gallery thumbnail item view props.\r\n * @returns The IImageData array.\r\n */\r\nconst getMediaGalleryItems = (items?: IMediaGalleryThumbnailItemViewProps[]): IImageData[] | undefined => {\r\n return items?.map(item => {\r\n return {\r\n altText: item.Picture.props.altText,\r\n src: item.Picture.props.src\r\n };\r\n });\r\n};\r\n\r\nconst defaultThumbnailImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=295&h=295&q=80&m=6&f=jpg', w: 295, h: 295 },\r\n xl: { q: 'w=295&h=295&q=80&m=6&f=jpg', w: 295, h: 295 }\r\n },\r\n lazyload: true,\r\n cropFocalRegion: true\r\n};\r\n\r\n/**\r\n * Render the Media gallery thumbnails to represent images in grid view.\r\n * @param thumbnails - The thumbnail view props.\r\n * @param props - The media gallery view props.\r\n * @returns - The single slide carousel component to render as media gallery image.\r\n */\r\nconst renderThumbnails = (\r\n thumbnails: IMediaGalleryThumbnailsViewProps,\r\n props: IMediaGalleryViewProps\r\n): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\r\n const { ThumbnailsContainerProps, SingleSlideCarouselComponentProps } = thumbnails;\r\n const { state, Thumbnails } = props;\r\n const mediaGalleryItems = getMediaGalleryItems(Thumbnails.items);\r\n\r\n const items: IMediaGalleryThumbnailItemViewProps[] | undefined =\r\n // eslint-disable-next-line multiline-ternary -- need multiline for easy code reading\r\n state.lastUpdate && mediaGalleryItems && mediaGalleryItems[0].src === 'empty' ? [GetEmptyThumbnailItemComponent(defaultThumbnailImageSettings, props)] :\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery\r\n mediaGalleryItems?.map((item: IImageData, id: number) => GetThumbnailItemComponent(item,\r\n defaultThumbnailImageSettings, id, state.activeIndex, props));\r\n\r\n return (\r\n \r\n \r\n {items?.map(renderThumbnailItem)}\r\n \r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render the Media gallery items using viewprops.\r\n * @param props - The media gallery view props.\r\n * @returns The media gallery module wrapping up images node.\r\n */\r\nconst mediaGalleryView: React.FC = props => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\r\n const { CarouselProps, Thumbnails, MediaGallery, Modal } = props;\r\n return (\r\n \r\n \r\n {Modal}\r\n {renderThumbnails(Thumbnails, props)}\r\n \r\n );\r\n};\r\n\r\nexport default mediaGalleryView;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IDictionary, IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { IMenuItemData, INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Drawer,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IDrawerState,\n IPayLoad,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\ninterface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: IImageData[] | null;\n categoryImageAltText: string;\n drawerKeyValue: IDictionary;\n}\n\n/**\n *\n * NavigationMenuView component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuView extends React.PureComponent {\n private currentLevel: number = 0;\n\n private readonly _positionInSetOffset: number = 1;\n\n private readonly escapeKey: number = 27;\n\n private readonly menuNode: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: INavigationMenuViewProps) {\n super(props);\n this.menuNode = React.createRef();\n this.state = { activeMenu: undefined, parentMenu: undefined, categoryImageAltText: '', drawerKeyValue: {} };\n this._closeSubmenu = this._closeSubmenu.bind(this);\n this._escFunction = this._escFunction.bind(this);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n document.body.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n document.body.addEventListener('mousedown', this._handleClickOutside);\n document.body.addEventListener('focusout', this._handleFocusOutside);\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n document.removeEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n document.body.removeEventListener('focusout', this._handleFocusOutside, false);\n }\n }\n\n public render(): JSX.Element | null {\n const { isMobileView } = this.props;\n\n this.currentLevel = 1;\n return <>{isMobileView ? this._renderMobileMenu() : this._renderDesktopMenu()};\n }\n\n /**\n * Method to render mobile menu.\n * @returns Jsx element.\n */\n private _renderMobileMenu(): JSX.Element {\n const { isMobileView, menuItemData, Navigation } = this.props;\n return (\n \n {menuItemData.map((menuItem: IMenuItemData, posinset: number) => {\n return this._renderDrawerMenu(menuItem, menuItemData.length, posinset + this._positionInSetOffset);\n })}\n \n );\n }\n\n /**\n * Method to render desktop menu.\n * @returns Jsx element.\n */\n private _renderDesktopMenu(): JSX.Element {\n const { MenuList, Navigation } = this.props;\n return (\n \n \n {this._renderDisplay()}\n \n \n );\n }\n\n /**\n * Method to render drawer menu.\n * @param menuItem -Menuitem data.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawerMenu(menuItem: IMenuItemData, setSize: number, posinset: number): JSX.Element | null {\n if (menuItem && menuItem.subMenu && ArrayExtensions.hasElements(menuItem.subMenu)) {\n return this._renderDrawer(menuItem, setSize, posinset);\n }\n return this._renderLinkMenuItem(menuItem, undefined, true, false, setSize, posinset);\n }\n\n /**\n * Method to render drawer component.\n * @param menuItem -Menuitem data.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawer(menuItem: IMenuItemData, setSize?: number, posinset?: number): JSX.Element | null {\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue !== undefined ? keyValue : {};\n const { isMobileView } = this.props;\n\n let isDrawerOpen = false;\n if (keys[buttonText]) {\n isDrawerOpen = true;\n }\n const colProps: ICollapseProps = { isOpen: isDrawerOpen };\n return (\n \n
\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData, currentPos: number) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n return this._renderDrawer(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset);\n }\n return this._renderDrawerLink(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset);\n })}\n
\n \n );\n }\n\n /**\n * Method to render link.\n * @param linkText -Text on Menu link.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderLinkText(linkText: string | undefined, setSize: number | undefined, posinset: number | undefined): JSX.Element {\n return (\n \n {linkText}\n \n );\n }\n\n /**\n * Method to render drawer link.\n * @param item -Single Menuitem.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawerLink(item: IMenuItemData, setSize: number | undefined, posinset: number): JSX.Element | null {\n if (item && item.linkText && item.linkURL && item.linkURL.length > 0) {\n return this._renderLinkMenuItem(item, undefined, true, false, setSize, posinset);\n } else if (item && item.linkText && !item.linkURL) {\n return this._renderSpanMenuItem(item);\n }\n return null;\n }\n\n /**\n * Method to generate menu.\n * @returns Jsx element.\n */\n private _renderDisplay(): JSX.Element[] {\n const { ListItem, menuItemData, isMobileView } = this.props;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\n let menuItem: IMenuItemData = {};\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum && menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n this.setState({ parentMenu: undefined });\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum) as IMenuItemData;\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n menuItem &&\n menuItemList.push(\n \n {` `}\n {this._createMenuItemList(menuItem)}\n {` `}\n \n );\n } else {\n menuItemData.forEach((item: IMenuItemData, index: number) => {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n });\n }\n\n return menuItemList;\n }\n\n /**\n * Method to get data for submenu.\n * @param item -Single Menuitem.\n * @returns IMenuItemData.\n */\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item && item.subMenu;\n if (subMenus && subMenus.length > 0) {\n for (let i = 0; i <= subMenus.length - 1; i++) {\n if (subMenus[i].id === this.state.activeMenu) {\n this.setState({ parentMenu: item?.id });\n return subMenus[i];\n }\n const found = this._getFromSubMenu(subMenus[i]);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n /**\n * Method to create item list.\n * @param menuItemData -Single Menuitem.\n * @returns Jsx element.\n */\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id);\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\n \n );\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id, false, true);\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\n return this._renderSpanMenuItem(menuItemData, menuItemData.id, true);\n }\n\n return null;\n }\n\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number, IsSubMenu?: boolean): JSX.Element | null {\n const { isMobileView, ListItem } = this.props;\n const enableMultiSupportMenu = this.props.config.enableMultilevelMenu || false;\n const subMenuLevel = 3;\n const multiLevelSupportedMenu = this.props.config.menuLevelSupport || subMenuLevel;\n\n // Const isParentMenu:boolean= false;\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || subMenus.length === 0) {\n this.props.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions =\n subMenus &&\n subMenus.map((option: IMenuItemData, idx: number) => {\n const hasOptions = option.subMenu && option.subMenu.length > 0;\n let menuItem: JSX.Element | null;\n if (hasOptions && isMobileView) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, idx) : this._renderSpanMenuItem(option);\n }\n let subMenu;\n const haveSubmenu = hasOptions && enableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - 1;\n if (haveSubmenu) {\n this.currentLevel++;\n levelClassName = enableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined, true);\n }\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, activeMenu, IsSubMenu);\n }\n\n /**\n * Method to render button menu item.\n * @param option -Single Menuitem.\n * @param activeMenu -Active menu number.\n * @param index -Active menu index.\n * @returns Jsx element.\n */\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n const { Button } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n /**\n * Method to render link menu item.\n * @param option -Single Menuitem.\n * @param index -Active menu index.\n * @param hoverEffect -Active menu effect.\n * @param isParent -Is parent menu.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderLinkMenuItem(\n option: IMenuItemData,\n index?: number,\n hoverEffect: boolean = true,\n isParent: boolean = false,\n setSize?: number,\n posinset?: number\n ): JSX.Element | null {\n const { Link, isMobileView } = this.props;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n /**\n * Method to render promotional link.\n * @param linkText -Link text.\n * @param linkUrl -Link url.\n * @returns Jsx element.\n */\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n /**\n * Method to render span menu item.\n * @param option -Single Menu Item.\n * @param index -Index.\n * @param isParent -Is parent menu.\n * @returns Jsx element.\n */\n private _renderSpanMenuItem(option: IMenuItemData, index?: number, isParent: boolean = false): JSX.Element | null {\n const { Span } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n /**\n * Method to render menu.\n * @param level -Menu level.\n * @param menuOptions -Menu lists.\n * @param currentItem -Menu current.\n * @param submenu -Mneu has submenu or not.\n * @returns Jsx element.\n */\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number, submenu?: boolean): JSX.Element | null {\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, isMobileView, showPromotionalContent } = this.props;\n const categoryImageDisplay =\n !isMobileView && showCategoryImage && this.state.categoryImage !== null && this.state.categoryImage !== undefined && !submenu;\n const promotionalContentDisplay =\n !isMobileView && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !submenu;\n const DivContainerClass = this.currentLevel > 2 || categoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = 1;\n return (\n \n 2 &&\n 'navmenu-multi-level'\n )}\n >\n {menuOptions}\n \n
\n {categoryImageDisplay &&\n this.state.categoryImage &&\n this.state.categoryImage.map(item => (\n \n {this.state.categoryImage && this._getCategoryImage(item)}\n {promotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n
\n \n );\n }\n\n private readonly _updateCategoryImage = (categoryImageSrc: string, option: IMenuItemData) => () => {\n const linkText = option && option.linkText ? option.linkText : '';\n const promotionalImage: IImageData[] = [{ src: categoryImageSrc, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n option.promotionalContent.map(item => {\n if (item && item.image) {\n const imageSrc = item.image.src;\n const promotionalItemImageSettings = item.image.imageSettings;\n promotionalImage.push({\n src: imageSrc,\n altText: item.text,\n imageSettings: promotionalItemImageSettings,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n });\n }\n this.setState({\n categoryImage: promotionalImage.length > 0 ? promotionalImage : [{ src: 'empty' }],\n categoryImageAltText: linkText\n });\n };\n\n /**\n * Method to handle dropdwon change.\n * @param data -Menuitem data.\n * @param parentId -Menu parent.\n * @returns Jsx element.\n */\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.props.isMobileView) {\n this.setState({\n activeMenu: this.state.activeMenu && this.state.activeMenu === data.id! ? undefined : data.id!,\n parentMenu: parentId\n });\n if (this.props.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n }\n\n this._resetFocus();\n };\n\n /**\n * Method to call when focus lost from menu.\n */\n private readonly _resetFocus = () => {\n if (this.props.isMobileView) {\n setTimeout(() => {\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\n }, 0);\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n this.setState({\n activeMenu: undefined,\n categoryImage: null\n });\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleFocusOutside = (event: FocusEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.relatedTarget as Node)) {\n this._closeSubmenu();\n }\n };\n\n /**\n * Method to handle close submenu event.\n */\n private _closeSubmenu(): void {\n if (!this.props.isMobileView) {\n this.setState({ activeMenu: undefined });\n }\n }\n\n /**\n * Method to handle escape key event.\n * @param event -HTML event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n if (event.keyCode === this.escapeKey) {\n if (!this.props.isMobileView) {\n const navDrawerList = Array.from(this.menuNode.current!.childNodes);\n for (const item of navDrawerList) {\n const navDrawerButton = item.firstChild as HTMLButtonElement;\n if (navDrawerButton.getAttribute('aria-expanded') === 'true') {\n navDrawerButton.focus();\n }\n }\n }\n this._closeSubmenu();\n }\n };\n\n private readonly _getCategoryImage = (categoryImage?: IImageData): React.ReactNode | null => {\n if (!categoryImage || !categoryImage.src) {\n return null;\n }\n\n const categoryImageUrl = generateImageUrl(categoryImage.src, this.props.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n sm: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n md: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n lg: { q: 'w=300&h=250&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n const ImageData: IImageData = { src: categoryImageUrl };\n return (\n \n );\n }\n return null;\n };\n\n /**\n * Method to handle escape key event.\n * @param drawerState -HTML event.\n */\n private readonly _onDrawerChange = (drawerState: IDrawerState) => {\n const { drawerKeyValue } = this.state;\n const drawerText: string = drawerState.buttonText !== undefined ? drawerState.buttonText : '';\n const newPair = { [drawerText]: drawerState.isOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n}\n\nexport default NavigationMenuView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport React from 'react';\n\nexport const SignUpText: React.FC<{ text: string }> = (props: { text: string }) => {\n return

{props.text}

;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, * as Msdyn365 from '@msdyn365-commerce/core';\nimport { issueLoyalty, IssueLoyaltyInput } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IModuleProps,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { SignUpText } from './components/loyalty-sign-up-small-components';\nimport { ILoyaltySignUpData } from './loyalty-sign-up.data';\nimport { ILoyaltySignUpProps } from './loyalty-sign-up.props.autogenerated';\n\nexport interface IAccountLoyaltyJoinState {\n clicked: boolean;\n}\nexport interface ILoyaltySignUpViewProps extends ILoyaltySignUpProps {\n LoyaltySignUp: IModuleProps;\n heading: React.ReactNode;\n memberHeading: React.ReactNode;\n signInLink: React.ReactElement;\n signUpText: React.ReactElement;\n signUpButton: React.ReactElement;\n detailsLink: React.ReactElement;\n termsLink: React.ReactElement;\n loading: boolean;\n infoMessageBar?: React.ReactNode;\n}\n\n/**\n *\n * LoyaltySignUp component.\n * @extends {React.Component>}\n */\n@observer\nclass LoyaltySignUp extends React.Component, IAccountLoyaltyJoinState> {\n private readonly telemetryContent?: ITelemetryContent;\n private readonly loyaltySignInAttributes: Msdyn365.IDictionary | undefined;\n private readonly loyaltySignUpAttributes: Msdyn365.IDictionary | undefined;\n private readonly loyaltyDetailsLinkAttributes: Msdyn365.IDictionary | undefined;\n private readonly loyaltyTermsLinkAttributes: Msdyn365.IDictionary | undefined;\n\n constructor(props: ILoyaltySignUpProps) {\n super(props);\n this.state = { clicked: false };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SignIn);\n this.loyaltySignInAttributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.SignUp;\n this.loyaltySignUpAttributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.LoyaltyDetailLink;\n this.loyaltyDetailsLinkAttributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.LoyaltyTermsLink;\n this.loyaltyTermsLinkAttributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n }\n\n public shouldComponentUpdate(nextProps: ILoyaltySignUpProps, nextState: IAccountLoyaltyJoinState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const {\n config: { className, heading, memberHeading },\n resources,\n context: {\n actionContext,\n request: {\n user: { signInUrl, isAuthenticated }\n }\n },\n data\n } = this.props;\n\n const termsUrl = Msdyn365.getUrlSync('loyaltyTerms', actionContext);\n let loyaltyJoinUrl = `${Msdyn365.getUrlSync('loyaltyJoin', actionContext)}?joiningLoyalty=true`;\n if (MsDyn365.isBrowser) {\n loyaltyJoinUrl = `${window.location.origin}${loyaltyJoinUrl}`;\n }\n const signInurl = `${signInUrl}?ru=${loyaltyJoinUrl}`;\n const completeClass = classname('ms-loyalty-signup', className);\n const loyaltyCard = data.loyaltyCard;\n const hasLoyaltyAccount = loyaltyCard.result && loyaltyCard.result.CardTenderTypeValue !== undefined;\n const customerInformation = data.customerInformation?.result;\n\n const invalidAsyncCustomerState: boolean =\n (this.props.context.app?.config?.canRenderAsyncCustomerDataAsUnmodifiable || false) &&\n (customerInformation?.IsAsyncCustomer || false);\n const viewProps = {\n ...this.props,\n className: completeClass,\n LoyaltySignUp: {\n moduleProps: this.props,\n className: completeClass\n },\n infoMessageBar: invalidAsyncCustomerState && (\n \n ),\n loading: !this.props.context.request.params.isEditor && loyaltyCard?.status === 'LOADING',\n heading: !hasLoyaltyAccount && heading && heading.text && (\n \n ),\n memberHeading: hasLoyaltyAccount && memberHeading && memberHeading.text && (\n \n ),\n signInLink: !isAuthenticated && (\n \n ),\n signUpText: !hasLoyaltyAccount && ,\n signUpButton: !hasLoyaltyAccount && isAuthenticated && (\n \n {this.props.resources.joinLoyaltyButtonText}\n \n ),\n detailsLink: hasLoyaltyAccount && (\n \n {this.props.resources.viewLoyaltyPageText}\n \n ),\n termsLink: !hasLoyaltyAccount && (\n \n )\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n\n public handleMemberHeadingChange = (event: Msdyn365.ContentEditableEvent) =>\n (this.props.config.memberHeading!.text = event.target.value);\n\n private readonly _issueLoyalty = () => {\n if (this.props.context.request.user.isAuthenticated && !this.state.clicked) {\n this.setState({ clicked: true });\n const input = new IssueLoyaltyInput(this.props.context.request.apiSettings);\n\n issueLoyalty(input, this.props.context.actionContext)\n .then(() => {\n if (MsDyn365.isBrowser) {\n window.location.assign(Msdyn365.getUrlSync('loyalty', this.props.context.actionContext) || '');\n }\n })\n .catch((error: Error) => {\n this.setState({ clicked: false });\n this.props.telemetry.error(error.message);\n this.props.telemetry.debug('Unable to issue loyalty card');\n });\n }\n };\n}\n\nexport default LoyaltySignUp;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IAccountCustomerBalanceTileViewProps } from './account-customer-balance-tile';\n\nconst AccountCustomerBalanceTileView: React.FC = props => {\n const { AccountCustomerBalanceTile, heading, content, links } = props;\n\n return (\n \n {heading}\n {content}\n {links}\n \n );\n};\n\nexport default AccountCustomerBalanceTileView;\n","import React from 'react';\r\nimport { AttributeTextValue, Customer, SalesOrder, SimpleProduct } from \"@msdyn365-commerce/retail-proxy\";\r\nimport { ICultureInfoFormatter } from '@msdyn365-commerce/core-internal';\r\nexport interface IOrderConfirmationDetailProps {\r\n cultureFormatter: ICultureInfoFormatter;\r\n salesOrder: SalesOrder;\r\n customer: Customer | undefined;\r\n deliveryMode: string;\r\n orderedProducts: SimpleProduct[]\r\n}\r\n\r\nexport const OrderConfirmationDetail: React.FC = ({salesOrder, cultureFormatter, customer, deliveryMode, orderedProducts}) => {\r\n\r\n const getProductDescription = (itemId: string): string => orderedProducts.find(p => p.ItemId === itemId)?.Description || '';\r\n\r\n const salesOrderAttrs = salesOrder.AttributeValues || [];\r\n const attr = salesOrderAttrs.find(s => s.Name === \"po-number\") as AttributeTextValue;\r\n return (\r\n
\r\n
\r\n

Order Confirmation

\r\n window.print() } />\r\n
\r\n\r\n
\r\n
\r\n
Order Information
\r\n
\r\n
\r\n

PO Number:

\r\n

{attr.TextValue}

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

Order Date:

\r\n {cultureFormatter.formatDate(salesOrder.CreatedDateTime!, {\r\n year: \"numeric\",\r\n month: \"short\",\r\n day: \"2-digit\"\r\n })}

\r\n
\r\n
\r\n {salesOrder.Comment ? (
\r\n
\r\n

Notes:

\r\n

{salesOrder.Comment}

\r\n
\r\n
) : null}\r\n
\r\n
\r\n
\r\n
Account Information
\r\n
\r\n
\r\n

Account Name:

\r\n

{customer?.FirstName}

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

Account Number:

\r\n

{customer?.AccountNumber}

\r\n
\r\n
\r\n
\r\n
\r\n
Shipping Information
\r\n
\r\n
\r\n

Shipping Address:

\r\n

{salesOrder.ShippingAddress?.Name}

\r\n

{salesOrder.ShippingAddress?.FullAddress}

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

Shipping Method:

\r\n

{deliveryMode}

\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 {salesOrder.SalesLines?.map((so, idx) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
LineItem IdDescriptionPriceQuantityTotal
{so.LineNumber}{so.ItemId}{getProductDescription(so.ItemId!)}\r\n {so.Comment ? <>
Notes:\r\n {so.Comment} : null }\r\n
{cultureFormatter.formatCurrency(so.Price!)}{so.Quantity}{cultureFormatter.formatCurrency(so.TotalAmount!)}
\r\n
\r\n

Order Total:

\r\n

{cultureFormatter.formatCurrency(salesOrder.TotalAmount!)}

\r\n\r\n
\r\n
\r\n\r\n );\r\n}\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IHelp, IOrderSummary, IPaymentMethods } from '@msdyn365-commerce-modules/order-management/src/modules/checkout-order-confirmation/../../common';\r\nimport { IGroup, IGroupDelivery, IGroups } from '@msdyn365-commerce-modules/order-management/src/modules/checkout-order-confirmation/../../common/get-groups';\r\nimport { IOrderInformation } from '@msdyn365-commerce-modules/order-management/src/modules/checkout-order-confirmation/../../common/get-order-information';\r\nimport { ISalesLine } from '@msdyn365-commerce-modules/order-management/src/modules/checkout-order-confirmation/../../common/get-sales-line';\r\nimport {\r\n ICheckoutOrderConfirmationViewProps\r\n} from '@msdyn365-commerce-modules/order-management/src/modules/checkout-order-confirmation/./checkout-order-confirmation';\r\nimport { OrderConfirmationDetail } from \"./components/OrderConfirmationDetail\";\r\nimport {\r\n ICheckoutOrderConfirmationProps\r\n} from \"../definition-extensions/checkout-order-confirmation.ext.props.autogenerated\";\r\nimport { ICheckoutOrderConfirmationData } from \"../definition-extensions/checkout-order-confirmation.data\";\r\nimport { SimpleProduct } from \"@msdyn365-commerce/retail-proxy\";\r\n\r\nexport const OrderConfirmationOrderInfomation: React.FC = ({\r\n orderInformationProps\r\n // receiptEmail\r\n // createdDate,\r\n // channelReferenceId\r\n}) => (\r\n \r\n {/* {channelReferenceId} */}\r\n {/* {receiptEmail} */}\r\n \r\n);\r\n\r\nexport const OrderConfirmationSalesLine: React.FC = ({ salesLineProps, salesLine, buyAgainButton }) => (\r\n \r\n {salesLine}\r\n \r\n);\r\n\r\nexport const OrderConfirmationGroupDelivery: React.FC = ({ deliveryProps, heading, count, processing, address, pickupDateTimeslot, trackingInfo }) => (\r\n \r\n {heading}\r\n {count}\r\n {address}\r\n {pickupDateTimeslot}\r\n \r\n);\r\n\r\nexport const OrderConfirmationGroup: React.FC = ({ groupProps, delivery, salesLinesProps, salesLines }) => (\r\n \r\n {delivery && }\r\n {salesLines && (\r\n \r\n {salesLines.map(salesLine => (\r\n \r\n ))}\r\n \r\n )}\r\n \r\n);\r\n\r\nexport const OrderConfirmationGroups: React.FC = ({ groupsProps, groups }) => (\r\n \r\n {groups.map((group, index) => (\r\n \r\n ))}\r\n \r\n);\r\n\r\nexport const OrderConfirmationOrderSummary: React.FC = ({ orderSummaryProps, heading, subtotal, shipping, tax, totalAmount, earnedPoints }) => (\r\n \r\n {heading}\r\n {subtotal}\r\n {shipping}\r\n {tax}\r\n {totalAmount}\r\n {earnedPoints}\r\n \r\n);\r\n\r\nexport const OrderConfirmationPayment: React.FC = ({ paymentMethodsProps, title, methods }) => (\r\n \r\n {title}\r\n {methods}\r\n \r\n);\r\n\r\nexport const OrderConfirmationHelp: React.FC = ({ helpProps, needHelpLabel, helpLineNumberLabel, contactNumber }) => (\r\n \r\n {needHelpLabel}\r\n {helpLineNumberLabel}\r\n {contactNumber}\r\n \r\n);\r\n\r\n\r\nconst OrderConfirmationView: React.FC> = ({\r\n moduleProps,\r\n heading,\r\n backToShoppingLink,\r\n alert,\r\n loading,\r\n orderSummary,\r\n payment,\r\n help,\r\n groups,\r\n ...rest\r\n}) => {\r\n const DLV_MODE_KEY = 'dlv-mode'\r\n const [dlvMode, setDlvMode] = React.useState('');\r\n const salesOrder = rest.data.checkout.result?.salesOrder;\r\n const orderedProducts = rest.data.checkout.result?.orderedProducts || []\r\n React.useEffect(() => {\r\n setDlvMode(window.sessionStorage.getItem(DLV_MODE_KEY) || '');\r\n sessionStorage.removeItem(DLV_MODE_KEY);\r\n }, [])\r\n return (\r\n \r\n {/*{heading}*/}\r\n {alert}\r\n {loading}\r\n { salesOrder && }\r\n {/* {orderInfomation && } */}\r\n {backToShoppingLink}\r\n {/*{groups && }*/}\r\n {/*{orderSummary && }*/}\r\n {payment && }\r\n {help && }\r\n \r\n );\r\n};\r\n\r\nexport default OrderConfirmationView;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n ICategoryHierarchyViewProps,\n IRefineMenuViewProps,\n ISearchResultContainerViewProps,\n ISearchResultModalViewProps,\n ISortByViewProps,\n ITitleViewProps\n} from '@msdyn365-commerce-modules/search-result-container';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nconst SearchResultContainerView: React.FC = props => {\n const {\n SearchResultContainer,\n products,\n pagination,\n ProductsContainer,\n ProductSectionContainer,\n choiceSummary,\n isMobile,\n modalToggle,\n searchResultModal,\n TitleViewProps,\n refineMenu,\n categoryHierarchy,\n sortByOptions,\n CategoryNavContainer,\n RefineAndProductSectionContainer,\n errorMessage,\n FeatureSearchContainer,\n similarLookProduct\n } = props;\n const isRecoSearchPage = props.context.actionContext.requestContext.query?.recommendation;\n if (isMobile) {\n return (\n \n {categoryHierarchy && renderCategoryHierarchy(categoryHierarchy)}\n {renderTitle(TitleViewProps)}\n {choiceSummary}\n {modalToggle}\n {createSearchResultModal(searchResultModal, refineMenu, sortByOptions, isRecoSearchPage)}\n {similarLookProduct}\n \n {errorMessage}\n {products}\n \n {pagination}\n \n );\n }\n return (\n \n {categoryHierarchy && {renderCategoryHierarchy(categoryHierarchy)}}\n \n {refineMenu && renderRefiner(refineMenu)}\n \n {similarLookProduct}\n
\n {TitleViewProps && renderTitle(TitleViewProps)}\n {choiceSummary}\n
\n
\n {sortByOptions && !isRecoSearchPage && renderSort(sortByOptions)}\n
\n \n {errorMessage}\n {products}\n \n {pagination}\n
\n
\n
\n );\n};\n\nconst createSearchResultModal = (\n modalProps: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element => {\n return React.cloneElement(\n modalProps.modal,\n {},\n modalProps.modalHeader,\n createModalBody(modalProps, refineMenu, sortByDropDown, isRecoSearchPage),\n modalProps.modalFooter\n );\n};\n\nconst createModalBody = (\n props: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element | null => {\n if (sortByDropDown) {\n return React.cloneElement(props.modalBody, {}, renderSort(sortByDropDown, isRecoSearchPage), renderRefiner(refineMenu));\n }\n return null;\n};\n\nconst renderRefiner = (props: IRefineMenuViewProps): JSX.Element | null => {\n const { refiners, RefineMenuContainer, RefinerSectionContainer } = props;\n if (refiners) {\n return (\n \n \n {refiners.map((submenu, index) => (\n {submenu}\n ))}\n \n \n );\n }\n return null;\n};\n\nconst renderSort = (props: ISortByViewProps, isRecoSearchPage?: string): JSX.Element | null => {\n const { SortingContainer, sortByDropDown } = props;\n if (sortByDropDown && !isRecoSearchPage) {\n return {sortByDropDown};\n }\n return null;\n};\n\nconst renderCategoryHierarchy = (props: ICategoryHierarchyViewProps): JSX.Element | null => {\n const { CategoryHierarchyContainer, categoryHierarchyList, categoryHierarchySeparator } = props;\n if (categoryHierarchyList) {\n return (\n \n {categoryHierarchyList.map((category, index) => (\n \n {category}\n {categoryHierarchyList && categoryHierarchyList[index + 1] && categoryHierarchySeparator}\n \n ))}\n \n );\n }\n\n return null;\n};\n\nconst renderTitle = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return (\n \n

\n {title.titlePrefix}\n {title.titleText}({title.titleCount})\n

\n
\n );\n }\n return null;\n};\n\nexport default SearchResultContainerView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n IContentBlockAdditionalContentItemViewProps,\n IContentBlockAdditionalContentViewProps,\n IContentBlockViewProps\n} from '@msdyn365-commerce-modules/content-block';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\n/**\n * Render Additional Content.\n * @param additionalContent - Additional content view props.\n * @returns JSX Element.\n */\nconst renderAdditionalContent = (additionalContent: IContentBlockAdditionalContentViewProps) => {\n return (\n \n {additionalContent.additionalContentItems?.map((item: IContentBlockAdditionalContentItemViewProps) => {\n return (\n <>\n {item.heading}\n \n {item.text}\n {item.links}\n \n \n );\n })}\n \n );\n};\n\n/**\n * Render View.\n * @param props - The view props.\n * @returns -The JSX Element.\n */\nconst contentBlockView: React.FC = props => {\n const {\n contentBlockContainer,\n imageContainer,\n detailsContainer,\n title,\n text,\n links,\n image,\n contentBlockAnchorTag,\n imageLink,\n imageAriaLabel,\n additionalContent\n } = props;\n\n // @ts-expect-error HTML element need to be clear on run time.\n const hasImage: boolean = image.props.src;\n const imageClass: string = hasImage ? `${detailsContainer.className} withImage` : `${detailsContainer.className} withoutImage`;\n\n if (imageLink) {\n return (\n \n \n {image}\n \n \n {title}\n {text}\n {links}\n {additionalContent && renderAdditionalContent(additionalContent)}\n \n \n );\n }\n return (\n \n {image}\n \n {title}\n {text}\n {links}\n {additionalContent && renderAdditionalContent(additionalContent)}\n \n \n );\n};\n\nexport default contentBlockView;\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Module } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IInvoicesListViewProps } from './gdn-invoices-list';\r\n\r\nexport const InvoiceListView: React.FC = props => {\r\n const { header, filter, content, invoiceRequestModal, pagination } = props;\r\n\r\n return (\r\n \r\n {header}\r\n {invoiceRequestModal}\r\n {filter}\r\n {content}\r\n {pagination}\r\n \r\n );\r\n};\r\n\r\nexport default InvoiceListView;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\ninterface ILinksData {\n linkText?: string;\n linkUrl: Msdyn365.ILinkData;\n ariaLabel?: string;\n openInNewTab?: boolean;\n}\n\nexport interface IAccountCustomerBalanceTileLinks {\n links: ILinksData[];\n requestContext: Msdyn365.IRequestContext;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n onTextChange?(index: number): (event: Msdyn365.ContentEditableEvent) => void;\n}\n\nconst AccountCustomerBalanceTileLinks: React.FC = ({\n links,\n telemetryContent,\n onTextChange,\n requestContext\n}) => {\n if (links.length === 0) {\n return null;\n }\n const editableLinks = _mapEditableLinks(links, telemetryContent);\n return (\n
\n {editableLinks && editableLinks.length > 0 ? (\n \n ) : null}\n
\n );\n};\nconst _mapEditableLinks = (linkdata: ILinksData[], telemetryContent?: ITelemetryContent): Msdyn365.ILinksData[] | null => {\n if (!linkdata || linkdata.length === 0) {\n return null;\n }\n const editableLinks: Msdyn365.ILinksData[] = [];\n const payLoad = getPayloadObject('click', telemetryContent!, '');\n\n linkdata.forEach((link, index) => {\n payLoad.contentAction.etext = link.linkText;\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: link.ariaLabel,\n className: 'ms-account-customer-balance-tile__link',\n linkText: link.linkText,\n linkUrl: link.linkUrl.destinationUrl,\n openInNewTab: link.openInNewTab,\n role: 'link',\n additionalProperties: attributes\n };\n editableLinks.push(editableLink);\n });\n\n return editableLinks;\n};\n\nexport default AccountCustomerBalanceTileLinks;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IBusinessSignUpItem, IBusinessSignUpViewProps } from './business-sign-up';\n\nconst BusinessSignUpItem: React.FC = ({ wrapper, label, errorMessage, input, isAddressInput }) => {\n // Hide label and error message if rendering address section\n return (\n \n {!isAddressInput && label}\n {!isAddressInput && errorMessage}\n {input}\n \n );\n};\n\nconst BusinesSignUpView: React.FC = props => {\n const { businessSignUp, ContainerWrapper, heading, businessSignUpForm } = props;\n\n const { FormWrapper, buttons, items, errorMessage, disclaimer } = businessSignUpForm;\n\n return (\n \n \n {heading}\n \n {items &&\n items.map((item: IBusinessSignUpItem) => {\n return ;\n })}\n {errorMessage &&\n errorMessage.map((error: React.ReactNode, index: number) => {\n return {error};\n })}\n {buttons &&\n buttons.map((button: React.ReactNode, index: number) => {\n return {button};\n })}\n {disclaimer}\n \n \n \n );\n};\n\nexport default BusinesSignUpView;\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport { IMediaGalleryThumbnailItemViewProps,\r\n IMediaGalleryThumbnailsViewProps,\r\n IMediaGalleryViewProps\r\n} from '@msdyn365-commerce-modules/media-gallery';\r\nimport { Button, KeyCodes, Module, Node, NodeTag } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport React from 'react';\r\n\r\n/**\r\n * Render the thumbnail item images.\r\n * @param thumbnail - The carousel thumbnail line props.\r\n * @returns Return HTML having thumnailcontainer props with image.\r\n */\r\nconst renderThumbnailItem = (thumbnail: IMediaGalleryThumbnailItemViewProps): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\r\n const { ThumbnailItemContainerProps, Picture } = thumbnail;\r\n\r\n return (\r\n \r\n {Picture}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Gets the thumbnail item to display media gallery images.\r\n * @param image - The media gallery images.\r\n * @param imageSettings - Image settings for the image gallery items.\r\n * @param imageId - Image id.\r\n * @param modifiedActiveIndex - Modified Index of the images when selection changes.\r\n * @param props - The Media gallery view props from business layer.\r\n * @returns Return thumbnail view props which will be used to render images.\r\n */\r\nconst GetThumbnailItemComponent = (\r\n image: IImageData,\r\n imageSettings: IImageSettings,\r\n imageId: number,\r\n modifiedActiveIndex: number,\r\n props: IMediaGalleryViewProps\r\n): IMediaGalleryThumbnailItemViewProps => {\r\n\r\n /**\r\n * OnClick method of media gallery item.\r\n * */\r\n const onClick = () => {\r\n props.callbackToggle?.();\r\n props.callbackThumbnailClick?.(imageId);\r\n props.state.activeIndex = imageId;\r\n };\r\n\r\n const classes = classnames(\r\n 'ms-media-gallery__thumbnail-item',\r\n modifiedActiveIndex === imageId ? 'ms-media-gallery__thumbnail-item-active' : ''\r\n );\r\n\r\n /**\r\n * Keydown event of media gallery item.\r\n * @param event - React.KeyboardEvent.\r\n * */\r\n const handleKeyDown = (event: React.KeyboardEvent) => {\r\n if (event.keyCode === KeyCodes.Enter) {\r\n event.preventDefault();\r\n onClick();\r\n }\r\n };\r\n\r\n return {\r\n ThumbnailItemContainerProps: {\r\n tag: 'li' as NodeTag,\r\n className: classes,\r\n role: 'presentation',\r\n key: imageId\r\n },\r\n Picture: (\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 * Gets the empty thumbnail item to display media gallery images.\r\n * @param imageSettings - Image settings for the image gallery items.\r\n * @param props - The Media gallery view props from business layer.\r\n * @returns Return thumbnail view props which will be used to render empty images.\r\n */\r\nconst GetEmptyThumbnailItemComponent = (imageSettings: IImageSettings, props: IMediaGalleryViewProps): IMediaGalleryThumbnailItemViewProps => {\r\n return {\r\n ThumbnailItemContainerProps: {\r\n tag: 'li' as NodeTag,\r\n className: 'ms-media-gallery__thumbnail-item',\r\n role: 'tab',\r\n tabIndex: 0,\r\n key: 0,\r\n 'aria-label': '',\r\n 'aria-selected': true\r\n },\r\n Picture: (\r\n \r\n )\r\n };\r\n};\r\n\r\n/**\r\n * Update media gallery items method.\r\n * @param items - The media gallery thumbnail item view props.\r\n * @returns The IImageData array.\r\n */\r\nconst getMediaGalleryItems = (items?: IMediaGalleryThumbnailItemViewProps[]): IImageData[] | undefined => {\r\n return items?.map(item => {\r\n return {\r\n altText: item.Picture.props.altText,\r\n src: item.Picture.props.src\r\n };\r\n });\r\n};\r\n\r\nconst defaultThumbnailImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=295&h=295&q=80&m=6&f=jpg', w: 295, h: 295 },\r\n xl: { q: 'w=295&h=295&q=80&m=6&f=jpg', w: 295, h: 295 }\r\n },\r\n lazyload: true,\r\n cropFocalRegion: true\r\n};\r\n\r\n/**\r\n * Render the Media gallery thumbnails to represent images in grid view.\r\n * @param thumbnails - The thumbnail view props.\r\n * @param props - The media gallery view props.\r\n * @returns - The single slide carousel component to render as media gallery image.\r\n */\r\nconst renderThumbnails = (\r\n thumbnails: IMediaGalleryThumbnailsViewProps,\r\n props: IMediaGalleryViewProps\r\n): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\r\n const { ThumbnailsContainerProps, SingleSlideCarouselComponentProps } = thumbnails;\r\n const { state, Thumbnails } = props;\r\n const mediaGalleryItems = getMediaGalleryItems(Thumbnails.items);\r\n\r\n const items: IMediaGalleryThumbnailItemViewProps[] | undefined =\r\n // eslint-disable-next-line multiline-ternary -- need multiline for easy code reading\r\n state.lastUpdate && mediaGalleryItems && mediaGalleryItems[0].src === 'empty' ? [GetEmptyThumbnailItemComponent(defaultThumbnailImageSettings, props)] :\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery\r\n mediaGalleryItems?.map((item: IImageData, id: number) => GetThumbnailItemComponent(item,\r\n defaultThumbnailImageSettings, id, state.activeIndex, props));\r\n\r\n return (\r\n \r\n \r\n {items?.map(renderThumbnailItem)}\r\n \r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render the Media gallery items using viewprops.\r\n * @param props - The media gallery view props.\r\n * @returns The media gallery module wrapping up images node.\r\n */\r\nconst mediaGalleryView: React.FC = props => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\r\n const { CarouselProps, Thumbnails, MediaGallery, Modal } = props;\r\n return (\r\n \r\n \r\n {Modal}\r\n {renderThumbnails(Thumbnails, props)}\r\n \r\n );\r\n};\r\n\r\nexport default mediaGalleryView;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { Module } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport MsDyn365 from \"@msdyn365-commerce/core\";\r\nimport { IInvoicesListViewProps } from '@msdyn365-commerce-modules/invoice/src/modules/invoices-list/./invoices-list';\r\n\r\nexport const InvoiceListView: React.FC = props => {\r\n const { header, filter, content, invoiceRequestModal, pagination } = props;\r\n if (MsDyn365.isBrowser) {\r\n const linksElements = document.querySelectorAll('a.msc-invoices-list__container__content__table__row__open-invoice');\r\n console.log(linksElements);\r\n linksElements.forEach(l => l.setAttribute('href', '#'));\r\n }\r\n return (\r\n \r\n {header}\r\n {invoiceRequestModal}\r\n {filter}\r\n {content}\r\n {pagination}\r\n \r\n );\r\n};\r\n\r\nexport default InvoiceListView;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { CustomerBalances } from '@msdyn365-commerce/retail-proxy';\nimport { getTelemetryObject, Heading, IModuleProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport get from 'lodash/get';\nimport { computed, reaction } from 'mobx';\nimport * as React from 'react';\n\nimport { IAccountCustomerBalanceTileData } from './account-customer-balance-tile.data';\nimport { IAccountCustomerBalanceTileProps } from './account-customer-balance-tile.props.autogenerated';\nimport { CreditComponent, ErrorComponent } from './components/account-customer-balance-tile-info';\nimport LinksComponent from './components/account-customer-balance-tile-links';\n\nexport interface IAccountCustomerBalanceTileViewProps extends IAccountCustomerBalanceTileProps {\n AccountCustomerBalanceTile: IModuleProps;\n className: string;\n heading?: React.ReactNode;\n content: React.ReactNode;\n links: React.ReactNode;\n}\n\nexport interface IAccountCustomerBalanceTileViewState {\n isDetailsLinkDisplayed: boolean;\n content: React.ReactNode;\n}\n\n/**\n *\n * AccountCustomerBalanceTile component.\n * @extends {React.Component>}\n */\nclass AccountCustomerBalanceTile extends React.Component<\n IAccountCustomerBalanceTileProps,\n IAccountCustomerBalanceTileViewState\n> {\n @computed get hasError(): boolean {\n return get(this.props, 'data.balance.status') !== 'SUCCESS';\n }\n\n private readonly telemetryContent: ITelemetryContent;\n\n constructor(props: IAccountCustomerBalanceTileProps) {\n super(props);\n\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n this.state = { ...this._initState() };\n\n reaction(\n () => this.hasError,\n () => {\n this.props.context.telemetry.error('Error retrieving customer account balance');\n this.setState({\n content: \n });\n }\n );\n }\n\n @computed get isCustomerAccountPaymentEnabled(): boolean {\n const customerResult = get(this.props, 'data.customerInformation.result');\n\n const allowOnAccountPayment = customerResult ? customerResult.AllowOnAccountPayment : false;\n const isB2BSite = isChannelTypeB2B(this.props.context.request);\n const enableCustomerAccountPayment = get(this.props, 'context.request.app.platform.enableCustomerAccountPayment');\n\n return (\n allowOnAccountPayment &&\n (enableCustomerAccountPayment === 'all' ||\n (enableCustomerAccountPayment === 'b2b' && isB2BSite) ||\n (enableCustomerAccountPayment === 'b2c' && !isB2BSite))\n );\n }\n\n public shouldComponentUpdate(\n nextProps: IAccountCustomerBalanceTileProps,\n nextState: IAccountCustomerBalanceTileViewState\n ): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n if (!this.isCustomerAccountPaymentEnabled) {\n return <>;\n }\n\n const { className, heading, links } = this.props.config;\n const viewProps = {\n ...this.props,\n AccountCustomerBalanceTile: {\n moduleProps: this.props,\n className: classnames('ms-account-customer-balance-tile', className)\n },\n heading: heading && (\n \n ),\n content: this.state.content,\n links: this.state.isDetailsLinkDisplayed && (\n (event: Msdyn365.ContentEditableEvent) => void 0,\n requestContext: this.props.context.request,\n telemetryContent: this.telemetryContent\n }}\n />\n )\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _initState(): IAccountCustomerBalanceTileViewState {\n const account: CustomerBalances = get(this.props, 'data.balance.result');\n\n let content: React.ReactNode;\n let isDetailsLinkDisplayed = false;\n\n if (this.hasError) {\n this.props.telemetry.error('Error retrieving customer account balance');\n content = ;\n } else if (\n account.Balance === 0 &&\n account.CreditLimit === 0 &&\n account.InvoiceAccountBalance === 0 &&\n account.InvoiceAccountCreditLimit === 0\n ) {\n // Non-established credit\n content = ;\n } else {\n // Successfully retrieved balance\n const { accountCreditVerbagePrefix, accountCreditVerbagePostfix } = this.props.resources;\n const currencyCode = get(this.props, 'context.request.channel.Currency');\n const formatCurrency = get(this.props, 'context.cultureFormatter.formatCurrency');\n let customerCredit = 0;\n\n if (account.InvoiceAccountCreditLimit === 0) {\n customerCredit = account.CreditLimit - account.Balance;\n } else {\n customerCredit = account.InvoiceAccountCreditLimit - account.InvoiceAccountBalance;\n }\n\n const customerCreditFormatted = `${formatCurrency(customerCredit.toFixed(2), currencyCode)}`;\n\n isDetailsLinkDisplayed = true;\n content = (\n \n );\n }\n\n return { content, isDetailsLinkDisplayed };\n }\n}\n\nexport default AccountCustomerBalanceTile;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ILoyaltySignUpViewProps } from './loyalty-sign-up';\n\nconst LoyaltySignUpView: React.FC = props => {\n const {\n LoyaltySignUp,\n heading,\n memberHeading,\n signInLink,\n signUpText,\n signUpButton,\n detailsLink,\n termsLink,\n loading,\n infoMessageBar\n } = props;\n\n if (loading) {\n props.context.telemetry.error('LoyaltySignUp data is empty, module wont render');\n return null;\n }\n\n return (\n \n {infoMessageBar}\n {memberHeading}\n {heading}\n {detailsLink}\n {signUpText}\n {termsLink}\n {signUpButton}\n {signInLink}\n \n );\n};\n\nexport default LoyaltySignUpView;\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { IGroup, IGroupDelivery, IGroups, IHeader, IList, IOrderHistoryViewProps, IOrderInformation, ISalesOrder } from '@msdyn365-commerce-modules/order-management';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport const OrderHistoryOrderInfomation: React.FC = ({\r\n orderInformationProps,\r\n salesId,\r\n receiptId,\r\n channelName,\r\n createdDate,\r\n count,\r\n amount,\r\n channelReferenceId\r\n}) => (\r\n \r\n {channelName}\r\n {salesId}\r\n {receiptId}\r\n {createdDate}\r\n {count}\r\n {amount}\r\n {channelReferenceId}\r\n \r\n);\r\n\r\nexport const OrderHistoryGroupDelivery: React.FC = ({ deliveryProps, heading, count, processing, address, trackingInfo }) => (\r\n \r\n {heading}\r\n {count}\r\n {processing}\r\n {address}\r\n {trackingInfo}\r\n \r\n);\r\n\r\nexport const OrderHistoryGroup: React.FC = ({ groupProps, delivery, salesLinesProps, salesLines }) => (\r\n \r\n {salesLines && (\r\n \r\n {salesLines.map(salesLine => (\r\n \r\n {salesLine.salesLine}\r\n \r\n ))}\r\n \r\n )}\r\n \r\n);\r\n\r\nexport const OrderHistoryGroups: React.FC = ({ groupsProps, groups }) => (\r\n \r\n {groups.map((group, index) => (\r\n \r\n ))}\r\n \r\n);\r\n\r\nexport const OrderHistoryHeader: React.FC = ({ headerProps, heading, orderCountLabel, extraActions }) => (\r\n \r\n {heading}\r\n {orderCountLabel}\r\n {extraActions}\r\n \r\n);\r\n\r\nexport const OrderHistorySalesOder: React.FC = ({ salesOrderProps, orderInfomation, groups, orderDetailsLink, expandProductsButton }) => (\r\n \r\n {orderInfomation && }\r\n {groups && }\r\n {expandProductsButton}\r\n {orderDetailsLink}\r\n \r\n);\r\n\r\nexport const OrderHistoryList: React.FC = ({ listProps, salesOrders }) => (\r\n \r\n {salesOrders && salesOrders.map((salesOrder, index) => )}\r\n \r\n);\r\n\r\nconst OrderHistoryView: React.FC = ({\r\n orderHistoryProps,\r\n header,\r\n alert,\r\n loading,\r\n emptyMessage,\r\n backToShoppingLink,\r\n list,\r\n table,\r\n moreButton\r\n}) => (\r\n \r\n {header && }\r\n {loading}\r\n {alert && (\r\n <>\r\n {alert}\r\n {backToShoppingLink}\r\n \r\n )}\r\n {emptyMessage && (\r\n \r\n {emptyMessage}\r\n {backToShoppingLink}\r\n \r\n )}\r\n {list && }\r\n {table}\r\n {moreButton && moreButton}\r\n \r\n);\r\n\r\nexport default OrderHistoryView;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IComponent, IComponentProps, msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport { Alert, Button, Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\r\nimport React from 'react';\r\n\r\nexport interface IInvoiceErrorProps extends IComponentProps {\r\n messageHeader?: string;\r\n errorMessage?: string;\r\n otherError?: string;\r\n showError: boolean;\r\n payInvoiceErrorModalOpen: boolean;\r\n\r\n errorDialogHeader: string;\r\n errorDialogBodyErrorTitle: string;\r\n errorDialogBodyErrorDescription: string;\r\n errorDialogFooterGoToCartButtonText: string;\r\n errorDialogFooterCancelButtonText: string;\r\n cartUrl: string;\r\n\r\n setPayInvoiceErrorModalClose(): void;\r\n}\r\n\r\nexport interface IInvoiceErrorComponent extends IComponent {}\r\n\r\nexport const InvoiceError: React.FC = ({\r\n messageHeader,\r\n errorMessage,\r\n otherError,\r\n showError,\r\n payInvoiceErrorModalOpen,\r\n errorDialogHeader,\r\n errorDialogBodyErrorTitle,\r\n errorDialogBodyErrorDescription,\r\n errorDialogFooterGoToCartButtonText,\r\n errorDialogFooterCancelButtonText,\r\n cartUrl,\r\n setPayInvoiceErrorModalClose\r\n}) => {\r\n const errorMessages: (string | undefined)[] = [];\r\n\r\n if (otherError) {\r\n errorMessages.push(otherError);\r\n } else {\r\n errorMessages.push(errorMessage);\r\n }\r\n\r\n const className = 'msc-pay-invoice-error-dialog';\r\n\r\n return (\r\n <>\r\n 0} color='danger' assertive aria-label={messageHeader}>\r\n \r\n {errorMessages.map((message, index) => {\r\n return (\r\n
\r\n {message}\r\n
\r\n );\r\n })}\r\n
\r\n \r\n \r\n {errorDialogHeader}\r\n \r\n \r\n
\r\n
{errorDialogBodyErrorTitle}
\r\n
{errorDialogBodyErrorDescription}
\r\n
\r\n
\r\n \r\n \r\n {errorDialogFooterGoToCartButtonText}\r\n \r\n \r\n {errorDialogFooterCancelButtonText}\r\n \r\n \r\n
\r\n \r\n );\r\n};\r\n\r\n// @ts-expect-error\r\nexport const InvoiceErrorComponent: React.FunctionComponent = msdyn365Commerce.createComponent(\r\n 'InvoiceError',\r\n { component: InvoiceError }\r\n);\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IComponentProps, msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport { EnumExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Button, Popover } from '@msdyn365-commerce-modules/utilities';\r\nimport React from 'react';\r\n\r\nimport { IInvoiceStatusResources } from '../helpers/invoice-status';\r\n\r\nexport interface IInvoicesFilterResources extends IInvoiceStatusResources {\r\n invoicesFilterShowAll: string;\r\n}\r\n\r\nexport interface IInvoicesFilterProps extends IComponentProps {\r\n className: string;\r\n disabled: boolean;\r\n\r\n resources: IInvoicesFilterResources;\r\n\r\n currentState: InvoicesFilterState;\r\n onFilterStateChanged(state: InvoicesFilterState): void;\r\n}\r\n\r\nexport enum InvoicesFilterState {\r\n ShowAll,\r\n Paid,\r\n PartiallyPaid,\r\n Unpaid\r\n}\r\n\r\nconst getInvoicesFilterStateResources = (filterState: InvoicesFilterState, resources: IInvoicesFilterResources): string => {\r\n switch (filterState) {\r\n case InvoicesFilterState.ShowAll:\r\n return resources.invoicesFilterShowAll;\r\n case InvoicesFilterState.Paid:\r\n return resources.invoiceStatusPaid;\r\n case InvoicesFilterState.PartiallyPaid:\r\n return resources.invoiceStatusPartiallyPaid;\r\n case InvoicesFilterState.Unpaid:\r\n return resources.invoiceStatusUnpaid;\r\n default:\r\n throw new Error('Failed to retrieve resource description for unknown invoices filter state.');\r\n }\r\n};\r\n\r\n/**\r\n * On Click function.\r\n * @param onStateClick -Invoice filter state function.\r\n * @param filterState -Invoice filter state.\r\n * @returns Set Invoice filter state.\r\n */\r\nconst onClickHandler = (onStateClick: (filterState: InvoicesFilterState) => void, filterState: InvoicesFilterState) => () => {\r\n onStateClick(filterState);\r\n};\r\n\r\nconst renderFilterStateItem = (\r\n filterState: InvoicesFilterState,\r\n resources: IInvoicesFilterResources,\r\n className: string,\r\n onStateClick: (filterState: InvoicesFilterState) => void\r\n): React.ReactNode => {\r\n const stateStringRepresentation = InvoicesFilterState[filterState];\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst InvoicesFilter: React.FC = (props: IInvoicesFilterProps) => {\r\n const popoverRef = React.createRef();\r\n const [popoverState, setPopoverState] = React.useState(false);\r\n const togglePopover = React.useCallback(() => {\r\n setPopoverState(!popoverState);\r\n }, [popoverState]);\r\n\r\n const [filterState, setFilterState] = React.useState(props.currentState);\r\n\r\n const onFilterStateClick = (clickedState: InvoicesFilterState) => {\r\n setFilterState(clickedState);\r\n setPopoverState(false);\r\n props.onFilterStateChanged(clickedState);\r\n };\r\n\r\n return (\r\n
\r\n \r\n {getInvoicesFilterStateResources(filterState, props.resources)}\r\n \r\n \r\n {EnumExtensions.getEnumValues(InvoicesFilterState).map(state => {\r\n return renderFilterStateItem(state, props.resources, props.className, onFilterStateClick);\r\n })}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport const InvoicesFilterComponent: React.FunctionComponent = msdyn365Commerce.createComponent<\r\n // @ts-expect-error\r\n IInvoicesFilterProps\r\n>('InvoicesFilterComponent', { component: InvoicesFilter });\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IComponent, IComponentProps, ICoreContext, msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport classnames from 'classnames';\r\nimport React from 'react';\r\n\r\nexport interface IInvoicesTableHeaderResources {\r\n invoicesText: string;\r\n invoiceNumberText: string;\r\n invoiceDateMobileText: string;\r\n invoiceDateText: string;\r\n invoiceUsersText: string;\r\n invoiceAmountText: string;\r\n invoiceDueDateText: string;\r\n invoiceAmountDueText: string;\r\n invoiceStatusText: string;\r\n invoiceActionsText: string;\r\n invoiceListSelectAllRadioAriaLabelText: string;\r\n}\r\n\r\nexport interface IInvoicesTableHeaderProps extends IComponentProps {\r\n context: ICoreContext;\r\n className: string;\r\n\r\n isSelectedAll: boolean;\r\n isMobile: boolean;\r\n isAdmin: boolean;\r\n\r\n resources: IInvoicesTableHeaderResources;\r\n\r\n onSelectAll(isSelected: boolean): void;\r\n}\r\n\r\nexport interface IInvoicesTableHeaderComponent extends IComponent {}\r\n\r\nconst getDesktopHeaderCells = (props: IInvoicesTableHeaderProps, rowClassName: string, switchCheckedState: () => void) => {\r\n const { resources } = props;\r\n return (\r\n <>\r\n \r\n \r\n \r\n {resources.invoiceNumberText}\r\n {resources.invoiceDateText}\r\n {resources.invoiceUsersText}\r\n {resources.invoiceAmountText}\r\n {resources.invoiceDueDateText}\r\n {resources.invoiceAmountDueText}\r\n {resources.invoiceStatusText}\r\n {resources.invoiceActionsText}\r\n \r\n );\r\n};\r\n\r\nconst getMobileHeaderCells = (props: IInvoicesTableHeaderProps, rowClassName: string, switchCheckedState: () => void) => {\r\n const { resources } = props;\r\n return (\r\n <>\r\n \r\n \r\n \r\n {resources.invoicesText}\r\n {resources.invoiceDateMobileText}\r\n \r\n {` `}\r\n {/* Actions */}\r\n \r\n );\r\n};\r\n\r\nconst InvoicesTableHeader: React.FC = (props: IInvoicesTableHeaderProps): JSX.Element => {\r\n const rowClassName = `${props.className}__row`;\r\n\r\n const switchCheckedState = () => {\r\n props.onSelectAll(!props.isSelectedAll);\r\n };\r\n\r\n let headerCells: JSX.Element;\r\n if (props.isMobile) {\r\n headerCells = getMobileHeaderCells(props, rowClassName, switchCheckedState);\r\n } else {\r\n headerCells = getDesktopHeaderCells(props, rowClassName, switchCheckedState);\r\n }\r\n\r\n return (\r\n \r\n {headerCells}\r\n \r\n );\r\n};\r\n\r\nexport const InvoicesTableHeaderComponent: React.FunctionComponent = msdyn365Commerce.createComponent<\r\n // @ts-expect-error\r\n IInvoicesTableHeaderComponent\r\n>('InvoicesTableHeaderComponent', { component: InvoicesTableHeader });\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { InvoicePaidStatus } from '@msdyn365-commerce/retail-proxy';\r\n\r\nexport interface IInvoiceStatusResources {\r\n invoiceStatusNone: string;\r\n invoiceStatusUnpaid: string;\r\n invoiceStatusPartiallyPaid: string;\r\n invoiceStatusPaid: string;\r\n}\r\n\r\nexport const getInvoiceStatusText = (resources: IInvoiceStatusResources, invoiceStatus: InvoicePaidStatus | undefined) => {\r\n switch (invoiceStatus) {\r\n case InvoicePaidStatus.None:\r\n return resources.invoiceStatusNone;\r\n\r\n case InvoicePaidStatus.Unpaid:\r\n return resources.invoiceStatusUnpaid;\r\n\r\n case InvoicePaidStatus.PartiallyPaid:\r\n return resources.invoiceStatusPartiallyPaid;\r\n\r\n case InvoicePaidStatus.Paid:\r\n return resources.invoiceStatusPaid;\r\n default:\r\n return '';\r\n }\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { getUrlSync, IActionContext } from '@msdyn365-commerce/core';\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\nimport { IInvoiceErrorState } from '../gdn-invoices-list';\r\nimport { IPayableInvoice } from './invoice-data';\r\n\r\nexport type ICartActionFailureReason = 'EMPTYINPUT' | 'CARTACTIONFAILED';\r\nexport interface IAddInvoicesToCartFailureResult {\r\n failureReason: ICartActionFailureReason;\r\n}\r\n\r\nexport const payInvoices = async (\r\n invoices: IPayableInvoice[],\r\n actionContext: IActionContext,\r\n onError: (errorState: IInvoiceErrorState) => void\r\n) => {\r\n const invoicesToAdd: string[] = invoices.filter(invoice => invoice.canBePaid).map(invoice => invoice.id);\r\n\r\n if (!ArrayExtensions.hasElements(invoicesToAdd)) {\r\n onError({ errorMessage: '', errorReason: { failureReason: 'EMPTYINPUT' } });\r\n return;\r\n }\r\n\r\n const cartState = await getCartState(actionContext);\r\n const result = await cartState.addInvoicesToCart({ invoiceIds: invoicesToAdd });\r\n\r\n if (result.status !== 'SUCCESS') {\r\n onError({\r\n errorMessage: '',\r\n errorReason: { failureReason: 'CARTACTIONFAILED' },\r\n otherError: result.errorDetails?.LocalizedMessage,\r\n errorCode: result.errorDetails?.ErrorResourceId\r\n });\r\n return;\r\n }\r\n\r\n const cartUrl = getUrlSync('cart', actionContext);\r\n if (cartUrl) {\r\n window?.location.assign(cartUrl);\r\n }\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IComponent, IComponentProps, ICoreContext, msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport { Button } from '@msdyn365-commerce-modules/utilities';\r\nimport React, { useState } from 'react';\r\n\r\nimport { IPayableInvoice } from '../helpers/invoice-data';\r\nimport { payInvoices } from '../helpers/pay-invoices';\r\nimport { IInvoiceErrorState } from '../gdn-invoices-list';\r\n\r\nexport interface IPayInvoiceData {\r\n invoice: IPayableInvoice;\r\n}\r\n\r\nexport interface IPayInvoiceResources {\r\n payInvoiceButtonText: string;\r\n payInvoiceButtonAriaLabel: string;\r\n}\r\n\r\nexport interface IPayInvoiceProps extends IComponentProps {\r\n context: ICoreContext;\r\n className: string;\r\n reference?: React.RefObject;\r\n resources: IPayInvoiceResources;\r\n disabled?: boolean;\r\n\r\n onError?(errorState: IInvoiceErrorState, reference?: React.RefObject): void;\r\n}\r\n\r\ninterface IPayInvoiceComponent extends IComponent {}\r\n\r\nconst onClick = async (\r\n _event: React.MouseEvent,\r\n props: IPayInvoiceProps,\r\n setDisabled: (disabled: boolean) => void\r\n): Promise => {\r\n if (props.data.invoice.amount !== undefined) {\r\n if (props.data.invoice.amount < 0) {\r\n // props.onError ? { errorMessage: '', errorReason: { failureReason: 'EMPTYINPUT' } } : _event.preventDefault();\r\n setDisabled(false);\r\n } else {\r\n setDisabled(true);\r\n }\r\n } else {\r\n setDisabled(true);\r\n }\r\n\r\n const propagateError = (errorState: IInvoiceErrorState): void => {\r\n if (props.onError) {\r\n props.onError(errorState, props.reference);\r\n }\r\n setDisabled(false);\r\n };\r\n\r\n await payInvoices([props.data.invoice], props.context.actionContext, propagateError);\r\n};\r\n\r\nconst PayInvoiceComponentActions = {\r\n onClick\r\n};\r\n\r\n/**\r\n * On click handler function.\r\n * @param props -Invoice props.\r\n * @param setDisabled -Set disabled.\r\n * @returns Pay invoice component action.\r\n */\r\nconst onClickHandler = (props: IPayInvoiceProps, setDisabled: React.Dispatch>) => async (\r\n event: React.MouseEvent\r\n) => {\r\n await PayInvoiceComponentActions.onClick(event, props, setDisabled);\r\n};\r\n\r\nconst PayInvoice: React.FC = (props: IPayInvoiceProps): JSX.Element => {\r\n const [disabled, setDisabled] = useState(false);\r\n\r\n return (\r\n \r\n {props.resources.payInvoiceButtonText}\r\n \r\n );\r\n};\r\n\r\n// @ts-expect-error\r\nexport const PayInvoiceComponent: React.FunctionComponent = msdyn365Commerce.createComponent(\r\n 'PayInvoiceComponent',\r\n { component: PayInvoice, ...PayInvoiceComponentActions }\r\n);\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Button } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\ninterface IRequestInvoiceButtonProps {\r\n innerReference?: React.RefObject;\r\n className: string;\r\n requestInvoiceButtonLabel: string;\r\n onClicked(): void;\r\n}\r\n\r\nexport const RequestInvoiceButton: React.FC = ({\r\n className,\r\n onClicked,\r\n requestInvoiceButtonLabel,\r\n innerReference\r\n}) => {\r\n return (\r\n \r\n );\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport MsDyn365, {\r\n IComponent,\r\n IComponentProps,\r\n ICoreContext,\r\n IDateFormatOptions,\r\n isOboRequest,\r\n msdyn365Commerce\r\n} from '@msdyn365-commerce/core';\r\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\r\nimport { getInvoiceDetailsPageUrlSync, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Button, format } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport React, { useState } from 'react';\r\n\r\nimport { InvoiceModel } from '../../../helpers/invoice-data';\r\nimport { getInvoiceStatusText, IInvoiceStatusResources } from '../../../helpers/invoice-status';\r\nimport { IInvoiceErrorState } from '../../../gdn-invoices-list';\r\nimport { IPayInvoiceResources, PayInvoiceComponent } from '../../pay-invoice-component';\r\nimport { RequestInvoiceButton } from '../../request-invoice-button';\r\n\r\ninterface IInvoicesTableRowData {\r\n invoice: InvoiceModel;\r\n index: number;\r\n customer: Customer;\r\n}\r\n\r\nexport interface IInvoicesTableRowResources extends IInvoiceStatusResources, IPayInvoiceResources {\r\n invoiceCurrentUser: string;\r\n invoiceViewDetailsButtonText: string;\r\n invoiceViewDetailsButtonAriaLabel: string;\r\n invoiceActionsButtonTextAriaLabel?: string;\r\n invoiceActionsButtonIsOnBehalfOfTextAriaLabel?: string;\r\n invoiceRequestButtonLabel: string;\r\n invoiceListSelectRadioAriaLabelText: string;\r\n}\r\n\r\nexport interface IInvoicesTableRowProps extends IComponentProps {\r\n context: ICoreContext;\r\n className: string;\r\n isMobile: boolean;\r\n invoiceReferences?: React.RefObject;\r\n payInvoiceReferences?: React.RefObject;\r\n resources: IInvoicesTableRowResources;\r\n\r\n onChange(): void;\r\n onError?(errorState: IInvoiceErrorState, reference?: React.RefObject): void;\r\n onRequestInvoice?(invoice: InvoiceModel, requestInvoiceButtonReference: React.RefObject): void;\r\n}\r\n\r\nexport interface IInvoicesTableRowComponent extends IComponent {}\r\n\r\nconst formatAmount = (context: ICoreContext, amount: number | undefined, currencyCode: string | undefined) => {\r\n if (amount === undefined) {\r\n return '';\r\n }\r\n return context.cultureFormatter.formatCurrency(amount, currencyCode);\r\n};\r\n\r\nconst formatDate = (context: ICoreContext, date: Date | undefined) => {\r\n if (date === undefined) {\r\n return '';\r\n }\r\n\r\n const dateOptions: IDateFormatOptions = { year: 'numeric', month: 'long', day: 'numeric' };\r\n return context.cultureFormatter.formatDate(date, dateOptions);\r\n};\r\n\r\n/**\r\n * Request specific invoice function.\r\n * @param props -Invoice table row props.\r\n * @param requestInvoiceButtonReference -Reference button.\r\n * @returns Call Request Invoice.\r\n */\r\nconst onRequestSpecificInvoice = (\r\n props: IInvoicesTableRowProps,\r\n requestInvoiceButtonReference: React.RefObject\r\n) => () => {\r\n props.onRequestInvoice!(props.data.invoice, requestInvoiceButtonReference);\r\n};\r\n\r\nconst getDesktopRowCells = (props: IInvoicesTableRowProps, onSelectLine: () => void) => {\r\n const {\r\n data: { invoice, customer }\r\n } = props;\r\n\r\n const isCurrentUser =\r\n !StringExtensions.isNullOrWhitespace(customer.AccountNumber) && customer.AccountNumber === invoice.customerAccountNumber;\r\n\r\n const linkToInvoiceDetails = getInvoiceDetailsPageUrlSync(props.data.invoice.id, props.context.actionContext);\r\n const invoiceRowArialabel = format(props.resources.invoiceListSelectRadioAriaLabelText, invoice.id);\r\n return (\r\n <>\r\n \r\n {checkIfCreditNote(invoice.amount) && (\r\n \r\n )}\r\n \r\n \r\n \r\n {invoice.id}\r\n \r\n \r\n \r\n {formatDate(props.context, invoice.invoiceDate)}\r\n \r\n \r\n {invoice.customerName}\r\n {isCurrentUser ? {props.resources.invoiceCurrentUser} : null}\r\n \r\n {formatAmount(props.context, invoice.amount, invoice.currencyCode)}\r\n \r\n {formatDate(props.context, invoice.dueDate)}\r\n \r\n {formatAmount(props.context, invoice.amountDue, invoice.currencyCode)}\r\n \r\n {getInvoiceStatusText(props.resources, invoice.status)}\r\n \r\n {extraActionsPopup(props)}\r\n \r\n );\r\n};\r\n\r\nlet setShowPreviousActions: React.Dispatch> | undefined;\r\n\r\n/**\r\n * On Click view details function.\r\n * @param linkToInvoiceDetails -Link to invoice details.\r\n * @returns Go to invoice details.\r\n */\r\nconst onClickViewDetails = (linkToInvoiceDetails: string) => () => {\r\n if (MsDyn365.isBrowser) {\r\n window.location.href = linkToInvoiceDetails;\r\n }\r\n return;\r\n};\r\n\r\n/**\r\n * Toggle function.\r\n * @param isShowActions -Link to invoice details.\r\n * @param setShowActions -Link to invoice details.\r\n * @returns Go to invoice details.\r\n */\r\nconst toggle = (isShowActions: boolean, setShowActions: React.Dispatch>) => () => {\r\n const shouldShowActions = !isShowActions;\r\n if (shouldShowActions) {\r\n if (setShowPreviousActions) {\r\n setShowPreviousActions(false);\r\n }\r\n setShowActions(shouldShowActions);\r\n setShowPreviousActions = setShowActions;\r\n } else {\r\n setShowPreviousActions = undefined;\r\n setShowActions(shouldShowActions);\r\n }\r\n};\r\n\r\nconst extraActionsPopup = (props: IInvoicesTableRowProps): JSX.Element | null => {\r\n const {\r\n resources: {\r\n invoiceViewDetailsButtonAriaLabel,\r\n invoiceViewDetailsButtonText,\r\n invoiceActionsButtonTextAriaLabel,\r\n invoiceActionsButtonIsOnBehalfOfTextAriaLabel\r\n },\r\n data: { index, invoice }\r\n } = props;\r\n\r\n const [showActions, setShowActions] = useState(false);\r\n const isOnBehalfOfRequest = isOboRequest(props.context.request);\r\n\r\n const linkToInvoiceDetails = getInvoiceDetailsPageUrlSync(props.data.invoice.id, props.context.actionContext);\r\n\r\n const className = `${props.className}__extra-actions-cell`;\r\n const actionsContainerClassName = `${className}__actions-container`;\r\n const payInvoiceClassName = `${actionsContainerClassName}__pay-invoice`;\r\n return (\r\n
\r\n \r\n {showActions && !isOnBehalfOfRequest && (\r\n
\r\n \r\n {invoiceViewDetailsButtonText}\r\n \r\n {checkIfCreditNote(invoice.amount) && (\r\n \r\n )}\r\n \r\n
\r\n )}\r\n
\r\n );\r\n};\r\n\r\nconst checkIfCreditNote = (amount: number | undefined) => amount && amount > 0;\r\n\r\nconst getMobileRowCells = (props: IInvoicesTableRowProps, onSelectLine: () => void) => {\r\n const {\r\n data: { invoice }\r\n } = props;\r\n\r\n const linkToInvoiceDetails = getInvoiceDetailsPageUrlSync(props.data.invoice.id, props.context.actionContext);\r\n const invoiceRowArialabel = format(props.resources.invoiceListSelectRadioAriaLabelText, invoice.id);\r\n return (\r\n <>\r\n \r\n {checkIfCreditNote(invoice.amount) && (\r\n \r\n )}\r\n \r\n \r\n \r\n {invoice.id}\r\n \r\n
\r\n {invoice.customerName}\r\n \r\n \r\n {formatDate(props.context, invoice.dueDate)}\r\n
\r\n {getInvoiceStatusText(props.resources, invoice.status)}\r\n \r\n {extraActionsPopup(props)}\r\n \r\n );\r\n};\r\n\r\nconst InvoicesTableRow: React.FC = (props: IInvoicesTableRowProps): JSX.Element => {\r\n const {\r\n data: { invoice }\r\n } = props;\r\n\r\n const onSelectLine = () => {\r\n invoice.isSelected = !invoice.isSelected;\r\n props.onChange();\r\n };\r\n\r\n let rowCells: JSX.Element;\r\n if (props.isMobile) {\r\n rowCells = getMobileRowCells(props, onSelectLine);\r\n } else {\r\n rowCells = getDesktopRowCells(props, onSelectLine);\r\n }\r\n\r\n return {rowCells};\r\n};\r\n\r\nexport const InvoicesTableRowComponent: React.FunctionComponent = msdyn365Commerce.createComponent<\r\n // @ts-expect-error\r\n IInvoicesTableRowComponent\r\n>('InvoicesTableRowComponent', { component: InvoicesTableRow });\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IComponent, IComponentProps, ICoreContext, msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport React, { useState } from 'react';\r\n\r\nimport { InvoiceModel } from '../../helpers/invoice-data';\r\nimport { IInvoiceErrorState } from '../../gdn-invoices-list';\r\nimport { IInvoicesTableHeaderResources, InvoicesTableHeaderComponent } from './components/invoices-table-header-component';\r\nimport { IInvoicesTableRowResources, InvoicesTableRowComponent } from './components/invoices-table-row-component';\r\n\r\ninterface IInvoicesTableData {\r\n invoices: InvoiceModel[];\r\n customer: Customer;\r\n}\r\n\r\nexport interface IInvoicesTableResources extends IInvoicesTableHeaderResources, IInvoicesTableRowResources {}\r\n\r\nexport interface IInvoicesTableProps extends IComponentProps {\r\n context: ICoreContext;\r\n className: string;\r\n invoiceButtonReferences?: React.RefObject[];\r\n payInvoiceButtonReferences?: React.RefObject[];\r\n resources: IInvoicesTableResources;\r\n\r\n onChange(): void;\r\n onError?(errorState: IInvoiceErrorState, reference?: React.RefObject): void;\r\n onRequestInvoice(invoice: InvoiceModel, requestInvoiceButtonReference: React.RefObject): void;\r\n}\r\n\r\nexport interface IInvoicesTableComponent extends IComponent {}\r\n\r\ntype GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\nconst getViewport = (context: ICoreContext): GridSize => {\r\n // Always render in mobile viewport on a mobile device\r\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\r\n return 'xs';\r\n }\r\n\r\n if (window?.innerWidth) {\r\n const gridSettings = context.request.gridSettings;\r\n if (gridSettings) {\r\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\r\n return 'xs';\r\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\r\n return 'sm';\r\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\r\n return 'md';\r\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\r\n return 'lg';\r\n }\r\n return 'xl';\r\n }\r\n }\r\n\r\n return 'xs';\r\n};\r\n\r\nconst isMobileView = (context: ICoreContext) => {\r\n const viewport = getViewport(context);\r\n return viewport === 'xs' || viewport === 'sm';\r\n};\r\n\r\n/**\r\n * On select all function.\r\n * @param props -Invoice table props.\r\n * @returns On change.\r\n */\r\nconst onSelectAllHandler = (props: IInvoicesTableProps) => (isSelected: boolean) => {\r\n props.data.invoices.forEach(invoice => {\r\n if (invoice.amount && invoice.amount > 0) {\r\n invoice.isSelected = isSelected;\r\n }\r\n });\r\n props.onChange();\r\n};\r\n\r\nconst InvoicesTable: React.FC = (props: IInvoicesTableProps): JSX.Element => {\r\n const [isMobile, setIsMobile] = useState(isMobileView(props.context));\r\n\r\n const updateViewport = () => {\r\n setIsMobile(isMobileView(props.context));\r\n };\r\n\r\n if (typeof window !== undefined && window.addEventListener) {\r\n window.addEventListener('resize', updateViewport);\r\n }\r\n const rowClassName = `${props.className}__row`;\r\n const headerClassName = `${props.className}__header`;\r\n\r\n return (\r\n \r\n invoice.isSelected)}\r\n isMobile={isMobile}\r\n isAdmin={props.data.customer.IsB2bAdmin || false}\r\n onSelectAll={onSelectAllHandler(props)}\r\n resources={props.resources}\r\n data={{}}\r\n />\r\n {props.data.invoices.map((invoice, index: number) => {\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n );\r\n};\r\n\r\nexport const InvoicesTableComponent: React.FunctionComponent = msdyn365Commerce.createComponent<\r\n // @ts-expect-error\r\n IInvoicesTableComponent\r\n>('InvoicesTableComponent', { component: InvoicesTable });\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IComponent, IComponentProps, ICoreContext, ITelemetry, msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Button, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport React, { useState } from 'react';\r\n\r\nimport { InvoiceModel } from '../helpers/invoice-data';\r\nimport { payInvoices } from '../helpers/pay-invoices';\r\nimport { IInvoiceErrorState } from '../gdn-invoices-list';\r\n\r\ninterface IMakePaymentData {\r\n invoices: InvoiceModel[];\r\n}\r\n\r\nexport interface IMakePaymentResources {\r\n makePaymentButtonText: string;\r\n makePaymentButtonAriaLabel: string;\r\n}\r\n\r\nexport interface IMakePaymentProps extends IComponentProps {\r\n context: ICoreContext;\r\n itemKey?: string;\r\n telemetry: ITelemetry;\r\n moduleId: string;\r\n moduleTypeName: string;\r\n telemetryContent?: ITelemetryContent;\r\n navigationUrl?: string;\r\n buttonReferences?: React.RefObject;\r\n resources: IMakePaymentResources;\r\n disabled?: boolean;\r\n\r\n onError?(errorState: IInvoiceErrorState, reference?: React.RefObject): void;\r\n}\r\n\r\nexport interface IMakePaymentComponent extends IComponent {}\r\n\r\nconst onClick = async (\r\n _event: React.MouseEvent,\r\n props: IMakePaymentProps,\r\n setDisabled: (disabled: boolean) => void\r\n): Promise => {\r\n setDisabled(true);\r\n\r\n const propagateError = (errorState: IInvoiceErrorState): void => {\r\n if (props.onError) {\r\n props.onError(errorState, props.buttonReferences);\r\n }\r\n setDisabled(false);\r\n };\r\n\r\n await payInvoices(props.data.invoices, props.context.actionContext, propagateError);\r\n};\r\n\r\nconst MakePaymentComponentActions = {\r\n onClick\r\n};\r\n\r\n/**\r\n * On Click function.\r\n * @param input -Make payment props.\r\n * @param setDisabled -Set Disabled.\r\n * @returns Make payment component on click.\r\n */\r\nconst onClickHandler = (input: IMakePaymentProps, setDisabled: React.Dispatch>) => async (\r\n event: React.MouseEvent\r\n) => {\r\n await MakePaymentComponentActions.onClick(event, input, setDisabled);\r\n};\r\n\r\nconst MakePayment: React.FC = (input: IMakePaymentProps): JSX.Element => {\r\n const {\r\n data: { invoices }\r\n } = input;\r\n const hasInvoices = ArrayExtensions.hasElements(invoices.filter(invoice => invoice.canBePaid));\r\n const [disabled, setDisabled] = useState(false);\r\n\r\n return (\r\n \r\n {input.resources.makePaymentButtonText}\r\n \r\n );\r\n};\r\n\r\n// @ts-expect-error\r\nexport const MakePaymentComponent: React.FunctionComponent = msdyn365Commerce.createComponent(\r\n 'MakePayment',\r\n { component: MakePayment }\r\n);\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\r\n\r\n/* ---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nimport { InvoiceModel } from '../helpers/invoice-data';\r\nimport { IGdnInvoicesListResources } from '../gdn-invoices-list.props.autogenerated';\r\n\r\ninterface IRequestInvoiceModalProps {\r\n className: string;\r\n email: string;\r\n isModalOpen: boolean;\r\n submitRequestLabel: string;\r\n modalHeaderLabel: string;\r\n sendToEmailLabel: string;\r\n cancelLabel: string;\r\n searchPlaceholderLabel: string;\r\n invoices: InvoiceModel[];\r\n invoicesFoundString: string;\r\n singleInvoiceFoundString: string;\r\n searchButtonAltText: string;\r\n resources: IGdnInvoicesListResources;\r\n toggle(): void;\r\n onSubmitRequest(invoiceId: string): void;\r\n}\r\n\r\n/**\r\n * On submit request click function.\r\n * @param selectedInvoiceIndex -Check is busy.\r\n * @param onClosing -On closing function.\r\n * @param filteredInvoices -Invoice modal.\r\n * @param onSubmitRequest -On submit request function.\r\n * @returns Call on submit request.\r\n */\r\nconst onSubmitRequestClick = (\r\n onClosing: () => void,\r\n filteredInvoices: InvoiceModel[],\r\n onSubmitRequest: (invoiceId: string) => void,\r\n checkboxRef: React.MutableRefObject\r\n) => () => {\r\n const defaultIndex = 0;\r\n let closingFlag: number = 0;\r\n\r\n filteredInvoices.map((invoice, index) => {\r\n const inputInvoice = checkboxRef.current[Number(index)] as React.RefObject;\r\n if (inputInvoice.current?.checked === true && index >= defaultIndex) {\r\n onSubmitRequest(invoice.id);\r\n closingFlag = closingFlag + 1;\r\n }\r\n });\r\n if (closingFlag <= filteredInvoices.length) {\r\n onClosing();\r\n }\r\n};\r\n\r\n/**\r\n * On search input change function.\r\n * @param setSearchInput -Set search input.\r\n * @returns Set search input function.\r\n */\r\nconst searchInputChangedHandler = (setSearchInput: React.Dispatch>) => (\r\n event: React.ChangeEvent\r\n) => {\r\n setSearchInput(event.target.value);\r\n};\r\n\r\n/**\r\n * Search entered handler.\r\n * @param invoices -InvoiceModel.\r\n * @param searchInput -String.\r\n * @param setFilteredInvoices -InvoiceModel action.\r\n * @param filteredInvoices -Filtered Invoices.\r\n * @param setSelectedInvoiceIndex -Selected Invoice Index.\r\n * @param setShouldShowSearchResults -Show search result action.\r\n * @param setInvoiceOptions -Invoice options action.\r\n * @param selectedInvoiceIndex -Selected invoice index.\r\n * @param className -String.\r\n * @returns Set invoice options.\r\n */\r\nconst searchEnteredHandler = (\r\n invoices: InvoiceModel[],\r\n searchInput: string,\r\n setFilteredInvoices: React.Dispatch>,\r\n filteredInvoices: InvoiceModel[],\r\n setSelectedInvoiceIndex: React.Dispatch>,\r\n setShouldShowSearchResults: React.Dispatch>,\r\n setInvoiceOptions: React.Dispatch>,\r\n selectedInvoiceIndex: number,\r\n className: string,\r\n checkboxRef: React.MutableRefObject\r\n) => () => {\r\n let updatedInvoices = filteredInvoices;\r\n if (!StringExtensions.isNullOrEmpty(searchInput)) {\r\n updatedInvoices = invoices.filter(invoice => invoice.id.toLocaleUpperCase().includes(searchInput.toLocaleUpperCase()));\r\n } else {\r\n updatedInvoices = invoices;\r\n }\r\n\r\n if (ArrayExtensions.hasElements(updatedInvoices)) {\r\n setFilteredInvoices(updatedInvoices);\r\n setSelectedInvoiceIndex(0);\r\n } else {\r\n setFilteredInvoices(updatedInvoices);\r\n setSelectedInvoiceIndex(-1);\r\n }\r\n setShouldShowSearchResults(true);\r\n\r\n setInvoiceOptions(\r\n renderInvoiceOptions(\r\n StringExtensions.isNullOrEmpty(searchInput) ? invoices : updatedInvoices,\r\n setSelectedInvoiceIndex,\r\n className,\r\n checkboxRef\r\n )\r\n );\r\n};\r\n\r\n/**\r\n * On cancel function.\r\n * @param onClosing -Closing function.\r\n * @param toggle -Toggle Function.\r\n * @returns Toggle function.\r\n */\r\nconst onCancelHandler = (onClosing: () => void, toggle: () => void) => () => {\r\n onClosing();\r\n toggle();\r\n};\r\n\r\n/**\r\n * On invoice select.\r\n * @param setSelectedInvoiceIndex -Set Selected Invoice Index.\r\n * @param index -Number.\r\n * @returns Set Selected Invoice Index.\r\n */\r\nconst onInvoiceSelectHandler = (setSelectedInvoiceIndex: (newIndex: number) => void, index: number) => () => {\r\n setSelectedInvoiceIndex(index);\r\n};\r\n\r\nconst renderInvoiceOptions = (\r\n filteredInvoices: InvoiceModel[],\r\n setSelectedInvoiceIndex: (newIndex: number) => void,\r\n className: string,\r\n checkboxRef: React.MutableRefObject\r\n) => {\r\n checkboxRef.current = filteredInvoices.map((_invoice, i) => checkboxRef.current[Number(i)] ?? React.createRef());\r\n return (\r\n
\r\n {filteredInvoices.map((invoice, index) => {\r\n const onInvoiceSelect = onInvoiceSelectHandler(setSelectedInvoiceIndex, index);\r\n\r\n const checkboxId = `invoice__${invoice.id}`;\r\n const checkboxName = `invoiceSelect__${invoice.id}`;\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\nexport const RequestInvoiceModal: React.FC = ({\r\n className,\r\n email,\r\n isModalOpen,\r\n toggle,\r\n modalHeaderLabel,\r\n sendToEmailLabel,\r\n submitRequestLabel,\r\n cancelLabel,\r\n onSubmitRequest,\r\n invoices,\r\n searchPlaceholderLabel,\r\n invoicesFoundString,\r\n singleInvoiceFoundString,\r\n searchButtonAltText,\r\n resources\r\n}) => {\r\n const [selectedInvoiceIndex, setSelectedInvoiceIndex] = React.useState(-1);\r\n const [filteredInvoices, setFilteredInvoices] = React.useState(invoices);\r\n const [searchInput, setSearchInput] = React.useState('');\r\n const [shouldShowSearchResults, setShouldShowSearchResults] = React.useState(false);\r\n const focusDelay = 110;\r\n const checkboxRef = React.useRef([]);\r\n const invoiceOptionsData = renderInvoiceOptions(filteredInvoices, setSelectedInvoiceIndex, className, checkboxRef);\r\n const [invoiceOptions, setInvoiceOptions] = React.useState(invoiceOptionsData);\r\n const focusElement = React.useRef(null);\r\n React.useEffect(() => {\r\n if (isModalOpen && focusElement.current) {\r\n setTimeout(() => {\r\n focusElement.current?.focus();\r\n }, focusDelay);\r\n }\r\n }, [isModalOpen]);\r\n\r\n /**\r\n * Sets the filtered invoices to the ones that were selected on the main screen.\r\n */\r\n const setFilteredInvoicesToSelectedInvoices = () => {\r\n setSelectedInvoiceIndex(-1);\r\n const selectedInvoices = invoices.filter(invoice => invoice.isSelected);\r\n if (ArrayExtensions.hasElements(selectedInvoices)) {\r\n setFilteredInvoices(selectedInvoices);\r\n\r\n // If only one invoice selected, auto select it\r\n if (selectedInvoices.length === 1) {\r\n setSelectedInvoiceIndex(0);\r\n }\r\n\r\n setInvoiceOptions(renderInvoiceOptions(selectedInvoices, setSelectedInvoiceIndex, className, checkboxRef));\r\n } else {\r\n setFilteredInvoices(invoices);\r\n setInvoiceOptions(renderInvoiceOptions(invoices, setSelectedInvoiceIndex, className, checkboxRef));\r\n }\r\n };\r\n\r\n const searchEntered = searchEnteredHandler(\r\n invoices,\r\n searchInput,\r\n setFilteredInvoices,\r\n filteredInvoices,\r\n setSelectedInvoiceIndex,\r\n setShouldShowSearchResults,\r\n setInvoiceOptions,\r\n selectedInvoiceIndex,\r\n className,\r\n checkboxRef\r\n );\r\n\r\n const onClosing = () => {\r\n setSelectedInvoiceIndex(-1);\r\n setFilteredInvoices(invoices);\r\n setSearchInput('');\r\n setShouldShowSearchResults(false);\r\n };\r\n\r\n /**\r\n * Sets the invoices that are possible to select when the dialog is opened.\r\n */\r\n const onOpened = () => {\r\n setSearchInput('');\r\n setFilteredInvoicesToSelectedInvoices();\r\n };\r\n\r\n const searchResultString = filteredInvoices.length === 1 ? singleInvoiceFoundString : invoicesFoundString;\r\n const invoicesFoundReplaceIndex = searchResultString.indexOf('{0}');\r\n\r\n return (\r\n \r\n \r\n {modalHeaderLabel}\r\n \r\n \r\n
\r\n \r\n
\r\n {email}\r\n
\r\n
\r\n {shouldShowSearchResults && (\r\n
\r\n {searchResultString.substring(0, invoicesFoundReplaceIndex)}\r\n {filteredInvoices.length}\r\n {searchResultString.substring(invoicesFoundReplaceIndex + 3)}\r\n
\r\n )}\r\n
\r\n \r\n \r\n
\r\n {invoiceOptions}\r\n
\r\n
\r\n
\r\n \r\n \r\n {submitRequestLabel}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { InvoicePaidStatus, OrderInvoice } from '@msdyn365-commerce/retail-proxy';\r\n\r\nexport interface IPayableInvoice {\r\n readonly amount?: number;\r\n readonly id: string;\r\n readonly canBePaid: boolean;\r\n}\r\n\r\n/**\r\n * Represents invoice data model.\r\n */\r\nexport class InvoiceModel implements IPayableInvoice {\r\n public id: string;\r\n\r\n public invoiceDate?: Date;\r\n\r\n public customerAccountNumber?: string;\r\n\r\n public customerName?: string;\r\n\r\n public amount?: number;\r\n\r\n public dueDate?: Date;\r\n\r\n public amountDue?: number;\r\n\r\n public status?: InvoicePaidStatus;\r\n\r\n public currencyCode?: string;\r\n\r\n public isSelected: boolean;\r\n\r\n public constructor(invoice: OrderInvoice) {\r\n this.id = invoice.Id || '';\r\n this.invoiceDate = invoice.InvoiceDate ? new Date(invoice.InvoiceDate) : undefined;\r\n this.customerAccountNumber = invoice.CustomerAccountNumber;\r\n this.customerName = invoice.CustomerName;\r\n this.amount = invoice.TotalAmount;\r\n this.dueDate = invoice.InvoiceDueDate ? new Date(invoice.InvoiceDueDate) : undefined;\r\n this.amountDue = invoice.AmountBalance;\r\n this.status = invoice.InvoicePaidStatusValue;\r\n this.currencyCode = invoice.CurrencyCode;\r\n\r\n this.isSelected = false;\r\n }\r\n\r\n public get canBePaid(): boolean {\r\n return this.status !== InvoicePaidStatus.Paid;\r\n }\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { getUrlSync, isOboRequest } from '@msdyn365-commerce/core';\r\nimport {\r\n BusinessPartnerOperationDeliveryType,\r\n BusinessPartnerUsersDataActions,\r\n InvoicePaidStatus,\r\n InvoiceSearchCriteria,\r\n IQueryResultSettings,\r\n OrderInvoice\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport { getCurrentAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/BusinessPartnersDataActions.g';\r\nimport {\r\n ArrayExtensions,\r\n getCustomer,\r\n GetCustomerInput,\r\n // getInvoices,\r\n IQueryResultSettingsModuleConfig,\r\n QueryResultSettingsProxy,\r\n StringExtensions\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Alert, Button, Heading, IModuleProps } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { reaction } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\n\r\nimport { InvoiceErrorComponent } from './components/invoice-error-component';\r\nimport { InvoicesFilterComponent, InvoicesFilterState } from './components/invoices-filter-component';\r\nimport { InvoicesTableComponent } from './components/invoices-table/invoices-table-component';\r\nimport { IMakePaymentResources, MakePaymentComponent } from './components/make-payment-component';\r\nimport { RequestInvoiceButton } from './components/request-invoice-button';\r\nimport { RequestInvoiceModal } from './components/request-invoice-modal';\r\nimport { InvoiceModel } from './helpers/invoice-data';\r\nimport { IAddInvoicesToCartFailureResult } from './helpers/pay-invoices';\r\nimport { IGdnInvoicesListData } from './gdn-invoices-list.data';\r\nimport { IGdnInvoicesListProps } from './gdn-invoices-list.props.autogenerated';\r\nimport getGdnInvoices, { GetGdnInvoicesInput } from '../../actions/get-gdn-invoices.action';\r\n\r\nexport type InvoicesListStatus = 'LOADING' | 'SUCCESS' | 'FAILED' | 'EMPTY';\r\nexport type InvoiceErrorHost = 'ADDINVOICETOCART';\r\n\r\nexport interface IInvoicesListViewProps extends IGdnInvoicesListProps {\r\n moduleProps: IModuleProps;\r\n\r\n header: JSX.Element;\r\n filter: JSX.Element;\r\n content?: JSX.Element;\r\n invoiceRequestModal?: JSX.Element;\r\n pagination?: JSX.Element;\r\n}\r\n\r\nexport interface IInvoiceErrorState {\r\n errorHost?: InvoiceErrorHost;\r\n errorReason?: IAddInvoicesToCartFailureResult;\r\n errorMessage: string;\r\n otherError?: string;\r\n errorCode?: string;\r\n}\r\n\r\nexport interface IInvoicesListState {\r\n invoices: InvoiceModel[];\r\n invoicesFilterState: InvoicesFilterState;\r\n errorState: IInvoiceErrorState;\r\n isInvoiceRequestModalOpen: boolean;\r\n isLoading: boolean;\r\n isOpen: boolean;\r\n isPageLoaded: boolean;\r\n payInvoiceErrorModalOpen: boolean;\r\n selectedButtonElement?: HTMLButtonElement | null;\r\n}\r\n\r\n/**\r\n * InvoicesList component.\r\n * @extends {React.Component, IInvoicesListState>}\r\n */\r\n@observer\r\nclass InvoicesList extends React.Component, IInvoicesListState> {\r\n private readonly getInvoiceType = this.props.config?.invoiceTypes || [];\r\n\r\n private readonly _className: string = 'msc-invoices-list';\r\n\r\n private readonly payInvoiceRequestReference: React.RefObject;\r\n\r\n private readonly makePaymentReference: React.RefObject;\r\n\r\n private buttonChildReference: React.RefObject[] = [];\r\n\r\n private buttonChildPayButtonReference: React.RefObject[] = [];\r\n\r\n private readonly _queryResultSettings: IQueryResultSettings;\r\n\r\n private invoiceIds: string[] = [];\r\n\r\n constructor(props: IGdnInvoicesListProps) {\r\n super(props);\r\n\r\n this._queryResultSettings = QueryResultSettingsProxy.fromModuleData(\r\n this.props.context.request,\r\n this.props.config as IQueryResultSettingsModuleConfig\r\n ).QueryResultSettings;\r\n this.payInvoiceRequestReference = React.createRef();\r\n this.makePaymentReference = React.createRef();\r\n this._updateInvoicesState = this._updateInvoicesState.bind(this);\r\n this._onAddToCartFailed = this._onAddToCartFailed.bind(this);\r\n this._onToggleInvoiceRequestModal = this._onToggleInvoiceRequestModal.bind(this);\r\n this._handleFilterStateChange = this._handleFilterStateChange.bind(this);\r\n this._loadMoreInvoices = this._loadMoreInvoices.bind(this);\r\n this._requestInvoice = this._requestInvoice.bind(this);\r\n this._requestSpecificInvoice = this._requestSpecificInvoice.bind(this);\r\n this._setPayInvoiceErrorModalClose = this._setPayInvoiceErrorModalClose.bind(this);\r\n this.state = {\r\n invoices: [],\r\n invoicesFilterState: InvoicesFilterState.ShowAll,\r\n isLoading: true,\r\n isOpen: true,\r\n isPageLoaded: false,\r\n errorState: { errorMessage: '' },\r\n isInvoiceRequestModalOpen: false,\r\n payInvoiceErrorModalOpen: false,\r\n selectedButtonElement: null\r\n };\r\n }\r\n\r\n public shouldComponentUpdate(nextProps: IGdnInvoicesListProps, nextState: IInvoicesListState): boolean {\r\n if (this.state === nextState && this.props.data === nextProps.data) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const {\r\n config: { className = '', heading },\r\n context: {\r\n request: { channel },\r\n cultureFormatter: {\r\n formatCurrency,\r\n\r\n // @ts-expect-error\r\n currencyCode\r\n }\r\n },\r\n data: { customerBalance },\r\n resources: { invoicesListTitle, invoicesListDescTitle, invoicesListDescCount }\r\n } = this.props;\r\n\r\n const totalAmount = customerBalance.result?.OpenInvoiceBalance || 0;\r\n const amountText = `${formatCurrency(totalAmount.toFixed(2), currencyCode)} ${channel?.Currency || 'USD'}`;\r\n\r\n const totalCount = customerBalance.result?.OpenInvoiceCount || 0;\r\n const countText = invoicesListDescCount.replace('{0}', totalCount.toString());\r\n const invoicesListTitleHeading = heading?.text ?? invoicesListTitle;\r\n\r\n const headerClassName = `${this._className}__header`;\r\n\r\n const header = (\r\n
\r\n \r\n
\r\n
{invoicesListDescTitle}
\r\n
{amountText}
\r\n
{countText}
\r\n
\r\n
\r\n );\r\n\r\n const viewProps: IInvoicesListViewProps = {\r\n ...(this.props as IGdnInvoicesListProps),\r\n moduleProps: {\r\n moduleProps: this.props,\r\n className: classnames(this._className, className)\r\n },\r\n header,\r\n invoiceRequestModal: this._renderInvoiceRequestModal(),\r\n filter: this._renderInvoicesFilter(this._className),\r\n pagination: this._renderPagination()\r\n };\r\n\r\n if (!this.state.isPageLoaded) {\r\n return this.props.renderView(viewProps);\r\n }\r\n\r\n if (ArrayExtensions.hasElements(this.state.invoices)) {\r\n viewProps.content = this._renderListContainer();\r\n } else {\r\n viewProps.content = this._renderEmptyInvoiceLinesPageContent();\r\n }\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n public async componentDidMount(): Promise {\r\n await this.props.data.customer;\r\n const invoicesData = await this.props.data.invoices;\r\n this._initializeWithInvoices(invoicesData);\r\n\r\n reaction(\r\n () => this.state.isInvoiceRequestModalOpen,\r\n async () => {\r\n if (this.invoiceIds && !this.state.isInvoiceRequestModalOpen) {\r\n const context = { callerContext: this.props.context.actionContext };\r\n const b2bUserId: string = this.props.data.b2bUserInformation?.result?.B2BUserId || '';\r\n for (const invoiceId of this.invoiceIds) {\r\n await BusinessPartnerUsersDataActions.requestInvoiceCopyAsync(\r\n context,\r\n b2bUserId,\r\n invoiceId,\r\n BusinessPartnerOperationDeliveryType.Email\r\n );\r\n }\r\n this.invoiceIds = [];\r\n }\r\n }\r\n );\r\n }\r\n\r\n private _initializeWithInvoices(invoicesData: OrderInvoice[]): void {\r\n const invoices = invoicesData.map((invoice, index) => {\r\n this.buttonChildReference[Number(index)] = React.createRef();\r\n this.buttonChildPayButtonReference[Number(index)] = React.createRef();\r\n return new InvoiceModel(invoice);\r\n });\r\n this.setState({\r\n invoices,\r\n isLoading: false,\r\n isPageLoaded: true\r\n });\r\n }\r\n\r\n private _addInvoices(invoicesData: OrderInvoice[]): void {\r\n const newInvoices = invoicesData.map(invoice => new InvoiceModel(invoice));\r\n const invoices = this.state.invoices.concat(newInvoices);\r\n this.setState({\r\n invoices,\r\n isLoading: false\r\n });\r\n }\r\n\r\n private _renderEmptyInvoiceLinesPageContent(): JSX.Element {\r\n const containerClass = `${this._className}__empty-lines__container`;\r\n const actionsContainerClass = `${containerClass}__actions`;\r\n return (\r\n
\r\n
{this.props.resources.invoiceEmptyInvoiceLinesTitle}
\r\n
{this.props.resources.invoiceEmptyInvoiceLinesDescription}
\r\n
\r\n \r\n {this.props.resources.invoiceEmptyInvoiceLinesContinueShoppingButtonText}\r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n private _renderListContainer(): JSX.Element {\r\n const containerClass = `${this._className}__container`;\r\n const containerHeaderClass = `${containerClass}__header`;\r\n const containerContentClass = `${containerClass}__content`;\r\n const isOnBehalfOfRequest = isOboRequest(this.props.context.request);\r\n\r\n return (\r\n
\r\n
\r\n {this._renderMakePayment(containerHeaderClass, isOnBehalfOfRequest)}\r\n {this._renderInvoiceRequestButton()}\r\n
\r\n
{this._renderInvoiceErrors()}
\r\n
{this._renderInvoicesList(containerContentClass)}
\r\n
\r\n );\r\n }\r\n\r\n private _updateInvoicesState(): void {\r\n this.setState({\r\n invoices: this.state.invoices\r\n });\r\n }\r\n\r\n private async _getInvoicesSearchCriteria(state: InvoicesFilterState): Promise {\r\n const searchCriteria: InvoiceSearchCriteria = {};\r\n\r\n const context = this.props.context.actionContext;\r\n\r\n const businessPartner = await getCurrentAsync({ callerContext: context });\r\n searchCriteria.BusinessPartnerId = businessPartner.BusinessPartnerId;\r\n\r\n const customer = await getCustomer(new GetCustomerInput(context.requestContext.apiSettings), context);\r\n searchCriteria.CustomerId = customer.AccountNumber;\r\n\r\n switch (state) {\r\n case InvoicesFilterState.ShowAll:\r\n searchCriteria.InvoicePaidStatusValues = [InvoicePaidStatus.None];\r\n break;\r\n case InvoicesFilterState.Paid:\r\n searchCriteria.InvoicePaidStatusValues = [InvoicePaidStatus.Paid];\r\n break;\r\n case InvoicesFilterState.PartiallyPaid:\r\n searchCriteria.InvoicePaidStatusValues = [InvoicePaidStatus.PartiallyPaid];\r\n break;\r\n case InvoicesFilterState.Unpaid:\r\n searchCriteria.InvoicePaidStatusValues = [InvoicePaidStatus.Unpaid];\r\n break;\r\n default:\r\n throw new Error('Failed to process unknown invoices filter state.');\r\n }\r\n\r\n return searchCriteria;\r\n }\r\n\r\n private async _handleFilterStateChange(state: InvoicesFilterState): Promise {\r\n this.setState({\r\n invoicesFilterState: state,\r\n isLoading: true\r\n });\r\n\r\n const searchCriteria = await this._getInvoicesSearchCriteria(state);\r\n\r\n if (this._queryResultSettings.Paging) {\r\n this._queryResultSettings.Paging.Skip = 0;\r\n }\r\n\r\n const invoices = await getGdnInvoices(\r\n new GetGdnInvoicesInput(searchCriteria, this._queryResultSettings, this.getInvoiceType),\r\n this.props.context.actionContext\r\n );\r\n this._initializeWithInvoices(invoices);\r\n }\r\n\r\n private _renderInvoicesFilter(className: string): JSX.Element {\r\n const containerClass = `${this._className}__container`;\r\n const containerContentClass = `${containerClass}__content`;\r\n const filterClassName = `${className}__filter`;\r\n return (\r\n
\r\n
{this._renderInvoiceInCartPaymentMessage()}
\r\n \r\n
\r\n );\r\n }\r\n\r\n private _renderInvoicesList(className: string): JSX.Element {\r\n const tableClassName = `${className}__table`;\r\n return (\r\n \r\n );\r\n }\r\n\r\n private _onAddToCartFailed(newErrorState: IInvoiceErrorState, reference?: React.RefObject): void {\r\n const errorState = { ...newErrorState };\r\n errorState.errorHost = 'ADDINVOICETOCART';\r\n errorState.errorMessage =\r\n newErrorState.errorReason?.failureReason === 'EMPTYINPUT'\r\n ? this.props.resources.invoiceErrorInvoiceIdNotExist\r\n : this.props.resources.invoiceErrorFailedAddInvoiceToCart;\r\n\r\n const shouldShowAdditionalInfoInPopup =\r\n errorState.errorCode === 'Microsoft_Dynamics_Commerce_Runtime_InvoiceLineNotAllowedWithItemLines';\r\n this.setState({ errorState, payInvoiceErrorModalOpen: shouldShowAdditionalInfoInPopup, selectedButtonElement: reference?.current });\r\n }\r\n\r\n private _renderMakePayment(className: string, disabled: boolean): JSX.Element {\r\n const id = `${className}__make-payment`;\r\n const makePaymentResources: IMakePaymentResources = {\r\n makePaymentButtonText: this.props.resources.makePaymentButtonText,\r\n makePaymentButtonAriaLabel: this.props.resources.makePaymentButtonAriaLabel\r\n };\r\n\r\n const selectedInvoices = this._getSelectedInvoices();\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n private _setPayInvoiceErrorModalClose(): void {\r\n this.setState({\r\n payInvoiceErrorModalOpen: false\r\n });\r\n this.state.selectedButtonElement?.focus();\r\n }\r\n\r\n private _renderInvoiceErrors(): JSX.Element {\r\n const {\r\n resources: {\r\n payInvoiceErrorDialogHeader,\r\n payInvoiceErrorDialogBodyErrorTitle,\r\n payInvoiceErrorDialogBodyErrorDescription,\r\n payInvoiceErrorDialogFooterGoToCartButtonText,\r\n payInvoiceErrorDialogFooterCancelButtonText\r\n }\r\n } = this.props;\r\n\r\n const cartUrl = getUrlSync('cart', this.props.context.actionContext) || '';\r\n\r\n const errorClassName = `${this._className}__errors`;\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n private _renderInvoiceInCartPaymentMessage(): JSX.Element {\r\n const cart = this.props.data.cart?.result;\r\n\r\n if (!cart?.hasInvoiceLine) {\r\n return <>;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n // Dismiss alert.\r\n private readonly _onDismiss = () => {\r\n this.setState({\r\n isOpen: false\r\n });\r\n };\r\n\r\n private _renderPagination(): JSX.Element | undefined {\r\n const { data, resources } = this.props;\r\n const invoices = data?.invoices?.result;\r\n if (!invoices || invoices.length < this._queryResultSettings.Paging!.Top!) {\r\n return undefined;\r\n }\r\n\r\n return (\r\n \r\n {resources.invoicesLoadMore}\r\n \r\n );\r\n }\r\n\r\n private async _loadMoreInvoices(): Promise {\r\n this.setState({ isLoading: true });\r\n const searchCriteria = await this._getInvoicesSearchCriteria(this.state.invoicesFilterState);\r\n if (this._queryResultSettings.Paging) {\r\n this._queryResultSettings.Paging.Skip! += this._queryResultSettings.Paging.Top!;\r\n }\r\n const newInvoices = await getGdnInvoices(\r\n new GetGdnInvoicesInput(searchCriteria, this._queryResultSettings, this.getInvoiceType),\r\n this.props.context.actionContext\r\n );\r\n this._addInvoices(newInvoices);\r\n }\r\n\r\n private _renderInvoiceRequestModal(): JSX.Element {\r\n const customer = this.props.data.customer.result;\r\n const {\r\n invoiceRequestModalCancelLabel,\r\n invoiceRequestModalSubmitLabel,\r\n invoiceRequestModalHeaderLabel,\r\n invoiceRequestModalSendToEmailLabel,\r\n invoiceRequestModalSearch,\r\n invoiceRequestModalInvoiceSearchDisplay,\r\n invoiceRequestModalSingleInvoiceSearchDisplay,\r\n invoiceRequestModalSearchButton\r\n } = this.props.resources;\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n private _onToggleInvoiceRequestModal(): void {\r\n this.setState({\r\n isInvoiceRequestModalOpen: !this.state.isInvoiceRequestModalOpen\r\n });\r\n if (this.state.isInvoiceRequestModalOpen) {\r\n this.state.selectedButtonElement?.focus();\r\n }\r\n }\r\n\r\n /**\r\n * Request specific invoice function.\r\n */\r\n private readonly _onToggleInvoiceRequestParentModal = () => {\r\n this.setState(\r\n {\r\n selectedButtonElement: this.payInvoiceRequestReference.current\r\n },\r\n () => {\r\n this._onToggleInvoiceRequestModal();\r\n }\r\n );\r\n };\r\n\r\n private _renderInvoiceRequestButton(): JSX.Element | null {\r\n const { invoiceRequestButtonLabel } = this.props.resources;\r\n const customer = this.props.data.customer.result;\r\n\r\n if (StringExtensions.isNullOrWhitespace(customer?.Email)) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n private _requestInvoice(invoiceId: string): void {\r\n this.invoiceIds.push(invoiceId);\r\n this._onToggleInvoiceRequestModal();\r\n }\r\n\r\n private _getSelectedInvoices(): InvoiceModel[] {\r\n let selectedInvoices = this.state.invoices.filter(invoice => invoice.isSelected);\r\n if (!ArrayExtensions.hasElements(selectedInvoices)) {\r\n selectedInvoices = this.state.invoices;\r\n }\r\n\r\n return selectedInvoices;\r\n }\r\n\r\n private _requestSpecificInvoice(\r\n specificInvoice: InvoiceModel,\r\n requestInvoiceButtonReference: React.RefObject\r\n ): void {\r\n this.state.invoices.forEach((invoice: InvoiceModel) => {\r\n if (invoice === specificInvoice) {\r\n invoice.isSelected = true;\r\n } else {\r\n invoice.isSelected = false;\r\n }\r\n });\r\n this.setState({\r\n selectedButtonElement: requestInvoiceButtonReference.current\r\n });\r\n this._onToggleInvoiceRequestModal();\r\n }\r\n}\r\n\r\nexport default InvoicesList;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n ITelemetryContent,\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport interface ILoyaltyTermsModalProps {\n resources: ILoyaltyTermsModalResources;\n returnRef: React.RefObject | undefined;\n checked: boolean;\n isOpen: boolean;\n terms: React.ReactNode;\n telemetryContent?: ITelemetryContent;\n onToggle(): void;\n onSubmit(): void;\n onCheck(): void;\n}\n\nexport interface ILoyaltyTermsModalResources {\n loyaltyTermsHeading: string;\n loyaltyAgreeToTerms: string;\n joinLoyaltyTermsText: string;\n cancelLoyaltyTermsText: string;\n}\n\nexport interface ILoyaltyTermsModalViewProps {\n modal: INodeProps;\n modalHeader: INodeProps;\n modalFooter: INodeProps;\n modalBody: INodeProps;\n heading: React.ReactElement;\n cancelButton: React.ReactElement;\n submitButton: React.ReactElement;\n terms: React.ReactNode;\n checkbox: React.ReactElement;\n agreeText: React.ReactElement;\n agreeSection: INodeProps;\n}\n\nexport const LoyaltyTermsModal = (props: ILoyaltyTermsModalProps): ILoyaltyTermsModalViewProps => {\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.LoyaltyTermsCancel);\n const loyaltyTermCancelAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.LoyaltyTermsSubmit;\n const loyaltyTermSubmitAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n payLoad.contentAction.etext = TelemetryConstant.LoyaltyTermsAgree;\n const loyaltyTermCheckboxAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n return {\n modal: {\n tag: Modal,\n className: 'ms-loyalty-terms__modal',\n toggle: props.onToggle,\n applicationNode: 'renderPage',\n isOpen: props.isOpen,\n returnFocusRef: props.returnRef\n },\n modalHeader: { tag: ModalHeader, className: 'ms-loyalty-terms__modal-header', toggle: props.onToggle },\n modalFooter: { tag: ModalFooter, className: 'ms-loyalty-terms__modal-footer' },\n modalBody: { tag: ModalBody, className: 'ms-loyalty-terms__modal-body' },\n cancelButton: (\n \n ),\n submitButton: (\n \n {props.resources.joinLoyaltyTermsText}\n \n ),\n heading:

{props.resources.loyaltyTermsHeading}

,\n terms: props.terms,\n agreeSection: { className: 'ms-loyalty-terms__agree-section' },\n checkbox: (\n \n ),\n agreeText:

{props.resources.loyaltyAgreeToTerms}

\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getUrlSync } from '@msdyn365-commerce/core';\nimport { getLoyaltyCardAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport { GetLoyaltyCardInput, issueLoyalty, IssueLoyaltyInput } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, getTelemetryObject, IModuleProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport * as React from 'react';\n\nimport { ILoyaltyTermsModalViewProps, LoyaltyTermsModal } from './components/loyalty-terms-modal';\nimport { ILoyaltyTermsData } from './loyalty-terms.data';\nimport { ILoyaltyTermsProps } from './loyalty-terms.props.autogenerated';\n\nexport interface ILoyaltyTermsState {\n checked: boolean;\n clicked: boolean;\n isModalOpen: boolean;\n}\nexport interface ILoyaltyTermsViewProps extends ILoyaltyTermsProps {\n LoyaltyTerms: IModuleProps;\n modalToggle: React.ReactElement;\n modal: ILoyaltyTermsModalViewProps;\n loading: boolean;\n}\n\n/**\n *\n * LoyaltyTerms component.\n * @extends {React.Component>}\n */\nclass LoyaltyTerms extends React.Component, ILoyaltyTermsState> {\n private readonly toggleRef: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n public constructor(props: ILoyaltyTermsProps) {\n super(props);\n this._toggle = this._toggle.bind(this);\n this._submit = this._submit.bind(this);\n this._checkboxChecked = this._checkboxChecked.bind(this);\n this.toggleRef = React.createRef();\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n let search = this.props.context.request.url.requestUrl.search;\n let isJoining = false;\n if (search) {\n search = search.substring(1);\n const qsps = search.split('&');\n for (const qsp of qsps) {\n const splitQsp = qsp.split('=');\n isJoining = splitQsp[0] === 'joiningLoyalty' && splitQsp[1] === 'true';\n if (isJoining) {\n break;\n }\n }\n }\n\n this.state = {\n isModalOpen: isJoining,\n checked: false,\n clicked: false\n };\n }\n\n public shouldComponentUpdate(nextProps: ILoyaltyTermsProps, nextState: ILoyaltyTermsState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const {\n config: { className, hideToggle },\n resources,\n slots: { serviceTerms },\n data: { loyaltyCard },\n context: {\n request: {\n user: { isAuthenticated }\n }\n }\n } = this.props;\n const completeClass = classname('ms-loyalty-terms', className);\n\n const viewProps = {\n ...this.props,\n className: completeClass,\n LoyaltyTerms: {\n moduleProps: this.props,\n className: completeClass\n },\n loading: loyaltyCard.status === 'LOADING',\n modalToggle: hideToggle !== true && (\n \n ),\n modal:\n isAuthenticated &&\n loyaltyCard.result &&\n loyaltyCard.result.CardNumber === undefined &&\n LoyaltyTermsModal({\n resources: { ...resources },\n returnRef: this.toggleRef,\n checked: this.state.checked,\n isOpen: this.state.isModalOpen,\n terms: serviceTerms,\n telemetryContent: this.telemetryContent,\n onToggle: this._toggle,\n onSubmit: this._submit,\n onCheck: this._checkboxChecked\n })\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _toggle(): void {\n this.setState({ isModalOpen: !this.state.isModalOpen, checked: false });\n }\n\n private _submit(): void {\n if (this.props.context.request.user.isAuthenticated && !this.state.clicked) {\n this.setState({ clicked: true });\n const input = new IssueLoyaltyInput(this.props.context.request.apiSettings);\n\n issueLoyalty(input, this.props.context.actionContext)\n .then(card => {\n if (this.props.config.redirectToLoyalty) {\n window.location.assign(getUrlSync('loyalty', this.props.context.actionContext) || '');\n } else {\n getLoyaltyCardAsync({ callerContext: this.props.context.actionContext }, card.CardNumber || '')\n .then(fullCard => {\n this.props.context.actionContext.update(\n new GetLoyaltyCardInput(this.props.context.request.apiSettings),\n fullCard\n );\n })\n .catch((error: Error) => {\n this.props.context.actionContext.update(\n new GetLoyaltyCardInput(this.props.context.request.apiSettings),\n card\n );\n this.props.telemetry.error(error.message);\n this.props.telemetry.debug('Unable to fetch loyalty card');\n });\n }\n })\n .catch((error: Error) => {\n this.setState({ clicked: false });\n this.props.telemetry.error(error.message);\n this.props.telemetry.debug('Unable to issue loyalty card');\n });\n }\n }\n\n private _checkboxChecked(): void {\n this.setState({ checked: !this.state.checked });\n }\n}\n\nexport default LoyaltyTerms;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Alert, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICookieComplianceViewProps } from './cookie-compliance';\n\nconst CookieComplianceView: React.FC = props => {\n const { CookieComplianceBanner, AlertProps, Content, acceptButton, text, links } = props;\n\n return (\n \n \n \n {text}\n {links}\n \n {acceptButton}\n \n \n );\n};\nexport default CookieComplianceView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AsyncResult, Customer, ProductSearchResult, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, ObjectExtensions, Random } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, IModuleProps, isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport { getCatalogId } from '@msdyn365-commerce/core';\nimport { ProductComparisonItem, ProductComparisonState } from '../product-comparison-state';\nimport { IProductComparisonButtonProps } from './product-comparison-button.props.autogenerated';\n\n/**\n * Represents product comparison view props.\n */\nexport interface IProductComparisonButtonViewProps extends IProductComparisonButtonProps<{}> {\n moduleProps: IModuleProps;\n productComparisonButton?: React.ReactNode;\n productComparisonPreview?: React.ReactNode;\n}\n\n/**\n * Represents the data which is required for the product comparison button to be rendered.\n */\nexport interface IProductComparisonButtonData {\n accountInformation?: AsyncResult;\n}\n\n/**\n * Extended props for the module including info about the product.\n */\nexport interface IProductComparisonButtonFullProps extends IProductComparisonButtonProps {\n product: ProductSearchResult | SimpleProduct;\n catalogId: number;\n}\n\n/**\n * Extended props for the module including info about the product.\n */\nexport interface IProductComparisonButtonState {\n canProductBeAddedToProductComparison: boolean;\n currentProductsCount: number;\n comparisonItemId: string;\n}\n\n/**\n * Represents the component which renders product comparison table.\n */\nexport class ProductComparisonButton extends React.PureComponent {\n private static _productComparisonPreview?: React.ReactNode;\n\n private readonly _className: string;\n\n private readonly _instanceId: string;\n\n private readonly _shouldUsePreview: boolean;\n\n private static _renderProductComparisonPreview(props: IProductComparisonButtonFullProps): React.ReactNode {\n if (!ProductComparisonButton._productComparisonPreview && ArrayExtensions.hasElements(props.slots.productComparisonPreview)) {\n ProductComparisonButton._productComparisonPreview = props.slots.productComparisonPreview[0];\n }\n\n return ProductComparisonButton._productComparisonPreview;\n }\n\n private static _renderProductComparisonButton(\n className: string,\n buttonText: string | undefined,\n title: string,\n onClickHandler?: () => void\n ): React.ReactNode {\n const isDisabled = ObjectExtensions.isNullOrUndefined(onClickHandler);\n let content: React.ReactNode;\n if (buttonText) {\n content = (\n <>\n
\n
{buttonText}
\n \n );\n }\n return (\n \n );\n }\n\n public constructor(props: IProductComparisonButtonFullProps) {\n super(props);\n\n this._className = 'ms-product-comparison-button';\n this._instanceId = `${this._className}-${this.props.id}-${Random.Guid.generateGuid()}`;\n\n this.state = this._getNewState();\n\n this._shouldUsePreview = !ProductComparisonButton._productComparisonPreview;\n ProductComparisonButton._renderProductComparisonPreview(this.props);\n }\n\n public componentDidMount(): void {\n ProductComparisonState.instance(this.props.context.request, this.props.data.accountInformation?.result).listModifiedEvent.subscribe(\n {\n instanceId: this._instanceId,\n\n /**\n * Updates the state in case the state for the particular product was changed.\n */\n handler: () => {\n this.setState(this._getNewState());\n }\n }\n );\n }\n\n public getSnapshotBeforeUpdate(previousProps: Readonly): void {\n if (previousProps.product.RecordId !== this.props.product.RecordId || previousProps.catalogId !== this.props.catalogId) {\n this.setState(this._getNewState());\n }\n }\n\n public componentWillUnmount(): void {\n ProductComparisonState.instance(\n this.props.context.request,\n this.props.data.accountInformation?.result\n ).listModifiedEvent.unsubscribe(this._instanceId);\n }\n\n public render(): React.ReactNode | null {\n const isConsentGiven = this.props.context.request.cookies.isConsentGiven();\n if (!isConsentGiven) {\n return null;\n }\n\n const viewProps: IProductComparisonButtonViewProps = {\n ...this.props,\n moduleProps: {\n moduleProps: this.props,\n className: this._className\n }\n };\n\n if (this._shouldUsePreview) {\n viewProps.productComparisonPreview = ProductComparisonButton._productComparisonPreview;\n }\n\n const buttonClassName = this.props.config.shouldDisplayText ? `${this._className}__button` : `${this._className}__icon`;\n\n if (!this.state.canProductBeAddedToProductComparison) {\n const buttonText = this.props.config.shouldDisplayText ? this.props.resources.removeFromComparisonButtonText : undefined;\n viewProps.productComparisonButton = ProductComparisonButton._renderProductComparisonButton(\n classnames(`${buttonClassName}__removing`, buttonClassName),\n buttonText,\n this.props.resources.removeFromComparisonButtonText,\n this._removeFromProductComparison\n );\n return this.props.renderView(viewProps);\n }\n\n const productsLimit = this._getProductsLimit();\n if (!ObjectExtensions.isNullOrUndefined(productsLimit) && productsLimit <= this.state.currentProductsCount) {\n const buttonText = this.props.config.shouldDisplayText ? this.props.resources.addToComparisonLimitReachedButtonText : undefined;\n viewProps.productComparisonButton = ProductComparisonButton._renderProductComparisonButton(\n buttonClassName,\n buttonText,\n this.props.resources.addToComparisonLimitReachedButtonText\n );\n return this.props.renderView(viewProps);\n }\n\n const buttonText = this.props.config.shouldDisplayText ? this.props.resources.addToComparisonButtonText : undefined;\n viewProps.productComparisonButton = ProductComparisonButton._renderProductComparisonButton(\n buttonClassName,\n buttonText,\n this.props.resources.addToComparisonButtonText,\n this._addToProductComparison\n );\n return this.props.renderView(viewProps);\n }\n\n private _getProductsLimit(): number | undefined | null {\n const viewport = isMobile({ variant: VariantType.Browser, context: this.props.context.request });\n if (viewport === 'xs' || viewport === 'sm') {\n return this.props.context.app.config.productComparisonMobileProductsLimit;\n }\n return this.props.context.app.config.productComparisonDesktopProductsLimit;\n }\n\n /**\n * Adds current product to a product comparison list.\n */\n private readonly _addToProductComparison: () => void = () => {\n const item = new ProductComparisonItem(this.props.product.RecordId, this.props.catalogId);\n ProductComparisonState.instance(this.props.context.request, this.props.data.accountInformation?.result).addItem(item);\n };\n\n /**\n * Removes current product from the product comparison list where it was added earlier.\n */\n private readonly _removeFromProductComparison: () => void = () => {\n ProductComparisonState.instance(this.props.context.request, this.props.data.accountInformation?.result).removeItemById(\n this.state.comparisonItemId\n );\n };\n\n private _getProdutComparisonDataByCatalogId(): ProductComparisonItem[] {\n const items = ProductComparisonState.instance(this.props.context.request, this.props.data.accountInformation?.result).items;\n const catalogId = getCatalogId(this.props.context.request);\n const productByCatalogId = items?.filter(product => product.catalogId === catalogId) ?? [];\n return productByCatalogId;\n }\n\n /**\n * Retrieves the state of the component based on the comparison data.\n * @returns State object for the component.\n */\n private readonly _getNewState: () => IProductComparisonButtonState = () => {\n const comparisonItemId = ProductComparisonItem.getItemId(this.props.product.RecordId, this.props.catalogId);\n const products = this._getProdutComparisonDataByCatalogId();\n return {\n comparisonItemId,\n canProductBeAddedToProductComparison: !ProductComparisonState.instance(\n this.props.context.request,\n this.props.data.accountInformation?.result\n ).hasItemById(comparisonItemId),\n currentProductsCount: products.length\n };\n };\n}\n\nexport default ProductComparisonButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\nimport { isOboRequest } from '@msdyn365-commerce/core-internal';\nimport { IMsdyn365PvaChatConnectorData } from './msdyn365-pva-chat-connector.data';\nimport { IMsdyn365PvaChatConnectorConfig, IMsdyn365PvaChatConnectorProps } from './msdyn365-pva-chat-connector.props.autogenerated';\n\nexport interface IPvaChatConnectorViewProps extends IMsdyn365PvaChatConnectorProps {\n config: IMsdyn365PvaChatConnectorConfig;\n}\n\n/**\n * PvaChatConnector component\n * @extends {React.PureComponent>}\n */\nclass PvaChatConnector extends React.PureComponent> {\n // Loads CDN version of Botframework-Webchat library\n public componentDidMount(): void {\n if (isOboRequest(this.props.context.request)) {\n return;\n }\n\n const url = this.props.config.botFrameworkCDNURL || this.props.context.app.config.pvaChatConnectorBotFrameworkCDNURL;\n const script = document.createElement('script');\n script.src = url;\n script.async = true;\n script.crossOrigin = 'anonymous';\n document.body.appendChild(script);\n }\n\n public render(): JSX.Element | null {\n if (isOboRequest(this.props.context.request)) {\n return null;\n }\n\n return this.props.renderView(this.props);\n }\n}\n\nexport default PvaChatConnector;\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { IGroup, IGroupDelivery, IGroups, IHeader, IList, IOrderHistoryViewProps, IOrderInformation, ISalesOrder } from '@msdyn365-commerce-modules/order-management';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport const OrderHistoryOrderInfomation: React.FC = ({\r\n orderInformationProps,\r\n salesId,\r\n receiptId,\r\n channelName,\r\n createdDate,\r\n count,\r\n amount\r\n // channelReferenceId\r\n}) => (\r\n \r\n {channelName}\r\n {salesId}\r\n {receiptId}\r\n {createdDate}\r\n {count}\r\n {amount}\r\n {/* {channelReferenceId} */}\r\n \r\n);\r\n\r\nexport const OrderHistoryGroupDelivery: React.FC = ({ deliveryProps, heading, count, processing, address, trackingInfo }) => (\r\n \r\n {heading}\r\n {count}\r\n {processing}\r\n {address}\r\n {trackingInfo}\r\n \r\n);\r\n\r\nexport const OrderHistoryGroup: React.FC = ({ groupProps, delivery, salesLinesProps, salesLines }) => (\r\n \r\n {salesLines && (\r\n \r\n {salesLines.map(salesLine => (\r\n \r\n {salesLine.salesLine}\r\n \r\n ))}\r\n \r\n )}\r\n \r\n);\r\n\r\nexport const OrderHistoryGroups: React.FC = ({ groupsProps, groups }) => (\r\n \r\n {groups.map((group, index) => (\r\n \r\n ))}\r\n \r\n);\r\n\r\nexport const OrderHistoryHeader: React.FC = ({ headerProps, heading, orderCountLabel, extraActions }) => (\r\n \r\n {heading}\r\n {orderCountLabel}\r\n {extraActions}\r\n \r\n);\r\n\r\nexport const OrderHistorySalesOder: React.FC = ({ salesOrderProps, orderInfomation, groups, orderDetailsLink, expandProductsButton }) => (\r\n \r\n {orderInfomation && }\r\n {groups && }\r\n {expandProductsButton}\r\n {orderDetailsLink}\r\n \r\n);\r\n\r\nexport const OrderHistoryList: React.FC = ({ listProps, salesOrders }) => (\r\n \r\n {salesOrders && salesOrders.map((salesOrder, index) => )}\r\n \r\n);\r\n\r\nconst OrderHistoryView: React.FC = ({\r\n orderHistoryProps,\r\n header,\r\n alert,\r\n loading,\r\n emptyMessage,\r\n backToShoppingLink,\r\n list,\r\n table,\r\n moreButton\r\n}) => (\r\n \r\n {header && }\r\n {loading}\r\n {alert && (\r\n <>\r\n {alert}\r\n {backToShoppingLink}\r\n \r\n )}\r\n {emptyMessage && (\r\n \r\n {emptyMessage}\r\n {backToShoppingLink}\r\n \r\n )}\r\n {list && }\r\n {table}\r\n {moreButton && moreButton}\r\n \r\n);\r\n\r\nexport default OrderHistoryView;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ILoyaltyTermsViewProps } from './loyalty-terms';\n\nconst LoyaltyTermsView: React.FC = props => {\n const { LoyaltyTerms, modalToggle, modal, loading } = props;\n\n return !loading && modal ? (\n \n {modalToggle}\n \n {modal.heading}\n \n {modal.terms}\n \n {modal.checkbox}\n {modal.agreeText}\n \n \n \n {modal.submitButton}\n {modal.cancelButton}\n \n \n \n ) : null;\n};\n\nexport default LoyaltyTermsView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IProductComparisonButtonViewProps } from './product-comparison-button';\n\n/**\n * Represents product comparison button view.\n * @param props - View props for product comparison button.\n * @returns Functional component of product comparison button.\n */\nexport const ProductComparisonButtonViewFunctionalComponent: React.FC = props => {\n const { productComparisonButton, productComparisonPreview } = props;\n\n return (\n \n {productComparisonButton}\n {productComparisonPreview}\n \n );\n};\n\nexport default ProductComparisonButtonViewFunctionalComponent;\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { ICheckoutSectionContainerItem, ICheckoutSectionContainerViewProps } from '@msdyn365-commerce-modules/checkout/src/modules/checkout-section-container/./checkout-section-container';\r\n\r\nconst ItemComponent: React.FC = ({ loading, itemProps, item }) => (\r\n <>\r\n {loading}\r\n \r\n {item}\r\n \r\n \r\n);\r\n\r\nconst CheckoutSectionContainerView: React.FC = ({ checkoutPlainContainerProps, items }) => {\r\n return(\r\n \r\n {items.map(item => {\r\n // remove the hidden classname that is given in the checkout-section-container\r\n item.itemProps = { ...item.itemProps,\r\n className: 'ms-checkout-section-container__item'\r\n }\r\n return \r\n })}\r\n \r\n )\r\n};\r\n\r\nexport default CheckoutSectionContainerView;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IFooterViewProps } from '@msdyn365-commerce-modules/footer';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\n/**\n *\n * FooterItemView component.\n * @extends {React.PureComponent}\n */\nexport class FooterItemView extends React.PureComponent {\n public render(): JSX.Element | null {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Cannot change the prop names as props are from business logic.\n const { FooterItem } = this.props;\n return {this._renderElement(this.props)};\n }\n\n private _renderElement(props: IFooterViewProps): React.ReactNode | null {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Cannot change the prop names as props are from business logic.\n const { heading, HeadingContainer, Link, linkText, image, text, EditableLink } = props;\n if (heading) {\n return (\n \n {' '}\n \n );\n } else if (Link && image) {\n return (\n \n {linkText}\n {image}\n \n );\n } else if (Link) {\n return EditableLink;\n }\n return (\n <>\n {text}\n {image}\n \n );\n }\n}\n\nexport default FooterItemView;\n"],"sourceRoot":""}