{"version":3,"sources":["webpack:///src/modules/content-block/components/additional-content.tsx?1a32","webpack:///src/modules/content-block/components/links.tsx?5056","webpack:///src/modules/content-block/content-block.tsx?8675","webpack:///src/modules/social-share/social-share.view.tsx?76da","webpack:///src/modules/site-picker/site-picker.view.tsx?dcff","webpack:///src/modules/adventureworks/views/reviews-list.view.tsx?ebec","webpack:///src/modules/fabrikam/views/cart.view.tsx?8115","webpack:///./src/themes/cirrus/views/components/promocode.component.tsx?ffbb","webpack:///./src/themes/cirrus/views/cart.view.tsx?c0b2","webpack:///src/modules/social-share/social-share.tsx?ed88","webpack:///./src/themes/cirrus/views/store-selector.view.tsx?8807","webpack:///./src/themes/cirrus/views/content-block.view.tsx?f70e","webpack:///src/modules/footer-item/footer-item.tsx?f8b4","webpack:///src/modules/site-picker/site-picker.tsx?35ca","webpack:///src/modules/footer-item/footer-item.view.tsx?235e","webpack:///src/modules/content-block/content-block.view.tsx?a86e","webpack:///./src/themes/cirrus/views/components/place-order-button.tsx?0b42","webpack:///./src/themes/cirrus/views/checkout.view.tsx?ed9a"],"names":["assembleNode","item","props","itemIndex","_item$links","heading","renderHeading","additionalContentHeading","requestContext","React","Msdyn365","text","tag","className","editProps","onEdit","event","handleAdditionalTextChange","subtext","renderParagraph","additionalContentParagraphText","links","map","ctaLink","index","renderLinks","linkIndex","editableLink","ariaLabel","linkText","linkUrl","destinationUrl","openInNewTab","role","key","link","onTextChange","handleAdditionalLinkTextChange","additionalContentItemContainer","additionalContentItemLinks","contentBlockAdditionalContent","additionalContent","reactNodes","push","additionalContentNode","additionalContentItems","ContentCardLinks","constructor","_mapEditableLinks","linkdata","length","editableLinks","forEach","payLoad","getPayloadObject","this","telemetryContent","contentAction","etext","attributes","getTelemetryAttributes","btnClass","additionalProperties","onClick","onTelemetryClick","render","ContentBlock","getTelemetryObject","context","request","telemetryPageName","friendlyName","telemetry","handleTextChange","config","target","value","handleParagraphChange","paragraph","handleLinkTextChange","Number","_heading$tag","_this$props$context$r","_this$props$config$im","image","imageAriaLabel","contentBlockTitle","imageProps","gridSettings","imageSettings","contentBlockLinks","ArrayExtensions","hasElements","LinksComponent","Object","assign","msdyn365__moduleLayout","contentBlockText","contentBlockImage","moduleType","typeName","imagePropertyName","moduleId","id","layout","shouldSkipToMainImage","error","contentBlockviewProps","_objectSpread","title","moduleClass","contentBlockContainer","moduleProps","classnames","imageContainer","detailsContainer","contentBlockAnchorTag","imageLink","_getImageLink","handleAdditionalParagraphChange","handleAdditionalText","handleAdditionalParagraph","renderView","additionalContentObject","actionableRegion","SocialShareView","SocialShareList","SocialShareItemElements","SocialShareItem","SocialShare","createElement","Module","Node","SocialShareElement","_renderSitePicker","_renderSiteOptionsList","SitePickerMenuList","SitePickerMenuListItem","SitePickerMenuListItemArray","options","onMouseLeave","resetSiteOptionsState","isMobileView","SitePicker","_props$SitePickerMenu","SitePickerMobileContainer","renderSiteOptions","_renderMobileView","_props$config$heading","SitePickerMenu","SitePickerMenuSpan","siteOptionsState","_renderDesktopView","buildReviewCard","resources","isUserReview","cardProps","headerProps","rating","date","name","cardBodyProps","reviewProps","reviewTitle","reviewText","responseProps","responseName","responseDate","responseText","controlsProps","undefined","wasReviewHelpfulText","like","dislike","edit","renderProductDescription","product","data","result","_props$data$product$r","primaryImageSource","PrimaryImageUrl","imageUrl","generateImageUrl","apiSettings","Image","src","viewports","xs","q","w","h","sm","md","lg","xl","lazyload","cropFocalRegion","renderProductImage","Name","ItemId","ReviewsListview","filterByDropdown","noReviewsMessage","noReviewsWithFilterMessage","pageControls","refineReviewsProps","reportReviewModal","reviewsListProps","reviewCards","sortByDropdown","state","userReview","isFilterApplied","review","reviewModal","modal","modalHeader","modalBody","form","inputRow","selectRatingLabel","reviewTitleLabel","titleInput","reviewTextLabel","textInput","privacyPolicyUrl","modalFooter","submitButton","cancelButton","createReviewModal","createReportModal","reported","headerSubmitted","header","reportSubmittedMessage","reportMessage","radioButtons","succesfulButton","_renderPromotions","promotions","promotionMessageWrapper","promotionMessage","promotionSeeAllLink","promotionDialog","_renderCartlines","cartLines","storeSelector","backToShoppingButton","waitingComponent","cartLoadingStatus","cartDataResult","mulitplePickUp","emailDeliveryModeCode","emptyCartText","cartLine","cartline","_renderBOPISBlock","_renderGroupBOPISBlock","addToOrderTemplate","addToWishlist","remove","onToggleBopisHandler","isBopisSelected","pickUpInStore","callbacks","toggleBopis","onChangeStoreHandler","_cartLine$data","DeliveryMode","shipInsteadDisplayText","shipToAddressDisplayText","pickItUpDisplayText","pickUpAtStoreWithLocationText","changeStoreDisplayText","TelemetryConstant","PickupInStore","puckUpinStoreAttribute","ContainerProps","orgUnitName","Button","_renderErrorBlock","errorData","errors","Wrapper","_renderOrderSummarylines","orderSummaryLines","OrderSummaryItems","promoCode","subtotal","shipping","otherCharge","tax","totalDiscounts","orderTotal","_renderInvoiceSummarylines","invoiceSummaryLines","invoices","giftCard","loyalty","_renderCartLinesGroup","cartLinesGroup","cartlines","_props$context$action2","_props$context$action3","_renderCartLinesGroupHeader","_countItems","actionContext","channel","EmailDeliveryModeCode","multiplePickUpEnabled","count","_cartLine$pickUpInSto","pickUpText","shippingText","emailshippingText","groupTitle","toLowerCase","_renderCartLinesGroupTitle","_cartLine$data2","countItem","reduce","_item$data","Quantity","_cartLine$pickUpInSto2","_cartLine$pickUpInSto3","_cartLine$pickUpInSto4","itemLabel","itemsLabel","suffix","deliveryOption","CartView","_props$context$action","_props$cart","renderModuleAttributes","promotionOptions","CartlinesWrapper","orderSummaryHeading","OrderSummaryWrapper","cart","hasInvoiceLine","invoiceSummaryLineitems","orderSummaryLineitems","OrderSummaryErrors","checkoutAsSignInUserButton","checkoutAsGuestButton","createTemplateFromCartButton","PromoCode","super","_onInputChangeHandler","setState","promoCodeInputValue","canApply","_applyPromotion","cartState","appliedPromo","addPromoCode","then","_this$props$promoCode","_this$props","status","promoCodeApplyCallback","call","substatus","duplicatePromoCodeErrorText","invalidPromoCodeErrorText","catch","failedToAddPromoCodeErrorText","_onSubmitHandler","preventDefault","applyPromotionHandler","_renderForm","promoPlaceholderText","promoCodeApplyButtonText","onSubmit","onChange","placeholder","disabled","_removePromotion","_event$currentTarget$","code","currentTarget","getAttribute","removePromoCodes","promoCodes","_this$props$promoCode2","_this$props2","failedToRemovePromoCodeErrorText","_renderAppliedPromoCode","Coupons","removePromotionHandler","coupon","removePromoAriaLabelFormat","format","removePromoText","Code","ApplyPromoCode","promoCodeHeadingText","toggleBopisHandler","renderCartLine","isMultiplePickUp","outOfStockErrorMessage","renderGroupBopisBlock","renderCartlinesInternal","renderBopisBlock","renderCartlines","isCartDataResult","slots","emptyCart","renderCartLinesGroupHeader","_cartLine$pickUpInSto6","replace","renderCartLinesGroupTitle","_cartLine$pickUpInSto5","countTitle","renderOrderSummarylines","orderSummaryItems","renderOrderSummarylinesTax","_renderOrderSummarylinesTax","useEffect","_props$cartlines","element","document","querySelector","find","_item$pickUpInStore","innerText","yetToBeCalculatedText","_props$cart2","_props$cart3","_props$orderSummaryLi","_props$cart4","_props$cart5","updatedTitle","cartTitle","totalItemsInCart","renderOrderSummaryCheckoutButton","renderCartLinesGroup","cartlineId","_item$data$cartline$Q","countItems","renderInvoiceSummarylines","renderOrderSummaryCheckout","socialShareItems","cookies","isConsentGiven","viewprops","caption","orientation","tabIndex","StoreSelectorFoundLocationsMessageComponent","locations","searchRadius","isSeeAllStore","preferredDistanceUnit","storeCountMessage","milesShortText","storeCountMessageInKm","RichTextComponent","storeAllCountMessage","toString","renderStoreHours","storeHours","storeHoursList","locationOpen","RegularStoreHours","displayTime","JSON","stringify","buildStoreHoursDay","storeHoursDayPeriodString","storeHoursDayString","endDayShort","startDayFull","startDayShort","endDayFull","storeHoursDayPeriod","storeHoursDay","timeRange","storeOpenFrom","openFrom","storeOpenTo","openTo","matchDeliveryOptions","productDeliveryOptions","storePickUpOptionList","productDeliveryOption","delivery","filter","PickUpMethodDropdownComponent","handlers","location","pickUpStatesProps","selectStoreText","pickUpMethodLabel","pickUpOptionPlaceholder","pickupOptionDropdownError","pickupButtonAriaLabel","productPickUpOptionList","deliveryOptionList","selectedStorePickUpOption","selectStorePickUpOption","currentStorePickUpOption","setCurrentStorePickUpOption","isDropdownOpen","toggleDropdown","isError","setError","onChangeHandler","dataset","description","onClickHandler","StringExtensions","isNullOrEmpty","filteredPickupMode","onSelected","handleDropdownToggle","filterDeliveryOption","pickupInStoreButtonText","filteredDeliveryMode","Description","renderLocationLinePickupButton","renderStoreLocationLineItem","locationLineItem","hideStockStatus","isInStock","preferredStoreLocationId","isPreferredStoreEnabled","stockStatusLabel","storeLocatorView","storeName","OrgUnitName","distanceAsString","buildDistanceString","distance","isLocationDisabled","closeDistanceString","distanceString","Math","floor","Distance","storeAddress","Address","phoneNumber","contacts","allPhoneContacts","contact","ContactTypeValue","ContactInformationType","Phone","IsPrivate","primaryPhoneContact","IsPrimary","Locator","extractPhoneNumber","Contacts","resourceLabel","inStock","outOfStock","stockText","isPreferredStore","OrgUnitNumber","PreferredStore","preferredStoreAttribute","RemovePreferredStore","removePreferredStoreAttribute","contactInfoHeader","storeHoursHeader","availabilityInfoHeader","preferredStoreAriaLabel","onRemovePreferredStore","preferredStoreText","setAsPreferredStoreTextAriaLabel","onSetAsPreferredStore","setAsPreferredStoreText","renderStoreLocations","_props$data$storeSele","_props$locationListPr","show","storeSelectorStateManager","listMapViewState","displayList","locationListProps","store","renderStoreLocation","isCurrentLocation","orgUnitLocation","selectedStoreLocationId","canSelectLocation","pickupInStoreAriaLabel","selectLocationAriaLabelFormat","selectLocation","pickUpOptionDropdownPlaceholderText","pickupOptionDropdownPlaceholderText","unitLocation","canSelectPickUpMethod","pickupOptionDropdownErrorText","pickUpMethodSelection","selected","parseInt","onKeyDown","currentLocation","StoreSelectorViewComponent","_props$locationListPr2","BodyContainerProps","FooterContainerProps","HeaderContainerProps","HeaderProps","ModuleProps","locationsMessage","search","spinner","noLocationsMessage","terms","isSearchInProgress","renderAdditionalContent","_additionalContent$ad","contentBlockView","imageClass","href","FooterItem","handleHeadingChange","footerItemClassName","viewProps","_createHeading","_createImageMarkup","_createText","_createLinkText","EditableLink","_createLink","HeadingContainer","ItemContainer","Link","ariaHiddenAttr","loadFailureBehavior","PureComponent","_cookieName","_cookieExpirationInSeconds","_escFunction","keyCode","expandSiteOptions","KeyCodes","Escape","setTimeout","_this$_sitePickerMenu","_this$_sitePickerMenu2","nextFocus","activeElement","_this$_sitePickerMenu3","_sitePickerMenuButton","current","contains","_sitePickerMenuNode","_resetSiteOptionsState","focus","Tab","_this$_sitePickerMenu4","_this$_sitePickerMenu5","_handleOutsideClick","_this$_sitePickerMenu6","_this$_sitePickerMenu7","_handleChange","bind","createRef","_renderSiteOptions","_updateViewport","viewport","device","Type","isMobile","componentDidMount","_document","_document2","MsDyn365","isBrowser","addEventListener","body","resizeThrottledEventHandler","window","addThrottledEvent","componentWillUnmount","_document3","_document4","removeEventListener","_this$props$config$he","_this$props$config$he2","ref","Drawer","toggleButtonText","openGlyph","closeGlyph","glyphPlacement","_renderSitePickerImage","expandSiteOptionsState","e","cookieConfig","maxAge","set","defaultImageSettings","siteOptions","_image$imageSettings","_item$siteRedirectUrl","siteImage","siteRedirectUrl","siteName","altText","_getViewport","innerWidth","__decorate","observable","computed","FooterItemView","_renderElement","ContentBlockView","buttonsStates","errorsStates","onPlaceOrderHandler","isBusy","isDisablePlaceOrder","placeOrder","async","buttonSetState","errorState","CheckoutPlaceOrderButton","_ref","componentProps","isUpdating","checkoutBtnText","canPlaceOrder","shouldEnableSinglePaymentAuthorizationCheckout","isPlaceOrderLoading","isExpressCheckoutApplied","isPaymentVerificationRedirection","setIsBusy","useState","setIsDisablePlaceOrder","isPlaceOrderBtnLoading","setIsPlaceOrderBtnLoading","showPaymentError","setShowPaymentError","payload","TelemetryEvent","Purchase","errorMessage","placeOrderExtend","Fragment","color","PickUpAtStoreComponent","PickUpAtStore","label","EmailDeliveryComponent","_ref2","EmailDelivery","LineItemComponent","_ref3","LineItem","pickUpAtStore","emailDelivery","LineItemGroupComponent","_ref4","LineItemDeliveryGroup","LineItemList","lineItems","lineItem","LineId","LineItemGroupComponentWithMultiplePickUp","_ref5","lineItemWraper","lineItemWraperIcon","LineItemComponentWithMultiplePickUp","_ref6","PickUpAtStoreComponentWithMultiplePickUp","_ref7","LineItemsComponent","_ref8","LineItems","Header","editLink","itemsForPickup","itemsForShip","itemsForEmail","itemsGroupWithMulitplePickupMode","OrderSummaryComponent","_ref9","lines","PaymentSummaryComponent","_ref10","CheckoutView","_data$checkout","canShow","checkoutProps","hasSalesOrder","bodyProps","mainProps","mainControlProps","sideProps","sideControlFirstProps","sideControlSecondProps","termsAndConditionsProps","orderConfirmation","loading","alert","guidedForm","orderSummary","invoicePaymentSummary","placeOrderButton","termsAndConditions","keepShoppingButton","setIsUpdating","placeOrderNode","checkoutState","checkout","checkoutCart","moduleState","promoCodeDataObj","appliedPromoCodeHeadingText","collapseTimeOut","reload","Waiting"],"mappings":"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","file":"static/js/11.01df19e2d1add09301e9.chunk.js","sourcesContent":["/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IAdditionalContentData, ILinksData } from '../content-block.props.autogenerated';\n\n/**\n * IContentBlockAdditionalContentProps: Interface for\n * Content Block Additional Content Component props.\n */\nexport interface IContentBlockAdditionalContentProps {\n requestContext: Msdyn365.IRequestContext;\n additionalContent: IAdditionalContentData[] | undefined;\n handleAdditionalTextChange(index: number, event: Msdyn365.ContentEditableEvent): void;\n handleAdditionalParagraphChange(index: number, event: Msdyn365.ContentEditableEvent): void;\n handleAdditionalLinkTextChange(linkIndex: number, index: number, event: Msdyn365.ContentEditableEvent): void;\n}\n\n/**\n * IContentBlockAdditionalContentProps: Interface for\n * Content Block Additional Content view props.\n */\nexport interface IContentBlockAdditionalContentViewProps {\n additionalContentNode: INodeProps;\n additionalContentItems?: IContentBlockAdditionalContentItemViewProps[];\n}\n\n/**\n * IContentBlockAdditionalContentProps: Interface for\n * Content Block Additional Content Item view props.\n */\nexport interface IContentBlockAdditionalContentItemViewProps {\n heading: React.ReactNode;\n text: React.ReactNode;\n links: React.ReactNode;\n additionalContentItemContainer: INodeProps;\n additionalContentItemLinks: INodeProps;\n}\n\n/**\n * Renders additional content heading.\n * @param additionalContentHeading - Additional content heading.\n * @param props - Content Block Additional content component props.\n * @param itemIndex - Item index.\n * @returns Heading Node.\n */\nconst renderHeading = (additionalContentHeading: string, props: IContentBlockAdditionalContentProps, itemIndex: number) => {\n const requestContext = props.requestContext;\n return (\n {\n props.handleAdditionalTextChange(itemIndex, event);\n }, requestContext\n }}\n />);\n};\n\n/**\n * Renders additional content heading.\n * @param additionalContentParagraphText - Additional content paragraph text.\n * @param props - Content Block Additional content component props.\n * @param itemIndex - Item index.\n * @returns Paragraph Node.\n */\nconst renderParagraph = (additionalContentParagraphText: string, props: IContentBlockAdditionalContentProps, itemIndex: number) => {\n const requestContext = props.requestContext;\n return (\n {\n props.handleAdditionalTextChange(itemIndex, event);\n }, requestContext\n }}\n />);\n};\n\n/**\n * Renders additional content heading.\n * @param ctaLink - Additional content link.\n * @param props - Content Block Additional content component props.\n * @param itemIndex - Item index.\n * @param linkIndex - Additional content link index.\n * @returns Link Node.\n */\nconst renderLinks = (ctaLink: ILinksData, props: IContentBlockAdditionalContentProps, itemIndex: number, linkIndex: number) => {\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: ctaLink.ariaLabel,\n className: 'ms-content-block__details__additional-content-cta-links',\n linkText: ctaLink.linkText,\n linkUrl: ctaLink.linkUrl.destinationUrl,\n openInNewTab: ctaLink.openInNewTab,\n role: 'link'\n };\n const requestContext = props.requestContext;\n return (\n {\n props.handleAdditionalLinkTextChange(linkIndex, itemIndex, event);\n },\n requestContext\n }}\n />\n );\n};\n\n/**\n * Create node for each additonal content item.\n * @param item - Content block additonal content item props.\n * @param props - Content Block Additional content component props.\n * @param itemIndex - Item index.\n * @returns IContentBlockAdditionalContentItemViewProps.\n */\nconst assembleNode = (\n item: IAdditionalContentData,\n props: IContentBlockAdditionalContentProps,\n itemIndex: number\n): IContentBlockAdditionalContentItemViewProps => {\n const headingNode = item.heading && renderHeading(item.heading, props, itemIndex);\n const paragraphNode = item.subtext && renderParagraph(item.subtext, props, itemIndex);\n const linksNode = item.links?.map((ctaLink: ILinksData, index: number) => {\n return renderLinks(ctaLink, props, itemIndex, index);\n });\n\n return {\n heading: headingNode,\n text: paragraphNode,\n links: linksNode,\n additionalContentItemContainer: { className: 'ms-content-block__details__additional-content__container' },\n additionalContentItemLinks: { className: 'ms-content-block__details__additional-content-cta' }\n };\n};\n\n/**\n * ContentBlockAdditionalContent component.\n * @param props - Content Block Additional content component props.\n * @returns Content Block Additional content view props.\n */\nexport const contentBlockAdditionalContent = (props: IContentBlockAdditionalContentProps): IContentBlockAdditionalContentViewProps | undefined => {\n const { additionalContent } = props;\n if (!additionalContent) {\n return undefined;\n }\n\n const reactNodes: IContentBlockAdditionalContentItemViewProps[] = [];\n additionalContent.map((item, index: number) => {\n return reactNodes.push(assembleNode(item, props, index));\n });\n\n return {\n additionalContentNode: { className: 'ms-content-block__details__additional-content' },\n additionalContentItems: reactNodes\n };\n};\n\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ILinksData } from '../content-block.props.autogenerated';\n\nexport interface IContentCardLinks {\n links: ILinksData[];\n requestContext: Msdyn365.IRequestContext;\n telemetryContent: ITelemetryContent;\n role?: string;\n onTextChange?(index: number): (event: Msdyn365.ContentEditableEvent) => void;\n}\n\n/**\n *\n * ContentCardLinks component.\n * @extends {React.PureComponent}\n */\nexport class ContentCardLinks extends React.PureComponent {\n public render(): JSX.Element {\n const editableLinks = this._mapEditableLinks(this.props.links);\n return (\n
\n { editableLinks && editableLinks.length > 0 ? : null}\n
\n );\n }\n\n private readonly _mapEditableLinks = (linkdata: ILinksData[]): Msdyn365.ILinksData[] | null => {\n if (!linkdata || linkdata.length === 0) {\n return null;\n }\n const editableLinks: Msdyn365.ILinksData[] = [];\n linkdata.forEach((link, index) => {\n // Construct telemetry attribute to render\n const payLoad = getPayloadObject('click', this.props.telemetryContent, '', '');\n const linkText = link.linkText ? link.linkText : '';\n payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.props.telemetryContent, payLoad);\n const btnClass = index === 0 ? 'msc-cta__primary' : 'msc-cta__secondary';\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: link.ariaLabel,\n className: btnClass,\n linkText: link.linkText,\n linkUrl: link.linkUrl.destinationUrl,\n openInNewTab: link.openInNewTab,\n role: this.props.role,\n additionalProperties: attributes,\n onClick: onTelemetryClick(this.props.telemetryContent, payLoad, linkText)\n };\n editableLinks.push(editableLink);\n });\n\n return editableLinks;\n };\n}\nexport default ContentCardLinks;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { contentBlockAdditionalContent, IContentBlockAdditionalContentViewProps } from './components/additional-content';\nimport LinksComponent from './components/links';\nimport { actionableRegion as region, IContentBlockConfig, IContentBlockProps } from './content-block.props.autogenerated';\n\nexport interface IContentBlockViewProps extends IContentBlockProps<{}> {\n title?: React.ReactNode;\n text?: React.ReactNode;\n image?: React.ReactNode;\n links?: React.ReactNode;\n className?: string;\n contentBlockContainer: IModuleProps;\n imageContainer: INodeProps;\n detailsContainer: INodeProps;\n contentBlockAnchorTag?: INodeProps;\n imageLink?: string;\n imageAriaLabel?: string;\n additionalContent?: IContentBlockAdditionalContentViewProps;\n handleAdditionalText?(): void;\n handleAdditionalParagraph?(): void;\n handleAdditionalLinkTextChange?(): void;\n}\n\n/**\n * Site-builder configuration for the module.\n */\nexport interface IContentBlockFullConfig extends IContentBlockConfig {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- This field comes from SDK.\n msdyn365__moduleLayout?: string;\n}\n\n/**\n * ContentCard component.\n * @extends {React.PureComponent}\n */\nexport class ContentBlock extends React.PureComponent> {\n private readonly telemetryContent: ITelemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry);\n\n public render(): JSX.Element | null {\n const {\n heading,\n paragraph,\n image,\n links,\n className,\n imageAriaLabel\n } = this.props.config;\n const contentBlockTitle = heading && (\n \n );\n const imageProps = {\n gridSettings: this.props.context.request.gridSettings ?? {},\n imageSettings: image?.imageSettings\n };\n const contentBlockLinks = links && ArrayExtensions.hasElements(links) && (\n \n );\n const contentBlockText = paragraph && (\n \n );\n const contentBlockImage = (\n \n );\n\n if (\n !contentBlockTitle &&\n !contentBlockText &&\n !contentBlockLinks\n ) {\n this.props.context.telemetry.error(\n 'Content block content is empty, module wont render.'\n );\n return null;\n }\n const contentBlockviewProps = {\n ...this.props,\n title: contentBlockTitle,\n text: contentBlockText,\n image: contentBlockImage,\n links: contentBlockLinks,\n moduleClass: this.props.config.className,\n contentBlockContainer: {\n moduleProps: this.props,\n className: classnames('ms-content-block', className)\n },\n imageContainer: { className: 'ms-content-block__image' },\n detailsContainer: { className: 'ms-content-block__details' },\n contentBlockAnchorTag: {\n tag: 'a',\n className: 'ms-content-block__link',\n role: 'link'\n },\n imageLink: this._getImageLink(),\n imageAriaLabel,\n additionalContent: contentBlockAdditionalContent({\n requestContext: this.props.context.request,\n additionalContent: this.props.config.additionalContent,\n handleAdditionalTextChange: this.handleAdditionalTextChange,\n handleAdditionalParagraphChange: this.handleAdditionalParagraphChange,\n handleAdditionalLinkTextChange: this.handleAdditionalLinkTextChange\n\n }),\n handleAdditionalText: this.handleAdditionalTextChange,\n handleAdditionalParagraph: this.handleAdditionalParagraphChange,\n handleAdditionalLinkTextChange: this.handleAdditionalLinkTextChange\n };\n\n return this.props.renderView(contentBlockviewProps) as React.ReactElement;\n }\n\n /**\n * To handle text change.\n * @param event - To handle text change event.\n * @name - HandleTextChange\n * @public\n * @returns - The Text value.\n */\n public handleTextChange = (event: Msdyn365.ContentEditableEvent) => this.props.config.heading!.text = event.target.value;\n\n /**\n * To handle paragraph change.\n * @param event - To handle text change event.\n * @name - HandleParagraphChange\n * @public\n * @returns - The Paragraph value.\n */\n public handleParagraphChange = (event: Msdyn365.ContentEditableEvent) => this.props.config.paragraph = event.target.value;\n\n /**\n * Handle link text change.\n * @param linkIndex - The link index.\n * @returns - Void.\n */\n public handleLinkTextChange = (linkIndex: number) => (event: Msdyn365.ContentEditableEvent) => {\n if (this.props.config.links && this.props.config.links[Number(linkIndex)]) {\n this.props.config.links[Number(linkIndex)].linkText = event.target.value;\n }\n };\n\n public handleAdditionalTextChange(index: number, event: Msdyn365.ContentEditableEvent): void {\n if (this.props.config.additionalContent) {\n this.props.config.additionalContent[Number(index)].heading = event.target.value;\n }\n }\n\n public handleAdditionalLinkTextChange(linkIndex: number, index: number, event: Msdyn365.ContentEditableEvent): void {\n const additionalContentObject = (this.props.config.additionalContent &&\n ArrayExtensions.hasElements(this.props.config.additionalContent) && this.props.config.additionalContent[Number(index)]) || {};\n if (additionalContentObject.links) {\n additionalContentObject.links[Number(linkIndex)].linkText = event.target.value;\n }\n }\n\n public handleAdditionalParagraphChange(index: number, event: Msdyn365.ContentEditableEvent): void {\n if (this.props.config.additionalContent) {\n this.props.config.additionalContent[Number(index)].subtext = event.target.value;\n }\n }\n\n private _getImageLink(): string | null {\n const { imageLink, links, actionableRegion } = this.props.config;\n if (actionableRegion === region.imageAndLinks) {\n if (imageLink?.destinationUrl) {\n return imageLink.destinationUrl;\n } else if (links && ArrayExtensions.hasElements(links) && links[0].linkUrl) {\n return links[0].linkUrl.destinationUrl;\n }\n return null;\n\n }\n return null;\n\n }\n}\n\nexport default ContentBlock;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport React, { ReactNode } from 'react';\n\nimport { ISocialShareViewProps } from './social-share';\n\nexport const SocialShareView: React.FC = props => {\n const { SocialShareList, SocialShareItemElements, SocialShareItem, SocialShare } = props;\n if (SocialShareItemElements.length === 0) {\n props.context.telemetry.error('Social media list is empty, module wont render');\n return null;\n }\n return (\n \n \n {SocialShareItemElements.map((SocialShareElement: ReactNode, index: number) => {\n return (\n \n {SocialShareElement}\n \n );\n })}\n \n \n );\n};\n\nexport default SocialShareView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISitePickerViewProps } from './site-picker';\n\nexport default (props: ISitePickerViewProps) => {\n return (\n <>\n {_renderSitePicker(props)}\n \n );\n};\n\nconst _renderDesktopView = (props: ISitePickerViewProps) => {\n const { SitePickerMenu, SitePickerMenuSpan } = props;\n return (\n <>\n \n {props.config.heading?.text}\n \n \n {props.siteOptionsState ? _renderSiteOptionsList(props) : null}\n \n );\n};\n\nconst _renderSiteOptionsList = (props: ISitePickerViewProps): React.ReactNode => {\n const { SitePickerMenuList,\n SitePickerMenuListItem,\n SitePickerMenuListItemArray\n } = props;\n const options = SitePickerMenuListItemArray!.map((item, index) => {\n return (\n \n {item}\n \n );\n }\n );\n return (\n \n {options}\n \n );\n};\n\nconst _renderMobileView = (props: ISitePickerViewProps): React.ReactNode => {\n const { SitePickerMobileContainer } = props;\n return (\n \n
\n {props.SitePickerMenuListItemArray?.map((item, index) => {\n return (\n
\n {item}\n
\n );\n })}\n
\n
\n );\n};\n\nconst _renderSitePicker = (props: ISitePickerViewProps): React.ReactNode => {\n const { isMobileView, SitePicker } = props;\n return (\n \n {isMobileView ? _renderMobileView(props) : _renderDesktopView(props)}\n \n );\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { IReviewsListData, IReviewsListResources } from '@msdyn365-commerce-modules/ratings-reviews';\nimport { IReportReviewModalViewProps } from '@msdyn365-commerce-modules/ratings-reviews/src/modules/reviews-list/components/report-review-modal';\nimport { IReviewCardViewProps } from '@msdyn365-commerce-modules/ratings-reviews/src/modules/reviews-list/components/review-card';\nimport { IReviewsListState, IReviewsListViewProps } from '@msdyn365-commerce-modules/ratings-reviews/src/modules/reviews-list/reviews-list';\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IReviewsListProps } from '../definition-extensions/reviews-list.ext.props.autogenerated';\n\n/**\n * Build Review Card.\n * @param props - Review Card ViewProps.\n * @param resources - Resource Strings.\n * @param isUserReview - User review flag.\n * @returns JSX Element.\n */\nconst buildReviewCard = (props: IReviewCardViewProps, resources: IReviewsListResources, isUserReview: boolean) => {\n return (\n \n \n
\n {props.rating}\n {props.date}\n
\n {props.name}\n
\n \n \n {props.reviewTitle}\n {props.reviewText}\n \n \n {props.responseName}\n {props.responseDate}\n {props.responseText}\n \n \n {isUserReview ? undefined :

\n {resources.wasReviewHelpfulText}\n

}\n {props.like}\n {props.dislike}\n {props.edit}\n
\n
\n
\n );\n};\n\n/**\n * Render Product Image.\n * @param props - WriteReview ViewProps.\n * @returns JSX Element.\n */\nconst renderProductImage = (props: IReviewsListViewProps & IReviewsListProps): JSX.Element => {\n const primaryImageSource = props.data.product.result?.PrimaryImageUrl;\n const imageUrl = generateImageUrl(primaryImageSource, props.context.request.apiSettings);\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=111&h=111&m=6', w: 111, h: 111 },\n sm: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\n md: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\n lg: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\n xl: { q: 'w=130&h=130&m=6', w: 130, h: 130 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n return (\n \n );\n};\n\n/**\n * Render Product Description.\n * @param props - WriteReview ViewProps.\n * @returns JSX Element.\n */\nconst renderProductDescription = (props: IReviewsListViewProps & IReviewsListProps): JSX.Element => {\n const product = props.data.product.result;\n return (\n \n
\n {renderProductImage(props)}\n
\n
\n
\n {product?.Name}\n
\n
\n {product?.Name}\n
\n
\n {product?.ItemId}\n
\n
\n
\n );\n};\n\n/**\n * Build Review modal.\n * @param props - Review list ViewProps.\n * @returns JSX Element.\n */\nconst createReviewModal = (props: IReviewsListViewProps & IReviewsListProps): JSX.Element => {\n const { resources, moduleProps, reviewModal } = props;\n return (\n \n {reviewModal.modalHeader}\n \n \n \n {renderProductDescription(props)}\n \n
\n {resources.selectRatingLabel}\n
\n {reviewModal.rating}\n
\n
\n \n {resources.reviewTitleLabel}\n {reviewModal.titleInput}\n \n \n {resources.reviewTextLabel}\n {reviewModal.textInput}\n \n {reviewModal.privacyPolicyUrl}\n {reviewModal.error}\n
\n
\n \n {reviewModal.submitButton}\n {reviewModal.cancelButton}\n \n
\n );\n};\n\n/**\n * Build Review modal.\n * @param props - Review modal ViewProps.\n * @param state - Review List State.\n * @returns JSX Element.\n */\nconst createReportModal = (props: IReportReviewModalViewProps, state: IReviewsListState): JSX.Element => {\n return (\n \n \n {state.reported ? props.headerSubmitted : props.header}\n \n \n {state.reported ? props.reportSubmittedMessage : [props.reportMessage, props.radioButtons, props.error]}\n \n \n {state.reported ? props.succesfulButton : [props.submitButton, props.cancelButton]}\n \n \n );\n};\n\n/**\n * ReviewsList view.\n * @param props - Ratings ReviewsList ViewProps.\n * @returns ReviewsList view module.\n */\nconst ReviewsListview: React.FC> = props => {\n const {\n filterByDropdown,\n heading,\n moduleProps,\n noReviewsMessage,\n noReviewsWithFilterMessage,\n pageControls,\n refineReviewsProps,\n reportReviewModal,\n reviewsListProps,\n reviewCards,\n sortByDropdown,\n state,\n userReview,\n resources\n } = props;\n\n if (!userReview && !ArrayExtensions.hasElements(reviewCards) && !state.isFilterApplied) {\n return (\n {noReviewsMessage}\n );\n }\n\n return (\n \n {heading}\n \n {sortByDropdown}\n {filterByDropdown}\n \n \n {userReview && buildReviewCard(userReview, resources, true)}\n {reviewCards.map(review => {\n return buildReviewCard(review, resources, false);\n })}\n \n { !ArrayExtensions.hasElements(reviewCards) && state.isFilterApplied && noReviewsWithFilterMessage}\n {pageControls}\n {createReviewModal(props)}\n {createReportModal(reportReviewModal, state)}\n \n );\n};\n\nexport default ReviewsListview;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport {\n ICartlinesViewProps,\n ICartResources,\n ICartViewProps,\n IOrderSummaryErrors\n} from '@msdyn365-commerce-modules/cart';\nimport { ICartLineItemViewProps } from '@msdyn365-commerce-modules/cart/dist/types/modules/cart/components/cart-line-items-promotion';\nimport { IInvoiceSummaryLines } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport { Button, getPayloadObject, getTelemetryAttributes, INodeProps, ITelemetryContent, Node, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nconst CartView: React.FC = (props: ICartViewProps) => (\n
\n {props.title}\n {props.promotionOptions && _renderPromotions(props.promotionOptions)}\n {props.multiplePickUpEnabled ? _renderCartLinesGroup(props, props.resources) : \n {_renderCartlines(props.cartlines, props.resources, props.storeSelector, props.backToShoppingButton, props.waitingComponent, props.cartLoadingStatus,\n props.cartDataResult, props.telemetryContent, props.multiplePickUpEnabled, props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode)}\n }\n {props.orderSummaryHeading &&\n \n {props.orderSummaryHeading}\n {props.cart?.hasInvoiceLine ? _renderInvoiceSummarylines(props.invoiceSummaryLineitems, props.OrderSummaryItems, props) : _renderOrderSummarylines(props.orderSummaryLineitems, props.OrderSummaryItems, props)}\n {_renderErrorBlock(props.OrderSummaryErrors)}\n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n {props.backToShoppingButton}\n {props.createTemplateFromCartButton}\n }\n {props.storeSelector}\n
\n);\n\nconst _renderPromotions = (promotions: ICartLineItemViewProps): JSX.Element | undefined => {\n return (\n <>\n \n {promotions.promotionMessage}\n {promotions.promotionSeeAllLink}\n {promotions.promotionDialog}\n \n\n \n );\n\n};\n\nconst _renderCartlines = (cartLines: ICartlinesViewProps[] | undefined, resources: ICartResources, storeSelector: React.ReactNode | undefined,\n backToShoppingButton: React.ReactNode, waitingComponent: React.ReactNode, cartLoadingStatus: string, cartDataResult: boolean,\n telemetryContent?: ITelemetryContent, mulitplePickUp?: boolean, emailDeliveryModeCode?: string): JSX.Element[] | JSX.Element => {\n\n const { emptyCartText } = resources;\n\n if (cartLoadingStatus) {\n return (<>\n {cartLoadingStatus}\n );\n }\n if (cartLines) {\n return cartLines.map((cartLine, index) => {\n return (\n
\n {cartLine.cartline}\n {mulitplePickUp ? null : _renderBOPISBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\n {\n mulitplePickUp ? (\n \n {_renderGroupBOPISBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\n {cartLine.addToOrderTemplate}\n {cartLine.addToWishlist}\n {cartLine.remove}\n \n ) : (cartLine.addToOrderTemplate ? (\n \n {cartLine.addToOrderTemplate}\n {cartLine.addToWishlist}\n {cartLine.remove}\n \n ) : (\n <>\n {cartLine.addToWishlist}\n {cartLine.remove}\n \n ))\n }\n
\n );\n });\n }\n return (cartDataResult ? (\n
\n

\n {emptyCartText}\n

\n {backToShoppingButton}\n
\n ) : <>\n {waitingComponent}\n \n );\n\n};\n\n/**\n * On Toggle function.\n * @param cartLine -Cartline.\n * @param isBopisSelected -Boolean.\n * @returns Set state of button.\n */\nconst onToggleBopisHandler = (cartLine: ICartlinesViewProps, isBopisSelected: boolean) => () => {\n cartLine.pickUpInStore && cartLine.pickUpInStore.callbacks.toggleBopis(!isBopisSelected);\n};\n\n/**\n * On change store function.\n * @param cartLine -CartLine items prop.\n * @returns Set state of button.\n */\nconst onChangeStoreHandler = (cartLine: ICartlinesViewProps) => () => {\n cartLine.pickUpInStore && cartLine.pickUpInStore.callbacks.toggleBopis(true);\n};\n\nconst _renderBOPISBlock = (cartLine: ICartlinesViewProps, resources: ICartResources, storeSelector: React.ReactNode | undefined, telemetryContent?: ITelemetryContent, emailDeliveryModeCode?: string): JSX.Element | null => {\n // If it is electronic item cart line, then return null for BOPISBlock.\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\n return null;\n }\n\n const { shipInsteadDisplayText, shipToAddressDisplayText, pickItUpDisplayText, pickUpAtStoreWithLocationText, changeStoreDisplayText } = resources;\n\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n \n
\n {isBopisSelected ? \n {pickUpAtStoreWithLocationText}\n : \n {shipToAddressDisplayText}\n }\n
\n {\n isBopisSelected &&\n
\n \n {cartLine.pickUpInStore.orgUnitName}\n \n \n {changeStoreDisplayText}\n \n
\n }\n \n
\n );\n};\n\nconst _renderErrorBlock = (errorData: IOrderSummaryErrors | undefined): JSX.Element | null => {\n if (!errorData || errorData.errors.length === 0) {\n return null;\n }\n return (\n \n {errorData.header}\n {errorData.errors}\n \n );\n};\n\nconst _renderOrderSummarylines = (orderSummaryLines: IOrderSummaryLines | undefined, OrderSummaryItems: INodeProps, props: ICartViewProps): JSX.Element | null => {\n if (!orderSummaryLines) {\n return null;\n }\n return (\n \n {props.promoCode}\n {orderSummaryLines.subtotal}\n {orderSummaryLines.shipping}\n {orderSummaryLines.otherCharge}\n {orderSummaryLines.tax}\n {orderSummaryLines.totalDiscounts ? orderSummaryLines.totalDiscounts : null}\n {orderSummaryLines.orderTotal}\n \n );\n};\n\nconst _renderInvoiceSummarylines = (invoiceSummaryLines: IInvoiceSummaryLines | undefined, OrderSummaryItems: INodeProps, props: ICartViewProps): JSX.Element | null => {\n if (!invoiceSummaryLines) {\n props.context.telemetry.error('InvoiceSummary content is empty, module wont render');\n return null;\n }\n return (\n \n {invoiceSummaryLines.invoices}\n {invoiceSummaryLines.giftCard}\n {invoiceSummaryLines.loyalty}\n {invoiceSummaryLines.orderTotal}\n \n );\n};\n\nconst _renderCartLinesGroup = (props: ICartViewProps, resources: ICartResources): JSX.Element | undefined => {\n if (props.cartLinesGroup && props.cartLinesGroup.length > 0) {\n return (\n
\n { props.cartLinesGroup.map(cartlines => {\n return (
\n {_renderCartLinesGroupHeader(cartlines[0], props.storeSelector, resources, _countItems(cartlines), props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode)}\n {_renderCartlines(cartlines, props.resources, props.storeSelector, props.backToShoppingButton, props.waitingComponent, props.cartLoadingStatus, props.cartDataResult,\n props.telemetryContent, props.multiplePickUpEnabled, props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode)}\n
);\n })}\n
\n );\n }\n return (props.cartDataResult ? (\n
\n
\n

\n {props.resources.emptyCartText}\n

\n {props.backToShoppingButton}\n
\n
\n ) : <>\n {props.waitingComponent}\n \n );\n\n};\nconst _renderCartLinesGroupHeader = (cartLine: ICartlinesViewProps, storeSelector: React.ReactNode | undefined, resources: ICartResources, count: number, emailDeliveryModeCode?: string) => {\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\n const { pickUpText, shippingText, emailshippingText } = resources;\n let groupTitle: string;\n\n groupTitle = isBopisSelected ? pickUpText : shippingText;\n groupTitle = cartLine.data && cartLine.data.cartline.DeliveryMode === emailDeliveryModeCode ? emailshippingText : groupTitle;\n\n return (\n <>\n
\n

\n

\n {groupTitle}\n

\n {_renderCartLinesGroupTitle(cartLine, resources, count)}\n
\n \n );\n};\n\nconst _renderGroupBOPISBlock = (cartLine: ICartlinesViewProps, resources: ICartResources, storeSelector: React.ReactNode | undefined, telemetryContent?: ITelemetryContent, emailDeliveryModeCode?: string): JSX.Element | null => {\n // If it is electronic item cart line, then return null for GroupBOPISBlock.\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\n return null;\n }\n\n const { changeStoreDisplayText, shipInsteadDisplayText, pickItUpDisplayText } = resources;\n\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n <>\n {isBopisSelected ? : null }\n \n {isBopisSelected ? shipInsteadDisplayText : pickItUpDisplayText}\n \n \n );\n};\n\nconst _countItems = (cartLine: ICartlinesViewProps[]): number => {\n let countItem = 0;\n countItem = cartLine.reduce((count, item) => {\n return count + (item.data?.cartline.Quantity || 0);\n\n }, 0);\n return countItem;\n};\n\nconst _renderCartLinesGroupTitle = (cartLine: ICartlinesViewProps, resources: ICartResources, count: number) => {\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\n const { itemLabel, itemsLabel } = resources;\n const suffix = count > 1 ? itemsLabel : itemLabel;\n return (\n <>\n \n {isBopisSelected ?

\n {cartLine.pickUpInStore?.deliveryOption}\n {', '}\n {cartLine.pickUpInStore?.orgUnitName}\n

: null}\n

\n (\n {count}\n {' '}\n {suffix}\n )\n

\n
\n \n );\n};\n\nexport default CartView;\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { IComponent, IComponentProps } from '@msdyn365-commerce/core';\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\nimport { Coupon } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Button, format, getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\n/**\r\n * IPromoCodeProps: Interface for promo code component.\r\n */\r\nexport interface IPromoCodeProps extends IComponentProps<{}> {\r\n cart: ICartState | undefined;\r\n promoCodeHeadingText: string;\r\n appliedPromoCodeHeadingText: string;\r\n removePromoAriaLabelFormat: string;\r\n promoPlaceholderText: string;\r\n promoCodeApplyButtonText: string;\r\n collapseTimeOut: number;\r\n removePromoText: string;\r\n invalidPromoCodeErrorText: string;\r\n failedToAddPromoCodeErrorText: string;\r\n duplicatePromoCodeErrorText: string;\r\n failedToRemovePromoCodeErrorText: string;\r\n\r\n /** The telemetry content. */\r\n telemetryContent?: ITelemetryContent;\r\n promoCodeApplyCallback?(): void;\r\n}\r\n\r\n/**\r\n * IPromoCodeProps: Interface for promo code component.\r\n */\r\nexport interface IPromoCodeComponent extends IComponent { }\r\n\r\n/**\r\n * IPromoCodeProps: Interface for promo code state.\r\n */\r\ninterface IPromoCodeState {\r\n promoCodeInputValue: string;\r\n error: string;\r\n canApply: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * The PromoCode component renders the promocode section.\r\n * @extends {React.PureComponent}\r\n */\r\nclass PromoCode extends React.PureComponent {\r\n\r\n private readonly payLoad: IPayLoad;\r\n\r\n public constructor(props: IPromoCodeProps) {\r\n super(props);\r\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, TelemetryConstant.ApplyPromoCode);\r\n this.state = {\r\n promoCodeInputValue: '',\r\n error: '',\r\n canApply: false\r\n };\r\n }\r\n\r\n public render(): JSX.Element {\r\n return (\r\n
\r\n
\r\n {this.props.promoCodeHeadingText}\r\n
\r\n {this._renderForm(this.props.promoPlaceholderText, this.props.promoCodeApplyButtonText, this.props.cart)}\r\n

\r\n {this.state.error}\r\n

\r\n {this._renderAppliedPromoCode(this.props)}\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * On input change method.\r\n * @param event - Change event.\r\n */\r\n private readonly _onInputChangeHandler = (event: React.ChangeEvent) => {\r\n const error = event.target.value === '' ? '' : this.state.error;\r\n this.setState({\r\n promoCodeInputValue: event.target.value, error,\r\n canApply: !!event.target.value\r\n });\r\n };\r\n\r\n /**\r\n * Apply promo code method.\r\n * @param cartState - Cart state interface.\r\n */\r\n private readonly _applyPromotion = (cartState: ICartState | undefined) => {\r\n if (!cartState) {\r\n return;\r\n }\r\n const appliedPromo = this.state.promoCodeInputValue;\r\n\r\n cartState.addPromoCode({ promoCode: appliedPromo })\r\n .then(result => {\r\n if (result.status === 'SUCCESS') {\r\n // Show success text\r\n this.setState({ promoCodeInputValue: '', error: '', canApply: false });\r\n this.props.promoCodeApplyCallback?.();\r\n } else if (result.substatus === 'ALREADYADDED') {\r\n this.setState({ error: this.props.duplicatePromoCodeErrorText });\r\n } else {\r\n this.setState({ error: this.props.invalidPromoCodeErrorText });\r\n }\r\n })\r\n .catch(() => {\r\n this.setState({ error: this.props.failedToAddPromoCodeErrorText });\r\n });\r\n };\r\n\r\n /**\r\n * On submit action.\r\n * @param cartState - Cart state.\r\n * @returns Apply promotion.\r\n */\r\n private readonly _onSubmitHandler = (cartState: ICartState | undefined) => (event: React.FormEvent) => {\r\n event.preventDefault();\r\n this._applyPromotion(cartState);\r\n };\r\n\r\n /**\r\n * On apply promotion.\r\n * @param cartState - Cart state.\r\n * @returns Apply promotion.\r\n */\r\n private readonly applyPromotionHandler = (cartState: ICartState | undefined) => () => {\r\n this._applyPromotion(cartState);\r\n };\r\n\r\n /**\r\n * Renders promo code form.\r\n * @param promoPlaceholderText - Promo code input box placeholder string.\r\n * @param promoCodeApplyButtonText - Promo code button text string.\r\n * @param cartState - Cart state interface.\r\n * @returns Promo code form.\r\n */\r\n private readonly _renderForm = (promoPlaceholderText: string, promoCodeApplyButtonText: string, cartState: ICartState | undefined) => {\r\n\r\n const attributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n {promoCodeApplyButtonText}\r\n \r\n
\r\n
\r\n );\r\n };\r\n\r\n /**\r\n * Remove promo code method.\r\n * @param cartState - Cart state interface.\r\n * @param event - Mouse event.\r\n */\r\n private readonly _removePromotion = (cartState: ICartState | undefined, event: React.MouseEvent) => {\r\n if (!cartState) {\r\n return;\r\n }\r\n const code = event.currentTarget.getAttribute('data-value') ?? '';\r\n cartState.removePromoCodes({\r\n promoCodes: [code]\r\n })\r\n .then(result => {\r\n if (result.status === 'SUCCESS') {\r\n this.setState({ error: '' });\r\n this.props.promoCodeApplyCallback?.();\r\n }\r\n })\r\n .catch(() => {\r\n this.setState({ error: this.props.failedToRemovePromoCodeErrorText });\r\n });\r\n\r\n };\r\n\r\n /**\r\n * Renders applied promo code form.\r\n * @param props - Promo code component props.\r\n * @returns Applied promo code.\r\n */\r\n private readonly _renderAppliedPromoCode = (props: IPromoCodeProps) => {\r\n if (!props.cart || !props.cart.cart.Coupons || !ArrayExtensions.hasElements(props.cart.cart.Coupons)) {\r\n return;\r\n }\r\n\r\n /**\r\n * On remove promotion action.\r\n * @param event - Mouse event.\r\n */\r\n const removePromotionHandler = (event: React.MouseEvent) => {\r\n this._removePromotion(props.cart, event);\r\n };\r\n\r\n return (\r\n <>\r\n {\r\n props.cart.cart.Coupons.map((coupon: Coupon) => {\r\n const ariaLabel = props.removePromoAriaLabelFormat ? format(props.removePromoAriaLabelFormat, props.removePromoText, coupon.Code) : '';\r\n\r\n return (\r\n
\r\n
\r\n {'Code '}\r\n \r\n {coupon.Code}\r\n \r\n {'Applied '}\r\n\r\n
\r\n \r\n
\r\n );\r\n })\r\n }\r\n \r\n );\r\n };\r\n}\r\n\r\nexport default PromoCode;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { ICartlinesViewProps, ICartResources, ICartViewProps, IOrderSummaryErrors } from '@msdyn365-commerce-modules/cart';\r\nimport { ICartLineItemViewProps } from '@msdyn365-commerce-modules/cart/src/modules/cart/components/cart-line-items-promotion';\r\nimport { IInvoiceSummaryLines } from '@msdyn365-commerce-modules/invoice-payment-summary';\r\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Button, getPayloadObject, getTelemetryAttributes, INodeProps, ITelemetryContent, Node, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { useEffect } from 'react';\r\n\r\nimport { ICartProps as ICartExtensionProps } from '../definition-extensions/cart.ext.props.autogenerated';\r\n\r\n/**\r\n * Toggle Bopis Function.\r\n * @param cartLine -CartLine.\r\n * @param isBopisSelected -Boolean.\r\n * @returns Toggle Bopis.\r\n */\r\nconst toggleBopisHandler = (cartLine: ICartlinesViewProps, isBopisSelected: boolean) => () => {\r\n cartLine.pickUpInStore?.callbacks.toggleBopis(!isBopisSelected);\r\n};\r\n\r\n/**\r\n * Change Store Function.\r\n * @param cartLine -CartLine.\r\n * @returns Toggle Bopis.\r\n */\r\nconst onChangeStoreHandler = (cartLine: ICartlinesViewProps) => () => {\r\n cartLine.pickUpInStore?.callbacks.toggleBopis(true);\r\n};\r\n\r\n/**\r\n * Render Bopis block.\r\n * @param cartLine - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param storeSelector - Store selector element.\r\n * @param telemetryContent - The telemetry object.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderBopisBlock = (cartLine: ICartlinesViewProps, resources: ICartResources, storeSelector: React.ReactNode | undefined,\r\n telemetryContent?: ITelemetryContent, emailDeliveryModeCode?: string): JSX.Element | null => {\r\n // If it is electronic item cart line, then return null for BOPISBlock.\r\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\r\n return null;\r\n }\r\n\r\n const { shipInsteadDisplayText, shipToAddressDisplayText, pickItUpDisplayText, pickUpAtStoreWithLocationText, changeStoreDisplayText } = resources;\r\n\r\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\r\n\r\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\r\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n return (\r\n \r\n
\r\n {isBopisSelected ? \r\n {pickUpAtStoreWithLocationText}\r\n : \r\n {shipToAddressDisplayText}\r\n }\r\n
\r\n {\r\n isBopisSelected &&\r\n
\r\n \r\n {cartLine.pickUpInStore.orgUnitName}\r\n \r\n \r\n {changeStoreDisplayText}\r\n \r\n
\r\n }\r\n \r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Render Bopis block.\r\n * @param cartLine - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param storeSelector - Store selector element.\r\n * @param telemetryContent - The telemetry object.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderGroupBopisBlock = (cartLine: ICartlinesViewProps, resources: ICartResources, storeSelector: React.ReactNode | undefined,\r\n telemetryContent?: ITelemetryContent, emailDeliveryModeCode?: string): JSX.Element | null => {\r\n // If it is electronic item cart line, then return null for GroupBOPISBlock.\r\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\r\n return null;\r\n }\r\n\r\n const { changeStoreDisplayText, shipInsteadDisplayText, pickItUpDisplayText } = resources;\r\n\r\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\r\n\r\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\r\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n return (\r\n <>\r\n {isBopisSelected ? : null}\r\n \r\n {isBopisSelected ? shipInsteadDisplayText : pickItUpDisplayText}\r\n \r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render Cart Lines.\r\n * @param cartLine - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param storeSelector - Store selector element.\r\n * @param telemetryContent - The telemetry object.\r\n * @param isMultiplePickUp - FLag to check if there multiple pickups.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartLine = (cartLine: ICartlinesViewProps, resources: ICartResources, storeSelector: React.ReactNode | undefined,\r\n telemetryContent?: ITelemetryContent, isMultiplePickUp?: boolean, emailDeliveryModeCode?: string): JSX.Element => {\r\n\r\n if (cartLine.error === resources.outOfStockErrorMessage) {\r\n return (\r\n \r\n {cartLine.addToWishlist}\r\n {cartLine.remove}\r\n \r\n );\r\n }\r\n\r\n if (isMultiplePickUp) {\r\n return (\r\n \r\n {renderGroupBopisBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\r\n {cartLine.addToOrderTemplate}\r\n {cartLine.addToWishlist}\r\n {cartLine.remove}\r\n \r\n );\r\n }\r\n\r\n if (cartLine.addToOrderTemplate) {\r\n return (\r\n \r\n {cartLine.addToOrderTemplate}\r\n {cartLine.addToWishlist}\r\n {cartLine.remove}\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n {cartLine.addToWishlist}\r\n {cartLine.remove}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render Cart Lines.\r\n * @param cartLines - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param storeSelector - Store selector element.\r\n * @param telemetryContent - The telemetry object.\r\n * @param isMultiplePickUp - Flag to check if there multiple pickups.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartlinesInternal = (cartLines: ICartlinesViewProps[], resources: ICartResources,\r\n storeSelector: React.ReactNode | undefined, telemetryContent?: ITelemetryContent, isMultiplePickUp?: boolean,\r\n emailDeliveryModeCode?: string): JSX.Element[] | JSX.Element => {\r\n return (\r\n cartLines.map((cartLine, index) => {\r\n const itemIndex = index;\r\n return (\r\n
\r\n {cartLine.cartline}\r\n \r\n {isMultiplePickUp ? null : renderBopisBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\r\n {\r\n renderCartLine(cartLine, resources, storeSelector, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)\r\n }\r\n \r\n
\r\n );\r\n }));\r\n};\r\n\r\n/**\r\n * Render Cart Lines.\r\n * @param props - The cart line props.\r\n * @param cartLines - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param storeSelector - Store selector element.\r\n * @param waitingComponent - Waiting component element.\r\n * @param cartLoadingStatus - Cart loading status string.\r\n * @param isCartDataResult - Flag to check if there is cart data.\r\n * @param telemetryContent - The telemetry object.\r\n * @param isMultiplePickUp - Flag to check if there multiple pickups.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartlines = (props: ICartViewProps & ICartExtensionProps<{}>, cartLines: ICartlinesViewProps[] | undefined, resources: ICartResources,\r\n storeSelector: React.ReactNode | undefined, waitingComponent: React.ReactNode,\r\n cartLoadingStatus: string, isCartDataResult: boolean, telemetryContent?: ITelemetryContent, isMultiplePickUp?: boolean,\r\n emailDeliveryModeCode?: string): JSX.Element[] | JSX.Element => {\r\n\r\n if (cartLoadingStatus) {\r\n return (<>\r\n {cartLoadingStatus}\r\n );\r\n }\r\n\r\n // Props.CartlinesWrapper is only required on cart lines and when multiple pickup mode is disabled. This is also required to handle the empty cart styling.\r\n // Else, empty cart multiple pickup mode is disabled falls under the other cart line wrapper which is creating issue with Empty cart scenario.\r\n if (cartLines) {\r\n return props.multiplePickUpEnabled ? (\r\n renderCartlinesInternal(cartLines, resources, storeSelector, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)\r\n ) : (\r\n \r\n {renderCartlinesInternal(cartLines, resources, storeSelector, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)}\r\n \r\n );\r\n }\r\n\r\n return (isCartDataResult ? (\r\n
\r\n
\r\n { props.slots.emptyCart }\r\n
\r\n
\r\n ) : <>\r\n {waitingComponent}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render Cart Lines group title.\r\n * @param cartLine - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param count - Count of products.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartLinesGroupTitle = (cartLine: ICartlinesViewProps, resources: ICartResources, count: number) => {\r\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\r\n const { itemLabel, itemsLabel } = resources;\r\n const itemCountOne: number = 1;\r\n const suffix = count > itemCountOne ? itemsLabel : itemLabel;\r\n const countTitle = `(${count} ${suffix})`;\r\n return (\r\n <>\r\n \r\n {isBopisSelected ?

\r\n {cartLine.pickUpInStore?.deliveryOption}\r\n {', '}\r\n {cartLine.pickUpInStore?.orgUnitName}\r\n

: null}\r\n

\r\n {countTitle}\r\n

\r\n
\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render Cart Lines group title.\r\n * @param cartLine - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param count - Count of products.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartLinesGroupHeader = (cartLine: ICartlinesViewProps, resources: ICartResources, count: number, emailDeliveryModeCode?: string) => {\r\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\r\n const { pickUpText, shippingText, emailshippingText } = resources;\r\n let groupTitle: string;\r\n\r\n groupTitle = isBopisSelected ? pickUpText : shippingText;\r\n groupTitle = cartLine.data && cartLine.data.cartline.DeliveryMode === emailDeliveryModeCode ? emailshippingText : groupTitle;\r\n\r\n return (\r\n <>\r\n
\r\n

\r\n

\r\n {groupTitle}\r\n

\r\n {renderCartLinesGroupTitle(cartLine, resources, count)}\r\n
\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Returns count of products.\r\n * @param cartLine - The cart line view props.\r\n * @returns Number of products.\r\n */\r\nconst countItems = (cartLine: ICartlinesViewProps[]): number => {\r\n let countItem = 0;\r\n const defaultItemCount = 0;\r\n countItem = cartLine.reduce((count, item) => {\r\n return count + (item.data?.cartline.Quantity ?? defaultItemCount);\r\n\r\n }, defaultItemCount);\r\n return countItem;\r\n};\r\n\r\n/**\r\n * Render Cart Lines group.\r\n * @param props - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartLinesGroup = (props: ICartViewProps & ICartExtensionProps<{}>, resources: ICartResources): JSX.Element | undefined => {\r\n if (props.cartLinesGroup && ArrayExtensions.hasElements(props.cartLinesGroup)) {\r\n return (\r\n
\r\n { props.cartLinesGroup.map(cartlines => {\r\n return (
\r\n {renderCartLinesGroupHeader(cartlines[0], resources, countItems(cartlines),\r\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode)}\r\n {renderCartlines(props, cartlines, props.resources, props.storeSelector,\r\n props.waitingComponent, props.cartLoadingStatus, props.cartDataResult,\r\n props.telemetryContent, props.multiplePickUpEnabled, props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode)}\r\n
);\r\n })}\r\n
\r\n );\r\n }\r\n return (props.cartDataResult ? (\r\n
\r\n
\r\n {props.slots.emptyCart}\r\n
\r\n
\r\n ) : <>\r\n {props.waitingComponent}\r\n \r\n );\r\n\r\n};\r\n\r\n/**\r\n * Render error block.\r\n * @param errorData - Error component.\r\n * @returns JSX Element.\r\n */\r\nconst renderErrorBlock = (errorData: IOrderSummaryErrors | undefined): JSX.Element | null => {\r\n if (!errorData || !ArrayExtensions.hasElements(errorData.errors)) {\r\n return null;\r\n }\r\n return (\r\n \r\n {errorData.header}\r\n {errorData.errors}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render invoice summary.\r\n * @param invoiceSummaryLines - Invoice summary component.\r\n * @param orderSummaryItems - Order summary component.\r\n * @param props - The module props.\r\n * @returns JSX Element.\r\n */\r\nconst renderInvoiceSummarylines = (invoiceSummaryLines: IInvoiceSummaryLines | undefined, orderSummaryItems: INodeProps,\r\n props: ICartViewProps): JSX.Element | null => {\r\n if (!invoiceSummaryLines) {\r\n props.context.telemetry.error('InvoiceSummary content is empty, module wont render');\r\n return null;\r\n }\r\n return (\r\n \r\n {invoiceSummaryLines.invoices}\r\n {invoiceSummaryLines.giftCard}\r\n {invoiceSummaryLines.loyalty}\r\n {invoiceSummaryLines.orderTotal}\r\n \r\n );\r\n};\r\n\r\nconst _renderOrderSummarylinesTax = (\r\n orderSummaryLines: IOrderSummaryLines | undefined,\r\n props: ICartViewProps): JSX.Element | null => {\r\n\r\n useEffect(() => {\r\n const element: HTMLElement | null = document.querySelector('.ms-cart .msc-order-summary__line-tax-amount .msc-order-summary__value');\r\n const isBopisSelected = props.cartlines?.find(item => item.pickUpInStore?.isBopisSelected == true);\r\n if (isBopisSelected && isBopisSelected != undefined && element) {\r\n element.innerText = props.resources.yetToBeCalculatedText;\r\n }\r\n }, [props]);\r\n\r\n return (\r\n <>\r\n {orderSummaryLines?.tax}\r\n \r\n );\r\n}\r\n\r\n/**\r\n * Render order summary.\r\n * @param orderSummaryLines - Order summary component.\r\n * @param orderSummaryItems - Order summary items component.\r\n * @param props - The module props.\r\n * @returns JSX Element.\r\n */\r\nconst renderOrderSummarylines = (orderSummaryLines: IOrderSummaryLines | undefined, orderSummaryItems: INodeProps,\r\n props: ICartViewProps): JSX.Element | null => {\r\n if (!orderSummaryLines) {\r\n props.context.telemetry.error('OrderSummary content is empty, module wont render');\r\n return null;\r\n }\r\n const renderOrderSummarylinesTax = _renderOrderSummarylinesTax(orderSummaryLines, props);\r\n return (\r\n \r\n {orderSummaryLines.subtotal}\r\n {orderSummaryLines.totalDiscounts ? orderSummaryLines.totalDiscounts : null}\r\n {orderSummaryLines.shipping}\r\n {orderSummaryLines.otherCharge}\r\n {renderOrderSummarylinesTax}\r\n {orderSummaryLines.orderTotal}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render error block.\r\n * @param promotions - The module view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderPromotions = (promotions: ICartLineItemViewProps): JSX.Element | undefined => {\r\n return (\r\n <>\r\n \r\n {promotions.promotionMessage}\r\n \r\n {promotions.promotionSeeAllLink}\r\n \r\n {promotions.promotionDialog}\r\n \r\n\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render order summary checkout.\r\n * @param props - The module view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderOrderSummaryCheckout = (props: ICartViewProps): JSX.Element | undefined => {\r\n return (\r\n \r\n {props.cart?.hasInvoiceLine ? null : props.promoCode}\r\n \r\n {props.checkoutAsSignInUserButton}\r\n {props.checkoutAsGuestButton}\r\n \r\n {props.createTemplateFromCartButton}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render order summary checkout button.\r\n * @param props - The module view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderOrderSummaryCheckoutButton = (props: ICartViewProps): JSX.Element | undefined => {\r\n return (\r\n \r\n {props.checkoutAsSignInUserButton}\r\n {props.checkoutAsGuestButton}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render cart view.\r\n * @param props - The module view props.\r\n * @returns JSX Element.\r\n */\r\nconst CartView: React.FC> = (props: ICartViewProps & ICartExtensionProps<{}>) => {\r\n const totalItemCountOne: number = 1;\r\n const updatedTitle = (\r\n

\r\n {props.resources.cartTitle}\r\n \r\n {` (${Number(props.cart?.totalItemsInCart)} ${props.cart?.totalItemsInCart !== totalItemCountOne ? 'items' : 'item'})`}\r\n \r\n

\r\n );\r\n return (\r\n
\r\n {updatedTitle}\r\n
\r\n {props.orderSummaryLineitems?.orderTotal}\r\n
\r\n {renderOrderSummaryCheckoutButton(props)}\r\n {!props.cart?.hasInvoiceLine && props.promotionOptions && renderPromotions(props.promotionOptions)}\r\n {props.multiplePickUpEnabled ? renderCartLinesGroup(props, props.resources) : renderCartlines(props, props.cartlines,\r\n props.resources, props.storeSelector, props.waitingComponent, props.cartLoadingStatus, props.cartDataResult)}\r\n {props.orderSummaryHeading &&\r\n \r\n \r\n {props.orderSummaryHeading}\r\n {props.cart?.hasInvoiceLine ? renderInvoiceSummarylines(\r\n props.invoiceSummaryLineitems, props.OrderSummaryItems, props) : renderOrderSummarylines(\r\n props.orderSummaryLineitems, props.OrderSummaryItems, props)}\r\n {renderErrorBlock(props.OrderSummaryErrors)}\r\n \r\n {renderOrderSummaryCheckout(props)}\r\n }\r\n {props.storeSelector}\r\n
\r\n );\r\n};\r\n\r\nexport default CartView;\r\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { ISocialShareConfig, ISocialShareProps, orientation } from './social-share.props.autogenerated';\n\nexport interface ISocialShareViewProps extends ISocialShareProps {\n isConsentGiven: boolean;\n SocialShareItemElements: React.ReactNode[];\n SocialShare: IModuleProps;\n SocialShareList: INodeProps;\n SocialShareItem: INodeProps;\n SocialShareItemCustomization: INodeProps;\n}\n\n/**\n *\n * SocialShare component.\n * @extends {React.PureComponent>}\n */\nclass SocialShare extends React.PureComponent> {\n constructor(props: ISocialShareProps) {\n super(props);\n }\n\n public render(): JSX.Element | null {\n const { slots } = this.props;\n\n if (slots && slots.socialShareItems.length === 0) {\n this.props.context.telemetry.error('No social media is enable for sharing, module wont render');\n return null;\n }\n\n const isConsentGiven =\n this.props.context.request &&\n this.props.context.request.cookies &&\n this.props.context.request.cookies.isConsentGiven &&\n this.props.context.request.cookies.isConsentGiven();\n\n if (!isConsentGiven) {\n return null;\n }\n\n const viewprops = {\n ...this.props,\n SocialShare: {\n moduleProps: this.props,\n className: classnames('ms-social-share', this.props.config.className)\n },\n SocialShareList: {\n 'data-title': this.props.config.caption,\n className: `ms-social-share-ul ${this.props.config.caption && 'caption'} ${this.props.config.orientation === orientation.vertical ? 'vertical' : ''}`,\n tag: 'ul',\n role: 'group'\n },\n SocialShareItem: {\n className: 'ms-social-share-li',\n tag: 'li',\n tabIndex: '0',\n role: 'link'\n },\n SocialShareItemElements: slots && slots.socialShareItems.length > 0 && slots.socialShareItems\n };\n\n return this.props.renderView(viewprops) as React.ReactElement;\n }\n}\n\nexport default SocialShare;\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { RichTextComponent } from '@msdyn365-commerce/core';\r\nimport { ContactInformationType, DeliveryOption, OrgUnitContact, OrgUnitLocation, StoreHours } from '@msdyn365-commerce/retail-proxy';\r\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { ILocationHours, IStoreSelectorLocationLineItemProps, IStoreSelectorViewProps } from '@msdyn365-commerce-modules/store-selector';\r\nimport {\r\n IStoreSelectorFoundLocationsMessage }\r\n from '@msdyn365-commerce-modules/store-selector/src//modules/store-selector/components';\r\nimport { IHoursDisplayInfo }\r\n from '@msdyn365-commerce-modules/store-selector/src/modules/store-selector/components/store-selector-location-line-item/date-time-helpers';\r\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad, Module, Node, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nimport { IStoreSelectorProps, IStoreSelectorResources } from '../definition-extensions/store-selector.ext.props.autogenerated';\r\n\r\n/**\r\n * PickUpMethodComponent View Props Interface.\r\n */\r\nexport interface IPickupComponent extends IStoreSelectorLocationLineItemProps {\r\n pickUpStatesProps: IStoreSelectorViewProps;\r\n}\r\n\r\n/**\r\n * Found Locations Message component in Store Selector.\r\n * @param props - The component props.\r\n * @returns The JSX Element.\r\n */\r\nconst StoreSelectorFoundLocationsMessageComponent: React.FC = props => {\r\n const { locations, searchRadius, resources, isSeeAllStore, preferredDistanceUnit } = props;\r\n if (locations) {\r\n const storeCountMessage = preferredDistanceUnit === resources.milesShortText ? resources.storeCountMessage : resources.storeCountMessageInKm;\r\n\r\n return (\r\n ${locations.length.toString()}`) : storeCountMessage\r\n .replace('{count}', `${locations.length.toString()}`)\r\n .replace('{radius}', `${searchRadius.toString()}`)}\r\n />\r\n );\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Build distance string.\r\n * @param distance - The distance.\r\n * @param preferredDistanceUnit - The preferred distance unit.\r\n * @param resources - The module resources.\r\n * @param isLocationDisabled - True if location is disabled.\r\n * @returns The distance string.\r\n */\r\nconst buildDistanceString = (distance: number | undefined, preferredDistanceUnit: string,\r\n resources: IStoreSelectorResources & IStoreSelectorResources, isLocationDisabled?: boolean): string | undefined => {\r\n const closeDistance: number = 1;\r\n if (distance === undefined || isLocationDisabled) {\r\n return undefined;\r\n } else if (distance < closeDistance) {\r\n const closeDistanceString: string = resources.closeDistanceString;\r\n return closeDistanceString.replace('{preferredDistanceUnit}', preferredDistanceUnit);\r\n }\r\n const distanceAsString: string = resources.distanceString;\r\n return distanceAsString.replace('{preferredDistanceUnit}', preferredDistanceUnit)\r\n .replace('{distance}', Math.floor(distance).toString());\r\n\r\n};\r\n\r\n/**\r\n * Extract phone number.\r\n * @param contacts - Contacts array.\r\n * @returns Phone number.\r\n */\r\nconst extractPhoneNumber = (contacts: OrgUnitContact[] | undefined): string | undefined => {\r\n if (!contacts) {\r\n return undefined;\r\n }\r\n\r\n const allPhoneContacts = contacts.filter(contact => contact.ContactTypeValue === ContactInformationType.Phone && !contact.IsPrivate);\r\n\r\n if (ArrayExtensions.hasElements(allPhoneContacts)) {\r\n const primaryPhoneContact = allPhoneContacts.find(contact => contact.IsPrimary);\r\n\r\n if (primaryPhoneContact) {\r\n return primaryPhoneContact.Locator;\r\n }\r\n\r\n return allPhoneContacts[0].Locator;\r\n }\r\n\r\n return undefined;\r\n};\r\n\r\n/**\r\n * Render Store Hours Day.\r\n * @param displayTime - Store Hours Information.\r\n * @param storeHoursDayPeriodString - The string for store hours day period.\r\n * @param storeHoursDayString - The string for store hours day period.\r\n * @returns JSX element with store hours day.\r\n */\r\nconst buildStoreHoursDay = (displayTime: IHoursDisplayInfo, storeHoursDayPeriodString: string, storeHoursDayString: string) => {\r\n return (\r\n ${displayTime.startDayShort}`)\r\n .replace('{endDay}',\r\n `${displayTime.endDayShort}`) : storeHoursDayString\r\n .replace('{startDay}', `${displayTime.startDayShort}`)}\r\n />\r\n );\r\n};\r\n\r\n/**\r\n * Render Store Hours.\r\n * @param storeHours - Store hours.\r\n * @param storeHoursList - Store hours list.\r\n * @param locationOpen - Location open.\r\n * @param resources - The module resources.\r\n * @returns JSX element with store hours.\r\n */\r\nconst renderStoreHours = (storeHours: StoreHours | undefined, storeHoursList: IHoursDisplayInfo[] | undefined,\r\n locationOpen: ILocationHours | undefined, resources: IStoreSelectorResources & IStoreSelectorResources): JSX.Element | null => {\r\n // First, use the store hours. This will allow listing day by day hours\r\n if (storeHours?.RegularStoreHours) {\r\n return (\r\n
\r\n {storeHoursList?.map(displayTime => (\r\n
\r\n {buildStoreHoursDay(displayTime, resources.storeHoursDayPeriod, resources.storeHoursDay)}\r\n
\r\n {displayTime.timeRange}\r\n
\r\n
\r\n ))}\r\n
\r\n );\r\n }\r\n\r\n // If that fails, fall back to using the OpenFrom and OpenTo properties on the location\r\n const storeOpenFrom: string = locationOpen?.openFrom ? locationOpen.openFrom : '';\r\n const storeOpenTo: string = locationOpen?.openTo ? locationOpen.openTo : '';\r\n return (\r\n
\r\n {(resources.storeHoursDayPeriod)\r\n .replace('{startDay}', storeOpenFrom)\r\n .replace('{endDay}', storeOpenTo)}\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Match delivery options.\r\n * @param productDeliveryOptions - The list of product delivery options.\r\n * @param storePickUpOptionList - The list of store pick up options.\r\n * @returns Matched delivery option.\r\n */\r\nconst matchDeliveryOptions = (productDeliveryOptions: DeliveryOption[] | undefined, storePickUpOptionList: DeliveryOption[] | undefined): DeliveryOption[] => {\r\n if (!productDeliveryOptions) {\r\n return [] as DeliveryOption[];\r\n }\r\n return productDeliveryOptions\r\n .map(productDeliveryOption => (storePickUpOptionList?.find(delivery => delivery.Code === productDeliveryOption.Code)))\r\n .filter(productDeliveryOption => productDeliveryOption) as DeliveryOption[];\r\n};\r\n\r\n/**\r\n * PickUpMethod Resources Interface.\r\n */\r\nexport interface IPickUpMethodResources {\r\n selectStoreText: string;\r\n pickUpMethodLabel: string;\r\n pickUpOptionPlaceholder: string;\r\n pickupOptionDropdownError: string;\r\n pickupButtonAriaLabel: string;\r\n}\r\n\r\n/**\r\n * PickUp method dropdown component.\r\n * @param props - The view props.\r\n * @returns JSX Element.\r\n */\r\nconst PickUpMethodDropdownComponent = (props: IPickupComponent & IPickUpMethodResources) => {\r\n const {\r\n handlers,\r\n location,\r\n pickUpStatesProps,\r\n selectStoreText,\r\n pickUpMethodLabel,\r\n pickUpOptionPlaceholder,\r\n pickupOptionDropdownError,\r\n pickupButtonAriaLabel,\r\n productPickUpOptionList,\r\n storePickUpOptionList } = props;\r\n const deliveryOptionList = matchDeliveryOptions(productPickUpOptionList, storePickUpOptionList);\r\n const [selectedStorePickUpOption, selectStorePickUpOption] = React.useState('');\r\n const [currentStorePickUpOption, setCurrentStorePickUpOption] = React.useState(pickUpOptionPlaceholder);\r\n const [isDropdownOpen, toggleDropdown] = React.useState(false);\r\n const [isError, setError] = React.useState(false);\r\n\r\n /**\r\n * Method to handle the store pickup option change.\r\n * @param event - Change Event.\r\n */\r\n const onChangeHandler = React.useCallback((event: React.MouseEvent) => {\r\n event.preventDefault();\r\n selectStorePickUpOption(event.currentTarget.value);\r\n setCurrentStorePickUpOption(event.currentTarget.dataset.description ? event.currentTarget.dataset.description : '');\r\n toggleDropdown(false);\r\n setError(false);\r\n }, []);\r\n\r\n /**\r\n * Method to render store location line pick up button.\r\n * @param filteredDeliveryMode - Filtered Delivery Mode.\r\n * @returns JSX Element.\r\n */\r\n const renderLocationLinePickupButton = (filteredDeliveryMode: DeliveryOption | undefined) => {\r\n return (\r\n filteredDeliveryMode !== undefined ?
\r\n \r\n {filteredDeliveryMode.Description}\r\n \r\n
: null\r\n );\r\n };\r\n\r\n /**\r\n * Method to handle the store pickup option submit.\r\n */\r\n const onClickHandler = React.useCallback(() => {\r\n if (!StringExtensions.isNullOrEmpty(selectedStorePickUpOption)) {\r\n handlers.onSelected(location, selectedStorePickUpOption);\r\n } else if (pickUpStatesProps.state.filteredPickupMode !== undefined) {\r\n handlers.onSelected(location, pickUpStatesProps.state.filteredPickupMode);\r\n } else {\r\n toggleDropdown(false);\r\n setError(true);\r\n }\r\n }, [location, selectedStorePickUpOption, handlers, pickUpStatesProps.state.filteredPickupMode]);\r\n\r\n const handleDropdownToggle = React.useCallback(() => {\r\n toggleDropdown(!isDropdownOpen);\r\n setError(false);\r\n }, [isDropdownOpen]);\r\n\r\n const filterDeliveryOption = deliveryOptionList.find((delivery: DeliveryOption) => delivery.Code === pickUpStatesProps.state.filteredPickupMode);\r\n const pickupInStoreButtonText: string = selectStoreText;\r\n const filteredDeliveryMode: DeliveryOption | undefined = (pickUpStatesProps.state.filteredPickupMode !== undefined ? filterDeliveryOption : undefined);\r\n return (\r\n \r\n
\r\n {pickUpMethodLabel}\r\n
\r\n {pickUpStatesProps.state.filteredPickupMode === undefined ?
\r\n \r\n {currentStorePickUpOption}\r\n \r\n \r\n {deliveryOptionList.map((delivery: DeliveryOption) => (\r\n \r\n \r\n {delivery.Description}\r\n \r\n \r\n ))}\r\n \r\n
\r\n {pickupOptionDropdownError}\r\n
\r\n
: renderLocationLinePickupButton(filteredDeliveryMode)}\r\n \r\n {pickupInStoreButtonText}\r\n \r\n \r\n );\r\n};\r\n\r\n/**\r\n * Method to render store location line item.\r\n * @param locationLineItem - The Location Line item view props.\r\n * @param props - The view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderStoreLocationLineItem = (locationLineItem: IStoreSelectorLocationLineItemProps,\r\n props: IStoreSelectorViewProps & IStoreSelectorProps) => {\r\n const {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from store-selector.tsx file\r\n hideStockStatus,\r\n index,\r\n isInStock,\r\n preferredStoreLocationId,\r\n isPreferredStoreEnabled,\r\n location,\r\n resources,\r\n storeHours,\r\n storeHoursList,\r\n stockStatusLabel,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from store-selector.tsx file\r\n storeLocatorView,\r\n telemetryContent } = locationLineItem;\r\n const storeName = location.OrgUnitName;\r\n const distanceAsString: string | undefined = buildDistanceString(location.Distance,\r\n locationLineItem.preferredDistanceUnit, props.resources, locationLineItem.isLocationDisabled);\r\n const storeAddress: string | undefined = location.Address;\r\n const phoneNumber: string | undefined = extractPhoneNumber(location.Contacts);\r\n\r\n const resourceLabel = isInStock ? resources.inStock : resources.outOfStock;\r\n const stockStatus = stockStatusLabel ? stockStatusLabel : resourceLabel;\r\n const stockText: string | undefined = (hideStockStatus) ? undefined : stockStatus;\r\n\r\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\r\n\r\n /**\r\n * Method to handle the change for preferred store.\r\n * @returns Void.\r\n */\r\n const onSetPreferredStoreClickHandler = () => () => {\r\n locationLineItem.handlers.onSetAsPreferredStore(locationLineItem.location.OrgUnitNumber);\r\n };\r\n\r\n const isPreferredStore = preferredStoreLocationId === location.OrgUnitNumber;\r\n payLoad.contentAction.etext = TelemetryConstant.PreferredStore;\r\n const preferredStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n payLoad.contentAction.etext = TelemetryConstant.RemovePreferredStore;\r\n const removePreferredStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n return (\r\n
\r\n
\r\n {storeLocatorView && \r\n {index}\r\n }\r\n \r\n {storeName}\r\n \r\n {distanceAsString ? \r\n {distanceAsString}\r\n : false}\r\n
\r\n
\r\n
\r\n

\r\n {locationLineItem.resources.contactInfoHeader}\r\n

\r\n {storeAddress && (\r\n
\r\n \r\n \r\n {storeAddress}\r\n \r\n
\r\n )}\r\n {phoneNumber && (\r\n
\r\n \r\n \r\n {phoneNumber}\r\n \r\n
\r\n )}\r\n
\r\n
\r\n

\r\n {locationLineItem.resources.storeHoursHeader}\r\n

\r\n {renderStoreHours(storeHours, storeHoursList, locationLineItem.locationOpen, props.resources)}\r\n
\r\n {\r\n !storeLocatorView &&\r\n
\r\n

\r\n {resources.availabilityInfoHeader}\r\n

\r\n {stockText &&

\r\n {stockText}\r\n

}\r\n
\r\n }\r\n {\r\n isPreferredStoreEnabled && (isPreferredStore ? \r\n {resources.preferredStoreText}\r\n : \r\n {resources.setAsPreferredStoreText}\r\n )\r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Render Store Location.\r\n * @param location - The location props.\r\n * @param index - The location index.\r\n * @param props - The view props.\r\n * @returns The JSX Element.\r\n */\r\nconst renderStoreLocation = (location: IStoreSelectorLocationLineItemProps,\r\n index: number, props: IStoreSelectorViewProps & IStoreSelectorProps): JSX.Element | undefined => {\r\n const {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from store-selector.tsx file\r\n hideStockStatus, storeLocatorView,\r\n isCurrentLocation,\r\n isInStock,\r\n productPickUpOptionList,\r\n resources,\r\n storePickUpOptionList,\r\n telemetryContent } = location;\r\n\r\n const orgUnitLocation = location.location;\r\n const selectedStoreLocationId = location.selectedStoreLocationId;\r\n const defaultAriaSetsize = 0;\r\n const canSelectLocation = hideStockStatus ?? isInStock;\r\n const storeName = location.location.OrgUnitName;\r\n const pickupInStoreAriaLabel: string = resources.selectLocationAriaLabelFormat.replace('{StoreName}', storeName ?? '');\r\n const pickupInStoreButtonText: string = resources.selectLocation;\r\n const pickUpOptionDropdownPlaceholderText: string = props.resources.pickupOptionDropdownPlaceholderText;\r\n\r\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\r\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\r\n const deliveryOptionList = matchDeliveryOptions(productPickUpOptionList, storePickUpOptionList);\r\n const selectStoreText = props.resources.selectStoreText;\r\n const pickUpMethodLabel = props.resources.pickUpMethodLabel;\r\n\r\n /**\r\n * Method to handle the pick up in store.\r\n * @returns Void.\r\n */\r\n const onPickupInStoreClickHandler = () => () => {\r\n location.handlers.onSelected(location.location);\r\n };\r\n\r\n /**\r\n * Render Store Locations.\r\n * @param unitLocation - The org unit location.\r\n * @returns Handler for onClick.\r\n */\r\n const onClickHandler = (unitLocation: OrgUnitLocation | undefined) => () => {\r\n location.onClick(unitLocation?.OrgUnitNumber);\r\n };\r\n\r\n const canSelectPickUpMethod = !ArrayExtensions.hasElements(deliveryOptionList) ? (\r\n \r\n {pickupInStoreButtonText}\r\n \r\n ) : ();\r\n const pickUpMethodSelection = (\r\n canSelectLocation ? canSelectPickUpMethod : (\r\n false\r\n )\r\n );\r\n\r\n return (\r\n \r\n \r\n {renderStoreLocationLineItem(location, props)}\r\n \r\n {!storeLocatorView && (isCurrentLocation ? (\r\n

\r\n {resources.currentLocation}\r\n

\r\n ) : pickUpMethodSelection)}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render Store Locations.\r\n * @param props - The view props.\r\n * @returns The JSX Element.\r\n */\r\nconst renderStoreLocations = (props: IStoreSelectorViewProps & IStoreSelectorProps) => {\r\n return (\r\n \r\n {\r\n props.locationListProps?.map((store, index) => {\r\n return renderStoreLocation(store, index, props);\r\n })\r\n }\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Store Selector View.\r\n * @param props - The view props.\r\n * @returns The JSX Element.\r\n */\r\nconst StoreSelectorViewComponent: React.FC> = props => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Store-Selector.tsx file\r\n const { BodyContainerProps, FooterContainerProps, HeaderContainerProps, HeaderProps, ModuleProps,\r\n locationsMessage,\r\n search,\r\n state,\r\n spinner,\r\n noLocationsMessage,\r\n terms } = props;\r\n\r\n return (\r\n \r\n \r\n {HeaderProps}\r\n \r\n \r\n {locationsMessage && }\r\n {search}\r\n {state.isSearchInProgress ? spinner : <>\r\n {props.locationListProps?.length ? renderStoreLocations(props) : noLocationsMessage}\r\n }\r\n \r\n \r\n {terms}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default StoreSelectorViewComponent;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { IContentBlockAdditionalContentItemViewProps,\r\n IContentBlockAdditionalContentViewProps, IContentBlockViewProps\r\n} from '@msdyn365-commerce-modules/content-block';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\n/**\r\n * Render Additional Content.\r\n * @param additionalContent - Additional content view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderAdditionalContent = (additionalContent: IContentBlockAdditionalContentViewProps) => {\r\n return (\r\n \r\n {additionalContent.additionalContentItems?.map((item: IContentBlockAdditionalContentItemViewProps) => {\r\n return (\r\n <>\r\n {item.heading}\r\n \r\n {item.text}\r\n \r\n {item.links}\r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render View.\r\n * @param props - The view props.\r\n * @returns -The JSX Element.\r\n */\r\nconst contentBlockView: React.FC = (props) => {\r\n const {\r\n contentBlockContainer,\r\n imageContainer,\r\n detailsContainer,\r\n title,\r\n text,\r\n links,\r\n image,\r\n contentBlockAnchorTag,\r\n imageLink,\r\n imageAriaLabel,\r\n additionalContent\r\n } = props;\r\n\r\n // @ts-expect-error HTML element need to be clear on run time.\r\n const hasImage: boolean = image.props.src;\r\n const imageClass: string = hasImage ? `${detailsContainer.className} withImage` : `${detailsContainer.className} withoutImage`;\r\n\r\n if (imageLink) {\r\n return (\r\n \r\n \r\n \r\n {image}\r\n \r\n
\r\n \r\n {title}\r\n {text}\r\n {links}\r\n {additionalContent && renderAdditionalContent(additionalContent)}\r\n \r\n \r\n );\r\n }\r\n return (\r\n \r\n \r\n {image}\r\n \r\n \r\n {title}\r\n {text}\r\n {links}\r\n {additionalContent && renderAdditionalContent(additionalContent)}\r\n \r\n \r\n );\r\n\r\n};\r\n\r\nexport default contentBlockView;\r\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getPayloadObject, getTelemetryAttributes, getTelemetryObject, IModuleProps, INodeProps, IPayLoad, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IFooterItemConfig, IFooterItemProps, IHeadingData, ILinkData } from './footer-item.props.autogenerated';\n\nexport interface IFooterViewProps extends IFooterItemProps {\n heading: React.ReactNode;\n image: React.ReactNode;\n text: React.ReactNode;\n linkText: React.ReactNode;\n className?: string;\n FooterItem: IModuleProps;\n HeadingContainer: INodeProps;\n ItemContainer: INodeProps;\n Link: INodeProps;\n EditableLink: React.ReactNode;\n}\n\n/**\n *\n * FooterItem component.\n * @extends {React.PureComponent>}\n */\nexport class FooterItem extends React.PureComponent> {\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n private attributes: Msdyn365.IDictionary | undefined;\n\n constructor(props: IFooterItemProps) {\n super(props);\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry);\n\n // Construct telemetry attribute to render\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n }\n\n public render(): JSX.Element {\n const { heading, image, link, text } = this.props.config;\n const footerItemClassName = classnames('ms-footer__item', this.props.config.className);\n const linkText = link && link.linkText ? link.linkText : '';\n this.payLoad.contentAction.etext = linkText;\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n const viewProps: IFooterViewProps = {\n ...this.props,\n heading: this._createHeading(heading!),\n image: this._createImageMarkup(image!),\n text: this._createText(text!),\n linkText: this._createLinkText(link!),\n EditableLink: this._createLink(link!),\n\n FooterItem: {\n moduleProps: this.props,\n className: footerItemClassName\n },\n\n HeadingContainer: {\n className: 'ms-footer__heading'\n },\n\n ItemContainer: {\n className: 'ms-footer__link__container'\n },\n\n // @ts-expect-error\n Link: link && link.linkUrl && link.linkUrl.destinationUrl && {\n tag: 'a',\n role: 'link',\n className: 'ms-footer__link',\n href: link.linkUrl.destinationUrl,\n title: linkText,\n 'aria-label': link.ariaLabel,\n target: link.openInNewTab ? '_blank' : undefined,\n onClick: onTelemetryClick(this.telemetryContent, this.payLoad, linkText),\n ...this.attributes\n },\n className: footerItemClassName\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => this.props.config.heading!.text = event.target.value;\n\n public handleTextChange = (event: Msdyn365.ContentEditableEvent) => this.props.config.text = event.target.value;\n\n public handleLinkTextChange = (event: Msdyn365.ContentEditableEvent) => this.props.config.link!.linkText = event.target.value;\n\n private _createLink(link: ILinkData): React.ReactNode | null {\n if (link) {\n const linkText = link.linkText ? link.linkText : '';\n\n // TODO: Update the inner tag in the anchor link to span\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: link.ariaLabel,\n className: 'ms-footer__link',\n linkText,\n linkUrl: link.linkUrl.destinationUrl,\n openInNewTab: link.openInNewTab,\n role: 'link',\n additionalProperties: this.attributes!,\n onClick: onTelemetryClick(this.telemetryContent, this.payLoad, linkText)\n };\n return (\n \n );\n\n }\n return null;\n }\n\n private _createLinkText(link: ILinkData): React.ReactNode | null {\n if (!link || !link.linkText) {\n return null;\n }\n\n return (\n {link.linkText}\n );\n }\n\n private _createHeading(heading: IHeadingData): React.ReactNode | null {\n if (!heading || !heading.text || heading.text.length === 0) {\n return null;\n }\n\n return (\n \n );\n }\n\n private _createText(text: string): React.ReactNode | null {\n if (!text) {\n return null;\n }\n return (\n \n );\n }\n\n private _createImageMarkup(item: Msdyn365.IImageData, ariaHiddenAttr?: boolean): React.ReactNode | null {\n if (!item || !item.src || item.src.length === 0) {\n return null;\n }\n\n const defaultImageSettings: Msdyn365.IImageSettings = {\n viewports: {\n xs: { q: 'w=24&h=24&m=6', w: 0, h: 0 },\n lg: { q: 'w=24&h=24&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n return (\n \n );\n }\n}\n\nexport default FooterItem;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport MsDyn365, { IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { addThrottledEvent, Drawer, IModuleProps, INodeProps, KeyCodes, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed, observable } from 'mobx';\nimport React from 'react';\n\nimport { ISitePickerConfig, ISitePickerProps } from './site-picker.props.autogenerated';\n\nexport interface ISitePickerViewProps extends ISitePickerProps {\n SitePicker: IModuleProps;\n SitePickerMenu: INodeProps;\n SitePickerMenuSpan: INodeProps;\n SitePickerMenuList: INodeProps;\n SitePickerMenuListItem: INodeProps;\n SitePickerMenuListItemArray: React.ReactNode[] | undefined;\n siteOptionsState: boolean;\n SitePickerMobileContainer: INodeProps;\n isMobileView: boolean;\n renderSiteOptions(): void;\n resetSiteOptionsState(): void;\n}\n\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\ninterface ISitePickerState {\n expandSiteOptions: boolean;\n isMobile: boolean;\n}\n\n/**\n *\n * SitePicker component.\n * @extends {React.PureComponent>}\n */\nclass SitePicker extends React.PureComponent, ISitePickerState> {\n private readonly _cookieName: string = '_msdyn365___site_';\n\n private readonly _cookieExpirationInSeconds: number = 5_184_000;\n\n private readonly _sitePickerMenuNode: React.RefObject;\n\n private readonly _sitePickerMenuButton: React.RefObject;\n\n private resizeThrottledEventHandler?: (event: Event) => void;\n\n @observable\n private viewport: GridSize;\n\n public constructor(props: ISitePickerViewProps) {\n super(props);\n this._handleChange = this._handleChange.bind(this);\n this._sitePickerMenuNode = React.createRef();\n this._sitePickerMenuButton = React.createRef();\n this._renderSiteOptions = this._renderSiteOptions.bind(this);\n this._resetSiteOptionsState = this._resetSiteOptionsState.bind(this);\n this._escFunction = this._escFunction.bind(this);\n this._handleOutsideClick = this._handleOutsideClick.bind(this);\n this._updateViewport = this._updateViewport.bind(this);\n this.viewport = props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\n this.state = {\n expandSiteOptions: false,\n isMobile: this.isMobile\n };\n }\n\n @computed get isMobile(): boolean {\n return (this.viewport === 'xs' || this.viewport === 'sm');\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n document?.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n document?.body?.addEventListener('mousedown', this._handleOutsideClick);\n this.resizeThrottledEventHandler = window && addThrottledEvent(window, 'resize', this._updateViewport as EventListener);\n this._updateViewport();\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n document?.removeEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n document?.body?.removeEventListener('mousedown', this._handleOutsideClick, false);\n window && window.removeEventListener('resize', this.resizeThrottledEventHandler!, false);\n }\n }\n\n public render(): JSX.Element | null {\n const viewProps: ISitePickerViewProps = {\n ...this.props as ISitePickerProps,\n SitePicker: {\n moduleProps: this.props,\n className: classnames('ms-site-picker', this.props.config.className, this.state.isMobile ? 'mobile-view' : 'desktop-view'),\n tag: 'div'\n },\n SitePickerMenu: {\n tag: 'button' as NodeTag,\n className: 'ms-site-picker__button',\n 'aria-label': this.props.config.heading?.text,\n 'aria-expanded': this.state.expandSiteOptions,\n onClick: this.props,\n ref: this._sitePickerMenuButton\n },\n SitePickerMenuSpan: {\n className: 'ms-site-picker__span',\n tag: 'span'\n },\n SitePickerMenuList: {\n className: 'ms-site-picker__list',\n role: 'menu',\n tag: 'ul',\n ref: this._sitePickerMenuNode\n },\n SitePickerMenuListItem: {\n className: 'ms-site-picker__list__item',\n role: 'presentation',\n tag: 'li'\n },\n SitePickerMobileContainer: {\n tag: Drawer,\n className: 'ms-site-picker__drawer',\n toggleButtonText: this.props.config.heading?.text,\n openGlyph: 'ms-site-picker__drawer-open',\n closeGlyph: 'ms-site-picker__drawer-close',\n glyphPlacement: 'end'\n },\n isMobileView: this.state.isMobile,\n SitePickerMenuListItemArray: this._renderSitePickerImage(),\n renderSiteOptions: this._renderSiteOptions,\n resetSiteOptionsState: this._resetSiteOptionsState,\n siteOptionsState: this.state.expandSiteOptions\n };\n return this.props.renderView(viewProps);\n }\n\n private _renderSiteOptions(): void {\n const expandSiteOptionsState = this.state.expandSiteOptions;\n this.setState({\n expandSiteOptions: !expandSiteOptionsState\n });\n }\n\n private _resetSiteOptionsState(): void {\n this.setState({\n expandSiteOptions: false\n });\n }\n\n private readonly _escFunction = (event: any) => {\n const key = event.keyCode;\n if (this.state.expandSiteOptions) {\n switch (key) {\n case KeyCodes.Escape: {\n setTimeout(() => {\n const nextFocus = document && document.activeElement;\n if ((this._sitePickerMenuButton?.current?.contains(nextFocus) || this._sitePickerMenuNode?.current?.contains(nextFocus))) {\n this._resetSiteOptionsState();\n this._sitePickerMenuButton?.current?.focus();\n }\n }, 50);\n break;\n }\n case KeyCodes.Tab: {\n setTimeout(() => {\n const nextFocus = document && document.activeElement;\n if ((!this._sitePickerMenuButton?.current?.contains(nextFocus) && !this._sitePickerMenuNode?.current?.contains(nextFocus))) {\n this._resetSiteOptionsState();\n }\n }, 50);\n break;\n }\n default:\n return;\n }\n }\n };\n\n private readonly _handleOutsideClick = (event: any) => {\n if ((this._sitePickerMenuButton.current?.contains(event.target) && this.state.expandSiteOptions) ||\n (this._sitePickerMenuNode.current?.contains(event.target) && this.state.expandSiteOptions)) {\n return;\n }\n this._resetSiteOptionsState();\n\n };\n\n private _handleChange(e: React.MouseEvent): void {\n e.preventDefault();\n if (e.currentTarget.href && e.currentTarget.href.length > 0 && window) {\n if (this.props.context.request.cookies.isConsentGiven()) {\n const cookieConfig = { maxAge: this._cookieExpirationInSeconds };\n this.props.context.request.cookies.set(this._cookieName, e.currentTarget.href, cookieConfig);\n }\n window.location.assign(e.currentTarget.href);\n }\n }\n\n private _renderSitePickerImage(): React.ReactNode[] | undefined {\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=50&h=25&m=6', w: 0, h: 0 },\n sm: { q: 'w=50&h=25&m=6', w: 0, h: 0 },\n md: { q: 'w=40&h=20&m=6', w: 0, h: 0 },\n lg: { q: 'w=40&h=20&m=6', w: 0, h: 0 },\n xl: { q: 'w=40&h=20&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n const siteOptions = this.props.config.siteOptions && this.props.config.siteOptions;\n return siteOptions && siteOptions.map((item, index) => {\n const image = item?.siteImage;\n const imageProps = {\n gridSettings: this.props.context.request.gridSettings!,\n imageSettings: (image?.imageSettings?.viewports) ? image.imageSettings : defaultImageSettings\n };\n return (\n \n \n {item?.siteName}\n \n \n \n );\n }\n );\n }\n\n private _updateViewport(): void {\n this.viewport = this._getViewport();\n this.setState({ isMobile: this.isMobile });\n }\n\n private _getViewport(): GridSize {\n const { context } = this.props;\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\n return 'xs';\n }\n\n if (typeof window !== undefined && window.innerWidth) {\n const gridSettings = context.request.gridSettings;\n if (gridSettings) {\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\n return 'xs';\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\n return 'sm';\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\n return 'md';\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\n return 'lg';\n }\n return 'xl';\n\n }\n }\n return 'xs';\n }\n}\n\nexport default SitePicker;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IFooterViewProps } from './footer-item';\n\n/**\n *\n * FooterItemView component.\n * @extends {React.PureComponent}\n */\nexport class FooterItemView extends React.PureComponent {\n public render(): JSX.Element | null {\n const { FooterItem } = this.props;\n return (\n \n {this._renderElement(this.props)}\n \n );\n }\n\n private _renderElement(props: IFooterViewProps): React.ReactNode | null {\n const { heading, HeadingContainer, Link, linkText, image, text, EditableLink } = props;\n if (heading) {\n return (\n {' '}\n {heading}\n {' '}\n );\n } else if (Link && image) {\n return (\n \n {linkText}\n {image}\n \n );\n } else if (Link) {\n return (EditableLink);\n }\n return (\n <>\n {text}\n {image}\n \n );\n }\n}\n\nexport default FooterItemView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IContentBlockAdditionalContentItemViewProps, IContentBlockAdditionalContentViewProps } from './components/additional-content';\nimport { IContentBlockViewProps } from './content-block';\n\n/**\n * Render Additional Content.\n * @param additionalContent - Additional content view props.\n * @returns JSX Element.\n */\nconst renderAdditionalContent = (additionalContent: IContentBlockAdditionalContentViewProps) => {\n return (\n \n {additionalContent.additionalContentItems?.map((item: IContentBlockAdditionalContentItemViewProps) => {\n return (\n <>\n {item.heading}\n \n {item.text}\n \n {item.links}\n \n \n \n );\n })}\n \n );\n};\n\nconst ContentBlockView: React.FC = (props) => {\n const {\n contentBlockContainer,\n imageContainer,\n detailsContainer,\n title,\n text,\n links,\n image,\n contentBlockAnchorTag,\n imageLink,\n imageAriaLabel,\n additionalContent\n } = props;\n\n if (imageLink) {\n return (\n \n \n \n {image}\n \n \n \n {title}\n {text}\n {links}\n {additionalContent && renderAdditionalContent(additionalContent)}\n \n \n );\n }\n return (\n \n \n {image}\n \n \n {title}\n {text}\n {links}\n {additionalContent && renderAdditionalContent(additionalContent)}\n \n \n );\n\n};\n\nexport default ContentBlockView;\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { TelemetryEvent } from '@msdyn365-commerce/core';\r\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport React, { useState, useEffect } from 'react';\r\n\r\ninterface ICheckoutPlaceOrderButtonProps {\r\n canPlaceOrder: boolean;\r\n checkoutBtnText: string;\r\n telemetryContent?: ITelemetryContent;\r\n shouldEnableSinglePaymentAuthorizationCheckout?: boolean;\r\n isPlaceOrderLoading?: boolean;\r\n isExpressCheckoutApplied?: boolean;\r\n isPaymentVerificationRedirection?: boolean;\r\n placeOrder(): Promise;\r\n errorMessage?: string;\r\n}\r\n\r\ninterface ICheckoutPlaceOrderButtonPropsExt {\r\n componentProps: ICheckoutPlaceOrderButtonProps;\r\n isUpdating: boolean;\r\n}\r\n\r\nconst buttonsStates: React.Dispatch>[] = [];\r\nconst errorsStates: React.Dispatch>[] = [];\r\n\r\n/**\r\n * On place order function.\r\n * @param isBusy -Check is busy.\r\n * @param canPlaceOrder -Check can place order.\r\n * @param placeOrder -Place order function.\r\n * @returns Set state of button.\r\n */\r\nconst onPlaceOrderHandler = (isBusy: boolean, isDisablePlaceOrder: boolean, placeOrder: () => Promise) => async () => {\r\n if (isBusy || isDisablePlaceOrder) {\r\n return;\r\n }\r\n buttonsStates.map(buttonSetState => {\r\n buttonSetState(true);\r\n return true;\r\n });\r\n\r\n errorsStates.map(errorState => {\r\n errorState(false);\r\n return true;\r\n });\r\n\r\n await placeOrder().then(data => {\r\n buttonsStates.map(buttonSetState => {\r\n buttonSetState(false);\r\n return true;\r\n });\r\n\r\n errorsStates.map(errorState => {\r\n errorState(true);\r\n return true;\r\n });\r\n });\r\n};\r\n\r\nconst CheckoutPlaceOrderButton: React.FC = ({ componentProps, isUpdating }) => {\r\n const {\r\n checkoutBtnText,\r\n canPlaceOrder,\r\n placeOrder,\r\n telemetryContent,\r\n shouldEnableSinglePaymentAuthorizationCheckout,\r\n isPlaceOrderLoading,\r\n isExpressCheckoutApplied,\r\n isPaymentVerificationRedirection\r\n } = componentProps;\r\n\r\n const [isBusy, setIsBusy] = useState(false);\r\n const [isDisablePlaceOrder, setIsDisablePlaceOrder] = useState(true);\r\n const [isPlaceOrderBtnLoading, setIsPlaceOrderBtnLoading] = useState();\r\n const [showPaymentError, setShowPaymentError] = useState(false);\r\n buttonsStates.push(setIsBusy);\r\n buttonsStates.push(setIsDisablePlaceOrder);\r\n errorsStates.push(setShowPaymentError);\r\n const payload = getPayloadObject(TelemetryEvent.Purchase, telemetryContent!, checkoutBtnText, '');\r\n const attributes = getTelemetryAttributes(telemetryContent!, payload);\r\n const errorMessage = 'Sorry, we could not process your order due to declined payment. Please try again.';\r\n\r\n useEffect(() => {\r\n setIsDisablePlaceOrder(!canPlaceOrder);\r\n }, [canPlaceOrder]);\r\n\r\n useEffect(() => {\r\n setIsPlaceOrderBtnLoading(isPlaceOrderLoading);\r\n }, [isPlaceOrderLoading]);\r\n\r\n const placeOrderExtend = async () => {\r\n if (isDisablePlaceOrder || isPlaceOrderBtnLoading) {\r\n return;\r\n }\r\n\r\n setShowPaymentError(false);\r\n setIsPlaceOrderBtnLoading(true);\r\n\r\n await placeOrder().then(() => {\r\n setShowPaymentError(true);\r\n setIsDisablePlaceOrder(false);\r\n setIsPlaceOrderBtnLoading(false);\r\n });\r\n };\r\n\r\n if (shouldEnableSinglePaymentAuthorizationCheckout && (!isExpressCheckoutApplied || isPaymentVerificationRedirection)) {\r\n return (\r\n <>\r\n {showPaymentError && (\r\n
\r\n

{errorMessage}

\r\n
\r\n )}\r\n \r\n {checkoutBtnText}\r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n <>\r\n {showPaymentError && (\r\n
\r\n

{errorMessage}

\r\n
\r\n )}\r\n \r\n {checkoutBtnText}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default CheckoutPlaceOrderButton;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { Module, Node, Waiting } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\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/src/modules/checkout/./checkout';\r\nimport { IEmailDelivery } from '@msdyn365-commerce-modules/checkout/src/modules/checkout/./components';\r\nimport { IInvoicePaymentSummary } from '@msdyn365-commerce-modules/checkout/src/modules/checkout/./components/get-invoice-payment-summary';\r\nimport CheckoutPlaceOrderButton from './components/place-order-button';\r\nimport { ICartState, ICheckoutState } from '@msdyn365-commerce/global-state';\r\nimport PromoCode, { IPromoCodeProps } from './components/promocode.component';\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 EmailDeliveryComponent: React.FC = ({ EmailDelivery, label }) => {label};\r\n\r\nexport const LineItemComponent: React.FC = ({ LineItem, item, pickUpAtStore, emailDelivery }) => (\r\n \r\n {item}\r\n {pickUpAtStore && }\r\n {emailDelivery && }\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 LineItemGroupComponentWithMultiplePickUp: React.FC = ({\r\n LineItemDeliveryGroup,\r\n LineItemList,\r\n heading,\r\n lineItems,\r\n lineItemWraper,\r\n lineItemWraperIcon\r\n}) => (\r\n \r\n {lineItemWraperIcon}\r\n {lineItemWraper}\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 LineItemComponentWithMultiplePickUp: React.FC = ({ LineItem, item, pickUpAtStore, emailDelivery }) => (\r\n \r\n {item}\r\n {emailDelivery && }\r\n \r\n);\r\n\r\nexport const PickUpAtStoreComponentWithMultiplePickUp: React.FC = ({ PickUpAtStore, label, location }) => (\r\n \r\n {label}\r\n {location}\r\n \r\n);\r\n\r\nexport const LineItemsComponent: React.FC = ({\r\n LineItems,\r\n Header,\r\n heading,\r\n editLink,\r\n itemsForPickup,\r\n itemsForShip,\r\n itemsForEmail,\r\n itemsGroupWithMulitplePickupMode\r\n}) => (\r\n \r\n \r\n {heading}\r\n {editLink}\r\n \r\n {itemsGroupWithMulitplePickupMode === undefined && itemsForPickup && }\r\n {itemsGroupWithMulitplePickupMode === undefined && itemsForEmail && }\r\n {itemsGroupWithMulitplePickupMode === undefined && itemsForShip && }\r\n {itemsGroupWithMulitplePickupMode !== undefined\r\n ? itemsGroupWithMulitplePickupMode.map((item, index) => {\r\n return ;\r\n })\r\n : null}\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.otherCharge}\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 PaymentSummaryComponent: React.FC = ({ heading, lines }) => (\r\n
\r\n {heading}\r\n
\r\n {lines && (\r\n <>\r\n {lines.invoices}\r\n {lines.giftCard}\r\n {lines.loyalty}\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 isPaymentVerificationRedirection,\r\n shouldEnableSinglePaymentAuthorizationCheckout,\r\n canShow,\r\n checkoutProps,\r\n headerProps,\r\n hasSalesOrder,\r\n hasInvoiceLine,\r\n bodyProps,\r\n mainProps,\r\n mainControlProps,\r\n sideProps,\r\n sideControlFirstProps,\r\n sideControlSecondProps,\r\n termsAndConditionsProps,\r\n orderConfirmation,\r\n loading,\r\n alert,\r\n title,\r\n guidedForm,\r\n orderSummary,\r\n invoicePaymentSummary,\r\n lineItems,\r\n placeOrderButton,\r\n termsAndConditions,\r\n keepShoppingButton,\r\n data\r\n } = props;\r\n\r\n const [isUpdating, setIsUpdating] = React.useState(false);\r\n const placeOrderNode: any = placeOrderButton;\r\n const checkoutState = data.checkout?.result as ICheckoutState;\r\n const cartState = checkoutState?.checkoutCart as ICartState;\r\n\r\n React.useEffect(() => {\r\n const moduleProps: any = props;\r\n const moduleState = moduleProps.moduleState;\r\n if (moduleState && moduleState.isUpdating !== isUpdating) {\r\n setIsUpdating(moduleState.isUpdating);\r\n }\r\n }, [props]);\r\n\r\n const promoCodeApplyCallback = () => {\r\n window.location.reload();\r\n }\r\n\r\n const promoCodeDataObj: IPromoCodeProps = {\r\n data,\r\n typeName: 'cart',\r\n id: 'cart 1',\r\n context: checkoutProps.moduleProps.context,\r\n cart: cartState,\r\n promoCodeHeadingText: 'Promo code',\r\n appliedPromoCodeHeadingText: 'Applied promo codes',\r\n removePromoAriaLabelFormat: '{0} {1}',\r\n promoPlaceholderText: 'Enter a promo code',\r\n promoCodeApplyButtonText: 'Apply',\r\n collapseTimeOut: 350,\r\n removePromoText: 'Remove',\r\n invalidPromoCodeErrorText: 'Invalid promo code',\r\n failedToAddPromoCodeErrorText: 'Failed to add promo code',\r\n duplicatePromoCodeErrorText: 'Promo code already applied',\r\n failedToRemovePromoCodeErrorText: 'Failed to remove promo code',\r\n promoCodeApplyCallback: promoCodeApplyCallback\r\n }\r\n\r\n return (\r\n \r\n {!hasSalesOrder && {title}}\r\n {!hasSalesOrder && isPaymentVerificationRedirection && shouldEnableSinglePaymentAuthorizationCheckout && !alert && !loading && (\r\n \r\n )}\r\n {!hasSalesOrder && (\r\n \r\n {loading}\r\n {alert}\r\n {canShow && (\r\n <>\r\n \r\n {guidedForm}\r\n {termsAndConditions}\r\n \r\n {placeOrderNode?.props ? (\r\n \r\n ) : placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n {!hasInvoiceLine\r\n ? orderSummary && \r\n : invoicePaymentSummary && }\r\n \r\n {termsAndConditions}\r\n {placeOrderNode?.props ? (\r\n \r\n ) : placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n {cartState && }\r\n {lineItems && }\r\n \r\n {termsAndConditions}\r\n {placeOrderNode?.props ? (\r\n \r\n ) : placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n )}\r\n \r\n )}\r\n {hasSalesOrder && orderConfirmation}\r\n \r\n );\r\n};\r\n\r\nexport default CheckoutView;\r\n"],"sourceRoot":""}