{"version":3,"sources":["webpack:///src/modules/business-sign-up/components/sign-up-button.tsx?37a3","webpack:///src/modules/business-sign-up/components/sign-up-error.tsx?fbb9","webpack:///src/modules/business-sign-up/components/sign-up-input.tsx?4011","webpack:///src/modules/business-sign-up/components/sign-up-label.tsx?2025","webpack:///src/modules/business-sign-up/business-sign-up.tsx?df21","webpack:///./src/themes/gardner-theme/views/invoices-list.view.tsx?057a","webpack:///src/modules/iframe/iframe.tsx?d14a","webpack:///./src/themes/gardner-theme-b2c/views/checkout-order-confirmation.view.tsx?761d","webpack:///src/modules/back-top-footer/back-top-footer.tsx?0e13","webpack:///src/modules/cookie-compliance/components/accept-button.tsx?1709","webpack:///src/modules/cookie-compliance/components/links.tsx?807e","webpack:///src/modules/cookie-compliance/cookie-compliance.tsx?5f7e","webpack:///src/modules/adventureworks/views/components/promocode.component.tsx?6e07","webpack:///./src/themes/gardner-theme/views/media-gallery.view.tsx?70ec","webpack:///src/modules/fabrikam/views/navigation-menu.view.tsx?5991","webpack:///./src/themes/gardner-theme/views/components/OrderConfirmationDetail.tsx?6fd7","webpack:///./src/themes/gardner-theme/views/checkout-order-confirmation.view.tsx?de6a","webpack:///src/modules/adventureworks/views/write-review.view.tsx?7a62","webpack:///src/modules/fabrikam/views/search-result-container.view.tsx?f8ea","webpack:///src/modules/iframe/iframe.view.tsx?dd86","webpack:///src/modules/adventureworks/views/content-block.view.tsx?ebaa","webpack:///src/modules/business-sign-up/business-sign-up.view.tsx?578b","webpack:///src/modules/adventureworks/views/order-details.view.tsx?1e8c","webpack:///./src/themes/gardner-theme-b2c/views/media-gallery.view.tsx?008f","webpack:///./src/themes/gardner-theme-b2c/views/invoices-list.view.tsx?c86d","webpack:///./src/themes/gardner-theme/views/order-history.view.tsx?67fe","webpack:///./src/modules/eve-map/eve-map.view.tsx?e389","webpack:///./src/themes/gardner-theme/views/reviews-list.view.tsx?793e","webpack:///src/modules/cookie-compliance/cookie-compliance.view.tsx?b30b","webpack:///src/modules/product-comparison-button/product-comparison-button.tsx?934c","webpack:///./src/themes/gardner-theme-b2c/views/reviews-list.view.tsx?971a","webpack:///./src/themes/gardner-theme-b2c/views/order-history.view.tsx?3c72","webpack:///src/modules/fabrikam/views/order-details.view.tsx?2a61","webpack:///src/modules/product-comparison-button/product-comparison-button.view.tsx?68cc","webpack:///./src/themes/gardner-theme/views/checkout-section-container.view.tsx?30c1","webpack:///src/modules/adventureworks/views/footer-item.view.tsx?9747","webpack:///./src/modules/eve-map/eve-map.props.autogenerated.ts?5f6f","webpack:///./src/modules/eve-map/components/eve-map-small-components.tsx?a70f","webpack:///./src/modules/eve-map/components/eve-map-location-line-item/eve-map-location-line-item.components.tsx?f7ce","webpack:///./src/modules/eve-map/components/eve-map-location-lines.tsx?05b6","webpack:///./src/modules/eve-map/components/eve-map-search-form.tsx?14e2","webpack:///./src/modules/eve-map/eve-map.tsx?5859"],"names":["SignUpButton","_ref","id","className","text","ariaLabel","telemetryContent","disabled","link","onClick","payLoad","getPayloadObject","attributes","getTelemetryAttributes","React","Button","Object","assign","role","href","SignUpError","type","message","errorClassName","classnames","GetMaxLength","maxLength","parsedMaxLength","Number","parseInt","isNaN","SignUpInput","value","pattern","isRequired","onChange","fieldReference","InputType","TextArea","name","undefined","ref","SignUpLabel","forId","htmlFor","InputID","renderInputSection","inputs","needToReset","onInputChange","showErrors","addressForm","updateAddress","map","element","index","label","maxChars","customClass","baseSignUpItem","wrapper","errorMessage","Address","isAddressInput","input","updateForm","hasError","resetAddress","splice","BusinessSignUp","constructor","props","_this","super","this","BusinessSignUpDefaultInputs","FirstName","Text","resources","firstNameLabel","LastName","lastNameLabel","Email","emailAddressLabel","EmailRegex","defaultRegex","source","CompanyName","companyLabel","Department","departmentLabel","JobTitle","jobTitleLabel","Size","companySizeLabel","companyAddressLabel","Comment","commentLabel","formChildReference","moduleClassName","needsToReset","handleHeadingChange","event","config","heading","target","_onInputChange","newForm","state","formItems","forEach","item","setState","isReady","_isFormReady","hasSubmitErrors","_onAddressChange","errors","currentAddress","addressItem","find","address","addressHasErrors","showAddressErrors","currentInput","match","_onSubmit","preventDefault","context","firstName","_getItem","lastName","companyName","companyEmail","companyAddress","jobTitle","department","companySize","comments","newPartner","CompanySize","Comments","createProspectAsync","callerContext","actionContext","then","successPageURL","confirmationLink","linkUrl","destinationUrl","getUrlSync","window","location","catch","_onCancel","cleanForm","isAddress","arguments","length","_addedReference","getTelemetryObject","request","telemetryPageName","friendlyName","telemetry","componentDidMount","_this$formChildRefere","current","focus","shouldComponentUpdate","nextProps","nextState","data","render","viewProps","_objectSpread","businessSignUp","moduleProps","ContainerWrapper","editProps","onEdit","requestContext","businessSignUpForm","_renderForm","renderView","slots","signUpButtonArialabel","signUpButtonText","cancelButtonArialabel","cancelButtonText","partialAddressErrorMessage","addressSlot","form","FormWrapper","items","buttons","key","disclaimer","RichTextComponent","newFormFields","InvoiceListView","header","filter","content","invoiceRequestModal","pagination","MsDyn365","isBrowser","linksElements","document","querySelectorAll","console","log","l","setAttribute","Module","Iframe","iframeRef","isConsentGiven","cookies","srcURL","URL","error","exception","protocol","toLocaleLowerCase","iframeClassName","Heading","_createHeading","IframeContainer","IFrame","_createIframe","cookieConsentAccepted","alert","_renderAlert","cookieConsentRequiredMessage","targetURL","src","height","iframeAriaLabel","OrderConfirmationOrderInfomation","orderInformationProps","Node","OrderConfirmationSalesLine","_ref2","salesLineProps","salesLine","buyAgainButton","OrderConfirmationGroupDelivery","_ref3","deliveryProps","count","processing","pickupDateTimeslot","trackingInfo","OrderConfirmationGroup","_ref4","groupProps","delivery","salesLinesProps","salesLines","LineId","OrderConfirmationGroups","_ref5","groupsProps","groups","group","OrderConfirmationOrderSummary","_ref6","orderSummaryProps","subtotal","shipping","tax","totalAmount","earnedPoints","OrderConfirmationPayment","_ref7","paymentMethodsProps","title","methods","OrderConfirmationHelp","_ref8","helpProps","needHelpLabel","helpLineNumberLabel","contactNumber","OrderConfirmationView","_ref9","backToShoppingLink","loading","orderSummary","payment","help","BackTopFooter","backtoTopText","destination","BackToTop","CookieComplianceAcceptButton","acceptCookiesButtonText","acceptCookiesButtonAriaLabel","onClose","CookieComplianceLinks","_mapEditableLinks","linkdata","editableLinks","linkText","contentAction","etext","editableLink","openInNewTab","additionalProperties","onTelemetryClick","push","links","Msdyn365","onTextChange","CookieCompliance","handleLinkTextChange","linkIndex","_this$props$config$ac","actionLinks","handleContentChange","visible","cookieRef","_onDismiss","bind","acceptCookiesAriaLabel","moduleConfig","onDismiss","CookieComplianceBanner","AlertProps","color","fade","Content","ArrayExtensions","hasElements","acceptButton","setConsentCookie","reload","PromoCode","_onInputChangeHandler","promoCodeInputValue","trim","canApply","_applyPromotion","cartState","appliedPromo","addPromoCode","promoCode","result","status","substatus","duplicatePromoCodeErrorText","invalidPromoCodeErrorText","failedToAddPromoCodeErrorText","_onSubmitHandler","applyPromotionHandler","promoPlaceholderText","promoCodeApplyButtonText","onSubmit","placeholder","_removePromotion","_event$currentTarget$","code","currentTarget","getAttribute","removePromoCodes","promoCodes","failedToRemovePromoCodeErrorText","_renderAppliedPromoCode","cart","Coupons","removePromotionHandler","coupon","removePromoAriaLabelFormat","format","removePromoText","Code","TelemetryConstant","ApplyPromoCode","promoCodeHeadingText","renderThumbnailItem","thumbnail","ThumbnailItemContainerProps","Picture","createElement","GetEmptyThumbnailItemComponent","imageSettings","_props$config$thumbna2","tag","tabIndex","Image","gridSettings","thumbnailImageSettings","loadFailureBehavior","defaultThumbnailImageSettings","viewports","xs","q","w","h","xl","lazyload","cropFocalRegion","renderThumbnails","thumbnails","ThumbnailsContainerProps","SingleSlideCarouselComponentProps","Thumbnails","mediaGalleryItems","altText","getMediaGalleryItems","lastUpdate","GetThumbnailItemComponent","image","imageId","modifiedActiveIndex","_props$config$thumbna","_props$callbackToggle","_props$callbackThumbn","callbackToggle","call","callbackThumbnailClick","activeIndex","handleKeyDown","keyCode","KeyCodes","Enter","onKeyDown","fullScreenTitleText","mediaGalleryView","CarouselProps","MediaGallery","Modal","NavigationMenuView","currentLevel","_positionInSetOffset","escapeKey","_updateCategoryImage","categoryImageSrc","option","promotionalImage","promotionalContent","imageSrc","promotionalItemImageSettings","categoryImage","categoryImageAltText","_handleDropdownToggle","parentId","isMobileView","activeMenu","parentMenu","showCategoryImage","imageSource","_resetFocus","setTimeout","menuNode","_handleClickOutside","contains","_handleFocusOutside","relatedTarget","_closeSubmenu","_escFunction","navDrawerList","Array","from","childNodes","navDrawerButton","firstChild","_getCategoryImage","categoryImageUrl","generateImageUrl","apiSettings","defaultImageSettings","sm","md","lg","_categoryImage$imageS","ImageData","categoryImageSettings","_onDrawerChange","drawerState","drawerKeyValue","newPair","buttonText","isOpen","body","addEventListener","componentWillUnmount","removeEventListener","_renderMobileMenu","_renderDesktopMenu","menuItemData","Navigation","menuItem","posinset","_renderDrawerMenu","MenuList","_renderDisplay","setSize","subMenu","_renderDrawer","_renderLinkMenuItem","toggleButtonText","keyValue","keys","isDrawerOpen","colProps","Drawer","toggleButtonProps","openGlyph","onToggle","collapseProps","closeGlyph","glyphPlacement","_renderLinkText","menuSubItem","currentPos","_menuItem$subMenu2","_menuItem$subMenu","_renderDrawerLink","linkURL","_renderSpanMenuItem","ListItem","menuItemList","menuItemDatum","_getFromSubMenu","_createMenuItemList","subMenus","i","found","_renderSubMenu","_renderButtonMenuItem","IsSubMenu","enableMultiSupportMenu","enableMultilevelMenu","multiLevelSupportedMenu","menuLevelSupport","levelClassName","menuOptions","idx","hasOptions","haveSubmenu","Math","round","toString","_renderMenu","onFocus","hoverEffect","isParent","Link","imagesource","shouldOpenNewTab","onMouseOver","_renderPromotionalLink","Span","level","currentItem","submenu","DivContainer","ImageDivContainer","showPromotionalContent","categoryImageDisplay","promotionalContentDisplay","DivContainerClass","_item$additionalPrope","OrderConfirmationDetail","_salesOrder$ShippingA","_salesOrder$ShippingA2","_salesOrder$SalesLine","salesOrder","cultureFormatter","customer","deliveryMode","orderedProducts","attr","AttributeValues","s","Name","print","TextValue","formatDate","CreatedDateTime","year","month","day","AccountNumber","ShippingAddress","FullAddress","SalesLines","so","LineNumber","ItemId","itemId","_orderedProducts$find","p","Description","Fragment","formatCurrency","Price","Quantity","TotalAmount","_rest$data$checkout$r","_rest$data$checkout$r2","rest","_objectWithoutProperties","_excluded","dlvMode","setDlvMode","checkout","sessionStorage","getItem","removeItem","customerInformation","renderProductDescription","product","_props$data$product$r","primaryImageSource","PrimaryImageUrl","imageUrl","fallBackSrc","renderProductImage","WriteReviewView","signInMessage","signInButton","modalToggle","paragraph","isAuthenticated","user","reviewModal","modal","modalHeader","modalBody","inputRow","selectRatingLabel","rating","reviewTitleLabel","titleInput","reviewTextLabel","textInput","privacyPolicyUrl","modalFooter","submitButton","cancelButton","createReviewModal","createSearchResultModal","modalProps","refineMenu","sortByDropDown","isRecoSearchPage","createModalBody","renderSort","renderRefiner","refiners","RefineMenuContainer","RefinerSectionContainer","SortingContainer","renderCategoryHierarchy","CategoryHierarchyContainer","categoryHierarchyList","categoryHierarchySeparator","category","renderTitle","TitleContainer","titlePrefix","titleText","titleCount","SearchResultContainerView","_props$context$action","SearchResultContainer","products","ProductsContainer","ProductSectionContainer","choiceSummary","isMobile","searchResultModal","TitleViewProps","categoryHierarchy","sortByOptions","CategoryNavContainer","RefineAndProductSectionContainer","FeatureSearchContainer","similarLookProduct","query","recommendation","IFrameView","renderAdditionalContent","additionalContent","_additionalContent$ad","additionalContentNode","additionalContentItems","additionalContentItemContainer","additionalContentItemLinks","contentBlockView","contentBlockContainer","imageContainer","detailsContainer","contentBlockAnchorTag","imageLink","imageAriaLabel","imageClass","BusinessSignUpItem","BusinesSignUpView","button","OrderInfomation","salesId","receiptId","createdDate","amount","channelReferenceId","channelName","channelAddress","SalesLine","GroupDelivery","Group","isCashAndCarryTransaction","salesStatus","deliveryType","shipment","showTimeslot","pickupProps","Groups","OrderSummary","Payment","Help","OrderDetailsView","viewModes","tableViewActions","table","placedBy","orderInfomation","OrderHistoryOrderInfomation","OrderHistoryGroupDelivery","OrderHistoryGroup","OrderHistoryGroups","OrderHistoryHeader","headerProps","orderCountLabel","extraActions","OrderHistorySalesOder","salesOrderProps","orderDetailsLink","expandProductsButton","OrderHistoryList","listProps","salesOrders","OrderHistoryView","orderHistoryProps","emptyMessage","list","moreButton","renderDealerList","dealerResultContainerProps","locationsMessage","search","spinner","locationsList","noLocationsMessage","isSearchInProgress","MapView","ModuleProps","MapProps","buildReviewCard","isUserReview","cardProps","date","cardBodyProps","reviewProps","reviewTitle","reviewText","responseProps","responseName","responseDate","responseText","controlsProps","wasReviewHelpfulText","like","dislike","edit","ReviewsListview","filterByDropdown","noReviewsMessage","noReviewsWithFilterMessage","pageControls","refineReviewsProps","reportReviewModal","reviewsListProps","reviewCards","sortByDropdown","userReview","isFilterApplied","review","createReportModal","reported","headerSubmitted","reportSubmittedMessage","reportMessage","radioButtons","succesfulButton","CookieComplianceView","Alert","ProductComparisonButton","PureComponent","_addToProductComparison","_this$props$data$acco","ProductComparisonItem","RecordId","catalogId","ProductComparisonState","instance","accountInformation","addItem","_removeFromProductComparison","_this$props$data$acco2","removeItemById","comparisonItemId","_getNewState","_this$props$data$acco3","getItemId","_getProdutComparisonDataByCatalogId","canProductBeAddedToProductComparison","hasItemById","currentProductsCount","_className","_instanceId","Random","Guid","generateGuid","_shouldUsePreview","_productComparisonPreview","_renderProductComparisonPreview","productComparisonPreview","onClickHandler","isDisabled","ObjectExtensions","isNullOrUndefined","_this$props$data$acco4","listModifiedEvent","subscribe","instanceId","handler","getSnapshotBeforeUpdate","previousProps","_this$props$data$acco5","unsubscribe","buttonClassName","shouldDisplayText","removeFromComparisonButtonText","productComparisonButton","_renderProductComparisonButton","productsLimit","_getProductsLimit","addToComparisonLimitReachedButtonText","addToComparisonButtonText","viewport","variant","VariantType","Browser","app","productComparisonMobileProductsLimit","productComparisonDesktopProductsLimit","_this$props$data$acco6","_items$filter","getCatalogId","ProductComparisonButtonViewFunctionalComponent","ItemComponent","itemProps","CheckoutSectionContainerView","checkoutPlainContainerProps","FooterItemView","FooterItem","_renderElement","HeadingContainer","EditableLink","searchRadiusUnit","HeadingTag","DealerSelectorEmptyMessage","emptyLocationsText","DealerSelectorWaiting","DealerSelectorFoundLocationsMessage","locations","searchRadius","preferredDistanceUnit","dealerCountMessage","milesShortText","dealerCountMessageInKm","replace","DealerLocatorLocationLineItemComponent","storeName","OrgUnitName","distanceAsString","buildDistanceString","distance","isLocationDisabled","floor","Distance","storeAddress","channelId","ChannelId","dealerDetailsHeader","renderDealerDetails","dealerDetailsDescriptionText","dealerDetailsContractCodeText","ContractList","mfrCode","ManufacturerCode","ManufacturerName","ContractCode","ContractDescription","DealerLocatorLocationLines","orgUnitLocation","OrgUnitNumber","_scrollIntoView","selectedLocationDiv","selectedLocationRef","parent","parentElement","scrollTop","offsetTop","clientHeight","_mapResources","contactInfoHeader","contactText","dealerDetailsText","dealerDetailsManufacturerCodeText","dealerDetailsLaborRateText","dealerDetailsNotesText","storeCounter","componentDidUpdate","selectedStoreLocationId","_stores","reaction","show","displayList","store","_renderStoreLocation","OrgUnitLocation","selected","__decorate","observable","observer","DealerLocatorSearchForm","searchBoxRef","previousValue","isSearchResultOpened","_handleInputKeyPress","ArrowUp","ArrowDown","activeDescedantValue","_searchTextChanged","async","inputValue","searchTermChanged","_this$searchBoxRef$cu","blur","performSearch","searchButtonAriaLabel","searchPlaceholderText","autoComplete","searchInputAriaLabel","onKeyUp","storeSearchAttributes","Map","mapRef","kmToMiValue","defaultLookUpRadius","_attachMapAutoSuggest","autoSuggestOptions","channel","storeSelectorStateManager","isMapApiLoaded","autoSuggestManager","Microsoft","Maps","loadModule","callback","options","countryCode","ChannelCountryRegionISOCode","AutosuggestManager","attachAutosuggest","_onSuggestionSelected","errorCallback","debug","credentials","BingMapsApiKey","_this$props$data$stor","_searchTermChanged","formattedSuggestion","_performSearch","_getAndUpdateStoreLocation","shouldShowAllStores","_navigator","navigator","geolocation","getCurrentPosition","_updateLocations","position","coords","latitude","longitude","PERMISSION_DENIED","timeout","_initMap","pushpinAccessible","Events","addHandler","setSelectedStoreLocationId","getCredentials","mapSessionId","_updateMap","_this$props$data$stor2","_storeSelectorStateMa","pushpinOptions","orgUnitStoreInformation","mapLocation","entities","clear","pushpins","storeLocationList","unitStoreInfo","entries","storeLocation","Latitude","Longitude","isSelectedLocation","_getPushpinOptions","pushpin","Pushpin","Location","handleClickEvent","unshift","currentLocation","setView","center","bounds","LocationRect","fromShapes","padding","clusterLayer","ClusterLayer","layers","insert","setOptions","orgUnitNumber","dealerDetails","getDealerDetailsAsync","selectedDealer","tempDealerLocations","newDealerLocations","findIndex","loc","_loc$OrgUnitLocation","prev","searchTerm","geoLocate","radius","lookupRadius","defaultLatitudeValue","defaultLongitudeValue","distanceUnitValue","SearchRadiusUnit","km","lookupDistanceInMiles","localLatitude","long","lastInlineStoreLocation","lastInlineShownStoreInfo","setLastInlineStoreInfo","getOrgUnitLocationByArea","calRadius","newOrgUnitLocationsInput","GetDealerLocationsInput","newOrgUnits","getDealerLocations","_setOrgUnitStoreInformation","moduleId","onLocationSelected","Promise","resolve","showMapViewLink","parentElementRef","setOrgUnitStoreInformation","showIndex","size","selectionColor","icon","_getSvgIcon","distanceResults","originCoords","resultsCoords","dealerLocations","_this$map","_this$props$data$stor5","autoSuggestionEnabled","isAutoSuggestionEnabled","_this$props$data$stor3","_this$props$data$stor4","navigationBarMode","NavigationBarMode","minified","BingMapsEnabled","when","_this$props$data$stor6","setMapModuleLoaded","_this$props$data$stor7","_this$props$data$stor8","loadMapApi","_this$props$data$stor9","_this$props$context","lang","locale","market","_this$props$data$stor10","_this$props$data$stor11","_this$props$data$stor12","_this$props$data$stor13","_this$props$data$stor14","_this$props$data$stor15","isDialogOpen","isSameContext","_storeSelectorStateMa2","shouldDisplayMap","listMapViewState","displayMap","kilometersShortText","shouldDisplayList","classname","Header"],"mappings":"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","file":"static/js/8.1cb24ca0bb7c5deeafcb.chunk.js","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IBusinessSignUpButtonProps {\n id?: string;\n className: string;\n text: string;\n ariaLabel: string;\n disabled?: boolean;\n link?: string;\n telemetryContent: ITelemetryContent;\n onClick?(event: React.MouseEvent): void;\n}\n\nexport const SignUpButton: React.FC = ({\n id,\n className,\n text,\n ariaLabel,\n telemetryContent,\n disabled,\n link,\n onClick\n}) => {\n const payLoad = getPayloadObject('click', telemetryContent, text);\n const attributes = getTelemetryAttributes(telemetryContent, payLoad);\n return (\n \n {text}\n \n );\n};\n\nexport default SignUpButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nexport interface IBusinessSignUpErrorProps {\n id?: string;\n className: string;\n type?: string;\n message?: string;\n}\n\nexport const SignUpError: React.FC = ({ id, className, type = 'page', message }) => {\n const errorClassName = `${className}__${type}-error`;\n\n return (\n \n

{message}

\n \n );\n};\n\nexport default SignUpError;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { InputType } from '../business-sign-up';\n\nexport interface IBusinessSignUpInputProps {\n id?: string;\n type: InputType;\n value?: string;\n pattern?: string;\n className: string;\n maxLength?: string;\n isRequired: boolean;\n fieldReference?: React.RefObject;\n onChange?(event: React.ChangeEvent): void;\n}\n\nexport interface IBusinessSignUpInput {\n key: string;\n AddressItem: INodeProps;\n label: React.ReactNode;\n alert: React.ReactNode;\n input: React.ReactNode;\n}\n\nconst GetMaxLength = (maxLength?: string): number | undefined => {\n if (maxLength) {\n const parsedMaxLength = Number.parseInt(maxLength, 10);\n if (!isNaN(parsedMaxLength)) {\n return parsedMaxLength;\n }\n }\n\n return undefined;\n};\n\nexport const SignUpInput: React.FC = ({\n id,\n type,\n value,\n pattern,\n className,\n maxLength,\n isRequired,\n onChange,\n fieldReference\n}) => {\n if (type === InputType.TextArea) {\n return (\n \n );\n }\n\n return (\n \n );\n};\n\nexport default SignUpInput;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface IBusinessSignUpLabelProps {\n id: string;\n forId: string;\n className: string;\n text: string;\n}\n\nexport const SignUpLabel: React.FC = ({ id, forId, className, text }) => (\n \n);\n\nexport default SignUpLabel;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ContentEditableEvent, getUrlSync, RichTextComponent, Text } from '@msdyn365-commerce/core';\nimport { Address, BusinessPartnerProspect } from '@msdyn365-commerce/retail-proxy';\nimport { createProspectAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/BusinessPartnersDataActions.g';\nimport { EmailRegex } from '@msdyn365-commerce-modules/retail-actions';\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IBusinessSignUpConfig, IBusinessSignUpProps } from './business-sign-up.props.autogenerated';\nimport { SignUpButton, SignUpError, SignUpInput, SignUpLabel } from './components';\n\nexport interface IBusinessSignUpExtendedProps extends IBusinessSignUpProps {\n formItems?: IFormItem[];\n}\n\nexport interface IBusinessSignUpItem {\n wrapper: INodeProps;\n isAddressInput?: boolean;\n id: string;\n label: React.ReactNode;\n errorMessage: React.ReactNode;\n input?: React.ReactNode;\n}\n\nexport interface IBusinessState {\n isReady: boolean;\n formItems: IFormItem[];\n addressHasErrors: boolean;\n showAddressErrors: boolean;\n hasSubmitErrors: boolean;\n}\n\nexport interface IBusinessSignUpLocalAccount {\n FormWrapper: INodeProps;\n items: IBusinessSignUpItem[];\n buttons: React.ReactNode[];\n errorMessage: React.ReactNode[];\n disclaimer: React.ReactNode;\n}\n\nexport interface IBusinessSignUpViewProps {\n className: string;\n businessSignUp: IModuleProps;\n ContainerWrapper: INodeProps;\n heading: React.ReactNode;\n businessSignUpForm: IBusinessSignUpLocalAccount;\n formItems: IFormItem[];\n}\n\nexport interface IFormItem {\n id: string;\n type: InputType;\n label: string;\n value: string;\n maxChars?: string;\n isRequired: boolean;\n pattern?: string;\n address?: Address;\n customClass?: string;\n fieldReference?: React.RefObject;\n}\n\nexport enum InputType {\n // eslint-disable-next-line @typescript-eslint/no-shadow -- Text enum doesn't override the imported Text\n Text = 'text',\n Address = 'address',\n Email = 'email',\n TextArea = 'textarea'\n}\n\nexport enum InputID {\n FirstName = 'FirstName',\n LastName = 'LastName',\n Email = 'CompanyEmail',\n CompanyName = 'CompanyName',\n Address = 'CompanyAddress',\n JobTitle = 'JobTitle',\n Size = 'CompanySize',\n Department = 'Department',\n Comment = 'Comment'\n}\n\nexport const renderInputSection = (\n inputs: IFormItem[],\n className: string,\n needToReset: boolean,\n onInputChange: (event: React.ChangeEvent) => void,\n showErrors: boolean,\n addressForm?: React.ReactNode,\n updateAddress?: (errors: boolean, currAddress?: Address) => void\n): IBusinessSignUpItem[] => {\n return inputs.map((element, index) => {\n const { id, type, label, maxChars, isRequired, pattern, customClass, value, fieldReference } = element;\n\n const baseSignUpItem: IBusinessSignUpItem = {\n wrapper: {\n className: classnames(className, `${className}-${id}`, customClass)\n },\n id,\n label: ,\n errorMessage: \n };\n\n if (type === InputType.Address) {\n if (addressForm) {\n baseSignUpItem.isAddressInput = true;\n baseSignUpItem.input = (\n <>\n {React.cloneElement(addressForm as React.ReactElement, {\n updateForm: updateAddress,\n hasError: showErrors,\n isRequired: isRequired === undefined ? false : isRequired,\n resetAddress: needToReset\n })}\n \n );\n } else {\n // If the address slot is not filled, remove this input from the form\n inputs.splice(index, 1);\n }\n } else {\n baseSignUpItem.input = (\n \n );\n }\n\n return baseSignUpItem;\n });\n};\n\n/**\n *\n * Business Request Form Modules\n * Form that a business can use to submit a request to become a partner with Microsoft.\n * @extends {React.Component>}\n */\nclass BusinessSignUp extends React.Component {\n // Used as default data\n public BusinessSignUpDefaultInputs: IFormItem[] = [\n {\n id: InputID.FirstName,\n type: InputType.Text,\n label: this.props.resources.firstNameLabel,\n value: '',\n isRequired: true,\n customClass: 'width-25'\n },\n {\n id: InputID.LastName,\n type: InputType.Text,\n label: this.props.resources.lastNameLabel,\n value: '',\n isRequired: true,\n customClass: 'width-25'\n },\n {\n id: InputID.Email,\n type: InputType.Email,\n label: this.props.resources.emailAddressLabel,\n value: '',\n isRequired: true,\n pattern: EmailRegex.defaultRegex.source,\n customClass: 'width-50'\n },\n {\n id: InputID.CompanyName,\n type: InputType.Text,\n label: this.props.resources.companyLabel,\n value: '',\n isRequired: true,\n customClass: 'width-50'\n },\n {\n id: InputID.Department,\n type: InputType.Text,\n label: this.props.resources.departmentLabel,\n value: '',\n isRequired: false,\n customClass: 'width-50'\n },\n {\n id: InputID.JobTitle,\n type: InputType.Text,\n label: this.props.resources.jobTitleLabel,\n value: '',\n isRequired: false,\n customClass: 'width-50'\n },\n {\n id: InputID.Size,\n type: InputType.Text,\n label: this.props.resources.companySizeLabel,\n value: '',\n isRequired: false,\n customClass: 'width-50'\n },\n {\n id: InputID.Address,\n type: InputType.Address,\n label: this.props.resources.companyAddressLabel,\n value: '',\n isRequired: false,\n customClass: 'width-100'\n },\n {\n id: InputID.Comment,\n type: InputType.TextArea,\n label: this.props.resources.commentLabel,\n value: '',\n isRequired: false,\n customClass: 'width-100'\n }\n ];\n\n private readonly formChildReference: React.RefObject = React.createRef();\n\n private readonly moduleClassName: string = 'ms-business-sign-up';\n\n private needsToReset: boolean = false;\n\n private readonly telemetryContent: ITelemetryContent;\n\n constructor(props: IBusinessSignUpExtendedProps) {\n super(props);\n\n this.state = {\n isReady: false,\n formItems: this.props.formItems || this._addedReference(),\n addressHasErrors: false,\n showAddressErrors: false,\n hasSubmitErrors: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public componentDidMount(): void {\n this.formChildReference.current?.focus();\n }\n\n public shouldComponentUpdate(nextProps: IBusinessSignUpExtendedProps, nextState: IBusinessState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const { config } = this.props;\n const { formItems } = this.state;\n const { className, heading } = config;\n\n const viewProps = {\n ...this.props,\n businessSignUp: {\n moduleProps: this.props,\n className: classnames(this.moduleClassName, className)\n },\n ContainerWrapper: {\n className: `${this.moduleClassName}__container`\n },\n heading: (\n \n ),\n businessSignUpForm: this._renderForm(),\n formItems\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Handle the heading change event.\n * @param event - Content Editable Event.\n */\n public handleHeadingChange = (event: ContentEditableEvent): void => {\n this.props.config.heading.text = event.target.value;\n };\n\n private _renderForm(): IBusinessSignUpLocalAccount {\n const { config, resources, slots } = this.props;\n const { showAddressErrors, hasSubmitErrors, isReady, formItems } = this.state;\n const {\n signUpButtonArialabel,\n signUpButtonText,\n cancelButtonArialabel,\n cancelButtonText,\n errorMessage,\n partialAddressErrorMessage\n } = resources;\n const addressForm = (slots && slots.addressSlot && slots.addressSlot.length > 0 && slots.addressSlot[0]) || undefined;\n\n const form = {\n FormWrapper: {\n className: `${this.moduleClassName}__form `\n },\n items: renderInputSection(\n formItems,\n `${this.moduleClassName}__form-item`,\n this.needsToReset,\n this._onInputChange,\n showAddressErrors,\n addressForm,\n this._onAddressChange\n ),\n buttons: [\n ,\n \n ],\n errorMessage: [\n hasSubmitErrors && ,\n showAddressErrors && (\n \n )\n ],\n disclaimer: config.disclaimer && (\n \n )\n };\n\n if (this.needsToReset) {\n this.needsToReset = false;\n }\n\n return form;\n }\n\n private readonly _onInputChange = (event: React.ChangeEvent): void => {\n const newForm = this.state.formItems;\n newForm.forEach(item => {\n if (item.id === event.target.id) {\n item.value = event.target.value;\n }\n });\n\n // Check if form is ready, update state object with latest values, values have changed so reset hasSubmitErrros\n this.setState({\n isReady: this._isFormReady(),\n formItems: newForm,\n hasSubmitErrors: false\n });\n };\n\n private _addedReference(): IFormItem[] {\n const newFormFields = this.BusinessSignUpDefaultInputs;\n newFormFields[0].fieldReference = this.formChildReference;\n return newFormFields;\n }\n\n private readonly _onAddressChange = (errors: boolean, currentAddress?: Address): void => {\n // Find address item\n const newForm = this.state.formItems;\n const addressItem = newForm.find(item => {\n return item.type === InputType.Address;\n });\n\n // If found --> set to currentAddress\n if (addressItem) {\n addressItem.address = currentAddress;\n\n // Update state with new values and set errors to false if address is not required field\n this.setState(\n {\n formItems: newForm,\n addressHasErrors: errors,\n showAddressErrors: false\n },\n () => {\n this.setState({ isReady: this._isFormReady() });\n }\n );\n }\n };\n\n private readonly _isFormReady = (): boolean => {\n const { formItems } = this.state;\n\n for (const currentInput of formItems) {\n // Will return FALSE if:\n // - input field is required\n // IF is address AND addressHasErrors === true\n // ELSE value is undefined OR empty\n // OR\n // - pattern provided and value does not match pattern\n\n if (currentInput.isRequired) {\n if (currentInput.type === InputType.Address) {\n if (this.state.addressHasErrors) {\n return false;\n }\n } else if (currentInput.value === undefined || currentInput.value === '') {\n return false;\n }\n }\n if (currentInput.pattern !== undefined && currentInput.value.match(currentInput.pattern) === null) {\n return false;\n }\n }\n\n return true;\n };\n\n private readonly _onSubmit = (event: React.MouseEvent) => {\n if (this.state.addressHasErrors) {\n this.setState({\n showAddressErrors: true\n });\n\n event.preventDefault();\n return;\n }\n\n const { config, context } = this.props;\n\n // Check for matching id and if not empty\n const firstName = this._getItem(InputID.FirstName);\n const lastName = this._getItem(InputID.LastName);\n const companyName = this._getItem(InputID.CompanyName);\n const companyEmail = this._getItem(InputID.Email);\n const companyAddress = this._getItem(InputID.Address, true);\n const jobTitle = this._getItem(InputID.JobTitle);\n const department = this._getItem(InputID.Department);\n const companySize = this._getItem(InputID.Size);\n const comments = this._getItem(InputID.Comment);\n\n // API gets email as part of the address object, but I do not use the email input from the address component, thus we need to copy it over\n if (companyEmail && companyEmail.value && companyAddress && companyAddress.address) {\n companyAddress.address.Email = companyEmail.value;\n }\n\n const newPartner: BusinessPartnerProspect = {\n FirstName: firstName && firstName.value,\n LastName: lastName && lastName.value,\n CompanyName: companyName && companyName.value,\n Address: companyAddress && companyAddress.address && companyAddress.address,\n JobTitle: jobTitle && jobTitle.value,\n Department: department && department.value,\n CompanySize: (companySize && Number.parseInt(companySize.value, 10)) || 0,\n Comments: comments && comments.value\n };\n\n this.setState({\n isReady: false\n });\n\n // Create business partner request\n createProspectAsync({ callerContext: context.actionContext }, newPartner)\n .then(() => {\n const successPageURL =\n (config.confirmationLink && config.confirmationLink.linkUrl && config.confirmationLink.linkUrl.destinationUrl) ||\n getUrlSync('home', this.props.context.actionContext) ||\n '';\n window.location.href = successPageURL;\n })\n .catch(() => {\n this.setState({\n hasSubmitErrors: true\n });\n });\n };\n\n private readonly _onCancel = () => {\n // Reset values of the form\n const cleanForm = this.state.formItems;\n cleanForm.forEach(input => {\n input.value = '';\n });\n\n // Set reset flag so address input will get reset on next renderInputSection() call\n this.needsToReset = true;\n\n this.setState({\n isReady: false,\n formItems: cleanForm,\n addressHasErrors: true,\n showAddressErrors: false,\n hasSubmitErrors: false\n });\n };\n\n private readonly _getItem = (id: string, isAddress: boolean = false) => {\n if (isAddress) {\n return this.state.formItems.find(item => {\n return item.id === id && item.address;\n });\n }\n return this.state.formItems.find(item => {\n return item.id === id && item.value !== '';\n });\n };\n}\n\nexport default BusinessSignUp;\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { Module } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport MsDyn365 from \"@msdyn365-commerce/core\";\r\nimport { IInvoicesListViewProps } from '@msdyn365-commerce-modules/invoice/src/modules/invoices-list/./invoices-list';\r\n\r\nexport const InvoiceListView: React.FC = props => {\r\n const { header, filter, content, invoiceRequestModal, pagination } = props;\r\n if (MsDyn365.isBrowser) {\r\n const linksElements = document.querySelectorAll('a.msc-invoices-list__container__content__table__row__open-invoice');\r\n console.log(linksElements);\r\n linksElements.forEach(l => l.setAttribute('href', '#'));\r\n }\r\n return (\r\n \r\n {header}\r\n {invoiceRequestModal}\r\n {filter}\r\n {content}\r\n {pagination}\r\n \r\n );\r\n};\r\n\r\nexport default InvoiceListView;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Heading, IModuleProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IHeadingData, IIframeConfig, IIframeProps } from './iframe.props.autogenerated';\n\nexport interface IIframeViewProps extends IIframeProps {\n Heading: React.ReactNode;\n IframeContainer: IModuleProps;\n IFrame: React.ReactNode;\n alert?: React.ReactNode;\n cookieConsentAccepted?: boolean;\n}\n\n/**\n *\n * Iframe component.\n * @extends {React.PureComponent}\n */\nclass Iframe extends React.PureComponent> {\n private readonly iframeRef: React.RefObject;\n\n constructor(props: IIframeProps) {\n super(props);\n this.iframeRef = React.createRef();\n }\n\n public render(): JSX.Element | null {\n const { config, resources } = this.props;\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 (!(config && config.target && config.target.destinationUrl)) {\n return null;\n }\n\n let srcURL;\n try {\n srcURL = new URL(config.target.destinationUrl);\n } catch (error) {\n this.props.telemetry.exception(error);\n return null;\n }\n\n if (srcURL && srcURL.protocol && srcURL.protocol.toLocaleLowerCase() !== 'https:') {\n return null;\n }\n const iframeClassName = classnames('ms-iframe', config.className);\n\n let viewProps: IIframeViewProps = {\n ...(this.props as IIframeProps),\n Heading: this._createHeading(config.heading!),\n IframeContainer: {\n moduleProps: this.props,\n className: iframeClassName\n },\n IFrame: this._createIframe()\n };\n\n if (!isConsentGiven) {\n viewProps = {\n ...viewProps,\n alert: this._renderAlert(resources.cookieConsentRequiredMessage)\n };\n } else {\n viewProps = {\n ...viewProps,\n cookieConsentAccepted: true\n };\n }\n return this.props.renderView(viewProps) as React.ReactElement;\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 private _renderAlert(message: string): React.ReactNode | null {\n return (\n

\n {message}\n

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

\n {this.state.error}\n

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

Order Confirmation

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

PO Number:

\r\n

{attr.TextValue}

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

Order Date:

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

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

Notes:

\r\n

{salesOrder.Comment}

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

Account Name:

\r\n

{customer?.FirstName}

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

Account Number:

\r\n

{customer?.AccountNumber}

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

Shipping Address:

\r\n

{salesOrder.ShippingAddress?.Name}

\r\n

{salesOrder.ShippingAddress?.FullAddress}

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

Shipping Method:

\r\n

{deliveryMode}

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

Order Total:

\r\n

{cultureFormatter.formatCurrency(salesOrder.TotalAmount!)}

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

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

\n
\n );\n }\n return null;\n};\n\nexport default SearchResultContainerView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IIframeViewProps } from './iframe';\n\n/**\n *\n * IFrameView component.\n * @extends {React.PureComponent}\n */\nexport class IFrameView extends React.PureComponent {\n public render(): JSX.Element | null {\n const { Heading, IframeContainer, IFrame, alert, cookieConsentAccepted } = this.props;\n\n return (\n \n {alert}\n {cookieConsentAccepted && cookieConsentAccepted ? (\n <>\n {Heading}\n {IFrame}\n \n ) : null}\n \n );\n }\n}\nexport default IFrameView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n IContentBlockAdditionalContentItemViewProps,\n IContentBlockAdditionalContentViewProps,\n IContentBlockViewProps\n} from '@msdyn365-commerce-modules/content-block';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\n/**\n * Render Additional Content.\n * @param additionalContent - Additional content view props.\n * @returns JSX Element.\n */\nconst renderAdditionalContent = (additionalContent: IContentBlockAdditionalContentViewProps) => {\n return (\n \n {additionalContent.additionalContentItems?.map((item: IContentBlockAdditionalContentItemViewProps) => {\n return (\n <>\n {item.heading}\n \n {item.text}\n {item.links}\n \n \n );\n })}\n \n );\n};\n\n/**\n * Render View.\n * @param props - The view props.\n * @returns -The JSX Element.\n */\nconst contentBlockView: React.FC = props => {\n const {\n contentBlockContainer,\n imageContainer,\n detailsContainer,\n title,\n text,\n links,\n image,\n contentBlockAnchorTag,\n imageLink,\n imageAriaLabel,\n additionalContent\n } = props;\n\n // @ts-expect-error HTML element need to be clear on run time.\n const hasImage: boolean = image.props.src;\n const imageClass: string = hasImage ? `${detailsContainer.className} withImage` : `${detailsContainer.className} withoutImage`;\n\n if (imageLink) {\n return (\n \n \n {image}\n \n \n {title}\n {text}\n {links}\n {additionalContent && renderAdditionalContent(additionalContent)}\n \n \n );\n }\n return (\n \n {image}\n \n {title}\n {text}\n {links}\n {additionalContent && renderAdditionalContent(additionalContent)}\n \n \n );\n};\n\nexport default contentBlockView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IBusinessSignUpItem, IBusinessSignUpViewProps } from './business-sign-up';\n\nconst BusinessSignUpItem: React.FC = ({ wrapper, label, errorMessage, input, isAddressInput }) => {\n // Hide label and error message if rendering address section\n return (\n \n {!isAddressInput && label}\n {!isAddressInput && errorMessage}\n {input}\n \n );\n};\n\nconst BusinesSignUpView: React.FC = props => {\n const { businessSignUp, ContainerWrapper, heading, businessSignUpForm } = props;\n\n const { FormWrapper, buttons, items, errorMessage, disclaimer } = businessSignUpForm;\n\n return (\n \n \n {heading}\n \n {items &&\n items.map((item: IBusinessSignUpItem) => {\n return ;\n })}\n {errorMessage &&\n errorMessage.map((error: React.ReactNode, index: number) => {\n return {error};\n })}\n {buttons &&\n buttons.map((button: React.ReactNode, index: number) => {\n return {button};\n })}\n {disclaimer}\n \n \n \n );\n};\n\nexport default BusinesSignUpView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n IGroup,\n IGroupDelivery,\n IGroups,\n IHelp,\n IOrderDetailsViewProps,\n IOrderInformation,\n IOrderSummary,\n IPaymentMethods,\n ISalesLine\n} from '@msdyn365-commerce-modules/order-management';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport const OrderInfomation: React.FC = ({\n orderInformationProps,\n salesId,\n receiptId,\n createdDate,\n count,\n amount,\n channelReferenceId,\n channelName,\n channelAddress\n}) => (\n \n {channelName}\n {channelAddress}\n {salesId}\n {receiptId}\n {createdDate}\n {count}\n {amount}\n {channelReferenceId}\n \n);\n\nexport const SalesLine: React.FC = ({ salesLineProps, salesLine, buyAgainButton, errors }) => (\n \n {salesLine}\n {buyAgainButton}\n {errors}\n \n);\n\nexport const GroupDelivery: React.FC = ({ deliveryProps, heading, count }) => (\n \n {heading}\n {count}\n \n);\n\nexport const Group: React.FC = ({ groupProps, delivery, address, salesLinesProps, salesLines, isCashAndCarryTransaction }) => (\n \n {delivery && }\n \n {salesLines && (\n \n {salesLines.map(salesLine => (\n \n {!isCashAndCarryTransaction && salesLine.salesStatus}\n {salesLine.data.deliveryType === 'ship' && salesLine.data.shipment ? salesLine.trackingInfo : null}\n \n \n ))}\n \n )}\n {!delivery.showTimeslot && address}\n {delivery.showTimeslot && (\n \n {address}\n {delivery.pickupDateTimeslot}\n \n )}\n \n \n);\n\nexport const Groups: React.FC = ({ groupsProps, groups }) => (\n \n {groups.map((group, index) => (\n \n ))}\n \n);\n\nexport const OrderSummary: React.FC = ({\n orderSummaryProps,\n heading,\n subtotal,\n shipping,\n tax,\n totalAmount,\n earnedPoints\n}) => (\n \n {heading}\n {subtotal}\n {shipping}\n {tax}\n {totalAmount}\n {earnedPoints}\n \n);\n\nexport const Payment: React.FC = ({ paymentMethodsProps, title, methods }) => (\n \n {title}\n {methods}\n \n);\n\nexport const Help: React.FC = ({ helpProps, needHelpLabel, helpLineNumberLabel, contactNumber }) => (\n \n {needHelpLabel}\n {helpLineNumberLabel}\n {contactNumber}\n \n);\n\nconst OrderDetailsView: React.FC = ({\n moduleProps,\n viewModes,\n tableViewActions,\n table,\n placedBy,\n heading,\n alert,\n loading,\n orderInfomation,\n orderSummary,\n payment,\n help,\n groups\n}) => {\n return (\n \n {placedBy}\n {heading}\n {alert}\n {loading}\n {orderInfomation && }\n {tableViewActions}\n {viewModes}\n {table}\n {groups && }\n \n {orderSummary && }\n {payment && }\n \n {help && }\n \n );\n};\n\nexport default OrderDetailsView;\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport { IMediaGalleryThumbnailItemViewProps,\r\n IMediaGalleryThumbnailsViewProps,\r\n IMediaGalleryViewProps\r\n} from '@msdyn365-commerce-modules/media-gallery';\r\nimport { Button, KeyCodes, Module, Node, NodeTag } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport React from 'react';\r\n\r\n/**\r\n * Render the thumbnail item images.\r\n * @param thumbnail - The carousel thumbnail line props.\r\n * @returns Return HTML having thumnailcontainer props with image.\r\n */\r\nconst renderThumbnailItem = (thumbnail: IMediaGalleryThumbnailItemViewProps): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\r\n const { ThumbnailItemContainerProps, Picture } = thumbnail;\r\n\r\n return (\r\n \r\n {Picture}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Gets the thumbnail item to display media gallery images.\r\n * @param image - The media gallery images.\r\n * @param imageSettings - Image settings for the image gallery items.\r\n * @param imageId - Image id.\r\n * @param modifiedActiveIndex - Modified Index of the images when selection changes.\r\n * @param props - The Media gallery view props from business layer.\r\n * @returns Return thumbnail view props which will be used to render images.\r\n */\r\nconst GetThumbnailItemComponent = (\r\n image: IImageData,\r\n imageSettings: IImageSettings,\r\n imageId: number,\r\n modifiedActiveIndex: number,\r\n props: IMediaGalleryViewProps\r\n): IMediaGalleryThumbnailItemViewProps => {\r\n\r\n /**\r\n * OnClick method of media gallery item.\r\n * */\r\n const onClick = () => {\r\n props.callbackToggle?.();\r\n props.callbackThumbnailClick?.(imageId);\r\n props.state.activeIndex = imageId;\r\n };\r\n\r\n const classes = classnames(\r\n 'ms-media-gallery__thumbnail-item',\r\n modifiedActiveIndex === imageId ? 'ms-media-gallery__thumbnail-item-active' : ''\r\n );\r\n\r\n /**\r\n * Keydown event of media gallery item.\r\n * @param event - React.KeyboardEvent.\r\n * */\r\n const handleKeyDown = (event: React.KeyboardEvent) => {\r\n if (event.keyCode === KeyCodes.Enter) {\r\n event.preventDefault();\r\n onClick();\r\n }\r\n };\r\n\r\n return {\r\n ThumbnailItemContainerProps: {\r\n tag: 'li' as NodeTag,\r\n className: classes,\r\n role: 'presentation',\r\n key: imageId\r\n },\r\n Picture: (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n };\r\n};\r\n\r\n/**\r\n * Gets the empty thumbnail item to display media gallery images.\r\n * @param imageSettings - Image settings for the image gallery items.\r\n * @param props - The Media gallery view props from business layer.\r\n * @returns Return thumbnail view props which will be used to render empty images.\r\n */\r\nconst GetEmptyThumbnailItemComponent = (imageSettings: IImageSettings, props: IMediaGalleryViewProps): IMediaGalleryThumbnailItemViewProps => {\r\n return {\r\n ThumbnailItemContainerProps: {\r\n tag: 'li' as NodeTag,\r\n className: 'ms-media-gallery__thumbnail-item',\r\n role: 'tab',\r\n tabIndex: 0,\r\n key: 0,\r\n 'aria-label': '',\r\n 'aria-selected': true\r\n },\r\n Picture: (\r\n \r\n )\r\n };\r\n};\r\n\r\n/**\r\n * Update media gallery items method.\r\n * @param items - The media gallery thumbnail item view props.\r\n * @returns The IImageData array.\r\n */\r\nconst getMediaGalleryItems = (items?: IMediaGalleryThumbnailItemViewProps[]): IImageData[] | undefined => {\r\n return items?.map(item => {\r\n return {\r\n altText: item.Picture.props.altText,\r\n src: item.Picture.props.src\r\n };\r\n });\r\n};\r\n\r\nconst defaultThumbnailImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=295&h=295&q=80&m=6&f=jpg', w: 295, h: 295 },\r\n xl: { q: 'w=295&h=295&q=80&m=6&f=jpg', w: 295, h: 295 }\r\n },\r\n lazyload: true,\r\n cropFocalRegion: true\r\n};\r\n\r\n/**\r\n * Render the Media gallery thumbnails to represent images in grid view.\r\n * @param thumbnails - The thumbnail view props.\r\n * @param props - The media gallery view props.\r\n * @returns - The single slide carousel component to render as media gallery image.\r\n */\r\nconst renderThumbnails = (\r\n thumbnails: IMediaGalleryThumbnailsViewProps,\r\n props: IMediaGalleryViewProps\r\n): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\r\n const { ThumbnailsContainerProps, SingleSlideCarouselComponentProps } = thumbnails;\r\n const { state, Thumbnails } = props;\r\n const mediaGalleryItems = getMediaGalleryItems(Thumbnails.items);\r\n\r\n const items: IMediaGalleryThumbnailItemViewProps[] | undefined =\r\n // eslint-disable-next-line multiline-ternary -- need multiline for easy code reading\r\n state.lastUpdate && mediaGalleryItems && mediaGalleryItems[0].src === 'empty' ? [GetEmptyThumbnailItemComponent(defaultThumbnailImageSettings, props)] :\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery\r\n mediaGalleryItems?.map((item: IImageData, id: number) => GetThumbnailItemComponent(item,\r\n defaultThumbnailImageSettings, id, state.activeIndex, props));\r\n\r\n return (\r\n \r\n \r\n {items?.map(renderThumbnailItem)}\r\n \r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render the Media gallery items using viewprops.\r\n * @param props - The media gallery view props.\r\n * @returns The media gallery module wrapping up images node.\r\n */\r\nconst mediaGalleryView: React.FC = props => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\r\n const { CarouselProps, Thumbnails, MediaGallery, Modal } = props;\r\n return (\r\n \r\n \r\n {Modal}\r\n {renderThumbnails(Thumbnails, props)}\r\n \r\n );\r\n};\r\n\r\nexport default mediaGalleryView;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { Module } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport MsDyn365 from \"@msdyn365-commerce/core\";\r\nimport { IInvoicesListViewProps } from '@msdyn365-commerce-modules/invoice/src/modules/invoices-list/./invoices-list';\r\n\r\nexport const InvoiceListView: React.FC = props => {\r\n const { header, filter, content, invoiceRequestModal, pagination } = props;\r\n if (MsDyn365.isBrowser) {\r\n const linksElements = document.querySelectorAll('a.msc-invoices-list__container__content__table__row__open-invoice');\r\n console.log(linksElements);\r\n linksElements.forEach(l => l.setAttribute('href', '#'));\r\n }\r\n return (\r\n \r\n {header}\r\n {invoiceRequestModal}\r\n {filter}\r\n {content}\r\n {pagination}\r\n \r\n );\r\n};\r\n\r\nexport default InvoiceListView;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { IGroup, IGroupDelivery, IGroups, IHeader, IList, IOrderHistoryViewProps, IOrderInformation, ISalesOrder } from '@msdyn365-commerce-modules/order-management';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport const OrderHistoryOrderInfomation: React.FC = ({\r\n orderInformationProps,\r\n salesId,\r\n receiptId,\r\n channelName,\r\n createdDate,\r\n count,\r\n amount,\r\n channelReferenceId\r\n}) => (\r\n \r\n {channelName}\r\n {salesId}\r\n {receiptId}\r\n {createdDate}\r\n {count}\r\n {amount}\r\n {channelReferenceId}\r\n \r\n);\r\n\r\nexport const OrderHistoryGroupDelivery: React.FC = ({ deliveryProps, heading, count, processing, address, trackingInfo }) => (\r\n \r\n {heading}\r\n {count}\r\n {processing}\r\n {address}\r\n {trackingInfo}\r\n \r\n);\r\n\r\nexport const OrderHistoryGroup: React.FC = ({ groupProps, delivery, salesLinesProps, salesLines }) => (\r\n \r\n {salesLines && (\r\n \r\n {salesLines.map(salesLine => (\r\n \r\n {salesLine.salesLine}\r\n \r\n ))}\r\n \r\n )}\r\n \r\n);\r\n\r\nexport const OrderHistoryGroups: React.FC = ({ groupsProps, groups }) => (\r\n \r\n {groups.map((group, index) => (\r\n \r\n ))}\r\n \r\n);\r\n\r\nexport const OrderHistoryHeader: React.FC = ({ headerProps, heading, orderCountLabel, extraActions }) => (\r\n \r\n {heading}\r\n {orderCountLabel}\r\n {extraActions}\r\n \r\n);\r\n\r\nexport const OrderHistorySalesOder: React.FC = ({ salesOrderProps, orderInfomation, groups, orderDetailsLink, expandProductsButton }) => (\r\n \r\n {orderInfomation && }\r\n {groups && }\r\n {expandProductsButton}\r\n {orderDetailsLink}\r\n \r\n);\r\n\r\nexport const OrderHistoryList: React.FC = ({ listProps, salesOrders }) => (\r\n \r\n {salesOrders && salesOrders.map((salesOrder, index) => )}\r\n \r\n);\r\n\r\nconst OrderHistoryView: React.FC = ({\r\n orderHistoryProps,\r\n header,\r\n alert,\r\n loading,\r\n emptyMessage,\r\n backToShoppingLink,\r\n list,\r\n table,\r\n moreButton\r\n}) => (\r\n \r\n {header && }\r\n {loading}\r\n {alert && (\r\n <>\r\n {alert}\r\n {backToShoppingLink}\r\n \r\n )}\r\n {emptyMessage && (\r\n \r\n {emptyMessage}\r\n {backToShoppingLink}\r\n \r\n )}\r\n {list && }\r\n {table}\r\n {moreButton && moreButton}\r\n \r\n);\r\n\r\nexport default OrderHistoryView;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. 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 { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { /*IHeader,*/ IMapViewProps } from './eve-map';\r\n\r\n/**\r\n * Render the heading.\r\n * @param param0 -- Heading props.\r\n * @param param0.headerProps -- Heading Props.\r\n * @param param0.heading -- Heading Node.\r\n * @returns -- Returns the node.\r\n */\r\n// const MapHeader: React.FC = ({ headerProps, heading }) => {heading};\r\n\r\n/**\r\n * Renders the map view props.\r\n * @param param0 -- Map view props.\r\n * @param param0.ModuleProps -- Module props.\r\n * @param param0.Header -- Header props.\r\n * @param param0.MapProps -- Map props.\r\n * @returns -- Returns the map module.\r\n */\r\nconst MapView: React.FC = props => {\r\n const { ModuleProps, MapProps } = props;\r\n return (\r\n \r\n
\r\n {renderDealerList(props)}\r\n {/* Not using the map header - can remove and disable the configuration field? */}\r\n {/* {Header && }, */}\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nconst renderDealerList: React.FC = props => {\r\n const {\r\n dealerResultContainerProps,\r\n locationsMessage,\r\n search,\r\n state,\r\n spinner,\r\n locationsList,\r\n noLocationsMessage\r\n // selectedLocation,\r\n // dealerDetailsModal // may just have the details appear by extending the selected dealer in the list\r\n } = props;\r\n return (\r\n \r\n {locationsMessage}\r\n {search}\r\n {state.isSearchInProgress ? spinner : <>{locationsList ? locationsList : noLocationsMessage}\r\n // {/* <>{noLocationsMessage} */}\r\n }\r\n {/* Make the renderSelectedDealer function work??? */}\r\n {/* {selectedLocation && renderSelectedDealer(selectedLocation)} */}\r\n \r\n );\r\n};\r\n\r\nexport default MapView;\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 { IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport {\r\n IReportReviewModalViewProps,\r\n IReviewCardViewProps,\r\n IReviewsListData,\r\n IReviewsListResources,\r\n IReviewsListState,\r\n IReviewsListViewProps\r\n} from '@msdyn365-commerce-modules/ratings-reviews';\r\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IReviewsListProps } from '../definition-extensions/reviews-list.ext.props.autogenerated';\r\n\r\n/**\r\n * Build Review Card.\r\n * @param props - Review Card ViewProps.\r\n * @param resources - Resource Strings.\r\n * @param isUserReview - User review flag.\r\n * @returns JSX Element.\r\n */\r\nconst buildReviewCard = (props: IReviewCardViewProps, resources: IReviewsListResources, isUserReview: boolean) => {\r\n return (\r\n \r\n \r\n
\r\n {props.rating}\r\n {props.date}\r\n
\r\n {props.name}\r\n
\r\n \r\n \r\n {props.reviewTitle}\r\n {props.reviewText}\r\n \r\n \r\n {props.responseName}\r\n {props.responseDate}\r\n {props.responseText}\r\n \r\n \r\n {isUserReview ? undefined :

\r\n {resources.wasReviewHelpfulText}\r\n

}\r\n {props.like}\r\n {props.dislike}\r\n {props.edit}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Render Product Image.\r\n * @param props - WriteReview ViewProps.\r\n * @returns JSX Element.\r\n */\r\nconst renderProductImage = (props: IReviewsListViewProps & IReviewsListProps): JSX.Element => {\r\n const primaryImageSource = props.data.product.result?.PrimaryImageUrl;\r\n const imageUrl = generateImageUrl(primaryImageSource, props.context.request.apiSettings);\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=111&h=111&m=6', w: 111, h: 111 },\r\n sm: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\r\n md: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\r\n lg: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\r\n xl: { q: 'w=130&h=130&m=6', w: 130, h: 130 }\r\n },\r\n lazyload: true,\r\n cropFocalRegion: true\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render Product Description.\r\n * @param props - WriteReview ViewProps.\r\n * @returns JSX Element.\r\n */\r\nconst renderProductDescription = (props: IReviewsListViewProps & IReviewsListProps): JSX.Element => {\r\n const product = props.data.product.result;\r\n return (\r\n \r\n
\r\n {renderProductImage(props)}\r\n
\r\n
\r\n
\r\n {product?.Name}\r\n
\r\n
\r\n {product?.Name}\r\n
\r\n
\r\n {product?.ItemId}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Build Review modal.\r\n * @param props - Review list ViewProps.\r\n * @returns JSX Element.\r\n */\r\nconst createReviewModal = (props: IReviewsListViewProps & IReviewsListProps): JSX.Element => {\r\n const { resources, moduleProps, reviewModal } = props;\r\n return (\r\n \r\n {reviewModal.modalHeader}\r\n \r\n \r\n \r\n {renderProductDescription(props)}\r\n \r\n
\r\n {resources.selectRatingLabel}\r\n
\r\n {reviewModal.rating}\r\n
\r\n
\r\n \r\n {resources.reviewTitleLabel}\r\n {reviewModal.titleInput}\r\n \r\n \r\n {resources.reviewTextLabel}\r\n {reviewModal.textInput}\r\n \r\n {reviewModal.privacyPolicyUrl}\r\n {reviewModal.error}\r\n
\r\n
\r\n \r\n {reviewModal.submitButton}\r\n {reviewModal.cancelButton}\r\n \r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Build Review modal.\r\n * @param props - Review modal ViewProps.\r\n * @param state - Review List State.\r\n * @returns JSX Element.\r\n */\r\nconst createReportModal = (props: IReportReviewModalViewProps, state: IReviewsListState): JSX.Element => {\r\n return (\r\n \r\n \r\n {state.reported ? props.headerSubmitted : props.header}\r\n \r\n \r\n {state.reported ? props.reportSubmittedMessage : [props.reportMessage, props.radioButtons, props.error]}\r\n \r\n \r\n {state.reported ? props.succesfulButton : [props.submitButton, props.cancelButton]}\r\n \r\n \r\n );\r\n};\r\n\r\n/**\r\n * ReviewsList view.\r\n * @param props - Ratings ReviewsList ViewProps.\r\n * @returns ReviewsList view module.\r\n */\r\nconst ReviewsListview: React.FC> = props => {\r\n const {\r\n filterByDropdown,\r\n heading,\r\n moduleProps,\r\n noReviewsMessage,\r\n noReviewsWithFilterMessage,\r\n pageControls,\r\n refineReviewsProps,\r\n reportReviewModal,\r\n reviewsListProps,\r\n reviewCards,\r\n sortByDropdown,\r\n state,\r\n userReview,\r\n resources\r\n } = props;\r\n\r\n if (!userReview && !ArrayExtensions.hasElements(reviewCards) && !state.isFilterApplied) {\r\n return (\r\n {noReviewsMessage}\r\n );\r\n }\r\n\r\n return (\r\n \r\n {heading}\r\n \r\n {sortByDropdown}\r\n {filterByDropdown}\r\n \r\n \r\n {userReview && buildReviewCard(userReview, resources, true)}\r\n {reviewCards.map(review => {\r\n return buildReviewCard(review, resources, false);\r\n })}\r\n \r\n { !ArrayExtensions.hasElements(reviewCards) && state.isFilterApplied && noReviewsWithFilterMessage}\r\n {pageControls}\r\n {createReviewModal(props)}\r\n {createReportModal(reportReviewModal, state)}\r\n \r\n );\r\n};\r\n\r\nexport default ReviewsListview;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Alert, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICookieComplianceViewProps } from './cookie-compliance';\n\nconst CookieComplianceView: React.FC = props => {\n const { CookieComplianceBanner, AlertProps, Content, acceptButton, text, links } = props;\n\n return (\n \n \n \n {text}\n {links}\n \n {acceptButton}\n \n \n );\n};\nexport default CookieComplianceView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AsyncResult, Customer, ProductSearchResult, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, ObjectExtensions, Random } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, IModuleProps, isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport { getCatalogId } from '@msdyn365-commerce/core';\nimport { ProductComparisonItem, ProductComparisonState } from '../product-comparison-state';\nimport { IProductComparisonButtonProps } from './product-comparison-button.props.autogenerated';\n\n/**\n * Represents product comparison view props.\n */\nexport interface IProductComparisonButtonViewProps extends IProductComparisonButtonProps<{}> {\n moduleProps: IModuleProps;\n productComparisonButton?: React.ReactNode;\n productComparisonPreview?: React.ReactNode;\n}\n\n/**\n * Represents the data which is required for the product comparison button to be rendered.\n */\nexport interface IProductComparisonButtonData {\n accountInformation?: AsyncResult;\n}\n\n/**\n * Extended props for the module including info about the product.\n */\nexport interface IProductComparisonButtonFullProps extends IProductComparisonButtonProps {\n product: ProductSearchResult | SimpleProduct;\n catalogId: number;\n}\n\n/**\n * Extended props for the module including info about the product.\n */\nexport interface IProductComparisonButtonState {\n canProductBeAddedToProductComparison: boolean;\n currentProductsCount: number;\n comparisonItemId: string;\n}\n\n/**\n * Represents the component which renders product comparison table.\n */\nexport class ProductComparisonButton extends React.PureComponent {\n private static _productComparisonPreview?: React.ReactNode;\n\n private readonly _className: string;\n\n private readonly _instanceId: string;\n\n private readonly _shouldUsePreview: boolean;\n\n private static _renderProductComparisonPreview(props: IProductComparisonButtonFullProps): React.ReactNode {\n if (!ProductComparisonButton._productComparisonPreview && ArrayExtensions.hasElements(props.slots.productComparisonPreview)) {\n ProductComparisonButton._productComparisonPreview = props.slots.productComparisonPreview[0];\n }\n\n return ProductComparisonButton._productComparisonPreview;\n }\n\n private static _renderProductComparisonButton(\n className: string,\n buttonText: string | undefined,\n title: string,\n onClickHandler?: () => void\n ): React.ReactNode {\n const isDisabled = ObjectExtensions.isNullOrUndefined(onClickHandler);\n let content: React.ReactNode;\n if (buttonText) {\n content = (\n <>\n
\n
{buttonText}
\n \n );\n }\n return (\n \n );\n }\n\n public constructor(props: IProductComparisonButtonFullProps) {\n super(props);\n\n this._className = 'ms-product-comparison-button';\n this._instanceId = `${this._className}-${this.props.id}-${Random.Guid.generateGuid()}`;\n\n this.state = this._getNewState();\n\n this._shouldUsePreview = !ProductComparisonButton._productComparisonPreview;\n ProductComparisonButton._renderProductComparisonPreview(this.props);\n }\n\n public componentDidMount(): void {\n ProductComparisonState.instance(this.props.context.request, this.props.data.accountInformation?.result).listModifiedEvent.subscribe(\n {\n instanceId: this._instanceId,\n\n /**\n * Updates the state in case the state for the particular product was changed.\n */\n handler: () => {\n this.setState(this._getNewState());\n }\n }\n );\n }\n\n public getSnapshotBeforeUpdate(previousProps: Readonly): void {\n if (previousProps.product.RecordId !== this.props.product.RecordId || previousProps.catalogId !== this.props.catalogId) {\n this.setState(this._getNewState());\n }\n }\n\n public componentWillUnmount(): void {\n ProductComparisonState.instance(\n this.props.context.request,\n this.props.data.accountInformation?.result\n ).listModifiedEvent.unsubscribe(this._instanceId);\n }\n\n public render(): React.ReactNode | null {\n const isConsentGiven = this.props.context.request.cookies.isConsentGiven();\n if (!isConsentGiven) {\n return null;\n }\n\n const viewProps: IProductComparisonButtonViewProps = {\n ...this.props,\n moduleProps: {\n moduleProps: this.props,\n className: this._className\n }\n };\n\n if (this._shouldUsePreview) {\n viewProps.productComparisonPreview = ProductComparisonButton._productComparisonPreview;\n }\n\n const buttonClassName = this.props.config.shouldDisplayText ? `${this._className}__button` : `${this._className}__icon`;\n\n if (!this.state.canProductBeAddedToProductComparison) {\n const buttonText = this.props.config.shouldDisplayText ? this.props.resources.removeFromComparisonButtonText : undefined;\n viewProps.productComparisonButton = ProductComparisonButton._renderProductComparisonButton(\n classnames(`${buttonClassName}__removing`, buttonClassName),\n buttonText,\n this.props.resources.removeFromComparisonButtonText,\n this._removeFromProductComparison\n );\n return this.props.renderView(viewProps);\n }\n\n const productsLimit = this._getProductsLimit();\n if (!ObjectExtensions.isNullOrUndefined(productsLimit) && productsLimit <= this.state.currentProductsCount) {\n const buttonText = this.props.config.shouldDisplayText ? this.props.resources.addToComparisonLimitReachedButtonText : undefined;\n viewProps.productComparisonButton = ProductComparisonButton._renderProductComparisonButton(\n buttonClassName,\n buttonText,\n this.props.resources.addToComparisonLimitReachedButtonText\n );\n return this.props.renderView(viewProps);\n }\n\n const buttonText = this.props.config.shouldDisplayText ? this.props.resources.addToComparisonButtonText : undefined;\n viewProps.productComparisonButton = ProductComparisonButton._renderProductComparisonButton(\n buttonClassName,\n buttonText,\n this.props.resources.addToComparisonButtonText,\n this._addToProductComparison\n );\n return this.props.renderView(viewProps);\n }\n\n private _getProductsLimit(): number | undefined | null {\n const viewport = isMobile({ variant: VariantType.Browser, context: this.props.context.request });\n if (viewport === 'xs' || viewport === 'sm') {\n return this.props.context.app.config.productComparisonMobileProductsLimit;\n }\n return this.props.context.app.config.productComparisonDesktopProductsLimit;\n }\n\n /**\n * Adds current product to a product comparison list.\n */\n private readonly _addToProductComparison: () => void = () => {\n const item = new ProductComparisonItem(this.props.product.RecordId, this.props.catalogId);\n ProductComparisonState.instance(this.props.context.request, this.props.data.accountInformation?.result).addItem(item);\n };\n\n /**\n * Removes current product from the product comparison list where it was added earlier.\n */\n private readonly _removeFromProductComparison: () => void = () => {\n ProductComparisonState.instance(this.props.context.request, this.props.data.accountInformation?.result).removeItemById(\n this.state.comparisonItemId\n );\n };\n\n private _getProdutComparisonDataByCatalogId(): ProductComparisonItem[] {\n const items = ProductComparisonState.instance(this.props.context.request, this.props.data.accountInformation?.result).items;\n const catalogId = getCatalogId(this.props.context.request);\n const productByCatalogId = items?.filter(product => product.catalogId === catalogId) ?? [];\n return productByCatalogId;\n }\n\n /**\n * Retrieves the state of the component based on the comparison data.\n * @returns State object for the component.\n */\n private readonly _getNewState: () => IProductComparisonButtonState = () => {\n const comparisonItemId = ProductComparisonItem.getItemId(this.props.product.RecordId, this.props.catalogId);\n const products = this._getProdutComparisonDataByCatalogId();\n return {\n comparisonItemId,\n canProductBeAddedToProductComparison: !ProductComparisonState.instance(\n this.props.context.request,\n this.props.data.accountInformation?.result\n ).hasItemById(comparisonItemId),\n currentProductsCount: products.length\n };\n };\n}\n\nexport default ProductComparisonButton;\n","/*--------------------------------------------------------------\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 { IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport {\r\n IReportReviewModalViewProps,\r\n IReviewCardViewProps,\r\n IReviewsListData,\r\n IReviewsListResources,\r\n IReviewsListState,\r\n IReviewsListViewProps\r\n} from '@msdyn365-commerce-modules/ratings-reviews';\r\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IReviewsListProps } from '../definition-extensions/reviews-list.ext.props.autogenerated';\r\n\r\n/**\r\n * Build Review Card.\r\n * @param props - Review Card ViewProps.\r\n * @param resources - Resource Strings.\r\n * @param isUserReview - User review flag.\r\n * @returns JSX Element.\r\n */\r\nconst buildReviewCard = (props: IReviewCardViewProps, resources: IReviewsListResources, isUserReview: boolean) => {\r\n return (\r\n \r\n \r\n
\r\n {props.rating}\r\n {props.date}\r\n
\r\n {props.name}\r\n
\r\n \r\n \r\n {props.reviewTitle}\r\n {props.reviewText}\r\n \r\n \r\n {props.responseName}\r\n {props.responseDate}\r\n {props.responseText}\r\n \r\n \r\n {isUserReview ? undefined :

\r\n {resources.wasReviewHelpfulText}\r\n

}\r\n {props.like}\r\n {props.dislike}\r\n {props.edit}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Render Product Image.\r\n * @param props - WriteReview ViewProps.\r\n * @returns JSX Element.\r\n */\r\nconst renderProductImage = (props: IReviewsListViewProps & IReviewsListProps): JSX.Element => {\r\n const primaryImageSource = props.data.product.result?.PrimaryImageUrl;\r\n const imageUrl = generateImageUrl(primaryImageSource, props.context.request.apiSettings);\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=111&h=111&m=6', w: 111, h: 111 },\r\n sm: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\r\n md: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\r\n lg: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\r\n xl: { q: 'w=130&h=130&m=6', w: 130, h: 130 }\r\n },\r\n lazyload: true,\r\n cropFocalRegion: true\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render Product Description.\r\n * @param props - WriteReview ViewProps.\r\n * @returns JSX Element.\r\n */\r\nconst renderProductDescription = (props: IReviewsListViewProps & IReviewsListProps): JSX.Element => {\r\n const product = props.data.product.result;\r\n return (\r\n \r\n
\r\n {renderProductImage(props)}\r\n
\r\n
\r\n
\r\n {product?.Name}\r\n
\r\n
\r\n {product?.Name}\r\n
\r\n
\r\n {product?.ItemId}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Build Review modal.\r\n * @param props - Review list ViewProps.\r\n * @returns JSX Element.\r\n */\r\nconst createReviewModal = (props: IReviewsListViewProps & IReviewsListProps): JSX.Element => {\r\n const { resources, moduleProps, reviewModal } = props;\r\n return (\r\n \r\n {reviewModal.modalHeader}\r\n \r\n \r\n \r\n {renderProductDescription(props)}\r\n \r\n
\r\n {resources.selectRatingLabel}\r\n
\r\n {reviewModal.rating}\r\n
\r\n
\r\n \r\n {resources.reviewTitleLabel}\r\n {reviewModal.titleInput}\r\n \r\n \r\n {resources.reviewTextLabel}\r\n {reviewModal.textInput}\r\n \r\n {reviewModal.privacyPolicyUrl}\r\n {reviewModal.error}\r\n
\r\n
\r\n \r\n {reviewModal.submitButton}\r\n {reviewModal.cancelButton}\r\n \r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Build Review modal.\r\n * @param props - Review modal ViewProps.\r\n * @param state - Review List State.\r\n * @returns JSX Element.\r\n */\r\nconst createReportModal = (props: IReportReviewModalViewProps, state: IReviewsListState): JSX.Element => {\r\n return (\r\n \r\n \r\n {state.reported ? props.headerSubmitted : props.header}\r\n \r\n \r\n {state.reported ? props.reportSubmittedMessage : [props.reportMessage, props.radioButtons, props.error]}\r\n \r\n \r\n {state.reported ? props.succesfulButton : [props.submitButton, props.cancelButton]}\r\n \r\n \r\n );\r\n};\r\n\r\n/**\r\n * ReviewsList view.\r\n * @param props - Ratings ReviewsList ViewProps.\r\n * @returns ReviewsList view module.\r\n */\r\nconst ReviewsListview: React.FC> = props => {\r\n const {\r\n filterByDropdown,\r\n heading,\r\n moduleProps,\r\n noReviewsMessage,\r\n noReviewsWithFilterMessage,\r\n pageControls,\r\n refineReviewsProps,\r\n reportReviewModal,\r\n reviewsListProps,\r\n reviewCards,\r\n sortByDropdown,\r\n state,\r\n userReview,\r\n resources\r\n } = props;\r\n\r\n if (!userReview && !ArrayExtensions.hasElements(reviewCards) && !state.isFilterApplied) {\r\n return (\r\n {noReviewsMessage}\r\n );\r\n }\r\n\r\n return (\r\n \r\n {heading}\r\n \r\n {sortByDropdown}\r\n {filterByDropdown}\r\n \r\n \r\n {userReview && buildReviewCard(userReview, resources, true)}\r\n {reviewCards.map(review => {\r\n return buildReviewCard(review, resources, false);\r\n })}\r\n \r\n { !ArrayExtensions.hasElements(reviewCards) && state.isFilterApplied && noReviewsWithFilterMessage}\r\n {pageControls}\r\n {createReviewModal(props)}\r\n {createReportModal(reportReviewModal, state)}\r\n \r\n );\r\n};\r\n\r\nexport default ReviewsListview;\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 { IGroup, IGroupDelivery, IGroups, IHeader, IList, IOrderHistoryViewProps, IOrderInformation, ISalesOrder } from '@msdyn365-commerce-modules/order-management';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport const OrderHistoryOrderInfomation: React.FC = ({\r\n orderInformationProps,\r\n salesId,\r\n receiptId,\r\n channelName,\r\n createdDate,\r\n count,\r\n amount\r\n // channelReferenceId\r\n}) => (\r\n \r\n {channelName}\r\n {salesId}\r\n {receiptId}\r\n {createdDate}\r\n {count}\r\n {amount}\r\n {/* {channelReferenceId} */}\r\n \r\n);\r\n\r\nexport const OrderHistoryGroupDelivery: React.FC = ({ deliveryProps, heading, count, processing, address, trackingInfo }) => (\r\n \r\n {heading}\r\n {count}\r\n {processing}\r\n {address}\r\n {trackingInfo}\r\n \r\n);\r\n\r\nexport const OrderHistoryGroup: React.FC = ({ groupProps, delivery, salesLinesProps, salesLines }) => (\r\n \r\n {salesLines && (\r\n \r\n {salesLines.map(salesLine => (\r\n \r\n {salesLine.salesLine}\r\n \r\n ))}\r\n \r\n )}\r\n \r\n);\r\n\r\nexport const OrderHistoryGroups: React.FC = ({ groupsProps, groups }) => (\r\n \r\n {groups.map((group, index) => (\r\n \r\n ))}\r\n \r\n);\r\n\r\nexport const OrderHistoryHeader: React.FC = ({ headerProps, heading, orderCountLabel, extraActions }) => (\r\n \r\n {heading}\r\n {orderCountLabel}\r\n {extraActions}\r\n \r\n);\r\n\r\nexport const OrderHistorySalesOder: React.FC = ({ salesOrderProps, orderInfomation, groups, orderDetailsLink, expandProductsButton }) => (\r\n \r\n {orderInfomation && }\r\n {groups && }\r\n {expandProductsButton}\r\n {orderDetailsLink}\r\n \r\n);\r\n\r\nexport const OrderHistoryList: React.FC = ({ listProps, salesOrders }) => (\r\n \r\n {salesOrders && salesOrders.map((salesOrder, index) => )}\r\n \r\n);\r\n\r\nconst OrderHistoryView: React.FC = ({\r\n orderHistoryProps,\r\n header,\r\n alert,\r\n loading,\r\n emptyMessage,\r\n backToShoppingLink,\r\n list,\r\n table,\r\n moreButton\r\n}) => (\r\n \r\n {header && }\r\n {loading}\r\n {alert && (\r\n <>\r\n {alert}\r\n {backToShoppingLink}\r\n \r\n )}\r\n {emptyMessage && (\r\n \r\n {emptyMessage}\r\n {backToShoppingLink}\r\n \r\n )}\r\n {list && }\r\n {table}\r\n {moreButton && moreButton}\r\n \r\n);\r\n\r\nexport default OrderHistoryView;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n IGroup,\n IGroupDelivery,\n IGroups,\n IHelp,\n IOrderDetailsViewProps,\n IOrderInformation,\n IOrderSummary,\n IPaymentMethods,\n ISalesLine\n} from '@msdyn365-commerce-modules/order-management';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport const OrderInfomation: React.FC = ({\n orderInformationProps,\n salesId,\n receiptId,\n createdDate,\n count,\n amount,\n channelReferenceId,\n channelName,\n channelAddress\n}) => (\n \n {channelName}\n {channelAddress}\n {salesId}\n {receiptId}\n {createdDate}\n {count}\n {amount}\n {channelReferenceId}\n \n);\n\nexport const SalesLine: React.FC = ({ salesLineProps, salesLine, buyAgainButton, errors }) => (\n \n {salesLine}\n {buyAgainButton}\n {errors}\n \n);\n\nexport const GroupDelivery: React.FC = ({ deliveryProps, heading, count }) => (\n \n {heading}\n {count}\n \n);\n\nexport const Group: React.FC = ({ groupProps, delivery, address, salesLinesProps, salesLines, isCashAndCarryTransaction }) => (\n \n {delivery && }\n \n {salesLines && (\n \n {salesLines.map(salesLine => (\n \n {salesLine.data.deliveryType === 'ship' && salesLine.data.shipment ? salesLine.trackingInfo : null}\n \n {!isCashAndCarryTransaction && salesLine.salesStatus}\n \n ))}\n \n )}\n {!delivery.showTimeslot && address}\n {delivery.showTimeslot && (\n \n {address}\n {delivery.pickupDateTimeslot}\n \n )}\n \n \n);\n\nexport const Groups: React.FC = ({ groupsProps, groups }) => (\n \n {groups.map((group, index) => (\n \n ))}\n \n);\n\nexport const OrderSummary: React.FC = ({\n orderSummaryProps,\n heading,\n subtotal,\n shipping,\n tax,\n totalAmount,\n earnedPoints\n}) => (\n \n {heading}\n {subtotal}\n {shipping}\n {tax}\n {totalAmount}\n {earnedPoints}\n \n);\n\nexport const Payment: React.FC = ({ paymentMethodsProps, title, methods }) => (\n \n {title}\n {methods}\n \n);\n\nexport const Help: React.FC = ({ helpProps, needHelpLabel, helpLineNumberLabel, contactNumber }) => (\n \n {needHelpLabel}\n {helpLineNumberLabel}\n {contactNumber}\n \n);\n\nconst OrderDetailsView: React.FC = ({\n moduleProps,\n viewModes,\n tableViewActions,\n table,\n placedBy,\n heading,\n alert,\n loading,\n orderInfomation,\n orderSummary,\n payment,\n help,\n groups\n}) => {\n return (\n \n {placedBy}\n {heading}\n {alert}\n {loading}\n {orderInfomation && }\n {tableViewActions}\n {viewModes}\n {table}\n {groups && }\n \n {orderSummary && }\n {payment && }\n \n {help && }\n \n );\n};\n\nexport default OrderDetailsView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IProductComparisonButtonViewProps } from './product-comparison-button';\n\n/**\n * Represents product comparison button view.\n * @param props - View props for product comparison button.\n * @returns Functional component of product comparison button.\n */\nexport const ProductComparisonButtonViewFunctionalComponent: React.FC = props => {\n const { productComparisonButton, productComparisonPreview } = props;\n\n return (\n \n {productComparisonButton}\n {productComparisonPreview}\n \n );\n};\n\nexport default ProductComparisonButtonViewFunctionalComponent;\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { ICheckoutSectionContainerItem, ICheckoutSectionContainerViewProps } from '@msdyn365-commerce-modules/checkout/src/modules/checkout-section-container/./checkout-section-container';\r\n\r\nconst ItemComponent: React.FC = ({ loading, itemProps, item }) => (\r\n <>\r\n {loading}\r\n \r\n {item}\r\n \r\n \r\n);\r\n\r\nconst CheckoutSectionContainerView: React.FC = ({ checkoutPlainContainerProps, items }) => {\r\n return(\r\n \r\n {items.map(item => {\r\n // remove the hidden classname that is given in the checkout-section-container\r\n item.itemProps = { ...item.itemProps,\r\n className: 'ms-checkout-section-container__item'\r\n }\r\n return \r\n })}\r\n \r\n )\r\n};\r\n\r\nexport default CheckoutSectionContainerView;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IFooterViewProps } from '@msdyn365-commerce-modules/footer';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\n/**\n *\n * FooterItemView component.\n * @extends {React.PureComponent}\n */\nexport class FooterItemView extends React.PureComponent {\n public render(): JSX.Element | null {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Cannot change the prop names as props are from business logic.\n const { FooterItem } = this.props;\n return {this._renderElement(this.props)};\n }\n\n private _renderElement(props: IFooterViewProps): React.ReactNode | null {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Cannot change the prop names as props are from business logic.\n const { heading, HeadingContainer, Link, linkText, image, text, EditableLink } = props;\n if (heading) {\n return (\n \n {' '}\n \n );\n } else if (Link && image) {\n return (\n \n {linkText}\n {image}\n \n );\n } else if (Link) {\n return EditableLink;\n }\n return (\n <>\n {text}\n {image}\n \n );\n }\n}\n\nexport default FooterItemView;\n","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IEveMap contentModule Interface Properties\r\n * THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\n\r\nexport const enum searchRadiusUnit {\r\n mi = 'mi',\r\n km = 'km'\r\n}\r\n\r\nexport interface IEveMapConfig extends Msdyn365.IModuleConfig {\r\n heading?: IHeadingData;\r\n pushpinOptions?: IPushpinOptionsData;\r\n className?: string;\r\n clientRender?: boolean;\r\n useChannelMfr?: boolean;\r\n autoSuggestionEnabled?: boolean;\r\n autoSuggestOptions?: IAutoSuggestOptionsData;\r\n searchRadiusUnit?: searchRadiusUnit;\r\n lookupRadius: number;\r\n pageLength: number;\r\n defaultLatitudeValue: number;\r\n defaultLongitudeValue: number;\r\n}\r\n\r\nexport interface IEveMapResources {\r\n searchPlaceholderText: string;\r\n searchButtonAriaLabel: string;\r\n searchInputAriaLabel: string;\r\n seeAllStoresText: string;\r\n milesShortText: string;\r\n kilometersShortText: string;\r\n contactText: string;\r\n emptyLocationsText: string;\r\n dealerCountMessage: string;\r\n dealerAllCountMessage: string;\r\n dealerCountMessageInKm: string;\r\n dealerDetailsText: string;\r\n dealerDetailsManufacturerCodeText: string;\r\n dealerDetailsLaborRateText: string;\r\n dealerDetailsDescriptionText: string;\r\n dealerDetailsNotesText: string;\r\n dealerDetailsContractCodeText: string;\r\n paginationPrev: string;\r\n paginationNext: string;\r\n}\r\n\r\nexport const enum HeadingTag {\r\n h1 = 'h1',\r\n h2 = 'h2',\r\n h3 = 'h3',\r\n h4 = 'h4',\r\n h5 = 'h5',\r\n h6 = 'h6'\r\n}\r\n\r\nexport interface IHeadingData {\r\n text: string;\r\n tag?: HeadingTag;\r\n}\r\n\r\nexport interface IPushpinOptionsData {\r\n size?: number;\r\n color?: string;\r\n selectionColor?: string;\r\n showIndex?: boolean;\r\n}\r\n\r\nexport interface IAutoSuggestOptionsData {\r\n maxResults?: number;\r\n}\r\n\r\nexport interface IEveMapProps extends Msdyn365.IModule {\r\n resources: IEveMapResources;\r\n config: IEveMapConfig;\r\n}\r\n","// import * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nimport { IEveMapResources } from '../eve-map.props.autogenerated';\r\n\r\nexport interface IDealerSelectorEmptyMessageProps {\r\n resources: IEveMapResources;\r\n}\r\nexport const DealerSelectorEmptyMessage: React.FC = ({ resources }) => (\r\n
\r\n

{resources.emptyLocationsText}

\r\n
\r\n);\r\n\r\nexport const DealerSelectorWaiting: React.FC = () =>
;\r\n\r\nexport interface IDealerSelectorFoundLocationsMessage {\r\n resources: IEveMapResources;\r\n locations?: IFullOrgUnitAvailability[];\r\n searchRadius: number;\r\n preferredDistanceUnit: string;\r\n // isSeeAllStore: boolean;\r\n}\r\nexport const DealerSelectorFoundLocationsMessage: React.FC = ({\r\n locations,\r\n searchRadius,\r\n resources,\r\n preferredDistanceUnit\r\n // isSeeAllStore\r\n}) => {\r\n if (locations) {\r\n const dealerCountMessage =\r\n preferredDistanceUnit === resources.milesShortText ? resources.dealerCountMessage : resources.dealerCountMessageInKm;\r\n return (\r\n
\r\n {/* {isSeeAllStore\r\n ? resources.storeAllCountMessage.replace('{count}', locations.length.toString())\r\n : storeCountMessage.replace('{count}', locations.length.toString()).replace('{radius}', searchRadius.toString())} */}\r\n {dealerCountMessage.replace('{count}', locations.length.toString()).replace('{radius}', searchRadius.toString())}\r\n
\r\n );\r\n }\r\n\r\n return null;\r\n};\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\n// import { OrgUnitContact } from '@msdyn365-commerce/retail-proxy';\r\n// import { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport * as React from 'react';\r\nimport { IDealerLocation } from '../../eve-map';\r\n\r\n/**\r\n * Store Locator line item resources.\r\n */\r\nexport interface IDealerLocatorLocationLineItemResources {\r\n contactInfoHeader: string;\r\n dealerDetailsHeader: string;\r\n dealerDetailsManufacturerCodeText: string;\r\n dealerDetailsLaborRateText: string;\r\n dealerDetailsDescriptionText: string;\r\n dealerDetailsNotesText: string;\r\n dealerDetailsContractCodeText: string;\r\n}\r\n\r\n/**\r\n * Store Locator line item props.\r\n */\r\nexport interface IDealerLocatorLocationLineItemProps {\r\n location: IDealerLocation;\r\n resources: IDealerLocatorLocationLineItemResources;\r\n index: string;\r\n preferredDistanceUnit: string;\r\n}\r\n\r\n/**\r\n * Function to render store hours.\r\n * @param storeHours - Store Hours object.\r\n * @param location - Store Unit.\r\n * @param resources - Resources.\r\n * @returns - Jsx element.\r\n */\r\nconst renderDealerDetails = (location: IDealerLocation, resources: IDealerLocatorLocationLineItemResources): JSX.Element | null => {\r\n const {\r\n dealerDetailsDescriptionText,\r\n // dealerDetailsLaborRateText,\r\n // dealerDetailsManufacturerCodeText\r\n dealerDetailsContractCodeText\r\n } = resources;\r\n\r\n // console.log('Rendering Details');\r\n if (location.ContractList) {\r\n // console.log(location);\r\n return (\r\n
\r\n {location.ContractList.length > 0\r\n ? location.ContractList.map(mfrCode => {\r\n return (\r\n <>\r\n
\r\n
\r\n

\r\n {`${mfrCode.ManufacturerCode} - ${mfrCode.ManufacturerName}`}\r\n

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

\r\n \r\n {dealerDetailsContractCodeText}\r\n \r\n {mfrCode.ContractCode}\r\n

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

\r\n \r\n {dealerDetailsDescriptionText}\r\n \r\n {mfrCode.ContractDescription}\r\n

\r\n
\r\n
\r\n \r\n );\r\n })\r\n : null}\r\n
\r\n );\r\n }\r\n return
;\r\n};\r\n\r\n/**\r\n * Function to retrun distance measure unit.\r\n * @param distance - Store location within radius.\r\n * @param preferredDistanceUnit - Unit configuration.\r\n * @param isLocationDisabled - Flag to check user location.\r\n * @returns - Unit of distance.\r\n */\r\nexport const buildDistanceString = (\r\n distance: number | undefined,\r\n preferredDistanceUnit: string,\r\n isLocationDisabled?: boolean\r\n): string | undefined => {\r\n if (distance === undefined || isLocationDisabled) {\r\n return undefined;\r\n } else if (distance < 1) {\r\n return `(<1 ${preferredDistanceUnit})`;\r\n }\r\n return `(${Math.floor(distance)} ${preferredDistanceUnit})`;\r\n};\r\n\r\n/**\r\n * Function to store contact.\r\n * @param contacts - Store location within radius.\r\n * @returns - Return primary contact number of store.\r\n */\r\n// const 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 === 1 && !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 * Renders store location line items.\r\n * @param props - Store location line items props.\r\n * @returns - HTML.\r\n */\r\nconst dealerLocatorLocationLineItem: React.FC = (props: IDealerLocatorLocationLineItemProps) => {\r\n const { location, resources, index } = props;\r\n\r\n // console.log(location);\r\n\r\n const storeName: string | undefined = location.OrgUnitName;\r\n const distanceAsString: string | undefined = buildDistanceString(location.Distance, props.preferredDistanceUnit);\r\n const storeAddress: string | undefined = location.Address;\r\n // TODO: Need to fix the phone number portion when we actually have a phone number to use\r\n // const phoneNumber: string | undefined = extractPhoneNumber(location.PhoneNumber);\r\n\r\n const channelId: number | undefined = location.ChannelId;\r\n\r\n return (\r\n
\r\n
\r\n {/* {(shouldShowIndex || storeLocatorView) && {index}} */}\r\n {{index}}\r\n {storeName}\r\n {distanceAsString ? {distanceAsString} : false}\r\n
\r\n
\r\n
\r\n {/*

{resources.contactInfoHeader}

*/}\r\n {storeAddress && (\r\n
\r\n \r\n {storeAddress}\r\n
\r\n )}\r\n {/* TODO: Fix the phone number section when/if there is phone number data to display */}\r\n {/* {phoneNumber && (\r\n
\r\n \r\n {phoneNumber}\r\n
\r\n )} */}\r\n
\r\n
\r\n

{resources.dealerDetailsHeader}

\r\n {renderDealerDetails(location, resources)}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Store location line item component.\r\n */\r\nexport const DealerLocatorLocationLineItemComponent = dealerLocatorLocationLineItem as (\r\n props: IDealerLocatorLocationLineItemProps\r\n) => JSX.Element;\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\n/* eslint-disable no-duplicate-imports */\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport classnames from 'classnames';\r\nimport { observable, reaction } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport { IEveMapResources } from '../eve-map.props.autogenerated';\r\nimport { IDealerLocatorLocationLineItemResources, DealerLocatorLocationLineItemComponent } from './eve-map-location-line-item';\r\nimport { IDealerLocations, IDealerLocation } from '../eve-map';\r\n\r\n/**\r\n * Store selector location lines props interface.\r\n */\r\nexport interface IStoreSelectorLocationLinesProps {\r\n locations?: IDealerLocations[];\r\n resources: IEveMapResources;\r\n preferredDistanceUnit?: string;\r\n selectedStoreLocationId?: string;\r\n displayList?: boolean;\r\n onClick: (locationId: string | undefined) => void;\r\n}\r\n\r\n/**\r\n * Displays all the location line items, or null if none exists.\r\n */\r\n@observer\r\nexport class DealerLocatorLocationLines extends React.PureComponent {\r\n @observable private _stores: IDealerLocations[] | undefined;\r\n\r\n private readonly selectedLocationRef: React.RefObject;\r\n\r\n private storeCounter: number;\r\n\r\n public constructor(props: IStoreSelectorLocationLinesProps) {\r\n super(props);\r\n this.selectedLocationRef = React.createRef();\r\n this.storeCounter = 0;\r\n }\r\n\r\n public componentDidUpdate(previousProps: IStoreSelectorLocationLinesProps): void {\r\n if (this.props.selectedStoreLocationId !== previousProps.selectedStoreLocationId) {\r\n this._scrollIntoView();\r\n }\r\n }\r\n\r\n public componentDidMount(): void {\r\n if (this.props.locations) {\r\n this._stores = [...this.props.locations];\r\n }\r\n\r\n reaction(\r\n () => this.props.locations,\r\n () => {\r\n if (this.props.locations) {\r\n this._stores = [...this.props.locations];\r\n }\r\n }\r\n );\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n if (!ArrayExtensions.hasElements(this._stores)) {\r\n return null;\r\n }\r\n this.storeCounter = 0;\r\n\r\n return (\r\n
\r\n {this._stores.map((store, index) => {\r\n return this._renderStoreLocation(store, index);\r\n })}\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * On click Handler function.\r\n * @param orgUnitLocation -OrgUnit location.\r\n * @returns Click action on orgUnit Location.\r\n */\r\n private readonly onClickHandler = (orgUnitLocation: IDealerLocation | undefined) => () => {\r\n this.props.onClick(orgUnitLocation?.OrgUnitNumber);\r\n };\r\n\r\n private _renderStoreLocation(store: IDealerLocations, index: number): JSX.Element | undefined {\r\n const orgUnitLocation = store?.OrgUnitLocation;\r\n const selectedStoreLocationId = this.props.selectedStoreLocationId;\r\n const defaultAriaSetsize = 0;\r\n if (orgUnitLocation) {\r\n ++this.storeCounter;\r\n return (\r\n \r\n \r\n
\r\n );\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Scroll into view.\r\n */\r\n private readonly _scrollIntoView = () => {\r\n const selectedLocationDiv = this.selectedLocationRef.current;\r\n const parent = selectedLocationDiv?.parentElement;\r\n if (selectedLocationDiv && parent) {\r\n if (parent.scrollTop > selectedLocationDiv.offsetTop) {\r\n parent.scrollTop = selectedLocationDiv.offsetTop;\r\n } else if (selectedLocationDiv.offsetTop + selectedLocationDiv.clientHeight > parent.scrollTop + parent.clientHeight) {\r\n parent.scrollTop = selectedLocationDiv.offsetTop + selectedLocationDiv.clientHeight - parent.clientHeight;\r\n } else {\r\n parent.scrollTop = 0;\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Is current location.\r\n * @param location - Org unit location.\r\n * @returns The current location.\r\n */\r\n // private readonly _isCurrentLocation = (location: OrgUnitLocation | undefined): boolean =>\r\n // (this.props.alreadySelectedLocation && location && this.props.alreadySelectedLocation.OrgUnitNumber === location.OrgUnitNumber) ||\r\n // false;\r\n\r\n /**\r\n * Map resources.\r\n * @param resources - Store resoureces.\r\n * @returns Resources.\r\n */\r\n private readonly _mapResources = (resources: IEveMapResources): IDealerLocatorLocationLineItemResources => {\r\n return {\r\n contactInfoHeader: resources.contactText,\r\n dealerDetailsHeader: resources.dealerDetailsText,\r\n dealerDetailsManufacturerCodeText: resources.dealerDetailsManufacturerCodeText,\r\n dealerDetailsLaborRateText: resources.dealerDetailsLaborRateText,\r\n dealerDetailsDescriptionText: resources.dealerDetailsDescriptionText,\r\n dealerDetailsNotesText: resources.dealerDetailsNotesText,\r\n dealerDetailsContractCodeText: resources.dealerDetailsContractCodeText\r\n };\r\n };\r\n}\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { KeyCodes } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\n/**\r\n * Store Selector Search Form Props interface.\r\n */\r\nexport interface IDealerLocatorSearchFormProps {\r\n resources: {\r\n searchInputAriaLabel: string;\r\n searchButtonAriaLabel: string;\r\n searchPlaceholderText: string;\r\n seeAllStoresText: string;\r\n };\r\n id: string;\r\n value: string;\r\n performSearch(searchTerm: string): Promise;\r\n searchTermChanged(searchTerm: string): Promise;\r\n}\r\n\r\n/**\r\n * Simple search form consisting of search text and a search button.\r\n */\r\nexport class DealerLocatorSearchForm extends React.PureComponent {\r\n private readonly searchBoxRef: React.RefObject = React.createRef();\r\n\r\n private readonly storeSearchAttributes: Msdyn365.IDictionary | undefined;\r\n\r\n private previousValue: string = '';\r\n\r\n private isSearchResultOpened: boolean = false;\r\n\r\n public constructor(props: IDealerLocatorSearchFormProps) {\r\n super(props);\r\n this.state = { value: '' };\r\n }\r\n\r\n public render(): JSX.Element {\r\n const {\r\n resources: { searchButtonAriaLabel, searchPlaceholderText },\r\n id,\r\n value\r\n } = this.props;\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n /**\r\n * Handles the key press on the input box.\r\n * @param event - Event object.\r\n */\r\n private readonly _handleInputKeyPress = (event: React.KeyboardEvent): void => {\r\n // When the user navigates through the up and down arrow on the result returned by the auto suggest and press enter.\r\n // At that time, two requests were made to fetch the store details due to which incorrect result is shown and causes flickering.\r\n // In order to avoid that. Checking if the search result is open or not.\r\n if (event.keyCode === KeyCodes.ArrowUp || event.keyCode === KeyCodes.ArrowDown) {\r\n const activeDescedantValue = (event.target as HTMLInputElement).getAttribute('aria-activedescendant');\r\n if (activeDescedantValue) {\r\n if (this.previousValue === '') {\r\n this.previousValue = activeDescedantValue;\r\n this.isSearchResultOpened = true;\r\n return;\r\n }\r\n\r\n if (activeDescedantValue !== this.previousValue) {\r\n this.previousValue = activeDescedantValue;\r\n this.isSearchResultOpened = true;\r\n } else {\r\n this.isSearchResultOpened = false;\r\n }\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Method called on search text changed.\r\n * @param event - Input value.\r\n */\r\n private readonly _searchTextChanged = async (event: React.ChangeEvent): Promise => {\r\n const inputValue: string = event.target.value;\r\n\r\n await this.props.searchTermChanged(inputValue);\r\n };\r\n\r\n /**\r\n * Method called on search submit.\r\n * @param event - Input value.\r\n */\r\n private readonly _onSubmit = async (event: React.SyntheticEvent): Promise => {\r\n event.preventDefault(); // Prevents form submission\r\n this.searchBoxRef.current?.blur();\r\n if (!this.isSearchResultOpened) {\r\n await this.props.performSearch(this.props.value);\r\n }\r\n this.isSearchResultOpened = false;\r\n };\r\n}\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/// \r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport {\r\n ArrayExtensions,\r\n // getOrgUnitLocationsByArea,\r\n // GetOrgUnitLocationsByAreaInput,\r\n IFullOrgUnitAvailability\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { /*IStoreInfo,*/ IStoreSelectionStateContext } from '@msdyn365-commerce-modules/bopis-utilities';\r\nimport { OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\r\nimport { IModuleProps, NodeTag, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport classname from 'classnames';\r\nimport { observable, reaction, when } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport * as _ from 'lodash';\r\n\r\nimport { IEveMapData } from './eve-map.data';\r\nimport { IEveMapProps, IPushpinOptionsData, searchRadiusUnit as SearchRadiusUnit } from './eve-map.props.autogenerated';\r\n// import getDealerDetails, { GetDealerDetailsInput } from '../../actions/get-dealer-details.action';\r\nimport getDealerLocations, { GetDealerLocationsInput } from '../../actions/get-dealer-locations.action';\r\nimport { IDealerEntity } from '../../actions/DataServiceEntities.g';\r\nimport { getDealerDetailsAsync /*, getDealerLocationsAsync*/ } from '../../actions/DataActionExtension.g';\r\nimport {\r\n DealerSelectorWaiting,\r\n DealerSelectorEmptyMessage,\r\n DealerSelectorFoundLocationsMessage,\r\n DealerLocatorLocationLines,\r\n DealerLocatorSearchForm\r\n} from './components';\r\n\r\n/**\r\n * Header Interface.\r\n */\r\nexport interface IHeader {\r\n headerProps: INodeProps;\r\n heading: React.ReactNode;\r\n}\r\n\r\n/**\r\n * MapViewProps Interface.\r\n */\r\nexport interface IMapViewProps extends IEveMapProps {\r\n ModuleProps: IModuleProps;\r\n Header: IHeader;\r\n MapProps: INodeProps;\r\n Map: Microsoft.Maps.Map | undefined;\r\n locationsMessage?: React.ReactNode;\r\n search?: React.ReactNode;\r\n spinner?: React.ReactNode;\r\n locationsList?: React.ReactNode;\r\n noLocationsMessage?: React.ReactNode;\r\n dealerResultContainerProps?: INodeProps;\r\n state: IEveMapState;\r\n}\r\n\r\n/**\r\n * EveMap State Interface.\r\n */\r\nexport interface IEveMapState {\r\n searchTerm?: string;\r\n isSearchInProgress: boolean;\r\n distanceResults: IDistanceResults;\r\n mapSessionId: string | undefined;\r\n dealerLocations: IFullOrgUnitAvailability[] | undefined;\r\n newDealerLocations: IDealerLocations[] | undefined;\r\n}\r\n\r\nexport interface ICoordinates {\r\n latitude: number;\r\n longitude: number;\r\n}\r\n\r\nexport interface IDistanceMatrixResult {\r\n destinationIndex: number;\r\n originIndex: number;\r\n totalWalkDuration: number;\r\n // travelDistance arrives in kilometers\r\n travelDistance: number;\r\n travelDuration: number;\r\n}\r\n\r\nexport interface IDistanceResults {\r\n originCoords: ICoordinates;\r\n resultsCoords: IDistanceMatrixResult[];\r\n}\r\n\r\nexport interface IDealerLocation {\r\n ChannelId?: number;\r\n Latitude?: number;\r\n Longitude?: number;\r\n OrgUnitName?: string;\r\n OrgUnitNumber?: string;\r\n Address?: string;\r\n PhoneNumber?: string;\r\n Distance?: number;\r\n ContractCode?: string;\r\n ContractCompensationRate?: number;\r\n ContractDescription?: string;\r\n ContractLaborRate?: number;\r\n ContractListedUnlisted?: boolean;\r\n ContractNotes?: string;\r\n ContractStatus?: boolean;\r\n ManufacturerCode?: string;\r\n ContractList?: IDealerEntity[];\r\n RecId?: number;\r\n}\r\n\r\nexport interface IDealerLocations {\r\n OrgUnitAvailability?: {\r\n OrgUnitLocation?: IDealerLocation;\r\n };\r\n OrgUnitLocation?: IDealerLocation;\r\n}\r\n\r\n// xoxo - does this actually need to be here?\r\nexport interface IEveMapPropsExtended extends IEveMapProps {\r\n mapData: any;\r\n}\r\n\r\n/**\r\n *\r\n * Map component.\r\n * @extends {React.Component>}\r\n */\r\n@observer\r\nclass Map extends React.PureComponent {\r\n @observable public map: Microsoft.Maps.Map | undefined;\r\n\r\n @observable public selectedDealer: IDealerEntity[] | undefined;\r\n\r\n private autoSuggestManager: Microsoft.Maps.AutosuggestManager | undefined;\r\n\r\n private readonly mapRef: React.RefObject = React.createRef();\r\n\r\n private readonly kmToMiValue: number = 1.609;\r\n\r\n private readonly defaultLookUpRadius: number = 200;\r\n\r\n public constructor(props: IEveMapPropsExtended) {\r\n super(props);\r\n this.state = {\r\n searchTerm: '',\r\n isSearchInProgress: true,\r\n distanceResults: { originCoords: { latitude: 0, longitude: 0 }, resultsCoords: [] },\r\n dealerLocations: [],\r\n newDealerLocations: [],\r\n mapSessionId: undefined\r\n };\r\n }\r\n\r\n public componentDidMount(): void {\r\n const {\r\n context: {\r\n telemetry,\r\n actionContext: {\r\n requestContext: { channel }\r\n }\r\n },\r\n config: { autoSuggestionEnabled: isAutoSuggestionEnabled }\r\n // data: {\r\n // storeLocations: { result: storeLocations }\r\n // }\r\n } = this.props;\r\n\r\n // // Adding Timeout to make sure it loads the data based upon the preferred store.\r\n setTimeout(() => {\r\n this._getAndUpdateStoreLocation();\r\n }, 0);\r\n\r\n reaction(\r\n () => this.props.data.storeSelectorStateManager.result?.context?.id,\r\n async () => {\r\n const context = this.props.data.storeSelectorStateManager.result?.context;\r\n if (!context || context.id === this.props.id) {\r\n await this._searchTermChanged('');\r\n this._getAndUpdateStoreLocation();\r\n this._updateMap();\r\n }\r\n }\r\n );\r\n\r\n // if (storeLocations) {\r\n // console.log(storeLocations);\r\n // this.setState({ newDealerLocations: [...storeLocations] });\r\n // // if (this.state.newDealerLocations) {\r\n // void this._setOrgUnitStoreInformation(storeLocations);\r\n // // }\r\n // }\r\n\r\n this.map?.setOptions({ navigationBarMode: Microsoft.Maps.NavigationBarMode.minified });\r\n if (channel && !channel.BingMapsApiKey) {\r\n telemetry.error('BingMapsApiKey is missing.');\r\n return;\r\n }\r\n\r\n if (channel && !channel.BingMapsEnabled) {\r\n telemetry.error('Map is disabled from HQ.');\r\n return;\r\n }\r\n if (this.props.data.storeSelectorStateManager.result?.isMapApiLoaded) {\r\n this._initMap();\r\n this._updateMap();\r\n }\r\n\r\n when(\r\n () => !!this.props.data.storeSelectorStateManager.result?.setMapModuleLoaded,\r\n () => {\r\n this.props.data.storeSelectorStateManager.result?.setMapModuleLoaded(true);\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.props.data.storeSelectorStateManager.result?.loadMapApi,\r\n () => {\r\n this.props.data.storeSelectorStateManager.result?.loadMapApi({\r\n key: channel?.BingMapsApiKey,\r\n lang: this.props.context.actionContext.requestContext.locale,\r\n market: this.props.context?.actionContext?.requestContext?.channel?.ChannelCountryRegionISOCode\r\n });\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.props.data.storeSelectorStateManager.result?.isMapApiLoaded,\r\n () => {\r\n this._initMap();\r\n }\r\n );\r\n\r\n reaction(\r\n () => {\r\n return [\r\n this.props.data.storeSelectorStateManager.result?.context?.orgUnitStoreInformation,\r\n this.props.data.storeSelectorStateManager.result?.selectedStoreLocationId,\r\n this.map\r\n ];\r\n },\r\n () => {\r\n this._updateMap();\r\n }\r\n );\r\n\r\n if (isAutoSuggestionEnabled) {\r\n when(\r\n () => {\r\n const isMapApiLoaded = !!this.props.data.storeSelectorStateManager.result?.isMapApiLoaded;\r\n const isDialogOpen = !!this.props.data.storeSelectorStateManager.result?.isDialogOpen;\r\n const isSameContext = this.props.data.storeSelectorStateManager.result?.context?.id === this.props.id;\r\n return isMapApiLoaded && isDialogOpen && isSameContext;\r\n },\r\n () => {\r\n setTimeout(async () => {\r\n await this._attachMapAutoSuggest();\r\n }, 0);\r\n }\r\n );\r\n }\r\n }\r\n\r\n public shouldComponentUpdate(): boolean {\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n const context = storeSelectorStateManager ? storeSelectorStateManager.context : undefined;\r\n if (context && context.id === this.props.id) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const {\r\n config: { heading, className, lookupRadius, searchRadiusUnit },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n },\r\n resources\r\n } = this.props;\r\n const { newDealerLocations } = this.state;\r\n const shouldDisplayMap = storeSelectorStateManager?.listMapViewState.displayMap;\r\n const preferredDistanceUnit = searchRadiusUnit === SearchRadiusUnit.km ? resources.kilometersShortText : resources.milesShortText;\r\n const shouldDisplayList = storeSelectorStateManager?.listMapViewState?.displayList;\r\n const selectedStoreLocationId = storeSelectorStateManager?.selectedStoreLocationId;\r\n\r\n // let dealerLocationList: IDealerLocations[] = newDealerLocations || [];\r\n // const unsortedDealerList = [...dealerLocationList];\r\n // dealerLocationList = this._sortStores(unsortedDealerList);\r\n // console.log('sorted');\r\n // console.log(dealerLocationList);\r\n // const paginatedLocationsList = newDealerLocations?.slice(0, this.props.config.pageLength);\r\n\r\n // const pagination = (\r\n // );\r\n\r\n const viewProps: IMapViewProps = {\r\n ...this.props,\r\n state: this.state,\r\n ModuleProps: {\r\n tag: 'div',\r\n moduleProps: this.props,\r\n className: classname('ms-map', { show: shouldDisplayMap }, className)\r\n },\r\n Header: {\r\n headerProps: { className: 'ms-map__header' },\r\n heading: heading?.text && (\r\n \r\n )\r\n },\r\n dealerResultContainerProps: {\r\n tag: 'div' as NodeTag,\r\n className: 'ms-store-select__dealer_container'\r\n },\r\n spinner: ,\r\n noLocationsMessage: ,\r\n locationsMessage: (\r\n \r\n ),\r\n locationsList:\r\n // ArrayExtensions.hasElements(dealerLocationList) && dealerLocationList[0].OrgUnitLocation ? (\r\n // \r\n ArrayExtensions.hasElements(newDealerLocations) && newDealerLocations[0].OrgUnitLocation ? (\r\n \r\n ) : (\r\n undefined\r\n ),\r\n search: (\r\n \r\n ),\r\n MapProps: {\r\n tag: 'div',\r\n className: 'ms-map__body',\r\n ref: this.mapRef\r\n },\r\n Map: this.map\r\n };\r\n if (newDealerLocations) {\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n // if (this.state.dealerLocations) {\r\n // return this.props.renderView(viewProps) as React.ReactElement;\r\n // }\r\n return <>;\r\n }\r\n\r\n /**\r\n * Initialize Map AutoSuggest.\r\n */\r\n private readonly _attachMapAutoSuggest = async (): Promise => {\r\n const {\r\n config: { autoSuggestOptions },\r\n context: {\r\n telemetry,\r\n actionContext: {\r\n requestContext: { channel }\r\n }\r\n },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n if (storeSelectorStateManager?.isMapApiLoaded && !this.autoSuggestManager) {\r\n Microsoft.Maps.loadModule('Microsoft.Maps.AutoSuggest', {\r\n /**\r\n * Callback for the autosuggest API.\r\n */\r\n callback: () => {\r\n const options = { ...autoSuggestOptions, countryCode: channel?.ChannelCountryRegionISOCode };\r\n this.autoSuggestManager = new Microsoft.Maps.AutosuggestManager(options);\r\n this.autoSuggestManager.attachAutosuggest(\r\n `#ms-store-select__search-box_${this.props.id}`,\r\n `#ms-store-select__search-box-container_${this.props.id}`,\r\n this._onSuggestionSelected\r\n );\r\n },\r\n\r\n /**\r\n * Error call back for autosuggest API.\r\n */\r\n errorCallback: () => {\r\n if (telemetry) {\r\n telemetry.debug('Unable to attach map auto suggest.');\r\n }\r\n },\r\n credentials: channel?.BingMapsApiKey\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * On Selecting Location Suggestion.\r\n * @param result - Map Suggestions List.\r\n */\r\n private readonly _onSuggestionSelected = async (result: Microsoft.Maps.ISuggestionResult): Promise => {\r\n const context = this.props.data.storeSelectorStateManager.result?.context;\r\n if (context && context.id === this.props.id) {\r\n await this._searchTermChanged(result.formattedSuggestion);\r\n await this._performSearch(result.formattedSuggestion);\r\n }\r\n };\r\n\r\n /**\r\n * Method to be called updating the store location.\r\n * @param shouldShowAllStores - Flag to show all stores.\r\n */\r\n private readonly _getAndUpdateStoreLocation = (shouldShowAllStores?: boolean): void => {\r\n // const {\r\n // // config: { style },\r\n // data: {\r\n // storeSelectorStateManager: { result: storeSelectorStateManager }\r\n // }\r\n // } = this.props;\r\n\r\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\r\n this.setState({ isSearchInProgress: true });\r\n if (navigator?.geolocation) {\r\n navigator.geolocation.getCurrentPosition(\r\n async position => {\r\n // eslint-disable-next-line react/no-unused-state -- This state is used in the views.\r\n this.setState({ isSearchInProgress: true });\r\n await this._updateLocations(position.coords.latitude, position.coords.longitude);\r\n\r\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\r\n this.setState({ isSearchInProgress: false });\r\n },\r\n async error => {\r\n // If the location setting is turned off\r\n if (error.PERMISSION_DENIED) {\r\n await this._searchTermChanged('');\r\n await this._updateLocations(0, 0, 0);\r\n }\r\n\r\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\r\n this.setState({ isSearchInProgress: false });\r\n },\r\n { timeout: 5000 }\r\n );\r\n } else {\r\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\r\n this.setState({ isSearchInProgress: false });\r\n }\r\n };\r\n\r\n /**\r\n * Method to be called on heading change.\r\n * @param event -Content Edit Event.\r\n */\r\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent): void => {\r\n this.props.config.heading!.text = event.target.value;\r\n };\r\n\r\n /**\r\n * Initialize the map.\r\n */\r\n private readonly _initMap = () => {\r\n const {\r\n context: {\r\n actionContext: {\r\n requestContext: { channel }\r\n }\r\n },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n if (storeSelectorStateManager?.isMapApiLoaded) {\r\n this.map = new Microsoft.Maps.Map(this.mapRef.current as HTMLElement, {\r\n credentials: channel?.BingMapsApiKey,\r\n pushpinAccessible: true\r\n });\r\n Microsoft.Maps.Events.addHandler(this.map, 'click', async () => {\r\n await storeSelectorStateManager.setSelectedStoreLocationId(undefined);\r\n });\r\n this.map.getCredentials((credentials: string) => {\r\n // TODO: Need to figure out why using map session id in place of api key does not work.\r\n this.setState({ mapSessionId: credentials });\r\n });\r\n this._updateMap();\r\n }\r\n };\r\n\r\n /**\r\n * Update the map.\r\n */\r\n private readonly _updateMap = () => {\r\n const pushpinOptions = this.props.config.pushpinOptions;\r\n const storeSelectorStateManager = this.props.data.storeSelectorStateManager?.result;\r\n const orgUnitStoreInformation = storeSelectorStateManager?.context?.orgUnitStoreInformation;\r\n const selectedStoreLocationId = storeSelectorStateManager?.selectedStoreLocationId;\r\n if (this.map && orgUnitStoreInformation) {\r\n let mapLocation: OrgUnitLocation | undefined;\r\n this.map.entities.clear();\r\n // const pushpins: Microsoft.Maps.IPrimitive[] = [];\r\n const pushpins: Microsoft.Maps.Pushpin[] = [];\r\n\r\n const storeLocationList = orgUnitStoreInformation.filter(store => store.OrgUnitLocation !== undefined);\r\n\r\n for (const [index, unitStoreInfo] of storeLocationList.entries()) {\r\n const storeLocation = unitStoreInfo.OrgUnitLocation;\r\n\r\n if (storeLocation?.Latitude && storeLocation.Longitude) {\r\n const isSelectedLocation = selectedStoreLocationId === storeLocation.OrgUnitNumber;\r\n const options = this._getPushpinOptions(isSelectedLocation, index, pushpinOptions);\r\n const pushpin = new Microsoft.Maps.Pushpin(\r\n new Microsoft.Maps.Location(storeLocation.Latitude, storeLocation.Longitude),\r\n options\r\n );\r\n\r\n Microsoft.Maps.Events.addHandler(pushpin, 'click', () => {\r\n this.handleClickEvent(storeLocation.OrgUnitNumber);\r\n });\r\n isSelectedLocation ? pushpins.unshift(pushpin) : pushpins.push(pushpin);\r\n\r\n if (isSelectedLocation) {\r\n mapLocation = storeLocation;\r\n }\r\n }\r\n }\r\n\r\n if (mapLocation) {\r\n const currentLocation = new Microsoft.Maps.Location(mapLocation.Latitude, mapLocation.Longitude);\r\n this.map.setView({ center: currentLocation });\r\n } else {\r\n // Create a LocationRect from array of pushpins and set the eve-map view.\r\n this.map.setView({\r\n bounds: Microsoft.Maps.LocationRect.fromShapes(pushpins),\r\n padding: 80\r\n });\r\n }\r\n\r\n let clusterLayer;\r\n // //Load the Clustering module.\r\n Microsoft.Maps.loadModule('Microsoft.Maps.Clustering', function() {\r\n //Create a ClusterLayer and add it to the map.\r\n clusterLayer = new Microsoft.Maps.ClusterLayer(pushpins);\r\n });\r\n if (clusterLayer) {\r\n this.map.layers.insert(clusterLayer);\r\n }\r\n this.map.setOptions({ pushpinAccessible: true });\r\n // this.map.entities.push(pushpins);\r\n }\r\n };\r\n\r\n /**\r\n * Handle click event.\r\n * @param orgUnitNumber - Organization unit number.\r\n */\r\n private readonly handleClickEvent = async (orgUnitNumber: string | undefined): Promise => {\r\n const storeSelectorStateManager = this.props.data.storeSelectorStateManager.result;\r\n const currentSelectedStore = storeSelectorStateManager?.selectedStoreLocationId;\r\n if (currentSelectedStore === orgUnitNumber) {\r\n return;\r\n }\r\n if (storeSelectorStateManager && storeSelectorStateManager.context && storeSelectorStateManager.context.orgUnitStoreInformation) {\r\n storeSelectorStateManager.setSelectedStoreLocationId(undefined);\r\n // const _locations = [...storeSelectorStateManager.context.orgUnitStoreInformation];\r\n // const channel = _locations.filter(store => {\r\n // if (store.OrgUnitLocation?.OrgUnitNumber === orgUnitNumber) {\r\n // return true;\r\n // }\r\n // return false;\r\n // })[0].OrgUnitLocation?.ChannelId;\r\n // const getDealerDetailInput = new GetDealerDetailsInput(orgUnitNumber || '');\r\n\r\n // Add conditional to check to see if ContractList exists or not\r\n if (orgUnitNumber) {\r\n const dealerDetails = await getDealerDetailsAsync({ callerContext: this.props.context.actionContext }, orgUnitNumber);\r\n this.selectedDealer = dealerDetails;\r\n const tempDealerLocations = [...(this.state.newDealerLocations || [])];\r\n const index = tempDealerLocations.findIndex(loc => loc.OrgUnitLocation?.OrgUnitNumber === orgUnitNumber);\r\n if (tempDealerLocations[index].OrgUnitLocation) {\r\n tempDealerLocations[index].OrgUnitLocation!.ContractList = dealerDetails;\r\n }\r\n\r\n this.setState(prev => {\r\n return {\r\n ...prev,\r\n newDealerLocations: tempDealerLocations\r\n };\r\n });\r\n\r\n // void getDealerDetails(getDealerDetailInput, this.props.context.actionContext).then(res => {\r\n // this.selectedDealer = res.dealerDetails;\r\n // console.log(this.selectedDealer);\r\n // const tempDealerLocations = [...(this.state.newDealerLocations || [])];\r\n // tempDealerLocations.map(location => {\r\n // if (location.OrgUnitLocation?.OrgUnitNumber === orgUnitNumber) {\r\n // location.OrgUnitLocation = { ...location.OrgUnitLocation, ContractList: res.dealerDetails };\r\n // }\r\n // });\r\n // this.setState(prev => {\r\n // return {\r\n // ...prev,\r\n // newDealerLocations: tempDealerLocations\r\n // };\r\n // });\r\n // });\r\n if (orgUnitNumber) {\r\n storeSelectorStateManager?.setSelectedStoreLocationId(orgUnitNumber);\r\n }\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Method to be called on search.\r\n * @param searchTerm - Search string.\r\n */\r\n private readonly _performSearch = async (searchTerm: string): Promise => {\r\n const {\r\n context: { actionContext },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n if (!searchTerm || !storeSelectorStateManager) {\r\n return;\r\n }\r\n\r\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\r\n this.setState({ isSearchInProgress: true });\r\n\r\n await storeSelectorStateManager?.setSelectedStoreLocationId(undefined);\r\n const location = await storeSelectorStateManager.geoLocate(searchTerm.trim() !== '' ? searchTerm : '0', actionContext);\r\n if (location) {\r\n await this._updateLocations(location.latitude, location.longitude);\r\n } else {\r\n await this._updateLocations();\r\n }\r\n // eslint-disable-next-line react/no-unused-state -- State is used in the view.\r\n this.setState({ isSearchInProgress: false });\r\n };\r\n\r\n /**\r\n * Method to be called on search term changed.\r\n * @param searchTerm - Search string.\r\n */\r\n private readonly _searchTermChanged = async (searchTerm: string): Promise => {\r\n this.setState({ searchTerm });\r\n };\r\n\r\n /**\r\n * Method to update user location.\r\n * @param latitude - User location.\r\n * @param longitude - User location.\r\n * @param radius - Search Criteria Radius.\r\n * @returns Void promise.\r\n */\r\n private readonly _updateLocations = async (latitude?: number, longitude?: number, radius?: number): Promise => {\r\n const {\r\n config: { lookupRadius, searchRadiusUnit, defaultLatitudeValue, defaultLongitudeValue },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n const distanceUnitValue = searchRadiusUnit === SearchRadiusUnit.km ? 1 : 0;\r\n const lookupDistanceInMiles = lookupRadius\r\n ? distanceUnitValue\r\n ? Math.round(lookupRadius / this.kmToMiValue)\r\n : lookupRadius\r\n : this.defaultLookUpRadius;\r\n // const calRadius = radius || radius === 0 ? radius : lookupRadius || 50;\r\n\r\n let localLatitude = latitude || defaultLatitudeValue;\r\n let long = longitude || defaultLongitudeValue;\r\n\r\n const lastInlineStoreLocation = storeSelectorStateManager?.lastInlineShownStoreInfo;\r\n if (lastInlineStoreLocation && !this.state.searchTerm) {\r\n localLatitude = lastInlineStoreLocation.Latitude ? lastInlineStoreLocation.Latitude : localLatitude;\r\n long = lastInlineStoreLocation.Longitude ? lastInlineStoreLocation.Longitude : long;\r\n }\r\n await storeSelectorStateManager?.setLastInlineStoreInfo(localLatitude, long);\r\n await this.getOrgUnitLocationByArea(lookupDistanceInMiles, distanceUnitValue, localLatitude, long);\r\n return;\r\n };\r\n\r\n /**\r\n * Get org unit location by area.\r\n * @param calRadius - Radius.\r\n * @param distanceUnitValue - Distance unit value.\r\n * @param latitude - Latitude.\r\n * @param longitude - Longitude.\r\n * @returns - Returns a void promise.\r\n */\r\n private readonly getOrgUnitLocationByArea = async (\r\n calRadius: number,\r\n distanceUnitValue: number,\r\n latitude?: number,\r\n longitude?: number\r\n ): Promise => {\r\n const {\r\n context: { actionContext }\r\n } = this.props;\r\n // const orgUnitLocationsInput = new GetOrgUnitLocationsByAreaInput(latitude, longitude, calRadius, distanceUnitValue);\r\n\r\n // const orgUnitLocations = await getOrgUnitLocationsByArea(orgUnitLocationsInput, actionContext);\r\n const newOrgUnitLocationsInput = new GetDealerLocationsInput(false, latitude || 0, longitude || 0, calRadius);\r\n const newOrgUnits = await getDealerLocations(newOrgUnitLocationsInput, actionContext);\r\n // console.log(newOrgUnits);\r\n if (newOrgUnits && this.state.newDealerLocations) {\r\n // await this.updateDistances(this.state.newDealerLocations, latitude || 0, longitude || 0);\r\n // const updatedLocationsList: IFullOrgUnitAvailability[] = this.state.newDealerLocations.map((store, index) => {\r\n // const _store: IFullOrgUnitAvailability = _.cloneDeep(store);\r\n // if (\r\n // _store.OrgUnitLocation &&\r\n // _store.OrgUnitAvailability &&\r\n // _store.OrgUnitAvailability.OrgUnitLocation &&\r\n // this.state.distanceResults.resultsCoords.length > 1\r\n // ) {\r\n // const travelDistance =\r\n // this.props.config.searchRadiusUnit === 'km'\r\n // ? this.state.distanceResults.resultsCoords[index].travelDistance\r\n // : this.state.distanceResults.resultsCoords[index].travelDistance * 0.62137;\r\n // _store.OrgUnitLocation.Distance = travelDistance;\r\n // _store.OrgUnitAvailability.OrgUnitLocation.Distance = travelDistance;\r\n // }\r\n // return _store;\r\n // });\r\n void this._setOrgUnitStoreInformation(newOrgUnits).then(() => {\r\n this.setState({ newDealerLocations: [...newOrgUnits] });\r\n });\r\n }\r\n // if (orgUnitLocations && this.state.newDealerLocations) {\r\n // // await this.updateDistances(this.state.newDealerLocations, latitude || 0, longitude || 0);\r\n // const updatedLocationsList: IFullOrgUnitAvailability[] = this.state.newDealerLocations.map((store, index) => {\r\n // const _store: IFullOrgUnitAvailability = _.cloneDeep(store);\r\n // if (\r\n // _store.OrgUnitLocation &&\r\n // _store.OrgUnitAvailability &&\r\n // _store.OrgUnitAvailability.OrgUnitLocation &&\r\n // this.state.distanceResults.resultsCoords.length > 1\r\n // ) {\r\n // const travelDistance =\r\n // this.props.config.searchRadiusUnit === 'km'\r\n // ? this.state.distanceResults.resultsCoords[index].travelDistance\r\n // : this.state.distanceResults.resultsCoords[index].travelDistance * 0.62137;\r\n // _store.OrgUnitLocation.Distance = travelDistance;\r\n // _store.OrgUnitAvailability.OrgUnitLocation.Distance = travelDistance;\r\n // }\r\n // return _store;\r\n // });\r\n // await this._setOrgUnitStoreInformation(updatedLocationsList).then(() =>\r\n // this.setState({ newDealerLocations: [...updatedLocationsList] })\r\n // );\r\n // }\r\n };\r\n\r\n /**\r\n * Method to set store info.\r\n * @param orgUnitStoreInformation - Store Info Object.\r\n * @returns Void promise.\r\n */\r\n private readonly _setOrgUnitStoreInformation = async (orgUnitStoreInformation: IFullOrgUnitAvailability[]): Promise => {\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n },\r\n telemetry\r\n } = this.props;\r\n\r\n if (!storeSelectorStateManager) {\r\n return;\r\n }\r\n\r\n const context = storeSelectorStateManager.context;\r\n const moduleId: string = context?.id ? context.id : this.props.id;\r\n let input: IStoreSelectionStateContext = {\r\n /**\r\n * On Location selected.\r\n * @returns - Returns promise.\r\n */\r\n onLocationSelected: async () => {\r\n return Promise.resolve();\r\n }\r\n };\r\n\r\n if (storeSelectorStateManager.context) {\r\n input = storeSelectorStateManager.context;\r\n }\r\n\r\n // const storeLocationList = this._sortStores(orgUnitStoreInformation);\r\n input = {\r\n ...input,\r\n id: moduleId,\r\n showMapViewLink: context?.showMapViewLink,\r\n parentElementRef: context?.parentElementRef,\r\n orgUnitStoreInformation: orgUnitStoreInformation,\r\n product: context?.product\r\n };\r\n\r\n await storeSelectorStateManager.setOrgUnitStoreInformation(input).catch((error: Error) => {\r\n if (telemetry) {\r\n telemetry.error(error.message);\r\n telemetry.debug('Unable to Update store location state');\r\n }\r\n });\r\n };\r\n\r\n // /**\r\n // * Method will sort all stores.\r\n // * @param stores -Stores List.\r\n // * @param isPreferredStoreEnabled -Module config value.\r\n // * @param preferredStoreLocationId -Store Id.\r\n // * @returns List of Stores.\r\n // */\r\n // eslint-disable-next-line class-methods-use-this -- No need of introducing new variable.\r\n // private _sortStores(stores: IFullOrgUnitAvailability[]): IFullOrgUnitAvailability[] {\r\n // const {\r\n // config: { lookupRadius }\r\n // } = this.props;\r\n // const sortedStores = [...stores];\r\n // if (sortedStores.filter(store => store.OrgUnitLocation?.Distance).length > 0) {\r\n // return [\r\n // ...sortedStores\r\n // .sort((a, b) => a.OrgUnitLocation!.Distance! - b.OrgUnitLocation!.Distance!)\r\n // .filter(store => store.OrgUnitLocation!.Distance! <= lookupRadius)\r\n // ];\r\n // }\r\n // return [...sortedStores];\r\n // }\r\n\r\n // private async updateDistances(storeLocationList: IFullOrgUnitAvailability[], latitude: number, longitude: number) {\r\n // const {\r\n // distanceResults: {\r\n // originCoords: { latitude: originLat, longitude: originLon }\r\n // }\r\n // } = this.state;\r\n // if (latitude !== originLat && longitude !== originLon) {\r\n // let dealerLocationCoordsString: string = '&destinations=';\r\n // storeLocationList.map((store, index) => {\r\n // dealerLocationCoordsString += `${store.OrgUnitLocation?.Latitude},${store.OrgUnitLocation?.Longitude}`;\r\n // if (index < storeLocationList.length - 1) {\r\n // dealerLocationCoordsString += ';';\r\n // }\r\n // });\r\n // const currentLocation = `?origins=${latitude},${longitude}`;\r\n // // const apiKey = this.props.context.actionContext.requestContext.channel?.BingMapsApiKey;\r\n // const modeAndApiString = `&travelMode=driving&key=${apiKey}`;\r\n // // const modeAndApiString = `&travelMode=driving&key=${this.state.mapSessionId ? this.state.mapSessionId : apiKey}`;\r\n // // TODO: Figure out how to use the session id, does it need to be a separate id for the distance matrix?\r\n // // currently getting authorization errors when using it.\r\n\r\n // const distanceMatrixUrl = `https://dev.virtualearth.net/REST/v1/Routes/DistanceMatrix${currentLocation}${dealerLocationCoordsString}${modeAndApiString}`;\r\n\r\n // const resultsCoords = await this.getDistances(distanceMatrixUrl).then(results => {\r\n // this.setState(prev => {\r\n // return {\r\n // ...prev,\r\n // distanceResults: {\r\n // originCoords: { latitude: latitude || 0, longitude: longitude || 0 },\r\n // resultsCoords: [...results]\r\n // }\r\n // };\r\n // });\r\n // });\r\n // }\r\n\r\n // console.log('Updating distances.');\r\n // }\r\n\r\n // private async getDistances(url: string) {\r\n // try {\r\n // const response = await fetch(url);\r\n // const data = await response.json();\r\n // return data.resourceSets[0].resources[0].results;\r\n // } catch (error) {\r\n // console.log(error);\r\n // }\r\n // }\r\n\r\n /**\r\n * Get the pushpin option.\r\n * @param isSelectedLocation - Is selected location.\r\n * @param index - Index.\r\n * @param pushpinOptions - PushpinOptions.\r\n * @returns - The pushpin options.\r\n */\r\n private readonly _getPushpinOptions = (isSelectedLocation: boolean, index: number, pushpinOptions?: IPushpinOptionsData) => {\r\n const text = pushpinOptions?.showIndex ? (index + 1).toString() : undefined;\r\n\r\n const size = pushpinOptions?.size || 1;\r\n const color = isSelectedLocation ? pushpinOptions?.selectionColor || pushpinOptions?.color : pushpinOptions?.color;\r\n const icon = this._getSvgIcon(size, color, text);\r\n\r\n return {\r\n // Fallback if icon doesn't render properly\r\n color: isSelectedLocation ? pushpinOptions?.selectionColor : pushpinOptions?.color,\r\n icon\r\n };\r\n };\r\n\r\n private readonly _getSvgIcon = (size: number, color?: string, text?: string) => {\r\n const baseValue: number = 32;\r\n return `\r\n \r\n ${text ? `${text}` : ''}\r\n `;\r\n };\r\n}\r\n\r\nexport default Map;\r\n"],"sourceRoot":""}