{"version":3,"sources":["webpack:///./src/themes/enoteca/views/checkout.view.tsx?f262","webpack:///./src/themes/erath/views/checkout.view.tsx?3db3","webpack:///./src/themes/elicit/views/checkout.view.tsx?7a08","webpack:///./src/themes/columbiacrest/views/checkout.view.tsx?2a1b","webpack:///./src/themes/blend/views/checkout.view.tsx?e65d","webpack:///./src/modules/sort-and-filter-container/sort-and-filter-container.tsx?0bd0","webpack:///./src/themes/emp/views/checkout.view.tsx?ae34","webpack:///./src/themes/elicit/views/smwe-navigation-menu.view.tsx?8f1a","webpack:///./src/modules/smwe-navigation-menu/smwe-navigation-menu.props.autogenerated.ts?208d","webpack:///./src/modules/smwe-navigation-menu/smwe-navigation-menu.tsx?d557","webpack:///src/modules/sign-in/sign-in.view.tsx?a753","webpack:///./src/themes/intrinsic-wine-co/views/checkout.view.tsx?a1b2","webpack:///./src/themes/stagsleap/views/checkout.view.tsx?957f","webpack:///./src/themes/stemichelle/views/smwe-navigation-menu.view.tsx?3d07","webpack:///src/modules/account-customer-balance-tile/account-customer-balance-tile.view.tsx?955a","webpack:///./src/themes/generazioni/views/checkout.view.tsx?4f16","webpack:///src/modules/fabrikam/views/search-result-container.view.tsx?f8ea","webpack:///./src/Utilities/brand-code-parser.tsx?0b81","webpack:///./src/themes/patzhall/views/checkout.view.tsx?0447","webpack:///src/modules/sign-in/components/sign-in-button.tsx?a9cc","webpack:///src/modules/sign-in/components/sign-in-description.tsx?196e","webpack:///src/modules/sign-in/components/sign-in-error.tsx?2f11","webpack:///src/modules/sign-in/components/sign-in-input.tsx?eb41","webpack:///src/modules/sign-in/components/sign-in-label.tsx?d42c","webpack:///src/modules/sign-in/components/sign-in-link.tsx?fc9f","webpack:///src/modules/sign-in/components/sign-in-loading-icon.tsx?3d5a","webpack:///src/modules/sign-in/components/sign-in-loading-message.tsx?7f4d","webpack:///src/modules/sign-in/components/sign-in-text.tsx?92d7","webpack:///src/modules/sign-in/sign-in.tsx?44ed","webpack:///./src/themes/blend/views/smwe-navigation-menu.view.tsx?3752","webpack:///src/modules/account-customer-balance-tile/components/account-customer-balance-tile-info.tsx?a91f","webpack:///src/modules/account-customer-balance-tile/components/account-customer-balance-tile-links.tsx?5f47","webpack:///src/modules/account-customer-balance-tile/account-customer-balance-tile.tsx?9383","webpack:///./src/modules/smwe-navigation-menu/smwe-navigation-menu.view.tsx?af3c","webpack:///src/modules/fabrikam/views/header.view.tsx?1cde","webpack:///./src/themes/stemichelle/views/checkout.view.tsx?1921","webpack:///./src/themes/conn-creek/views/checkout.view.tsx?0cdd","webpack:///src/modules/loyalty-terms/components/loyalty-terms-modal.tsx?c84d","webpack:///src/modules/loyalty-terms/loyalty-terms.tsx?0629","webpack:///./src/themes/patzhall/views/smwe-navigation-menu.view.tsx?57a5","webpack:///./src/themes/north-star/views/checkout.view.tsx?e95c","webpack:///./src/themes/fth-old/views/checkout.view.tsx?a1d3","webpack:///./src/themes/stagsleap/views/smwe-navigation-menu.view.tsx?da1d","webpack:///src/modules/account-loyalty/components/account-loyalty-small-components.tsx?9694","webpack:///src/modules/account-loyalty/account-loyalty.tsx?82db","webpack:///./src/themes/smwe/views/smwe-navigation-menu.view.tsx?48d2","webpack:///./src/themes/h3-theme/views/smwe-navigation-menu.view.tsx?25c1","webpack:///./src/themes/spring-valley-vineyard/views/checkout.view.tsx?0704","webpack:///src/modules/loyalty-terms/loyalty-terms.view.tsx?5155","webpack:///./src/themes/colsolare/views/checkout.view.tsx?066d","webpack:///src/modules/account-loyalty/account-loyalty.view.tsx?06f4","webpack:///./src/themes/stemichelle-new/views/smwe-navigation-menu.view.tsx?9e1e","webpack:///./src/themes/fth/views/smwe-navigation-menu.view.tsx?5fe5"],"names":["PickUpAtStoreComponent","PickUpAtStore","label","location","React","Node","Object","LineItemComponent","LineItem","item","pickUpAtStore","LineItemGroupComponent","LineItemDeliveryGroup","LineItemList","heading","lineItems","map","lineItem","key","LineId","LineItemsComponent","LineItems","Header","editLink","itemsForPickup","itemsForShip","OrderSummaryComponent","lines","className","subtotal","shipping","tax","totalDiscounts","loyalty","giftCard","orderTotal","CheckoutView","props","canShow","checkoutProps","headerProps","bodyProps","mainProps","mainControlProps","sideProps","sideControlFirstProps","sideControlSecondProps","loading","alert","title","guidedForm","orderSummary","placeOrderButton","keepShoppingButton","Module","line","cartItem","context","brandCode","brandCodeParser","description","Description","appContext","group","data","checkout","result","checkoutCart","cart","CartLines","find","SortAndFilterContainer","constructor","super","this","_viewport","_modalExampleBtn","_toggleModal","bind","_updateViewport","state","modalIsOpen","componentDidMount","window","addEventListener","componentWillUnmount","removeEventListener","render","isMobile","_renderMobile","_renderDesktop","slots","classname","config","refineMenu","choiceSummary","sorting","products","resources","Button","innerRef","onClick","color","mobileModalTitle","Modal","autoFocus","fade","applicationNode","returnFocusRef","isOpen","toggle","horizontalPosition","verticalPosition","modalClassName","zIndex","ModalHeader","ModalBody","ModalFooter","mobileModalCloseButtonText","setState","_getViewport","request","device","Type","undefined","innerWidth","gridSettings","xs","w","sm","md","lg","__decorate","observable","computed","observer","NavigationMenuView","supportedLevel","currentLevel","pathName","activeClassName","activeMenuItem","activeSubMenuItem","_mainNavClick","option","link","linkURL","href","_handleDropdownToggle","parentId","activeMenu","isMobileView","id","parentMenu","_resetFocus","setTimeout","menuNode","current","focus","_handleClickOutside","event","burgerMenu","target","contains","navOpen","mobileViewLabelText","_closeSubmenu","_onMobNavTrigger","document","body","MenuList","Navigation","pathname","menuItemData","forEach","index","linkText","toLowerCase","hiddenUrl","subMenu","length","hiddenSubMenuItem","_removeSubItem","ItemPath","_getPathNameFromURL","subItem","subIndex","classnames","ref","role","_renderDisplay","subMenuArray","subItemToRemove","i","splice","URL","split","ListItem","menuItemList","push","onMouseLeave","_createMenuItemList","_renderButtonMenuItem","_renderSubMenu","_renderLinkMenuItem","_renderSpanMenuItem","subMenus","levelClassName","menuOptions","idx","hasOptions","menuItem","toString","_renderMenu","isActive","activeClass","onMouseEnter","onFocus","Link","Span","level","currentItem","navigationMenuSource","alignment","NavigationMenu","isRetail","isCMS","_formatLinkData","path","destinationUrl","url","requestUrl","_setNavigationSource","sourceType","retailServerOnly","cmsOnly","all","viewport","locale","nameTranslations","nameTranslation","Language","Text","resizeThrottledEventHandler","addThrottledEvent","_mapData","isEmptyOrNullObject","telemetry","error","viewProps","imageSettings","viewports","q","h","xl","lazyload","moduleProps","tag","menuAriaLabel","ImageContainer","MobileDescriptionContainer","MobileBackButton","backButtonAriaLabel","MobileDescriptionLabel","renderView","retailServerNavItems","mergedData","navigationmenu","categories","filter","x","Children","retailServerMainMenu","hiddenRetailMenuItems","hiddenItemsArray","trim","fetchedRetailMenuItems","navItem","RecordId","Name","_injectCmsMenu","cmsRetailItemMenu","topLvlCategory","Url","overrideServerName","topLvlCategoryText","_constructMenuItemData","cmsNavItems","sliceIndex","_swapArrayPos","categoryMenu","cmsMenu","menu","cmsMenuSort","sort","first","second","idGenerator","_isInMenu","Math","max","ClassName","altStyle","linkUrl","NameTranslations","category","oldIndex","newIndex","k","_constructMenuItemFromRetailItem","retailItem","RSItemIdInit","getFriendlyName","_getNestedChildren","cmsItem","CMSItemIdInit","imageDestinationURL","imageLink","imageSource","image","src","_getCMSNestedChildren","nestedChildren","hideRetailAllMenu","allCategoryMenuText","getCategoryUrl","SignInLoading","modal","modalBody","icon","message","SignInView","signIn","viewState","defaultAADConainer","aadConainer","signInSection","signUpSection","signInSectionHeading","signInLocalAccount","signInSocialAccount","signUpSectionHeading","signUpDescription","signUpLink","isShowLoading","localAccount","items","forgetPassword","disclaimer","signInButton","wrapper","input","LocalAccount","socialAccounts","button","text","SocialAccount","AccountCustomerBalanceTileView","AccountCustomerBalanceTile","content","links","createSearchResultModal","modalProps","sortByDropDown","modalHeader","createModalBody","modalFooter","renderSort","renderRefiner","refiners","RefineMenuContainer","RefinerSectionContainer","submenu","SortingContainer","renderCategoryHierarchy","CategoryHierarchyContainer","categoryHierarchyList","categoryHierarchySeparator","renderTitle","TitleContainer","titlePrefix","titleText","titleCount","SearchResultContainerView","SearchResultContainer","pagination","ProductsContainer","ProductSectionContainer","modalToggle","searchResultModal","TitleViewProps","categoryHierarchy","sortByOptions","CategoryNavContainer","RefineAndProductSectionContainer","errorMessage","FeatureSearchContainer","similarLookProduct","brandCodeTable","app","currentBrandCode","slice","brandFound","brand","brandName","SignInButton","ariaLabel","telemetryContent","disabled","payLoad","getPayloadObject","attributes","getTelemetryAttributes","SignInDescription","SignInError","type","errorClassName","GetMaxLength","maxLength","parsedMaxLength","parseInt","isNaN","SignInInput","value","pattern","onChange","SignInLabel","forId","htmlFor","SignInLink","SignInLoadingIcon","SignInLoadingMessage","SignInText","SignIn","moduleClassName","handleParagraphChange","signInDisclaimer","handleSignInHeadingChange","signInHeading","handleSignUpHeadingChange","signUpHeading","_onInit","_prePopulateData","_updateErrorMessage","initializationTimer","setInterval","_isInitializationSuccessful","clearInterval","isInitialized","emailRegex","emailId","SA_FIELDS","AttributeFields","ID","errorMessages","requiredField_email","requriedEmailError","requiredField_password","requriedPasswordError","invalid_email","invalidEmailError","invalid_password","invalidPasswordError","unknown_error","unknownError","assign","getTelemetryObject","telemetryPageName","friendlyName","componentDidUpdate","SignInLoadingIconComponent","SignInLoadingMessageComponent","loadingMessage","style","display","Msdyn365","editProps","onEdit","requestContext","_renderInput","emailAddressLabelText","emailAddressAriaLabel","passwordLabelText","passwordAriaLabel","SignInLinkComponent","forgotPasswordButtonAriaLabel","forgotPasswordButtonText","SignInErrorComponent","SignInButtonComponent","loginButtonAriaLabel","loginButtonText","_renderSocialAccount","facebookButtonText","facebookButtonAriaLabel","facebookIcon","microsoftButtonText","microsoftButtonAriaLabel","microsoftIcon","SignInDescriptionComponent","signUpDescriptionText","signUpButtonAriaLabel","signUpButtonText","labelText","SignInLabelComponent","SignInInputComponent","iconImage","_createImageMarkup","SignInTextComponent","imageProps","ErrorComponent","CreditComponent","verbagePrefix","verbagePostfix","_mapEditableLinks","linkdata","editableLinks","contentAction","etext","editableLink","openInNewTab","additionalProperties","AccountCustomerBalanceTileLinks","onTextChange","_initState","reaction","hasError","apiGenericErrorMessage","get","customerResult","allowOnAccountPayment","AllowOnAccountPayment","isB2BCustomer","IsB2B","enableCustomerAccountPayment","isCustomerAccountPaymentEnabled","Heading","headingTag","isDetailsLinkDisplayed","LinksComponent","account","Balance","CreditLimit","noCreditErrorMessage","accountCreditVerbagePrefix","accountCreditVerbagePostfix","currencyCode","formatCurrency","customerBalanceFormatted","toFixed","renderCustomerName","accountInformation","customer","FirstName","_renderReactFragment","slot","headerView","HeaderTag","HeaderContainer","HeaderTopBarContainer","Divider","navIcon","logo","search","preferredStore","renderForMobile","AccountInfoDropdownParentContainer","AccountInfoDropdownPopoverConentContainer","accountInfoDropdownButton","signOutLink","signInLink","accountLinks","accountClassName","_renderAccountBlock","wishListIconDesktop","cartIcon","siteOptions","MobileMenuLinksContainer","mobileMenuCollapsed","Collapse","Drawer","openGlyph","closeGlyph","glyphPlacement","toggleButtonText","_renderMobileAccountBlock","wishListIconMobile","menuBar","_renderCollapseMenu","LoyaltyTermsModal","TelemetryConstant","LoyaltyTermsCancel","loyaltyTermCancelAttributes","LoyaltyTermsSubmit","loyaltyTermSubmitAttributes","LoyaltyTermsAgree","loyaltyTermCheckboxAttributes","onToggle","returnRef","cancelButton","cancelLoyaltyTermsText","submitButton","onSubmit","checked","joinLoyaltyTermsText","loyaltyTermsHeading","terms","agreeSection","checkbox","onCheck","agreeText","loyaltyAgreeToTerms","LoyaltyTerms","_toggle","_submit","_checkboxChecked","toggleRef","isJoining","substring","qsps","splitQsp","isModalOpen","clicked","hideToggle","serviceTerms","loyaltyCard","user","isAuthenticated","completeClass","status","joinLoyaltytermsToggleText","CardNumber","IssueLoyaltyInput","apiSettings","issueLoyalty","actionContext","then","card","redirectToLoyalty","getUrlSync","getLoyaltyCardAsync","callerContext","fullCard","update","GetLoyaltyCardInput","catch","debug","_handleFocus","onMouseDown","AccountLoyaltyLabel","AccountLoyaltyModalLabel","labelFor","AccountLoyalty","handleHeadingChange","_populateModalData","focusRef","currentLoyaltyPoints","expiring","RewardPointId","currentModalData","isModalExpiring","modalID","currentFocus","getLoyaltyRewardPointsExpiringSoonAsync","queryResultSettings","points","pointsActivity","exception","getLoyaltyRewardPointActivityTimelineAsync","_closeModal","_buttonAvailableRef","_buttonExpireRef","BackToShopping","loyaltyCardLabel","totalAvailablePointsLabel","backToShoppingText","backToShopAttributes","loyaltyCardData","rewardPoints","RewardPoints","homeLink","totalPoints","_getTotalPoints","_renderRewardPoints","pointsModal","_renderModal","Info","Points","Breakdown","PointsBreakdown","infoLabel","cardNumber","joinDate","_formatJoinDate","_parseDate","LoyaltyEnrollmentDateLocal","pointsLabel","homeButton","date","format","joinDateFormatted","Intl","DateTimeFormat","month","day","year","Date","loyaltyPoints","availableId","expiringId","availablePointsLabel","expiringPointsFormatLabel","AvailablePoints","availablePointsAttributes","ExpiringPoints","expiringPointsAttributes","availableModalLabel","ActivePoints","availableModalTrigger","expiringModalLabel","PointsExpiringSoon","expiringModalTrigger","loyaltyActivityDateLabel","loyaltyActivityBalanceLabel","modalHeaderClassName","modalBodyClassName","ModalBodyTop","ModalBodyHeaders","rewardPointsActivity","_renderPointsActivity","pointsDescription","_getPoints","balanceLabel","onClose","total","activity","Activity","activityType","_getTimelineType","activityDate","cultureFormatter","formatDate","ActivityDate","activityPoints","LoyaltyPoints","dateString","replace","getUTCFullYear","getUTCMonth","getUTCDate","pointActivity","LoyaltyRewardPointTimelineEntryType","earnedPointsLabel","redeemedPointsLabel","adjustedPointsLabel","refundedPointsLabel","ExtensibleLoyaltyRewardPointActivityEntryTypeValue","expandOnClick","openSubmenuItemsNewTab","includes","rel","_renderSubNavButton","openSubmenuItemsNewTabArray","alt","LoyaltyTermsView","AccountLoyaltyView","onClosed","_addFixedBodyPosition","_removeFixedBodyPosition","_onMobNavOpen","_onMobNavClose","getElementById","firstNavItem","classList","add","remove"],"mappings":"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","file":"static/js/15.8dfc407fb5531b71e0ad.chunk.js","sourcesContent":["/*---------------------------------------------------------------------------------------------\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 {\r\n ICheckoutViewProps,\r\n ILineItem,\r\n ILineItemDeliveryGroup,\r\n ILineItems,\r\n IOrderSummary,\r\n IPickUpAtStore\r\n} from '@msdyn365-commerce-modules/checkout/dist/types';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport const PickUpAtStoreComponent: React.FC = ({ PickUpAtStore, label, location }) => (\r\n \r\n {label}\r\n {location}\r\n \r\n);\r\n\r\nexport const LineItemComponent: React.FC = ({ LineItem, item, pickUpAtStore }) => (\r\n \r\n {item}\r\n {pickUpAtStore && }\r\n \r\n);\r\n\r\nexport const LineItemGroupComponent: React.FC = ({ LineItemDeliveryGroup, LineItemList, heading, lineItems }) => (\r\n \r\n {heading}\r\n \r\n {lineItems.map(lineItem => (\r\n \r\n ))}\r\n \r\n \r\n);\r\n\r\nexport const LineItemsComponent: React.FC = ({ LineItems, Header, heading, editLink, itemsForPickup, itemsForShip }) => (\r\n \r\n \r\n {heading}\r\n {editLink}\r\n \r\n {itemsForPickup && }\r\n {itemsForShip && }\r\n \r\n);\r\n\r\nconst OrderSummaryComponent: React.FC = ({ heading, lines }) => (\r\n\r\n
\r\n {heading}\r\n
\r\n {lines && (\r\n <>\r\n {lines.subtotal}\r\n {lines.shipping}\r\n {lines.tax}\r\n {lines.totalDiscounts}\r\n {lines.loyalty}\r\n {lines.giftCard}\r\n {lines.orderTotal}\r\n \r\n )}\r\n
\r\n
\r\n);\r\n\r\nconst CheckoutView: React.FC = props => {\r\n const {\r\n canShow,\r\n checkoutProps,\r\n headerProps,\r\n bodyProps,\r\n mainProps,\r\n mainControlProps,\r\n sideProps,\r\n sideControlFirstProps,\r\n sideControlSecondProps,\r\n loading,\r\n alert,\r\n title,\r\n guidedForm,\r\n orderSummary,\r\n lineItems,\r\n placeOrderButton,\r\n keepShoppingButton\r\n } = props;\r\n\r\n return (\r\n \r\n {title}\r\n \r\n {loading}\r\n {alert}\r\n {canShow && (\r\n <>\r\n \r\n {guidedForm}\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n {orderSummary && }\r\n \r\n {/* {placeOrderButton}\r\n {keepShoppingButton} */}\r\n \r\n {lineItems && }\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default CheckoutView;\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 {\r\n ICheckoutViewProps,\r\n ILineItem,\r\n ILineItemDeliveryGroup,\r\n ILineItems,\r\n IOrderSummary,\r\n IPickUpAtStore\r\n} from '@msdyn365-commerce-modules/checkout/dist/types';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport const PickUpAtStoreComponent: React.FC = ({ PickUpAtStore, label, location }) => (\r\n \r\n {label}\r\n {location}\r\n \r\n);\r\n\r\nexport const LineItemComponent: React.FC = ({ LineItem, item, pickUpAtStore }) => (\r\n \r\n {item}\r\n {pickUpAtStore && }\r\n \r\n);\r\n\r\nexport const LineItemGroupComponent: React.FC = ({ LineItemDeliveryGroup, LineItemList, heading, lineItems }) => (\r\n \r\n {heading}\r\n \r\n {lineItems.map(lineItem => (\r\n \r\n ))}\r\n \r\n \r\n);\r\n\r\nexport const LineItemsComponent: React.FC = ({ LineItems, Header, heading, editLink, itemsForPickup, itemsForShip }) => (\r\n \r\n \r\n {heading}\r\n {editLink}\r\n \r\n {itemsForPickup && }\r\n {itemsForShip && }\r\n \r\n);\r\n\r\nconst OrderSummaryComponent: React.FC = ({ heading, lines }) => (\r\n\r\n
\r\n {heading}\r\n
\r\n {lines && (\r\n <>\r\n {lines.subtotal}\r\n {lines.shipping}\r\n {lines.tax}\r\n {lines.totalDiscounts}\r\n {lines.loyalty}\r\n {lines.giftCard}\r\n {lines.orderTotal}\r\n \r\n )}\r\n
\r\n
\r\n);\r\n\r\nconst CheckoutView: React.FC = props => {\r\n const {\r\n canShow,\r\n checkoutProps,\r\n headerProps,\r\n bodyProps,\r\n mainProps,\r\n mainControlProps,\r\n sideProps,\r\n sideControlFirstProps,\r\n sideControlSecondProps,\r\n loading,\r\n alert,\r\n title,\r\n guidedForm,\r\n orderSummary,\r\n lineItems,\r\n placeOrderButton,\r\n keepShoppingButton\r\n } = props;\r\n\r\n return (\r\n \r\n {title}\r\n \r\n {loading}\r\n {alert}\r\n {canShow && (\r\n <>\r\n \r\n {guidedForm}\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n {orderSummary && }\r\n \r\n {/* {placeOrderButton}\r\n {keepShoppingButton} */}\r\n \r\n {lineItems && }\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default CheckoutView;\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 { ICheckoutData, ICheckoutViewProps, ILineItem, ILineItemDeliveryGroup, ILineItems, IOrderSummary, IPickUpAtStore } from '@msdyn365-commerce-modules/checkout';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport { ICoreContext } from '@msdyn365-commerce/core-internal';\r\nimport { CartLine } from '@msdyn365-commerce/retail-proxy';\r\nimport * as React from 'react';\r\nimport { brandCodeParser } from '../../../Utilities/brand-code-parser';\r\n\r\nexport const PickUpAtStoreComponent: React.FC = ({ PickUpAtStore, label, location }) => (\r\n \r\n {label}\r\n {location}\r\n \r\n);\r\n\r\nexport const LineItemComponent: React.FC<{ line: ILineItem; cartItem?: CartLine; context: ICoreContext }> = ({ line: { LineItem, item, pickUpAtStore }, cartItem, context }) => {\r\n let brandCode: string = '';\r\n if (cartItem) {\r\n brandCode = brandCodeParser({ description: cartItem.Description, appContext: context });\r\n }\r\n return (\r\n \r\n {brandCode &&
{brandCode}
}\r\n {item}\r\n {pickUpAtStore && }\r\n
\r\n );\r\n};\r\n\r\nexport const LineItemGroupComponent: React.FC<{ group: ILineItemDeliveryGroup; data: ICheckoutData; context: ICoreContext }> = ({ group: { LineItemDeliveryGroup, LineItemList, heading, lineItems }, data, context }) => (\r\n \r\n {heading}\r\n \r\n {lineItems.map(lineItem => {\r\n // get the item and send it to the component\r\n const item = data.checkout.result?.checkoutCart.cart.CartLines?.find(cartItem => cartItem.LineId === lineItem.LineId);\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n);\r\n\r\nexport const LineItemsComponent: React.FC<{ lineItems: ILineItems; data: ICheckoutData; context: ICoreContext }> = ({ lineItems: { LineItems, Header, heading, editLink, itemsForPickup, itemsForShip }, data, context }) => (\r\n \r\n \r\n {heading}\r\n {editLink}\r\n \r\n {itemsForPickup && }\r\n {itemsForShip && }\r\n \r\n);\r\n\r\nconst OrderSummaryComponent: React.FC = ({ heading, lines }) => (\r\n
\r\n {heading}\r\n
\r\n {lines && (\r\n <>\r\n {lines.subtotal}\r\n {lines.shipping}\r\n {lines.tax}\r\n {lines.totalDiscounts}\r\n {lines.loyalty}\r\n {lines.giftCard}\r\n {lines.orderTotal}\r\n \r\n )}\r\n
\r\n
\r\n);\r\n\r\nconst CheckoutView: React.FC = props => {\r\n const {\r\n canShow,\r\n checkoutProps,\r\n mainProps,\r\n mainControlProps,\r\n sideProps,\r\n loading,\r\n alert,\r\n guidedForm,\r\n orderSummary,\r\n lineItems,\r\n placeOrderButton,\r\n data,\r\n context\r\n } = props;\r\n return (\r\n \r\n {loading}\r\n {alert}\r\n {canShow && (\r\n <>\r\n \r\n {guidedForm}\r\n \r\n {placeOrderButton}\r\n \r\n \r\n \r\n {orderSummary && }\r\n {lineItems && }\r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default CheckoutView;\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 {\r\n ICheckoutViewProps,\r\n ILineItem,\r\n ILineItemDeliveryGroup,\r\n ILineItems,\r\n IOrderSummary,\r\n IPickUpAtStore\r\n} from '@msdyn365-commerce-modules/checkout/dist/types';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport const PickUpAtStoreComponent: React.FC = ({ PickUpAtStore, label, location }) => (\r\n \r\n {label}\r\n {location}\r\n \r\n);\r\n\r\nexport const LineItemComponent: React.FC = ({ LineItem, item, pickUpAtStore }) => (\r\n \r\n {item}\r\n {pickUpAtStore && }\r\n \r\n);\r\n\r\nexport const LineItemGroupComponent: React.FC = ({ LineItemDeliveryGroup, LineItemList, heading, lineItems }) => (\r\n \r\n {heading}\r\n \r\n {lineItems.map(lineItem => (\r\n \r\n ))}\r\n \r\n \r\n);\r\n\r\nexport const LineItemsComponent: React.FC = ({ LineItems, Header, heading, editLink, itemsForPickup, itemsForShip }) => (\r\n \r\n \r\n {heading}\r\n {editLink}\r\n \r\n {itemsForPickup && }\r\n {itemsForShip && }\r\n \r\n);\r\n\r\nconst OrderSummaryComponent: React.FC = ({ heading, lines }) => (\r\n\r\n
\r\n {heading}\r\n
\r\n {lines && (\r\n <>\r\n {lines.subtotal}\r\n {lines.shipping}\r\n {lines.tax}\r\n {lines.totalDiscounts}\r\n {lines.loyalty}\r\n {lines.giftCard}\r\n {lines.orderTotal}\r\n \r\n )}\r\n
\r\n
\r\n);\r\n\r\nconst CheckoutView: React.FC = props => {\r\n const {\r\n canShow,\r\n checkoutProps,\r\n headerProps,\r\n bodyProps,\r\n mainProps,\r\n mainControlProps,\r\n sideProps,\r\n sideControlFirstProps,\r\n sideControlSecondProps,\r\n loading,\r\n alert,\r\n title,\r\n guidedForm,\r\n orderSummary,\r\n lineItems,\r\n placeOrderButton,\r\n keepShoppingButton\r\n } = props;\r\n\r\n return (\r\n \r\n {title}\r\n \r\n {loading}\r\n {alert}\r\n {canShow && (\r\n <>\r\n \r\n {guidedForm}\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n {orderSummary && }\r\n \r\n {/* {placeOrderButton}\r\n {keepShoppingButton} */}\r\n \r\n {lineItems && }\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default CheckoutView;\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 { ICheckoutData, ICheckoutViewProps, ILineItem, ILineItemDeliveryGroup, ILineItems, IOrderSummary, IPickUpAtStore } from '@msdyn365-commerce-modules/checkout';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport { ICoreContext } from '@msdyn365-commerce/core-internal';\r\nimport { CartLine } from '@msdyn365-commerce/retail-proxy';\r\nimport * as React from 'react';\r\nimport { brandCodeParser } from '../../../Utilities/brand-code-parser';\r\n\r\nexport const PickUpAtStoreComponent: React.FC = ({ PickUpAtStore, label, location }) => (\r\n \r\n {label}\r\n {location}\r\n \r\n);\r\n\r\nexport const LineItemComponent: React.FC<{ line: ILineItem; cartItem?: CartLine; context: ICoreContext }> = ({ line: { LineItem, item, pickUpAtStore }, cartItem, context }) => {\r\n let brandCode: string = '';\r\n if (cartItem) {\r\n brandCode = brandCodeParser({ description: cartItem.Description, appContext: context });\r\n }\r\n return (\r\n \r\n {brandCode &&
{brandCode}
}\r\n {item}\r\n {pickUpAtStore && }\r\n
\r\n );\r\n};\r\n\r\nexport const LineItemGroupComponent: React.FC<{ group: ILineItemDeliveryGroup; data: ICheckoutData; context: ICoreContext }> = ({ group: { LineItemDeliveryGroup, LineItemList, heading, lineItems }, data, context }) => (\r\n \r\n {heading}\r\n \r\n {lineItems.map(lineItem => {\r\n // get the item and send it to the component\r\n const item = data.checkout.result?.checkoutCart.cart.CartLines?.find(cartItem => cartItem.LineId === lineItem.LineId);\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n);\r\n\r\nexport const LineItemsComponent: React.FC<{ lineItems: ILineItems; data: ICheckoutData; context: ICoreContext }> = ({ lineItems: { LineItems, Header, heading, editLink, itemsForPickup, itemsForShip }, data, context }) => (\r\n \r\n \r\n {heading}\r\n {editLink}\r\n \r\n {itemsForPickup && }\r\n {itemsForShip && }\r\n \r\n);\r\n\r\nconst OrderSummaryComponent: React.FC = ({ heading, lines }) => (\r\n
\r\n {heading}\r\n
\r\n {lines && (\r\n <>\r\n {lines.subtotal}\r\n {lines.shipping}\r\n {lines.tax}\r\n {lines.totalDiscounts}\r\n {lines.loyalty}\r\n {lines.giftCard}\r\n {lines.orderTotal}\r\n \r\n )}\r\n
\r\n
\r\n);\r\n\r\nconst CheckoutView: React.FC = props => {\r\n const {\r\n canShow,\r\n checkoutProps,\r\n mainProps,\r\n mainControlProps,\r\n sideProps,\r\n loading,\r\n alert,\r\n guidedForm,\r\n orderSummary,\r\n lineItems,\r\n placeOrderButton,\r\n data,\r\n context\r\n } = props;\r\n return (\r\n \r\n {loading}\r\n {alert}\r\n {canShow && (\r\n <>\r\n \r\n {guidedForm}\r\n \r\n {placeOrderButton}\r\n \r\n \r\n \r\n {orderSummary && }\r\n {lineItems && }\r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default CheckoutView;\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 { Button, Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\r\nimport classname from 'classnames';\r\nimport { computed, observable } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport { ISortAndFilterContainerProps } from './sort-and-filter-container.props.autogenerated';\r\nimport { GridSize, ISortAndFilterContainerState } from './sort-and-filter-container.state';\r\n\r\n/**\r\n *\r\n * SortAndFilterContainer component.\r\n * @extends {React.Component, ISortAndFilterContainerState>}\r\n */\r\n@observer\r\nclass SortAndFilterContainer extends React.Component, ISortAndFilterContainerState> {\r\n @observable\r\n private _viewport: GridSize;\r\n\r\n private _modalExampleBtn: React.RefObject;\r\n\r\n constructor(props: ISortAndFilterContainerProps<{}>) {\r\n super(props);\r\n\r\n this._viewport = 'lg';\r\n this._modalExampleBtn = React.createRef();\r\n this._toggleModal = this._toggleModal.bind(this);\r\n this._updateViewport = this._updateViewport.bind(this);\r\n\r\n this.state = {\r\n modalIsOpen: false\r\n };\r\n }\r\n\r\n @computed get isMobile(): boolean {\r\n return (this._viewport === 'xs' || this._viewport === 'sm' || this._viewport === 'md');\r\n }\r\n\r\n public componentDidMount(): void {\r\n // tslint:disable-next-line: no-typeof-undefined\r\n if (typeof window !== 'undefined' && window.addEventListener) {\r\n window.addEventListener('resize', this._updateViewport);\r\n this._updateViewport();\r\n }\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n // tslint:disable-next-line: no-typeof-undefined\r\n if (typeof window !== 'undefined' && window.addEventListener) {\r\n window.removeEventListener('resize', this._updateViewport);\r\n }\r\n }\r\n\r\n /**\r\n * Renders both desktop and mobile versions of this container. The expectation is for the theme\r\n * to show/hide each based on viewport size.\r\n */\r\n public render(): JSX.Element {\r\n if (this.isMobile) {\r\n return this._renderMobile();\r\n }\r\n return this._renderDesktop();\r\n }\r\n\r\n private _renderDesktop(): JSX.Element {\r\n const { slots } = this.props;\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {slots.refineMenu}\r\n
\r\n
\r\n
\r\n
\r\n {slots.choiceSummary}\r\n
\r\n
\r\n {slots.sorting}\r\n
\r\n
\r\n
\r\n
\r\n {slots.products}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n private _renderMobile(): JSX.Element {\r\n const { slots, resources } = this.props;\r\n const { modalIsOpen } = this.state;\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {slots.choiceSummary}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {resources.mobileModalTitle}\r\n \r\n \r\n {resources.mobileModalTitle}\r\n \r\n
{slots.sorting}
\r\n
\r\n
{slots.refineMenu}
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n {slots.products}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n private _toggleModal(): void {\r\n this.setState({\r\n modalIsOpen: !this.state.modalIsOpen\r\n });\r\n }\r\n\r\n private _updateViewport(): void {\r\n this._viewport = this._getViewport();\r\n\r\n if (this.isMobile && this.state.modalIsOpen && !this.isMobile) {\r\n this._toggleModal();\r\n }\r\n }\r\n\r\n // TODO: if DCR 22025838 is approved then move this logic to SDK and reuse across Starter Kit modules\r\n private _getViewport(): GridSize {\r\n const { context } = this.props;\r\n\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 (typeof window !== undefined && 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 } else {\r\n return 'xl';\r\n }\r\n }\r\n }\r\n\r\n return 'xs';\r\n }\r\n}\r\n\r\nexport default SortAndFilterContainer;\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 { ICheckoutData, ICheckoutViewProps, ILineItem, ILineItemDeliveryGroup, ILineItems, IOrderSummary, IPickUpAtStore } from '@msdyn365-commerce-modules/checkout';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport { ICoreContext } from '@msdyn365-commerce/core-internal';\r\nimport { CartLine } from '@msdyn365-commerce/retail-proxy';\r\nimport * as React from 'react';\r\nimport { brandCodeParser } from '../../../Utilities/brand-code-parser';\r\n\r\nexport const PickUpAtStoreComponent: React.FC = ({ PickUpAtStore, label, location }) => (\r\n \r\n {label}\r\n {location}\r\n \r\n);\r\n\r\nexport const LineItemComponent: React.FC<{ line: ILineItem; cartItem?: CartLine; context: ICoreContext }> = ({ line: { LineItem, item, pickUpAtStore }, cartItem, context }) => {\r\n let brandCode: string = '';\r\n if (cartItem) {\r\n brandCode = brandCodeParser({ description: cartItem.Description, appContext: context });\r\n }\r\n return (\r\n \r\n {brandCode &&
{brandCode}
}\r\n {item}\r\n {pickUpAtStore && }\r\n
\r\n );\r\n};\r\n\r\nexport const LineItemGroupComponent: React.FC<{ group: ILineItemDeliveryGroup; data: ICheckoutData; context: ICoreContext }> = ({ group: { LineItemDeliveryGroup, LineItemList, heading, lineItems }, data, context }) => (\r\n \r\n {heading}\r\n \r\n {lineItems.map(lineItem => {\r\n // get the item and send it to the component\r\n const item = data.checkout.result?.checkoutCart.cart.CartLines?.find(cartItem => cartItem.LineId === lineItem.LineId);\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n);\r\n\r\nexport const LineItemsComponent: React.FC<{ lineItems: ILineItems; data: ICheckoutData; context: ICoreContext }> = ({ lineItems: { LineItems, Header, heading, editLink, itemsForPickup, itemsForShip }, data, context }) => (\r\n \r\n \r\n {heading}\r\n {editLink}\r\n \r\n {itemsForPickup && }\r\n {itemsForShip && }\r\n \r\n);\r\n\r\nconst OrderSummaryComponent: React.FC = ({ heading, lines }) => (\r\n
\r\n {heading}\r\n
\r\n {lines && (\r\n <>\r\n {lines.subtotal}\r\n {lines.shipping}\r\n {lines.tax}\r\n {lines.totalDiscounts}\r\n {lines.loyalty}\r\n {lines.giftCard}\r\n {lines.orderTotal}\r\n \r\n )}\r\n
\r\n
\r\n);\r\n\r\nconst CheckoutView: React.FC = props => {\r\n const {\r\n canShow,\r\n checkoutProps,\r\n headerProps,\r\n bodyProps,\r\n mainProps,\r\n mainControlProps,\r\n sideProps,\r\n sideControlFirstProps,\r\n sideControlSecondProps,\r\n loading,\r\n alert,\r\n title,\r\n guidedForm,\r\n orderSummary,\r\n lineItems,\r\n placeOrderButton,\r\n keepShoppingButton,\r\n data,\r\n context\r\n } = props;\r\n return (\r\n \r\n {title}\r\n \r\n {loading}\r\n {alert}\r\n {canShow && (\r\n <>\r\n \r\n {guidedForm}\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n {orderSummary && }\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n {lineItems && }\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default CheckoutView;\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 { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { INavigationMenuViewProps } from '../../../modules/smwe-navigation-menu/./smwe-navigation-menu';\r\nimport { IMenuItemData } from '../../../modules/smwe-navigation-menu/./smwe-navigation-menu.data';\r\nimport { ISmweNavigationMenuProps } from '../definition-extensions/smwe-navigation-menu.ext.props.autogenerated';\r\n\r\ninterface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n mobileViewLabelText?: string;\r\n navOpen: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenuView component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuView extends React.PureComponent, INavigationState> {\r\n private supportedLevel: number = 3;\r\n private currentLevel: number = 0;\r\n private menuNode: React.RefObject;\r\n private pathName: string = '';\r\n private activeClassName: string = 'selected';\r\n private activeMenuItem: IMenuItemData = {};\r\n private activeSubMenuItem: IMenuItemData = {};\r\n\r\n constructor(props: INavigationMenuViewProps & ISmweNavigationMenuProps<{}>) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.state = { activeMenu: undefined, mobileViewLabelText: '', parentMenu: undefined, navOpen: false };\r\n this._closeSubmenu = this._closeSubmenu.bind(this);\r\n this._onMobNavTrigger = this._onMobNavTrigger.bind(this);\r\n }\r\n\r\n public componentDidMount(): void {\r\n document.body && document.body.addEventListener('mousedown', this._handleClickOutside);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n document.body && document.body.removeEventListener('mousedown', this._handleClickOutside, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { isMobileView, MenuList, Navigation } = this.props;\r\n // get current pathname\r\n if (process.env.CURRENT_ENVIRONMENT === 'web') {\r\n this.pathName = window.location.pathname;\r\n } else {\r\n this.pathName = this.props.context.request.url.requestUrl.pathname;\r\n }\r\n\r\n this.props.menuItemData.forEach((item, index) => {\r\n if (item.linkText?.toLowerCase() === this.props.config.hiddenUrl?.toLowerCase()) {\r\n item.linkURL = '';\r\n }\r\n if (item.subMenu && item.subMenu.length > 0 && this.props.config.hiddenSubMenuItem) {\r\n this._removeSubItem(item.subMenu, this.props.config.hiddenSubMenuItem);\r\n }\r\n const ItemPath = this._getPathNameFromURL(item.linkURL || '');\r\n item.subMenu && item.subMenu.forEach((subItem, subIndex) => {\r\n const subItemPath = this._getPathNameFromURL(subItem.linkURL || '');\r\n if (subItemPath === this.pathName) {\r\n this.activeMenuItem = item;\r\n this.activeSubMenuItem = subItem;\r\n }\r\n });\r\n if (ItemPath === this.pathName) {\r\n this.activeMenuItem = item;\r\n }\r\n });\r\n\r\n this.currentLevel = 1;\r\n return (\r\n \r\n \r\n );\r\n }\r\n\r\n // helper function created to remove elements from navigation submenus\r\n private _removeSubItem(subMenuArray: IMenuItemData[], subItemToRemove: string): IMenuItemData[] {\r\n let i = 0;\r\n while (i < subMenuArray.length) {\r\n if (subMenuArray[i].linkText?.toLowerCase() === subItemToRemove.toLowerCase()) {\r\n subMenuArray.splice(i, 1);\r\n } else {\r\n ++i;\r\n }\r\n }\r\n return subMenuArray;\r\n }\r\n\r\n private _getPathNameFromURL(linkURL: string): string {\r\n let pathName = '';\r\n try {\r\n // if linkURL is a full url\r\n pathName = new URL(linkURL).pathname;\r\n } catch {\r\n pathName = linkURL.split('?')[0];\r\n }\r\n return pathName;\r\n }\r\n\r\n private _onMobNavTrigger(): void {\r\n this.setState(state => ({\r\n navOpen: !state.navOpen\r\n }));\r\n }\r\n\r\n private _renderDisplay(): JSX.Element[] {\r\n const { ListItem, menuItemData } = this.props;\r\n const menuItemList: JSX.Element[] = [];\r\n menuItemData.forEach((item: IMenuItemData, index: number) => {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n });\r\n return menuItemList;\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\r\n if (this.props.isMobileView) {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n \r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n } else {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n }\r\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\r\n return (this._renderLinkMenuItem(menuItemData));\r\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\r\n return (this._renderSpanMenuItem(menuItemData));\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number): JSX.Element | null {\r\n const { isMobileView, ListItem } = this.props;\r\n if (activeMenu && this.state.activeMenu !== activeMenu && !isMobileView) {\r\n return null;\r\n }\r\n\r\n if (!subMenus || subMenus.length === 0) {\r\n return null;\r\n }\r\n\r\n let levelClassName: string = '';\r\n const menuOptions = subMenus && subMenus.map((option: IMenuItemData, idx: number) => {\r\n const hasOptions = (option.subMenu && option.subMenu.length > 0);\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && isMobileView) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\r\n } else {\r\n menuItem = (option.linkURL\r\n ? this._renderLinkMenuItem(option, idx)\r\n : this._renderSpanMenuItem(option)\r\n );\r\n }\r\n\r\n let subMenu;\r\n\r\n if (hasOptions) {\r\n this.currentLevel++;\r\n if (this.currentLevel <= this.supportedLevel - 1) {\r\n levelClassName = `level-${this.currentLevel.toString()}`;\r\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined);\r\n }\r\n }\r\n\r\n return (\r\n \r\n {menuItem}\r\n {subMenu}\r\n \r\n );\r\n });\r\n\r\n return (this._renderMenu(levelClassName, menuOptions, activeMenu));\r\n }\r\n\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n const { Button } = this.props;\r\n const isActive = (option === this.activeMenuItem) || (option === this.activeSubMenuItem);\r\n const activeClass = `${Button.className} ${isActive ? this.activeClassName : ''}`;\r\n\r\n return (\r\n this._mainNavClick(option) : this._handleDropdownToggle(option, activeMenu)}\r\n onMouseEnter={!this.props.isMobileView ? this._handleDropdownToggle(option, activeMenu) : false}\r\n onFocus={!this.props.isMobileView ? this._handleDropdownToggle(option, activeMenu) : false}\r\n aria-haspopup={true}\r\n aria-expanded={this.state.activeMenu && this.state.activeMenu === option.id ? true : false}\r\n data-parent={activeMenu}\r\n >\r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _mainNavClick = (option: IMenuItemData) => {\r\n const link = option.linkURL;\r\n if (link) {\r\n window.location.href = link;\r\n }\r\n };\r\n\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Link } = this.props;\r\n const isActive = (option === this.activeSubMenuItem) || (option === this.activeMenuItem);\r\n const activeClass = `${Link.className} ${isActive ? this.activeClassName : ''}`;\r\n\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Span } = this.props;\r\n return (\r\n {option.linkText}\r\n );\r\n }\r\n\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number): JSX.Element | null {\r\n const { MenuList } = this.props;\r\n this.currentLevel = 1;\r\n return (\r\n \r\n {menuOptions}\r\n \r\n );\r\n }\r\n\r\n private _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n let activeMenu;\r\n if(this.props.isMobileView) {\r\n activeMenu = (this.state.activeMenu && this.state.activeMenu === data.id!) ? undefined : data.id!;\r\n } else {\r\n activeMenu = data.id;\r\n }\r\n this.setState({\r\n activeMenu,\r\n parentMenu: parentId\r\n });\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _resetFocus = () => {\r\n if (this.props.isMobileView) {\r\n setTimeout(() => {\r\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\r\n }, 0);\r\n }\r\n };\r\n\r\n // tslint:disable-next-line:no-any\r\n private _handleClickOutside = (event: any) => {\r\n const burgerMenu:boolean = event.target.className === 'ms-header__nav-icon msc-btn';\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.target) && !burgerMenu) {\r\n this.setState({ navOpen: false });\r\n }\r\n };\r\n\r\n private _closeSubmenu(): void {\r\n if (!this.props.isMobileView) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n }\r\n}\r\n\r\nexport default NavigationMenuView;","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * ISmweNavigationMenu contentModule Interface Properties\r\n * THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\n\r\nexport const enum navigationMenuSource {\r\n retailServerOnly = 'retailServerOnly',\r\n cmsOnly = 'cmsOnly',\r\n all = 'all'\r\n}\r\n\r\nexport const enum alignment {\r\n left = 'left',\r\n center = 'center',\r\n right = 'right'\r\n}\r\n\r\nexport interface ISmweNavigationMenuConfig extends Msdyn365.IModuleConfig {\r\n topLvlCategory?: Msdyn365.ILinkData;\r\n topLvlCategoryText?: string;\r\n navigationMenuSource?: navigationMenuSource;\r\n cmsNavItems?: ICmsNavItemsData[];\r\n className?: string;\r\n hideRetailAllMenu?: boolean;\r\n hiddenRetailMenuItems?: string;\r\n alignment?: alignment;\r\n sliceIndex?: number;\r\n cmsRetailItemMenu?: ICmsRetailItemMenuData;\r\n overFlowMenuText?: string;\r\n initialOverFlowMenuCount?: number;\r\n}\r\n\r\nexport interface ISmweNavigationMenuResources {\r\n menuAriaLabel: string;\r\n backButtonAriaLabel: string;\r\n allCategoryMenuText: string;\r\n}\r\n\r\nexport interface ICmsNavItemsData {\r\n linkText?: string;\r\n linkUrl?: Msdyn365.ILinkData;\r\n image?: Msdyn365.IImageData;\r\n imageLink?: Msdyn365.ILinkData;\r\n ariaLabel?: string;\r\n openInNewTab?: boolean;\r\n subMenus?: ISubMenusData[];\r\n}\r\n\r\nexport interface ICmsRetailItemMenuData {\r\n menu?: IMenuData[];\r\n}\r\n\r\nexport interface ISubMenusData {\r\n linkText?: string;\r\n linkUrl: Msdyn365.ILinkData;\r\n ariaLabel?: string;\r\n image?: Msdyn365.IImageData;\r\n imageLink?: Msdyn365.ILinkData;\r\n subMenus?: ISubMenusData[];\r\n}\r\n\r\nexport interface IMenuData {\r\n linkText?: string;\r\n linkUrl: Msdyn365.ILinkData;\r\n altStyle?: boolean;\r\n sliceIndex?: number;\r\n}\r\n\r\nexport interface ISubMenusData {\r\n linkText?: string;\r\n linkUrl: Msdyn365.ILinkData;\r\n ariaLabel?: string;\r\n image?: Msdyn365.IImageData;\r\n imageLink?: Msdyn365.ILinkData;\r\n}\r\n\r\nexport interface ISmweNavigationMenuProps extends Msdyn365.IModule {\r\n resources: ISmweNavigationMenuResources;\r\n config: ISmweNavigationMenuConfig;\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 { getCategoryUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n addThrottledEvent,\r\n IModuleProps,\r\n INodeProps\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport {\r\n IActionContext,\r\n IGridSettings,\r\n IImageSettings,\r\n ILinkData,\r\n isEmptyOrNullObject\r\n} from '@msdyn365-commerce/core';\r\nimport { TextValueTranslation } from '@msdyn365-commerce/retail-proxy';\r\nimport classnames from 'classnames';\r\nimport { computed, observable } from 'mobx';\r\nimport * as React from 'react';\r\nimport {\r\n IMenuItemData,\r\n ISmweNavigationMenuData\r\n} from './smwe-navigation-menu.data';\r\nimport {\r\n ICmsNavItemsData,\r\n ICmsRetailItemMenuData,\r\n IMenuData,\r\n ISmweNavigationMenuProps,\r\n ISubMenusData,\r\n navigationMenuSource\r\n} from './smwe-navigation-menu.props.autogenerated';\r\n\r\nexport interface INavigationMenuViewProps\r\n extends ISmweNavigationMenuProps {\r\n className: string;\r\n menuItemData: IMenuItemData[];\r\n Navigation: IModuleProps;\r\n MenuList: INodeProps;\r\n ListItem: INodeProps;\r\n Link: INodeProps;\r\n Button: INodeProps;\r\n Span: INodeProps;\r\n ImageContainer: INodeProps;\r\n MobileDescriptionContainer: INodeProps;\r\n MobileBackButton: INodeProps;\r\n MobileDescriptionLabel: INodeProps;\r\n imageSettings: IImageSettings;\r\n gridSettings: IGridSettings;\r\n isMobileView: boolean;\r\n}\r\n\r\ninterface ICategoryHierarchyClass extends CategoryHierarchy {\r\n ClassName?: string;\r\n Children: CategoryHierarchy[] | ICategoryHierarchyClass[];\r\n}\r\n\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\nexport interface INavigationMenuState {\r\n isMobile: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenu component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass NavigationMenu extends React.PureComponent<\r\n ISmweNavigationMenuProps,\r\n INavigationMenuState\r\n > {\r\n private static CMSItemIdInit: number = 1000;\r\n private static RSItemIdInit: number = 5000;\r\n private resizeThrottledEventHandler?: (event: Event) => void;\r\n private menuItemList: IMenuItemData[];\r\n private isRetail: boolean = true;\r\n private isCMS: boolean = true;\r\n @observable\r\n private viewport: GridSize;\r\n public static getFriendlyName(\r\n locale: string,\r\n nameTranslations?: TextValueTranslation[]\r\n ): string | undefined {\r\n let nameTranslation: TextValueTranslation | undefined;\r\n if (locale && nameTranslations && nameTranslations.length > 0) {\r\n nameTranslation = nameTranslations.find(\r\n item => item.Language!.toLowerCase() === locale.toLowerCase()\r\n );\r\n }\r\n\r\n return nameTranslation && nameTranslation.Text;\r\n }\r\n\r\n constructor(props: ISmweNavigationMenuProps) {\r\n super(props);\r\n this._updateViewport = this._updateViewport.bind(this);\r\n this.viewport =\r\n props.context.request &&\r\n props.context.request.device &&\r\n props.context.request.device.Type === 'Mobile'\r\n ? 'xs'\r\n : 'lg';\r\n this._setNavigationSource(\r\n this.props.config && this.props.config.navigationMenuSource\r\n );\r\n this.state = { isMobile: this.isMobile };\r\n this.menuItemList = [];\r\n }\r\n\r\n @computed get isMobile(): boolean {\r\n return this.viewport === 'xs';\r\n }\r\n\r\n public componentDidMount(): void {\r\n this.resizeThrottledEventHandler =\r\n window &&\r\n addThrottledEvent(\r\n window,\r\n 'resize',\r\n this._updateViewport as EventListener\r\n );\r\n this._updateViewport();\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n window &&\r\n window.removeEventListener(\r\n 'resize',\r\n this.resizeThrottledEventHandler!,\r\n false\r\n );\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n this.menuItemList = this._mapData();\r\n\r\n if (isEmptyOrNullObject(this.props.data)) {\r\n this.props.telemetry.error('Navigatiomenu returned null');\r\n return null;\r\n }\r\n\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=224&h=300&m=6`, w: 0, h: 0 },\r\n xl: { q: `w=224&h=300&m=6`, w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n\r\n const viewProps = {\r\n ...this.props,\r\n ...this.state,\r\n imageSettings: defaultImageSettings,\r\n gridSettings: this.props.context.request.gridSettings,\r\n Navigation: {\r\n moduleProps: this.props,\r\n className: classnames(\r\n 'ms-nav',\r\n this.props.config.className,\r\n this.state.isMobile ? 'mobile-vp navbar-collapse' : 'desktop-vp'\r\n ),\r\n tag: 'nav',\r\n 'aria-label': this.props.resources.menuAriaLabel\r\n },\r\n MenuList: {\r\n className: 'ms-nav__list',\r\n tag: 'ul'\r\n },\r\n ListItem: {\r\n className: 'ms-nav__list__item',\r\n tag: 'li',\r\n role: 'menu'\r\n },\r\n Link: {\r\n tag: 'a',\r\n className: 'ms-nav__list__item__link'\r\n },\r\n Button: {\r\n className: 'ms-nav__list__item__button',\r\n tag: 'button',\r\n role: 'menuitem',\r\n onClick: this.props\r\n },\r\n ImageContainer: {\r\n className: 'ms-nav__list__item__image'\r\n },\r\n Span: {\r\n className: 'ms-nav__list__item__span',\r\n tag: 'span'\r\n },\r\n MobileDescriptionContainer: {\r\n className: 'ms-nav__list__mobile__container'\r\n },\r\n MobileBackButton: {\r\n className: 'ms-nav__list__mobile__container__button',\r\n tag: 'button',\r\n 'aria-label': this.props.resources.backButtonAriaLabel,\r\n onClick: this.props\r\n },\r\n MobileDescriptionLabel: {\r\n className: 'ms-nav__list__mobile__container__span',\r\n tag: 'span'\r\n },\r\n isMobileView: this.state.isMobile,\r\n menuItemData: this.menuItemList,\r\n className: classnames('ms-nav', this.props.config.className)\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n private _formatLinkData = (href: ILinkData | string | undefined): string => {\r\n if (href === undefined) {\r\n return '';\r\n }\r\n\r\n const path: string = (href as ILinkData).destinationUrl || (href as string);\r\n return (new URL(path, this.props.context.request.url.requestUrl)).href;\r\n};\r\n\r\n private _mapData(): IMenuItemData[] {\r\n const { config } = this.props;\r\n let mergedData: IMenuItemData[] = [];\r\n\r\n // will contain the nav's from the retail server later\r\n let retailServerNavItems: CategoryHierarchy[] | undefined;\r\n\r\n const navigationmenu: ISmweNavigationMenuData = this.props.data;\r\n\r\n // if there are categories to be pulled from the retail server, check them\r\n // out and potentially pull the ones with children into the retailSeverNavItems object\r\n if (\r\n navigationmenu.categories.result &&\r\n navigationmenu.categories.result.length > 0\r\n ) {\r\n retailServerNavItems = navigationmenu.categories.result.filter(\r\n x => x.Children && x.Children.length > 0\r\n );\r\n\r\n const retailServerMainMenu = retailServerNavItems[0];\r\n const hiddenRetailMenuItems = this.props.config.hiddenRetailMenuItems;\r\n\r\n if (hiddenRetailMenuItems) {\r\n // If there are specified items to hide in the Retail Menu, create an array with those items all\r\n // lowercase, separated by commas, with surrounding spaces trimmed.\r\n const hiddenItemsArray = hiddenRetailMenuItems.toLowerCase().split(',').map(item => item.trim()) || [];\r\n\r\n // To only compare hidden items to originally fetched Retail server menu, we have to remove items\r\n // that have already been injected by the CMS.\r\n const fetchedRetailMenuItems = retailServerNavItems[0].Children.filter(navItem => navItem.RecordId > 0);\r\n\r\n // Filter out Retail Menu items that match the hidden items specified.\r\n retailServerMainMenu.Children = fetchedRetailMenuItems.filter(navItem => {\r\n const hiddenItem = hiddenItemsArray.find(item => item === navItem.Name?.toLowerCase());\r\n return !hiddenItem;\r\n });\r\n }\r\n\r\n // this is where we inject the CMSMenu into the retailMenu\r\n this._injectCmsMenu(retailServerMainMenu, this.props.config.cmsRetailItemMenu);\r\n\r\n // Note: Below code will render all the Retail server navigation\r\n // retailServerNavItems.map((item: CategoryHierarchy) => (\r\n // mergedData.push(this._constructMenuItemData(item, undefined, true))\r\n // ));\r\n\r\n // Note: In order to display full retail menu, please commentout following line\r\n // and enable above code\r\n\r\n // **NOTE**\r\n // this will need to later be refactored if the above code is uncommented\r\n const url = this.props.config.topLvlCategory?.destinationUrl;\r\n if (url) {\r\n retailServerMainMenu.Url = url;\r\n }\r\n\r\n const overrideServerName = this.props.config.topLvlCategoryText !== undefined && this.props.config.topLvlCategoryText !== null && this.props.config.topLvlCategoryText !== '';\r\n mergedData.push(\r\n this._constructMenuItemData(\r\n retailServerMainMenu,\r\n undefined,\r\n this.isRetail,\r\n 0,\r\n overrideServerName\r\n )\r\n );\r\n }\r\n\r\n if (this.isCMS && config.cmsNavItems && config.cmsNavItems.length > 0) {\r\n config.cmsNavItems.map((item: ICmsNavItemsData, idx: number) =>\r\n mergedData.push(\r\n this._constructMenuItemData(undefined, item, false, idx + 1)\r\n )\r\n );\r\n }\r\n\r\n if (config.sliceIndex && config.sliceIndex > 0) {\r\n mergedData = this._swapArrayPos(mergedData, 0, config.sliceIndex);\r\n }\r\n\r\n return mergedData;\r\n }\r\n\r\n /**\r\n * Injects the regular menu into the category menu\r\n *\r\n * @param categoryMenu category pulled from 365\r\n * @param cmsMenu regular cms menu\r\n */\r\n private _injectCmsMenu(\r\n categoryMenu: ICategoryHierarchyClass,\r\n cmsMenu: ICmsRetailItemMenuData | undefined\r\n ): ICategoryHierarchyClass {\r\n // ensure that the cmsMenu actually exists before attempting to add it\r\n if (cmsMenu && cmsMenu.menu) {\r\n // sort the menu in ascending order so we can insert them straight\r\n const cmsMenuSort = cmsMenu.menu.sort(\r\n (first, second) => first.sliceIndex! - second.sliceIndex!\r\n );\r\n\r\n // generates a \"unique\" id where they are below 0 so no conflicts\r\n // happen with real record ids\r\n let idGenerator = 0;\r\n\r\n // insert each item into the category menu\r\n cmsMenuSort.forEach(item => {\r\n // if its not in the menu already, add it\r\n if (!this._isInMenu(item, categoryMenu)) {\r\n idGenerator--;\r\n // we need to spoof the cmsMenu into a categoryMenu because\r\n // they are rendered in batches. The renderer for the CMS is\r\n // different than the renderer for the categoryMenu, therefore\r\n // we need to spoof it.\r\n categoryMenu.Children.splice(Math.max(0, item.sliceIndex! - 1), 0, {\r\n Name: item.linkText,\r\n ClassName: item.altStyle ? 'ms-nav__list__item-alt' : undefined,\r\n Url: item.linkUrl.destinationUrl,\r\n RecordId: idGenerator,\r\n Children: [],\r\n NameTranslations: [\r\n {\r\n Text: item.linkText,\r\n Language: 'en-us'\r\n }\r\n ]\r\n });\r\n }\r\n });\r\n }\r\n return categoryMenu;\r\n }\r\n\r\n /**\r\n * checks to ensure that the current menu item is in the current category.\r\n *\r\n * The reason why we need to check this is to ensure we don't duplicate the\r\n * addition of the menu multiple times.\r\n *\r\n * @param menu regular menu datapoint from the CMS\r\n * @param category category pulled from 365\r\n */\r\n private _isInMenu(menu: IMenuData, category: CategoryHierarchy): boolean {\r\n return !!category.Children.find(\r\n item => item.RecordId < 0 && item.Name === menu.linkText\r\n );\r\n }\r\n\r\n private _swapArrayPos(\r\n mergedData: IMenuItemData[],\r\n oldIndex: number,\r\n newIndex: number\r\n ): IMenuItemData[] {\r\n if (newIndex >= mergedData.length) {\r\n let k = newIndex - mergedData.length + 1;\r\n while (k--) {\r\n mergedData.push();\r\n }\r\n }\r\n mergedData.splice(newIndex, 0, mergedData.splice(oldIndex, 1)[0]);\r\n return mergedData;\r\n }\r\n\r\n private _constructMenuItemFromRetailItem(\r\n retailItem?: ICategoryHierarchyClass,\r\n overrideServerName:boolean = false\r\n ): IMenuItemData {\r\n const locale =\r\n this.props.context &&\r\n this.props.context.request &&\r\n this.props.context.request.locale\r\n ? this.props.context.request.locale\r\n : 'en-us';\r\n\r\n return {\r\n id: NavigationMenu.RSItemIdInit++,\r\n linkText: overrideServerName?this.props.config.topLvlCategoryText || '':\r\n NavigationMenu.getFriendlyName(\r\n locale,\r\n retailItem && retailItem.NameTranslations\r\n ) || '',\r\n linkURL: retailItem && this._formatLinkData(retailItem.Url),\r\n className: retailItem?.ClassName,\r\n subMenu: this._getNestedChildren(retailItem)\r\n } as IMenuItemData;\r\n }\r\n\r\n private _constructMenuItemData(\r\n retailItem?: ICategoryHierarchyClass,\r\n cmsItem?: ICmsNavItemsData,\r\n isRetail?: boolean,\r\n idx?: number,\r\n overrideServerName:boolean = false\r\n ): IMenuItemData {\r\n if (isRetail) {\r\n return this._constructMenuItemFromRetailItem(retailItem, overrideServerName);\r\n } else {\r\n return {\r\n id: NavigationMenu.CMSItemIdInit++,\r\n linkText: (cmsItem && cmsItem.linkText) || '',\r\n linkURL:\r\n (cmsItem && cmsItem.linkUrl && this._formatLinkData(cmsItem.linkUrl.destinationUrl)) || '',\r\n imageDestinationURL:\r\n (cmsItem && cmsItem.imageLink && this._formatLinkData(cmsItem.imageLink.destinationUrl)) ||\r\n '',\r\n imageSource: (cmsItem && cmsItem.image && cmsItem.image.src) || '',\r\n subMenu: this._getCMSNestedChildren(cmsItem)\r\n } as IMenuItemData;\r\n }\r\n }\r\n\r\n private _getNestedChildren(category?: CategoryHierarchy): IMenuItemData[] {\r\n const nestedChildren: IMenuItemData[] = [];\r\n if (!category || !category.Children || !category.Children.length) {\r\n return [];\r\n }\r\n if(!this.props.config.hideRetailAllMenu) {\r\n nestedChildren.push({\r\n linkText: this.props.resources.allCategoryMenuText,\r\n linkURL: this._formatLinkData(getCategoryUrl(\r\n category,\r\n (this.props.context as unknown) as IActionContext,\r\n {}\r\n ))\r\n });\r\n }\r\n category.Children.map((item: CategoryHierarchy) => {\r\n nestedChildren.push(this._constructMenuItemData(item, undefined, true));\r\n });\r\n return nestedChildren;\r\n }\r\n\r\n private _getCMSNestedChildren(category?: ICmsNavItemsData): IMenuItemData[] {\r\n const nestedChildren: IMenuItemData[] = [];\r\n\r\n if (!category || !category.subMenus || !category.subMenus.length) {\r\n return [];\r\n }\r\n\r\n category.subMenus.map((item: ISubMenusData, idx: number) => {\r\n nestedChildren.push(\r\n this._constructMenuItemData(undefined, item, false, idx)\r\n );\r\n });\r\n return nestedChildren;\r\n }\r\n\r\n private _setNavigationSource = (sourceType?: navigationMenuSource): void => {\r\n switch (sourceType) {\r\n case navigationMenuSource.retailServerOnly:\r\n this.isRetail = true;\r\n this.isCMS = false;\r\n break;\r\n case navigationMenuSource.cmsOnly:\r\n this.isRetail = false;\r\n this.isCMS = true;\r\n break;\r\n case navigationMenuSource.all:\r\n this.isRetail = true;\r\n this.isCMS = true;\r\n break;\r\n default:\r\n }\r\n };\r\n\r\n private _updateViewport(): void {\r\n this.viewport = this._getViewport();\r\n this.setState({ isMobile: this.isMobile });\r\n }\r\n\r\n private _getViewport(): GridSize {\r\n const { context } = this.props;\r\n\r\n // always render in mobile viewport on a mobile device\r\n if (\r\n context.request &&\r\n context.request.device &&\r\n context.request.device.Type === 'Mobile'\r\n ) {\r\n return 'xs';\r\n }\r\n\r\n if (typeof window !== undefined && 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 'xs';\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 } else {\r\n return 'xl';\r\n }\r\n }\r\n }\r\n\r\n return 'xs';\r\n }\r\n}\r\n\r\nexport default NavigationMenu;\r\n","import * as React from 'react';\n\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\n\nimport {\n ISignInItem, ISignInLoading, ISignInLocalAccount, ISignInSocialAccount, ISignInSocialItem,\n ISignInViewProps\n} from './sign-in';\n\nconst LocalAccount: React.FC = ({\n localAccount,\n items,\n forgetPassword,\n disclaimer,\n error,\n signInButton\n}) => {\n\n return (\n \n {items && items.map((item: ISignInItem) => {\n return (\n \n {item.label}\n {item.error}\n {item.input}\n \n );\n })}\n {forgetPassword}\n {disclaimer}\n {error}\n {signInButton}\n \n );\n};\n\nconst SocialAccount: React.FC = ({\n socialAccounts,\n items,\n}) => {\n\n return (\n \n {items && items.map((item: ISignInSocialItem) => {\n return (\n \n {item.image}\n {item.text}\n \n );\n })}\n \n );\n};\n\nconst SignInLoading: React.FC = ({\n modal,\n modalBody,\n icon,\n message,\n}) => {\n return (\n \n \n {icon}\n {message}\n \n \n );\n};\n\nconst SignInView: React.FC = props => {\n\n const {\n signIn,\n viewState,\n loading,\n defaultAADConainer,\n aadConainer,\n signInSection,\n signUpSection,\n signInSectionHeading,\n signInLocalAccount,\n signInSocialAccount,\n signUpSectionHeading,\n signUpDescription,\n signUpLink\n } = props;\n\n return (\n \n {viewState.isShowLoading && }\n {viewState.isShowLoading && }\n \n \n {signInSectionHeading}\n {LocalAccount(signInLocalAccount)}\n {SocialAccount(signInSocialAccount)}\n \n \n {signUpSectionHeading}\n {signUpDescription}\n {signUpLink}\n \n \n \n );\n};\n\nexport default SignInView;\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 {\r\n ICheckoutViewProps,\r\n ILineItem,\r\n ILineItemDeliveryGroup,\r\n ILineItems,\r\n IOrderSummary,\r\n IPickUpAtStore\r\n} from '@msdyn365-commerce-modules/checkout/dist/types';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport const PickUpAtStoreComponent: React.FC = ({ PickUpAtStore, label, location }) => (\r\n \r\n {label}\r\n {location}\r\n \r\n);\r\n\r\nexport const LineItemComponent: React.FC = ({ LineItem, item, pickUpAtStore }) => (\r\n \r\n {item}\r\n {pickUpAtStore && }\r\n \r\n);\r\n\r\nexport const LineItemGroupComponent: React.FC = ({ LineItemDeliveryGroup, LineItemList, heading, lineItems }) => (\r\n \r\n {heading}\r\n \r\n {lineItems.map(lineItem => (\r\n \r\n ))}\r\n \r\n \r\n);\r\n\r\nexport const LineItemsComponent: React.FC = ({ LineItems, Header, heading, editLink, itemsForPickup, itemsForShip }) => (\r\n \r\n \r\n {heading}\r\n {editLink}\r\n \r\n {itemsForPickup && }\r\n {itemsForShip && }\r\n \r\n);\r\n\r\nconst OrderSummaryComponent: React.FC = ({ heading, lines }) => (\r\n\r\n
\r\n {heading}\r\n
\r\n {lines && (\r\n <>\r\n {lines.subtotal}\r\n {lines.shipping}\r\n {lines.tax}\r\n {lines.totalDiscounts}\r\n {lines.loyalty}\r\n {lines.giftCard}\r\n {lines.orderTotal}\r\n \r\n )}\r\n
\r\n
\r\n);\r\n\r\nconst CheckoutView: React.FC = props => {\r\n const {\r\n canShow,\r\n checkoutProps,\r\n headerProps,\r\n bodyProps,\r\n mainProps,\r\n mainControlProps,\r\n sideProps,\r\n sideControlFirstProps,\r\n sideControlSecondProps,\r\n loading,\r\n alert,\r\n title,\r\n guidedForm,\r\n orderSummary,\r\n lineItems,\r\n placeOrderButton,\r\n keepShoppingButton\r\n } = props;\r\n\r\n return (\r\n \r\n {title}\r\n \r\n {loading}\r\n {alert}\r\n {canShow && (\r\n <>\r\n \r\n {guidedForm}\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n {orderSummary && }\r\n \r\n {/* {placeOrderButton}\r\n {keepShoppingButton} */}\r\n \r\n {lineItems && }\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default CheckoutView;\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 {\r\n ICheckoutViewProps,\r\n ILineItem,\r\n ILineItemDeliveryGroup,\r\n ILineItems,\r\n IOrderSummary,\r\n IPickUpAtStore\r\n} from '@msdyn365-commerce-modules/checkout/dist/types';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport const PickUpAtStoreComponent: React.FC = ({ PickUpAtStore, label, location }) => (\r\n \r\n {label}\r\n {location}\r\n \r\n);\r\n\r\nexport const LineItemComponent: React.FC = ({ LineItem, item, pickUpAtStore }) => (\r\n \r\n {item}\r\n {pickUpAtStore && }\r\n \r\n);\r\n\r\nexport const LineItemGroupComponent: React.FC = ({ LineItemDeliveryGroup, LineItemList, heading, lineItems }) => (\r\n \r\n {heading}\r\n \r\n {lineItems.map(lineItem => (\r\n \r\n ))}\r\n \r\n \r\n);\r\n\r\nexport const LineItemsComponent: React.FC = ({ LineItems, Header, heading, editLink, itemsForPickup, itemsForShip }) => (\r\n \r\n \r\n {heading}\r\n {editLink}\r\n \r\n {itemsForPickup && }\r\n {itemsForShip && }\r\n \r\n);\r\n\r\nconst OrderSummaryComponent: React.FC = ({ heading, lines }) => (\r\n\r\n
\r\n {heading}\r\n
\r\n {lines && (\r\n <>\r\n {lines.subtotal}\r\n {lines.shipping}\r\n {lines.tax}\r\n {lines.totalDiscounts}\r\n {lines.loyalty}\r\n {lines.giftCard}\r\n {lines.orderTotal}\r\n \r\n )}\r\n
\r\n
\r\n);\r\n\r\nconst CheckoutView: React.FC = props => {\r\n const {\r\n canShow,\r\n checkoutProps,\r\n headerProps,\r\n bodyProps,\r\n mainProps,\r\n mainControlProps,\r\n sideProps,\r\n sideControlFirstProps,\r\n sideControlSecondProps,\r\n loading,\r\n alert,\r\n title,\r\n guidedForm,\r\n orderSummary,\r\n lineItems,\r\n placeOrderButton,\r\n keepShoppingButton\r\n } = props;\r\n\r\n return (\r\n \r\n {title}\r\n \r\n {loading}\r\n {alert}\r\n {canShow && (\r\n <>\r\n \r\n {guidedForm}\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n {orderSummary && }\r\n \r\n {/* {placeOrderButton}\r\n {keepShoppingButton} */}\r\n \r\n {lineItems && }\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default CheckoutView;\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 { IMenuItemData, INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\ninterface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n mobileViewLabelText?: string;\r\n navOpen: boolean;\r\n}\r\n\r\ninterface IMenuItemDataClass extends IMenuItemData {\r\n className?: string;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenuView component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuView extends React.PureComponent {\r\n private supportedLevel: number = 3;\r\n private currentLevel: number = 0;\r\n private menuNode: React.RefObject;\r\n private pathName: string = '';\r\n private activeClassName: string = 'selected';\r\n private activeMenuItem: IMenuItemData = {};\r\n private activeSubMenuItem: IMenuItemData = {};\r\n\r\n constructor(props: INavigationMenuViewProps) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.state = { activeMenu: undefined, mobileViewLabelText: '', parentMenu: undefined, navOpen: false };\r\n this._closeSubmenu = this._closeSubmenu.bind(this);\r\n this._onMobNavTrigger = this._onMobNavTrigger.bind(this);\r\n }\r\n\r\n public componentDidMount(): void {\r\n document.body && document.body.addEventListener('mousedown', this._handleClickOutside);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n document.body && document.body.removeEventListener('mousedown', this._handleClickOutside, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { isMobileView, MenuList, Navigation } = this.props;\r\n // get current pathname\r\n if (process.env.CURRENT_ENVIRONMENT === 'web') {\r\n this.pathName = window.location.pathname;\r\n } else {\r\n this.pathName = this.props.context.request.url.requestUrl.pathname;\r\n }\r\n\r\n // for wine-shop links, only \"all wines\" page should make \"wine shop\" link active\r\n // TODO: \"wine shop\" menu link has different behavior, it doesn't get highlighted unless on the \"all wines\" page\r\n\r\n // if (this.pathName.startsWith('/fth/wine-shop/')) {\r\n // if (this.pathName.startsWith('/fth/wine-shop/5637149842.c') || this.pathName.startsWith('/fth/wine-shop/all-wines/5637149843.c')) {\r\n // // get \"wine shop\" menu item\r\n // this.props.menuItemData.forEach((item, index) => {\r\n // if (item.linkURL && item.linkURL.startsWith('/fth/wine-shop/')) {\r\n // this.activeMenuItem = item;\r\n // }\r\n // });\r\n // }\r\n // } else {\r\n this.props.menuItemData.forEach((item, index) => {\r\n const ItemPath = this._getPathNameFromURL(item.linkURL || '');\r\n item.subMenu && item.subMenu.forEach((subItem, subIndex) => {\r\n const subItemPath = this._getPathNameFromURL(subItem.linkURL || '');\r\n if (subItemPath === this.pathName) {\r\n this.activeMenuItem = item;\r\n this.activeSubMenuItem = subItem;\r\n }\r\n });\r\n if (ItemPath === this.pathName) {\r\n this.activeMenuItem = item;\r\n }\r\n });\r\n // }\r\n\r\n this.currentLevel = 1;\r\n return (\r\n \r\n \r\n \r\n \r\n {this._renderDisplay()}\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n private _getPathNameFromURL(linkURL: string): string {\r\n let pathName = '';\r\n try {\r\n // if linkURL is a full url\r\n pathName = new URL(linkURL).pathname;\r\n } catch {\r\n pathName = linkURL.split('?')[0];\r\n }\r\n return pathName;\r\n }\r\n\r\n private _onMobNavTrigger(): void {\r\n this.setState(state => ({\r\n navOpen: !state.navOpen\r\n }));\r\n }\r\n\r\n private _renderDisplay(): JSX.Element[] {\r\n const { ListItem, menuItemData } = this.props;\r\n const menuItemList: JSX.Element[] = [];\r\n menuItemData.forEach((item: IMenuItemData, index: number) => {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n });\r\n\r\n return menuItemList;\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\r\n if (this.props.isMobileView) {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n \r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n } else {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n }\r\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\r\n return (this._renderLinkMenuItem(menuItemData));\r\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\r\n return (this._renderSpanMenuItem(menuItemData));\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenus?: IMenuItemDataClass[], activeMenu?: number): JSX.Element | null {\r\n const { isMobileView, ListItem } = this.props;\r\n if (activeMenu && this.state.activeMenu !== activeMenu && !isMobileView) {\r\n return null;\r\n }\r\n\r\n if (!subMenus || subMenus.length === 0) {\r\n return null;\r\n }\r\n\r\n let levelClassName: string = '';\r\n const menuOptions = subMenus && subMenus.map((option: IMenuItemDataClass, idx: number) => {\r\n const hasOptions = (option.subMenu && option.subMenu.length > 0);\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && isMobileView) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\r\n } else {\r\n menuItem = (option.linkURL\r\n ? this._renderLinkMenuItem(option, idx)\r\n : this._renderSpanMenuItem(option)\r\n );\r\n }\r\n\r\n let subMenu;\r\n\r\n if (hasOptions) {\r\n this.currentLevel++;\r\n if (this.currentLevel <= this.supportedLevel - 1) {\r\n levelClassName = `level-${this.currentLevel.toString()}`;\r\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined);\r\n }\r\n }\r\n\r\n return (\r\n \r\n {menuItem}\r\n {subMenu}\r\n \r\n );\r\n });\r\n\r\n return (this._renderMenu(levelClassName, menuOptions, activeMenu));\r\n }\r\n\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n const { Button } = this.props;\r\n const isActive = (option === this.activeMenuItem) || (option === this.activeSubMenuItem);\r\n const activeClass = `${Button.className} ${isActive ? this.activeClassName : ''}`;\r\n\r\n return (\r\n this._mainNavClick(option) : this._handleDropdownToggle(option, activeMenu)}\r\n onMouseEnter={!this.props.isMobileView ? this._handleDropdownToggle(option, activeMenu) : false}\r\n onFocus={!this.props.isMobileView ? this._handleDropdownToggle(option, activeMenu) : false}\r\n aria-haspopup={true}\r\n aria-expanded={this.state.activeMenu && this.state.activeMenu === option.id ? true : false}\r\n data-parent={activeMenu}\r\n >\r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _mainNavClick = (option: IMenuItemData) => {\r\n const link = option.linkURL;\r\n if (link) {\r\n window.location.href = link;\r\n }\r\n };\r\n\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Link } = this.props;\r\n const isActive = (option === this.activeSubMenuItem) || (option === this.activeMenuItem);\r\n const activeClass = `${Link.className} ${isActive ? this.activeClassName : ''}`;\r\n\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Span } = this.props;\r\n return (\r\n {option.linkText}\r\n );\r\n }\r\n\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number): JSX.Element | null {\r\n const { MenuList } = this.props;\r\n this.currentLevel = 1;\r\n return (\r\n \r\n {menuOptions}\r\n \r\n );\r\n }\r\n\r\n private _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n let activeMenu;\r\n if(this.props.isMobileView) {\r\n activeMenu = (this.state.activeMenu && this.state.activeMenu === data.id!) ? undefined : data.id!;\r\n } else {\r\n activeMenu = data.id;\r\n }\r\n this.setState({\r\n activeMenu,\r\n parentMenu: parentId\r\n });\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _resetFocus = () => {\r\n if (this.props.isMobileView) {\r\n setTimeout(() => {\r\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\r\n }, 0);\r\n }\r\n };\r\n\r\n // tslint:disable-next-line:no-any\r\n private _handleClickOutside = (event: any) => {\r\n const burgerMenu:boolean = event.target.className === 'ms-header__nav-icon msc-btn';\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.target) && !burgerMenu) {\r\n this.setState({ navOpen: false });\r\n }\r\n };\r\n\r\n private _closeSubmenu(): void {\r\n if (!this.props.isMobileView) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n }\r\n}\r\n\r\nexport default NavigationMenuView;","/*!\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';\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","/*---------------------------------------------------------------------------------------------\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 {\r\n ICheckoutViewProps,\r\n ILineItem,\r\n ILineItemDeliveryGroup,\r\n ILineItems,\r\n IOrderSummary,\r\n IPickUpAtStore\r\n} from '@msdyn365-commerce-modules/checkout/dist/types';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport const PickUpAtStoreComponent: React.FC = ({ PickUpAtStore, label, location }) => (\r\n \r\n {label}\r\n {location}\r\n \r\n);\r\n\r\nexport const LineItemComponent: React.FC = ({ LineItem, item, pickUpAtStore }) => (\r\n \r\n {item}\r\n {pickUpAtStore && }\r\n \r\n);\r\n\r\nexport const LineItemGroupComponent: React.FC = ({ LineItemDeliveryGroup, LineItemList, heading, lineItems }) => (\r\n \r\n {heading}\r\n \r\n {lineItems.map(lineItem => (\r\n \r\n ))}\r\n \r\n \r\n);\r\n\r\nexport const LineItemsComponent: React.FC = ({ LineItems, Header, heading, editLink, itemsForPickup, itemsForShip }) => (\r\n \r\n \r\n {heading}\r\n {editLink}\r\n \r\n {itemsForPickup && }\r\n {itemsForShip && }\r\n \r\n);\r\n\r\nconst OrderSummaryComponent: React.FC = ({ heading, lines }) => (\r\n\r\n
\r\n {heading}\r\n
\r\n {lines && (\r\n <>\r\n {lines.subtotal}\r\n {lines.shipping}\r\n {lines.tax}\r\n {lines.totalDiscounts}\r\n {lines.loyalty}\r\n {lines.giftCard}\r\n {lines.orderTotal}\r\n \r\n )}\r\n
\r\n
\r\n);\r\n\r\nconst CheckoutView: React.FC = props => {\r\n const {\r\n canShow,\r\n checkoutProps,\r\n headerProps,\r\n bodyProps,\r\n mainProps,\r\n mainControlProps,\r\n sideProps,\r\n sideControlFirstProps,\r\n sideControlSecondProps,\r\n loading,\r\n alert,\r\n title,\r\n guidedForm,\r\n orderSummary,\r\n lineItems,\r\n placeOrderButton,\r\n keepShoppingButton\r\n } = props;\r\n\r\n return (\r\n \r\n {title}\r\n \r\n {loading}\r\n {alert}\r\n {canShow && (\r\n <>\r\n \r\n {guidedForm}\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n {orderSummary && }\r\n \r\n {/* {placeOrderButton}\r\n {keepShoppingButton} */}\r\n \r\n {lineItems && }\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default CheckoutView;\r\n","\nimport { ICategoryHierarchyViewProps, IRefineMenuViewProps, ISearchResultContainerViewProps, ISearchResultModalViewProps, ISortByViewProps, ITitleViewProps } 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 { SearchResultContainer, products, pagination, ProductsContainer, ProductSectionContainer, choiceSummary, isMobile, modalToggle, searchResultModal, TitleViewProps,\n refineMenu, categoryHierarchy, sortByOptions, CategoryNavContainer, RefineAndProductSectionContainer, errorMessage, FeatureSearchContainer, similarLookProduct } = props;\n if (isMobile) {\n return (\n \n {categoryHierarchy && renderCategoryHierarchy(categoryHierarchy)}\n {renderTitle(TitleViewProps)}\n {choiceSummary}\n {modalToggle}\n {createSearchResultModal(searchResultModal, refineMenu, sortByOptions)}\n \n {similarLookProduct}\n \n \n {errorMessage}\n {products}\n \n {pagination}\n \n );\n }\n return (\n \n {categoryHierarchy &&\n \n {renderCategoryHierarchy(categoryHierarchy)}\n \n }\n \n {refineMenu && renderRefiner(refineMenu)}\n \n \n {similarLookProduct}\n \n
\n {TitleViewProps && renderTitle(TitleViewProps)}\n {choiceSummary}\n
\n
\n {sortByOptions && renderSort(sortByOptions)}\n
\n \n {errorMessage}\n {products}\n \n {pagination}\n
\n
\n
\n );\n\n};\n\nconst createSearchResultModal = (modalProps: ISearchResultModalViewProps, refineMenu: IRefineMenuViewProps, sortByDropDown: ISortByViewProps): JSX.Element => {\n return React.cloneElement(modalProps.modal, {}, modalProps.modalHeader, createModalBody(modalProps, refineMenu, sortByDropDown), modalProps.modalFooter);\n};\n\nconst createModalBody = (props: ISearchResultModalViewProps, refineMenu: IRefineMenuViewProps, sortByDropDown: ISortByViewProps): JSX.Element | null => {\n if (sortByDropDown) {\n return React.cloneElement(props.modalBody, {}, renderSort(sortByDropDown), 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 \n {submenu}\n \n ))}\n \n \n );\n }\n return null;\n};\n\nconst renderSort = (props: ISortByViewProps): JSX.Element | null => {\n const { SortingContainer, sortByDropDown } = props;\n if (sortByDropDown) {\n return (\n \n {sortByDropDown}\n \n );\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}\n ({title.titleCount})\n

\n
\n );\n }\n return null;\n};\n\nexport default SearchResultContainerView;","import { ICoreContext } from '@msdyn365-commerce/core-internal';\r\ninterface IBrandCodeProps {\r\n description?: string;\r\n appContext: ICoreContext<{\r\n // any is just matching the types here.\r\n // tslint:disable-next-line: no-any\r\n [x: string]: any;\r\n }>;\r\n}\r\n\r\ntype BrandCodeTable = {\r\n brandName: string;\r\n brandCode: string;\r\n}[];\r\n\r\n/**\r\n * for converting a brand code to a brand name\r\n *\r\n */\r\nexport function brandCodeParser({ description, appContext }: IBrandCodeProps): string {\r\n\r\n // for mocking\r\n // const brandCodeTable: BrandCodeTable = [{ brandName: '14Hands', brandCode: 'FTH' }];\r\n\r\n const brandCodeTable = appContext.app.config.brandCodeTable as BrandCodeTable;\r\n\r\n // this is a safety check to ensure that brand code table does NOT crash in local or\r\n // if brand code table is somehow not connecting right to the global config. it will\r\n // essentially act as if there are no brand codes declared - keeping how everything\r\n // looks originally\r\n if (!brandCodeTable) { return ''; }\r\n\r\n // a brand code may and may only appear in the first three characters of a string\r\n // we are lowercasing in the off-chance that the authors type them differently between\r\n // the sources\r\n const currentBrandCode = description && description.slice(0, 3).toLowerCase();\r\n const brandFound = brandCodeTable.find(brand => brand.brandCode.toLowerCase() === currentBrandCode);\r\n if (brandFound) { return brandFound.brandName; }\r\n return '';\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 {\r\n ICheckoutViewProps,\r\n ILineItem,\r\n ILineItemDeliveryGroup,\r\n ILineItems,\r\n IOrderSummary,\r\n IPickUpAtStore\r\n} from '@msdyn365-commerce-modules/checkout/dist/types';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport const PickUpAtStoreComponent: React.FC = ({ PickUpAtStore, label, location }) => (\r\n \r\n {label}\r\n {location}\r\n \r\n);\r\n\r\nexport const LineItemComponent: React.FC = ({ LineItem, item, pickUpAtStore }) => (\r\n \r\n {item}\r\n {pickUpAtStore && }\r\n \r\n);\r\n\r\nexport const LineItemGroupComponent: React.FC = ({ LineItemDeliveryGroup, LineItemList, heading, lineItems }) => (\r\n \r\n {heading}\r\n \r\n {lineItems.map(lineItem => (\r\n \r\n ))}\r\n \r\n \r\n);\r\n\r\nexport const LineItemsComponent: React.FC = ({ LineItems, Header, heading, editLink, itemsForPickup, itemsForShip }) => (\r\n \r\n \r\n {heading}\r\n {editLink}\r\n \r\n {itemsForPickup && }\r\n {itemsForShip && }\r\n \r\n);\r\n\r\nconst OrderSummaryComponent: React.FC = ({ heading, lines }) => (\r\n\r\n
\r\n {heading}\r\n
\r\n {lines && (\r\n <>\r\n {lines.subtotal}\r\n {lines.shipping}\r\n {lines.tax}\r\n {lines.totalDiscounts}\r\n {lines.loyalty}\r\n {lines.giftCard}\r\n {lines.orderTotal}\r\n \r\n )}\r\n
\r\n
\r\n);\r\n\r\nconst CheckoutView: React.FC = props => {\r\n const {\r\n canShow,\r\n checkoutProps,\r\n headerProps,\r\n bodyProps,\r\n mainProps,\r\n mainControlProps,\r\n sideProps,\r\n sideControlFirstProps,\r\n sideControlSecondProps,\r\n loading,\r\n alert,\r\n title,\r\n guidedForm,\r\n orderSummary,\r\n lineItems,\r\n placeOrderButton,\r\n keepShoppingButton\r\n } = props;\r\n\r\n return (\r\n \r\n {title}\r\n \r\n {loading}\r\n {alert}\r\n {canShow && (\r\n <>\r\n \r\n {guidedForm}\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n {orderSummary && }\r\n \r\n {/* {placeOrderButton}\r\n {keepShoppingButton} */}\r\n \r\n {lineItems && }\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default CheckoutView;\r\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ISignInButton {\n id?: string;\n className: string;\n text: string;\n ariaLabel: string;\n disabled?: boolean;\n telemetryContent?: ITelemetryContent;\n onClick?(event: React.MouseEvent): void;\n}\n\nconst SignInButton: React.FC = ({ id, className, text, ariaLabel, telemetryContent, disabled, onClick }) => {\n const payLoad = getPayloadObject('click', telemetryContent!, text);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n return (\n \n {text}\n \n );\n};\n\nexport default SignInButton;\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as React from 'react';\n\nexport interface ISignInDescription {\n className: string;\n description: string;\n}\n\nconst SignInDescription: React.FC = ({ className, description }) => (\n

\n {description}\n

\n);\n\nexport default SignInDescription;\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nexport interface ISignInErrorProps {\n id?: string;\n className: string;\n type?: string;\n message?: string;\n}\n\nconst SignInError: React.FC = ({ id, className, type = 'page', message }) => {\n const errorClassName = `${className}__${type}-error`;\n\n return (\n \n );\n\n};\n\nexport default SignInError;\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as React from 'react';\n\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\n\nexport interface ISignInInputProps {\n id?: string;\n // tslint:disable-next-line:no-any\n type: any;\n value?: string;\n pattern?: string;\n className: string;\n maxLength?: string;\n ariaLabel?:string;\n onChange?(event: React.ChangeEvent): void;\n}\n\nexport interface ISignInInput {\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 = parseInt(maxLength, 10);\n if (!isNaN(parsedMaxLength)) {\n return parsedMaxLength;\n }\n }\n\n return undefined;\n};\n\nconst SignInInput: React.FC = ({\n id,\n type,\n value,\n pattern,\n className,\n maxLength,\n ariaLabel,\n onChange, }) => (\n \n );\n\nexport default SignInInput;\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as React from 'react';\n\nexport interface ISignInLabel {\n id: string;\n forId: string;\n className: string;\n text: string;\n}\n\nconst SignInLabel: React.FC = ({ id, forId, className, text }) => (\n \n);\n\nexport default SignInLabel;\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ISignInLink {\n id?: string;\n className: string;\n href: string;\n ariaLabel: string;\n text: string;\n telemetryContent?: ITelemetryContent;\n}\n\nconst SignInLink: React.FC = ({ id, className, href, telemetryContent, ariaLabel, text }) => {\n const payLoad = getPayloadObject('click', telemetryContent!, text);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n return (\n \n {text}\n \n );\n};\n\nexport default SignInLink;\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as React from 'react';\n\nexport interface ISignInLoadingIcon {\n className: string;\n}\n\nconst SignInLoadingIcon: React.FC = ({ className }) => (\n
\n);\n\nexport default SignInLoadingIcon;\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as React from 'react';\n\nexport interface ISignInLoadingMessage {\n className: string;\n message: string;\n}\n\nconst SignInLoadingMessage: React.FC = ({ className, message }) => (\n
\n {message}\n
\n);\n\nexport default SignInLoadingMessage;\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as React from 'react';\n\nexport interface ISignInText {\n className: string;\n text: string;\n}\n\nconst SignInText: React.FC = ({ className, text }) => (\n \n {text}\n \n);\n\nexport default SignInText;\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport classnames from 'classnames';\nimport { observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport {\n getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, Modal, ModalBody\n} from '@msdyn365-commerce-modules/utilities';\nimport * as Msdyn365 from '@msdyn365-commerce/core';\n\nimport SignInButtonComponent from './components/sign-in-button';\nimport SignInDescriptionComponent from './components/sign-in-description';\nimport SignInErrorComponent from './components/sign-in-error';\nimport SignInInputComponent from './components/sign-in-input';\nimport SignInLabelComponent from './components/sign-in-label';\nimport SignInLinkComponent from './components/sign-in-link';\nimport SignInLoadingIconComponent from './components/sign-in-loading-icon';\nimport SignInLoadingMessageComponent from './components/sign-in-loading-message';\nimport SignInTextComponent from './components/sign-in-text';\nimport { ISignInConfig, ISignInProps, ISignInResources } from './sign-in.props.autogenerated';\n\nexport interface ISignInViewState {\n isShowLoading: boolean;\n}\n\nexport interface ISignInItem {\n wrapper: INodeProps;\n key: string;\n label: React.ReactNode;\n error: React.ReactNode;\n input: React.ReactNode;\n}\n\nexport interface ISignInSocialItem {\n key: string;\n button: INodeProps;\n image: React.ReactNode;\n text: React.ReactNode;\n}\n\nexport interface ISignInSocialAccount {\n socialAccounts: INodeProps;\n items: ISignInSocialItem[];\n}\n\nexport interface ISignInLocalAccount {\n localAccount: INodeProps;\n items: ISignInItem[];\n forgetPassword: React.ReactNode;\n disclaimer: React.ReactNode;\n error: React.ReactNode;\n signInButton: React.ReactNode;\n}\n\nexport interface ISignInLoading {\n modal: INodeProps;\n modalBody: INodeProps;\n icon: React.ReactNode;\n message: React.ReactNode;\n}\n\nexport interface ISignInViewProps {\n className: string;\n viewState: ISignInViewState;\n signIn: IModuleProps;\n loading: ISignInLoading;\n defaultAADConainer: INodeProps;\n aadConainer: INodeProps;\n signInSection: INodeProps;\n signInSectionHeading: React.ReactNode;\n signInLocalAccount: ISignInLocalAccount;\n signInSocialAccount: ISignInSocialAccount;\n signUpSection: INodeProps;\n signUpSectionHeading: React.ReactNode;\n signUpDescription: React.ReactNode;\n signUpLink: React.ReactNode;\n}\n\n/**\n * SignIn component\n * All AAD related module is rendered on AAD page and we need to respect HTML contract provide by AAD.\n * Please ensure any change in module don't break contract with AAD.\n * @extends {React.Component>}\n */\n@observer\nclass SignIn extends React.Component> {\n\n private moduleClassName: string = 'ms-sign-in';\n private telemetryContent?: ITelemetryContent;\n @observable private emailId: string;\n @observable private emailRegex: string;\n @observable private isInitialized: boolean;\n // tslint:disable-next-line:no-any\n private initializationTimer: any;\n\n constructor(props: ISignInProps) {\n super(props);\n this.emailRegex = '^[a-zA-Z0-9!#$%&'+^_`{}~-]+(?:\\.[a-zA-Z0-9!#$%&'+^_`{}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$';\n this.isInitialized = false;\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!, this.props.friendlyName, this.props.telemetry);\n this.emailId = 'logonIdentifier';\n }\n\n public componentDidMount(): void {\n this._prePopulateData();\n this._onInit();\n }\n\n // After successful AAD initialization, call initialize method provided by AAD to attach events.\n public componentDidUpdate(): void {\n // tslint:disable-next-line:no-string-literal\n if (this.isInitialized && window && window['$element'] && window['$element']['initialize']) {\n // tslint:disable-next-line:no-string-literal\n window['$element']['initialize']();\n }\n }\n\n public render(): JSX.Element {\n const config: ISignInConfig = this.props.config || {};\n const resources: ISignInResources = this.props.resources || {};\n\n const viewProps = {\n ...this.props,\n viewState: {\n isShowLoading: !this.isInitialized\n },\n signIn: {\n moduleProps: this.props,\n className: classnames(this.moduleClassName, config.className)\n },\n loading: {\n modal: {\n tag: Modal,\n isOpen: true\n },\n modalBody: {\n tag: ModalBody\n },\n icon: ,\n message: ,\n },\n defaultAADConainer: {\n id: 'api',\n style: { display: 'none' }\n },\n aadConainer: {\n id: this.isInitialized ? 'api' : null,\n className: `${this.moduleClassName}__container`\n },\n signInSection: {\n className: `${this.moduleClassName}__sign-in-section`\n },\n signInSectionHeading: ,\n signInLocalAccount: {\n localAccount: {\n className: `${this.moduleClassName}__account-items localAccount`\n },\n items: [\n this._renderInput(this.emailId, 'email', resources.emailAddressLabelText, resources.emailAddressAriaLabel, this.emailRegex),\n this._renderInput('password', 'password', resources.passwordLabelText, resources.passwordAriaLabel)\n ],\n forgetPassword: (\n ),\n disclaimer: config.signInDisclaimer && (\n \n ),\n error: ,\n signInButton: \n },\n signInSocialAccount: {\n socialAccounts: {\n className: `${this.moduleClassName}__social-accounts`\n },\n items: [\n this._renderSocialAccount('FacebookExchange', resources.facebookButtonText, resources.facebookButtonAriaLabel, config.facebookIcon),\n this._renderSocialAccount('MicrosoftAccountExchange', resources.microsoftButtonText, resources.microsoftButtonAriaLabel, config.microsoftIcon)\n ]\n },\n signUpSection: {\n className: `${this.moduleClassName}__sign-up-section`\n },\n signUpSectionHeading: ,\n signUpDescription: ,\n signUpLink: (\n )\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleParagraphChange = (event: Msdyn365.ContentEditableEvent) => this.props.config.signInDisclaimer = event.target.value;\n public handleSignInHeadingChange = (event: Msdyn365.ContentEditableEvent) => this.props.config.signInHeading.text = event.target.value;\n public handleSignUpHeadingChange = (event: Msdyn365.ContentEditableEvent) => this.props.config.signUpHeading.text = event.target.value;\n\n private _onInit = () => {\n this._prePopulateData();\n this._updateErrorMessage();\n // Check if AAD initialization is complete. AAD do not provide any event to subscribe so we need to check variable set by AAD to check initialization status.\n this.initializationTimer = setInterval(() => { this._isInitializationSuccessful(); }, 100);\n setTimeout(() => { clearInterval(this.initializationTimer); }, 10000);\n }\n\n // After successful AAD initialization, remove waiting and preload any data, if needed.\n private _isInitializationSuccessful = () => {\n // tslint:disable-next-line:no-string-literal\n if (window && window['$diags'] && window['$diags']['initializationSuccessful']) {\n clearInterval(this.initializationTimer);\n this.isInitialized = true;\n }\n }\n\n private _prePopulateData = () => {\n // tslint:disable-next-line:no-string-literal\n if (window && window['CONTENT'] && window['CONTENT']['email_pattern']) {\n // tslint:disable-next-line:no-string-literal\n this.emailRegex = window['CONTENT']['email_pattern'];\n }\n\n // tslint:disable-next-line:no-string-literal\n if (window['SA_FIELDS'] && window['SA_FIELDS']['AttributeFields']) {\n // @ts-ignore\n this.emailId = (window.SA_FIELDS.AttributeFields || [])[0].ID || this.emailId;\n }\n }\n\n private _updateErrorMessage = () => {\n const resources: ISignInResources = this.props.resources || {};\n\n // tslint:disable-next-line:no-string-literal\n if (window && window['CONTENT']) {\n const errorMessages = {\n requiredField_email: resources.requriedEmailError,\n requiredField_password: resources.requriedPasswordError,\n invalid_email: resources.invalidEmailError,\n invalid_password: resources.invalidPasswordError,\n unknown_error: resources.unknownError,\n };\n\n // tslint:disable-next-line:no-string-literal\n Object.assign(window['CONTENT'], errorMessages);\n }\n }\n\n private _renderInput(id: string, type: string, labelText: string, ariaLabel: string, pattern?: string): ISignInItem {\n const className = `${this.moduleClassName}__account-item`;\n return (\n {\n wrapper: {\n className: classnames(className, `${className}-${id}`, 'entry-item', 'attrEntry')\n },\n key: id,\n label: (\n \n ),\n error: (\n \n ),\n input: (\n \n )\n\n }\n );\n }\n\n private _renderSocialAccount(id: string, text: string, ariaLabel: string, iconImage?: Msdyn365.IImageData): ISignInSocialItem {\n return {\n key: id,\n button: {\n id: id,\n tag: 'button',\n className: classnames(`${this.moduleClassName}__social-account`, `${this.moduleClassName}__social-account-${id}`, 'accountButton', 'msc-btn'),\n 'aria-label': ariaLabel\n },\n image: this._createImageMarkup(iconImage),\n text: \n };\n }\n\n private _createImageMarkup(iconImage?: Msdyn365.IImageData): React.ReactNode | null {\n if (iconImage) {\n const imageProps = {\n gridSettings: this.props.context.request.gridSettings || {},\n imageSettings: iconImage && iconImage.imageSettings\n };\n return ;\n }\n return null;\n }\n}\n\nexport default SignIn;","/*---------------------------------------------------------------------------------------------\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 { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { INavigationMenuViewProps } from '../../../modules/smwe-navigation-menu/./smwe-navigation-menu';\r\nimport { IMenuItemData } from '../../../modules/smwe-navigation-menu/./smwe-navigation-menu.data';\r\nimport { ISmweNavigationMenuProps } from '../definition-extensions/smwe-navigation-menu.ext.props.autogenerated';\r\n\r\ninterface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n mobileViewLabelText?: string;\r\n navOpen: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenuView component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuView extends React.PureComponent, INavigationState> {\r\n private supportedLevel: number = 3;\r\n private currentLevel: number = 0;\r\n private menuNode: React.RefObject;\r\n private pathName: string = '';\r\n private activeClassName: string = 'selected';\r\n private activeMenuItem: IMenuItemData = {};\r\n private activeSubMenuItem: IMenuItemData = {};\r\n\r\n constructor(props: INavigationMenuViewProps & ISmweNavigationMenuProps<{}>) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.state = { activeMenu: undefined, mobileViewLabelText: '', parentMenu: undefined, navOpen: false };\r\n this._closeSubmenu = this._closeSubmenu.bind(this);\r\n this._onMobNavTrigger = this._onMobNavTrigger.bind(this);\r\n }\r\n\r\n public componentDidMount(): void {\r\n document.body && document.body.addEventListener('mousedown', this._handleClickOutside);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n document.body && document.body.removeEventListener('mousedown', this._handleClickOutside, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { isMobileView, MenuList, Navigation } = this.props;\r\n // get current pathname\r\n if (process.env.CURRENT_ENVIRONMENT === 'web') {\r\n this.pathName = window.location.pathname;\r\n } else {\r\n this.pathName = this.props.context.request.url.requestUrl.pathname;\r\n }\r\n\r\n this.props.menuItemData.forEach((item, index) => {\r\n if (item.linkText?.toLowerCase() === this.props.config.hiddenUrl?.toLowerCase()) {\r\n item.linkURL = '';\r\n }\r\n if (item.subMenu && item.subMenu.length > 0 && this.props.config.hiddenSubMenuItem) {\r\n this._removeSubItem(item.subMenu, this.props.config.hiddenSubMenuItem);\r\n }\r\n const ItemPath = this._getPathNameFromURL(item.linkURL || '');\r\n item.subMenu && item.subMenu.forEach((subItem, subIndex) => {\r\n const subItemPath = this._getPathNameFromURL(subItem.linkURL || '');\r\n if (subItemPath === this.pathName) {\r\n this.activeMenuItem = item;\r\n this.activeSubMenuItem = subItem;\r\n }\r\n });\r\n if (ItemPath === this.pathName) {\r\n this.activeMenuItem = item;\r\n }\r\n });\r\n\r\n this.currentLevel = 1;\r\n return (\r\n \r\n \r\n );\r\n }\r\n\r\n // helper function created to remove elements from navigation submenus\r\n private _removeSubItem(subMenuArray: IMenuItemData[], subItemToRemove: string): IMenuItemData[] {\r\n let i = 0;\r\n while (i < subMenuArray.length) {\r\n if (subMenuArray[i].linkText?.toLowerCase() === subItemToRemove.toLowerCase()) {\r\n subMenuArray.splice(i, 1);\r\n } else {\r\n ++i;\r\n }\r\n }\r\n return subMenuArray;\r\n }\r\n\r\n private _getPathNameFromURL(linkURL: string): string {\r\n let pathName = '';\r\n try {\r\n // if linkURL is a full url\r\n pathName = new URL(linkURL).pathname;\r\n } catch {\r\n pathName = linkURL.split('?')[0];\r\n }\r\n return pathName;\r\n }\r\n\r\n private _onMobNavTrigger(): void {\r\n this.setState(state => ({\r\n navOpen: !state.navOpen\r\n }));\r\n }\r\n\r\n private _renderDisplay(): JSX.Element[] {\r\n const { ListItem, menuItemData } = this.props;\r\n const menuItemList: JSX.Element[] = [];\r\n menuItemData.forEach((item: IMenuItemData, index: number) => {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n });\r\n return menuItemList;\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\r\n if (this.props.isMobileView) {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n \r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n } else {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n }\r\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\r\n return (this._renderLinkMenuItem(menuItemData));\r\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\r\n return (this._renderSpanMenuItem(menuItemData));\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number): JSX.Element | null {\r\n const { isMobileView, ListItem } = this.props;\r\n if (activeMenu && this.state.activeMenu !== activeMenu && !isMobileView) {\r\n return null;\r\n }\r\n\r\n if (!subMenus || subMenus.length === 0) {\r\n return null;\r\n }\r\n\r\n let levelClassName: string = '';\r\n const menuOptions = subMenus && subMenus.map((option: IMenuItemData, idx: number) => {\r\n const hasOptions = (option.subMenu && option.subMenu.length > 0);\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && isMobileView) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\r\n } else {\r\n menuItem = (option.linkURL\r\n ? this._renderLinkMenuItem(option, idx)\r\n : this._renderSpanMenuItem(option)\r\n );\r\n }\r\n\r\n let subMenu;\r\n\r\n if (hasOptions) {\r\n this.currentLevel++;\r\n if (this.currentLevel <= this.supportedLevel - 1) {\r\n levelClassName = `level-${this.currentLevel.toString()}`;\r\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined);\r\n }\r\n }\r\n\r\n return (\r\n \r\n {menuItem}\r\n {subMenu}\r\n \r\n );\r\n });\r\n\r\n return (this._renderMenu(levelClassName, menuOptions, activeMenu));\r\n }\r\n\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n const { Button } = this.props;\r\n const isActive = (option === this.activeMenuItem) || (option === this.activeSubMenuItem);\r\n const activeClass = `${Button.className} ${isActive ? this.activeClassName : ''}`;\r\n\r\n return (\r\n this._mainNavClick(option) : this._handleDropdownToggle(option, activeMenu)}\r\n onMouseEnter={!this.props.isMobileView ? this._handleDropdownToggle(option, activeMenu) : false}\r\n onFocus={!this.props.isMobileView ? this._handleDropdownToggle(option, activeMenu) : false}\r\n aria-haspopup={true}\r\n aria-expanded={this.state.activeMenu && this.state.activeMenu === option.id ? true : false}\r\n data-parent={activeMenu}\r\n >\r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _mainNavClick = (option: IMenuItemData) => {\r\n const link = option.linkURL;\r\n if (link) {\r\n window.location.href = link;\r\n }\r\n };\r\n\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Link } = this.props;\r\n const isActive = (option === this.activeSubMenuItem) || (option === this.activeMenuItem);\r\n const activeClass = `${Link.className} ${isActive ? this.activeClassName : ''}`;\r\n\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Span } = this.props;\r\n return (\r\n {option.linkText}\r\n );\r\n }\r\n\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number): JSX.Element | null {\r\n const { MenuList } = this.props;\r\n this.currentLevel = 1;\r\n return (\r\n \r\n {menuOptions}\r\n \r\n );\r\n }\r\n\r\n private _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n let activeMenu;\r\n if(this.props.isMobileView) {\r\n activeMenu = (this.state.activeMenu && this.state.activeMenu === data.id!) ? undefined : data.id!;\r\n } else {\r\n activeMenu = data.id;\r\n }\r\n this.setState({\r\n activeMenu,\r\n parentMenu: parentId\r\n });\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _resetFocus = () => {\r\n if (this.props.isMobileView) {\r\n setTimeout(() => {\r\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\r\n }, 0);\r\n }\r\n };\r\n\r\n // tslint:disable-next-line:no-any\r\n private _handleClickOutside = (event: any) => {\r\n const burgerMenu:boolean = event.target.className === 'ms-header__nav-icon msc-btn';\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.target) && !burgerMenu) {\r\n this.setState({ navOpen: false });\r\n }\r\n };\r\n\r\n private _closeSubmenu(): void {\r\n if (!this.props.isMobileView) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n }\r\n}\r\n\r\nexport default NavigationMenuView;","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\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 \n {error}\n \n);\n\nexport const CreditComponent: React.FC = ({ verbagePrefix, verbagePostfix, value, className }) => {\n return (\n
\n {verbagePrefix}\n \n {value}\n \n {verbagePostfix}\n
\n );\n};\n\nexport const InfoComponent: React.FC = ({ label, value, className }) => (\n
\n \n {label}\n \n \n {value}\n \n
\n);","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as Msdyn365 from '@msdyn365-commerce/core';\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 /** The telemetry content */\n telemetryContent?: ITelemetryContent;\n onTextChange?(index: number): (event: Msdyn365.ContentEditableEvent) => void;\n}\n\nconst AccountCustomerBalanceTileLinks: React.FC = ({ links, telemetryContent, onTextChange, requestContext }) => {\n if (links.length === 0) {\n return null;\n }\n const editableLinks = _mapEditableLinks(links, telemetryContent);\n return (\n
\n { editableLinks && editableLinks.length ?\n \n : null\n }\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: 'button',\n additionalProperties: attributes\n };\n editableLinks.push(editableLink);\n });\n\n return editableLinks;\n};\n\nexport default AccountCustomerBalanceTileLinks;","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { getTelemetryObject, Heading, IModuleProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport classnames from 'classnames';\nimport get from 'lodash/get';\nimport { computed, reaction } from 'mobx';\nimport * as React from 'react';\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 telemetryContent: ITelemetryContent;\n\n constructor(props: IAccountCustomerBalanceTileProps) {\n super(props);\n\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!, this.props.friendlyName, this.props.telemetry);\n\n // @ts-ignore\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 isB2BCustomer = customerResult ? customerResult.IsB2B : false;\n const enableCustomerAccountPayment = get(this.props, 'context.request.app.platform.enableCustomerAccountPayment');\n\n return (\n allowOnAccountPayment &&\n (enableCustomerAccountPayment === 'all' ||\n (enableCustomerAccountPayment === 'b2b' && isB2BCustomer) ||\n (enableCustomerAccountPayment === 'b2c' && !isB2BCustomer))\n );\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 = 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 (account.Balance === 0 && account.CreditLimit === 0) {\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 const customerBalanceFormatted = `${formatCurrency(account.Balance.toFixed(2), currencyCode)}`;\n\n isDetailsLinkDisplayed = true;\n content = (\n \n );\n }\n\n return { content, isDetailsLinkDisplayed };\n }\n}\n\nexport default AccountCustomerBalanceTile;\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 { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { INavigationMenuViewProps } from './smwe-navigation-menu';\r\nimport { IMenuItemData } from './smwe-navigation-menu.data';\r\n\r\ninterface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n mobileViewLabelText?: string;\r\n navOpen: boolean;\r\n}\r\n\r\ninterface IMenuItemDataClass extends IMenuItemData {\r\n className?: string;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenuView component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuView extends React.PureComponent {\r\n private supportedLevel: number = 3;\r\n private currentLevel: number = 0;\r\n private menuNode: React.RefObject;\r\n private pathName: string = '';\r\n private activeClassName: string = 'selected';\r\n private activeMenuItem: IMenuItemData = {};\r\n private activeSubMenuItem: IMenuItemData = {};\r\n\r\n constructor(props: INavigationMenuViewProps) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.state = { activeMenu: undefined, mobileViewLabelText: '', parentMenu: undefined, navOpen: false };\r\n this._closeSubmenu = this._closeSubmenu.bind(this);\r\n this._onMobNavTrigger = this._onMobNavTrigger.bind(this);\r\n }\r\n\r\n public componentDidMount(): void {\r\n document.body && document.body.addEventListener('mousedown', this._handleClickOutside);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n document.body && document.body.removeEventListener('mousedown', this._handleClickOutside, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { isMobileView, MenuList, Navigation } = this.props;\r\n // get current pathname\r\n if (process.env.CURRENT_ENVIRONMENT === 'web') {\r\n this.pathName = window.location.pathname;\r\n } else {\r\n this.pathName = this.props.context.request.url.requestUrl.pathname;\r\n }\r\n\r\n // for wine-shop links, only \"all wines\" page should make \"wine shop\" link active\r\n // TODO: \"wine shop\" menu link has different behavior, it doesn't get highlighted unless on the \"all wines\" page\r\n\r\n // if (this.pathName.startsWith('/fth/wine-shop/')) {\r\n // if (this.pathName.startsWith('/fth/wine-shop/5637149842.c') || this.pathName.startsWith('/fth/wine-shop/all-wines/5637149843.c')) {\r\n // // get \"wine shop\" menu item\r\n // this.props.menuItemData.forEach((item, index) => {\r\n // if (item.linkURL && item.linkURL.startsWith('/fth/wine-shop/')) {\r\n // this.activeMenuItem = item;\r\n // }\r\n // });\r\n // }\r\n // } else {\r\n this.props.menuItemData.forEach((item, index) => {\r\n const ItemPath = this._getPathNameFromURL(item.linkURL || '');\r\n item.subMenu && item.subMenu.forEach((subItem, subIndex) => {\r\n const subItemPath = this._getPathNameFromURL(subItem.linkURL || '');\r\n if (subItemPath === this.pathName) {\r\n this.activeMenuItem = item;\r\n this.activeSubMenuItem = subItem;\r\n }\r\n });\r\n if (ItemPath === this.pathName) {\r\n this.activeMenuItem = item;\r\n }\r\n });\r\n // }\r\n\r\n this.currentLevel = 1;\r\n return (\r\n \r\n \r\n \r\n \r\n {this._renderDisplay()}\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n private _getPathNameFromURL(linkURL: string): string {\r\n let pathName = '';\r\n try {\r\n // if linkURL is a full url\r\n pathName = new URL(linkURL).pathname;\r\n } catch {\r\n pathName = linkURL.split('?')[0];\r\n }\r\n return pathName;\r\n }\r\n\r\n private _onMobNavTrigger(): void {\r\n this.setState(state => ({\r\n navOpen: !state.navOpen\r\n }));\r\n }\r\n\r\n private _renderDisplay(): JSX.Element[] {\r\n const { ListItem, menuItemData } = this.props;\r\n const menuItemList: JSX.Element[] = [];\r\n menuItemData.forEach((item: IMenuItemData, index: number) => {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n });\r\n\r\n return menuItemList;\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\r\n if (this.props.isMobileView) {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n \r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n } else {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n }\r\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\r\n return (this._renderLinkMenuItem(menuItemData));\r\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\r\n return (this._renderSpanMenuItem(menuItemData));\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenus?: IMenuItemDataClass[], activeMenu?: number): JSX.Element | null {\r\n const { isMobileView, ListItem } = this.props;\r\n if (activeMenu && this.state.activeMenu !== activeMenu && !isMobileView) {\r\n return null;\r\n }\r\n\r\n if (!subMenus || subMenus.length === 0) {\r\n return null;\r\n }\r\n\r\n let levelClassName: string = '';\r\n const menuOptions = subMenus && subMenus.map((option: IMenuItemDataClass, idx: number) => {\r\n const hasOptions = (option.subMenu && option.subMenu.length > 0);\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && isMobileView) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\r\n } else {\r\n menuItem = (option.linkURL\r\n ? this._renderLinkMenuItem(option, idx)\r\n : this._renderSpanMenuItem(option)\r\n );\r\n }\r\n\r\n let subMenu;\r\n\r\n if (hasOptions) {\r\n this.currentLevel++;\r\n if (this.currentLevel <= this.supportedLevel - 1) {\r\n levelClassName = `level-${this.currentLevel.toString()}`;\r\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined);\r\n }\r\n }\r\n\r\n return (\r\n \r\n {menuItem}\r\n {subMenu}\r\n \r\n );\r\n });\r\n\r\n return (this._renderMenu(levelClassName, menuOptions, activeMenu));\r\n }\r\n\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n const { Button } = this.props;\r\n const isActive = (option === this.activeMenuItem) || (option === this.activeSubMenuItem);\r\n const activeClass = `${Button.className} ${isActive ? this.activeClassName : ''}`;\r\n\r\n return (\r\n this._mainNavClick(option) : this._handleDropdownToggle(option, activeMenu)}\r\n onMouseEnter={!this.props.isMobileView ? this._handleDropdownToggle(option, activeMenu) : false}\r\n onFocus={!this.props.isMobileView ? this._handleDropdownToggle(option, activeMenu) : false}\r\n aria-haspopup={true}\r\n aria-expanded={this.state.activeMenu && this.state.activeMenu === option.id ? true : false}\r\n data-parent={activeMenu}\r\n >\r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _mainNavClick = (option: IMenuItemData) => {\r\n const link = option.linkURL;\r\n if (link) {\r\n window.location.href = link;\r\n }\r\n };\r\n\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Link } = this.props;\r\n const isActive = (option === this.activeSubMenuItem) || (option === this.activeMenuItem);\r\n const activeClass = `${Link.className} ${isActive ? this.activeClassName : ''}`;\r\n\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Span } = this.props;\r\n return (\r\n {option.linkText}\r\n );\r\n }\r\n\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number): JSX.Element | null {\r\n const { MenuList } = this.props;\r\n this.currentLevel = 1;\r\n return (\r\n \r\n {menuOptions}\r\n \r\n );\r\n }\r\n\r\n private _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n let activeMenu;\r\n if(this.props.isMobileView) {\r\n activeMenu = (this.state.activeMenu && this.state.activeMenu === data.id!) ? undefined : data.id!;\r\n } else {\r\n activeMenu = data.id;\r\n }\r\n this.setState({\r\n activeMenu,\r\n parentMenu: parentId\r\n });\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _resetFocus = () => {\r\n if (this.props.isMobileView) {\r\n setTimeout(() => {\r\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\r\n }, 0);\r\n }\r\n };\r\n\r\n // tslint:disable-next-line:no-any\r\n private _handleClickOutside = (event: any) => {\r\n const burgerMenu:boolean = event.target.className === 'ms-header__nav-icon msc-btn';\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.target) && !burgerMenu) {\r\n this.setState({ navOpen: false });\r\n }\r\n };\r\n\r\n private _closeSubmenu(): void {\r\n if (!this.props.isMobileView) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n }\r\n}\r\n\r\nexport default NavigationMenuView;","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IHeaderViewProps } from '@msdyn365-commerce-modules/header';\nimport { Collapse, Drawer, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport { AsyncResult } from '@msdyn365-commerce/core';\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\n\nconst headerView: React.FC = props => {\n const {\n HeaderTag,\n HeaderContainer,\n HeaderTopBarContainer,\n Divider,\n } = props;\n return (\n \n \n \n {props.navIcon}\n {props.logo}\n {_renderReactFragment(props.search)}\n {props.preferredStore}\n {_renderAccountBlock(props, false)}\n {props.wishListIconDesktop}\n \n {props.cartIcon}\n {_renderReactFragment(props.siteOptions)}\n \n {_renderCollapseMenu(props)}\n \n {_renderReactFragment(props.menuBar)}\n \n \n \n );\n};\n\nfunction _renderCollapseMenu(props: IHeaderViewProps): JSX.Element | null {\n const {Divider, MobileMenuLinksContainer, mobileMenuCollapsed} = props;\n return (\n \n \n {_renderReactFragment(props.search)}\n {_renderMobileAccountBlock(props, true)}\n { props.wishListIconMobile }\n {props.siteOptions}\n \n \n {_renderReactFragment(props.menuBar)}\n \n );\n}\n\nconst renderCustomerName = (accountInformation: AsyncResult): React.ReactChild => {\n const customer = accountInformation && accountInformation.result;\n return (\n <>{customer ? customer.FirstName || customer.Name : ''}\n );\n};\n\nfunction _renderMobileAccountBlock(props: IHeaderViewProps, renderForMobile: boolean): JSX.Element | null {\n const {\n AccountInfoDropdownParentContainer,\n signOutLink,\n signInLink,\n data,\n accountLinks} = props;\n\n if (AccountInfoDropdownParentContainer) {\n const accountClassName = classnames('ms-header__drawer', AccountInfoDropdownParentContainer.className, renderForMobile ? 'account-mobile' : 'account-desktop');\n\n if (accountLinks) {\n return (\n \n
\n { accountLinks ? accountLinks.map((link: React.ReactNode) => link) : false }\n {signOutLink}\n
\n
\n );\n } else if (signInLink) {\n return (\n \n {signInLink}\n \n );\n }\n }\n return null;\n}\n\nfunction _renderAccountBlock(props: IHeaderViewProps, renderForMobile: boolean): JSX.Element | null {\n const {\n AccountInfoDropdownParentContainer,\n AccountInfoDropdownPopoverConentContainer,\n accountInfoDropdownButton,\n signOutLink,\n signInLink,\n accountLinks,\n } = props;\n\n if (AccountInfoDropdownParentContainer) {\n const accountClassName = classnames(AccountInfoDropdownParentContainer.className, renderForMobile ? 'account-mobile' : 'account-desktop');\n if (AccountInfoDropdownPopoverConentContainer) {\n return (\n \n {accountInfoDropdownButton}\n \n { accountLinks ? accountLinks.map((link: React.ReactNode) => link) : false }\n {signOutLink}\n \n \n );\n } else if (signInLink) {\n return (\n \n {signInLink}\n \n );\n }\n }\n\n return null;\n}\n\nfunction _renderReactFragment(items: React.ReactNode[]): JSX.Element | null {\n return (\n \n {items && items.length\n ? items.map((slot: React.ReactNode, index: number) => {\n return {slot};\n })\n : null}\n \n );\n}\n\nexport default headerView;","/*---------------------------------------------------------------------------------------------\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 {\r\n ICheckoutViewProps,\r\n ILineItem,\r\n ILineItemDeliveryGroup,\r\n ILineItems,\r\n IOrderSummary,\r\n IPickUpAtStore\r\n} from '@msdyn365-commerce-modules/checkout/dist/types';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport const PickUpAtStoreComponent: React.FC = ({ PickUpAtStore, label, location }) => (\r\n \r\n {label}\r\n {location}\r\n \r\n);\r\n\r\nexport const LineItemComponent: React.FC = ({ LineItem, item, pickUpAtStore }) => (\r\n \r\n {item}\r\n {pickUpAtStore && }\r\n \r\n);\r\n\r\nexport const LineItemGroupComponent: React.FC = ({ LineItemDeliveryGroup, LineItemList, heading, lineItems }) => (\r\n \r\n {heading}\r\n \r\n {lineItems.map(lineItem => (\r\n \r\n ))}\r\n \r\n \r\n);\r\n\r\nexport const LineItemsComponent: React.FC = ({ LineItems, Header, heading, editLink, itemsForPickup, itemsForShip }) => (\r\n \r\n \r\n {heading}\r\n {editLink}\r\n \r\n {itemsForPickup && }\r\n {itemsForShip && }\r\n \r\n);\r\n\r\nconst OrderSummaryComponent: React.FC = ({ heading, lines }) => (\r\n\r\n
\r\n {heading}\r\n
\r\n {lines && (\r\n <>\r\n {lines.subtotal}\r\n {lines.shipping}\r\n {lines.tax}\r\n {lines.totalDiscounts}\r\n {lines.loyalty}\r\n {lines.giftCard}\r\n {lines.orderTotal}\r\n \r\n )}\r\n
\r\n
\r\n);\r\n\r\nconst CheckoutView: React.FC = props => {\r\n const {\r\n canShow,\r\n checkoutProps,\r\n headerProps,\r\n bodyProps,\r\n mainProps,\r\n mainControlProps,\r\n sideProps,\r\n sideControlFirstProps,\r\n sideControlSecondProps,\r\n loading,\r\n alert,\r\n title,\r\n guidedForm,\r\n orderSummary,\r\n lineItems,\r\n placeOrderButton,\r\n keepShoppingButton\r\n } = props;\r\n\r\n return (\r\n \r\n {title}\r\n \r\n {loading}\r\n {alert}\r\n {canShow && (\r\n <>\r\n \r\n {guidedForm}\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n {orderSummary && }\r\n \r\n {/* {placeOrderButton}\r\n {keepShoppingButton} */}\r\n \r\n {lineItems && }\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default CheckoutView;\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 {\r\n ICheckoutViewProps,\r\n ILineItem,\r\n ILineItemDeliveryGroup,\r\n ILineItems,\r\n IOrderSummary,\r\n IPickUpAtStore\r\n} from '@msdyn365-commerce-modules/checkout/dist/types';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport const PickUpAtStoreComponent: React.FC = ({ PickUpAtStore, label, location }) => (\r\n \r\n {label}\r\n {location}\r\n \r\n);\r\n\r\nexport const LineItemComponent: React.FC = ({ LineItem, item, pickUpAtStore }) => (\r\n \r\n {item}\r\n {pickUpAtStore && }\r\n \r\n);\r\n\r\nexport const LineItemGroupComponent: React.FC = ({ LineItemDeliveryGroup, LineItemList, heading, lineItems }) => (\r\n \r\n {heading}\r\n \r\n {lineItems.map(lineItem => (\r\n \r\n ))}\r\n \r\n \r\n);\r\n\r\nexport const LineItemsComponent: React.FC = ({ LineItems, Header, heading, editLink, itemsForPickup, itemsForShip }) => (\r\n \r\n \r\n {heading}\r\n {editLink}\r\n \r\n {itemsForPickup && }\r\n {itemsForShip && }\r\n \r\n);\r\n\r\nconst OrderSummaryComponent: React.FC = ({ heading, lines }) => (\r\n\r\n
\r\n {heading}\r\n
\r\n {lines && (\r\n <>\r\n {lines.subtotal}\r\n {lines.shipping}\r\n {lines.tax}\r\n {lines.totalDiscounts}\r\n {lines.loyalty}\r\n {lines.giftCard}\r\n {lines.orderTotal}\r\n \r\n )}\r\n
\r\n
\r\n);\r\n\r\nconst CheckoutView: React.FC = props => {\r\n const {\r\n canShow,\r\n checkoutProps,\r\n headerProps,\r\n bodyProps,\r\n mainProps,\r\n mainControlProps,\r\n sideProps,\r\n sideControlFirstProps,\r\n sideControlSecondProps,\r\n loading,\r\n alert,\r\n title,\r\n guidedForm,\r\n orderSummary,\r\n lineItems,\r\n placeOrderButton,\r\n keepShoppingButton\r\n } = props;\r\n\r\n return (\r\n \r\n {title}\r\n \r\n {loading}\r\n {alert}\r\n {canShow && (\r\n <>\r\n \r\n {guidedForm}\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n {orderSummary && }\r\n \r\n {/* {placeOrderButton}\r\n {keepShoppingButton} */}\r\n \r\n {lineItems && }\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default CheckoutView;\r\n","import {\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: {tag: Modal, className: 'ms-loyalty-terms__modal', toggle: props.onToggle, applicationNode: 'renderPage', isOpen: props.isOpen, returnFocusRef: props.returnRef},\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 submitButton: ,\n heading:

{props.resources.loyaltyTermsHeading}

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

{props.resources.loyaltyAgreeToTerms}

\n };\n};","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { GetLoyaltyCardInput, issueLoyalty, IssueLoyaltyInput } from '@msdyn365-commerce-modules/retail-actions';\nimport { getLoyaltyCardAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\n\nimport {\n Button,\n getTelemetryObject,\n IModuleProps,\n ITelemetryContent\n} from '@msdyn365-commerce-modules/utilities';\nimport { getUrlSync } from '@msdyn365-commerce/core';\nimport classname from 'classnames';\nimport * as React from 'react';\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 toggleRef: React.RefObject;\n private 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(this.props.context.request.telemetryPageName!, this.props.friendlyName, this.props.telemetry);\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 (let i = 0; i < qsps.length; i++) {\n const splitQsp = qsps[i].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 render(): JSX.Element | null {\n const {\n config: { className, hideToggle },\n resources,\n slots: { serviceTerms },\n data: { loyaltyCard },\n context: {\n request: {\n user: {\n isAuthenticated\n }\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 modal: isAuthenticated && loyaltyCard.result && loyaltyCard.result.CardNumber === undefined && 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(new GetLoyaltyCardInput(this.props.context.request.apiSettings), fullCard);\n })\n .catch((error: Error) => {\n this.props.context.actionContext.update(new GetLoyaltyCardInput(this.props.context.request.apiSettings), card);\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;","/*---------------------------------------------------------------------------------------------\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 { IMenuItemData, INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\ninterface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n mobileViewLabelText?: string;\r\n navOpen: boolean;\r\n}\r\n/**\r\n *\r\n * NavigationMenuView component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuView extends React.PureComponent {\r\n private supportedLevel: number = 3;\r\n private currentLevel: number = 0;\r\n private menuNode: React.RefObject;\r\n private pathName: string = '';\r\n private activeClassName: string = 'selected';\r\n private activeMenuItem: IMenuItemData = {};\r\n private activeSubMenuItem: IMenuItemData = {};\r\n constructor(props: INavigationMenuViewProps) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.state = { activeMenu: undefined, mobileViewLabelText: '', parentMenu: undefined, navOpen: false };\r\n this._closeSubmenu = this._closeSubmenu.bind(this);\r\n this._onMobNavTrigger = this._onMobNavTrigger.bind(this);\r\n }\r\n\r\n public componentDidMount(): void {\r\n document.body && document.body.addEventListener('click', this._handleClickOutside);\r\n }\r\n public componentWillUnmount(): void {\r\n document.body && document.body.removeEventListener('click', this._handleClickOutside, false);\r\n }\r\n public render(): JSX.Element | null {\r\n const { isMobileView, MenuList, Navigation } = this.props;\r\n // get current pathname\r\n if (process.env.CURRENT_ENVIRONMENT === 'web') {\r\n this.pathName = window.location.pathname;\r\n } else {\r\n this.pathName = this.props.context.request.url.requestUrl.pathname;\r\n }\r\n this.props.menuItemData.forEach((item, index) => {\r\n item.subMenu && item.subMenu.forEach((subItem, subIndex) => {\r\n const subItemPath = this._getPathNameFromURL(subItem.linkURL || '');\r\n if (subItemPath === this.pathName) {\r\n this.activeMenuItem = item;\r\n this.activeSubMenuItem = subItem;\r\n }\r\n });\r\n });\r\n this.currentLevel = 1;\r\n return (\r\n \r\n \r\n \r\n \r\n {this._renderDisplay()}\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n private _getPathNameFromURL(linkURL: string): string {\r\n let pathName = '';\r\n try {\r\n pathName = new URL(linkURL).pathname;\r\n } catch {\r\n pathName = linkURL.split('?')[0];\r\n }\r\n return pathName;\r\n }\r\n private _onMobNavTrigger(): void {\r\n this.setState(state => ({\r\n navOpen: !state.navOpen\r\n }));\r\n }\r\n\r\n private _renderDisplay(): JSX.Element[] {\r\n const { ListItem, menuItemData } = this.props;\r\n const menuItemList: JSX.Element[] = [];\r\n menuItemData.forEach((item: IMenuItemData, index: number) => {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n });\r\n\r\n return menuItemList;\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n \r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n \r\n );\r\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\r\n return (this._renderLinkMenuItem(menuItemData));\r\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\r\n return (this._renderSpanMenuItem(menuItemData));\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number): JSX.Element | null {\r\n const { isMobileView, ListItem } = this.props;\r\n if (activeMenu && this.state.activeMenu !== activeMenu && !isMobileView) {\r\n return null;\r\n }\r\n\r\n if (!subMenus || subMenus.length === 0) {\r\n return null;\r\n }\r\n\r\n let levelClassName: string = '';\r\n const menuOptions = subMenus && subMenus.map((option: IMenuItemData, idx: number) => {\r\n const hasOptions = (option.subMenu && option.subMenu.length > 0);\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && isMobileView) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\r\n } else {\r\n menuItem = (option.linkURL\r\n ? this._renderLinkMenuItem(option, idx)\r\n : this._renderSpanMenuItem(option)\r\n );\r\n }\r\n\r\n let subMenu;\r\n\r\n if (hasOptions) {\r\n this.currentLevel++;\r\n if (this.currentLevel <= this.supportedLevel - 1) {\r\n levelClassName = `level-${this.currentLevel.toString()}`;\r\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined);\r\n }\r\n }\r\n\r\n return (\r\n \r\n {menuItem}\r\n {subMenu}\r\n \r\n );\r\n });\r\n\r\n return (this._renderMenu(levelClassName, menuOptions, activeMenu));\r\n }\r\n\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n const { Button } = this.props;\r\n const isActive = option === this.activeMenuItem || option === this.activeSubMenuItem;\r\n const activeClass = `${Button.className} ${isActive ? this.activeClassName : ''}`;\r\n\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Link } = this.props;\r\n const isActive = option === this.activeSubMenuItem;\r\n const activeClass = `${Link.className} ${isActive ? this.activeClassName : ''}`;\r\n\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Span } = this.props;\r\n return (\r\n {option.linkText}\r\n );\r\n }\r\n\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number): JSX.Element | null {\r\n const { MenuList } = this.props;\r\n this.currentLevel = 1;\r\n return (\r\n \r\n {menuOptions}\r\n \r\n );\r\n }\r\n\r\n private _handleDropdownToggle = (data: IMenuItemData, parentId?: number, type?: string) => () => {\r\n if(this.props.isMobileView && type === 'onFocus') {\r\n null;\r\n } else {\r\n let activeMenu = data.id;\r\n if (this.props.isMobileView) {\r\n activeMenu = (this.state.activeMenu && this.state.activeMenu === data.id!) ? undefined : data.id!;\r\n }\r\n\r\n this.setState({\r\n activeMenu,\r\n parentMenu: parentId\r\n });\r\n\r\n this._resetFocus();\r\n }\r\n };\r\n\r\n private _resetFocus = () => {\r\n if (this.props.isMobileView) {\r\n setTimeout(() => {\r\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\r\n }, 0);\r\n }\r\n };\r\n\r\n // tslint:disable-next-line:no-any\r\n private _handleClickOutside = (event: any) => {\r\n const burgerMenu: boolean = event.target.className === 'ms-header__nav-icon msc-btn';\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.target) && !burgerMenu) {\r\n this.setState({ navOpen: false });\r\n }\r\n this._resetFocus();\r\n };\r\n\r\n private _closeSubmenu(): void {\r\n if (!this.props.isMobileView) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n }\r\n}\r\n\r\nexport default NavigationMenuView;","/*---------------------------------------------------------------------------------------------\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 {\r\n ICheckoutViewProps,\r\n ILineItem,\r\n ILineItemDeliveryGroup,\r\n ILineItems,\r\n IOrderSummary,\r\n IPickUpAtStore\r\n} from '@msdyn365-commerce-modules/checkout/dist/types';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport const PickUpAtStoreComponent: React.FC = ({ PickUpAtStore, label, location }) => (\r\n \r\n {label}\r\n {location}\r\n \r\n);\r\n\r\nexport const LineItemComponent: React.FC = ({ LineItem, item, pickUpAtStore }) => (\r\n \r\n {item}\r\n {pickUpAtStore && }\r\n \r\n);\r\n\r\nexport const LineItemGroupComponent: React.FC = ({ LineItemDeliveryGroup, LineItemList, heading, lineItems }) => (\r\n \r\n {heading}\r\n \r\n {lineItems.map(lineItem => (\r\n \r\n ))}\r\n \r\n \r\n);\r\n\r\nexport const LineItemsComponent: React.FC = ({ LineItems, Header, heading, editLink, itemsForPickup, itemsForShip }) => (\r\n \r\n \r\n {heading}\r\n {editLink}\r\n \r\n {itemsForPickup && }\r\n {itemsForShip && }\r\n \r\n);\r\n\r\nconst OrderSummaryComponent: React.FC = ({ heading, lines }) => (\r\n\r\n
\r\n {heading}\r\n
\r\n {lines && (\r\n <>\r\n {lines.subtotal}\r\n {lines.shipping}\r\n {lines.tax}\r\n {lines.totalDiscounts}\r\n {lines.loyalty}\r\n {lines.giftCard}\r\n {lines.orderTotal}\r\n \r\n )}\r\n
\r\n
\r\n);\r\n\r\nconst CheckoutView: React.FC = props => {\r\n const {\r\n canShow,\r\n checkoutProps,\r\n headerProps,\r\n bodyProps,\r\n mainProps,\r\n mainControlProps,\r\n sideProps,\r\n sideControlFirstProps,\r\n sideControlSecondProps,\r\n loading,\r\n alert,\r\n title,\r\n guidedForm,\r\n orderSummary,\r\n lineItems,\r\n placeOrderButton,\r\n keepShoppingButton\r\n } = props;\r\n\r\n return (\r\n \r\n {title}\r\n \r\n {loading}\r\n {alert}\r\n {canShow && (\r\n <>\r\n \r\n {guidedForm}\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n {orderSummary && }\r\n \r\n {/* {placeOrderButton}\r\n {keepShoppingButton} */}\r\n \r\n {lineItems && }\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default CheckoutView;\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 {\r\n ICheckoutViewProps,\r\n ILineItem,\r\n ILineItemDeliveryGroup,\r\n ILineItems,\r\n IOrderSummary,\r\n IPickUpAtStore\r\n} from '@msdyn365-commerce-modules/checkout/dist/types';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport const PickUpAtStoreComponent: React.FC = ({ PickUpAtStore, label, location }) => (\r\n \r\n {label}\r\n {location}\r\n \r\n);\r\n\r\nexport const LineItemComponent: React.FC = ({ LineItem, item, pickUpAtStore }) => (\r\n \r\n {item}\r\n {pickUpAtStore && }\r\n \r\n);\r\n\r\nexport const LineItemGroupComponent: React.FC = ({ LineItemDeliveryGroup, LineItemList, heading, lineItems }) => (\r\n \r\n {heading}\r\n \r\n {lineItems.map(lineItem => (\r\n \r\n ))}\r\n \r\n \r\n);\r\n\r\nexport const LineItemsComponent: React.FC = ({ LineItems, Header, heading, editLink, itemsForPickup, itemsForShip }) => (\r\n \r\n \r\n {heading}\r\n {editLink}\r\n \r\n {itemsForPickup && }\r\n {itemsForShip && }\r\n \r\n);\r\n\r\nconst OrderSummaryComponent: React.FC = ({ heading, lines }) => (\r\n\r\n
\r\n {heading}\r\n
\r\n {lines && (\r\n <>\r\n {lines.subtotal}\r\n {lines.shipping}\r\n {lines.tax}\r\n {lines.totalDiscounts}\r\n {lines.loyalty}\r\n {lines.giftCard}\r\n {lines.orderTotal}\r\n \r\n )}\r\n
\r\n
\r\n);\r\n\r\nconst CheckoutView: React.FC = props => {\r\n const {\r\n canShow,\r\n checkoutProps,\r\n headerProps,\r\n bodyProps,\r\n mainProps,\r\n mainControlProps,\r\n sideProps,\r\n sideControlFirstProps,\r\n sideControlSecondProps,\r\n loading,\r\n alert,\r\n title,\r\n guidedForm,\r\n orderSummary,\r\n lineItems,\r\n placeOrderButton,\r\n keepShoppingButton\r\n } = props;\r\n\r\n return (\r\n \r\n {title}\r\n \r\n {loading}\r\n {alert}\r\n {canShow && (\r\n <>\r\n \r\n {guidedForm}\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n {orderSummary && }\r\n \r\n {/* {placeOrderButton}\r\n {keepShoppingButton} */}\r\n \r\n {lineItems && }\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default CheckoutView;\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 { IMenuItemData, INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\ninterface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n mobileViewLabelText?: string;\r\n navOpen: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenuView component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuView extends React.PureComponent {\r\n private supportedLevel: number = 3;\r\n private currentLevel: number = 0;\r\n private menuNode: React.RefObject;\r\n private pathName: string = '';\r\n private activeClassName: string = 'selected';\r\n private activeMenuItem: IMenuItemData = {};\r\n private activeSubMenuItem: IMenuItemData = {};\r\n\r\n constructor(props: INavigationMenuViewProps) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.state = { activeMenu: undefined, mobileViewLabelText: '', parentMenu: undefined, navOpen: false };\r\n this._closeSubmenu = this._closeSubmenu.bind(this);\r\n this._onMobNavTrigger = this._onMobNavTrigger.bind(this);\r\n }\r\n\r\n public componentDidMount(): void {\r\n document.body && document.body.addEventListener('click', this._handleClickOutside);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n document.body && document.body.removeEventListener('click', this._handleClickOutside, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { isMobileView, MenuList, Navigation } = this.props;\r\n // get current pathname\r\n if (process.env.CURRENT_ENVIRONMENT === 'web') {\r\n this.pathName = window.location.pathname;\r\n } else {\r\n this.pathName = this.props.context.request.url.requestUrl.pathname;\r\n }\r\n\r\n this.props.menuItemData.forEach((item, index) => {\r\n const ItemPath = this._getPathNameFromURL(item.linkURL || '');\r\n item.subMenu && item.subMenu.forEach((subItem, subIndex) => {\r\n const subItemPath = this._getPathNameFromURL(subItem.linkURL || '');\r\n if (subItemPath === this.pathName) {\r\n this.activeMenuItem = item;\r\n this.activeSubMenuItem = subItem;\r\n }\r\n });\r\n if (ItemPath === this.pathName) {\r\n this.activeMenuItem = item;\r\n }\r\n });\r\n\r\n this.currentLevel = 1;\r\n return (\r\n \r\n \r\n \r\n \r\n {this._renderDisplay()}\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n private _getPathNameFromURL(linkURL: string): string {\r\n let pathName = '';\r\n try {\r\n // if linkURL is a full url\r\n pathName = new URL(linkURL).pathname;\r\n } catch {\r\n pathName = linkURL.split('?')[0];\r\n }\r\n return pathName;\r\n }\r\n\r\n private _onMobNavTrigger(): void {\r\n this.setState(state => ({\r\n navOpen: !state.navOpen\r\n }));\r\n }\r\n\r\n private _renderDisplay(): JSX.Element[] {\r\n const { ListItem, menuItemData } = this.props;\r\n const menuItemList: JSX.Element[] = [];\r\n menuItemData.forEach((item: IMenuItemData, index: number) => {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n });\r\n\r\n return menuItemList;\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\r\n if (this.props.isMobileView) {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n \r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n } else {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n }\r\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\r\n return (this._renderLinkMenuItem(menuItemData));\r\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\r\n return (this._renderSpanMenuItem(menuItemData));\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number): JSX.Element | null {\r\n const { isMobileView, ListItem } = this.props;\r\n\r\n if (!subMenus || subMenus.length === 0) {\r\n return null;\r\n }\r\n\r\n let levelClassName: string = '';\r\n const menuOptions = subMenus && subMenus.map((option: IMenuItemData, idx: number) => {\r\n const hasOptions = (option.subMenu && option.subMenu.length > 0);\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && isMobileView) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\r\n } else {\r\n menuItem = (option.linkURL\r\n ? this._renderLinkMenuItem(option, idx)\r\n : this._renderSpanMenuItem(option)\r\n );\r\n }\r\n\r\n let subMenu;\r\n\r\n if (hasOptions) {\r\n this.currentLevel++;\r\n if (this.currentLevel <= this.supportedLevel - 1) {\r\n levelClassName = `level-${this.currentLevel.toString()}`;\r\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined);\r\n }\r\n }\r\n\r\n return (\r\n \r\n {menuItem}\r\n {subMenu}\r\n \r\n );\r\n });\r\n\r\n return (this._renderMenu(levelClassName, menuOptions, activeMenu));\r\n }\r\n\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n const { Button } = this.props;\r\n const isActive = (option === this.activeMenuItem) || (option === this.activeSubMenuItem);\r\n const activeClass = `${Button.className} ${isActive ? this.activeClassName : ''} ${this.state.activeMenu && this.state.activeMenu === option.id ? 'nav-open' : 'nav-closed'}`;\r\n\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Link } = this.props;\r\n const isActive = (option === this.activeSubMenuItem) || (option === this.activeMenuItem);\r\n const activeClass = `${Link.className} ${isActive ? this.activeClassName : ''}`;\r\n\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Span } = this.props;\r\n return (\r\n {option.linkText}\r\n );\r\n }\r\n\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number): JSX.Element | null {\r\n const { MenuList } = this.props;\r\n this.currentLevel = 1;\r\n return (\r\n \r\n {menuOptions}\r\n \r\n );\r\n }\r\n\r\n private _handleFocus = (data: IMenuItemData, parentId?: number) => () => {\r\n if (!this.props.isMobileView) {\r\n this.setState({\r\n activeMenu: data.id!,\r\n parentMenu: parentId\r\n });\r\n }\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n const activeMenu = (this.state.activeMenu && this.state.activeMenu === data.id!) ? undefined : data.id!;\r\n this.setState({\r\n activeMenu,\r\n parentMenu: parentId\r\n });\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _resetFocus = () => {\r\n if (this.props.isMobileView) {\r\n setTimeout(() => {\r\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\r\n }, 0);\r\n }\r\n };\r\n\r\n // tslint:disable-next-line:no-any\r\n private _handleClickOutside = (event: any) => {\r\n const burgerMenu:boolean = event.target.className === 'ms-header__nav-icon msc-btn';\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.target) && !burgerMenu) {\r\n this.setState({ navOpen: false });\r\n }\r\n };\r\n\r\n private _closeSubmenu(): void {\r\n if (!this.props.isMobileView) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n }\r\n}\r\n\r\nexport default NavigationMenuView;","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as React from 'react';\n\nexport interface IAccountLoyaltyLabel {\n className?: string;\n text?: string | number;\n}\n\nexport const AccountLoyaltyLabel: React.FC = ({ className, text }) => (\n

{ text }

\n);\n\nexport interface IAccountLoyaltyModalLabel {\n className?: string;\n text?: string | number;\n labelFor?: string;\n}\n\nexport const AccountLoyaltyModalLabel: React.FC = ({ className, text, labelFor }) => (\n \n);\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Button, format, getPayloadObject, getTelemetryAttributes, getTelemetryObject, IModuleProps, INodeProps, IPayLoad, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { LoyaltyCard, LoyaltyRewardPoint, LoyaltyRewardPointActivity } from '@msdyn365-commerce/retail-proxy';\nimport { getLoyaltyRewardPointActivityTimelineAsync, getLoyaltyRewardPointsExpiringSoonAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport classnames from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\nimport { IAccountLoyaltyData } from './account-loyalty.data';\nimport { IAccountLoyaltyProps } from './account-loyalty.props.autogenerated';\nimport { AccountLoyaltyLabel, AccountLoyaltyModalLabel } from './components';\n\nexport interface IAccountLoyaltyViewProps extends IAccountLoyaltyProps<{}> {\n AccountLoyalty: IModuleProps;\n className: string;\n totalPoints: number;\n heading?: React.ReactNode;\n Info: INodeProps;\n infoLabel: React.ReactNode;\n cardNumber: React.ReactNode;\n joinDate: React.ReactNode;\n Points: INodeProps;\n pointsLabel: React.ReactNode;\n points: React.ReactNode;\n Breakdown: INodeProps;\n RewardPoints: INodeProps;\n PointsBreakdown: INodeProps;\n rewardPoints?: IAccountLoyaltyRewardPointProps[];\n Button: INodeProps;\n homeButton: React.ReactNode;\n pointsModal: IAccountLoyaltyModalProps;\n}\n\nexport interface IAccountLoyaltyState {\n isModalOpen: boolean;\n currentModalData?: LoyaltyRewardPoint;\n isModalExpiring: boolean;\n modalID: string;\n currentFocus?: React.RefObject;\n pointsActivity: LoyaltyRewardPointActivity[] | undefined;\n}\n\nexport interface IAccountLoyaltyRewardPointProps {\n label: React.ReactNode;\n availableModalLabel: React.ReactNode;\n availableModalTrigger: React.ReactNode;\n expiringModalLabel: React.ReactNode;\n expiringModalTrigger: React.ReactNode;\n}\n\nexport type horizontalModalPosition = 'left' | 'center' | 'right';\nexport type verticalModalPosition = 'top' | 'center' | 'bottom';\n\nexport interface IAccountLoyaltyModalProps {\n isOpen: boolean;\n horizontalPosition?: horizontalModalPosition;\n verticalPosition?: verticalModalPosition;\n modalClassName?: string;\n modalHeaderClassName?: string;\n modalHeader?: string;\n modalBodyClassName?: string;\n ModalBodyTop: INodeProps;\n pointsDescription?: React.ReactNode;\n totalPoints?: React.ReactNode;\n ModalBodyHeaders: INodeProps;\n date?: React.ReactNode;\n balanceLabel?: React.ReactNode;\n rewardPointsActivity?: IAccountLoyaltyActivityProps[];\n returnFocusRef?: React.RefObject;\n onClose(): void;\n}\n\nexport interface IAccountLoyaltyActivityProps {\n Activity: INodeProps;\n activityType: React.ReactNode;\n activityDate: React.ReactNode;\n activityPoints: React.ReactNode;\n}\n\nexport interface IProps extends IAccountLoyaltyProps { }\n\n/**\n *\n * AccountLoyalty component\n * @extends {React.Component>}\n */\n@observer\nclass AccountLoyalty extends React.PureComponent {\n private _buttonAvailableRef: React.RefObject;\n private _buttonExpireRef: React.RefObject;\n private telemetryContent?: ITelemetryContent;\n private payLoad: IPayLoad;\n\n constructor(props: IAccountLoyaltyProps) {\n super(props);\n this._buttonAvailableRef = React.createRef();\n this._buttonExpireRef = React.createRef();\n this.state = {\n isModalOpen: false,\n currentModalData: undefined,\n isModalExpiring: false,\n modalID: '',\n pointsActivity: undefined\n };\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!, this.props.friendlyName, this.props.telemetry);\n this.payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.BackToShopping);\n }\n\n public render(): JSX.Element | null {\n const { className, heading } = this.props.config;\n const { loyaltyCard } = this.props.data;\n const { loyaltyCardLabel, totalAvailablePointsLabel, backToShoppingText } = this.props.resources;\n const { actionContext } = this.props.context;\n const { isModalOpen } = this.state;\n const backToShopAttributes = getTelemetryAttributes(this.telemetryContent!, this.payLoad);\n\n if (!loyaltyCard || !loyaltyCard.result || !loyaltyCard.result.CardNumber) {\n this.props.context.telemetry.error('Loyalty card content is empty, module wont render');\n return null;\n }\n\n const loyaltyCardData = loyaltyCard.result;\n const rewardPoints = loyaltyCard && loyaltyCardData.RewardPoints;\n const homeLink = Msdyn365.getUrlSync('home', actionContext) || '';\n\n const viewProps = {\n ...this.props,\n AccountLoyalty: {\n moduleProps: this.props,\n className: classnames('ms-account-loyalty', className),\n },\n totalPoints: rewardPoints && this._getTotalPoints(),\n className: classnames('msc-account-loyalty', className),\n rewardPoints: loyaltyCardData.RewardPoints && loyaltyCardData.RewardPoints.length > 0 && this._renderRewardPoints(loyaltyCardData),\n pointsModal: isModalOpen && this._renderModal() || { isOpen: false, returnFocusRef: this.state.currentFocus },\n Info: { className: 'ms-account-loyalty__info' },\n Points: { className: 'ms-account-loyalty__points' },\n Breakdown: { className: 'ms-account-loyalty__breakdown' },\n RewardPoints: { className: 'ms-account-loyalty__reward-points' },\n PointsBreakdown: { className: 'ms-account-loyalty__point-breakdown' },\n Button: { className: 'ms-account-loyalty__link' },\n heading: heading &&\n (\n \n ),\n\n // account info\n infoLabel:\n (\n \n ),\n cardNumber:\n (\n \n ),\n joinDate:\n (\n \n ),\n\n // points\n pointsLabel:\n (\n \n ),\n points: rewardPoints &&\n (\n \n ),\n\n homeButton: rewardPoints &&\n (\n \n { backToShoppingText }\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 private _formatJoinDate(date: Date): string {\n return format(this.props.resources.joinDateFormatted,\n new Intl.DateTimeFormat(this.props.context.actionContext.requestContext.locale, { month: 'long', day: 'numeric', year: 'numeric' }).format(new Date(date)));\n }\n\n private _renderRewardPoints(loyaltyCard: LoyaltyCard): IAccountLoyaltyRewardPointProps[] {\n return loyaltyCard.RewardPoints!.map((loyaltyPoints, index) => {\n const availableId = loyaltyPoints.RewardPointId && `${ loyaltyPoints.RewardPointId }-available-${ index }` || 'available-points';\n const expiringId = loyaltyPoints.RewardPointId && `${ loyaltyPoints.RewardPointId }-expiring-${ index }` || 'expiring-points';\n const { availablePointsLabel, expiringPointsFormatLabel } = this.props.resources;\n this.payLoad.contentAction.etext = TelemetryConstant.AvailablePoints;\n const availablePointsAttributes = getTelemetryAttributes(this.telemetryContent!, this.payLoad);\n this.payLoad.contentAction.etext = TelemetryConstant.ExpiringPoints;\n const expiringPointsAttributes = getTelemetryAttributes(this.telemetryContent!, this.payLoad);\n\n return ({\n label:\n (\n \n ),\n availableModalLabel: loyaltyPoints.ActivePoints !== undefined &&\n (\n \n ),\n availableModalTrigger: loyaltyPoints.ActivePoints !== undefined &&\n (\n \n {loyaltyPoints.ActivePoints.toString()}\n \n ),\n expiringModalLabel: loyaltyPoints.PointsExpiringSoon !== undefined &&\n (\n \n ),\n expiringModalTrigger: loyaltyPoints.PointsExpiringSoon !== undefined &&\n (\n \n {loyaltyPoints.PointsExpiringSoon.toString()}\n \n )\n });\n });\n }\n\n private _renderModal(): IAccountLoyaltyModalProps | null {\n const { totalAvailablePointsLabel, loyaltyActivityDateLabel, loyaltyActivityBalanceLabel } = this.props.resources;\n const { isModalOpen, currentModalData } = this.state;\n\n if (!isModalOpen || !currentModalData) {\n // return empty modal\n this.props.context.telemetry.error('Account loyalty modal content is empty, module wont render');\n return null;\n }\n\n return {\n isOpen: isModalOpen,\n returnFocusRef: this.state.currentFocus,\n horizontalPosition: 'center',\n verticalPosition: 'center',\n modalClassName: 'ms-account-loyalty__points-modal',\n modalHeaderClassName: 'ms-account-loyalty__points-modal-header',\n modalHeader: currentModalData.Description || '',\n modalBodyClassName: 'ms-account-loyalty__points-modal-body',\n ModalBodyTop: { className: 'ms-account-loyalty__points-modal-body-top' },\n ModalBodyHeaders: { className: 'ms-account-loyalty__points-modal-body-header' },\n rewardPointsActivity: this._renderPointsActivity(),\n pointsDescription:\n (\n \n ),\n totalPoints:\n (\n \n ),\n date:\n (\n \n ),\n balanceLabel:\n (\n \n ),\n onClose: this._closeModal\n };\n }\n\n private _getTotalPoints(): number {\n const rewardPoints = this.props.data.loyaltyCard.result && this.props.data.loyaltyCard.result.RewardPoints;\n\n let total = 0;\n rewardPoints!.forEach(loyaltyPoints => {\n total += loyaltyPoints.ActivePoints || 0;\n });\n\n return total;\n }\n\n private _getPoints(): string {\n const { currentModalData, isModalExpiring } = this.state;\n\n return `${(isModalExpiring ? currentModalData!.PointsExpiringSoon : currentModalData!.ActivePoints) || 0}`;\n }\n\n private _renderPointsActivity(): IAccountLoyaltyActivityProps[] | undefined {\n const { pointsActivity } = this.state;\n\n if (!pointsActivity) {\n this.props.context.telemetry.error('Points activity content is empty, module wont render');\n return undefined;\n }\n\n return pointsActivity.map((activity) => {\n return ({\n Activity: { className: 'ms-account-loyalty__points-modal-activity' },\n activityType:\n (\n \n ),\n activityDate:\n (\n \n ),\n activityPoints:\n (\n \n )\n });\n });\n }\n\n private _parseDate(date: Date | string): Date {\n /* Dates for loyalty are coming as formatted strings yyyy-mm-ddT:00:00.000z\n Javascript was interpreting this as an iso format, thus causing the wrong date to be rendered */\n if (typeof date === 'string') {\n let dateString = date.toString();\n dateString = dateString.replace(/-/g, '/');\n dateString = dateString.substring(0, 10);\n return new Date(dateString);\n } else {\n return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());\n }\n }\n\n private _getTimelineType(pointActivity: LoyaltyRewardPointActivity): string {\n if (pointActivity.LoyaltyRewardPointTimelineEntryType) {\n return pointActivity.LoyaltyRewardPointTimelineEntryType;\n }\n\n const { earnedPointsLabel, redeemedPointsLabel, adjustedPointsLabel, refundedPointsLabel } = this.props.resources;\n switch (pointActivity.ExtensibleLoyaltyRewardPointActivityEntryTypeValue) {\n case 1:\n return earnedPointsLabel;\n case 2:\n return refundedPointsLabel;\n case 3:\n return redeemedPointsLabel;\n case 5:\n return adjustedPointsLabel;\n default:\n return '';\n }\n }\n\n private _populateModalData = (focusRef: React.RefObject, loyaltyCard: LoyaltyCard, currentLoyaltyPoints: LoyaltyRewardPoint, expiring: boolean) => () => {\n if (!loyaltyCard || !loyaltyCard.CardNumber || !currentLoyaltyPoints.RewardPointId) {\n this.props.context.telemetry.error('Modal data is empty, module wont render');\n return null;\n }\n\n const { actionContext } = this.props.context;\n // open modal\n this.setState({\n isModalOpen: true,\n currentModalData: currentLoyaltyPoints,\n isModalExpiring: expiring,\n modalID: '',\n currentFocus: focusRef,\n });\n\n if (expiring) {\n getLoyaltyRewardPointsExpiringSoonAsync({ callerContext: actionContext, queryResultSettings: {} }, loyaltyCard.CardNumber, currentLoyaltyPoints.RewardPointId, 30)\n .then((points: LoyaltyRewardPointActivity[]) => {\n this.setState({pointsActivity: points});\n })\n .catch((error: Error) => {\n this.props.telemetry.exception(error);\n this.props.telemetry.debug('Failed to get reward point activity');\n });\n } else {\n getLoyaltyRewardPointActivityTimelineAsync({ callerContext: actionContext, queryResultSettings: {} }, loyaltyCard.CardNumber, currentLoyaltyPoints.RewardPointId)\n .then((points: LoyaltyRewardPointActivity[]) => {\n this.setState({pointsActivity: points});\n })\n .catch((error: Error) => {\n this.props.telemetry.error(error.message);\n this.props.telemetry.debug('Failed to get reward point activity');\n });\n }\n\n return;\n }\n\n private _closeModal = () => {\n this.setState({\n isModalOpen: false,\n currentModalData: undefined,\n pointsActivity: undefined\n });\n }\n}\n\nexport default AccountLoyalty;\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 { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { INavigationMenuViewProps } from '../../../modules/smwe-navigation-menu/./smwe-navigation-menu';\r\nimport { IMenuItemData } from '../../../modules/smwe-navigation-menu/./smwe-navigation-menu.data';\r\nimport { ISmweNavigationMenuProps } from '../definition-extensions/smwe-navigation-menu.ext.props.autogenerated';\r\n\r\ninterface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n mobileViewLabelText?: string;\r\n navOpen: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenuView component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuView extends React.PureComponent, INavigationState> {\r\n private supportedLevel: number = 3;\r\n private currentLevel: number = 0;\r\n private menuNode: React.RefObject;\r\n private pathName: string = '';\r\n private activeClassName: string = 'selected';\r\n private activeMenuItem: IMenuItemData = {};\r\n private activeSubMenuItem: IMenuItemData = {};\r\n\r\n constructor(props: INavigationMenuViewProps & ISmweNavigationMenuProps<{}>) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.state = {\r\n activeMenu: undefined,\r\n mobileViewLabelText: '',\r\n parentMenu: undefined,\r\n navOpen: false\r\n };\r\n this._closeSubmenu = this._closeSubmenu.bind(this);\r\n this._onMobNavTrigger = this._onMobNavTrigger.bind(this);\r\n }\r\n\r\n public componentDidMount(): void {\r\n document.body && document.body.addEventListener('mousedown', this._handleClickOutside);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n document.body && document.body.removeEventListener('mousedown', this._handleClickOutside, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { isMobileView, MenuList, Navigation } = this.props;\r\n const className = this.props.config.className;\r\n // get current pathname\r\n if (process.env.CURRENT_ENVIRONMENT === 'web') {\r\n this.pathName = window.location.pathname;\r\n } else {\r\n this.pathName = this.props.context.request.url.requestUrl.pathname;\r\n }\r\n\r\n this.props.menuItemData.forEach((item, index) => {\r\n const ItemPath = this._getPathNameFromURL(item.linkURL || '');\r\n item.subMenu && item.subMenu.forEach((subItem, subIndex) => {\r\n const subItemPath = this._getPathNameFromURL(subItem.linkURL || '');\r\n if (subItemPath === this.pathName) {\r\n this.activeMenuItem = item;\r\n this.activeSubMenuItem = subItem;\r\n }\r\n });\r\n if (ItemPath === this.pathName) {\r\n this.activeMenuItem = item;\r\n }\r\n });\r\n\r\n this.currentLevel = 1;\r\n return (\r\n \r\n \r\n \r\n \r\n {this._renderDisplay()}\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n private _getPathNameFromURL(linkURL: string): string {\r\n let pathName = '';\r\n try {\r\n // if linkURL is a full url\r\n pathName = new URL(linkURL).pathname;\r\n } catch {\r\n pathName = linkURL.split('?')[0];\r\n }\r\n return pathName;\r\n }\r\n\r\n private _onMobNavTrigger(): void {\r\n this.setState(state => ({\r\n navOpen: !state.navOpen\r\n }));\r\n }\r\n\r\n private _renderDisplay(): JSX.Element[] {\r\n const { ListItem, menuItemData } = this.props;\r\n const menuItemList: JSX.Element[] = [];\r\n const isMobileView: boolean = this.props.isMobileView || false;\r\n const expandOnClick: boolean = this.props.config.expandOnClick || false;\r\n\r\n menuItemData.forEach((item: IMenuItemData, index: number) => {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n });\r\n\r\n return menuItemList;\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\r\n const { openSubmenuItemsNewTab } = this.props.config;\r\n const openInNewTab = (!!openSubmenuItemsNewTab && (openSubmenuItemsNewTab.toLowerCase().includes(menuItemData.linkText!.toLowerCase())));\r\n if (this.props.isMobileView) {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n \r\n \r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id, openInNewTab)}\r\n \r\n );\r\n } else {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id, openInNewTab)}\r\n \r\n );\r\n }\r\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\r\n return (this._renderLinkMenuItem(menuItemData));\r\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\r\n return (this._renderSpanMenuItem(menuItemData));\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number, openInNewTab?: boolean): JSX.Element | null {\r\n const { isMobileView, ListItem } = this.props;\r\n\r\n if (!subMenus || subMenus.length === 0) {\r\n return null;\r\n }\r\n\r\n let levelClassName: string = '';\r\n const menuOptions = subMenus && subMenus.map((option: IMenuItemData, idx: number) => {\r\n const hasOptions = (option.subMenu && option.subMenu.length > 0);\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && isMobileView) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\r\n } else {\r\n menuItem = (option.linkURL\r\n ? this._renderLinkMenuItem(option, idx, openInNewTab)\r\n : this._renderSpanMenuItem(option)\r\n );\r\n }\r\n\r\n let subMenu;\r\n\r\n if (hasOptions) {\r\n this.currentLevel++;\r\n if (this.currentLevel <= this.supportedLevel - 1) {\r\n levelClassName = `level-${this.currentLevel.toString()}`;\r\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined, openInNewTab);\r\n }\r\n }\r\n\r\n return (\r\n \r\n {menuItem}\r\n {subMenu}\r\n \r\n );\r\n });\r\n\r\n return this._renderMenu(levelClassName, menuOptions, activeMenu);\r\n }\r\n\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n const { Button } = this.props;\r\n const isActive = (option === this.activeMenuItem) || (option === this.activeSubMenuItem);\r\n const activeClass = `${Button.className} ${isActive ? this.activeClassName : ''}`;\r\n const isMobileView: boolean = this.props.isMobileView || false;\r\n const expandOnClick: boolean = this.props.config.expandOnClick || false;\r\n\r\n return (\r\n this._mainNavClick(option)}\r\n onMouseEnter={isMobileView || expandOnClick ? false : this._handleDropdownToggle(option, activeMenu)}\r\n onFocus={isMobileView || expandOnClick ? this._closeSubmenu : this._handleDropdownToggle(option, activeMenu)}\r\n aria-haspopup={true}\r\n aria-expanded={this.state.activeMenu && this.state.activeMenu === option.id ? true : false}\r\n data-parent={activeMenu}\r\n >\r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _mainNavClick = (option: IMenuItemData) => {\r\n const link = option.linkURL;\r\n if (link) {\r\n window.location.href = link;\r\n }\r\n };\r\n\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number, openInNewTab?: boolean): JSX.Element | null {\r\n const { Link } = this.props;\r\n const isActive = (option === this.activeSubMenuItem) || (option === this.activeMenuItem);\r\n\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Span } = this.props;\r\n return (\r\n {option.linkText}\r\n );\r\n }\r\n\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number): JSX.Element | null {\r\n const { MenuList } = this.props;\r\n this.currentLevel = 1;\r\n\r\n return (\r\n \r\n {level === 'level-2' && currentItem && this._renderSubNavButton(currentItem)}\r\n {menuOptions}\r\n \r\n );\r\n }\r\n\r\n private _renderSubNavButton(currentItem: number): JSX.Element {\r\n return (\r\n \r\n );\r\n }\r\n\r\n private _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n let activeMenu;\r\n if (this.props.isMobileView) {\r\n activeMenu = (this.state.activeMenu && this.state.activeMenu === data.id!) ? undefined : data.id!;\r\n } else {\r\n activeMenu = data.id;\r\n }\r\n this.setState({\r\n activeMenu,\r\n parentMenu: parentId\r\n });\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _resetFocus = () => {\r\n if (this.props.isMobileView) {\r\n setTimeout(() => {\r\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\r\n }, 0);\r\n }\r\n };\r\n\r\n // tslint:disable-next-line:no-any\r\n private _handleClickOutside = (event: any) => {\r\n const burgerMenu: boolean = event.target.className === 'ms-header__nav-icon msc-btn';\r\n\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.target)) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n\r\n if (!burgerMenu) {\r\n this.setState({ navOpen: false });\r\n }\r\n }\r\n };\r\n\r\n private _closeSubmenu(): void {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n}\r\n\r\nexport default NavigationMenuView;","/*---------------------------------------------------------------------------------------------\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 { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { INavigationMenuViewProps } from '../../../modules/smwe-navigation-menu/./smwe-navigation-menu';\r\nimport { IMenuItemData } from '../../../modules/smwe-navigation-menu/./smwe-navigation-menu.data';\r\nimport { ISmweNavigationMenuProps } from '../definition-extensions/smwe-navigation-menu.ext.props.autogenerated';\r\n\r\ninterface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n mobileViewLabelText?: string;\r\n navOpen: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenuView component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuView extends React.PureComponent, INavigationState> {\r\n private supportedLevel: number = 3;\r\n private currentLevel: number = 0;\r\n private menuNode: React.RefObject;\r\n private pathName: string = '';\r\n private activeClassName: string = 'selected';\r\n private activeMenuItem: IMenuItemData = {};\r\n private activeSubMenuItem: IMenuItemData = {};\r\n\r\n constructor(props: INavigationMenuViewProps & ISmweNavigationMenuProps<{}>) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.state = {\r\n activeMenu: undefined,\r\n mobileViewLabelText: '',\r\n parentMenu: undefined,\r\n navOpen: false\r\n };\r\n this._closeSubmenu = this._closeSubmenu.bind(this);\r\n this._onMobNavTrigger = this._onMobNavTrigger.bind(this);\r\n }\r\n\r\n public componentDidMount(): void {\r\n document.body && document.body.addEventListener('mousedown', this._handleClickOutside);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n document.body && document.body.removeEventListener('mousedown', this._handleClickOutside, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { isMobileView, MenuList, Navigation } = this.props;\r\n const className = this.props.config.className;\r\n // get current pathname\r\n if (process.env.CURRENT_ENVIRONMENT === 'web') {\r\n this.pathName = window.location.pathname;\r\n } else {\r\n this.pathName = this.props.context.request.url.requestUrl.pathname;\r\n }\r\n\r\n this.props.menuItemData.forEach((item, index) => {\r\n const ItemPath = this._getPathNameFromURL(item.linkURL || '');\r\n item.subMenu && item.subMenu.forEach((subItem, subIndex) => {\r\n const subItemPath = this._getPathNameFromURL(subItem.linkURL || '');\r\n if (subItemPath === this.pathName) {\r\n this.activeMenuItem = item;\r\n this.activeSubMenuItem = subItem;\r\n }\r\n });\r\n if (ItemPath === this.pathName) {\r\n this.activeMenuItem = item;\r\n }\r\n });\r\n\r\n this.currentLevel = 1;\r\n return (\r\n \r\n \r\n \r\n \r\n {this._renderDisplay()}\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n private _getPathNameFromURL(linkURL: string): string {\r\n let pathName = '';\r\n try {\r\n // if linkURL is a full url\r\n pathName = new URL(linkURL).pathname;\r\n } catch {\r\n pathName = linkURL.split('?')[0];\r\n }\r\n return pathName;\r\n }\r\n\r\n private _onMobNavTrigger(): void {\r\n this.setState(state => ({\r\n navOpen: !state.navOpen\r\n }));\r\n }\r\n\r\n private _renderDisplay(): JSX.Element[] {\r\n const { ListItem, menuItemData } = this.props;\r\n const menuItemList: JSX.Element[] = [];\r\n const isMobileView: boolean = this.props.isMobileView || false;\r\n const expandOnClick: boolean = this.props.config.expandOnClick || false;\r\n\r\n menuItemData.forEach((item: IMenuItemData, index: number) => {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n });\r\n\r\n return menuItemList;\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\r\n if (this.props.isMobileView) {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n \r\n \r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n \r\n );\r\n } else {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n }\r\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\r\n return (this._renderLinkMenuItem(menuItemData));\r\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\r\n return (this._renderSpanMenuItem(menuItemData));\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number): JSX.Element | null {\r\n const { isMobileView, ListItem } = this.props;\r\n\r\n if (!subMenus || subMenus.length === 0) {\r\n return null;\r\n }\r\n\r\n let levelClassName: string = '';\r\n const menuOptions = subMenus && subMenus.map((option: IMenuItemData, idx: number) => {\r\n const hasOptions = (option.subMenu && option.subMenu.length > 0);\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && isMobileView) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\r\n } else {\r\n menuItem = (option.linkURL\r\n ? this._renderLinkMenuItem(option, idx)\r\n : this._renderSpanMenuItem(option)\r\n );\r\n }\r\n\r\n let subMenu;\r\n\r\n if (hasOptions) {\r\n this.currentLevel++;\r\n if (this.currentLevel <= this.supportedLevel - 1) {\r\n levelClassName = `level-${this.currentLevel.toString()}`;\r\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined);\r\n }\r\n }\r\n\r\n return (\r\n \r\n {menuItem}\r\n {subMenu}\r\n \r\n );\r\n });\r\n\r\n return this._renderMenu(levelClassName, menuOptions, activeMenu);\r\n }\r\n\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n const { Button } = this.props;\r\n const isActive = (option === this.activeMenuItem) || (option === this.activeSubMenuItem);\r\n const activeClass = `${Button.className} ${isActive ? this.activeClassName : ''}`;\r\n const isMobileView: boolean = this.props.isMobileView || false;\r\n const expandOnClick: boolean = this.props.config.expandOnClick || false;\r\n\r\n return (\r\n this._mainNavClick(option)}\r\n onMouseEnter={isMobileView || expandOnClick ? false : this._handleDropdownToggle(option, activeMenu)}\r\n onFocus={isMobileView || expandOnClick ? this._closeSubmenu : this._handleDropdownToggle(option, activeMenu)}\r\n aria-haspopup={true}\r\n aria-expanded={this.state.activeMenu && this.state.activeMenu === option.id ? true : false}\r\n data-parent={activeMenu}\r\n >\r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _mainNavClick = (option: IMenuItemData) => {\r\n const link = option.linkURL;\r\n if (link) {\r\n window.location.href = link;\r\n }\r\n };\r\n\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Link } = this.props;\r\n const { openSubmenuItemsNewTab } = this.props.config;\r\n const openSubmenuItemsNewTabArray = openSubmenuItemsNewTab && openSubmenuItemsNewTab.split(',');\r\n const openInNewTab = openSubmenuItemsNewTabArray && openSubmenuItemsNewTabArray.find(item => item.toLowerCase() === option.linkText?.toLowerCase());\r\n const isActive = (option === this.activeSubMenuItem) || (option === this.activeMenuItem);\r\n\r\n return (\r\n \r\n {option.imageSource && (\r\n
\r\n {option.linkText}\r\n
\r\n )}\r\n \r\n {option.linkText}\r\n \r\n
\r\n );\r\n }\r\n\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Span } = this.props;\r\n return (\r\n {option.linkText}\r\n );\r\n }\r\n\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number): JSX.Element | null {\r\n const { MenuList } = this.props;\r\n this.currentLevel = 1;\r\n\r\n return (\r\n \r\n {level === 'level-2' && currentItem && this._renderSubNavButton(currentItem)}\r\n {menuOptions}\r\n \r\n );\r\n }\r\n\r\n private _renderSubNavButton(currentItem: number): JSX.Element {\r\n return (\r\n \r\n );\r\n }\r\n\r\n private _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n let activeMenu;\r\n if (this.props.isMobileView) {\r\n activeMenu = (this.state.activeMenu && this.state.activeMenu === data.id!) ? undefined : data.id!;\r\n } else {\r\n activeMenu = data.id;\r\n }\r\n this.setState({\r\n activeMenu,\r\n parentMenu: parentId\r\n });\r\n\r\n this._resetFocus();\r\n };\r\n\r\n private _resetFocus = () => {\r\n if (this.props.isMobileView) {\r\n setTimeout(() => {\r\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\r\n }, 0);\r\n }\r\n };\r\n\r\n // tslint:disable-next-line:no-any\r\n private _handleClickOutside = (event: any) => {\r\n const burgerMenu: boolean = event.target.className === 'ms-header__nav-icon msc-btn';\r\n\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.target)) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n\r\n if (!burgerMenu) {\r\n this.setState({ navOpen: false });\r\n }\r\n }\r\n };\r\n\r\n private _closeSubmenu(): void {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n }\r\n}\r\n\r\nexport default NavigationMenuView;\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 {\r\n ICheckoutViewProps,\r\n ILineItem,\r\n ILineItemDeliveryGroup,\r\n ILineItems,\r\n IOrderSummary,\r\n IPickUpAtStore\r\n} from '@msdyn365-commerce-modules/checkout/dist/types';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport const PickUpAtStoreComponent: React.FC = ({ PickUpAtStore, label, location }) => (\r\n \r\n {label}\r\n {location}\r\n \r\n);\r\n\r\nexport const LineItemComponent: React.FC = ({ LineItem, item, pickUpAtStore }) => (\r\n \r\n {item}\r\n {pickUpAtStore && }\r\n \r\n);\r\n\r\nexport const LineItemGroupComponent: React.FC = ({ LineItemDeliveryGroup, LineItemList, heading, lineItems }) => (\r\n \r\n {heading}\r\n \r\n {lineItems.map(lineItem => (\r\n \r\n ))}\r\n \r\n \r\n);\r\n\r\nexport const LineItemsComponent: React.FC = ({ LineItems, Header, heading, editLink, itemsForPickup, itemsForShip }) => (\r\n \r\n \r\n {heading}\r\n {editLink}\r\n \r\n {itemsForPickup && }\r\n {itemsForShip && }\r\n \r\n);\r\n\r\nconst OrderSummaryComponent: React.FC = ({ heading, lines }) => (\r\n\r\n
\r\n {heading}\r\n
\r\n {lines && (\r\n <>\r\n {lines.subtotal}\r\n {lines.shipping}\r\n {lines.tax}\r\n {lines.totalDiscounts}\r\n {lines.loyalty}\r\n {lines.giftCard}\r\n {lines.orderTotal}\r\n \r\n )}\r\n
\r\n
\r\n);\r\n\r\nconst CheckoutView: React.FC = props => {\r\n const {\r\n canShow,\r\n checkoutProps,\r\n headerProps,\r\n bodyProps,\r\n mainProps,\r\n mainControlProps,\r\n sideProps,\r\n sideControlFirstProps,\r\n sideControlSecondProps,\r\n loading,\r\n alert,\r\n title,\r\n guidedForm,\r\n orderSummary,\r\n lineItems,\r\n placeOrderButton,\r\n keepShoppingButton\r\n } = props;\r\n\r\n return (\r\n \r\n {title}\r\n \r\n {loading}\r\n {alert}\r\n {canShow && (\r\n <>\r\n \r\n {guidedForm}\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n {orderSummary && }\r\n \r\n {/* {placeOrderButton}\r\n {keepShoppingButton} */}\r\n \r\n {lineItems && }\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default CheckoutView;\r\n","import * as React from 'react';\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\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 \n {modal.heading}\n \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","/*---------------------------------------------------------------------------------------------\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 {\r\n ICheckoutViewProps,\r\n ILineItem,\r\n ILineItemDeliveryGroup,\r\n ILineItems,\r\n IOrderSummary,\r\n IPickUpAtStore\r\n} from '@msdyn365-commerce-modules/checkout/dist/types';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport const PickUpAtStoreComponent: React.FC = ({ PickUpAtStore, label, location }) => (\r\n \r\n {label}\r\n {location}\r\n \r\n);\r\n\r\nexport const LineItemComponent: React.FC = ({ LineItem, item, pickUpAtStore }) => (\r\n \r\n {item}\r\n {pickUpAtStore && }\r\n \r\n);\r\n\r\nexport const LineItemGroupComponent: React.FC = ({ LineItemDeliveryGroup, LineItemList, heading, lineItems }) => (\r\n \r\n {heading}\r\n \r\n {lineItems.map(lineItem => (\r\n \r\n ))}\r\n \r\n \r\n);\r\n\r\nexport const LineItemsComponent: React.FC = ({ LineItems, Header, heading, editLink, itemsForPickup, itemsForShip }) => (\r\n \r\n \r\n {heading}\r\n {editLink}\r\n \r\n {itemsForPickup && }\r\n {itemsForShip && }\r\n \r\n);\r\n\r\nconst OrderSummaryComponent: React.FC = ({ heading, lines }) => (\r\n\r\n
\r\n {heading}\r\n
\r\n {lines && (\r\n <>\r\n {lines.subtotal}\r\n {lines.shipping}\r\n {lines.tax}\r\n {lines.totalDiscounts}\r\n {lines.loyalty}\r\n {lines.giftCard}\r\n {lines.orderTotal}\r\n \r\n )}\r\n
\r\n
\r\n);\r\n\r\nconst CheckoutView: React.FC = props => {\r\n const {\r\n canShow,\r\n checkoutProps,\r\n headerProps,\r\n bodyProps,\r\n mainProps,\r\n mainControlProps,\r\n sideProps,\r\n sideControlFirstProps,\r\n sideControlSecondProps,\r\n loading,\r\n alert,\r\n title,\r\n guidedForm,\r\n orderSummary,\r\n lineItems,\r\n placeOrderButton,\r\n keepShoppingButton\r\n } = props;\r\n\r\n return (\r\n \r\n {title}\r\n \r\n {loading}\r\n {alert}\r\n {canShow && (\r\n <>\r\n \r\n {guidedForm}\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n {orderSummary && }\r\n \r\n {/* {placeOrderButton}\r\n {keepShoppingButton} */}\r\n \r\n {lineItems && }\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default CheckoutView;\r\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as React from 'react';\n\nimport { Modal, ModalBody, ModalHeader, Module, Node } from '@msdyn365-commerce-modules/utilities';\n\nimport { IAccountLoyaltyViewProps } from './account-loyalty';\n\nconst AccountLoyaltyView: React.FC = props => {\n\n const { AccountLoyalty, Info, Points, Breakdown, RewardPoints, PointsBreakdown, Button, heading, infoLabel, cardNumber, joinDate, pointsLabel, points, rewardPoints, homeButton, pointsModal } = props;\n const { ModalBodyTop, ModalBodyHeaders } = pointsModal;\n return (\n \n {heading}\n \n {infoLabel}\n {cardNumber}\n {joinDate}\n \n \n {pointsLabel}\n {points}\n\n \n {rewardPoints && rewardPoints.map((activity, index) => {\n return (\n // tslint:disable-next-line:jsx-key\n \n {activity.label}\n \n {activity.availableModalLabel}\n {activity.availableModalTrigger}\n \n\n \n {activity.expiringModalLabel}\n {activity.expiringModalTrigger}\n \n \n );\n })}\n \n \n\n \n {homeButton}\n \n\n {!pointsModal.isOpen &&\n ||\n \n\n \n {pointsModal.modalHeader}\n \n \n \n {pointsModal.pointsDescription}\n {pointsModal.totalPoints}\n \n \n {pointsModal.date}\n {pointsModal.balanceLabel}\n \n {pointsModal.rewardPointsActivity && pointsModal.rewardPointsActivity.map((activity, index) => {\n const { Activity, activityType, activityDate, activityPoints } = activity;\n return (\n \n {activityType}\n {activityDate}\n {activityPoints}\n \n );\n })}\n \n \n }\n \n );\n};\n\nexport default AccountLoyaltyView;\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 { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { INavigationMenuViewProps } from '../../../modules/smwe-navigation-menu/./smwe-navigation-menu';\r\nimport { IMenuItemData } from '../../../modules/smwe-navigation-menu/./smwe-navigation-menu.data';\r\nimport { ISmweNavigationMenuProps } from '../definition-extensions/smwe-navigation-menu.ext.props.autogenerated';\r\n\r\ninterface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n mobileViewLabelText?: string;\r\n navOpen: boolean;\r\n}\r\n\r\ninterface IMenuItemDataClass extends IMenuItemData {\r\n className?: string;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenuView component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuView extends React.PureComponent, INavigationState> {\r\n private supportedLevel: number = 3;\r\n private currentLevel: number = 0;\r\n private menuNode: React.RefObject;\r\n private pathName: string = '';\r\n private activeClassName: string = 'selected';\r\n private activeMenuItem: IMenuItemData = {};\r\n private activeSubMenuItem: IMenuItemData = {};\r\n\r\n constructor(props: INavigationMenuViewProps & ISmweNavigationMenuProps<{}>) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.state = {\r\n activeMenu: undefined,\r\n mobileViewLabelText: '',\r\n parentMenu: undefined,\r\n navOpen: false\r\n };\r\n this._closeSubmenu = this._closeSubmenu.bind(this);\r\n this._onMobNavOpen = this._onMobNavOpen.bind(this);\r\n this._onMobNavClose = this._onMobNavClose.bind(this);\r\n }\r\n\r\n public componentDidMount(): void {\r\n document.getElementById('ms-header__subnav-fade')?.addEventListener('mousedown', this._handleClickOutside);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n document.getElementById('ms-header__subnav-fade')?.removeEventListener('mousedown', this._handleClickOutside, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { isMobileView, MenuList, Navigation } = this.props;\r\n const className = this.props.config.className;\r\n // get current pathname\r\n if (process.env.CURRENT_ENVIRONMENT === 'web') {\r\n this.pathName = window.location.pathname;\r\n } else {\r\n this.pathName = this.props.context.request.url.requestUrl.pathname;\r\n }\r\n\r\n this.props.menuItemData.forEach((item, index) => {\r\n const ItemPath = this._getPathNameFromURL(item.linkURL || '');\r\n item.subMenu && item.subMenu.forEach((subItem, subIndex) => {\r\n const subItemPath = this._getPathNameFromURL(subItem.linkURL || '');\r\n if (subItemPath === this.pathName) {\r\n this.activeMenuItem = item;\r\n this.activeSubMenuItem = subItem;\r\n }\r\n });\r\n if (ItemPath === this.pathName) {\r\n this.activeMenuItem = item;\r\n }\r\n });\r\n\r\n this.currentLevel = 1;\r\n return (\r\n \r\n \r\n \r\n \r\n {this._renderDisplay()}\r\n \r\n \r\n
\r\n
\r\n \r\n );\r\n }\r\n\r\n private _getPathNameFromURL(linkURL: string): string {\r\n let pathName = '';\r\n try {\r\n // if linkURL is a full url\r\n pathName = new URL(linkURL).pathname;\r\n } catch {\r\n pathName = linkURL.split('?')[0];\r\n }\r\n return pathName;\r\n }\r\n\r\n private _onMobNavOpen(): void {\r\n const firstNavItem = this.props.menuItemData[0]?.id;\r\n\r\n this.setState({\r\n activeMenu: firstNavItem || undefined,\r\n navOpen: true\r\n });\r\n this._addFixedBodyPosition();\r\n }\r\n\r\n private _onMobNavClose(): void {\r\n this.setState({\r\n activeMenu: undefined,\r\n navOpen: false\r\n });\r\n this._removeFixedBodyPosition();\r\n }\r\n\r\n private _renderDisplay(): JSX.Element[] {\r\n const { ListItem, menuItemData } = this.props;\r\n const menuItemList: JSX.Element[] = [];\r\n const isMobileView: boolean = this.props.isMobileView || false;\r\n const expandOnClick: boolean = this.props.config.expandOnClick || false;\r\n\r\n menuItemData.forEach((item: IMenuItemData, index: number) => {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n });\r\n\r\n return menuItemList;\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\r\n return (this._renderLinkMenuItem(menuItemData));\r\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\r\n return (this._renderSpanMenuItem(menuItemData));\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenus?: IMenuItemDataClass[], activeMenu?: number, openInNewTab?: boolean): JSX.Element | null {\r\n const { isMobileView, ListItem } = this.props;\r\n\r\n if (!subMenus || subMenus.length === 0) {\r\n return null;\r\n }\r\n\r\n let levelClassName: string = '';\r\n const menuOptions = subMenus && subMenus.map((option: IMenuItemDataClass, idx: number) => {\r\n const hasOptions = (option.subMenu && option.subMenu.length > 0);\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\r\n } else {\r\n menuItem = (option.linkURL\r\n ? this._renderLinkMenuItem(option, idx, openInNewTab)\r\n : this._renderSpanMenuItem(option)\r\n );\r\n }\r\n\r\n let subMenu;\r\n\r\n if (hasOptions) {\r\n this.currentLevel++;\r\n if (this.currentLevel <= this.supportedLevel - 1) {\r\n levelClassName = `level-${this.currentLevel.toString()}`;\r\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined, openInNewTab);\r\n }\r\n }\r\n\r\n return (\r\n \r\n {menuItem}\r\n {subMenu}\r\n \r\n );\r\n });\r\n\r\n return this._renderMenu(levelClassName, menuOptions, activeMenu);\r\n }\r\n\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n const { Button } = this.props;\r\n const isActive = (option === this.activeMenuItem) || (option === this.activeSubMenuItem);\r\n const activeClass = `${Button.className} ${isActive ? this.activeClassName : ''}`;\r\n const isMobileView: boolean = this.props.isMobileView || false;\r\n const expandOnClick: boolean = this.props.config.expandOnClick || false;\r\n\r\n return (\r\n this._mainNavClick(option)}\r\n onMouseEnter={isMobileView || expandOnClick ? false : this._handleDropdownToggle(option, activeMenu)}\r\n aria-haspopup={true}\r\n aria-expanded={this.state.activeMenu && this.state.activeMenu === option.id ? true : false}\r\n data-parent={activeMenu}\r\n >\r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _mainNavClick = (option: IMenuItemData) => {\r\n const link = option.linkURL;\r\n if (link) {\r\n window.location.href = link;\r\n }\r\n };\r\n\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number, openInNewTab?: boolean): JSX.Element | null {\r\n const { Link } = this.props;\r\n const isActive = (option === this.activeSubMenuItem) || (option === this.activeMenuItem);\r\n\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Span } = this.props;\r\n return (\r\n {option.linkText}\r\n );\r\n }\r\n\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number): JSX.Element | null {\r\n const { MenuList } = this.props;\r\n this.currentLevel = 1;\r\n\r\n return (\r\n \r\n {menuOptions}\r\n \r\n );\r\n }\r\n\r\n private _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n const activeMenu = data.id;\r\n this.setState({\r\n activeMenu,\r\n parentMenu: parentId,\r\n navOpen: true\r\n });\r\n this._addFixedBodyPosition();\r\n this._resetFocus();\r\n };\r\n\r\n private _resetFocus = () => {\r\n if (this.props.isMobileView) {\r\n setTimeout(() => {\r\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\r\n }, 0);\r\n }\r\n };\r\n\r\n // tslint:disable-next-line:no-any\r\n private _handleClickOutside = (event: any) => {\r\n const burgerMenu: boolean = event.target.className === 'ms-header__nav-icon';\r\n\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.target)) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n\r\n if (!burgerMenu) {\r\n this.setState({ navOpen: false });\r\n }\r\n }\r\n\r\n this._removeFixedBodyPosition();\r\n this._resetFocus();\r\n };\r\n\r\n private _closeSubmenu(): void {\r\n this.setState({\r\n activeMenu: undefined,\r\n mobileViewLabelText: '',\r\n navOpen: false\r\n });\r\n this._removeFixedBodyPosition();\r\n this._resetFocus();\r\n }\r\n\r\n private _addFixedBodyPosition(): void {\r\n document.body?.classList.add('fixed');\r\n }\r\n\r\n private _removeFixedBodyPosition(): void {\r\n document.body?.classList.remove('fixed');\r\n }\r\n}\r\n\r\nexport default NavigationMenuView;\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 { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { INavigationMenuViewProps } from '../../../modules/smwe-navigation-menu/./smwe-navigation-menu';\r\nimport { IMenuItemData } from '../../../modules/smwe-navigation-menu/./smwe-navigation-menu.data';\r\nimport { ISmweNavigationMenuProps } from '../definition-extensions/smwe-navigation-menu.ext.props.autogenerated';\r\n\r\ninterface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n mobileViewLabelText?: string;\r\n navOpen: boolean;\r\n}\r\n\r\ninterface IMenuItemDataClass extends IMenuItemData {\r\n className?: string;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenuView component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuView extends React.PureComponent, INavigationState> {\r\n private supportedLevel: number = 3;\r\n private currentLevel: number = 0;\r\n private menuNode: React.RefObject;\r\n private pathName: string = '';\r\n private activeClassName: string = 'selected';\r\n private activeMenuItem: IMenuItemData = {};\r\n private activeSubMenuItem: IMenuItemData = {};\r\n\r\n constructor(props: INavigationMenuViewProps & ISmweNavigationMenuProps<{}>) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.state = {\r\n activeMenu: undefined,\r\n mobileViewLabelText: '',\r\n parentMenu: undefined,\r\n navOpen: false\r\n };\r\n this._closeSubmenu = this._closeSubmenu.bind(this);\r\n this._onMobNavOpen = this._onMobNavOpen.bind(this);\r\n this._onMobNavClose = this._onMobNavClose.bind(this);\r\n }\r\n\r\n public componentDidMount(): void {\r\n document.getElementById('ms-header__subnav-fade')?.addEventListener('mousedown', this._handleClickOutside);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n document.getElementById('ms-header__subnav-fade')?.removeEventListener('mousedown', this._handleClickOutside, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { isMobileView, MenuList, Navigation } = this.props;\r\n const className = this.props.config.className;\r\n // get current pathname\r\n if (process.env.CURRENT_ENVIRONMENT === 'web') {\r\n this.pathName = window.location.pathname;\r\n } else {\r\n this.pathName = this.props.context.request.url.requestUrl.pathname;\r\n }\r\n\r\n this.props.menuItemData.forEach((item, index) => {\r\n const ItemPath = this._getPathNameFromURL(item.linkURL || '');\r\n item.subMenu && item.subMenu.forEach((subItem, subIndex) => {\r\n const subItemPath = this._getPathNameFromURL(subItem.linkURL || '');\r\n if (subItemPath === this.pathName) {\r\n this.activeMenuItem = item;\r\n this.activeSubMenuItem = subItem;\r\n }\r\n });\r\n if (ItemPath === this.pathName) {\r\n this.activeMenuItem = item;\r\n }\r\n });\r\n\r\n this.currentLevel = 1;\r\n return (\r\n \r\n \r\n \r\n \r\n {this._renderDisplay()}\r\n \r\n \r\n
\r\n
\r\n \r\n );\r\n }\r\n\r\n private _getPathNameFromURL(linkURL: string): string {\r\n let pathName = '';\r\n try {\r\n // if linkURL is a full url\r\n pathName = new URL(linkURL).pathname;\r\n } catch {\r\n pathName = linkURL.split('?')[0];\r\n }\r\n return pathName;\r\n }\r\n\r\n private _onMobNavOpen(): void {\r\n const firstNavItem = this.props.menuItemData[0]?.id;\r\n\r\n this.setState({\r\n activeMenu: firstNavItem || undefined,\r\n navOpen: true\r\n });\r\n this._addFixedBodyPosition();\r\n }\r\n\r\n private _onMobNavClose(): void {\r\n this.setState({\r\n activeMenu: undefined,\r\n navOpen: false\r\n });\r\n this._removeFixedBodyPosition();\r\n }\r\n\r\n private _renderDisplay(): JSX.Element[] {\r\n const { ListItem, menuItemData } = this.props;\r\n const menuItemList: JSX.Element[] = [];\r\n const isMobileView: boolean = this.props.isMobileView || false;\r\n const expandOnClick: boolean = this.props.config.expandOnClick || false;\r\n\r\n menuItemData.forEach((item: IMenuItemData, index: number) => {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n });\r\n\r\n return menuItemList;\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\r\n return (\r\n \r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\r\n return (this._renderLinkMenuItem(menuItemData));\r\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\r\n return (this._renderSpanMenuItem(menuItemData));\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenus?: IMenuItemDataClass[], activeMenu?: number, openInNewTab?: boolean): JSX.Element | null {\r\n const { isMobileView, ListItem } = this.props;\r\n\r\n if (!subMenus || subMenus.length === 0) {\r\n return null;\r\n }\r\n\r\n let levelClassName: string = '';\r\n const menuOptions = subMenus && subMenus.map((option: IMenuItemDataClass, idx: number) => {\r\n const hasOptions = (option.subMenu && option.subMenu.length > 0);\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\r\n } else {\r\n menuItem = (option.linkURL\r\n ? this._renderLinkMenuItem(option, idx, openInNewTab)\r\n : this._renderSpanMenuItem(option)\r\n );\r\n }\r\n\r\n let subMenu;\r\n\r\n if (hasOptions) {\r\n this.currentLevel++;\r\n if (this.currentLevel <= this.supportedLevel - 1) {\r\n levelClassName = `level-${this.currentLevel.toString()}`;\r\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined, openInNewTab);\r\n }\r\n }\r\n\r\n return (\r\n \r\n {menuItem}\r\n {subMenu}\r\n \r\n );\r\n });\r\n\r\n return this._renderMenu(levelClassName, menuOptions, activeMenu);\r\n }\r\n\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n const { Button } = this.props;\r\n const isActive = (option === this.activeMenuItem) || (option === this.activeSubMenuItem);\r\n const activeClass = `${Button.className} ${isActive ? this.activeClassName : ''}`;\r\n const isMobileView: boolean = this.props.isMobileView || false;\r\n const expandOnClick: boolean = this.props.config.expandOnClick || false;\r\n\r\n return (\r\n this._mainNavClick(option)}\r\n onMouseEnter={isMobileView || expandOnClick ? false : this._handleDropdownToggle(option, activeMenu)}\r\n aria-haspopup={true}\r\n aria-expanded={this.state.activeMenu && this.state.activeMenu === option.id ? true : false}\r\n data-parent={activeMenu}\r\n >\r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _mainNavClick = (option: IMenuItemData) => {\r\n const link = option.linkURL;\r\n if (link) {\r\n window.location.href = link;\r\n }\r\n };\r\n\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number, openInNewTab?: boolean): JSX.Element | null {\r\n const { Link } = this.props;\r\n const isActive = (option === this.activeSubMenuItem) || (option === this.activeMenuItem);\r\n\r\n return (\r\n \r\n {option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Span } = this.props;\r\n return (\r\n {option.linkText}\r\n );\r\n }\r\n\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number): JSX.Element | null {\r\n const { MenuList } = this.props;\r\n this.currentLevel = 1;\r\n\r\n return (\r\n \r\n {menuOptions}\r\n \r\n );\r\n }\r\n\r\n private _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n const activeMenu = data.id;\r\n this.setState({\r\n activeMenu,\r\n parentMenu: parentId,\r\n navOpen: true\r\n });\r\n this._addFixedBodyPosition();\r\n this._resetFocus();\r\n };\r\n\r\n private _resetFocus = () => {\r\n if (this.props.isMobileView) {\r\n setTimeout(() => {\r\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\r\n }, 0);\r\n }\r\n };\r\n\r\n // tslint:disable-next-line:no-any\r\n private _handleClickOutside = (event: any) => {\r\n const burgerMenu: boolean = event.target.className === 'ms-header__nav-icon';\r\n\r\n if (this.menuNode.current && !this.menuNode.current.contains(event.target)) {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '' });\r\n\r\n if (!burgerMenu) {\r\n this.setState({ navOpen: false });\r\n }\r\n }\r\n\r\n this._removeFixedBodyPosition();\r\n this._resetFocus();\r\n };\r\n\r\n private _closeSubmenu(): void {\r\n this.setState({\r\n activeMenu: undefined,\r\n mobileViewLabelText: '',\r\n navOpen: false\r\n });\r\n this._removeFixedBodyPosition();\r\n this._resetFocus();\r\n }\r\n\r\n private _addFixedBodyPosition(): void {\r\n document.body?.classList.add('fixed');\r\n }\r\n\r\n private _removeFixedBodyPosition(): void {\r\n document.body?.classList.remove('fixed');\r\n }\r\n}\r\n\r\nexport default NavigationMenuView;\r\n"],"sourceRoot":""}