{"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","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","MsDyn365","isBrowser","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","document","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","linksElements","querySelectorAll","console","log","l","setAttribute","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.c9016534a2dbad17587b.chunk.js","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IBusinessSignUpButtonProps {\n id?: string;\n className: string;\n text: string;\n ariaLabel: string;\n disabled?: boolean;\n link?: string;\n telemetryContent: ITelemetryContent;\n onClick?(event: React.MouseEvent): void;\n}\n\nexport const SignUpButton: React.FC = ({\n id,\n className,\n text,\n ariaLabel,\n telemetryContent,\n disabled,\n link,\n onClick\n}) => {\n const payLoad = getPayloadObject('click', telemetryContent, text);\n const attributes = getTelemetryAttributes(telemetryContent, payLoad);\n return (\n \n {text}\n \n );\n};\n\nexport default SignUpButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nexport interface IBusinessSignUpErrorProps {\n id?: string;\n className: string;\n type?: string;\n message?: string;\n}\n\nexport const SignUpError: React.FC = ({ id, className, type = 'page', message }) => {\n const errorClassName = `${className}__${type}-error`;\n\n return (\n \n

{message}

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